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 e170ef4..5751e92 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 @@ -60,6 +60,9 @@ object ConfigData { /** 通知栏中的通知图标圆角程度 */ val NOTIFY_ICON_CORNER_SIZE = PrefsData("_notify_icon_corner", 15) + /** 替换 MIUI 样式通知栏的通知图标 */ + val ENABLE_REPLACE_MIUI_STYLE_NOTIFY_ICON = PrefsData("_replace_miui_style_notify_icon", true) + /** 强制通知栏中的通知图标使用系统着色 */ val ENABLE_NOTIFY_ICON_FORCE_SYSTEM_COLOR = PrefsData("_notify_icon_force_system_color", false) @@ -260,6 +263,16 @@ object ConfigData { putInt(NOTIFY_ICON_CORNER_SIZE, value) } + /** + * 是否替换 MIUI 样式通知栏的通知图标 + * @return [Boolean] + */ + var isEnableReplaceMiuiStyleNotifyIcon + get() = getBoolean(ENABLE_REPLACE_MIUI_STYLE_NOTIFY_ICON) + set(value) { + putBoolean(ENABLE_REPLACE_MIUI_STYLE_NOTIFY_ICON, 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 b2ba37e..3572bff 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 @@ -269,6 +269,13 @@ object SystemUIHooker : YukiBaseHooker() { return xmsfPkg.ifBlank { targetPkg.ifBlank { packageName } } } + /** + * 获取 MIUI 自己设置的通知图标 + * @return [Icon] or null + */ + @Suppress("DEPRECATION") + private val StatusBarNotification.miuiAppIcon get() = notification?.extras?.getParcelable("miui.appIcon") + /** * 打印日志 * @param tag 标识 @@ -528,11 +535,8 @@ object SystemUIHooker : YukiBaseHooker() { loggerDebug(tag = "Notification Panel Icon", context, notifyInstance, isCustom = customIcon != null, isGrayscaleIcon) /** 处理自定义通知图标优化 */ when { - ConfigData.isEnableNotifyIconForceAppIcon -> { - @Suppress("DEPRECATION") - val miuiAppIcon = notifyInstance.notification?.extras?.getParcelable("miui.appIcon") - setDefaultNotifyIcon(drawable = miuiAppIcon?.loadDrawable(context) ?: context.appIconOf(notifyInstance.nfPkgName)) - } + ConfigData.isEnableNotifyIconForceAppIcon -> + setDefaultNotifyIcon(drawable = notifyInstance.miuiAppIcon?.loadDrawable(context) ?: context.appIconOf(notifyInstance.nfPkgName)) customIcon != null -> iconView.apply { /** 设置不要裁切到边界 */ clipToOutline = false @@ -982,14 +986,11 @@ object SystemUIHooker : YukiBaseHooker() { /** 修改 MIUI 风格通知栏的通知图标 */ MiuiNotificationViewWrapperClass?.apply { constructor().hook().after { + val nf = instance.getRowPair().second.getSbn() ?: return@after field { name = "mAppIcon" }.get(instance).cast()?.clone { - compatNotifyIcon( - context = context, - nf = instance.getRowPair().second.getSbn(), - iconView = this, - isUseMaterial3Style = true, - isMiuiPanel = true - ) + if (ConfigData.isEnableReplaceMiuiStyleNotifyIcon || ConfigData.isEnableNotifyIconForceAppIcon) + compatNotifyIcon(context, nf, iconView = this, isUseMaterial3Style = true, isMiuiPanel = true) + else setImageDrawable(nf.miuiAppIcon?.loadDrawable(context) ?: context.appIconOf(nf.packageName)) } } } @@ -1001,15 +1002,12 @@ object SystemUIHooker : YukiBaseHooker() { param(BooleanType) }.hook().after { field { name = "mAppIcon" }.get(instance).cast()?.apply { - compatNotifyIcon( - context = context, - nf = NotificationChildrenContainerClass.field { - name = "mContainingNotification" - }.get(instance).any()?.getSbn(), - iconView = this, - isUseMaterial3Style = true, - isMiuiPanel = true - ) + val nf = NotificationChildrenContainerClass.field { + name = "mContainingNotification" + }.get(instance).any()?.getSbn() ?: return@after + if (ConfigData.isEnableReplaceMiuiStyleNotifyIcon || ConfigData.isEnableNotifyIconForceAppIcon) + compatNotifyIcon(context, nf, iconView = this, isUseMaterial3Style = true, isMiuiPanel = true) + else setImageDrawable(nf.miuiAppIcon?.loadDrawable(context) ?: context.appIconOf(nf.packageName)) } } } 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 acdcb6d..d134d71 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 @@ -238,6 +238,9 @@ class MainActivity : BaseActivity() { } else applyChangesAndRefresh() } } + binding.miuiNotifyIconReplacementSwitch.bind(ConfigData.ENABLE_REPLACE_MIUI_STYLE_NOTIFY_ICON) { + onChanged { SystemUITool.refreshSystemUI(context = this@MainActivity) } + } binding.notifyIconForceSystemColorSwitch.bind(ConfigData.ENABLE_NOTIFY_ICON_FORCE_SYSTEM_COLOR) { isAutoApplyChanges = false onChanged { @@ -263,6 +266,7 @@ class MainActivity : BaseActivity() { binding.notifyIconCustomCornerItem, binding.notifyIconForceSystemColorItem ).forEach { e -> e.isVisible = isLowerAndroidR.not() && it.not() } + binding.miuiNotifyIconReplacementItem.isVisible = it.not() } onChanged { /** 应用更改并刷新系统界面 */ diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 2ea656e..64aa8b4 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -883,6 +883,34 @@ android:textStyle="bold" /> + + + + + + +