From 3f7f6e619aac586b71b6cdde452141c2fad80f26 Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Tue, 23 Aug 2022 01:43:53 -0700 Subject: [PATCH] Use VERSION_CODES instead of raw numbers --- .../src/main/java/com/topjohnwu/magisk/StubApk.java | 5 +++-- .../java/com/topjohnwu/magisk/core/base/BaseActivity.kt | 7 ++++--- .../topjohnwu/magisk/core/download/DownloadService.kt | 4 ++-- .../com/topjohnwu/magisk/core/utils/MediaStoreUtils.kt | 2 +- .../com/topjohnwu/magisk/core/utils/RequestInstall.kt | 2 +- .../topjohnwu/magisk/core/utils/net/NetworkObserver.kt | 2 +- app/src/main/java/com/topjohnwu/magisk/ktx/XAndroid.kt | 5 +++-- .../java/com/topjohnwu/magisk/ui/deny/AppProcessInfo.kt | 4 +++- .../topjohnwu/magisk/ui/settings/SettingsViewModel.kt | 9 +++++---- .../main/java/com/topjohnwu/magisk/view/Notifications.kt | 9 +++++---- app/src/main/java/com/topjohnwu/magisk/view/Shortcuts.kt | 4 ++-- .../main/java/com/topjohnwu/magisk/DownloadActivity.java | 2 +- stub/src/main/java/com/topjohnwu/magisk/DynLoad.java | 4 ++-- 13 files changed, 33 insertions(+), 26 deletions(-) diff --git a/app/shared/src/main/java/com/topjohnwu/magisk/StubApk.java b/app/shared/src/main/java/com/topjohnwu/magisk/StubApk.java index 45a2e05d3..c1ebe4d4c 100644 --- a/app/shared/src/main/java/com/topjohnwu/magisk/StubApk.java +++ b/app/shared/src/main/java/com/topjohnwu/magisk/StubApk.java @@ -11,6 +11,7 @@ import android.content.res.AssetManager; import android.content.res.Resources; import android.content.res.loader.ResourcesLoader; import android.content.res.loader.ResourcesProvider; +import android.os.Build; import android.os.ParcelFileDescriptor; import java.io.File; @@ -28,7 +29,7 @@ public class StubApk { private static File getDynDir(ApplicationInfo info) { if (dynDir == null) { final String dataDir; - if (SDK_INT >= 24) { + if (SDK_INT >= Build.VERSION_CODES.N) { // Use device protected path to allow directBootAware dataDir = info.deviceProtectedDataDir; } else { @@ -57,7 +58,7 @@ public class StubApk { } public static void addAssetPath(Resources res, String path) { - if (SDK_INT >= 30) { + if (SDK_INT >= Build.VERSION_CODES.R) { try (var fd = ParcelFileDescriptor.open(new File(path), MODE_READ_ONLY)) { var loader = new ResourcesLoader(); loader.addProvider(ResourcesProvider.loadFromApk(fd)); 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 057d53d56..400582813 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 @@ -52,7 +52,7 @@ abstract class BaseActivity : AppCompatActivity() { val realCallingPackage: String? get() { callingPackage?.let { return it } - if (Build.VERSION.SDK_INT >= 22) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { mReferrerField.get(this)?.let { return it as String } } return null @@ -82,8 +82,9 @@ abstract class BaseActivity : AppCompatActivity() { } fun withPermission(permission: String, callback: (Boolean) -> Unit) { - if (permission == WRITE_EXTERNAL_STORAGE && Build.VERSION.SDK_INT >= 30) { - // We do not need external rw on 30+ + if (permission == WRITE_EXTERNAL_STORAGE && + Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + // We do not need external rw on R+ callback(true) return } diff --git a/app/src/main/java/com/topjohnwu/magisk/core/download/DownloadService.kt b/app/src/main/java/com/topjohnwu/magisk/core/download/DownloadService.kt index 179c9b8bf..e8bfd65cb 100644 --- a/app/src/main/java/com/topjohnwu/magisk/core/download/DownloadService.kt +++ b/app/src/main/java/com/topjohnwu/magisk/core/download/DownloadService.kt @@ -199,7 +199,7 @@ class DownloadService : NotificationService() { fun getPendingIntent(context: Context, subject: Subject): PendingIntent { val flag = FLAG_IMMUTABLE or FLAG_UPDATE_CURRENT or FLAG_ONE_SHOT val intent = intent(context, subject) - return if (Build.VERSION.SDK_INT >= 26) { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { getForegroundService(context, REQUEST_CODE, intent, flag) } else { getService(context, REQUEST_CODE, intent, flag) @@ -208,7 +208,7 @@ class DownloadService : NotificationService() { fun start(context: Context, subject: Subject) { val app = context.applicationContext - if (Build.VERSION.SDK_INT >= 26) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { app.startForegroundService(intent(app, subject)) } else { app.startService(intent(app, subject)) diff --git a/app/src/main/java/com/topjohnwu/magisk/core/utils/MediaStoreUtils.kt b/app/src/main/java/com/topjohnwu/magisk/core/utils/MediaStoreUtils.kt index 14c16d0c0..54e5dbf8e 100644 --- a/app/src/main/java/com/topjohnwu/magisk/core/utils/MediaStoreUtils.kt +++ b/app/src/main/java/com/topjohnwu/magisk/core/utils/MediaStoreUtils.kt @@ -87,7 +87,7 @@ object MediaStoreUtils { @Throws(IOException::class) fun getFile(displayName: String, skipQuery: Boolean = false): UriFile { - if (Build.VERSION.SDK_INT < 30) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) { // Fallback to file based I/O pre Android 11 val parent = File(Environment.getExternalStorageDirectory(), relativePath) parent.mkdirs() diff --git a/app/src/main/java/com/topjohnwu/magisk/core/utils/RequestInstall.kt b/app/src/main/java/com/topjohnwu/magisk/core/utils/RequestInstall.kt index 54aa1ce05..a673e0157 100644 --- a/app/src/main/java/com/topjohnwu/magisk/core/utils/RequestInstall.kt +++ b/app/src/main/java/com/topjohnwu/magisk/core/utils/RequestInstall.kt @@ -25,7 +25,7 @@ class RequestInstall : ActivityResultContract() { context: Context, input: Unit ): SynchronousResult? { - if (Build.VERSION.SDK_INT < 26) + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) return SynchronousResult(true) if (context.packageManager.canRequestPackageInstalls()) return SynchronousResult(true) 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 index 046070272..132cb5ee4 100644 --- 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 @@ -20,7 +20,7 @@ abstract class NetworkObserver( companion object { fun observe(context: Context, callback: ConnectionCallback): NetworkObserver { - val observer: NetworkObserver = if (Build.VERSION.SDK_INT >= 23) + 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/ktx/XAndroid.kt b/app/src/main/java/com/topjohnwu/magisk/ktx/XAndroid.kt index 6c46b8d61..a722ff9b2 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ktx/XAndroid.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ktx/XAndroid.kt @@ -17,6 +17,7 @@ import android.graphics.drawable.AdaptiveIconDrawable import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.LayerDrawable import android.net.Uri +import android.os.Build import android.os.Build.VERSION.SDK_INT import android.os.Process import android.view.View @@ -44,7 +45,7 @@ fun Context.getBitmap(id: Int): Bitmap { var drawable = AppCompatResources.getDrawable(this, id)!! if (drawable is BitmapDrawable) return drawable.bitmap - if (SDK_INT >= 26 && drawable is AdaptiveIconDrawable) { + if (SDK_INT >= Build.VERSION_CODES.O && drawable is AdaptiveIconDrawable) { drawable = LayerDrawable(arrayOf(drawable.background, drawable.foreground)) } val bitmap = Bitmap.createBitmap( @@ -58,7 +59,7 @@ fun Context.getBitmap(id: Int): Bitmap { } val Context.deviceProtectedContext: Context get() = - if (SDK_INT >= 24) { + if (SDK_INT >= Build.VERSION_CODES.N) { createDeviceProtectedStorageContext() } else { this } diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/deny/AppProcessInfo.kt b/app/src/main/java/com/topjohnwu/magisk/ui/deny/AppProcessInfo.kt index f61f491a4..9841b4240 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/deny/AppProcessInfo.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/deny/AppProcessInfo.kt @@ -7,6 +7,7 @@ import android.content.pm.PackageManager import android.content.pm.PackageManager.* import android.content.pm.ServiceInfo import android.graphics.drawable.Drawable +import android.os.Build import android.os.Build.VERSION.SDK_INT import androidx.core.os.ProcessCompat import com.topjohnwu.magisk.core.utils.currentLocale @@ -67,7 +68,8 @@ class AppProcessInfo( val proc = info.processName ?: info.packageName createProcess("${proc}_zygote") } else { - val proc = if (SDK_INT >= 29) "${it.getProcName()}:${it.name}" else it.getProcName() + val proc = if (SDK_INT >= Build.VERSION_CODES.Q) + "${it.getProcName()}:${it.name}" else it.getProcName() createProcess(proc, ISOLATED_MAGIC) } } else { 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 97f4b08ed..d58378e46 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,7 +53,8 @@ class SettingsViewModel : BaseViewModel(), BaseSettingsItem.Handler { AppSettings, UpdateChannel, UpdateChannelUrl, DoHToggle, UpdateChecker, DownloadPath )) - if (Build.VERSION.SDK_INT >= 22 && Info.env.isActive && Const.USER_ID == 0) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1 && + Info.env.isActive && Const.USER_ID == 0) { if (hidden) list.add(Restore) else list.add(Hide) } @@ -75,15 +76,15 @@ class SettingsViewModel : BaseViewModel(), BaseSettingsItem.Handler { Tapjack, Biometrics, AccessMode, MultiuserMode, MountNamespaceMode, AutomaticResponse, RequestTimeout, SUNotification )) - if (Build.VERSION.SDK_INT < 23) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { // Biometric is only available on 6.0+ list.remove(Biometrics) } - if (Build.VERSION.SDK_INT < 26) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { // Re-authenticate is not feasible on 8.0+ list.add(Reauthenticate) } - if (Build.VERSION.SDK_INT >= 31) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { // Can hide overlay windows on 12.0+ list.remove(Tapjack) } diff --git a/app/src/main/java/com/topjohnwu/magisk/view/Notifications.kt b/app/src/main/java/com/topjohnwu/magisk/view/Notifications.kt index 99fbe946f..9e3063251 100644 --- a/app/src/main/java/com/topjohnwu/magisk/view/Notifications.kt +++ b/app/src/main/java/com/topjohnwu/magisk/view/Notifications.kt @@ -7,6 +7,7 @@ import android.app.NotificationManager import android.app.PendingIntent import android.content.Context import android.content.Intent +import android.os.Build import android.os.Build.VERSION.SDK_INT import androidx.core.content.getSystemService import androidx.core.graphics.drawable.toIcon @@ -32,7 +33,7 @@ object Notifications { private val nextId = AtomicInteger(APP_UPDATE_NOTIFICATION_ID) fun setup(context: Context) { - if (SDK_INT >= 26) { + if (SDK_INT >= Build.VERSION_CODES.O) { val channel = NotificationChannel(UPDATE_CHANNEL, context.getString(R.string.update_channel), NotificationManager.IMPORTANCE_DEFAULT) val channel2 = NotificationChannel(PROGRESS_CHANNEL, @@ -55,7 +56,7 @@ object Notifications { setup(context) val flag = PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT val pending = PendingIntent.getActivity(context, 0, selfLaunchIntent(context), flag) - val builder = if (SDK_INT >= 26) { + val builder = if (SDK_INT >= Build.VERSION_CODES.O) { Notification.Builder(context, UPDATED_CHANNEL) .setSmallIcon(context.getBitmap(R.drawable.ic_magisk_outline).toIcon()) } else { @@ -73,7 +74,7 @@ object Notifications { val intent = DownloadService.getPendingIntent(context, Subject.App()) val bitmap = context.getBitmap(R.drawable.ic_magisk_outline) - val builder = if (SDK_INT >= 26) { + val builder = if (SDK_INT >= Build.VERSION_CODES.O) { Notification.Builder(context, UPDATE_CHANNEL) .setSmallIcon(bitmap.toIcon()) } else { @@ -90,7 +91,7 @@ object Notifications { } fun progress(context: Context, title: CharSequence): Notification.Builder { - val builder = if (SDK_INT >= 26) { + val builder = if (SDK_INT >= Build.VERSION_CODES.O) { Notification.Builder(context, PROGRESS_CHANNEL) } else { Notification.Builder(context).setPriority(Notification.PRIORITY_LOW) 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 69140a99d..98cbd08f5 100644 --- a/app/src/main/java/com/topjohnwu/magisk/view/Shortcuts.kt +++ b/app/src/main/java/com/topjohnwu/magisk/view/Shortcuts.kt @@ -19,7 +19,7 @@ import com.topjohnwu.magisk.utils.Utils object Shortcuts { fun setupDynamic(context: Context) { - if (Build.VERSION.SDK_INT >= 25) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { val manager = context.getSystemService() ?: return manager.dynamicShortcuts = getShortCuts(context) } @@ -36,7 +36,7 @@ object Shortcuts { } private fun Context.getIconCompat(id: Int): IconCompat { - return if (Build.VERSION.SDK_INT >= 26) + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) IconCompat.createWithAdaptiveBitmap(getBitmap(id)) else IconCompat.createWithBitmap(getBitmap(id)) diff --git a/stub/src/main/java/com/topjohnwu/magisk/DownloadActivity.java b/stub/src/main/java/com/topjohnwu/magisk/DownloadActivity.java index fde9f1590..4db587037 100644 --- a/stub/src/main/java/com/topjohnwu/magisk/DownloadActivity.java +++ b/stub/src/main/java/com/topjohnwu/magisk/DownloadActivity.java @@ -186,7 +186,7 @@ public class DownloadActivity extends Activity { } private void loadResources() throws Exception { - if (Build.VERSION.SDK_INT >= 30) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { var fd = Os.memfd_create("res.apk", 0); try { decryptResources(new FileOutputStream(fd)); diff --git a/stub/src/main/java/com/topjohnwu/magisk/DynLoad.java b/stub/src/main/java/com/topjohnwu/magisk/DynLoad.java index f33adbee4..700ae089c 100644 --- a/stub/src/main/java/com/topjohnwu/magisk/DynLoad.java +++ b/stub/src/main/java/com/topjohnwu/magisk/DynLoad.java @@ -104,7 +104,7 @@ public class DynLoad { // Dynamically load APK and create the Application instance from the loaded APK static Application createAndSetupApp(Application context) { // On API >= 29, AppComponentFactory will replace the ClassLoader for us - if (Build.VERSION.SDK_INT < 29) + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) replaceClassLoader(context); // noinspection InlinedApi @@ -145,7 +145,7 @@ public class DynLoad { .newInstance(data.getObject()); // Create the receiver component factory - if (Build.VERSION.SDK_INT >= 28 && componentFactory != null) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && componentFactory != null) { Object factory = cl.loadClass(appInfo.appComponentFactory).newInstance(); var delegate = (DelegateComponentFactory) componentFactory; delegate.receiver = (AppComponentFactory) factory;