From 3461a28881b56b970d054c1eebeb26eb46e50020 Mon Sep 17 00:00:00 2001 From: Fankesyooni Date: Tue, 8 Feb 2022 00:45:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=B8=AA=E4=B8=A5?= =?UTF-8?q?=E9=87=8D=E7=9A=84=E5=88=A4=E6=96=AD=E9=97=AE=E9=A2=98=EF=BC=8C?= =?UTF-8?q?=E5=B0=9D=E8=AF=95=E4=BF=AE=E5=A4=8D=20MIPUSH=20=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E4=B8=8D=E8=83=BD=20Hook=20=E6=88=90=E5=8A=9F?= =?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/HookMain.kt | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/fankes/miui/notify/hook/HookMain.kt b/app/src/main/java/com/fankes/miui/notify/hook/HookMain.kt index 2c332fe..e90bd56 100644 --- a/app/src/main/java/com/fankes/miui/notify/hook/HookMain.kt +++ b/app/src/main/java/com/fankes/miui/notify/hook/HookMain.kt @@ -282,8 +282,11 @@ class HookMain : IXposedHookLoadPackage { * 拥有状态栏图标颜色检查功能 * @return [Boolean] */ - private fun XC_LoadPackage.LoadPackageParam.hasIgnoreStatusBarIconColor() = - isMethodExist(NotificationUtilClass, name = "ignoreStatusBarIconColor") + private fun XC_LoadPackage.LoadPackageParam.hasIgnoreStatusBarIconColor() = try { + isMethodExist(NotificationUtilClass, name = "ignoreStatusBarIconColor", findClass(ExpandedNotificationClass)) + } catch (_: Throwable) { + false + } /** * 获取 [ExpandedNotificationClass] 的应用名称 @@ -622,16 +625,14 @@ class HookMain : IXposedHookLoadPackage { } ) } - /** 之前的版本解决方案 */ - else runWithoutError(error = "UpdateIconColor") { + /** 修复通知图标为彩色 - MIPUSH 修复 */ + runWithoutError(error = "UpdateIconColor") { XposedHelpers.findAndHookMethod( StatusBarIconViewClass, lpparam.classLoader, "updateIconColor", object : XC_MethodHook() { override fun afterHookedMethod(param: MethodHookParam) = runWithoutError(error = "UpdateIconColorOnSet") hook@{ - /** 对于之前没有通知图标色彩判断功能的版本判断是 MIUI 样式就停止 Hook */ - if (lpparam.isShowMiuiStyle()) return@hook /** 获取自身 */ val iconImageView = param.thisObject as ImageView @@ -641,9 +642,6 @@ class HookMain : IXposedHookLoadPackage { isAccessible = true }[param.thisObject] as? StatusBarNotification? - /** 是否忽略图标颜色 */ - val isIgnoredColor = - lpparam.hookIgnoreStatusBarIconColor(iconImageView.context, expandedNf) /** 强制设置图标 - 防止 MIPUSH 不生效 */ lpparam.hookSmallIconOnSet( context = iconImageView.context, @@ -651,6 +649,17 @@ class HookMain : IXposedHookLoadPackage { iconImageView.drawable, isLegacyWay = true ) { icon -> iconImageView.setImageBitmap(icon) } + + /** + * 对于之前没有通知图标色彩判断功能的版本判断是 MIUI 样式就停止 Hook + * 新版本不需要下面的代码设置颜色 - 同样停止 Hook + */ + if (lpparam.hasIgnoreStatusBarIconColor() || lpparam.isShowMiuiStyle()) return@hook + + /** 是否忽略图标颜色 */ + val isIgnoredColor = + lpparam.hookIgnoreStatusBarIconColor(iconImageView.context, expandedNf) + /** 当前着色颜色 */ val currentColor = param.thisObject.javaClass.getDeclaredField("mCurrentSetColor").apply {