diff --git a/app/src/main/java/com/fankes/miui/notify/hook/entity/SystemUIHooker.kt b/app/src/main/java/com/fankes/miui/notify/hook/entity/SystemUIHooker.kt index d70eeda..2395351 100644 --- a/app/src/main/java/com/fankes/miui/notify/hook/entity/SystemUIHooker.kt +++ b/app/src/main/java/com/fankes/miui/notify/hook/entity/SystemUIHooker.kt @@ -103,7 +103,8 @@ object SystemUIHooker : YukiBaseHooker() { /** 根据多个版本存在不同的包名相同的类 */ private val MiuiClockClass = VariousClass( "$SYSTEMUI_PACKAGE_NAME.statusbar.views.MiuiClock", - "$SYSTEMUI_PACKAGE_NAME.statusbar.policy.MiuiClock" + "$SYSTEMUI_PACKAGE_NAME.statusbar.policy.MiuiClock", + "$SYSTEMUI_PACKAGE_NAME.statusbar.policy.Clock" ) /** 根据多个版本存在不同的包名相同的类 */ @@ -198,18 +199,6 @@ object SystemUIHooker : YukiBaseHooker() { private val hasHandleHeaderViews get() = safeOfFalse { NotificationHeaderViewWrapperClass.clazz.hasMethod { name = "handleHeaderViews" } } - /** - * 获取是否存在忽略图标色彩处理的方法 - * @return [Boolean] - */ - private val hasIgnoreStatusBarIconColor - get() = safeOfFalse { - NotificationUtilClass.clazz.hasMethod { - name = "ignoreStatusBarIconColor" - param(ExpandedNotificationClass) - } - } - /** * 处理为圆角图标 * @return [Drawable] @@ -289,6 +278,18 @@ object SystemUIHooker : YukiBaseHooker() { return xmsfPkg.ifBlank { targetPkg.ifBlank { packageName } } } + /** + * 是否为 MIUI 样式通知栏 - 旧版 - 新版一律返回 false + * @return [Boolean] + */ + private val isShowMiuiStyle get() = NotificationUtilClass.clazz.method { name = "showMiuiStyle" }.ignoredError().get().boolean() + + /** + * 是否没有单独的 MIUI 通知栏样式 + * @return [Boolean] + */ + private val isNotHasAbsoluteMiuiStyle get() = MiuiNotificationViewWrapperClass.hasClass.not() + /** * 获取全局上下文 * @return [Context] or null @@ -584,11 +585,10 @@ object SystemUIHooker : YukiBaseHooker() { .get(this).call()?.let { it.javaClass.method { name = "getSbn" - }.get(it).invoke() + }.ignoredError().get(it).invoke() } ?: ExpandableNotificationRowClass.clazz .method { name = "getStatusBarNotification" } - .get(NotificationViewWrapperClass.clazz.field { name = "mRow" }.get(this).self) - .invoke() + .get(this).invoke() /** * 根据当前 [ImageView] 的父布局克隆一个新的 [ImageView] @@ -714,10 +714,8 @@ object SystemUIHooker : YukiBaseHooker() { * MIUI 12 进行单独判断 */ field { name = "mCurrentSetColor" }.get(instance).int().also { color -> - if (hasIgnoreStatusBarIconColor) { - alpha = if (color.isWhite) 0.95f else 0.8f - setColorFilter(if (color.isWhite) color else Color.BLACK) - } else setColorFilter(color) + alpha = if (color.isWhite) 0.95f else 0.8f + setColorFilter(if (color.isWhite) color else Color.BLACK) } } } @@ -796,6 +794,9 @@ object SystemUIHooker : YukiBaseHooker() { method { name = "handleHeaderViews" } else method { name = "resolveHeaderViews" } afterHook { + /** 忽略较旧版本 - 在没有 MIUI 通知栏样式的时候可能出现奇怪的问题 */ + if (isNotHasAbsoluteMiuiStyle && isShowMiuiStyle) return@afterHook + /** 获取小图标 */ val iconImageView = NotificationHeaderViewWrapperClass.clazz @@ -907,11 +908,11 @@ object SystemUIHooker : YukiBaseHooker() { } } } - } + }.ignoredHookClassNotFoundFailure() /** 自动检查通知图标优化更新的注入监听 */ MiuiClockClass.hook { injectMember { - method { name = "updateTime" } + method { name = "updateTime" }.remedys { method { name = "updateClock" } } afterHook { instance().context.also { /** 注册定时监听 */ @@ -923,6 +924,6 @@ object SystemUIHooker : YukiBaseHooker() { } } } - }.ignoredHookClassNotFoundFailure() + } } } \ No newline at end of file diff --git a/app/src/main/java/com/fankes/miui/notify/ui/activity/MainActivity.kt b/app/src/main/java/com/fankes/miui/notify/ui/activity/MainActivity.kt index a567318..a6ffcba 100644 --- a/app/src/main/java/com/fankes/miui/notify/ui/activity/MainActivity.kt +++ b/app/src/main/java/com/fankes/miui/notify/ui/activity/MainActivity.kt @@ -149,13 +149,13 @@ class MainActivity : BaseActivity() { var statusBarIconCount = modulePrefs.get(DataConst.HOOK_STATUS_ICON_COUNT) var notifyIconAutoSyncTime = modulePrefs.get(DataConst.NOTIFY_ICON_FIX_AUTO_TIME) binding.colorIconHookItem.isVisible = modulePrefs.get(DataConst.ENABLE_MODULE) - binding.statusIconCountItem.isVisible = modulePrefs.get(DataConst.ENABLE_MODULE) + binding.statusIconCountItem.isVisible = modulePrefs.get(DataConst.ENABLE_MODULE) && isLowerAndroidR.not() binding.notifyIconConfigItem.isVisible = modulePrefs.get(DataConst.ENABLE_MODULE) binding.notifyIconFixButton.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX) binding.notifyIconCustomCornerItem.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX) && - modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FORCE_APP_ICON).not() + modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FORCE_APP_ICON).not() && isLowerAndroidR.not() binding.notifyIconForceAppIconItem.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX) - binding.notifyIconFixNotifyItem.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX) + binding.notifyIconFixNotifyItem.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX) && isLowerAndroidR.not() binding.notifyIconAutoSyncItem.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX) binding.statusIconCountSwitch.isChecked = modulePrefs.get(DataConst.ENABLE_HOOK_STATUS_ICON_COUNT) binding.statusIconCountChildItem.isVisible = modulePrefs.get(DataConst.ENABLE_HOOK_STATUS_ICON_COUNT) @@ -177,7 +177,7 @@ class MainActivity : BaseActivity() { modulePrefs.put(DataConst.ENABLE_MODULE, b) binding.moduleEnableLogSwitch.isVisible = b binding.colorIconHookItem.isVisible = b - binding.statusIconCountItem.isVisible = b + binding.statusIconCountItem.isVisible = b && isLowerAndroidR.not() binding.notifyIconConfigItem.isVisible = b SystemUITool.showNeedRestartSnake(context = this) } @@ -210,16 +210,17 @@ class MainActivity : BaseActivity() { if (btn.isPressed.not()) return@setOnCheckedChangeListener modulePrefs.put(DataConst.ENABLE_NOTIFY_ICON_FIX, b) binding.notifyIconFixButton.isVisible = b - binding.notifyIconCustomCornerItem.isVisible = b && modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FORCE_APP_ICON).not() + binding.notifyIconCustomCornerItem.isVisible = b && + modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FORCE_APP_ICON).not() && isLowerAndroidR.not() binding.notifyIconForceAppIconItem.isVisible = b - binding.notifyIconFixNotifyItem.isVisible = b + binding.notifyIconFixNotifyItem.isVisible = b && isLowerAndroidR.not() binding.notifyIconAutoSyncItem.isVisible = b SystemUITool.refreshSystemUI(context = this) } binding.notifyIconForceAppIconSwitch.setOnCheckedChangeListener { btn, b -> if (btn.isPressed.not()) return@setOnCheckedChangeListener fun saveState() { - binding.notifyIconCustomCornerItem.isVisible = b.not() + binding.notifyIconCustomCornerItem.isVisible = b.not() && isLowerAndroidR.not() modulePrefs.put(DataConst.ENABLE_NOTIFY_ICON_FORCE_APP_ICON, b) SystemUITool.refreshSystemUI(context = this) }