pull/2095/merge
Jaehwa Noh 1 week ago committed by GitHub
commit 9fe0e53df8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -23,6 +23,7 @@ import android.net.Network
import android.net.NetworkCapabilities import android.net.NetworkCapabilities
import android.net.NetworkRequest import android.net.NetworkRequest
import android.net.NetworkRequest.Builder import android.net.NetworkRequest.Builder
import android.os.Build
import androidx.core.content.getSystemService import androidx.core.content.getSystemService
import androidx.tracing.trace import androidx.tracing.trace
import com.google.samples.apps.nowinandroid.core.common.network.Dispatcher import com.google.samples.apps.nowinandroid.core.common.network.Dispatcher
@ -58,21 +59,43 @@ internal class ConnectivityManagerNetworkMonitor @Inject constructor(
private val networks = mutableSetOf<Network>() private val networks = mutableSetOf<Network>()
override fun onAvailable(network: Network) { override fun onAvailable(network: Network) {
networks += network if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
networks += network
}
channel.trySend(true) channel.trySend(true)
} }
override fun onLost(network: Network) { override fun onLost(network: Network) {
networks -= network if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
channel.trySend(networks.isNotEmpty()) channel.trySend(false)
} else {
networks -= network
channel.trySend(networks.isNotEmpty())
}
}
override fun onCapabilitiesChanged(
network: Network,
networkCapabilities: NetworkCapabilities,
) {
super.onCapabilitiesChanged(network, networkCapabilities)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
val isNetworkConnected = networkCapabilities.isNetworkConnected()
channel.trySend(isNetworkConnected)
}
} }
} }
trace("NetworkMonitor.registerNetworkCallback") { trace("NetworkMonitor.registerNetworkCallback") {
val request = Builder() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) connectivityManager.registerDefaultNetworkCallback(callback)
.build() } else {
connectivityManager.registerNetworkCallback(request, callback) val request = Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.build()
connectivityManager.registerNetworkCallback(request, callback)
}
} }
/** /**
@ -90,6 +113,14 @@ internal class ConnectivityManagerNetworkMonitor @Inject constructor(
private fun ConnectivityManager.isCurrentlyConnected(): Boolean { private fun ConnectivityManager.isCurrentlyConnected(): Boolean {
val networkCapabilities = getNetworkCapabilities(activeNetwork) ?: return false val networkCapabilities = getNetworkCapabilities(activeNetwork) ?: return false
return networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) return networkCapabilities.isNetworkConnected()
} }
/**
* Check [NetworkCapabilities.NET_CAPABILITY_INTERNET]
* and [NetworkCapabilities.NET_CAPABILITY_VALIDATED]
*/
private fun NetworkCapabilities.isNetworkConnected(): Boolean =
hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) &&
hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
} }

Loading…
Cancel
Save