Extract common code to update the Flow value

pull/716/head
Simon Marquis 2 years ago committed by GitHub
parent def5c4e881
commit 7819a0c6bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -37,32 +37,33 @@ class ConnectivityManagerNetworkMonitor @Inject constructor(
) : NetworkMonitor {
override val isOnline: Flow<Boolean> = callbackFlow {
val connectivityManager = context.getSystemService<ConnectivityManager>()
?: run {
if (connectivityManager == null) {
channel.trySend(false)
channel.close()
return@callbackFlow
}
/**
* Sends the latest connectivity status to the underlying channel.
*/
fun update() {
channel.trySend(connectivityManager.isCurrentlyConnected())
}
/**
* The callback's methods are invoked on changes to *any* network, not just the active
* network. So to check for network connectivity, one must query the active network of the
* ConnectivityManager.
*/
val callback = object : NetworkCallback() {
override fun onAvailable(network: Network) {
channel.trySend(connectivityManager.isCurrentlyConnected())
}
override fun onAvailable(network: Network) = update()
override fun onLost(network: Network) {
channel.trySend(connectivityManager.isCurrentlyConnected())
}
override fun onLost(network: Network) = update()
override fun onCapabilitiesChanged(
network: Network,
networkCapabilities: NetworkCapabilities,
) {
channel.trySend(connectivityManager.isCurrentlyConnected())
}
) = update()
}
connectivityManager.registerNetworkCallback(
@ -72,7 +73,7 @@ class ConnectivityManagerNetworkMonitor @Inject constructor(
callback,
)
channel.trySend(connectivityManager.isCurrentlyConnected())
update()
awaitClose {
connectivityManager.unregisterNetworkCallback(callback)

Loading…
Cancel
Save