mirror of
https://github.com/fankes/MIUINativeNotifyIcon.git
synced 2025-09-06 18:55:25 +08:00
Merge new version
This commit is contained in:
@@ -58,8 +58,8 @@ tasks.whenTaskAdded {
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation "com.github.topjohnwu.libsu:core:3.1.2"
|
implementation "com.github.topjohnwu.libsu:core:3.1.2"
|
||||||
compileOnly 'de.robv.android.xposed:api:82'
|
compileOnly 'de.robv.android.xposed:api:82'
|
||||||
implementation 'com.highcapable.yukihookapi:api:1.0'
|
implementation 'com.highcapable.yukihookapi:api:1.0.1'
|
||||||
ksp 'com.highcapable.yukihookapi:ksp-xposed:1.0'
|
ksp 'com.highcapable.yukihookapi:ksp-xposed:1.0.1'
|
||||||
implementation 'com.geyifeng.immersionbar:immersionbar:3.2.0'
|
implementation 'com.geyifeng.immersionbar:immersionbar:3.2.0'
|
||||||
implementation 'com.geyifeng.immersionbar:immersionbar-ktx:3.2.0'
|
implementation 'com.geyifeng.immersionbar:immersionbar-ktx:3.2.0'
|
||||||
implementation 'androidx.core:core-ktx:1.7.0'
|
implementation 'androidx.core:core-ktx:1.7.0'
|
||||||
|
@@ -42,7 +42,6 @@ import com.fankes.miui.notify.hook.factory.isAppNotifyHookAllOf
|
|||||||
import com.fankes.miui.notify.hook.factory.isAppNotifyHookOf
|
import com.fankes.miui.notify.hook.factory.isAppNotifyHookOf
|
||||||
import com.fankes.miui.notify.params.IconPackParams
|
import com.fankes.miui.notify.params.IconPackParams
|
||||||
import com.fankes.miui.notify.utils.*
|
import com.fankes.miui.notify.utils.*
|
||||||
import com.highcapable.yukihookapi.YukiHookAPI.configs
|
|
||||||
import com.highcapable.yukihookapi.annotation.xposed.InjectYukiHookWithXposed
|
import com.highcapable.yukihookapi.annotation.xposed.InjectYukiHookWithXposed
|
||||||
import com.highcapable.yukihookapi.hook.bean.VariousClass
|
import com.highcapable.yukihookapi.hook.bean.VariousClass
|
||||||
import com.highcapable.yukihookapi.hook.factory.*
|
import com.highcapable.yukihookapi.hook.factory.*
|
||||||
@@ -106,8 +105,8 @@ class HookEntry : YukiHookXposedInitProxy {
|
|||||||
*/
|
*/
|
||||||
private fun PackageParam.isGrayscaleIcon(context: Context, drawable: Drawable) = safeOfFalse {
|
private fun PackageParam.isGrayscaleIcon(context: Context, drawable: Drawable) = safeOfFalse {
|
||||||
ContrastColorUtilClass.clazz.let {
|
ContrastColorUtilClass.clazz.let {
|
||||||
it.obtainMethod(name = "isGrayscaleIcon", DrawableClass)
|
it.method(name = "isGrayscaleIcon", DrawableClass)
|
||||||
?.invokeAny<Boolean>(it.obtainMethod(name = "getInstance", ContextClass)?.invokeStatic(context), drawable) ?: false
|
?.call<Boolean>(it.method(name = "getInstance", ContextClass)?.callStatic(context), drawable) ?: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,7 +115,7 @@ class HookEntry : YukiHookXposedInitProxy {
|
|||||||
* @return [Boolean]
|
* @return [Boolean]
|
||||||
*/
|
*/
|
||||||
private fun PackageParam.isShowMiuiStyle() = safeOfFalse {
|
private fun PackageParam.isShowMiuiStyle() = safeOfFalse {
|
||||||
NotificationUtilClass.clazz.obtainMethod(name = "showMiuiStyle")?.invokeStatic() ?: false
|
NotificationUtilClass.clazz.method(name = "showMiuiStyle")?.callStatic() ?: false
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -135,7 +134,7 @@ class HookEntry : YukiHookXposedInitProxy {
|
|||||||
* @return [String]
|
* @return [String]
|
||||||
*/
|
*/
|
||||||
private fun PackageParam.findAppName(instance: Any?) = safeOf(default = "<unknown>") {
|
private fun PackageParam.findAppName(instance: Any?) = safeOf(default = "<unknown>") {
|
||||||
ExpandedNotificationClass.clazz.obtainMethod(name = "getAppName")?.invokeAny(instance) ?: "<empty>"
|
ExpandedNotificationClass.clazz.method(name = "getAppName")?.call(instance) ?: "<empty>"
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -150,7 +149,7 @@ class HookEntry : YukiHookXposedInitProxy {
|
|||||||
*/
|
*/
|
||||||
private val PackageParam.globalContext
|
private val PackageParam.globalContext
|
||||||
get() = safeOfNull {
|
get() = safeOfNull {
|
||||||
SystemUIApplicationClass.clazz.obtainMethod(name = "getContext")?.invokeStatic<Context?>()
|
SystemUIApplicationClass.clazz.method(name = "getContext")?.callStatic<Context>()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -337,7 +336,7 @@ class HookEntry : YukiHookXposedInitProxy {
|
|||||||
!prefs.getBoolean(ENABLE_MODULE, default = true) -> loggerW(msg = "Aborted Hook -> Hook Closed")
|
!prefs.getBoolean(ENABLE_MODULE, default = true) -> loggerW(msg = "Aborted Hook -> Hook Closed")
|
||||||
/** 开始 Hook */
|
/** 开始 Hook */
|
||||||
else -> {
|
else -> {
|
||||||
findClass(NotificationUtilClass).hook {
|
NotificationUtilClass.hook {
|
||||||
/** 强制回写系统的状态栏图标样式为原生 */
|
/** 强制回写系统的状态栏图标样式为原生 */
|
||||||
injectMember {
|
injectMember {
|
||||||
method {
|
method {
|
||||||
@@ -402,7 +401,7 @@ class HookEntry : YukiHookXposedInitProxy {
|
|||||||
val iconImageView = instance<ImageView?>() ?: return@afterHook
|
val iconImageView = instance<ImageView?>() ?: return@afterHook
|
||||||
|
|
||||||
/** 获取通知实例 */
|
/** 获取通知实例 */
|
||||||
val expandedNf = thisClass.obtainFieldAny<StatusBarNotification?>(instance, name = "mNotification")
|
val expandedNf = field { name = "mNotification" }.of<StatusBarNotification>(instance)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 强制设置图标 - 防止 MIPUSH 不生效
|
* 强制设置图标 - 防止 MIPUSH 不生效
|
||||||
@@ -468,14 +467,19 @@ class HookEntry : YukiHookXposedInitProxy {
|
|||||||
/** 对于之前没有通知图标色彩判断功能的版本判断是 MIUI 样式就停止 Hook */
|
/** 对于之前没有通知图标色彩判断功能的版本判断是 MIUI 样式就停止 Hook */
|
||||||
if (!hasIgnoreStatusBarIconColor() && isShowMiuiStyle()) return@afterHook
|
if (!hasIgnoreStatusBarIconColor() && isShowMiuiStyle()) return@afterHook
|
||||||
/** 获取小图标 */
|
/** 获取小图标 */
|
||||||
val iconImageView = NotificationHeaderViewWrapperClass.clazz
|
val iconImageView = field {
|
||||||
.obtainFieldAny<ImageView?>(any = instance, name = "mIcon") ?: return@afterHook
|
classSet = NotificationHeaderViewWrapperClass.clazz
|
||||||
|
name = "mIcon"
|
||||||
|
}.of<ImageView>(instance) ?: return@afterHook
|
||||||
/** 从父类中得到 mRow 变量 - [ExpandableNotificationRowClass] */
|
/** 从父类中得到 mRow 变量 - [ExpandableNotificationRowClass] */
|
||||||
NotificationViewWrapperClass.clazz.obtainFieldAny<Any>(instance, name = "mRow").apply {
|
field {
|
||||||
|
classSet = NotificationViewWrapperClass.clazz
|
||||||
|
name = "mRow"
|
||||||
|
}.get(instance).apply {
|
||||||
/** 获取其中的得到通知方法 */
|
/** 获取其中的得到通知方法 */
|
||||||
val expandedNf =
|
val expandedNf =
|
||||||
ExpandableNotificationRowClass.clazz.obtainMethod(name = "getStatusBarNotification")
|
ExpandableNotificationRowClass.clazz.method(name = "getStatusBarNotification")
|
||||||
?.invokeAny<StatusBarNotification?>(any = this)
|
?.call<StatusBarNotification>(instance = self)
|
||||||
/** 执行 Hook */
|
/** 执行 Hook */
|
||||||
hookNotifyIconOnSet(iconImageView.context, expandedNf, iconImageView)
|
hookNotifyIconOnSet(iconImageView.context, expandedNf, iconImageView)
|
||||||
}
|
}
|
||||||
|
@@ -35,10 +35,10 @@ import android.provider.Settings
|
|||||||
import android.service.notification.StatusBarNotification
|
import android.service.notification.StatusBarNotification
|
||||||
import android.util.Base64
|
import android.util.Base64
|
||||||
import com.fankes.miui.notify.application.MNNApplication.Companion.appContext
|
import com.fankes.miui.notify.application.MNNApplication.Companion.appContext
|
||||||
|
import com.highcapable.yukihookapi.hook.factory.callStatic
|
||||||
import com.highcapable.yukihookapi.hook.factory.classOf
|
import com.highcapable.yukihookapi.hook.factory.classOf
|
||||||
import com.highcapable.yukihookapi.hook.factory.hasClass
|
import com.highcapable.yukihookapi.hook.factory.hasClass
|
||||||
import com.highcapable.yukihookapi.hook.factory.invokeStatic
|
import com.highcapable.yukihookapi.hook.factory.method
|
||||||
import com.highcapable.yukihookapi.hook.factory.obtainMethod
|
|
||||||
import com.highcapable.yukihookapi.hook.log.loggerE
|
import com.highcapable.yukihookapi.hook.log.loggerE
|
||||||
import com.highcapable.yukihookapi.hook.type.java.StringType
|
import com.highcapable.yukihookapi.hook.type.java.StringType
|
||||||
import com.topjohnwu.superuser.Shell
|
import com.topjohnwu.superuser.Shell
|
||||||
@@ -245,9 +245,9 @@ fun Bitmap.round(radius: Float): Bitmap =
|
|||||||
* @return [String]
|
* @return [String]
|
||||||
*/
|
*/
|
||||||
fun findPropString(key: String, default: String = "") = safeOf(default) {
|
fun findPropString(key: String, default: String = "") = safeOf(default) {
|
||||||
(classOf(name = "android.os.SystemProperties").obtainMethod(
|
(classOf(name = "android.os.SystemProperties").method(
|
||||||
name = "get", StringType, StringType
|
name = "get", StringType, StringType
|
||||||
)?.invokeStatic(key, default)) ?: default
|
)?.callStatic(key, default)) ?: default
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user