Skip to content

Commit ba1d9e1

Browse files
authored
Merge pull request #716 from SimonMarquis/SimonMarquis-patch-3
Simplify handling of nullability in `ConnectivityManagerNetworkMonitor`
2 parents a4eab28 + ec9155f commit ba1d9e1

File tree

1 file changed

+25
-23
lines changed

1 file changed

+25
-23
lines changed

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

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -37,54 +37,56 @@ class ConnectivityManagerNetworkMonitor @Inject constructor(
3737
) : NetworkMonitor {
3838
override val isOnline: Flow<Boolean> = callbackFlow {
3939
val connectivityManager = context.getSystemService<ConnectivityManager>()
40+
if (connectivityManager == null) {
41+
channel.trySend(false)
42+
channel.close()
43+
return@callbackFlow
44+
}
45+
46+
/**
47+
* Sends the latest connectivity status to the underlying channel.
48+
*/
49+
fun update() {
50+
channel.trySend(connectivityManager.isCurrentlyConnected())
51+
}
4052

4153
/**
4254
* The callback's methods are invoked on changes to *any* network, not just the active
4355
* network. So to check for network connectivity, one must query the active network of the
4456
* ConnectivityManager.
4557
*/
4658
val callback = object : NetworkCallback() {
47-
override fun onAvailable(network: Network) {
48-
channel.trySend(connectivityManager.isCurrentlyConnected())
49-
}
59+
override fun onAvailable(network: Network) = update()
5060

51-
override fun onLost(network: Network) {
52-
channel.trySend(connectivityManager.isCurrentlyConnected())
53-
}
61+
override fun onLost(network: Network) = update()
5462

5563
override fun onCapabilitiesChanged(
5664
network: Network,
5765
networkCapabilities: NetworkCapabilities,
58-
) {
59-
channel.trySend(connectivityManager.isCurrentlyConnected())
60-
}
66+
) = update()
6167
}
6268

63-
connectivityManager?.registerNetworkCallback(
69+
connectivityManager.registerNetworkCallback(
6470
Builder()
6571
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
6672
.build(),
6773
callback,
6874
)
6975

70-
channel.trySend(connectivityManager.isCurrentlyConnected())
76+
update()
7177

7278
awaitClose {
73-
connectivityManager?.unregisterNetworkCallback(callback)
79+
connectivityManager.unregisterNetworkCallback(callback)
7480
}
7581
}
7682
.conflate()
7783

7884
@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-
}
85+
private fun ConnectivityManager.isCurrentlyConnected() = when {
86+
VERSION.SDK_INT >= VERSION_CODES.M ->
87+
activeNetwork
88+
?.let(::getNetworkCapabilities)
89+
?.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
90+
else -> activeNetworkInfo?.isConnected
91+
} ?: false
9092
}

0 commit comments

Comments
 (0)