From 058c4534f796e4fc4339991a8077b1dd9b246eff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=A4=AA=E7=99=BD?= <36808766+ghhccghk@users.noreply.github.com> Date: Sat, 16 Aug 2025 20:57:57 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E5=A4=84=E7=90=86=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E5=9B=BE=E6=A0=87=E7=9A=84=20=E2=80=9Capp=5Fpackage?= =?UTF-8?q?=20=E2=80=9D=20=E5=B9=B6=E4=BF=AE=E5=A4=8D=E7=84=A6=E7=82=B9?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E5=9B=BE=E6=A0=87=E7=9A=84=E9=A2=9C=E8=89=B2?= =?UTF-8?q?=20(#241)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix:处理通知图标的 “app_package ”并修复焦点通知图标的颜色 此提交解决了两个问题: 1. **通知图标软件包名称:** 现在,如果通知中的 "app_package" 字符串可用,它将正确使用该字符串,并返回到通知的软件包名称。这可确保在一个应用程序代表另一个应用程序(如系统服务)发送通知时加载正确的图标。 2. **焦点通知图标颜色:** 焦点通知图标的着色现在可根据通知图标优化配置正确应用,从而防止出现不正确的图标颜色。 Signed-off-by: ghhccghk <2137610394@qq.com> * fix: 修复焦点通知图标逻辑异常,修复setTint导致无法正确着色 Signed-off-by: ghhccghk <2137610394@qq.com> * fix: 修复焦点通知反色功能异常 Signed-off-by: ghhccghk <2137610394@qq.com> * feat: 新增开关强制对焦点通知进行反色 - 新增开关 `ENABLE_FOCUS_NOTIFICATION_FIX`,默认关闭 - 当该开关开启时,强制对焦点通知图标进行反色处理 - 调整了 SystemUIHooker 中对焦点通知图标的反色逻辑,使其在 `ENABLE_FOCUS_NOTIFICATION_FIX` 开启时生效 - 修复了当图标不是灰度图标时,也标记为需要反色的问题 Signed-off-by: ghhccghk <2137610394@qq.com> * style: some tweaks in SystemUIHooker --------- Signed-off-by: ghhccghk <2137610394@qq.com> Co-authored-by: fankesyooni --- .../com/fankes/miui/notify/data/ConfigData.kt | 13 ++++++++ .../miui/notify/hook/entity/SystemUIHooker.kt | 30 ++++++++++++++----- .../miui/notify/ui/activity/MainActivity.kt | 3 ++ app/src/main/res/layout/activity_main.xml | 28 +++++++++++++++++ 4 files changed, 67 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/fankes/miui/notify/data/ConfigData.kt b/app/src/main/java/com/fankes/miui/notify/data/ConfigData.kt index 86d8183..5becd23 100644 --- a/app/src/main/java/com/fankes/miui/notify/data/ConfigData.kt +++ b/app/src/main/java/com/fankes/miui/notify/data/ConfigData.kt @@ -72,6 +72,9 @@ object ConfigData { /** 启用通知图标优化 */ val ENABLE_NOTIFY_ICON_FIX = PrefsData("_notify_icon_fix", true) + /** 强制启用焦点通知反色 */ + val ENABLE_FOCUS_NOTIFICATION_FIX = PrefsData("_enable_focus_notification_fix", false) + /** 使用占位符修补未适配的通知图标 */ val ENABLE_NOTIFY_ICON_FIX_PLACEHOLDER = PrefsData("_notify_icon_fix_placeholder", false) @@ -303,6 +306,16 @@ object ConfigData { putBoolean(ENABLE_NOTIFY_ICON_FIX, value) } + + /** + * 是否强制启用焦点通知反色 + * @return [Boolean]*/ + var isEnableFocusNotificationFix + get() = getBoolean(ENABLE_FOCUS_NOTIFICATION_FIX) + set(value) { + putBoolean(ENABLE_FOCUS_NOTIFICATION_FIX, value) + } + /** * 是否使用占位符修补未适配的通知图标 * @return [Boolean] 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 af4958c..a9d35cb 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 @@ -226,6 +226,9 @@ object SystemUIHooker : YukiBaseHooker() { /** 仅监听一次主题壁纸颜色变化 */ private var isWallpaperColorListenerSetUp = false + /** 用来同步是否需要焦点图标染色 */ + private var focusedIcon = false + /** * 获取全局上下文 * @return [Context] or null @@ -474,8 +477,12 @@ object SystemUIHooker : YukiBaseHooker() { /** 判断是否不是灰度图标 */ val isGrayscaleIcon = notifyInstance.isXmsf.not() && isGrayscaleIcon(context, iconDrawable) + /** 读取通知是否附加包名,如果没有则使用通知包名 */ + val extras = notifyInstance.notification.extras + val pkgname = extras.getString("app_package")?.takeIf { it.isNotBlank() } ?: notifyInstance.nfPkgName + /** 目标彩色通知 APP 图标 */ - val customTriple = compatCustomIcon(context, isGrayscaleIcon, notifyInstance.nfPkgName) + val customTriple = compatCustomIcon(context, isGrayscaleIcon, pkgname) /** 是否为通知优化生效图标 */ val isCustom = customTriple.first != null && customTriple.third.not() @@ -573,9 +580,13 @@ object SystemUIHooker : YukiBaseHooker() { /** 自定义默认小图标 */ var customIcon: Drawable? = null + /** 读取通知是否附加包名,如果没有则使用通知包名 */ + val extras = notifyInstance.notification.extras + val pkgname = extras.getString("app_package")?.takeIf { it.isNotBlank() } ?: notifyInstance.nfPkgName + /** 自定义默认小图标颜色 */ var customIconColor = 0 - compatCustomIcon(context, isGrayscaleIcon, notifyInstance.nfPkgName).also { + compatCustomIcon(context, isGrayscaleIcon, pkgname).also { /** 不处理占位符图标 */ if (it.third) return@also customIcon = it.first @@ -985,10 +996,11 @@ object SystemUIHooker : YukiBaseHooker() { val mIcon = firstFieldOrNull { name = "mIcon" }?.of(instance)?.get() if (ConfigData.isEnableModuleLog) YLog.debug("FocusedNotifPromptView DEBUG $isDark $mIcon") - mIcon?.asResolver()?.optional()?.firstMethodOrNull { - name = "setColorFilter" - superclass() - }?.invoke(if (isDark <= 0.5f) Color.WHITE else Color.BLACK) + if (focusedIcon || ConfigData.isEnableFocusNotificationFix) + mIcon?.asResolver()?.optional()?.firstMethodOrNull { + name = "setColorFilter" + superclass() + }?.invoke(if (isDark <= 0.5f) Color.WHITE else Color.BLACK) } } /** 去他妈的焦点通知彩色图标 */ @@ -1003,9 +1015,13 @@ object SystemUIHooker : YukiBaseHooker() { nf = expandedNf, iconDrawable = small?.loadDrawable(context) ).also { pair -> + focusedIcon = pair.second val originalBitmap = pair.first?.toBitmap() val bitmap = originalBitmap?.scale(50, 50) - result = Icon.createWithBitmap(bitmap).apply { if (pair.second) setTint(if (isDark) Color.BLACK else Color.WHITE) } + result = Icon.createWithBitmap(bitmap).apply { + if (pair.second || ConfigData.isEnableFocusNotificationFix) + setTint(if (isDark) Color.BLACK else Color.WHITE) + } } } } 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 b3d2a86..ae819d5 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 @@ -241,6 +241,9 @@ class MainActivity : BaseActivity() { binding.miuiNotifyIconReplacementSwitch.bind(ConfigData.ENABLE_REPLACE_MIUI_STYLE_NOTIFY_ICON) { onChanged { SystemUITool.refreshSystemUI(context = this@MainActivity) } } + binding.miuiFocusNotifyIconFixSwitch.bind(ConfigData.ENABLE_FOCUS_NOTIFICATION_FIX) { + onChanged { SystemUITool.refreshSystemUI(context = this@MainActivity) } + } binding.notifyIconForceSystemColorSwitch.bind(ConfigData.ENABLE_NOTIFY_ICON_FORCE_SYSTEM_COLOR) { isAutoApplyChanges = false onChanged { diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index b6a1207..60ff6c9 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1105,6 +1105,34 @@ android:textSize="12sp" /> + + + + + + +