diff --git a/app/src/main/java/com/topjohnwu/magisk/arch/UIActivity.kt b/app/src/main/java/com/topjohnwu/magisk/arch/UIActivity.kt index acc6b209d..c40f15fb5 100644 --- a/app/src/main/java/com/topjohnwu/magisk/arch/UIActivity.kt +++ b/app/src/main/java/com/topjohnwu/magisk/arch/UIActivity.kt @@ -14,7 +14,6 @@ import com.google.android.material.snackbar.Snackbar import com.topjohnwu.magisk.BR import com.topjohnwu.magisk.core.Config import com.topjohnwu.magisk.core.base.BaseActivity -import com.topjohnwu.magisk.widget.Pre23CardViewBackgroundColorFixLayoutInflaterListener import rikka.insets.WindowInsetsHelper import rikka.layoutinflater.view.LayoutInflaterFactory @@ -35,11 +34,6 @@ abstract class UIActivity : BaseActivity(), ViewModel override fun onCreate(savedInstanceState: Bundle?) { layoutInflater.factory2 = LayoutInflaterFactory(delegate) .addOnViewCreatedListener(WindowInsetsHelper.LISTENER) - .apply { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - this.addOnViewCreatedListener(Pre23CardViewBackgroundColorFixLayoutInflaterListener.getInstance()) - } - } super.onCreate(savedInstanceState) diff --git a/app/src/main/java/com/topjohnwu/magisk/core/Info.kt b/app/src/main/java/com/topjohnwu/magisk/core/Info.kt index af1271c79..5aa8b1fc4 100644 --- a/app/src/main/java/com/topjohnwu/magisk/core/Info.kt +++ b/app/src/main/java/com/topjohnwu/magisk/core/Info.kt @@ -7,7 +7,7 @@ import com.topjohnwu.magisk.StubApk import com.topjohnwu.magisk.core.di.AppContext import com.topjohnwu.magisk.core.model.UpdateInfo import com.topjohnwu.magisk.core.repository.NetworkService -import com.topjohnwu.magisk.core.utils.net.NetworkObserver +import com.topjohnwu.magisk.core.utils.NetworkObserver import com.topjohnwu.magisk.ktx.getProperty import com.topjohnwu.superuser.ShellUtils.fastCmd diff --git a/app/src/main/java/com/topjohnwu/magisk/core/base/BaseActivity.kt b/app/src/main/java/com/topjohnwu/magisk/core/base/BaseActivity.kt index 6549e46d2..90caba970 100644 --- a/app/src/main/java/com/topjohnwu/magisk/core/base/BaseActivity.kt +++ b/app/src/main/java/com/topjohnwu/magisk/core/base/BaseActivity.kt @@ -1,6 +1,8 @@ package com.topjohnwu.magisk.core.base -import android.Manifest.permission.* +import android.Manifest.permission.POST_NOTIFICATIONS +import android.Manifest.permission.REQUEST_INSTALL_PACKAGES +import android.Manifest.permission.WRITE_EXTERNAL_STORAGE import android.app.Activity import android.content.ActivityNotFoundException import android.content.Context @@ -53,9 +55,7 @@ abstract class BaseActivity : AppCompatActivity() { val realCallingPackage: String? get() { callingPackage?.let { return it } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { - mReferrerField.get(this)?.let { return it as String } - } + mReferrerField.get(this)?.let { return it as String } return null } diff --git a/app/src/main/java/com/topjohnwu/magisk/core/utils/NetworkObserver.kt b/app/src/main/java/com/topjohnwu/magisk/core/utils/NetworkObserver.kt new file mode 100644 index 000000000..1793edc89 --- /dev/null +++ b/app/src/main/java/com/topjohnwu/magisk/core/utils/NetworkObserver.kt @@ -0,0 +1,70 @@ +package com.topjohnwu.magisk.core.utils + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.net.ConnectivityManager +import android.net.Network +import android.net.NetworkCapabilities +import android.net.NetworkRequest +import android.os.PowerManager +import androidx.collection.ArraySet +import androidx.core.content.getSystemService +import com.topjohnwu.magisk.ktx.registerRuntimeReceiver + +typealias ConnectionCallback = (Boolean) -> Unit + +class NetworkObserver( + context: Context, + private val callback: ConnectionCallback +) { + private val manager = context.getSystemService()!! + + private val networkCallback = object : ConnectivityManager.NetworkCallback() { + private val activeList = ArraySet() + + override fun onAvailable(network: Network) { + activeList.add(network) + callback(true) + } + override fun onLost(network: Network) { + activeList.remove(network) + callback(!activeList.isEmpty()) + } + } + + private val receiver = object : BroadcastReceiver() { + private fun Context.isIdleMode(): Boolean { + val pwm = getSystemService() ?: return true + val isIgnoringOptimizations = pwm.isIgnoringBatteryOptimizations(packageName) + return pwm.isDeviceIdleMode && !isIgnoringOptimizations + } + override fun onReceive(context: Context, intent: Intent) { + if (context.isIdleMode()) { + callback(false) + } else { + getCurrentState() + } + } + } + + init { + val builder = NetworkRequest.Builder() + builder.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) + manager.registerNetworkCallback(builder.build(), networkCallback) + val filter = IntentFilter(PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED) + context.applicationContext.registerRuntimeReceiver(receiver, filter) + } + + fun getCurrentState() { + callback(manager.getNetworkCapabilities(manager.activeNetwork) + ?.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) ?: false) + } + + companion object { + fun observe(context: Context, callback: ConnectionCallback): NetworkObserver { + return NetworkObserver(context, callback).apply { getCurrentState() } + } + } +} diff --git a/app/src/main/java/com/topjohnwu/magisk/core/utils/net/LollipopNetworkObserver.kt b/app/src/main/java/com/topjohnwu/magisk/core/utils/net/LollipopNetworkObserver.kt deleted file mode 100644 index 6de99b2a6..000000000 --- a/app/src/main/java/com/topjohnwu/magisk/core/utils/net/LollipopNetworkObserver.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.topjohnwu.magisk.core.utils.net - -import android.content.Context -import android.net.ConnectivityManager -import android.net.Network -import android.net.NetworkCapabilities -import android.net.NetworkRequest -import android.os.Build -import androidx.collection.ArraySet - -open class LollipopNetworkObserver( - context: Context, - callback: ConnectionCallback -): NetworkObserver(context, callback) { - - private val networkCallback = NetCallback() - - init { - val builder = NetworkRequest.Builder() - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - builder.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) - } else { - builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - } - manager.registerNetworkCallback(builder.build(), networkCallback) - } - - @Suppress("DEPRECATION") - override fun getCurrentState() { - callback(manager.activeNetworkInfo?.isConnected ?: false) - } - - override fun stopObserving() { - manager.unregisterNetworkCallback(networkCallback) - } - - private inner class NetCallback : ConnectivityManager.NetworkCallback() { - - private val activeList = ArraySet() - - override fun onAvailable(network: Network) { - activeList.add(network) - callback(true) - } - - override fun onLost(network: Network) { - activeList.remove(network) - callback(!activeList.isEmpty()) - } - } -} diff --git a/app/src/main/java/com/topjohnwu/magisk/core/utils/net/MarshmallowNetworkObserver.kt b/app/src/main/java/com/topjohnwu/magisk/core/utils/net/MarshmallowNetworkObserver.kt deleted file mode 100644 index 62b5baf3b..000000000 --- a/app/src/main/java/com/topjohnwu/magisk/core/utils/net/MarshmallowNetworkObserver.kt +++ /dev/null @@ -1,52 +0,0 @@ -package com.topjohnwu.magisk.core.utils.net - -import android.annotation.TargetApi -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.content.IntentFilter -import android.net.NetworkCapabilities -import android.os.PowerManager -import androidx.core.content.getSystemService -import com.topjohnwu.magisk.ktx.registerRuntimeReceiver - -@TargetApi(23) -class MarshmallowNetworkObserver( - context: Context, - callback: ConnectionCallback -): LollipopNetworkObserver(context, callback) { - - private val receiver = IdleBroadcastReceiver() - - init { - val filter = IntentFilter(PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED) - app.registerRuntimeReceiver(receiver, filter) - } - - override fun stopObserving() { - super.stopObserving() - app.unregisterReceiver(receiver) - } - - override fun getCurrentState() { - callback(manager.getNetworkCapabilities(manager.activeNetwork) - ?.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) ?: false) - } - - private inner class IdleBroadcastReceiver: BroadcastReceiver() { - - private fun Context.isIdleMode(): Boolean { - val pwm = getSystemService() ?: return true - val isIgnoringOptimizations = pwm.isIgnoringBatteryOptimizations(packageName) - return pwm.isDeviceIdleMode && !isIgnoringOptimizations - } - - override fun onReceive(context: Context, intent: Intent) { - if (context.isIdleMode()) { - callback(false) - } else { - getCurrentState() - } - } - } -} diff --git a/app/src/main/java/com/topjohnwu/magisk/core/utils/net/NetworkObserver.kt b/app/src/main/java/com/topjohnwu/magisk/core/utils/net/NetworkObserver.kt deleted file mode 100644 index 132cb5ee4..000000000 --- a/app/src/main/java/com/topjohnwu/magisk/core/utils/net/NetworkObserver.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.topjohnwu.magisk.core.utils.net - -import android.content.Context -import android.net.ConnectivityManager -import android.os.Build -import androidx.core.content.getSystemService - -typealias ConnectionCallback = (Boolean) -> Unit - -abstract class NetworkObserver( - context: Context, - protected val callback: ConnectionCallback -) { - - protected val app: Context = context.applicationContext - protected val manager = context.getSystemService()!! - - protected abstract fun stopObserving() - protected abstract fun getCurrentState() - - companion object { - fun observe(context: Context, callback: ConnectionCallback): NetworkObserver { - val observer: NetworkObserver = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) - MarshmallowNetworkObserver(context, callback) - else LollipopNetworkObserver(context, callback) - return observer.apply { getCurrentState() } - } - } -} diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsViewModel.kt index 0cf6c1377..0a74bd063 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsViewModel.kt @@ -53,8 +53,7 @@ class SettingsViewModel : BaseViewModel(), BaseSettingsItem.Handler { AppSettings, UpdateChannel, UpdateChannelUrl, DoHToggle, UpdateChecker, DownloadPath )) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1 && - Info.env.isActive && Const.USER_ID == 0) { + if (Info.env.isActive && Const.USER_ID == 0) { if (hidden) list.add(Restore) else list.add(Hide) } @@ -76,10 +75,6 @@ class SettingsViewModel : BaseViewModel(), BaseSettingsItem.Handler { Tapjack, Biometrics, AccessMode, MultiuserMode, MountNamespaceMode, AutomaticResponse, RequestTimeout, SUNotification )) - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - // Biometric is only available on 6.0+ - list.remove(Biometrics) - } if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { // Re-authenticate is not feasible on 8.0+ list.add(Reauthenticate) diff --git a/app/src/main/java/com/topjohnwu/magisk/view/Shortcuts.kt b/app/src/main/java/com/topjohnwu/magisk/view/Shortcuts.kt index 98cbd08f5..029edc304 100644 --- a/app/src/main/java/com/topjohnwu/magisk/view/Shortcuts.kt +++ b/app/src/main/java/com/topjohnwu/magisk/view/Shortcuts.kt @@ -42,7 +42,6 @@ object Shortcuts { IconCompat.createWithBitmap(getBitmap(id)) } - @RequiresApi(api = 23) private fun Context.getIcon(id: Int) = getIconCompat(id).toIcon(this) @RequiresApi(api = 25) diff --git a/app/src/main/res/drawable-nodpi/logo.png b/app/src/main/res/drawable-nodpi/logo.png deleted file mode 100644 index 94f74a0ca..000000000 Binary files a/app/src/main/res/drawable-nodpi/logo.png and /dev/null differ diff --git a/app/src/main/res/drawable-v23/ic_splash_activity.xml b/app/src/main/res/drawable-v23/ic_splash_activity.xml deleted file mode 100644 index 546ed2a66..000000000 --- a/app/src/main/res/drawable-v23/ic_splash_activity.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_splash_activity.xml b/app/src/main/res/drawable/ic_splash_activity.xml index b271761d7..118c2745c 100644 --- a/app/src/main/res/drawable/ic_splash_activity.xml +++ b/app/src/main/res/drawable/ic_splash_activity.xml @@ -2,11 +2,10 @@ + - - - - - \ No newline at end of file + diff --git a/app/src/main/res/values-v23/themes.xml b/app/src/main/res/values-v23/themes.xml deleted file mode 100644 index 27b30bfe5..000000000 --- a/app/src/main/res/values-v23/themes.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - diff --git a/app/src/main/res/values-v27/themes.xml b/app/src/main/res/values-v27/themes.xml index 299b28c29..a92226323 100644 --- a/app/src/main/res/values-v27/themes.xml +++ b/app/src/main/res/values-v27/themes.xml @@ -7,7 +7,7 @@ true - diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 508c5d197..28304102e 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,15 +1,16 @@ - - - - -