From 841f58ef265df659460c73a16f25490fb9fbef32 Mon Sep 17 00:00:00 2001 From: Adetunji Dahunsi Date: Fri, 18 Nov 2022 08:00:05 -0500 Subject: [PATCH] Check active network for connectivity state each time network changes Change-Id: I5d3eb0251f62a57a5767911167067d35aeec8e6a --- .../util/ConnectivityManagerNetworkMonitor.kt | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor.kt index 9a085af05..ebfcbff3d 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor.kt +++ b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor.kt @@ -35,18 +35,30 @@ import kotlinx.coroutines.flow.conflate class ConnectivityManagerNetworkMonitor @Inject constructor( @ApplicationContext private val context: Context ) : NetworkMonitor { - override val isOnline: Flow = callbackFlow { + override val isOnline: Flow = callbackFlow { + val connectivityManager = context.getSystemService() + + /* + 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(true) + channel.trySend(connectivityManager.isCurrentlyConnected()) } override fun onLost(network: Network) { - channel.trySend(false) + channel.trySend(connectivityManager.isCurrentlyConnected()) } - } - val connectivityManager = context.getSystemService() + override fun onCapabilitiesChanged( + network: Network, + networkCapabilities: NetworkCapabilities + ) { + channel.trySend(connectivityManager.isCurrentlyConnected()) + } + } connectivityManager?.registerNetworkCallback( Builder()