From 606d11c00dcdaf93e083f0fd4b4d2463547cce1c Mon Sep 17 00:00:00 2001 From: akwizgran <michael@briarproject.org> Date: Thu, 9 Jun 2022 12:25:55 +0100 Subject: [PATCH] Add intent for opening Xiaomi security settings. --- lib/src/main/AndroidManifest.xml | 1 + .../android/dontkillmelib/XiaomiUtils.kt | 66 ++++++++++++------- 2 files changed, 45 insertions(+), 22 deletions(-) diff --git a/lib/src/main/AndroidManifest.xml b/lib/src/main/AndroidManifest.xml index c186d0b..991f46d 100644 --- a/lib/src/main/AndroidManifest.xml +++ b/lib/src/main/AndroidManifest.xml @@ -8,6 +8,7 @@ <package android:name="com.huawei.systemmanager" /> <package android:name="com.huawei.powergenie" /> <package android:name="com.evenwell.PowerMonitor" /> + <package android:name="com.miui.securitycenter" /> </queries> </manifest> diff --git a/lib/src/main/java/org/briarproject/android/dontkillmelib/XiaomiUtils.kt b/lib/src/main/java/org/briarproject/android/dontkillmelib/XiaomiUtils.kt index 415b822..2b02593 100644 --- a/lib/src/main/java/org/briarproject/android/dontkillmelib/XiaomiUtils.kt +++ b/lib/src/main/java/org/briarproject/android/dontkillmelib/XiaomiUtils.kt @@ -1,41 +1,63 @@ package org.briarproject.android.dontkillmelib +import android.content.Context +import android.content.Intent +import android.content.pm.PackageManager.MATCH_DEFAULT_ONLY import android.os.Build.BRAND -import java.io.IOException -import java.util.Scanner +import android.os.Build.VERSION.INCREMENTAL +import android.util.Log public object XiaomiUtils { + private const val TAG = "XiaomiUtils" + + private const val PACKAGE_NAME = "com.miui.securitycenter" + private const val CLASS_NAME = "com.miui.securityscan.ui.settings.SettingsActivity" + @JvmStatic public val isXiaomiOrRedmiDevice: Boolean get() = "Xiaomi".equals(BRAND, ignoreCase = true) || - "Redmi".equals(BRAND, ignoreCase = true) + "Redmi".equals(BRAND, ignoreCase = true) @JvmStatic public val isMiuiTenOrLater: Boolean - get() { - var version = getSystemProperty("ro.miui.ui.version.name") - if (version == null || version == "") return false - version = version.replace("[^\\d]".toRegex(), "") - return try { - version.toInt() >= 10 + get() = isMiuiVersionAtLeast(10, 0) + + @JvmStatic + public fun isMiuiVersionAtLeast(major: Int, minor: Int): Boolean { + // E.g. "V12.5.3.0.QFGMIXM" + var version = INCREMENTAL + Log.i(TAG, "MIUI version $version") + version = version.replace("[^\\d.]".toRegex(), "") + val parts = version.split("\\.") + if (parts.size >= 2) { + try { + val maj = parts[0].toInt() + val min = parts[1].toInt() + Log.i(TAG, "Parsed version $maj.$min") + return maj > major || (maj == major && min >= minor) } catch (e: NumberFormatException) { - false + // Fall through } } + Log.w(TAG, "Could not parse MIUI version") + return false + } - private fun getSystemProperty(propName: String): String? { - return try { - val p = Runtime.getRuntime().exec("getprop $propName") - val s = Scanner(p.inputStream) - val line = s.nextLine() - s.close() - line - } catch (e: SecurityException) { - null - } catch (e: IOException) { - null - } + @JvmStatic + public val xiaomiRecentAppsNeedsToBeShown: Boolean + get() = isXiaomiOrRedmiDevice && !isMiuiVersionAtLeast(12, 5) + + @JvmStatic + public fun xiaomiLockAppsNeedsToBeShown(context: Context): Boolean { + if (!isXiaomiOrRedmiDevice || !isMiuiVersionAtLeast(12, 5)) return false + val pm = context.packageManager + val resolveInfos = pm.queryIntentActivities(xiaomiLockAppsIntent, MATCH_DEFAULT_ONLY) + return resolveInfos.isNotEmpty() } + @JvmStatic + public val xiaomiLockAppsIntent: Intent = Intent().apply { + setClassName(PACKAGE_NAME, CLASS_NAME) + } } -- GitLab