Network Connectivity Manager checks for internet capability to be valid

This tests that internet connection is up and running, avoiding cases
such as having an active VPN connection with no internet access to
result as having connectivity.

MAILAND-3074
This commit is contained in:
Marino Meneghel 2023-04-25 16:39:22 +02:00 committed by Zorica Stojchevska
parent fdf390c197
commit 24798d9fba
1 changed files with 9 additions and 3 deletions

View File

@ -23,6 +23,7 @@ import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET
import android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED
import android.net.NetworkRequest
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.delay
@ -42,8 +43,10 @@ class NetworkConnectivityManager @Inject constructor(
) {
fun isInternetConnectionPossible(): Boolean {
val capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
return capabilities?.hasCapability(NET_CAPABILITY_INTERNET) == true
return connectivityManager.allNetworks.any { network ->
val capabilities = connectivityManager.getNetworkCapabilities(network)
capabilities.hasVerifiedInternet()
}
}
/**
@ -73,7 +76,7 @@ class NetworkConnectivityManager @Inject constructor(
network: Network,
networkCapabilities: NetworkCapabilities
) {
if (networkCapabilities.hasCapability(NET_CAPABILITY_INTERNET)) {
if (networkCapabilities.hasVerifiedInternet()) {
Timber.v("Network $network has internet capability")
trySend(Constants.ConnectionState.CONNECTED)
}
@ -92,4 +95,7 @@ class NetworkConnectivityManager @Inject constructor(
return connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
?.hasTransport(NetworkCapabilities.TRANSPORT_VPN) ?: false
}
private fun NetworkCapabilities?.hasVerifiedInternet(): Boolean =
this?.hasCapability(NET_CAPABILITY_INTERNET) == true && this.hasCapability(NET_CAPABILITY_VALIDATED)
}