修复一个严重的判断问题,尝试修复 MIPUSH 图标不能 Hook 成功的问题

This commit is contained in:
2022-02-08 00:45:34 +08:00
parent b1b99ccdfe
commit 3461a28881

View File

@@ -282,8 +282,11 @@ class HookMain : IXposedHookLoadPackage {
* 拥有状态栏图标颜色检查功能 * 拥有状态栏图标颜色检查功能
* @return [Boolean] * @return [Boolean]
*/ */
private fun XC_LoadPackage.LoadPackageParam.hasIgnoreStatusBarIconColor() = private fun XC_LoadPackage.LoadPackageParam.hasIgnoreStatusBarIconColor() = try {
isMethodExist(NotificationUtilClass, name = "ignoreStatusBarIconColor") isMethodExist(NotificationUtilClass, name = "ignoreStatusBarIconColor", findClass(ExpandedNotificationClass))
} catch (_: Throwable) {
false
}
/** /**
* 获取 [ExpandedNotificationClass] 的应用名称 * 获取 [ExpandedNotificationClass] 的应用名称
@@ -622,16 +625,14 @@ class HookMain : IXposedHookLoadPackage {
} }
) )
} }
/** 之前的版本解决方案 */ /** 修复通知图标为彩色 - MIPUSH 修复 */
else runWithoutError(error = "UpdateIconColor") { runWithoutError(error = "UpdateIconColor") {
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
StatusBarIconViewClass, StatusBarIconViewClass,
lpparam.classLoader, "updateIconColor", lpparam.classLoader, "updateIconColor",
object : XC_MethodHook() { object : XC_MethodHook() {
override fun afterHookedMethod(param: MethodHookParam) = override fun afterHookedMethod(param: MethodHookParam) =
runWithoutError(error = "UpdateIconColorOnSet") hook@{ runWithoutError(error = "UpdateIconColorOnSet") hook@{
/** 对于之前没有通知图标色彩判断功能的版本判断是 MIUI 样式就停止 Hook */
if (lpparam.isShowMiuiStyle()) return@hook
/** 获取自身 */ /** 获取自身 */
val iconImageView = param.thisObject as ImageView val iconImageView = param.thisObject as ImageView
@@ -641,9 +642,6 @@ class HookMain : IXposedHookLoadPackage {
isAccessible = true isAccessible = true
}[param.thisObject] as? StatusBarNotification? }[param.thisObject] as? StatusBarNotification?
/** 是否忽略图标颜色 */
val isIgnoredColor =
lpparam.hookIgnoreStatusBarIconColor(iconImageView.context, expandedNf)
/** 强制设置图标 - 防止 MIPUSH 不生效 */ /** 强制设置图标 - 防止 MIPUSH 不生效 */
lpparam.hookSmallIconOnSet( lpparam.hookSmallIconOnSet(
context = iconImageView.context, context = iconImageView.context,
@@ -651,6 +649,17 @@ class HookMain : IXposedHookLoadPackage {
iconImageView.drawable, iconImageView.drawable,
isLegacyWay = true isLegacyWay = true
) { icon -> iconImageView.setImageBitmap(icon) } ) { icon -> iconImageView.setImageBitmap(icon) }
/**
* 对于之前没有通知图标色彩判断功能的版本判断是 MIUI 样式就停止 Hook
* 新版本不需要下面的代码设置颜色 - 同样停止 Hook
*/
if (lpparam.hasIgnoreStatusBarIconColor() || lpparam.isShowMiuiStyle()) return@hook
/** 是否忽略图标颜色 */
val isIgnoredColor =
lpparam.hookIgnoreStatusBarIconColor(iconImageView.context, expandedNf)
/** 当前着色颜色 */ /** 当前着色颜色 */
val currentColor = val currentColor =
param.thisObject.javaClass.getDeclaredField("mCurrentSetColor").apply { param.thisObject.javaClass.getDeclaredField("mCurrentSetColor").apply {