From ac17f3ae55133e8efbad2a7d5b1b8b25a7cf61a2 Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Mon, 30 May 2022 03:24:40 +0800 Subject: [PATCH] Added notify icon in notify panel used app icon function --- .../fankes/coloros/notify/data/DataConst.kt | 1 + .../notify/hook/entity/SystemUIHooker.kt | 47 ++++++++++++------- .../notify/ui/activity/MainActivity.kt | 19 ++++++++ app/src/main/res/layout/activity_main.xml | 28 +++++++++++ 4 files changed, 78 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/fankes/coloros/notify/data/DataConst.kt b/app/src/main/java/com/fankes/coloros/notify/data/DataConst.kt index 518295c..a0fb822 100644 --- a/app/src/main/java/com/fankes/coloros/notify/data/DataConst.kt +++ b/app/src/main/java/com/fankes/coloros/notify/data/DataConst.kt @@ -33,6 +33,7 @@ object DataConst { val ENABLE_HIDE_ICON = PrefsData("_hide_icon", false) val ENABLE_ANDROID12_STYLE = PrefsData("_notify_android12_style", isUpperOfAndroidS) val ENABLE_NOTIFY_ICON_FIX = PrefsData("_notify_icon_fix", true) + val ENABLE_NOTIFY_ICON_FORCE_APP_ICON = PrefsData("_notify_icon_force_app_icon", false) val ENABLE_NOTIFY_ICON_FIX_NOTIFY = PrefsData("_notify_icon_fix_notify", true) val REMOVE_DEV_NOTIFY = PrefsData("_remove_dev_notify", true) val REMOVE_CHANGECP_NOTIFY = PrefsData("_remove_charge_complete_notify", false) diff --git a/app/src/main/java/com/fankes/coloros/notify/hook/entity/SystemUIHooker.kt b/app/src/main/java/com/fankes/coloros/notify/hook/entity/SystemUIHooker.kt index ebe1b8b..682408b 100644 --- a/app/src/main/java/com/fankes/coloros/notify/hook/entity/SystemUIHooker.kt +++ b/app/src/main/java/com/fankes/coloros/notify/hook/entity/SystemUIHooker.kt @@ -428,6 +428,13 @@ object SystemUIHooker : YukiBaseHooker() { ) = runInSafe { compatCustomIcon(isGrayscaleIcon, packageName).also { customPair -> when { + prefs.get(DataConst.ENABLE_NOTIFY_ICON_FORCE_APP_ICON) && isEnableHookColorNotifyIcon(isHooking = false) -> + iconView.apply { + /** 重新设置图标 */ + setImageDrawable(appIcons[packageName] ?: context.findAppIcon(packageName)) + /** 设置默认样式 */ + setDefaultNotifyIconViewStyle() + } customPair.first != null || isGrayscaleIcon -> iconView.apply { /** 设置不要裁切到边界 */ clipToOutline = false @@ -467,23 +474,8 @@ object SystemUIHooker : YukiBaseHooker() { else -> iconView.apply { /** 重新设置图标 */ setImageDrawable(nf.compatPushingIcon(drawable)) - /** 设置裁切到边界 */ - clipToOutline = true - /** 设置一个圆角轮廓裁切 */ - outlineProvider = object : ViewOutlineProvider() { - override fun getOutline(view: View, out: Outline) { - out.setRoundRect( - 0, 0, - view.width, view.height, 3.dpFloat(context) - ) - } - } - /** 清除图标间距 */ - setPadding(0, 0, 0, 0) - /** 清除背景 */ - background = null - /** 清除着色 */ - colorFilter = null + /** 设置默认样式 */ + setDefaultNotifyIconViewStyle() } } /** 打印日志 */ @@ -520,6 +512,27 @@ object SystemUIHooker : YukiBaseHooker() { } } + /** 设置默认通知栏通知图标样式 */ + private fun ImageView.setDefaultNotifyIconViewStyle() { + /** 设置裁切到边界 */ + clipToOutline = true + /** 设置一个圆角轮廓裁切 */ + outlineProvider = object : ViewOutlineProvider() { + override fun getOutline(view: View, out: Outline) { + out.setRoundRect( + 0, 0, + view.width, view.height, 3.dpFloat(context) + ) + } + } + /** 清除图标间距 */ + setPadding(0, 0, 0, 0) + /** 清除背景 */ + background = null + /** 清除着色 */ + colorFilter = null + } + /** 注册 */ private fun register() { /** 解锁后重新刷新状态栏图标防止系统重新设置它 */ diff --git a/app/src/main/java/com/fankes/coloros/notify/ui/activity/MainActivity.kt b/app/src/main/java/com/fankes/coloros/notify/ui/activity/MainActivity.kt index 16f0bf2..f35842a 100644 --- a/app/src/main/java/com/fankes/coloros/notify/ui/activity/MainActivity.kt +++ b/app/src/main/java/com/fankes/coloros/notify/ui/activity/MainActivity.kt @@ -124,6 +124,7 @@ class MainActivity : BaseActivity() { binding.a12StyleConfigItem.isVisible = modulePrefs.get(DataConst.ENABLE_MODULE) binding.notifyIconConfigItem.isVisible = modulePrefs.get(DataConst.ENABLE_MODULE) binding.notifyIconFixButton.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX) + binding.notifyIconForceAppIconItem.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX) binding.notifyIconFixNotifyItem.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX) binding.notifyIconAutoSyncItem.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX) binding.notifyIconAutoSyncChildItem.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX_AUTO) @@ -139,6 +140,7 @@ class MainActivity : BaseActivity() { binding.moduleEnableLogSwitch.isChecked = modulePrefs.get(DataConst.ENABLE_MODULE_LOG) binding.hideIconInLauncherSwitch.isChecked = modulePrefs.get(DataConst.ENABLE_HIDE_ICON) binding.notifyIconFixSwitch.isChecked = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX) + binding.notifyIconForceAppIconSwitch.isChecked = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FORCE_APP_ICON) binding.notifyIconFixNotifySwitch.isChecked = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX_NOTIFY) binding.notifyIconAutoSyncSwitch.isChecked = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX_AUTO) binding.notifyPanelConfigSwitch.isChecked = modulePrefs.get(DataConst.ENABLE_NOTIFY_PANEL_ALPHA) @@ -177,10 +179,27 @@ class MainActivity : BaseActivity() { if (btn.isPressed.not()) return@setOnCheckedChangeListener modulePrefs.put(DataConst.ENABLE_NOTIFY_ICON_FIX, b) binding.notifyIconFixButton.isVisible = b + binding.notifyIconForceAppIconItem.isVisible = b binding.notifyIconFixNotifyItem.isVisible = b binding.notifyIconAutoSyncItem.isVisible = b SystemUITool.refreshSystemUI(context = this) } + binding.notifyIconForceAppIconSwitch.setOnCheckedChangeListener { btn, b -> + if (btn.isPressed.not()) return@setOnCheckedChangeListener + fun saveState() { + modulePrefs.put(DataConst.ENABLE_NOTIFY_ICON_FORCE_APP_ICON, b) + SystemUITool.refreshSystemUI(context = this) + } + if (b) showDialog { + title = "破坏性功能警告" + msg = "开启这个功能后,任何通知栏中的通知图标都会被强制替换为当前推送通知的 APP 的图标," + + "某些系统级别的 APP 通知图标可能会显示异常或发生图标丢失。\n\n" + + "此功能仅面向一些追求图标美观度的用户,我们不推荐开启这个功能,且发生任何 BUG 都不会去修复,仍然继续开启吗?" + confirmButton { saveState() } + cancelButton { btn.isChecked = btn.isChecked.not() } + noCancelable() + } else saveState() + } binding.notifyIconFixNotifySwitch.setOnCheckedChangeListener { btn, b -> if (btn.isPressed.not()) return@setOnCheckedChangeListener modulePrefs.put(DataConst.ENABLE_NOTIFY_ICON_FIX_NOTIFY, b) diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index c8cbcef..bb6fea2 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -639,6 +639,34 @@ android:textColor="@color/colorTextDark" android:textSize="12sp" /> + + + + + + +