Remove warnings for download service, use new standard for checking network

This commit is contained in:
Jays2Kings 2021-09-18 12:57:53 -04:00
parent fa2306a5da
commit 7f0b58156d
3 changed files with 50 additions and 36 deletions

View file

@ -5,15 +5,17 @@ import android.app.Service
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.net.ConnectivityManager import android.net.ConnectivityManager
import android.net.NetworkInfo.State.CONNECTED import android.net.Network
import android.net.NetworkInfo.State.DISCONNECTED import android.net.NetworkCapabilities
import android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET
import android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED
import android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED
import android.net.NetworkRequest
import android.os.Build import android.os.Build
import android.os.IBinder import android.os.IBinder
import android.os.PowerManager import android.os.PowerManager
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import androidx.work.NetworkType import androidx.work.NetworkType
import com.github.pwittchen.reactivenetwork.library.Connectivity
import com.github.pwittchen.reactivenetwork.library.ReactiveNetwork
import com.jakewharton.rxrelay.BehaviorRelay import com.jakewharton.rxrelay.BehaviorRelay
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.library.LibraryUpdateService import eu.kanade.tachiyomi.data.library.LibraryUpdateService
@ -24,9 +26,6 @@ import eu.kanade.tachiyomi.util.lang.plusAssign
import eu.kanade.tachiyomi.util.system.connectivityManager import eu.kanade.tachiyomi.util.system.connectivityManager
import eu.kanade.tachiyomi.util.system.isServiceRunning import eu.kanade.tachiyomi.util.system.isServiceRunning
import eu.kanade.tachiyomi.util.system.powerManager import eu.kanade.tachiyomi.util.system.powerManager
import eu.kanade.tachiyomi.util.system.toast
import rx.android.schedulers.AndroidSchedulers
import rx.schedulers.Schedulers
import rx.subscriptions.CompositeSubscription import rx.subscriptions.CompositeSubscription
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
@ -118,6 +117,27 @@ class DownloadService : Service() {
*/ */
private lateinit var subscriptions: CompositeSubscription private lateinit var subscriptions: CompositeSubscription
private val networkCallback = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
onNetworkStateChanged()
}
override fun onLost(network: Network) {
onNetworkStateChanged()
}
override fun onCapabilitiesChanged(
network: Network,
networkCapabilities: NetworkCapabilities
) {
onNetworkStateChanged()
}
override fun onUnavailable() {
onNetworkStateChanged()
}
}
/** /**
* Called when the service is created. * Called when the service is created.
*/ */
@ -137,6 +157,7 @@ class DownloadService : Service() {
override fun onDestroy() { override fun onDestroy() {
runningRelay.call(false) runningRelay.call(false)
subscriptions.unsubscribe() subscriptions.unsubscribe()
connectivityManager.unregisterNetworkCallback(networkCallback)
downloadManager.stopDownloads() downloadManager.stopDownloads()
callListeners(downloadManager.hasQueue()) callListeners(downloadManager.hasQueue())
wakeLock.releaseIfNeeded() wakeLock.releaseIfNeeded()
@ -167,41 +188,33 @@ class DownloadService : Service() {
* @see onNetworkStateChanged * @see onNetworkStateChanged
*/ */
private fun listenNetworkChanges() { private fun listenNetworkChanges() {
subscriptions += ReactiveNetwork.observeNetworkConnectivity(applicationContext) onNetworkStateChanged()
.subscribeOn(Schedulers.io()) val networkChangeFilter = NetworkRequest.Builder().build()
.observeOn(AndroidSchedulers.mainThread()) connectivityManager.registerNetworkCallback(networkChangeFilter, networkCallback)
.subscribe( return
{ state ->
onNetworkStateChanged(state)
},
{
toast(R.string.could_not_download_chapter_can_try_again)
stopSelf()
}
)
} }
/** /**
* Called when the network state changes. * Called when the network state changes.
* *
* @param connectivity the new network state.
*/ */
private fun onNetworkStateChanged(connectivity: Connectivity) { private fun onNetworkStateChanged() {
when (connectivity.state) { val manager = connectivityManager
CONNECTED -> { val networkCapabilities = manager.getNetworkCapabilities(manager.activeNetwork)
if (preferences.downloadOnlyOverWifi() && connectivityManager.activeNetworkInfo?.type != ConnectivityManager.TYPE_WIFI) { if (networkCapabilities == null || !(networkCapabilities.hasCapability(NET_CAPABILITY_INTERNET) &&
networkCapabilities.hasCapability(NET_CAPABILITY_VALIDATED))) {
downloadManager.stopDownloads(getString(R.string.no_network_connection))
return
}
if (preferences.downloadOnlyOverWifi() &&
!networkCapabilities.hasCapability(NET_CAPABILITY_NOT_METERED)
) {
downloadManager.stopDownloads(getString(R.string.no_wifi_connection)) downloadManager.stopDownloads(getString(R.string.no_wifi_connection))
} else { } else {
val started = downloadManager.startDownloads() val started = downloadManager.startDownloads()
if (!started) stopSelf() if (!started) stopSelf()
} }
} }
DISCONNECTED -> {
downloadManager.stopDownloads(getString(R.string.no_network_connection))
}
else -> { /* Do nothing */ }
}
}
/** /**
* Listens to downloader status. Enables or disables the wake lock depending on the status. * Listens to downloader status. Enables or disables the wake lock depending on the status.

View file

@ -112,7 +112,9 @@ class Downloader(
* @return true if the downloader is started, false otherwise. * @return true if the downloader is started, false otherwise.
*/ */
fun start(): Boolean { fun start(): Boolean {
if (isRunning || queue.isEmpty()) return false if (isRunning || queue.isEmpty()) {
return isRunning
}
notifier.paused = false notifier.paused = false
if (!subscriptions.hasSubscriptions()) initializeSubscriptions() if (!subscriptions.hasSubscriptions()) initializeSubscriptions()

View file

@ -859,7 +859,6 @@
<string name="nothing_is_downloading">Nothing is currently downloading</string> <string name="nothing_is_downloading">Nothing is currently downloading</string>
<string name="download_complete">Download complete</string> <string name="download_complete">Download complete</string>
<string name="download_error">Download error</string> <string name="download_error">Download error</string>
<string name="could_not_download_chapter_can_try_again">Could not download chapters. You can try again in the downloads section</string>
<string name="manage_whats_downloading">Manage what\'s downloading</string> <string name="manage_whats_downloading">Manage what\'s downloading</string>
<string name="visit_recents_for_download_queue">Visit the recents tab to access the download <string name="visit_recents_for_download_queue">Visit the recents tab to access the download
queue. You can also double tap or press and hold for quicker access</string> queue. You can also double tap or press and hold for quicker access</string>