diff --git a/app/src/main/kotlin/org/fdroid/download/NetworkMonitor.kt b/app/src/main/kotlin/org/fdroid/download/NetworkMonitor.kt index 305346fc6..12883f60a 100644 --- a/app/src/main/kotlin/org/fdroid/download/NetworkMonitor.kt +++ b/app/src/main/kotlin/org/fdroid/download/NetworkMonitor.kt @@ -10,19 +10,23 @@ import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update +import org.fdroid.settings.SettingsConstants.AutoUpdateValues +import org.fdroid.settings.SettingsManager import javax.inject.Inject import javax.inject.Singleton @Singleton class NetworkMonitor @Inject constructor( @param:ApplicationContext private val context: Context, + private val settingsManager: SettingsManager, ) : ConnectivityManager.NetworkCallback() { private val connectivityManager = context.getSystemService(ConnectivityManager::class.java) as ConnectivityManager + private val neverMetered get() = settingsManager.autoUpdateApps == AutoUpdateValues.Always private val _networkState = MutableStateFlow( connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)?.let { - NetworkState(it) + NetworkState(it, neverMetered) } ?: NetworkState(isOnline = false, isMetered = false) ) val networkState = _networkState.asStateFlow() @@ -37,7 +41,7 @@ class NetworkMonitor @Inject constructor( } override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) { - _networkState.update { NetworkState(networkCapabilities) } + _networkState.update { NetworkState(networkCapabilities, neverMetered) } } override fun onLost(network: Network) { @@ -49,8 +53,9 @@ data class NetworkState( val isOnline: Boolean, val isMetered: Boolean, ) { - constructor(networkCapabilities: NetworkCapabilities) : this( + constructor(networkCapabilities: NetworkCapabilities, neverMetered: Boolean) : this( isOnline = networkCapabilities.hasCapability(NET_CAPABILITY_INTERNET), - isMetered = !networkCapabilities.hasCapability(NET_CAPABILITY_NOT_METERED), + isMetered = if (neverMetered) false + else !networkCapabilities.hasCapability(NET_CAPABILITY_NOT_METERED), ) }