Skip to content

Commit de6545f

Browse files
authored
Simplify handling of nullability in ConnectivityManagerNetworkMonitor
1 parent 553f55f commit de6545f

File tree

1 file changed

+41
-41
lines changed

1 file changed

+41
-41
lines changed

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

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -30,61 +30,61 @@ import kotlinx.coroutines.channels.awaitClose
3030
import kotlinx.coroutines.flow.Flow
3131
import kotlinx.coroutines.flow.callbackFlow
3232
import kotlinx.coroutines.flow.conflate
33+
import Kotlinx.coroutines.flow.flowOf
3334
import javax.inject.Inject
3435

3536
class ConnectivityManagerNetworkMonitor @Inject constructor(
3637
@ApplicationContext private val context: Context,
3738
) : NetworkMonitor {
38-
override val isOnline: Flow<Boolean> = callbackFlow {
39+
override val isOnline: Flow<Boolean> {
3940
val connectivityManager = context.getSystemService<ConnectivityManager>()
41+
?: return flowOf(false)
4042

41-
/**
42-
* The callback's methods are invoked on changes to *any* network, not just the active
43-
* network. So to check for network connectivity, one must query the active network of the
44-
* ConnectivityManager.
45-
*/
46-
val callback = object : NetworkCallback() {
47-
override fun onAvailable(network: Network) {
48-
channel.trySend(connectivityManager.isCurrentlyConnected())
49-
}
43+
return callbackFlow {
5044

51-
override fun onLost(network: Network) {
52-
channel.trySend(connectivityManager.isCurrentlyConnected())
53-
}
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+
}
54+
55+
override fun onLost(network: Network) {
56+
channel.trySend(connectivityManager.isCurrentlyConnected())
57+
}
5458

55-
override fun onCapabilitiesChanged(
56-
network: Network,
57-
networkCapabilities: NetworkCapabilities,
58-
) {
59-
channel.trySend(connectivityManager.isCurrentlyConnected())
59+
override fun onCapabilitiesChanged(
60+
network: Network,
61+
networkCapabilities: NetworkCapabilities,
62+
) {
63+
channel.trySend(connectivityManager.isCurrentlyConnected())
64+
}
6065
}
61-
}
6266

63-
connectivityManager?.registerNetworkCallback(
64-
Builder()
65-
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
66-
.build(),
67-
callback,
68-
)
67+
connectivityManager.registerNetworkCallback(
68+
Builder()
69+
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
70+
.build(),
71+
callback,
72+
)
6973

70-
channel.trySend(connectivityManager.isCurrentlyConnected())
74+
channel.trySend(connectivityManager.isCurrentlyConnected())
7175

72-
awaitClose {
73-
connectivityManager?.unregisterNetworkCallback(callback)
76+
awaitClose {
77+
connectivityManager.unregisterNetworkCallback(callback)
78+
}
7479
}
75-
}
76-
.conflate()
80+
.conflate()
7781

7882
@Suppress("DEPRECATION")
79-
private fun ConnectivityManager?.isCurrentlyConnected() = when (this) {
80-
null -> false
81-
else -> when {
82-
VERSION.SDK_INT >= VERSION_CODES.M ->
83-
activeNetwork
84-
?.let(::getNetworkCapabilities)
85-
?.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
86-
?: false
87-
else -> activeNetworkInfo?.isConnected ?: false
88-
}
89-
}
83+
private fun ConnectivityManager.isCurrentlyConnected() = when {
84+
VERSION.SDK_INT >= VERSION_CODES.M ->
85+
activeNetwork
86+
?.let(::getNetworkCapabilities)
87+
?.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
88+
else -> activeNetworkInfo?.isConnected
89+
} ?: false
9090
}

0 commit comments

Comments
 (0)