From 7f0b58156d0bbbba142667f35ee1031b3909b27d Mon Sep 17 00:00:00 2001 From: Jays2Kings Date: Sat, 18 Sep 2021 12:57:53 -0400 Subject: [PATCH] Remove warnings for download service, use new standard for checking network --- .../data/download/DownloadService.kt | 81 +++++++++++-------- .../tachiyomi/data/download/Downloader.kt | 4 +- app/src/main/res/values/strings.xml | 1 - 3 files changed, 50 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt index 3f955a768f..914e8d1c0b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt @@ -5,15 +5,17 @@ import android.app.Service import android.content.Context import android.content.Intent import android.net.ConnectivityManager -import android.net.NetworkInfo.State.CONNECTED -import android.net.NetworkInfo.State.DISCONNECTED +import android.net.Network +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.IBinder import android.os.PowerManager import androidx.core.app.NotificationCompat import androidx.work.NetworkType -import com.github.pwittchen.reactivenetwork.library.Connectivity -import com.github.pwittchen.reactivenetwork.library.ReactiveNetwork import com.jakewharton.rxrelay.BehaviorRelay import eu.kanade.tachiyomi.R 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.isServiceRunning 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 uy.kohesive.injekt.injectLazy @@ -118,6 +117,27 @@ class DownloadService : Service() { */ 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. */ @@ -137,6 +157,7 @@ class DownloadService : Service() { override fun onDestroy() { runningRelay.call(false) subscriptions.unsubscribe() + connectivityManager.unregisterNetworkCallback(networkCallback) downloadManager.stopDownloads() callListeners(downloadManager.hasQueue()) wakeLock.releaseIfNeeded() @@ -167,39 +188,31 @@ class DownloadService : Service() { * @see onNetworkStateChanged */ private fun listenNetworkChanges() { - subscriptions += ReactiveNetwork.observeNetworkConnectivity(applicationContext) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe( - { state -> - onNetworkStateChanged(state) - }, - { - toast(R.string.could_not_download_chapter_can_try_again) - stopSelf() - } - ) + onNetworkStateChanged() + val networkChangeFilter = NetworkRequest.Builder().build() + connectivityManager.registerNetworkCallback(networkChangeFilter, networkCallback) + return } /** * Called when the network state changes. * - * @param connectivity the new network state. */ - private fun onNetworkStateChanged(connectivity: Connectivity) { - when (connectivity.state) { - CONNECTED -> { - if (preferences.downloadOnlyOverWifi() && connectivityManager.activeNetworkInfo?.type != ConnectivityManager.TYPE_WIFI) { - downloadManager.stopDownloads(getString(R.string.no_wifi_connection)) - } else { - val started = downloadManager.startDownloads() - if (!started) stopSelf() - } - } - DISCONNECTED -> { - downloadManager.stopDownloads(getString(R.string.no_network_connection)) - } - else -> { /* Do nothing */ } + private fun onNetworkStateChanged() { + val manager = connectivityManager + val networkCapabilities = manager.getNetworkCapabilities(manager.activeNetwork) + 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)) + } else { + val started = downloadManager.startDownloads() + if (!started) stopSelf() } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt index 4fa70dd590..cf1df661a0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt @@ -112,7 +112,9 @@ class Downloader( * @return true if the downloader is started, false otherwise. */ fun start(): Boolean { - if (isRunning || queue.isEmpty()) return false + if (isRunning || queue.isEmpty()) { + return isRunning + } notifier.paused = false if (!subscriptions.hasSubscriptions()) initializeSubscriptions() diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 77d0404653..4df30333a1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -859,7 +859,6 @@ Nothing is currently downloading Download complete Download error - Could not download chapters. You can try again in the downloads section Manage what\'s downloading Visit the recents tab to access the download queue. You can also double tap or press and hold for quicker access