This commit is contained in:
topjohnwu 2023-09-13 14:44:20 -07:00
parent 9aa466c773
commit 4745e86c1b
3 changed files with 16 additions and 23 deletions

View File

@ -8,6 +8,7 @@ import android.os.Bundle
import com.topjohnwu.magisk.StubApk import com.topjohnwu.magisk.StubApk
import com.topjohnwu.magisk.core.di.ServiceLocator import com.topjohnwu.magisk.core.di.ServiceLocator
import com.topjohnwu.magisk.core.utils.DispatcherExecutor import com.topjohnwu.magisk.core.utils.DispatcherExecutor
import com.topjohnwu.magisk.core.utils.NetworkObserver
import com.topjohnwu.magisk.core.utils.ProcessLifecycle import com.topjohnwu.magisk.core.utils.ProcessLifecycle
import com.topjohnwu.magisk.core.utils.RootUtils import com.topjohnwu.magisk.core.utils.RootUtils
import com.topjohnwu.magisk.core.utils.ShellInit import com.topjohnwu.magisk.core.utils.ShellInit
@ -82,6 +83,7 @@ open class App() : Application() {
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
ProcessLifecycle.init(this) ProcessLifecycle.init(this)
NetworkObserver.init(this)
} }
override fun onConfigurationChanged(newConfig: Configuration) { override fun onConfigurationChanged(newConfig: Configuration) {

View File

@ -1,13 +1,10 @@
package com.topjohnwu.magisk.core package com.topjohnwu.magisk.core
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.topjohnwu.magisk.StubApk import com.topjohnwu.magisk.StubApk
import com.topjohnwu.magisk.core.di.AppContext
import com.topjohnwu.magisk.core.ktx.getProperty import com.topjohnwu.magisk.core.ktx.getProperty
import com.topjohnwu.magisk.core.model.UpdateInfo import com.topjohnwu.magisk.core.model.UpdateInfo
import com.topjohnwu.magisk.core.repository.NetworkService import com.topjohnwu.magisk.core.repository.NetworkService
import com.topjohnwu.magisk.core.utils.NetworkObserver
import com.topjohnwu.superuser.ShellUtils.fastCmd import com.topjohnwu.superuser.ShellUtils.fastCmd
val isRunningAsStub get() = Info.stub != null val isRunningAsStub get() = Info.stub != null
@ -42,14 +39,7 @@ object Info {
getProperty("ro.kernel.qemu", "0") == "1" || getProperty("ro.kernel.qemu", "0") == "1" ||
getProperty("ro.boot.qemu", "0") == "1" getProperty("ro.boot.qemu", "0") == "1"
val isConnected: LiveData<Boolean> by lazy { val isConnected = MutableLiveData(false)
MutableLiveData(false).also { field ->
NetworkObserver.observe(AppContext) {
remote = EMPTY_REMOTE
field.postValue(it)
}
}
}
val showSuperUser: Boolean get() { val showSuperUser: Boolean get() {
return env.isActive && (Const.USER_ID == 0 return env.isActive && (Const.USER_ID == 0

View File

@ -14,14 +14,10 @@ import androidx.core.content.getSystemService
import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.ProcessLifecycleOwner import androidx.lifecycle.ProcessLifecycleOwner
import com.topjohnwu.magisk.core.Info
import com.topjohnwu.magisk.core.ktx.registerRuntimeReceiver import com.topjohnwu.magisk.core.ktx.registerRuntimeReceiver
typealias ConnectionCallback = (Boolean) -> Unit class NetworkObserver(context: Context): DefaultLifecycleObserver {
class NetworkObserver(
context: Context,
private val callback: ConnectionCallback
): DefaultLifecycleObserver {
private val manager = context.getSystemService<ConnectivityManager>()!! private val manager = context.getSystemService<ConnectivityManager>()!!
private val networkCallback = object : ConnectivityManager.NetworkCallback() { private val networkCallback = object : ConnectivityManager.NetworkCallback() {
@ -29,11 +25,11 @@ class NetworkObserver(
override fun onAvailable(network: Network) { override fun onAvailable(network: Network) {
activeList.add(network) activeList.add(network)
callback(true) postValue(true)
} }
override fun onLost(network: Network) { override fun onLost(network: Network) {
activeList.remove(network) activeList.remove(network)
callback(!activeList.isEmpty()) postValue(!activeList.isEmpty())
} }
} }
@ -45,7 +41,7 @@ class NetworkObserver(
} }
override fun onReceive(context: Context, intent: Intent) { override fun onReceive(context: Context, intent: Intent) {
if (context.isIdleMode()) { if (context.isIdleMode()) {
callback(false) postValue(false)
} else { } else {
postCurrentState() postCurrentState()
} }
@ -67,13 +63,18 @@ class NetworkObserver(
} }
private fun postCurrentState() { private fun postCurrentState() {
callback(manager.getNetworkCapabilities(manager.activeNetwork) postValue(manager.getNetworkCapabilities(manager.activeNetwork)
?.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) ?: false) ?.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) ?: false)
} }
private fun postValue(b: Boolean) {
Info.remote = Info.EMPTY_REMOTE
Info.isConnected.postValue(b)
}
companion object { companion object {
fun observe(context: Context, callback: ConnectionCallback): NetworkObserver { fun init(context: Context): NetworkObserver {
return NetworkObserver(context, callback).apply { postCurrentState() } return NetworkObserver(context).apply { postCurrentState() }
} }
} }
} }