mirror of
https://github.com/f-droid/fdroidclient.git
synced 2026-02-15 09:33:37 -05:00
Don't assume metered network if user auto-updates apps when metered
This is meant as a low effort alternative for users who have huge or unlimited mobile data to not see the mobile data warning dialogs all the time. Later we may consider to show a "don't ask again toggle" in the dialog or a similar UX.
This commit is contained in:
@@ -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),
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user