mirror of
				https://github.com/fankes/MIUINativeNotifyIcon.git
				synced 2025-10-26 15:39:21 +08:00 
			
		
		
		
	增加解除状态栏通知图标个数限制功能以及优化界面风格
This commit is contained in:
		| @@ -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" | ||||
|   | ||||
| @@ -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<ViewGroup>().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 { | ||||
|   | ||||
| @@ -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<SwitchCompat>(R.id.module_enable_switch) | ||||
|         val moduleEnableLogSwitch = findViewById<SwitchCompat>(R.id.module_enable_log_switch) | ||||
|         val statusIconCountItem = findViewById<View>(R.id.config_item_s_count_hook) | ||||
|         val statusIconCountChildItem = findViewById<View>(R.id.config_item_s_count_child_hook) | ||||
|         val statusIconCountSwitch = findViewById<SwitchCompat>(R.id.config_status_icon_count_switch) | ||||
|         val statusIconCountText = findViewById<TextView>(R.id.config_status_icon_count_text) | ||||
|         val colorIconHookItem = findViewById<View>(R.id.config_item_color_hook) | ||||
|         val notifyIconConfigItem = findViewById<View>(R.id.config_item_notify) | ||||
|         val hideIconInLauncherSwitch = findViewById<SwitchCompat>(R.id.hide_icon_in_launcher_switch) | ||||
| @@ -116,25 +123,31 @@ class MainActivity : BaseActivity() { | ||||
|         val colorIconCompatText = findViewById<View>(R.id.color_icon_compat_text) | ||||
|         val notifyIconFixSwitch = findViewById<SwitchCompat>(R.id.notify_icon_fix_switch) | ||||
|         val notifyIconFixButton = findViewById<View>(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<View>(R.id.config_status_icon_count_button).setOnClickListener { | ||||
|             showDialog { | ||||
|                 title = "设置最多显示的图标个数" | ||||
|                 var editText: TextInputEditText | ||||
|                 addView(R.layout.dia_status_icon_count).apply { | ||||
|                     editText = findViewById<TextInputEditText>(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<View>(R.id.title_restart_icon).setOnClickListener { SystemUITool.restartSystemUI(context = this) } | ||||
|         /** 恰饭! */ | ||||
|   | ||||
| @@ -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( | ||||
|   | ||||
							
								
								
									
										9
									
								
								app/src/main/res/drawable/ic_notify_icon.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								app/src/main/res/drawable/ic_notify_icon.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| <vector xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     android:width="150dp" | ||||
|     android:height="150dp" | ||||
|     android:viewportWidth="1024" | ||||
|     android:viewportHeight="1024"> | ||||
|   <path | ||||
|       android:fillColor="#FF000000" | ||||
|       android:pathData="M192,736 L192,416C192,261.2 302,132.1 448,102.4L448,64C448,28.6 476.6,0 512,0 547.4,0 576,28.6 576,64L576,102.4C722,132.1 832,261.2 832,416L832,736 864.1,736C899.4,736 928,764.4 928,800 928,835.4 899.4,864 864.1,864L159.9,864C124.6,864 96,835.6 96,800 96,764.6 124.6,736 159.9,736L192,736ZM608,928C608,981 565,1024 512,1024 459,1024 416,981 416,928L608,928Z"/> | ||||
| </vector> | ||||
| @@ -189,6 +189,106 @@ | ||||
|                     android:textSize="12sp" /> | ||||
|             </LinearLayout> | ||||
|  | ||||
|             <LinearLayout | ||||
|                 android:id="@+id/config_item_s_count_hook" | ||||
|                 android:layout_width="match_parent" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:layout_marginLeft="15dp" | ||||
|                 android:layout_marginTop="10dp" | ||||
|                 android:layout_marginRight="15dp" | ||||
|                 android:animateLayoutChanges="true" | ||||
|                 android:background="@drawable/bg_permotion_round" | ||||
|                 android:elevation="0dp" | ||||
|                 android:gravity="center" | ||||
|                 android:orientation="vertical" | ||||
|                 android:paddingLeft="15dp" | ||||
|                 android:paddingRight="15dp"> | ||||
|  | ||||
|                 <com.fankes.miui.notify.view.MaterialSwitch | ||||
|                     android:id="@+id/config_status_icon_count_switch" | ||||
|                     android:layout_width="match_parent" | ||||
|                     android:layout_height="wrap_content" | ||||
|                     android:text="解除状态栏通知图标个数限制" | ||||
|                     android:textColor="@color/colorTextGray" | ||||
|                     android:textSize="15sp" /> | ||||
|  | ||||
|                 <TextView | ||||
|                     android:layout_width="match_parent" | ||||
|                     android:layout_height="wrap_content" | ||||
|                     android:layout_marginBottom="10dp" | ||||
|                     android:alpha="0.6" | ||||
|                     android:lineSpacingExtra="6dp" | ||||
|                     android:text="此选项默认开启,MIUI 默认最多只能显示 3 个图标,其余图标将变成省略号,你可以在下方自定义最多显示的图标个数,修改为 0 则只会显示省略号代表图标个数,为防止发生异常,最大限制 100 个,超出的图标可能会被信号或网速指示器遮挡。" | ||||
|                     android:textColor="@color/colorTextDark" | ||||
|                     android:textSize="12sp" /> | ||||
|  | ||||
|                 <LinearLayout | ||||
|                     android:id="@+id/config_item_s_count_child_hook" | ||||
|                     android:layout_width="match_parent" | ||||
|                     android:layout_height="wrap_content" | ||||
|                     android:layout_marginBottom="10dp" | ||||
|                     android:gravity="center"> | ||||
|  | ||||
|                     <ImageView | ||||
|                         android:layout_width="15dp" | ||||
|                         android:layout_height="15dp" | ||||
|                         android:src="@drawable/ic_notify_icon" | ||||
|                         app:tint="@color/colorTextGray" /> | ||||
|  | ||||
|                     <TextView | ||||
|                         android:layout_width="wrap_content" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:layout_marginStart="10dp" | ||||
|                         android:ellipsize="end" | ||||
|                         android:gravity="center" | ||||
|                         android:singleLine="true" | ||||
|                         android:text="最多显示" | ||||
|                         android:textColor="@color/colorTextGray" | ||||
|                         android:textSize="14sp" /> | ||||
|  | ||||
|                     <TextView | ||||
|                         android:id="@+id/config_status_icon_count_text" | ||||
|                         android:layout_width="wrap_content" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:ellipsize="end" | ||||
|                         android:gravity="center" | ||||
|                         android:maxWidth="100dp" | ||||
|                         android:paddingLeft="5dp" | ||||
|                         android:paddingRight="5dp" | ||||
|                         android:singleLine="true" | ||||
|                         android:text="5" | ||||
|                         android:textColor="@color/colorTextGray" | ||||
|                         android:textSize="14sp" /> | ||||
|  | ||||
|                     <TextView | ||||
|                         android:layout_width="wrap_content" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:layout_marginEnd="10dp" | ||||
|                         android:ellipsize="end" | ||||
|                         android:gravity="center" | ||||
|                         android:singleLine="true" | ||||
|                         android:text="个" | ||||
|                         android:textColor="@color/colorTextGray" | ||||
|                         android:textSize="14sp" /> | ||||
|  | ||||
|                     <TextView | ||||
|                         android:id="@+id/config_status_icon_count_button" | ||||
|                         android:layout_width="wrap_content" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:background="@drawable/bg_button_round" | ||||
|                         android:ellipsize="end" | ||||
|                         android:gravity="center" | ||||
|                         android:paddingLeft="10dp" | ||||
|                         android:paddingTop="5dp" | ||||
|                         android:paddingRight="10dp" | ||||
|                         android:paddingBottom="5dp" | ||||
|                         android:singleLine="true" | ||||
|                         android:text="修改个数" | ||||
|                         android:textColor="@color/colorTextGray" | ||||
|                         android:textSize="14sp" /> | ||||
|                 </LinearLayout> | ||||
|             </LinearLayout> | ||||
|  | ||||
|             <LinearLayout | ||||
|                 android:id="@+id/config_item_color_hook" | ||||
|                 android:layout_width="match_parent" | ||||
|   | ||||
							
								
								
									
										26
									
								
								app/src/main/res/layout/dia_status_icon_count.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								app/src/main/res/layout/dia_status_icon_count.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     xmlns:tools="http://schemas.android.com/tools" | ||||
|     android:layout_width="match_parent" | ||||
|     android:layout_height="wrap_content" | ||||
|     android:orientation="vertical" | ||||
|     android:paddingLeft="15dp" | ||||
|     android:paddingTop="15dp" | ||||
|     android:paddingRight="15dp" | ||||
|     tools:ignore="HardcodedText"> | ||||
|  | ||||
|     <com.google.android.material.textfield.TextInputLayout | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content"> | ||||
|  | ||||
|         <com.google.android.material.textfield.TextInputEditText | ||||
|             android:id="@+id/dia_status_icon_count_input_edit" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:digits="0123456789" | ||||
|             android:ellipsize="end" | ||||
|             android:hint="请输入 0-100 之间的整数" | ||||
|             android:inputType="number" | ||||
|             android:singleLine="true" /> | ||||
|     </com.google.android.material.textfield.TextInputLayout> | ||||
| </LinearLayout> | ||||
		Reference in New Issue
	
	Block a user