mirror of
https://github.com/fankes/MIUINativeNotifyIcon.git
synced 2025-09-05 18:25:23 +08:00
Fix MIUI 12、12.5 (Android 10) not work bug
This commit is contained in:
@@ -103,7 +103,8 @@ object SystemUIHooker : YukiBaseHooker() {
|
|||||||
/** 根据多个版本存在不同的包名相同的类 */
|
/** 根据多个版本存在不同的包名相同的类 */
|
||||||
private val MiuiClockClass = VariousClass(
|
private val MiuiClockClass = VariousClass(
|
||||||
"$SYSTEMUI_PACKAGE_NAME.statusbar.views.MiuiClock",
|
"$SYSTEMUI_PACKAGE_NAME.statusbar.views.MiuiClock",
|
||||||
"$SYSTEMUI_PACKAGE_NAME.statusbar.policy.MiuiClock"
|
"$SYSTEMUI_PACKAGE_NAME.statusbar.policy.MiuiClock",
|
||||||
|
"$SYSTEMUI_PACKAGE_NAME.statusbar.policy.Clock"
|
||||||
)
|
)
|
||||||
|
|
||||||
/** 根据多个版本存在不同的包名相同的类 */
|
/** 根据多个版本存在不同的包名相同的类 */
|
||||||
@@ -198,18 +199,6 @@ object SystemUIHooker : YukiBaseHooker() {
|
|||||||
private val hasHandleHeaderViews
|
private val hasHandleHeaderViews
|
||||||
get() = safeOfFalse { NotificationHeaderViewWrapperClass.clazz.hasMethod { name = "handleHeaderViews" } }
|
get() = safeOfFalse { NotificationHeaderViewWrapperClass.clazz.hasMethod { name = "handleHeaderViews" } }
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取是否存在忽略图标色彩处理的方法
|
|
||||||
* @return [Boolean]
|
|
||||||
*/
|
|
||||||
private val hasIgnoreStatusBarIconColor
|
|
||||||
get() = safeOfFalse {
|
|
||||||
NotificationUtilClass.clazz.hasMethod {
|
|
||||||
name = "ignoreStatusBarIconColor"
|
|
||||||
param(ExpandedNotificationClass)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理为圆角图标
|
* 处理为圆角图标
|
||||||
* @return [Drawable]
|
* @return [Drawable]
|
||||||
@@ -289,6 +278,18 @@ object SystemUIHooker : YukiBaseHooker() {
|
|||||||
return xmsfPkg.ifBlank { targetPkg.ifBlank { packageName } }
|
return xmsfPkg.ifBlank { targetPkg.ifBlank { packageName } }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否为 MIUI 样式通知栏 - 旧版 - 新版一律返回 false
|
||||||
|
* @return [Boolean]
|
||||||
|
*/
|
||||||
|
private val isShowMiuiStyle get() = NotificationUtilClass.clazz.method { name = "showMiuiStyle" }.ignoredError().get().boolean()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否没有单独的 MIUI 通知栏样式
|
||||||
|
* @return [Boolean]
|
||||||
|
*/
|
||||||
|
private val isNotHasAbsoluteMiuiStyle get() = MiuiNotificationViewWrapperClass.hasClass.not()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取全局上下文
|
* 获取全局上下文
|
||||||
* @return [Context] or null
|
* @return [Context] or null
|
||||||
@@ -584,11 +585,10 @@ object SystemUIHooker : YukiBaseHooker() {
|
|||||||
.get(this).call()?.let {
|
.get(this).call()?.let {
|
||||||
it.javaClass.method {
|
it.javaClass.method {
|
||||||
name = "getSbn"
|
name = "getSbn"
|
||||||
}.get(it).invoke<StatusBarNotification>()
|
}.ignoredError().get(it).invoke<StatusBarNotification>()
|
||||||
} ?: ExpandableNotificationRowClass.clazz
|
} ?: ExpandableNotificationRowClass.clazz
|
||||||
.method { name = "getStatusBarNotification" }
|
.method { name = "getStatusBarNotification" }
|
||||||
.get(NotificationViewWrapperClass.clazz.field { name = "mRow" }.get(this).self)
|
.get(this).invoke<StatusBarNotification>()
|
||||||
.invoke<StatusBarNotification>()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据当前 [ImageView] 的父布局克隆一个新的 [ImageView]
|
* 根据当前 [ImageView] 的父布局克隆一个新的 [ImageView]
|
||||||
@@ -714,10 +714,8 @@ object SystemUIHooker : YukiBaseHooker() {
|
|||||||
* MIUI 12 进行单独判断
|
* MIUI 12 进行单独判断
|
||||||
*/
|
*/
|
||||||
field { name = "mCurrentSetColor" }.get(instance).int().also { color ->
|
field { name = "mCurrentSetColor" }.get(instance).int().also { color ->
|
||||||
if (hasIgnoreStatusBarIconColor) {
|
alpha = if (color.isWhite) 0.95f else 0.8f
|
||||||
alpha = if (color.isWhite) 0.95f else 0.8f
|
setColorFilter(if (color.isWhite) color else Color.BLACK)
|
||||||
setColorFilter(if (color.isWhite) color else Color.BLACK)
|
|
||||||
} else setColorFilter(color)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -796,6 +794,9 @@ object SystemUIHooker : YukiBaseHooker() {
|
|||||||
method { name = "handleHeaderViews" }
|
method { name = "handleHeaderViews" }
|
||||||
else method { name = "resolveHeaderViews" }
|
else method { name = "resolveHeaderViews" }
|
||||||
afterHook {
|
afterHook {
|
||||||
|
/** 忽略较旧版本 - 在没有 MIUI 通知栏样式的时候可能出现奇怪的问题 */
|
||||||
|
if (isNotHasAbsoluteMiuiStyle && isShowMiuiStyle) return@afterHook
|
||||||
|
|
||||||
/** 获取小图标 */
|
/** 获取小图标 */
|
||||||
val iconImageView =
|
val iconImageView =
|
||||||
NotificationHeaderViewWrapperClass.clazz
|
NotificationHeaderViewWrapperClass.clazz
|
||||||
@@ -907,11 +908,11 @@ object SystemUIHooker : YukiBaseHooker() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}.ignoredHookClassNotFoundFailure()
|
||||||
/** 自动检查通知图标优化更新的注入监听 */
|
/** 自动检查通知图标优化更新的注入监听 */
|
||||||
MiuiClockClass.hook {
|
MiuiClockClass.hook {
|
||||||
injectMember {
|
injectMember {
|
||||||
method { name = "updateTime" }
|
method { name = "updateTime" }.remedys { method { name = "updateClock" } }
|
||||||
afterHook {
|
afterHook {
|
||||||
instance<View>().context.also {
|
instance<View>().context.also {
|
||||||
/** 注册定时监听 */
|
/** 注册定时监听 */
|
||||||
@@ -923,6 +924,6 @@ object SystemUIHooker : YukiBaseHooker() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.ignoredHookClassNotFoundFailure()
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -149,13 +149,13 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
|||||||
var statusBarIconCount = modulePrefs.get(DataConst.HOOK_STATUS_ICON_COUNT)
|
var statusBarIconCount = modulePrefs.get(DataConst.HOOK_STATUS_ICON_COUNT)
|
||||||
var notifyIconAutoSyncTime = modulePrefs.get(DataConst.NOTIFY_ICON_FIX_AUTO_TIME)
|
var notifyIconAutoSyncTime = modulePrefs.get(DataConst.NOTIFY_ICON_FIX_AUTO_TIME)
|
||||||
binding.colorIconHookItem.isVisible = modulePrefs.get(DataConst.ENABLE_MODULE)
|
binding.colorIconHookItem.isVisible = modulePrefs.get(DataConst.ENABLE_MODULE)
|
||||||
binding.statusIconCountItem.isVisible = modulePrefs.get(DataConst.ENABLE_MODULE)
|
binding.statusIconCountItem.isVisible = modulePrefs.get(DataConst.ENABLE_MODULE) && isLowerAndroidR.not()
|
||||||
binding.notifyIconConfigItem.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.notifyIconFixButton.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX)
|
||||||
binding.notifyIconCustomCornerItem.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX) &&
|
binding.notifyIconCustomCornerItem.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX) &&
|
||||||
modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FORCE_APP_ICON).not()
|
modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FORCE_APP_ICON).not() && isLowerAndroidR.not()
|
||||||
binding.notifyIconForceAppIconItem.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.notifyIconFixNotifyItem.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX) && isLowerAndroidR.not()
|
||||||
binding.notifyIconAutoSyncItem.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX)
|
binding.notifyIconAutoSyncItem.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX)
|
||||||
binding.statusIconCountSwitch.isChecked = modulePrefs.get(DataConst.ENABLE_HOOK_STATUS_ICON_COUNT)
|
binding.statusIconCountSwitch.isChecked = modulePrefs.get(DataConst.ENABLE_HOOK_STATUS_ICON_COUNT)
|
||||||
binding.statusIconCountChildItem.isVisible = modulePrefs.get(DataConst.ENABLE_HOOK_STATUS_ICON_COUNT)
|
binding.statusIconCountChildItem.isVisible = modulePrefs.get(DataConst.ENABLE_HOOK_STATUS_ICON_COUNT)
|
||||||
@@ -177,7 +177,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
|||||||
modulePrefs.put(DataConst.ENABLE_MODULE, b)
|
modulePrefs.put(DataConst.ENABLE_MODULE, b)
|
||||||
binding.moduleEnableLogSwitch.isVisible = b
|
binding.moduleEnableLogSwitch.isVisible = b
|
||||||
binding.colorIconHookItem.isVisible = b
|
binding.colorIconHookItem.isVisible = b
|
||||||
binding.statusIconCountItem.isVisible = b
|
binding.statusIconCountItem.isVisible = b && isLowerAndroidR.not()
|
||||||
binding.notifyIconConfigItem.isVisible = b
|
binding.notifyIconConfigItem.isVisible = b
|
||||||
SystemUITool.showNeedRestartSnake(context = this)
|
SystemUITool.showNeedRestartSnake(context = this)
|
||||||
}
|
}
|
||||||
@@ -210,16 +210,17 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
|||||||
if (btn.isPressed.not()) return@setOnCheckedChangeListener
|
if (btn.isPressed.not()) return@setOnCheckedChangeListener
|
||||||
modulePrefs.put(DataConst.ENABLE_NOTIFY_ICON_FIX, b)
|
modulePrefs.put(DataConst.ENABLE_NOTIFY_ICON_FIX, b)
|
||||||
binding.notifyIconFixButton.isVisible = b
|
binding.notifyIconFixButton.isVisible = b
|
||||||
binding.notifyIconCustomCornerItem.isVisible = b && modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FORCE_APP_ICON).not()
|
binding.notifyIconCustomCornerItem.isVisible = b &&
|
||||||
|
modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FORCE_APP_ICON).not() && isLowerAndroidR.not()
|
||||||
binding.notifyIconForceAppIconItem.isVisible = b
|
binding.notifyIconForceAppIconItem.isVisible = b
|
||||||
binding.notifyIconFixNotifyItem.isVisible = b
|
binding.notifyIconFixNotifyItem.isVisible = b && isLowerAndroidR.not()
|
||||||
binding.notifyIconAutoSyncItem.isVisible = b
|
binding.notifyIconAutoSyncItem.isVisible = b
|
||||||
SystemUITool.refreshSystemUI(context = this)
|
SystemUITool.refreshSystemUI(context = this)
|
||||||
}
|
}
|
||||||
binding.notifyIconForceAppIconSwitch.setOnCheckedChangeListener { btn, b ->
|
binding.notifyIconForceAppIconSwitch.setOnCheckedChangeListener { btn, b ->
|
||||||
if (btn.isPressed.not()) return@setOnCheckedChangeListener
|
if (btn.isPressed.not()) return@setOnCheckedChangeListener
|
||||||
fun saveState() {
|
fun saveState() {
|
||||||
binding.notifyIconCustomCornerItem.isVisible = b.not()
|
binding.notifyIconCustomCornerItem.isVisible = b.not() && isLowerAndroidR.not()
|
||||||
modulePrefs.put(DataConst.ENABLE_NOTIFY_ICON_FORCE_APP_ICON, b)
|
modulePrefs.put(DataConst.ENABLE_NOTIFY_ICON_FORCE_APP_ICON, b)
|
||||||
SystemUITool.refreshSystemUI(context = this)
|
SystemUITool.refreshSystemUI(context = this)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user