refactor: extract `ConnectivityManager` methods

pull/810/head
andrekir 2024-01-03 08:19:46 -03:00
rodzic 297a97738d
commit f5dff210b0
2 zmienionych plików z 25 dodań i 22 usunięć

Wyświetl plik

@ -0,0 +1,24 @@
package com.geeksville.mesh.repository.network
import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkRequest
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.callbackFlow
internal fun ConnectivityManager.networkAvailable(): Flow<Boolean> = callbackFlow {
val callback = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
trySend(allNetworks.isNotEmpty())
}
override fun onLost(network: Network) {
trySend(allNetworks.isNotEmpty())
}
}
val networkRequest = NetworkRequest.Builder().build()
registerNetworkCallback(networkRequest, callback)
awaitClose { unregisterNetworkCallback(callback) }
}

Wyświetl plik

@ -1,19 +1,14 @@
package com.geeksville.mesh.repository.network
import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkRequest
import android.net.nsd.NsdManager
import android.net.nsd.NsdServiceInfo
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.coroutineScope
import com.geeksville.mesh.android.Logging
import com.geeksville.mesh.CoroutineDispatchers
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import javax.inject.Inject
@ -27,23 +22,7 @@ class NetworkRepository @Inject constructor(
private val connectivityManager: dagger.Lazy<ConnectivityManager>,
) : Logging {
private val availableNetworks: HashSet<Network> = HashSet()
val networkAvailable: Flow<Boolean> = callbackFlow {
val callback = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
availableNetworks.add(network)
trySend(availableNetworks.isNotEmpty())
}
override fun onLost(network: Network) {
availableNetworks.remove(network)
trySend(availableNetworks.isNotEmpty())
}
}
val networkRequest = NetworkRequest.Builder().build()
connectivityManager.get().registerNetworkCallback(networkRequest, callback)
awaitClose { connectivityManager.get().unregisterNetworkCallback(callback) }
}
val networkAvailable get() = connectivityManager.get().networkAvailable()
private val _resolvedList = MutableStateFlow<List<NsdServiceInfo>>(emptyList())
val resolvedList: StateFlow<List<NsdServiceInfo>> get() = _resolvedList