From ea665fdc300a3e1a9d7a118d461d8134d91f4930 Mon Sep 17 00:00:00 2001 From: Fankesyooni Date: Thu, 17 Mar 2022 04:56:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=A7=A3=E9=99=A4=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=A0=8F=E9=80=9A=E7=9F=A5=E5=9B=BE=E6=A0=87=E4=B8=AA?= =?UTF-8?q?=E6=95=B0=E9=99=90=E5=88=B6=E5=8A=9F=E8=83=BD=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=95=8C=E9=9D=A2=E9=A3=8E=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 6 +- .../com/fankes/miui/notify/hook/HookConst.kt | 2 + .../com/fankes/miui/notify/hook/HookEntry.kt | 22 ++++ .../com/fankes/miui/notify/ui/MainActivity.kt | 49 ++++++++- .../fankes/miui/notify/view/MaterialSwitch.kt | 2 +- app/src/main/res/drawable/ic_notify_icon.xml | 9 ++ app/src/main/res/layout/activity_main.xml | 100 ++++++++++++++++++ .../main/res/layout/dia_status_icon_count.xml | 26 +++++ 8 files changed, 212 insertions(+), 4 deletions(-) create mode 100644 app/src/main/res/drawable/ic_notify_icon.xml create mode 100644 app/src/main/res/layout/dia_status_icon_count.xml diff --git a/.idea/misc.xml b/.idea/misc.xml index 1f82598..5c77a89 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -12,18 +12,20 @@ + - + + - + diff --git a/app/src/main/java/com/fankes/miui/notify/hook/HookConst.kt b/app/src/main/java/com/fankes/miui/notify/hook/HookConst.kt index cb01b44..965004d 100644 --- a/app/src/main/java/com/fankes/miui/notify/hook/HookConst.kt +++ b/app/src/main/java/com/fankes/miui/notify/hook/HookConst.kt @@ -32,7 +32,9 @@ object HookConst { const val ENABLE_COLOR_ICON_HOOK = "_color_icon_hook" const val ENABLE_COLOR_ICON_COMPAT = "_color_icon_compat" const val ENABLE_NOTIFY_ICON_FIX = "_notify_icon_fix" + const val ENABLE_HOOK_STATUS_ICON_COUNT = "_enable_hook_status_icon_count" const val NOTIFY_ICON_DATAS = "_notify_icon_datas" + const val HOOK_STATUS_ICON_COUNT = "_hook_status_icon_count" const val SOURCE_SYNC_WAY = "_source_sync_way" const val SOURCE_SYNC_WAY_CUSTOM_URL = "_source_sync_way_custom_url" diff --git a/app/src/main/java/com/fankes/miui/notify/hook/HookEntry.kt b/app/src/main/java/com/fankes/miui/notify/hook/HookEntry.kt index c6af25b..90abab3 100644 --- a/app/src/main/java/com/fankes/miui/notify/hook/HookEntry.kt +++ b/app/src/main/java/com/fankes/miui/notify/hook/HookEntry.kt @@ -32,15 +32,18 @@ import android.graphics.drawable.Icon import android.os.Build import android.service.notification.StatusBarNotification import android.view.View +import android.view.ViewGroup import android.view.ViewOutlineProvider import android.widget.ImageView import androidx.core.graphics.drawable.toBitmap import com.fankes.miui.notify.bean.IconDataBean import com.fankes.miui.notify.hook.HookConst.ENABLE_COLOR_ICON_COMPAT import com.fankes.miui.notify.hook.HookConst.ENABLE_COLOR_ICON_HOOK +import com.fankes.miui.notify.hook.HookConst.ENABLE_HOOK_STATUS_ICON_COUNT import com.fankes.miui.notify.hook.HookConst.ENABLE_MODULE import com.fankes.miui.notify.hook.HookConst.ENABLE_MODULE_LOG import com.fankes.miui.notify.hook.HookConst.ENABLE_NOTIFY_ICON_FIX +import com.fankes.miui.notify.hook.HookConst.HOOK_STATUS_ICON_COUNT import com.fankes.miui.notify.hook.HookConst.SYSTEMUI_PACKAGE_NAME import com.fankes.miui.notify.hook.factory.isAppNotifyHookAllOf import com.fankes.miui.notify.hook.factory.isAppNotifyHookOf @@ -543,6 +546,25 @@ class HookEntry : YukiHookXposedInitProxy { } } } + NotificationIconContainerClass.hook { + injectMember { + method { name = "calculateIconTranslations" } + afterHook { + /** 修复最新开发版状态栏图标只能显示一个的问题 */ + instance().layoutParams.width = 9999 + } + } + injectMember { + method { name = "updateState" } + beforeHook { + /** 解除状态栏通知图标个数限制 */ + if (prefs.getBoolean(ENABLE_HOOK_STATUS_ICON_COUNT, default = true)) + field { name = "MAX_STATIC_ICONS" } + .get(instance).set(prefs.getInt(HOOK_STATUS_ICON_COUNT, default = 5) + .let { if (it in 0..100) it else 5 }) + } + } + } NotificationHeaderViewWrapperClass.hook { /** 修复下拉通知图标自动设置回 APP 图标的方法 */ injectMember { diff --git a/app/src/main/java/com/fankes/miui/notify/ui/MainActivity.kt b/app/src/main/java/com/fankes/miui/notify/ui/MainActivity.kt index 23ef159..c6a46a4 100644 --- a/app/src/main/java/com/fankes/miui/notify/ui/MainActivity.kt +++ b/app/src/main/java/com/fankes/miui/notify/ui/MainActivity.kt @@ -39,12 +39,15 @@ import com.fankes.miui.notify.R import com.fankes.miui.notify.hook.HookConst.ENABLE_COLOR_ICON_COMPAT import com.fankes.miui.notify.hook.HookConst.ENABLE_COLOR_ICON_HOOK import com.fankes.miui.notify.hook.HookConst.ENABLE_HIDE_ICON +import com.fankes.miui.notify.hook.HookConst.ENABLE_HOOK_STATUS_ICON_COUNT import com.fankes.miui.notify.hook.HookConst.ENABLE_MODULE import com.fankes.miui.notify.hook.HookConst.ENABLE_MODULE_LOG import com.fankes.miui.notify.hook.HookConst.ENABLE_NOTIFY_ICON_FIX +import com.fankes.miui.notify.hook.HookConst.HOOK_STATUS_ICON_COUNT import com.fankes.miui.notify.ui.base.BaseActivity import com.fankes.miui.notify.utils.factory.* import com.fankes.miui.notify.utils.tool.SystemUITool +import com.google.android.material.textfield.TextInputEditText import com.highcapable.yukihookapi.hook.factory.modulePrefs import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus @@ -108,6 +111,10 @@ class MainActivity : BaseActivity() { /** 初始化 View */ val moduleEnableSwitch = findViewById(R.id.module_enable_switch) val moduleEnableLogSwitch = findViewById(R.id.module_enable_log_switch) + val statusIconCountItem = findViewById(R.id.config_item_s_count_hook) + val statusIconCountChildItem = findViewById(R.id.config_item_s_count_child_hook) + val statusIconCountSwitch = findViewById(R.id.config_status_icon_count_switch) + val statusIconCountText = findViewById(R.id.config_status_icon_count_text) val colorIconHookItem = findViewById(R.id.config_item_color_hook) val notifyIconConfigItem = findViewById(R.id.config_item_notify) val hideIconInLauncherSwitch = findViewById(R.id.hide_icon_in_launcher_switch) @@ -116,25 +123,31 @@ class MainActivity : BaseActivity() { val colorIconCompatText = findViewById(R.id.color_icon_compat_text) val notifyIconFixSwitch = findViewById(R.id.notify_icon_fix_switch) val notifyIconFixButton = findViewById(R.id.config_notify_app_button) + /** 获取 Sp 存储的信息 */ + val statusBarIconCount = modulePrefs.getInt(HOOK_STATUS_ICON_COUNT, default = 5) colorIconHookItem.isVisible = modulePrefs.getBoolean(ENABLE_MODULE, default = true) + statusIconCountItem.isVisible = modulePrefs.getBoolean(ENABLE_MODULE, default = true) colorIconCompatSwitch.isVisible = modulePrefs.getBoolean(ENABLE_COLOR_ICON_HOOK, default = true) colorIconCompatText.isVisible = modulePrefs.getBoolean(ENABLE_COLOR_ICON_HOOK, default = true) notifyIconConfigItem.isVisible = modulePrefs.getBoolean(ENABLE_MODULE, default = true) && modulePrefs.getBoolean(ENABLE_COLOR_ICON_HOOK, default = true) - moduleEnableLogSwitch.isVisible = modulePrefs.getBoolean(ENABLE_MODULE, default = true) notifyIconFixButton.isVisible = modulePrefs.getBoolean(ENABLE_NOTIFY_ICON_FIX, default = true) + statusIconCountSwitch.isChecked = modulePrefs.getBoolean(ENABLE_HOOK_STATUS_ICON_COUNT, default = true) + statusIconCountChildItem.isVisible = modulePrefs.getBoolean(ENABLE_HOOK_STATUS_ICON_COUNT, default = true) moduleEnableSwitch.isChecked = modulePrefs.getBoolean(ENABLE_MODULE, default = true) moduleEnableLogSwitch.isChecked = modulePrefs.getBoolean(ENABLE_MODULE_LOG, default = false) hideIconInLauncherSwitch.isChecked = modulePrefs.getBoolean(ENABLE_HIDE_ICON) colorIconHookSwitch.isChecked = modulePrefs.getBoolean(ENABLE_COLOR_ICON_HOOK, default = true) colorIconCompatSwitch.isChecked = modulePrefs.getBoolean(ENABLE_COLOR_ICON_COMPAT) notifyIconFixSwitch.isChecked = modulePrefs.getBoolean(ENABLE_NOTIFY_ICON_FIX, default = true) + statusIconCountText.text = statusBarIconCount.toString() moduleEnableSwitch.setOnCheckedChangeListener { btn, b -> if (!btn.isPressed) return@setOnCheckedChangeListener modulePrefs.putBoolean(ENABLE_MODULE, b) moduleEnableLogSwitch.isVisible = b colorIconHookItem.isVisible = b + statusIconCountItem.isVisible = b notifyIconConfigItem.isVisible = b && colorIconHookSwitch.isChecked SystemUITool.showNeedRestartSnake(context = this) } @@ -152,6 +165,12 @@ class MainActivity : BaseActivity() { PackageManager.DONT_KILL_APP ) } + statusIconCountSwitch.setOnCheckedChangeListener { btn, b -> + if (!btn.isPressed) return@setOnCheckedChangeListener + modulePrefs.putBoolean(ENABLE_HOOK_STATUS_ICON_COUNT, b) + statusIconCountChildItem.isVisible = b + SystemUITool.showNeedRestartSnake(context = this) + } colorIconHookSwitch.setOnCheckedChangeListener { btn, b -> if (!btn.isPressed) return@setOnCheckedChangeListener modulePrefs.putBoolean(ENABLE_COLOR_ICON_HOOK, b) @@ -173,6 +192,34 @@ class MainActivity : BaseActivity() { } /** 通知图标优化名单按钮点击事件 */ notifyIconFixButton.setOnClickListener { startActivity(Intent(this, ConfigureActivity::class.java)) } + /** 修改状态栏通知图标个数按钮点击事件 */ + findViewById(R.id.config_status_icon_count_button).setOnClickListener { + showDialog { + title = "设置最多显示的图标个数" + var editText: TextInputEditText + addView(R.layout.dia_status_icon_count).apply { + editText = findViewById(R.id.dia_status_icon_count_input_edit).apply { + requestFocus() + invalidate() + setText(statusBarIconCount.toString()) + setSelection(statusBarIconCount.toString().length) + } + } + confirmButton { + when { + (runCatching { editText.text.toString().toInt() }.getOrNull() ?: -1) + !in 0..100 -> snake(msg = "请输入有效数值") + editText.text.toString().isNotBlank() -> runCatching { + modulePrefs.putInt(HOOK_STATUS_ICON_COUNT, editText.text.toString().trim().toInt()) + statusIconCountText.text = editText.text.toString().trim() + SystemUITool.showNeedRestartSnake(context = this@MainActivity) + }.onFailure { snake(msg = "数值格式无效") } + else -> snake(msg = "请输入有效数值") + } + } + cancelButton() + } + } /** 重启按钮点击事件 */ findViewById(R.id.title_restart_icon).setOnClickListener { SystemUITool.restartSystemUI(context = this) } /** 恰饭! */ diff --git a/app/src/main/java/com/fankes/miui/notify/view/MaterialSwitch.kt b/app/src/main/java/com/fankes/miui/notify/view/MaterialSwitch.kt index 396dae4..7201a21 100644 --- a/app/src/main/java/com/fankes/miui/notify/view/MaterialSwitch.kt +++ b/app/src/main/java/com/fankes/miui/notify/view/MaterialSwitch.kt @@ -57,7 +57,7 @@ class MaterialSwitch(context: Context, attrs: AttributeSet?) : SwitchCompat(cont .solidColor(Color.WHITE) .size(20.dp, 20.dp) .cornerRadius(20.dp) - .strokeWidth(2.dp) + .strokeWidth(8.dp) .strokeColor(Color.TRANSPARENT) .build() trackTintList = toColors( diff --git a/app/src/main/res/drawable/ic_notify_icon.xml b/app/src/main/res/drawable/ic_notify_icon.xml new file mode 100644 index 0000000..30a3a2b --- /dev/null +++ b/app/src/main/res/drawable/ic_notify_icon.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index f0db32e..1e7ada3 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -189,6 +189,106 @@ android:textSize="12sp" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file