Skip to content

Commit 058c453

Browse files
ghhccghkfankes
andauthored
fix:处理通知图标的 “app_package ” 并修复焦点通知图标的颜色 (#241)
* 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 <qzmmcn@163.com>
1 parent 1551013 commit 058c453

4 files changed

Lines changed: 67 additions & 7 deletions

File tree

app/src/main/java/com/fankes/miui/notify/data/ConfigData.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ object ConfigData {
7272
/** 启用通知图标优化 */
7373
val ENABLE_NOTIFY_ICON_FIX = PrefsData("_notify_icon_fix", true)
7474

75+
/** 强制启用焦点通知反色 */
76+
val ENABLE_FOCUS_NOTIFICATION_FIX = PrefsData("_enable_focus_notification_fix", false)
77+
7578
/** 使用占位符修补未适配的通知图标 */
7679
val ENABLE_NOTIFY_ICON_FIX_PLACEHOLDER = PrefsData("_notify_icon_fix_placeholder", false)
7780

@@ -303,6 +306,16 @@ object ConfigData {
303306
putBoolean(ENABLE_NOTIFY_ICON_FIX, value)
304307
}
305308

309+
310+
/**
311+
* 是否强制启用焦点通知反色
312+
* @return [Boolean]*/
313+
var isEnableFocusNotificationFix
314+
get() = getBoolean(ENABLE_FOCUS_NOTIFICATION_FIX)
315+
set(value) {
316+
putBoolean(ENABLE_FOCUS_NOTIFICATION_FIX, value)
317+
}
318+
306319
/**
307320
* 是否使用占位符修补未适配的通知图标
308321
* @return [Boolean]

app/src/main/java/com/fankes/miui/notify/hook/entity/SystemUIHooker.kt

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,9 @@ object SystemUIHooker : YukiBaseHooker() {
226226
/** 仅监听一次主题壁纸颜色变化 */
227227
private var isWallpaperColorListenerSetUp = false
228228

229+
/** 用来同步是否需要焦点图标染色 */
230+
private var focusedIcon = false
231+
229232
/**
230233
* 获取全局上下文
231234
* @return [Context] or null
@@ -474,8 +477,12 @@ object SystemUIHooker : YukiBaseHooker() {
474477
/** 判断是否不是灰度图标 */
475478
val isGrayscaleIcon = notifyInstance.isXmsf.not() && isGrayscaleIcon(context, iconDrawable)
476479

480+
/** 读取通知是否附加包名,如果没有则使用通知包名 */
481+
val extras = notifyInstance.notification.extras
482+
val pkgname = extras.getString("app_package")?.takeIf { it.isNotBlank() } ?: notifyInstance.nfPkgName
483+
477484
/** 目标彩色通知 APP 图标 */
478-
val customTriple = compatCustomIcon(context, isGrayscaleIcon, notifyInstance.nfPkgName)
485+
val customTriple = compatCustomIcon(context, isGrayscaleIcon, pkgname)
479486

480487
/** 是否为通知优化生效图标 */
481488
val isCustom = customTriple.first != null && customTriple.third.not()
@@ -573,9 +580,13 @@ object SystemUIHooker : YukiBaseHooker() {
573580
/** 自定义默认小图标 */
574581
var customIcon: Drawable? = null
575582

583+
/** 读取通知是否附加包名,如果没有则使用通知包名 */
584+
val extras = notifyInstance.notification.extras
585+
val pkgname = extras.getString("app_package")?.takeIf { it.isNotBlank() } ?: notifyInstance.nfPkgName
586+
576587
/** 自定义默认小图标颜色 */
577588
var customIconColor = 0
578-
compatCustomIcon(context, isGrayscaleIcon, notifyInstance.nfPkgName).also {
589+
compatCustomIcon(context, isGrayscaleIcon, pkgname).also {
579590
/** 不处理占位符图标 */
580591
if (it.third) return@also
581592
customIcon = it.first
@@ -985,10 +996,11 @@ object SystemUIHooker : YukiBaseHooker() {
985996
val mIcon = firstFieldOrNull { name = "mIcon" }?.of(instance)?.get()
986997
if (ConfigData.isEnableModuleLog)
987998
YLog.debug("FocusedNotifPromptView DEBUG $isDark $mIcon")
988-
mIcon?.asResolver()?.optional()?.firstMethodOrNull {
989-
name = "setColorFilter"
990-
superclass()
991-
}?.invoke(if (isDark <= 0.5f) Color.WHITE else Color.BLACK)
999+
if (focusedIcon || ConfigData.isEnableFocusNotificationFix)
1000+
mIcon?.asResolver()?.optional()?.firstMethodOrNull {
1001+
name = "setColorFilter"
1002+
superclass()
1003+
}?.invoke(if (isDark <= 0.5f) Color.WHITE else Color.BLACK)
9921004
}
9931005
}
9941006
/** 去他妈的焦点通知彩色图标 */
@@ -1003,9 +1015,13 @@ object SystemUIHooker : YukiBaseHooker() {
10031015
nf = expandedNf,
10041016
iconDrawable = small?.loadDrawable(context)
10051017
).also { pair ->
1018+
focusedIcon = pair.second
10061019
val originalBitmap = pair.first?.toBitmap()
10071020
val bitmap = originalBitmap?.scale(50, 50)
1008-
result = Icon.createWithBitmap(bitmap).apply { if (pair.second) setTint(if (isDark) Color.BLACK else Color.WHITE) }
1021+
result = Icon.createWithBitmap(bitmap).apply {
1022+
if (pair.second || ConfigData.isEnableFocusNotificationFix)
1023+
setTint(if (isDark) Color.BLACK else Color.WHITE)
1024+
}
10091025
}
10101026
}
10111027
}

app/src/main/java/com/fankes/miui/notify/ui/activity/MainActivity.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
241241
binding.miuiNotifyIconReplacementSwitch.bind(ConfigData.ENABLE_REPLACE_MIUI_STYLE_NOTIFY_ICON) {
242242
onChanged { SystemUITool.refreshSystemUI(context = this@MainActivity) }
243243
}
244+
binding.miuiFocusNotifyIconFixSwitch.bind(ConfigData.ENABLE_FOCUS_NOTIFICATION_FIX) {
245+
onChanged { SystemUITool.refreshSystemUI(context = this@MainActivity) }
246+
}
244247
binding.notifyIconForceSystemColorSwitch.bind(ConfigData.ENABLE_NOTIFY_ICON_FORCE_SYSTEM_COLOR) {
245248
isAutoApplyChanges = false
246249
onChanged {

app/src/main/res/layout/activity_main.xml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1105,6 +1105,34 @@
11051105
android:textSize="12sp" />
11061106
</LinearLayout>
11071107

1108+
<LinearLayout
1109+
android:id="@+id/miui_focus_notify_icon_fix_item"
1110+
android:layout_width="match_parent"
1111+
android:layout_height="wrap_content"
1112+
android:orientation="vertical">
1113+
1114+
<com.fankes.miui.notify.ui.widget.MaterialSwitch
1115+
android:id="@+id/miui_focus_notify_icon_fix_switch"
1116+
android:layout_width="match_parent"
1117+
android:layout_height="wrap_content"
1118+
android:paddingLeft="15dp"
1119+
android:paddingRight="15dp"
1120+
android:text="是否强制启用焦点通知反色"
1121+
android:textColor="@color/colorTextGray"
1122+
android:textSize="15sp" />
1123+
1124+
<TextView
1125+
android:layout_width="match_parent"
1126+
android:layout_height="wrap_content"
1127+
android:alpha="0.6"
1128+
android:lineSpacingExtra="6dp"
1129+
android:paddingLeft="15dp"
1130+
android:paddingRight="15dp"
1131+
android:text="是否强制启用焦点通知反色,由于无法准确判断反色,所以给了个强制开关。(默认关闭)"
1132+
android:textColor="@color/colorTextDark"
1133+
android:textSize="12sp" />
1134+
</LinearLayout>
1135+
11081136
<LinearLayout
11091137
android:id="@+id/notify_icon_fix_notify_item"
11101138
android:layout_width="match_parent"

0 commit comments

Comments
 (0)