refactor: improve `ConnectivityManager` extensions

pull/827/head
andrekir 2024-01-28 07:18:44 -03:00
rodzic 4a1a0dce76
commit 8709c6ba53
1 zmienionych plików z 10 dodań i 4 usunięć

Wyświetl plik

@ -6,18 +6,24 @@ import android.net.NetworkRequest
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map
internal fun ConnectivityManager.networkAvailable(): Flow<Boolean> = callbackFlow {
internal fun ConnectivityManager.networkAvailable(): Flow<Boolean> =
allNetworks().map { it.isNotEmpty() }.distinctUntilChanged()
internal fun ConnectivityManager.allNetworks(
networkRequest: NetworkRequest = NetworkRequest.Builder().build(),
): Flow<Array<Network>> = callbackFlow {
val callback = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
trySend(allNetworks.isNotEmpty())
trySend(allNetworks)
}
override fun onLost(network: Network) {
trySend(allNetworks.isNotEmpty())
trySend(allNetworks)
}
}
val networkRequest = NetworkRequest.Builder().build()
registerNetworkCallback(networkRequest, callback)
awaitClose { unregisterNetworkCallback(callback) }