diff --git a/app/src/main/java/com/geeksville/mesh/repository/network/ConnectivityManager.kt b/app/src/main/java/com/geeksville/mesh/repository/network/ConnectivityManager.kt new file mode 100644 index 000000000..913ee8638 --- /dev/null +++ b/app/src/main/java/com/geeksville/mesh/repository/network/ConnectivityManager.kt @@ -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 = 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) } +} diff --git a/app/src/main/java/com/geeksville/mesh/repository/network/NetworkRepository.kt b/app/src/main/java/com/geeksville/mesh/repository/network/NetworkRepository.kt index 312777dc3..2649c98fa 100644 --- a/app/src/main/java/com/geeksville/mesh/repository/network/NetworkRepository.kt +++ b/app/src/main/java/com/geeksville/mesh/repository/network/NetworkRepository.kt @@ -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, ) : Logging { - private val availableNetworks: HashSet = HashSet() - val networkAvailable: Flow = 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>(emptyList()) val resolvedList: StateFlow> get() = _resolvedList