Simplify handling of nullability in `ConnectivityManagerNetworkMonitor`

pull/1837/head
Simon Marquis 2 years ago committed by GitHub
parent 7d5d553923
commit 5e33c57144

@ -30,13 +30,17 @@ import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.flow.conflate
import Kotlinx.coroutines.flow.flowOf
import javax.inject.Inject import javax.inject.Inject
class ConnectivityManagerNetworkMonitor @Inject constructor( class ConnectivityManagerNetworkMonitor @Inject constructor(
@ApplicationContext private val context: Context, @ApplicationContext private val context: Context,
) : NetworkMonitor { ) : NetworkMonitor {
override val isOnline: Flow<Boolean> = callbackFlow { override val isOnline: Flow<Boolean> {
val connectivityManager = context.getSystemService<ConnectivityManager>() val connectivityManager = context.getSystemService<ConnectivityManager>()
?: return flowOf(false)
return callbackFlow {
/** /**
* The callback's methods are invoked on changes to *any* network, not just the active * The callback's methods are invoked on changes to *any* network, not just the active
@ -60,7 +64,7 @@ class ConnectivityManagerNetworkMonitor @Inject constructor(
} }
} }
connectivityManager?.registerNetworkCallback( connectivityManager.registerNetworkCallback(
Builder() Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.build(), .build(),
@ -70,21 +74,17 @@ class ConnectivityManagerNetworkMonitor @Inject constructor(
channel.trySend(connectivityManager.isCurrentlyConnected()) channel.trySend(connectivityManager.isCurrentlyConnected())
awaitClose { awaitClose {
connectivityManager?.unregisterNetworkCallback(callback) connectivityManager.unregisterNetworkCallback(callback)
} }
} }
.conflate() .conflate()
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
private fun ConnectivityManager?.isCurrentlyConnected() = when (this) { private fun ConnectivityManager.isCurrentlyConnected() = when {
null -> false
else -> when {
VERSION.SDK_INT >= VERSION_CODES.M -> VERSION.SDK_INT >= VERSION_CODES.M ->
activeNetwork activeNetwork
?.let(::getNetworkCapabilities) ?.let(::getNetworkCapabilities)
?.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) ?.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
?: false else -> activeNetworkInfo?.isConnected
else -> activeNetworkInfo?.isConnected ?: false } ?: false
}
}
} }

Loading…
Cancel
Save