Use main thread for callback and add registerNetworkCallbackCompat

This commit is contained in:
Mygod
2021-09-05 12:47:47 +08:00
parent 2856ad2080
commit e35e586327
5 changed files with 17 additions and 7 deletions

View File

@@ -6,8 +6,6 @@ import android.net.LinkProperties
import android.net.Network import android.net.Network
import android.net.NetworkCapabilities import android.net.NetworkCapabilities
import android.os.Build import android.os.Build
import android.os.Handler
import android.os.Looper
import be.mygod.vpnhotspot.util.Services import be.mygod.vpnhotspot.util.Services
import be.mygod.vpnhotspot.util.globalNetworkRequestBuilder import be.mygod.vpnhotspot.util.globalNetworkRequestBuilder
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
@@ -57,9 +55,12 @@ object DefaultNetworkMonitor : UpstreamMonitor() {
when (Build.VERSION.SDK_INT) { when (Build.VERSION.SDK_INT) {
in 31..Int.MAX_VALUE -> @TargetApi(31) { in 31..Int.MAX_VALUE -> @TargetApi(31) {
Services.connectivity.registerBestMatchingNetworkCallback(networkRequest, networkCallback, 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) Services.connectivity.registerDefaultNetworkCallback(networkCallback)
} }
else -> try { else -> try {

View File

@@ -77,7 +77,7 @@ class InterfaceMonitor(private val ifaceRegex: String) : UpstreamMonitor() {
callback.onAvailable(currentLinkProperties) callback.onAvailable(currentLinkProperties)
} }
} else { } else {
Services.connectivity.registerNetworkCallback(request, networkCallback) Services.registerNetworkCallbackCompat(request, networkCallback)
registered = true registered = true
} }
} }

View File

@@ -61,7 +61,7 @@ object VpnMonitor : UpstreamMonitor() {
callback.onAvailable(currentLinkProperties) callback.onAvailable(currentLinkProperties)
} }
} else { } else {
Services.connectivity.registerNetworkCallback(request, networkCallback) Services.registerNetworkCallbackCompat(request, networkCallback)
registered = true registered = true
} }
} }

View File

@@ -63,7 +63,7 @@ class AutoCompleteNetworkPreferenceDialogFragment : EditTextPreferenceDialogFrag
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
Services.connectivity.registerNetworkCallback(globalNetworkRequestBuilder().apply { Services.registerNetworkCallbackCompat(globalNetworkRequestBuilder().apply {
removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED) removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
removeCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED) removeCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED)
removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN) removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)

View File

@@ -2,8 +2,12 @@ package be.mygod.vpnhotspot.util
import android.content.Context import android.content.Context
import android.net.ConnectivityManager import android.net.ConnectivityManager
import android.net.NetworkRequest
import android.net.wifi.WifiManager import android.net.wifi.WifiManager
import android.net.wifi.p2p.WifiP2pManager import android.net.wifi.p2p.WifiP2pManager
import android.os.Build
import android.os.Handler
import android.os.Looper
import androidx.core.content.getSystemService import androidx.core.content.getSystemService
import timber.log.Timber import timber.log.Timber
@@ -14,6 +18,7 @@ object Services {
contextInit = context contextInit = context
} }
val mainHandler by lazy { Handler(Looper.getMainLooper()) }
val connectivity by lazy { context.getSystemService<ConnectivityManager>()!! } val connectivity by lazy { context.getSystemService<ConnectivityManager>()!! }
val p2p by lazy { val p2p by lazy {
try { try {
@@ -24,4 +29,8 @@ object Services {
} }
} }
val wifi by lazy { context.getSystemService<WifiManager>()!! } val wifi by lazy { context.getSystemService<WifiManager>()!! }
fun registerNetworkCallbackCompat(request: NetworkRequest, networkCallback: ConnectivityManager.NetworkCallback) =
if (Build.VERSION.SDK_INT >= 26) connectivity.registerNetworkCallback(request, networkCallback, mainHandler)
else connectivity.registerNetworkCallback(request, networkCallback)
} }