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 package com.geeksville.mesh.repository.network
import android.net.ConnectivityManager import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkRequest
import android.net.nsd.NsdManager import android.net.nsd.NsdManager
import android.net.nsd.NsdServiceInfo import android.net.nsd.NsdServiceInfo
import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle
import androidx.lifecycle.coroutineScope import androidx.lifecycle.coroutineScope
import com.geeksville.mesh.android.Logging import com.geeksville.mesh.android.Logging
import com.geeksville.mesh.CoroutineDispatchers import com.geeksville.mesh.CoroutineDispatchers
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import javax.inject.Inject import javax.inject.Inject
@ -27,23 +22,7 @@ class NetworkRepository @Inject constructor(
private val connectivityManager: dagger.Lazy<ConnectivityManager>, private val connectivityManager: dagger.Lazy<ConnectivityManager>,
) : Logging { ) : Logging {
private val availableNetworks: HashSet<Network> = HashSet() val networkAvailable get() = connectivityManager.get().networkAvailable()
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) }
}
private val _resolvedList = MutableStateFlow<List<NsdServiceInfo>>(emptyList()) private val _resolvedList = MutableStateFlow<List<NsdServiceInfo>>(emptyList())
val resolvedList: StateFlow<List<NsdServiceInfo>> get() = _resolvedList val resolvedList: StateFlow<List<NsdServiceInfo>> get() = _resolvedList