From af054e4e31fe250ccb9d98dbe4b16d4fe9835c7e Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Fri, 17 Mar 2023 04:24:16 -0700 Subject: [PATCH] Bump minSdk to 23 --- .../com/topjohnwu/magisk/arch/UIActivity.kt | 6 -- .../java/com/topjohnwu/magisk/core/Info.kt | 2 +- .../magisk/core/base/BaseActivity.kt | 8 +- .../magisk/core/utils/NetworkObserver.kt | 70 ++++++++++++++++++ .../core/utils/net/LollipopNetworkObserver.kt | 51 ------------- .../utils/net/MarshmallowNetworkObserver.kt | 52 ------------- .../magisk/core/utils/net/NetworkObserver.kt | 29 -------- .../magisk/ui/settings/SettingsViewModel.kt | 7 +- .../com/topjohnwu/magisk/view/Shortcuts.kt | 1 - app/src/main/res/drawable-nodpi/logo.png | Bin 14767 -> 0 bytes .../res/drawable-v23/ic_splash_activity.xml | 11 --- .../main/res/drawable/ic_splash_activity.xml | 13 ++-- app/src/main/res/values-v23/themes.xml | 16 ---- app/src/main/res/values-v27/themes.xml | 2 +- app/src/main/res/values/themes.xml | 18 +++-- buildSrc/src/main/java/Setup.kt | 2 +- native/src/su/connect.cpp | 18 +---- 17 files changed, 98 insertions(+), 208 deletions(-) create mode 100644 app/src/main/java/com/topjohnwu/magisk/core/utils/NetworkObserver.kt delete mode 100644 app/src/main/java/com/topjohnwu/magisk/core/utils/net/LollipopNetworkObserver.kt delete mode 100644 app/src/main/java/com/topjohnwu/magisk/core/utils/net/MarshmallowNetworkObserver.kt delete mode 100644 app/src/main/java/com/topjohnwu/magisk/core/utils/net/NetworkObserver.kt delete mode 100644 app/src/main/res/drawable-nodpi/logo.png delete mode 100644 app/src/main/res/drawable-v23/ic_splash_activity.xml delete mode 100644 app/src/main/res/values-v23/themes.xml 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 94f74a0caa811e51708d0190d69d83dac4055e28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14767 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 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 @@ - - - - -