From 4699eb137ea96bd022121bc047f0c4fc8f49d205 Mon Sep 17 00:00:00 2001 From: Fankesyooni Date: Thu, 17 Mar 2022 11:32:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=8D=E6=AC=A1=E4=BF=AE=E5=A4=8D=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E5=9B=BE=E6=A0=87=E4=B8=AA=E6=95=B0=E5=AF=B9=E6=97=A7?= =?UTF-8?q?=E7=89=88=E6=9C=AC=20MIUI=20=E4=B8=8D=E7=94=9F=E6=95=88?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fankes/miui/notify/hook/HookEntry.kt | 60 ++++++++++++------- .../com/fankes/miui/notify/ui/MainActivity.kt | 3 + .../notify/utils/factory/FunctionFactory.kt | 35 ++++++----- app/src/main/res/layout/activity_main.xml | 11 ++++ 4 files changed, 71 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/com/fankes/miui/notify/hook/HookEntry.kt b/app/src/main/java/com/fankes/miui/notify/hook/HookEntry.kt index 761181d..edc5a72 100644 --- a/app/src/main/java/com/fankes/miui/notify/hook/HookEntry.kt +++ b/app/src/main/java/com/fankes/miui/notify/hook/HookEntry.kt @@ -122,6 +122,10 @@ class HookEntry : YukiHookXposedInitProxy { /** 是否显示通知图标 - 跟随 Hook 保存 */ private var isShowNotificationIcons = true + /** 是否有最大图标设置功能 */ + private val PackageParam.hasMaxStaticIcons + get() = safeOfFalse { NotificationIconContainerClass.clazz.hasField(name = "MAX_STATIC_ICONS") } + /** * - 这个是修复彩色图标的关键核心代码判断 * @@ -549,32 +553,42 @@ class HookEntry : YukiHookXposedInitProxy { } } } - NotificationIconContainerClass.hook { - injectMember { - method { name = "calculateIconTranslations" } - afterHook { - /** 修复最新开发版状态栏图标只能显示一个的问题 */ - instance().layoutParams.width = 9999 + if (hasMaxStaticIcons) + NotificationIconContainerClass.hook { + injectMember { + method { name = "calculateIconTranslations" } + afterHook { + /** 修复最新开发版状态栏图标只能显示一个的问题 */ + instance().layoutParams.width = 9999 + } } - } - injectMember { - method { name = "updateState" } - beforeHook { - /** 解除状态栏通知图标个数限制 */ - if (isShowNotificationIcons && prefs.getBoolean(ENABLE_HOOK_STATUS_ICON_COUNT, default = true)) - field { name = "MAX_STATIC_ICONS" } - .get(instance).set(prefs.getInt(HOOK_STATUS_ICON_COUNT, default = 5) - .let { if (it in 0..100) it else 5 }) + injectMember { + method { name = "updateState" } + beforeHook { + /** 解除状态栏通知图标个数限制 */ + if (isShowNotificationIcons && prefs.getBoolean(ENABLE_HOOK_STATUS_ICON_COUNT, default = true)) + field { name = "MAX_STATIC_ICONS" } + .get(instance).set(prefs.getInt(HOOK_STATUS_ICON_COUNT, default = 5) + .let { if (it in 0..100) it else 5 }) + } } + /** 旧版方法 - 新版不存在 */ + injectMember { + method { + name = "setMaxStaticIcons" + param(IntType) + beforeHook { isShowNotificationIcons = firstArgs as Int > 0 } + } + }.ignoredHookingFailure() + /** 新版方法 - 旧版不存在 */ + injectMember { + method { + name = "miuiShowNotificationIcons" + param(BooleanType) + } + beforeHook { isShowNotificationIcons = firstArgs as Boolean } + }.ignoredHookingFailure() } - injectMember { - method { - name = "miuiShowNotificationIcons" - param(BooleanType) - } - beforeHook { isShowNotificationIcons = firstArgs as Boolean } - } - } NotificationHeaderViewWrapperClass.hook { /** 修复下拉通知图标自动设置回 APP 图标的方法 */ injectMember { diff --git a/app/src/main/java/com/fankes/miui/notify/ui/MainActivity.kt b/app/src/main/java/com/fankes/miui/notify/ui/MainActivity.kt index 8e2f56e..4f53fc7 100644 --- a/app/src/main/java/com/fankes/miui/notify/ui/MainActivity.kt +++ b/app/src/main/java/com/fankes/miui/notify/ui/MainActivity.kt @@ -33,6 +33,7 @@ import android.widget.LinearLayout import android.widget.TextView import androidx.appcompat.widget.SwitchCompat import androidx.constraintlayout.utils.widget.ImageFilterView +import androidx.core.view.isGone import androidx.core.view.isVisible import com.fankes.miui.notify.BuildConfig import com.fankes.miui.notify.R @@ -192,6 +193,8 @@ class MainActivity : BaseActivity() { } /** 通知图标优化名单按钮点击事件 */ notifyIconFixButton.setOnClickListener { startActivity(Intent(this, ConfigureActivity::class.java)) } + /** 设置警告 */ + findViewById(R.id.config_warn_s_count_dis_tip).isGone = miuiVersionCode > 12.5 /** 修改状态栏通知图标个数按钮点击事件 */ findViewById(R.id.config_status_icon_count_button).setOnClickListener { showDialog { diff --git a/app/src/main/java/com/fankes/miui/notify/utils/factory/FunctionFactory.kt b/app/src/main/java/com/fankes/miui/notify/utils/factory/FunctionFactory.kt index a0f813c..496a9f1 100644 --- a/app/src/main/java/com/fankes/miui/notify/utils/factory/FunctionFactory.kt +++ b/app/src/main/java/com/fankes/miui/notify/utils/factory/FunctionFactory.kt @@ -129,21 +129,26 @@ inline val isNotSupportMiuiVersion get() = !isSupportMiuiVersion * @return [String] */ val miuiVersion - get() = - if (isMIUI) - findPropString(key = "ro.miui.ui.version.name", default = "V无法获取").let { - when (it) { - "V110" -> "11" - "V11" -> "11" - "V120" -> "12" - "V12" -> "12" - "V125" -> "12.5" - "V130" -> "13" - "V13" -> "13" - else -> it.replace(oldValue = "V", newValue = "") - } - }.trim() - else "NULL" + get() = if (isMIUI) + findPropString(key = "ro.miui.ui.version.name", default = "V无法获取").let { + when (it) { + "V110" -> "11" + "V11" -> "11" + "V120" -> "12" + "V12" -> "12" + "V125" -> "12.5" + "V130" -> "13" + "V13" -> "13" + else -> it.replace(oldValue = "V", newValue = "") + } + }.trim() + else "NULL" + +/** + * 获取 MIUI 版本号 + * @return [Float] + */ +val miuiVersionCode get() = safeOf(default = 0f) { miuiVersion.toFloat() } /** * 获取 MIUI 完全版本 diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 67a600c..bd903d8 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -233,6 +233,17 @@ android:textColor="@color/colorTextDark" android:textSize="12sp" /> + +