@@ -36,48 +36,50 @@ import javax.inject.Inject
3636class 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