refactor: extract ConnectivityManager methods

This commit is contained in:
andrekir
2024-01-03 08:19:46 -03:00
parent 297a97738d
commit f5dff210b0
2 changed files with 25 additions and 22 deletions

View File

@@ -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) }
}

View File

@@ -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