mirror of
https://github.com/fankes/MIUINativeNotifyIcon.git
synced 2025-09-06 02:35:32 +08:00
fix: notification panel refresh function
- Use SettingsManager instead StatusBarNotificationPresenter on A14 and HyperOS
This commit is contained in:
@@ -81,6 +81,7 @@ import com.highcapable.yukihookapi.hook.factory.constructor
|
|||||||
import com.highcapable.yukihookapi.hook.factory.current
|
import com.highcapable.yukihookapi.hook.factory.current
|
||||||
import com.highcapable.yukihookapi.hook.factory.extends
|
import com.highcapable.yukihookapi.hook.factory.extends
|
||||||
import com.highcapable.yukihookapi.hook.factory.field
|
import com.highcapable.yukihookapi.hook.factory.field
|
||||||
|
import com.highcapable.yukihookapi.hook.factory.hasMethod
|
||||||
import com.highcapable.yukihookapi.hook.factory.injectModuleAppResources
|
import com.highcapable.yukihookapi.hook.factory.injectModuleAppResources
|
||||||
import com.highcapable.yukihookapi.hook.factory.method
|
import com.highcapable.yukihookapi.hook.factory.method
|
||||||
import com.highcapable.yukihookapi.hook.log.YLog
|
import com.highcapable.yukihookapi.hook.log.YLog
|
||||||
@@ -112,6 +113,9 @@ object SystemUIHooker : YukiBaseHooker() {
|
|||||||
private val NotificationHeaderViewWrapperInjectorClass
|
private val NotificationHeaderViewWrapperInjectorClass
|
||||||
by lazyClassOrNull("${PackageName.SYSTEMUI}.statusbar.notification.row.wrapper.NotificationHeaderViewWrapperInjector")
|
by lazyClassOrNull("${PackageName.SYSTEMUI}.statusbar.notification.row.wrapper.NotificationHeaderViewWrapperInjector")
|
||||||
|
|
||||||
|
/** MIUI 未确定版本存在的类 */
|
||||||
|
private val SettingsManagerClass by lazyClassOrNull("com.miui.systemui.SettingsManager")
|
||||||
|
|
||||||
/** MIUI 新版本存在的类 */
|
/** MIUI 新版本存在的类 */
|
||||||
private val NotificationStatClass by lazyClassOrNull("${PackageName.SYSTEMUI}.statusbar.notification.analytics.NotificationStat")
|
private val NotificationStatClass by lazyClassOrNull("${PackageName.SYSTEMUI}.statusbar.notification.analytics.NotificationStat")
|
||||||
|
|
||||||
@@ -199,6 +203,9 @@ object SystemUIHooker : YukiBaseHooker() {
|
|||||||
/** 通知栏通知控制器 */
|
/** 通知栏通知控制器 */
|
||||||
private var notificationPresenter: Any? = null
|
private var notificationPresenter: Any? = null
|
||||||
|
|
||||||
|
/** 设置管理器 */
|
||||||
|
private var settingsManager: Any? = null
|
||||||
|
|
||||||
/** 仅监听一次主题壁纸颜色变化 */
|
/** 仅监听一次主题壁纸颜色变化 */
|
||||||
private var isWallpaperColorListenerSetUp = false
|
private var isWallpaperColorListenerSetUp = false
|
||||||
|
|
||||||
@@ -357,10 +364,16 @@ object SystemUIHooker : YukiBaseHooker() {
|
|||||||
|
|
||||||
/** 刷新通知小图标 */
|
/** 刷新通知小图标 */
|
||||||
private fun refreshNotificationIcons() = runInSafe {
|
private fun refreshNotificationIcons() = runInSafe {
|
||||||
notificationPresenter?.current()?.method {
|
val updateNotificationMethodName = "updateNotificationsOnDensityOrFontScaleChanged"
|
||||||
name = "updateNotificationsOnDensityOrFontScaleChanged"
|
if (StatusBarNotificationPresenterClass.hasMethod { name = updateNotificationMethodName })
|
||||||
emptyParam()
|
notificationPresenter?.current(ignored = true)?.method {
|
||||||
}?.call()
|
name = updateNotificationMethodName
|
||||||
|
emptyParam()
|
||||||
|
}?.call()
|
||||||
|
else settingsManager?.current {
|
||||||
|
field { name = "notifStyle" }.set(-100)
|
||||||
|
method { name = "onNotifStyleChanged" }.call()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -893,6 +906,8 @@ object SystemUIHooker : YukiBaseHooker() {
|
|||||||
/** 注册壁纸颜色监听 */
|
/** 注册壁纸颜色监听 */
|
||||||
if (args().first().any() != null) instance<ImageView>().also { registerWallpaperColorChanged(it) }
|
if (args().first().any() != null) instance<ImageView>().also { registerWallpaperColorChanged(it) }
|
||||||
}
|
}
|
||||||
|
/** 注入设置管理器实例 */
|
||||||
|
SettingsManagerClass?.constructor()?.hookAll()?.after { settingsManager = instance }
|
||||||
/** 注入通知控制器实例 */
|
/** 注入通知控制器实例 */
|
||||||
StatusBarNotificationPresenterClass.constructor().hookAll().after { notificationPresenter = instance }
|
StatusBarNotificationPresenterClass.constructor().hookAll().after { notificationPresenter = instance }
|
||||||
/** 注入状态栏通知图标容器实例 */
|
/** 注入状态栏通知图标容器实例 */
|
||||||
|
Reference in New Issue
Block a user