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.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,41 +188,33 @@ 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) {
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()
}
}
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.

View file

@ -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()

View file

@ -859,7 +859,6 @@
<string name="nothing_is_downloading">Nothing is currently downloading</string>
<string name="download_complete">Download complete</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="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>