diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/net/monitor/DefaultNetworkMonitor.kt b/mobile/src/main/java/be/mygod/vpnhotspot/net/monitor/DefaultNetworkMonitor.kt index 6cbe6661..62166999 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/net/monitor/DefaultNetworkMonitor.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/net/monitor/DefaultNetworkMonitor.kt @@ -6,8 +6,6 @@ import android.net.LinkProperties import android.net.Network import android.net.NetworkCapabilities import android.os.Build -import android.os.Handler -import android.os.Looper import be.mygod.vpnhotspot.util.Services import be.mygod.vpnhotspot.util.globalNetworkRequestBuilder import kotlinx.coroutines.GlobalScope @@ -57,9 +55,12 @@ object DefaultNetworkMonitor : UpstreamMonitor() { when (Build.VERSION.SDK_INT) { in 31..Int.MAX_VALUE -> @TargetApi(31) { Services.connectivity.registerBestMatchingNetworkCallback(networkRequest, networkCallback, - Handler(Looper.getMainLooper())) + Services.mainHandler) } - in 24..27 -> @TargetApi(24) { + in 26..27 -> @TargetApi(26) { + Services.connectivity.registerDefaultNetworkCallback(networkCallback, Services.mainHandler) + } + in 24..25 -> @TargetApi(24) { Services.connectivity.registerDefaultNetworkCallback(networkCallback) } else -> try { diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/net/monitor/InterfaceMonitor.kt b/mobile/src/main/java/be/mygod/vpnhotspot/net/monitor/InterfaceMonitor.kt index e9c9913a..81be3b7a 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/net/monitor/InterfaceMonitor.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/net/monitor/InterfaceMonitor.kt @@ -77,7 +77,7 @@ class InterfaceMonitor(private val ifaceRegex: String) : UpstreamMonitor() { callback.onAvailable(currentLinkProperties) } } else { - Services.connectivity.registerNetworkCallback(request, networkCallback) + Services.registerNetworkCallbackCompat(request, networkCallback) registered = true } } diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/net/monitor/VpnMonitor.kt b/mobile/src/main/java/be/mygod/vpnhotspot/net/monitor/VpnMonitor.kt index 880ba10b..5aced6c9 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/net/monitor/VpnMonitor.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/net/monitor/VpnMonitor.kt @@ -61,7 +61,7 @@ object VpnMonitor : UpstreamMonitor() { callback.onAvailable(currentLinkProperties) } } else { - Services.connectivity.registerNetworkCallback(request, networkCallback) + Services.registerNetworkCallbackCompat(request, networkCallback) registered = true } } diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/preference/AutoCompleteNetworkPreferenceDialogFragment.kt b/mobile/src/main/java/be/mygod/vpnhotspot/preference/AutoCompleteNetworkPreferenceDialogFragment.kt index c1ba8e30..168b8f75 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/preference/AutoCompleteNetworkPreferenceDialogFragment.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/preference/AutoCompleteNetworkPreferenceDialogFragment.kt @@ -63,7 +63,7 @@ class AutoCompleteNetworkPreferenceDialogFragment : EditTextPreferenceDialogFrag override fun onStart() { super.onStart() - Services.connectivity.registerNetworkCallback(globalNetworkRequestBuilder().apply { + Services.registerNetworkCallbackCompat(globalNetworkRequestBuilder().apply { removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED) removeCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED) removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN) diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/util/Services.kt b/mobile/src/main/java/be/mygod/vpnhotspot/util/Services.kt index 4d17d675..acb6b108 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/util/Services.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/util/Services.kt @@ -2,8 +2,12 @@ package be.mygod.vpnhotspot.util import android.content.Context import android.net.ConnectivityManager +import android.net.NetworkRequest import android.net.wifi.WifiManager import android.net.wifi.p2p.WifiP2pManager +import android.os.Build +import android.os.Handler +import android.os.Looper import androidx.core.content.getSystemService import timber.log.Timber @@ -14,6 +18,7 @@ object Services { contextInit = context } + val mainHandler by lazy { Handler(Looper.getMainLooper()) } val connectivity by lazy { context.getSystemService()!! } val p2p by lazy { try { @@ -24,4 +29,8 @@ object Services { } } val wifi by lazy { context.getSystemService()!! } + + fun registerNetworkCallbackCompat(request: NetworkRequest, networkCallback: ConnectivityManager.NetworkCallback) = + if (Build.VERSION.SDK_INT >= 26) connectivity.registerNetworkCallback(request, networkCallback, mainHandler) + else connectivity.registerNetworkCallback(request, networkCallback) }