Skip to content

Commit f34ee1c

Browse files
authored
Update ConnectivityManagerNetworkMonitor.kt
1 parent de6545f commit f34ee1c

File tree

1 file changed

+35
-33
lines changed

1 file changed

+35
-33
lines changed

core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor.kt

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -36,48 +36,50 @@ import javax.inject.Inject
3636
class ConnectivityManagerNetworkMonitor @Inject constructor(
3737
@ApplicationContext private val context: Context,
3838
) : NetworkMonitor {
39-
override val isOnline: Flow<Boolean> {
39+
override val isOnline: Flow<Boolean> = callbackFlow {
4040
val connectivityManager = context.getSystemService<ConnectivityManager>()
41-
?: return flowOf(false)
42-
43-
return callbackFlow {
41+
?: run {
42+
channel.trySend(false)
43+
channel.close()
44+
return@callbackFlow
45+
}
4446

45-
/**
46-
* The callback's methods are invoked on changes to *any* network, not just the active
47-
* network. So to check for network connectivity, one must query the active network of the
48-
* ConnectivityManager.
49-
*/
50-
val callback = object : NetworkCallback() {
51-
override fun onAvailable(network: Network) {
52-
channel.trySend(connectivityManager.isCurrentlyConnected())
53-
}
47+
/**
48+
* The callback's methods are invoked on changes to *any* network, not just the active
49+
* network. So to check for network connectivity, one must query the active network of the
50+
* ConnectivityManager.
51+
*/
52+
val callback = object : NetworkCallback() {
53+
override fun onAvailable(network: Network) {
54+
channel.trySend(connectivityManager.isCurrentlyConnected())
55+
}
5456

55-
override fun onLost(network: Network) {
56-
channel.trySend(connectivityManager.isCurrentlyConnected())
57-
}
57+
override fun onLost(network: Network) {
58+
channel.trySend(connectivityManager.isCurrentlyConnected())
59+
}
5860

59-
override fun onCapabilitiesChanged(
60-
network: Network,
61-
networkCapabilities: NetworkCapabilities,
62-
) {
63-
channel.trySend(connectivityManager.isCurrentlyConnected())
64-
}
61+
override fun onCapabilitiesChanged(
62+
network: Network,
63+
networkCapabilities: NetworkCapabilities,
64+
) {
65+
channel.trySend(connectivityManager.isCurrentlyConnected())
6566
}
67+
}
6668

67-
connectivityManager.registerNetworkCallback(
68-
Builder()
69-
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
70-
.build(),
71-
callback,
72-
)
69+
connectivityManager.registerNetworkCallback(
70+
Builder()
71+
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
72+
.build(),
73+
callback,
74+
)
7375

74-
channel.trySend(connectivityManager.isCurrentlyConnected())
76+
channel.trySend(connectivityManager.isCurrentlyConnected())
7577

76-
awaitClose {
77-
connectivityManager.unregisterNetworkCallback(callback)
78-
}
78+
awaitClose {
79+
connectivityManager.unregisterNetworkCallback(callback)
7980
}
80-
.conflate()
81+
}
82+
.conflate()
8183

8284
@Suppress("DEPRECATION")
8385
private fun ConnectivityManager.isCurrentlyConnected() = when {

0 commit comments

Comments
 (0)