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 c85c64932c..f7a8ea4741 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 @@ -7,7 +7,6 @@ import android.content.Intent import android.net.ConnectivityManager import android.net.Network import android.net.NetworkCapabilities -import android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED import android.net.NetworkRequest import android.os.Build import android.os.IBinder @@ -22,6 +21,7 @@ import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.extension.ExtensionUpdateJob import eu.kanade.tachiyomi.util.lang.plusAssign import eu.kanade.tachiyomi.util.system.connectivityManager +import eu.kanade.tachiyomi.util.system.isConnectedToWifi import eu.kanade.tachiyomi.util.system.isOnline import eu.kanade.tachiyomi.util.system.isServiceRunning import eu.kanade.tachiyomi.util.system.powerManager @@ -204,7 +204,7 @@ class DownloadService : Service() { downloadManager.stopDownloads(getString(R.string.no_network_connection)) return } - if (preferences.downloadOnlyOverWifi() && !networkCapabilities.hasCapability(NET_CAPABILITY_NOT_METERED)) { + if (preferences.downloadOnlyOverWifi() && !isConnectedToWifi()) { downloadManager.stopDownloads(getString(R.string.no_wifi_connection)) } else { val started = downloadManager.startDownloads() diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt index f312bf5a93..1625ec1608 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt @@ -288,6 +288,24 @@ fun Context.unregisterLocalReceiver(receiver: BroadcastReceiver) { ) } +/** + * Returns true if device is connected to Wifi. + */ +fun Context.isConnectedToWifi(): Boolean { + if (!wifiManager.isWifiEnabled) return false + + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val activeNetwork = connectivityManager.activeNetwork ?: return false + val networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork) ?: return false + + networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) && + networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + } else { + @Suppress("DEPRECATION") + wifiManager.connectionInfo.bssid != null + } +} + /** * Returns true if the given service class is running. */