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