13 Commits
1.2 ... 1.3

12 changed files with 1127 additions and 169 deletions

View File

@@ -21,8 +21,8 @@
```kotlin
IconDataBean(
isEnabled = true, // 是否默认启用替换
isEnabledAll = false, // 是否默认启用完全替换
isEnabled = true, // 是否默认启用替换彩色图标 - 关闭后将全部停止替换
isEnabledAll = false, // 是否默认启用替换全部图标
appName = "", // APP 名称
packageName = "", // APP 包名
iconBitmap = ("").bitmap, // 位图数据 Base64

View File

@@ -2,7 +2,7 @@
![Eclipse Marketplace](https://img.shields.io/badge/build-passing-brightgreen)
![Eclipse Marketplace](https://img.shields.io/badge/license-GPL3.0-blue)
![Eclipse Marketplace](https://img.shields.io/badge/version-v1.2-green)
![Eclipse Marketplace](https://img.shields.io/badge/version-v1.3-green)
<br/><br/>
<img src="https://github.com/fankes/MIUINativeNotifyIcon/blob/master/app/src/main/ic_launcher-playstore.png" width = "100" height = "100"/>
<br/>
@@ -12,7 +12,7 @@ Fix the native notification bar icon function abandoned by the MIUI development
# 开始使用
点击下载最新版本
<a href='https://github.com/fankes/MIUINativeNotifyIcon/releases'>![Eclipse Marketplace](https://img.shields.io/badge/download-v1.2-green)</a>
<a href='https://github.com/fankes/MIUINativeNotifyIcon/releases'>![Eclipse Marketplace](https://img.shields.io/badge/download-v1.3-green)</a>
<br/><br/>
⚠️ 适配说明<br/>
@@ -69,6 +69,12 @@ ContrastColorUtil.getInstance().isGrayscaleIcon(drawable);
- 后来一想,也是啊,被国内生态毒害的用户,怎么可能会去想到这些问题呢,最后只能是我自作多情,还对 MIUI 留有一点情怀吧。
- ——来自一个无可奈何的 MIUI 老用户
# 后记
- 近期重新适配了 MIUI 12、12.5、13 版本,每个版本的图标设置方法都不一样,而且改的乱七八糟的,我都要无语了,只能用了很多折中方案,毕竟我也没有那么大精力每个版本去修复,实在是累了
- 特地的把自己能有的小米手机刷成各种 MIUI 版本去为酷友做专项适配,我也是很累了,也希望你们能够多多支持,也能让 MIUI 做得更好
- MIUI 再不重写,怕是永远会变成安卓之光。雷军,金凡!!
# 许可证
- [GPL-3.0](https://www.gnu.org/licenses/gpl-3.0.html)

View File

@@ -21,15 +21,15 @@ android {
applicationId "com.fankes.miui.notify"
minSdk 26
targetSdk 26
versionCode 4
versionName "1.2"
versionCode 6
versionName "1.3"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
minifyEnabled true
signingConfig signingConfigs.debug
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}

View File

@@ -30,8 +30,8 @@ import java.io.Serializable
* @param packageName 包名
* @param iconBitmap 图标位图
* @param contributorName 贡献者昵称
* @param isEnabled 是否默认启用替换
* @param isEnabledAll 是否默认启用完全替换
* @param isEnabled 是否默认启用替换彩色图标 - 关闭后将全部停止替换
* @param isEnabledAll 是否默认启用替换全部图标
*/
data class IconDataBean(
var appName: String,

View File

@@ -18,7 +18,7 @@
*
* This file is Created by fankes on 2022/01/24.
*/
@file:Suppress("SameParameterValue")
@file:Suppress("SameParameterValue", "DEPRECATION")
package com.fankes.miui.notify.hook
@@ -47,18 +47,38 @@ class HookMain : IXposedHookLoadPackage {
companion object {
private const val NotificationUtilClass =
"$SYSTEMUI_PACKAGE_NAME.statusbar.notification.NotificationUtil"
/** 一直存在的类 */
private const val SystemUIApplicationClass = "$SYSTEMUI_PACKAGE_NAME.SystemUIApplication"
/** MIUI 新版本存在的类 */
private const val NotificationHeaderViewWrapperInjectorClass =
"$SYSTEMUI_PACKAGE_NAME.statusbar.notification.row.wrapper.NotificationHeaderViewWrapperInjector"
private const val ExpandedNotificationClass =
"$SYSTEMUI_PACKAGE_NAME.statusbar.notification.ExpandedNotification"
/** 一直存在的类 */
private const val NotificationHeaderViewWrapperClass =
"$SYSTEMUI_PACKAGE_NAME.statusbar.notification.NotificationHeaderViewWrapper"
private const val SystemUIApplicationClass = "$SYSTEMUI_PACKAGE_NAME.SystemUIApplication"
/** 一直存在的类 */
private const val NotificationViewWrapperClass =
"$SYSTEMUI_PACKAGE_NAME.statusbar.notification.NotificationViewWrapper"
/** 原生存在的类 */
private const val StatusBarIconViewClass = "$SYSTEMUI_PACKAGE_NAME.statusbar.StatusBarIconView"
/** 原生存在的类 */
private const val ContrastColorUtilClass = "com.android.internal.util.ContrastColorUtil"
/** 根据多个版本存在不同的包名相同的类 */
private val NotificationUtilClass = Pair(
"$SYSTEMUI_PACKAGE_NAME.statusbar.notification.NotificationUtil",
"$SYSTEMUI_PACKAGE_NAME.miui.statusbar.notification.NotificationUtil"
)
/** 根据多个版本存在不同的包名相同的类 */
private val ExpandedNotificationClass = Pair(
"$SYSTEMUI_PACKAGE_NAME.statusbar.notification.ExpandedNotification",
"$SYSTEMUI_PACKAGE_NAME.miui.statusbar.ExpandedNotification"
)
}
/** 仅作用于替换的 Hook 方法体 */
@@ -75,13 +95,6 @@ class HookMain : IXposedHookLoadPackage {
}
}
/** 仅作用于替换的 Hook 方法体 */
private val replaceToFalse = object : XC_MethodReplacement() {
override fun replaceHookedMethod(param: MethodHookParam?): Any {
return false
}
}
/**
* 忽略异常运行
* @param error 错误信息
@@ -132,6 +145,62 @@ class HookMain : IXposedHookLoadPackage {
Log.e("MIUINativeNotifyIcon", content, e)
}
/**
* 目标类是否存在
* @param name 类名
* @return [Boolean]
*/
private fun XC_LoadPackage.LoadPackageParam.isClassExist(name: String) = try {
classLoader.loadClass(name)
true
} catch (_: Throwable) {
false
}
/**
* 目标方法是否存在
* @param classPair 类数组
* @param name 方法名
* @param param 方法参数类型数组
* @return [Boolean]
*/
private fun XC_LoadPackage.LoadPackageParam.isMethodExist(
classPair: Pair<String, String>,
name: String, vararg param: Class<*>
) = try {
(try {
classLoader.loadClass(classPair.first)
} catch (_: Throwable) {
try {
classLoader.loadClass(classPair.second)
} catch (_: Throwable) {
null
}
})?.getDeclaredMethod(name, *param)
true
} catch (_: Throwable) {
false
}
/**
* 目标方法是否存在
* @param className 类名
* @param name 方法名
* @param param 方法参数类型数组
* @return [Boolean]
*/
private fun XC_LoadPackage.LoadPackageParam.isMethodExist(className: String, name: String, vararg param: Class<*>) =
try {
(try {
classLoader.loadClass(className)
} catch (_: Throwable) {
null
})?.getDeclaredMethod(name, *param)
true
} catch (_: Throwable) {
false
}
/**
* 查找目标类
* @param name 类名
@@ -141,7 +210,42 @@ class HookMain : IXposedHookLoadPackage {
classLoader.loadClass(name)
/**
* ⚠️ 这个是修复彩色图标的关键核心代码判断
* 查找目标类 - 两个类都没找到才会报错
* @param pair 类名数组
* @return [Class]
*/
private fun XC_LoadPackage.LoadPackageParam.findClass(pair: Pair<String, String>) = try {
classLoader.loadClass(pair.first)
} catch (_: Throwable) {
try {
classLoader.loadClass(pair.second)
} catch (e: Throwable) {
logE(content = "Cannot find Class ${pair.first} and ${pair.second}", e)
error("[Throwable] Cannot find Class ${pair.first} and ${pair.second}")
}
}
/**
* 存在目标类的类名 - 两个类都没找到会抛出异常
* @param pair 类名数组
* @return [String] 目标类名
*/
private fun XC_LoadPackage.LoadPackageParam.existClass(pair: Pair<String, String>) = try {
classLoader.loadClass(pair.first)
pair.first
} catch (_: Throwable) {
try {
classLoader.loadClass(pair.second)
pair.second
} catch (_: Throwable) {
logE(content = "Cannot find Class ${pair.first} and ${pair.second}")
error("[Throwable] Cannot find Class ${pair.first} and ${pair.second}")
}
}
/**
* - 这个是修复彩色图标的关键核心代码判断
*
* 判断是否为灰度图标 - 反射执行系统方法
* @param context 实例
* @param icon 要判断的图标
@@ -155,6 +259,30 @@ class HookMain : IXposedHookLoadPackage {
.apply { isAccessible = true }.invoke(instance, icon) as Boolean
}
/**
* 获取当前通知栏的样式
*
* 判断是否为灰度图标 - 反射执行系统方法
* @return [Boolean]
*/
private fun XC_LoadPackage.LoadPackageParam.isShowMiuiStyle() = try {
findClass(NotificationUtilClass).let {
it.getDeclaredMethod("showMiuiStyle")
.apply { isAccessible = true }.invoke(null) as Boolean
}
} catch (_: Throwable) {
false
}
/**
* 是否为新版本 MIUI 方案
*
* 拥有状态栏图标颜色检查功能
* @return [Boolean]
*/
private fun XC_LoadPackage.LoadPackageParam.hasIgnoreStatusBarIconColor() =
isMethodExist(NotificationUtilClass, name = "ignoreStatusBarIconColor")
/**
* 获取 [ExpandedNotificationClass] 的应用名称
* @param instance 通知实例
@@ -171,27 +299,38 @@ class HookMain : IXposedHookLoadPackage {
/**
* 获取全局上下文
* @return [Context]
* @return [Context] or null
*/
private val XC_LoadPackage.LoadPackageParam.globalContext
get() = findClass(SystemUIApplicationClass)
get() = try {
findClass(SystemUIApplicationClass)
.getDeclaredMethod("getContext").apply { isAccessible = true }
.invoke(null) as Context
.invoke(null) as? Context?
} catch (_: Throwable) {
null
}
/**
* Hook 状态栏小图标
*
* 区分系统版本 - 由于每个系统版本的方法不一样这里单独拿出来进行 Hook
* @param context 实例
* @param expandedNf 通知实例
* @param param Hook Param
*/
private fun XC_LoadPackage.LoadPackageParam.hookSmallIconOnSet(param: XC_MethodHook.MethodHookParam) =
private fun XC_LoadPackage.LoadPackageParam.hookSmallIconOnSet(
context: Context,
expandedNf: StatusBarNotification?,
param: XC_MethodHook.MethodHookParam
) {
runWithoutError(error = "GetSmallIconOnSet") {
/** 获取通知小图标 */
val iconDrawable = (param.result as Icon).loadDrawable(globalContext)
val iconDrawable = (param.result as Icon).loadDrawable(context)
/** 判断是否不是灰度图标 */
val isNotGrayscaleIcon = !isGrayscaleIcon(globalContext, iconDrawable)
val isNotGrayscaleIcon = !isGrayscaleIcon(context, iconDrawable)
/** 获取通知对象 - 由于 MIUI 的版本迭代不规范性可能是空的 */
(param.args?.get(0) as? StatusBarNotification?)?.also { notifyInstance ->
expandedNf?.also { notifyInstance ->
/** 目标彩色通知 APP 图标 */
var customIcon: Icon? = null
if (HookMedium.getBoolean(HookMedium.ENABLE_COLOR_ICON_HOOK, default = true))
@@ -223,37 +362,38 @@ class HookMain : IXposedHookLoadPackage {
"[appName] ${findAppName(notifyInstance)}"
) {
param.result = Icon.createWithBitmap(
iconDrawable.toBitmap().round(15.dp(globalContext))
iconDrawable.toBitmap().round(15.dp(context))
)
}
}
} ?: logW(content = "GetSmallIconOnSet -> StatusBarNotification got null")
}
}
/**
* Hook 通知栏小图标
*
* 区分系统版本 - 由于每个系统版本的方法不一样这里单独拿出来进行 Hook
* @param param Hook Param
* @param isNew 是否为新版方式
* @param context 实例
* @param expandedNf 通知实例
* @param iconImageView 通知图标实例
*/
private fun XC_LoadPackage.LoadPackageParam.hookNotifyIconOnSet(param: XC_MethodHook.MethodHookParam, isNew: Boolean) =
private fun XC_LoadPackage.LoadPackageParam.hookNotifyIconOnSet(
context: Context,
expandedNf: StatusBarNotification?,
iconImageView: ImageView
) {
runWithoutError(error = "AutoSetAppIconOnSet") {
/** 获取通知对象 - 由于 MIUI 的版本迭代不规范性可能是空的 */
(param.args?.get(if (isNew) 2 else 1) as? StatusBarNotification?)?.let { notifyInstance ->
expandedNf?.let { notifyInstance ->
/** 是否 Hook 彩色通知图标 */
val isHookColorIcon = HookMedium.getBoolean(HookMedium.ENABLE_COLOR_ICON_HOOK, default = true)
/** 获取 [Context] */
val context = if (isNew) param.args[0] as Context else globalContext
/** 新版风格反色 */
val newStyle = if (context.isSystemInDarkMode) 0xFF2D2D2D.toInt() else Color.WHITE
/** 旧版风格反色 */
val oldStyle = if (context.isNotSystemInDarkMode) 0xFF515151.toInt() else Color.WHITE
/** 获取图标框 */
val iconImageView = param.args[if (isNew) 1 else 0] as ImageView
val oldStyle = if (context.isNotSystemInDarkMode) 0xFF707070.toInt() else Color.WHITE
/** 获取通知小图标 */
val iconDrawable = notifyInstance.notification.smallIcon.loadDrawable(context)
@@ -335,6 +475,75 @@ class HookMain : IXposedHookLoadPackage {
}
} ?: logW(content = "AutoSetAppIconOnSet -> StatusBarNotification got null")
}
}
/**
* Hook 通知栏小图标颜色
*
* 区分系统版本 - 由于每个系统版本的方法不一样这里单独拿出来进行 Hook
* @param context 实例
* @param expandedNf 状态栏实例
* @return [Boolean] 是否忽略通知图标颜色
*/
private fun XC_LoadPackage.LoadPackageParam.hookIgnoreStatusBarIconColor(
context: Context,
expandedNf: StatusBarNotification?
) = if (HookMedium.getBoolean(HookMedium.ENABLE_COLOR_ICON_HOOK, default = true))
try {
/** 获取通知对象 - 由于 MIUI 的版本迭代不规范性可能是空的 */
expandedNf?.let { notifyInstance ->
/** 获取通知小图标 */
val iconDrawable =
notifyInstance.notification.smallIcon.loadDrawable(context)
/** 判断是否不是灰度图标 */
val isNotGrayscaleIcon = !isGrayscaleIcon(context, iconDrawable)
/** 获取目标修复彩色图标的 APP */
var isTargetApp = false
run {
IconPackParams.iconDatas.forEach {
if ((notifyInstance.opPkgName == it.packageName ||
findAppName(notifyInstance) == it.appName) &&
HookMedium.isAppNotifyHookOf(it)
) {
if (isNotGrayscaleIcon || HookMedium.isAppNotifyHookAllOf(it)) isTargetApp = true
return@run
}
}
}
/** 如果开启了修复 APP 的彩色图标 */
if (isTargetApp && HookMedium.getBoolean(HookMedium.ENABLE_NOTIFY_ICON_HOOK, default = true)) let {
logD(
content = "IgnoreStatusBarIconColor -> " +
"hook Color AppIcon [pkgName] ${notifyInstance.opPkgName} " +
"[appName] ${findAppName(notifyInstance)}"
)
false
}
else let {
logD(
content = "IgnoreStatusBarIconColor -> " +
"hook Grayscale[${!isNotGrayscaleIcon}] AppIcon " +
"[pkgName] ${notifyInstance.opPkgName} " +
"[appName] ${findAppName(notifyInstance)}"
)
/** 只要不是灰度就返回彩色图标 */
isNotGrayscaleIcon
}
} ?: let {
logW(content = "IgnoreStatusBarIconColor -> StatusBarNotification got null")
/** 否则不对颜色进行反色处理防止一些系统图标出现异常 */
true
}
} catch (e: Exception) {
logE("Failed to hook ignoreStatusBarIconColor", e)
false
}
else let {
logD(content = "IgnoreStatusBarIconColor -> hook NonColor AppIcon")
false
}
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam?) {
if (lpparam == null) return
@@ -358,6 +567,9 @@ class HookMain : IXposedHookLoadPackage {
/** 系统版本低于 Android P 停止 Hook */
isLowerAndroidP ->
logW(content = "Aborted Hook -> This System is lower than Android P")
/** 不是支持的 MIUI 系统停止 Hook */
isNotSupportMiuiVersion ->
logW(content = "Aborted Hook -> This MIUI Version $miuiVersion not supported")
/** Hook 被手动关闭停止 Hook */
!HookMedium.getBoolean(HookMedium.ENABLE_MODULE, default = true) ->
logW(content = "Aborted Hook -> Hook Closed")
@@ -365,91 +577,77 @@ class HookMain : IXposedHookLoadPackage {
/** 强制回写系统的状态栏图标样式为原生 */
runWithoutError(error = "SubstituteSmallIcon") {
XposedHelpers.findAndHookMethod(
NotificationUtilClass,
lpparam.existClass(NotificationUtilClass),
lpparam.classLoader,
"shouldSubstituteSmallIcon",
lpparam.findClass(ExpandedNotificationClass),
replaceToFalse
object : XC_MethodReplacement() {
override fun replaceHookedMethod(param: MethodHookParam) =
/**
* 因为之前的 MIUI 版本的状态栏图标颜色会全部设置为白色的 - 找不到修复的地方就直接判断版本了
* 对于之前没有通知图标色彩判断功能的版本判断是 MIUI 样式就停止 Hook
*/
if (lpparam.hasIgnoreStatusBarIconColor()) false else lpparam.isShowMiuiStyle()
}
)
}
/** 修复通知图标为彩色 */
if (lpparam.hasIgnoreStatusBarIconColor())
runWithoutError(error = "IgnoreStatusBarIconColor") {
XposedHelpers.findAndHookMethod(
NotificationUtilClass,
lpparam.existClass(NotificationUtilClass),
lpparam.classLoader,
"ignoreStatusBarIconColor",
lpparam.findClass(ExpandedNotificationClass),
object : XC_MethodReplacement() {
override fun replaceHookedMethod(param: MethodHookParam) =
if (HookMedium.getBoolean(HookMedium.ENABLE_COLOR_ICON_HOOK, default = true))
try {
/** 获取通知对象 - 由于 MIUI 的版本迭代不规范性可能是空的 */
(param.args?.get(0) as? StatusBarNotification?)?.let { notifyInstance ->
/** 获取通知小图标 */
val iconDrawable =
notifyInstance.notification.smallIcon.loadDrawable(lpparam.globalContext)
lpparam.hookIgnoreStatusBarIconColor(
context = lpparam.globalContext ?: error("GlobalContext got null"),
param.args?.get(0) as? StatusBarNotification?
)
}
)
}
/** 之前的版本解决方案 */
else runWithoutError(error = "UpdateIconColor") {
XposedHelpers.findAndHookMethod(
StatusBarIconViewClass,
lpparam.classLoader, "updateIconColor",
object : XC_MethodHook() {
override fun afterHookedMethod(param: MethodHookParam) =
runWithoutError(error = "UpdateIconColorOnSet") hook@{
/** 对于之前没有通知图标色彩判断功能的版本判断是 MIUI 样式就停止 Hook */
if (lpparam.isShowMiuiStyle()) return@hook
/** 获取自身 */
val iconImageView = param.thisObject as ImageView
/** 判断是否不是灰度图标 */
val isNotGrayscaleIcon =
!lpparam.isGrayscaleIcon(lpparam.globalContext, iconDrawable)
/** 是否忽略图标颜色 */
val isIgnoredColor = lpparam.hookIgnoreStatusBarIconColor(
iconImageView.context,
param.thisObject.javaClass.getDeclaredField("mNotification").apply {
isAccessible = true
}[param.thisObject] as? StatusBarNotification?
)
/** 获取目标修复彩色图标的 APP */
var isTargetApp = false
run {
IconPackParams.iconDatas.forEach {
if ((notifyInstance.opPkgName == it.packageName ||
lpparam.findAppName(notifyInstance) == it.appName) &&
HookMedium.isAppNotifyHookOf(it)
) {
if (isNotGrayscaleIcon || HookMedium.isAppNotifyHookAllOf(it))
isTargetApp = true
return@run
}
}
}
/** 如果开启了修复 APP 的彩色图标 */
if (isTargetApp &&
HookMedium.getBoolean(
HookMedium.ENABLE_NOTIFY_ICON_HOOK,
default = true
)
) let {
logD(
content = "IgnoreStatusBarIconColor -> " +
"hook Color AppIcon [pkgName] ${notifyInstance.opPkgName} " +
"[appName] ${lpparam.findAppName(notifyInstance)}"
)
false
}
else let {
logD(
content = "IgnoreStatusBarIconColor -> " +
"hook Grayscale[${!isNotGrayscaleIcon}] AppIcon " +
"[pkgName] ${notifyInstance.opPkgName} " +
"[appName] ${lpparam.findAppName(notifyInstance)}"
)
/** 只要不是灰度就返回彩色图标 */
isNotGrayscaleIcon
}
} ?: let {
logW(content = "IgnoreStatusBarIconColor -> StatusBarNotification got null")
/** 否则不对颜色进行反色处理防止一些系统图标出现异常 */
true
}
} catch (e: Exception) {
logE("Failed to hook ignoreStatusBarIconColor", e)
false
}
else let {
logD(content = "IgnoreStatusBarIconColor -> hook NonColor AppIcon")
false
/** 当前着色颜色 */
val currentColor =
param.thisObject.javaClass.getDeclaredField("mCurrentSetColor").apply {
isAccessible = true
}[param.thisObject] as? Int ?: Color.WHITE
/** 判断并设置颜色 */
if (isIgnoredColor)
iconImageView.colorFilter = null
else iconImageView.setColorFilter(currentColor)
logD(content = "IgnoreStatusBarIconColor[UseOldWay] -> isIgnored[$isIgnoredColor]")
}
}
)
}
/** 强制回写系统的状态栏图标样式为原生 */
runWithoutError(error = "GetSmallIcon") {
var isTooOld: Boolean
try {
isTooOld = false
/** 新版方法 */
lpparam.findClass(NotificationUtilClass)
.getDeclaredMethod(
@@ -458,20 +656,37 @@ class HookMain : IXposedHookLoadPackage {
Int::class.java
).apply { isAccessible = true }
} catch (_: Throwable) {
try {
isTooOld = false
/** 旧版方法 */
lpparam.findClass(NotificationUtilClass)
.getDeclaredMethod("getSmallIcon", lpparam.findClass(ExpandedNotificationClass))
.apply { isAccessible = true }
} catch (_: Throwable) {
isTooOld = true
/** 超旧版方法 */
lpparam.findClass(NotificationUtilClass)
.getDeclaredMethod(
"getSmallIcon",
Context::class.java,
lpparam.findClass(ExpandedNotificationClass)
).apply { isAccessible = true }
}
}.also {
XposedBridge.hookMethod(it, object : XC_MethodHook() {
override fun afterHookedMethod(param: MethodHookParam) {
lpparam.hookSmallIconOnSet(param)
/** 对于之前没有通知图标色彩判断功能的版本判断是 MIUI 样式就停止 Hook */
if (!lpparam.hasIgnoreStatusBarIconColor() && lpparam.isShowMiuiStyle()) return
lpparam.hookSmallIconOnSet(
context = lpparam.globalContext ?: param.args[0] as Context,
param.args?.get(if (isTooOld) 1 else 0) as? StatusBarNotification?, param
)
}
})
}
}
/** 修复下拉通知图标自动设置回 APP 图标的方法 */
if (lpparam.isClassExist(NotificationHeaderViewWrapperInjectorClass))
runWithoutError(error = "AutoSetAppIcon") {
var isNewWay = true
try {
@@ -495,15 +710,69 @@ class HookMain : IXposedHookLoadPackage {
}.also {
XposedBridge.hookMethod(it, object : XC_MethodReplacement() {
override fun replaceHookedMethod(param: MethodHookParam): Any? {
lpparam.hookNotifyIconOnSet(param, isNew = isNewWay)
if (isNewWay)
lpparam.hookNotifyIconOnSet(
context = param.args?.get(0) as? Context ?: lpparam.globalContext
?: error("GlobalContext got null"),
param.args?.get(2) as? StatusBarNotification?,
param.args?.get(1) as ImageView
)
else
lpparam.hookNotifyIconOnSet(
context = lpparam.globalContext ?: error("GlobalContext got null"),
param.args?.get(1) as? StatusBarNotification?,
param.args?.get(0) as ImageView
)
return null
}
})
}
}
/** 之前的版本解决方案 */
else runWithoutError(error = "AutoSetAppIconOldWay") {
XposedHelpers.findAndHookMethod(
NotificationHeaderViewWrapperClass,
lpparam.classLoader, "handleHeaderViews",
object : XC_MethodHook() {
override fun afterHookedMethod(param: MethodHookParam) {
runWithoutError(error = "AutoSetAppIconOldWayOnSet") hook@{
/** 对于之前没有通知图标色彩判断功能的版本判断是 MIUI 样式就停止 Hook */
if (!lpparam.hasIgnoreStatusBarIconColor() && lpparam.isShowMiuiStyle()) return@hook
/** 从父类中得到 mRow 变量 */
lpparam.findClass(NotificationViewWrapperClass).getDeclaredField("mRow")
.apply {
isAccessible = true
}[param.thisObject].apply {
/** 获取小图标 */
val iconImageView = lpparam.findClass(NotificationHeaderViewWrapperClass)
.getDeclaredField("mIcon")
.apply {
isAccessible = true
}[param.thisObject] as ImageView
/** 获取其中的得到通知方法 */
val expandedNf =
javaClass.getDeclaredMethod("getStatusBarNotification").apply {
isAccessible = true
}.invoke(this) as? StatusBarNotification?
/** 执行 Hook */
lpparam.hookNotifyIconOnSet(
iconImageView.context,
expandedNf, iconImageView
)
}
}
}
}
)
}
/** 干掉下拉通知图标自动设置回 APP 图标的方法 - Android 12 */
if (isUpperOfAndroidS)
runWithoutError(error = "ResetIconBgAndPaddings") {
if (isUpperOfAndroidS &&
lpparam.isMethodExist(
NotificationHeaderViewWrapperInjectorClass,
name = "resetIconBgAndPaddings"
)
) runWithoutError(error = "ResetIconBgAndPaddings") {
XposedHelpers.findAndHookMethod(
NotificationHeaderViewWrapperInjectorClass,
lpparam.classLoader,

View File

@@ -48,6 +48,7 @@ object HookMedium {
/**
* 判断模块是否激活
*
* 在 [HookMain] 中 Hook 掉此方法
* @return [Boolean] 激活状态
*/
@@ -115,6 +116,7 @@ object HookMedium {
/**
* 强制设置 Sp 存储为全局可读可写
*
* 以供模块使用
* @param context 实例
*/

View File

@@ -95,6 +95,24 @@ object IconPackParams {
"5wAAAABJRU5ErkJggg==").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "小米SIM卡激活服务",
packageName = "com.xiaomi.simactivate.service",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAHpSURBVGiB7Zg/TgJBFId/z9haegITC0KMCZ2Frr0tBYXxKMAZCAcwseISUNGtwcRw\n" +
"AS9gY/2zcI2blRlm3sz+hS8hkMy8N+9bZndnBnCA5APJOck147JwGT8KJF8iF1+9DMnHkiXKlyF5\n" +
"VZFEFJkTS9ttSGIFwxAZm8i1NmkAahmbyIWymFBUMjaROvGWaaoI4CnTZBHAQ6bpIoCjTBtEAAeZ\n" +
"togAe2TaJAIA56aGtokYOYo0jc6InAbEfgHYZt+/JLnfK0tsYugzAHAWUNN/SC4te4d3kr1C/yTf\n" +
"wTFvUmjrZblNLE15NVMrFZG+iGwVsVZEZCsifQCpb6xG5E0RU/oYGpEPRUzpY3TmqdUZETE1ZE+I\n" +
"xNReEysRud/V0Jl/pDMimjf7FPa3dgwSAGOfANUSRURKFSm+8V3ozNQ6ijSNzoiobnaSk9iFhKIR\n" +
"8XosVsVBT62ppS3/b5n63eFvDeeaS49lq7vz/oix1c31mVSx1W0kBy1yGb2KCGNoREYkh4o4J7Lc\n" +
"I9847QHdguQUwAbAp6EgpxVsoZ/38t1lgLnloKwu5qZ6bVNrE/XKxMFYk03ktYRCQjHWZBQRkRTA\n" +
"rJRydMyymnSQHNd9Y9BhtW081yrI3AB4ws+x/0B9VfxIs8+ziKz3df4G2ybTnqI5trQAAAAASUVO\n" +
"RK5CYII=").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
@@ -143,6 +161,63 @@ object IconPackParams {
"fzCQEzP6n3A4gnbdRzV75jOnnoS40BA/PPsPeu6w84nPwM8AAAAASUVORK5CYII=").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "小爱同学",
packageName = "com.miui.voiceassist",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADYAAAAyCAYAAAAX1CjLAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAIDSURBVGiB7ZoxaBRBFIb/t1xpo41VICAqItgkjam0N4W1hWKRPqB9mthE7BNIHwhi\n" +
"oWCR4rSIaDAEVAgELKyjVjFNis/idrnL3ezi7u3sOst8cLD7eDvv/5m7N3s7K3kGuA6sA7+Al8AD\n" +
"3zUbAegzycW2dU2NwxTAqu+6ie8COSz4LtCWMe9EY6ERjYVGr8pF6SJ7VdKOpD0zO6tTFLCSHr41\n" +
"s091jl1UdGlsTdoHbhfku+gX5D8Zy/3ox8lk4V2H0GcF+f9sDLick/+orM4qvzHX4po7YyW5kRN/\n" +
"WHagzjaPzhrrSRJwS9IlSd/M7Ge7ksoD3EkPd7MOnQCLkvrp5xjYBK61JbIswH0N9R8BL6TBV3FJ\n" +
"g9nKeCxpsXGFFQAuSFobCc1KWgZmEkn3HNe4Yv8j85KuOOI3O9s8orHQiMZCIxoLjWgsNKKx0IjG\n" +
"QiOR9MYRf9+0kIp8lvTdEf+RSNqQ9HskeCBpvQlV02JmJ5KejoW3zOywZ2avgbsa/tncM7PTZiVW\n" +
"x8xepfqz83dS+szDzL60JawOMjOjdLp5dJIqxj44Yl+nFZJymBOva/x8HJsSAHMF+dNuSlBFZ+lt\n" +
"JDPbAP5osI0kSTtmtl+leM74z9PHatn5SlF+a5SdsbqIzSM0orHQiMZq5th3gSaMTdygStpuoK5f\n" +
"OP8i5gHDdzi88hdIU5D64hVJLwAAAABJRU5ErkJggg==").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = true,
appName = "下载管理程序",
packageName = "com.android.providers.downloads",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAHFSURBVGiB7ZmxSxxBGEd/X7DS1IKkEptArhGCglWwVa7WNoiVYG9r7R9gk8peEGyu\n" +
"v5BCOAQFC7W9XkJKX4pT2V2Pu7md2ZkNmVfOzsy+V+wuuytlMu0GOAAGuDMADlJ7lwC2Zwiosh3C\n" +
"4UOITSTtJFr7RqiQT4nWvhEqJDk5pG3kkLaRQ9pGDmkbOaRtzLlMAj5K+tqUBPBtwuErM/s9bQ9z\n" +
"PNGNpC+uYoG5NbPOtEmuIfj71MfMpnq6XiPHni4+hD03cOLxFliXk6ARhZjTiBGnjUQUYs4iRJw1\n" +
"GlGIOW8w4jxKxEvIAtBrIKIHLEQLeYlZBPoBI/rAYtSIQswycB0g4hpYThJRiOkA9x4R98DUJ3cU\n" +
"gHVgWCNiCKyn9i8BbAJPM0Q8AZupvccCdIFnh4hnoJvadyLArkPIbmpPJ4C9CRF7qf1mAjgcE3GY\n" +
"2qsWwFEh4ii1jxeMfgIF+ZmT+Zd49y4MzEvqSvocX8eJO0kXZvanOFgKAZYkXUpajShWh4GkLTMb\n" +
"vg5UPz7sq/0R0shxvzhQDVmL5+JNybUa8hhRxJeSazXkV0QRX0qu4+5aG5K+S1qJZTQjD5J+mNnP\n" +
"1CKZ/4K/9OOkaYhf6uEAAAAASUVORK5CYII=").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "天气",
packageName = "com.miui.weather2",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAAC4AAAAuCAYAAABXuSs3AAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAALnSURBVGiB7ZlNq1VVGICfd+tV0fIrbtC1Ij8QUrll5KwGEk7SuhHoIAeKiAMdOSlB\n" +
"/4CKMyc6DJsIoYIfaWiRiJEDCcpBpQM1FS8iWgZ6xafBPkeP9+7j3ft8bY/cZ3jWWe969lprr7X2\n" +
"u2CMMV5sopONqQuA1cAHwBtAH3AHuAb8DBwCTkbEUCe96qIuUk+bjz/VVWU7o25VH+SUrmW/Orks\n" +
"6R0NCNfyizolK3bSRule4O0mwywB9qkdfRcBUN9TDzbZ8+s7Ll7zACvV2w2K/+2w+V5oCNR5wApg\n" +
"HulS9hrwABgErgKngZ8iYrBO/TeBb0iXw6KsiYivi8hOVreov+XsnUfqMfVjM+amOrFSXpRv8won\n" +
"6gb1WgONVDmr9teR/65grMxRHB54qnq0CeFahtQvM9qYpJ4rGGvis6TnqBdaJF3LHnXcsLbmq/8W\n" +
"iNFXT3qm+lcbpKvszmhzfaXsoXpvlPovZUmPV0+2UbrKpoy2p1l5kdUe9S31c3WvT0bkVr3e3toB\n" +
"adX/1Nl15+pIr6nqJnVXVmGverdD4qqH84rXo3pW2Qa83GywAixX320mQKg9pDvftNY45WYv8BXw\n" +
"CfA+MAuYAlwHLgKHI+LXurXVZR2cIrXcd/Rz+u/qZ1neCTDQ6q7MyQSgZ5T/LAAOmJ4un1oKE2Bh\n" +
"u8xayABwRp1e/SEhPeV1A/3Afiu7bzeJAywDNkK6qvwDjNxKn18GgbkJcKNsk4L0Ap92ozjAQAKc\n" +
"L9uiAfoT4EjZFg3QF6ZfFbdIt9tu4V4SEfeBPWWbFOR69fD+KnCJ7un1AwlARNwEtpcsU4Qjj/Me\n" +
"agKcAD4qzycXt4HZj5OeEfEI+AK4XJpSPnZGxJ2sTNPrwHHSI+XzxhlgaUQMjUgzR8RV4EPgVMe1\n" +
"ns0fwMpc1yzqWnWwXZ9ABfhRfaXQY6oz1M3mT3q2ksvqOjOSp0XTzItJbwneARYDrb6jEbgCXAC+\n" +
"B36oLBpjjNEo/wOVy3FIguSj2QAAAABJRU5ErkJggg==").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
@@ -1027,6 +1102,530 @@ object IconPackParams {
"SUVORK5CYII=").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "米家",
packageName = "com.xiaomi.smarthome",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAMQSURBVGiB7ZpNSBVRGIbfU1YQFbZoYRYtqkWujHDTqrCyiLA2EkFYRNAiUMM2Edim\n" +
"VYsoiiiJImjTJimIyIWK7VKyUJOSgsroB3IRBAXxtLhXHMc7P+fMzHUW94GLoPd73+8d5pw554xS\n" +
"hQqZYEr9ErgQUjNljOnOohmgXtLBkK/0G2P6bQSj+AtcBjYn7r7gdwR4HsN3h62wDc+AsKsY5FEL\n" +
"XASmLbwyDTLDZ+AcUB2hvRt46OhRliBe7gPbPXpLgHbgbULdwCBBgx2r5MGMSHoh6WRKejuDBntV\n" +
"SgZB1Bc/mbOoHCblwCVIq6ShtBuR9EfSVUnxnxMeXIJ8NMY0SNoj6bGLqY8JSR2Sqo0xbSnozWIz\n" +
"cwB1wE2HGegJ0FzCu89l1kocxFOzCugCfobU/gOuA1tCvIOCXAHWZx7EV38CGPXUTAJtwOIYtd4g\n" +
"44D71J00iEenCdhn6d0H9ABN9p3PF0sliKN34G0XRu6eI8aYNy51uQsSBHCUkH1SroMANcAl4Kuk\n" +
"e2HfzXqt5QTQKOmspNgDPndBgF5Ju2zr8nhrvXcpymOQLy5FeQxScrMXRR6DOGEbZCyTLuayxqUo\n" +
"7qx1W9I1Y8yIi4kldSF/m7BS8qw8O4CVyfqyA/gess7bait2IKM+o3wPRyxYl6dtuC5VwVndnpAQ\n" +
"L8NqrQY70AjckXQmUceltRskzdv6ehhIw+QQ8Mh3hfYnFp7rMRBxW7UmET8GDAYID6YY4m5EiCmg\n" +
"xlV8I/AjwuCps8Gsz94ID4CuJB4CbsQwGcJzYG2hXUVhrxHFp6QXS8C2GEYAv4BTFrrNwHBM7c5E\n" +
"ITymNodvvcBxYN7TmcKJyi3gg4XeMLA0lSDFJl5ZmM/wm8LZVh/RY60Uo5S4IEHEXjJDau9M4jAm\n" +
"qcUYMx63IPYD0Rhj5HhSbol1CCeABw63SVy6gQ2ZBvCFacfubWwUr4GWsgXwhanH/e3sDO+A88Dq\n" +
"BQnhC7QJ6CR4KeNnmsI/B5wGVqTVh9NGPwhgmaRaSWuLP2tVmFC+FT+Txhin454KFRaI/2GcxYI4\n" +
"igSOAAAAAElFTkSuQmCC").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "和平精英",
packageName = "com.tencent.tmgp.pubgmhd",
iconBitmap = ("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").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "起点读书",
packageName = "com.qidian.QDReader",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAPJSURBVGiB3ZpNiBxFFMd//zCKwYAYYWHXo4mnySmQDyIkS1ZISIRFQQ9JriIi4sGr\n" +
"7OQiiBc9bw7ePIgYwoYQlewsRNwc4kEXRA8iKLOg6EmDxMPfQ/eMPT29PV013TPZ/KDpj1cf71VX\n" +
"va5+VaJGbM8Dh4GF9JhPD4BtoJc535W0XVfdmrQA24eBF4AzwNHA7HeAG8CapLuT6hKF7Uu2N10f\n" +
"m7YvTdOAJdtrNRqQZ832UpMG7LO92qABeVZt76vbiAO2b03RiD63bB+oouPYwW77BHB74taYjOck\n" +
"fVWWYE+Z0HaH2RsBcDvVJRzbF2bQlcZxYSd9C7uW7aPAZlQLNM8xSXfyD0e6lu39wJWpqBTHlVTH\n" +
"IYrGyHtAu3l9ommT6DjEUNdy8iH6IqLwbu7+VEQZoTwv6cv+Tf6NvBVbqqRFSYvRaoUzpOvAECfz\n" +
"nHMNVXpZFQBCGuKcM3Oz7Bt5vTa1p8dAZwHYbgPfBRRwWVKlD5TtdWBjTLKupK7tU8B6gB4AhyRt\n" +
"tdKb04GZQ1kZI887ixBOAwNDlgMzn0xbekB/oOefT4Fl4MOW7TnC3WU+/Szc76Au23Mt4MiUKpyk\n" +
"+4zjSIskSBBCl/LBu1EgX2n4G7PQ4v8oR2XKPFaRzPa4wT4p8zFvhNRNjiCpWybPyOoeQwvYvlbT\n" +
"v8LAW9lezwuzhtRUX5ZrrWIDK7EIPAU8Q8FsNIIuyd/oMhGz7z0kkb8Y7kn6FNiKzJ/nD0nvSDoE\n" +
"fB+Yd7tFvCF/p+cnCmR5z1VlsPcy15UiJxm2W7kCQugb8mRekPVcHg0a7NRw36TpDwKPBOrSm8SQ\n" +
"v9LziCEu8Fq2n5X0o6QfbL8JvJgRfyzpo/T6RIQuPWzPRXqKvamC8+l9qdey/WoVjWxfj9Blrqzi\n" +
"Mn7LVd6pYIhd8mF00iCdCCPWAfru9yphH6lPsjeSOq4WQOvYfg34Gfgn83w/cBDYG6BDn6uDK9vt\n" +
"wFZ4Jc23ZPvdfMklb6QJ2pCJotj+GjhWoQV6kp5O87wPvA28LGnwlmw/TuKW+8djga38EvBGhXSb\n" +
"ko4PPXGycFOFlUyenzLPb9o+bvvRQKVHsP1LRV0GwYd8XGuNapGUD4DPKJ7O3we+BX4Ffk+Pe8C/\n" +
"6XF/h3NWXuUv87qk84USJ32+Kp8HpG2C8lUtT3dVKpbVvN4j0XgnAeINHtz47xZwUtKf2YcP77IC\n" +
"QJrwYuMqhXOxyIixOG7K0BSlM4eHZjG0Et4Fy9Mhxuz+DQM5g3b3Fo4Cgx6oTTV1bXM6D5xlhtuc\n" +
"JjYki2e48ew/UdO01X0TXBUAAAAASUVORK5CYII=").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "高德地图",
packageName = "com.autonavi.minimap",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAATUSURBVGiBzZpPbBVVFMZ/56VGCQERErVaTTRIorIQ8Q9KxDayURRNUBNDorKpmhiV\n" +
"YGJ0IUUTdFETQ1hYQ6IJ0gioUayBhaFNRE2sVVRaLYp/EGitrbUQJaLhczHz2ul0/tyZN+/Bt3lv\n" +
"7j3nO+fLvWfmztwLCZA0T9IaSZ2S+iUdVQJiOFqSfBIwLOlrSW9JelDSnKRc4wQslNSWNXLBQsI4\n" +
"LGmtpHpXEffkjVRlIWXsk3RFOE4pFHQtsM1J8anDlUCvpMZg47gQSU8DLbXOqgJ0BsWUwKsJYP0p\n" +
"S8kdw8ChwHVr+U95RJprmk4+7Ad+BxoCbQslNQOUJF3C6S3kR+B5oA24PKJ/FXgjcksNk8qCg8CL\n" +
"wJ3AHGBGjN0iSfPrgJW1yswRR4B2YIuZ7ZW008xuldSR4HN3HXBBbfJLxRATAj4HkLQfuNbvvzjB\n" +
"t74OcHtSVg9/4AloN7NPy42SvgLuM7MxSTNxEBI396qNo0wI+CjYIekLYL2Z9fhNNwBnJ3DNqKtO\n" +
"jok4DmzBm0Jd4U5/JLab2dZA86JU1iIXQSHe8BrrhKTXwkuLkM8+Sa9HtO9KCd1ZuJAIASclbU4S\n" +
"4Pv1Sfo4pu+7NCGFTq2ymADeBNqiplDIrx+YCSyP6JtGcqEDUK0aeRvYmCYAQNL3wFzgNjP7IcJk\n" +
"CTAtjadoIe8BL7sIAJB0ALgUeMzMdsaYpRe6T1YEOtJqICLuT77vhhS7tEKXCij2XVkF+Mn94vt/\n" +
"4GB7oJpCPswjwE/skM/RJ+ncFNszJP1bDSGT3spyiDji8/wt6UYH+6WuebkWexewzrWIY5IaBM7z\n" +
"Lx8xs08c3BZnCVC1EQjEGApwPpfBz6XQpYSpVYgAP5nhAO/mjL4H8wopTICfyGiAe4+kMzP6u2JK\n" +
"jTQCY5L+NLO9FYoYw1t2ABwGHjazfzL435w1YBw2SWpIZ4jkPBbiuisHx7NZRsRl+F6QdFaGBP4K\n" +
"+a/OKsLncS10Seo0SZ0RPOE6OQk8ZWatEbbB4MeBoOgNZvZ4TiEDwPl4t/58kLRSUneE8iFJq2J8\n" +
"ToRsd+ROgElT/v5KeJBUkvSkJpYUQXwraXnA9r9Q/zeSLqog9uIA14KKhARIL5T0krw3vTD2RLQf\n" +
"k7SkwpjPBPiKfdWQt/nTHiEmjAcKiFUu9AFXn7hid0HUg7PFzNbl5BuHpBFgNhkKvS4mobwYLIhn\n" +
"tv/rmltXKd0mE8aFSFom6aqsBJKuyxO4BIzkcYzBoJ/MXGArsE3SaknTM3BkW5p4GCnhff0uCuXi\n" +
"fAOYDlwGLAXaJS1z5MgjZKAE9OZwjMOgpE3A9f51D9CN972qQ1KrpHkpHDfliNuLpBUOt1RXPBH4\n" +
"/5ukWZr65fFXSc2SLCqjnHEbkHSOvM34orHATyxun323pKaQiKtzxNkBUDKzUeDVHMOZhBVm9mWK\n" +
"TROwW9IrmnhdyFMfE7lLqpfb9yMXrAlGkdvJh1F5Z17ezRjrnSmyJDVmzTgCGyN4sxzhGE03GUdw\n" +
"v33i5IP/qSfXwyjA8Wgl/sAsR7teM5v09jrpyW5m3XhnPXo4fbHdzOaHG6csUcysz8yuAR4CPqtF\n" +
"Zo54H7jDzO6N6oy8lwch75zK7Xjb2PUkbJ6aWVO4TVILOZcdeCuFfqDDzH5OMv4fXXPzF2fedwkA\n" +
"AAAASUVORK5CYII=").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "百度地图",
packageName = "com.baidu.BaiduMap",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAATgSURBVGiBzZpdiBZVGMf/j2VkVCuBurBlFIohIkax0BdrUEEGXhS7dBkkgRfVSqAU\n" +
"kVtZoYRtXzd7EwhBJgZCRiVkYl0IrqGWmYUtrpurae9+5Ee57a+LmdedHc+ZOTPvCPu/mfd95nnm\n" +
"nN85zzvznDOvySPgcUn3S7pdUpPPL0DdZrYtxBHY6TCPSPpa0lYzGwxuFdgJnKM6/QMsK9i+TyPA\n" +
"xpCL7KkQIKmLwAMVwQAcB2b6ggevEERd48CdFcLgCvrkCnV+DKgRpdd4bJtXIczBuq8lgvol3Rza\n" +
"iEdjknZI+lLSMUktktok7ZO0S1JN0gZJK8zsVCiMpKUZLmvMbEM6qL+Bkd8GvAH05fj2Az3AwtDR\n" +
"yZmZQ76gojD9wFsUv9NdBD6oAOZsVlAozG5gU0GAtPZXANPcCMyPwOcNQtR1pEGYzmm+ADO7RdJx\n" +
"z+ljkr6R9FhoB3I0H9gT4mhmD0r6Nm2fBqzNCPLBbJf0bGgvA9UKvBbi6ISJp8YLE/sk0+wocLii\n" +
"lErrJPB8KHkizS6lVlfAzAzEX3+VtCCnjSEzM0lDoZ2KNVtSM/BciPOkmUmNSN7MHAeGA0a2FvvX\n" +
"Ss7KgVCYuJ3ONEgIzNgVBvkPeCn+/EIojAvECwPM9vgPA+uAlpR/DaLiDuhMBuS0vzLx+cUQjqs9\n" +
"9i5AZvZqyt7q8B0xs6a4U4uBdkkys+6QDni0JPH5TWC6mWXf0XKmeW3K9ymHz9b43MdMVLg7Y1vZ\n" +
"GfnCYXs9i8P7QIyVvpvtcPjsjo/LlKimG9R2h+1lYL0vIA9EimC6JMnMBhSV6knNjY++KqCMbvTY\n" +
"V+Nb6uakVlJdsf/JlL2eRuuAs67UAu4FFgWmVg3Yl9OXdxsBAegCel12zyDVQXYnbJ1AZ0b7m4Hz\n" +
"AX2ZdDMxcKx9s/W+3HXWoKR+Scn1wRJJMyUhqU/Se464d1Lft0hqD+xLt5mtklR4RohH+asScSE6\n" +
"ykR6hmqjFPZjT2umpFFF6++qNSDpuoIx7cC0MiCS9ISknpKxPvUp2tksoj8kzTez8bIgkrRGUm8D\n" +
"8Un1SJpRMGZQ0h1mdkEql1pJLdZEeV9WA5KaJc0pEHNK0iIzG60bGgWZrmjNkX5Ihmpc0meSlheI\n" +
"OS1piZmdmWSt6G6zq2RcD1HZHqozwFwXXZnniE+9ku4q4H9Q0q3ylyNp1SS1mtlvrpONplZS6yX9\n" +
"Feg7LOlahUMMS7rPBwEsrQqkw8y2SFqhKO+zhKRuTRSbeRqV1GZmPzsvVi+PSuZ2Uu2pC2/O8f8u\n" +
"9lsOXMjxHQXu9o5IVPsBLG0U5LKaCLghJ+aRhG8WzN/APQEQDYO4IK4C/s2I+cUR44I5B7QFQjQE\n" +
"4oK4hvwd+ZWejiVhzgMPFYAoDeKCmEH+ftcJ4O2MDtZhHi0IUQrEBXE9cDog9vv4+EoWTAmIwiAu\n" +
"iCbCXqIOMRm209XZkhCXQA6VhLiJ8BdCrncaT1cEATBHwEclIGYBvwdCfEr0UsilJyuAOFx3XlUQ\n" +
"ohk4EghRB3HaK4AA2FQPeLgARAvwUwEIn6qCAHgmGbg6AGIusH+KQex1XeDDDIjbgL1TDALAvWzw\n" +
"QMwDfpiCEKF7XxKwgOjt0VSCcO5qenfPif5i0SFpoaRZwfSX608z68iCUPR/FZ9GFa0+eyX1mtkJ\n" +
"l9P/pNUyGMqYkZIAAAAASUVORK5CYII=").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "招商银行",
packageName = "cmb.pb",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAUMSURBVGiBzZptqFRVFIbfJbfsj1e0IjO93UrjVtonfQgiFqlkGZSKVCoi6J+oBAkK\n" +
"iSxCApOi7o800ApRMz/Cbl8SZGUkFUHdEPwRF7u3DxXLFEEtePoxZ2TPnn322Wec0V4Y5szs9a71\n" +
"vnPO2uecfcbUJAAdkm6TdGv23i5paPbeLumkpH5JA9mrX9K7Zra3WRoaBnAtsALopXHsAZ4Cus6F\n" +
"gSnAm8C/Z2Cgii+c7e6zYgjoBNYFxLwHbGnAxD5grvfdUSp7+bJWmVgA9OUImg5MbcDI0ix3nsnJ\n" +
"zTRwPuG9UEWfE1u2V4ZkvNWRmIeaYeJCoKdAzNNO/GMlTGxweLcUxK47ExOXA18mCBrucAYDpxKN\n" +
"TPbq7S2I/6wRE53AjwliNga43Qm8fQHekgTeO2WNxHrCxZ0B7vUJvKUB3qDEmqtSTSxITJh7RgZ2\n" +
"FnCH5PC2JtZeUGSik/wp1scTkTyzIrwNEd5dibX7gM6YkTWJiQAuKPhR9ufwoucG4FBi/fBMBkws\n" +
"YWJtTEyWb1mAV9fkAd5zJXTUH2LAphIJbk8QdHGAV9fkAd6wEjo+9snTS5C/KxLj5H3b4wabPMDb\n" +
"VULPdZI0KOPenypO0poGYzea2bFE3islasw4vQV8k+j+HzcDcHVRFSr3G1DyArDEHvm6ShhegtTt\n" +
"FXsJGFogaCFekwMzgRl5nEbQJummEvGrvc+LJR2QtDKPYGZrgWEB3ilJ7+fxgPGSXk3UtapN0sTE\n" +
"4N1m1usUmiNpSCYq10iG070CjJM0NdseZWYDIYKZ9QKfJ2obOUjS6MTg0N6QpDHA1BjRa/LFOdsh\n" +
"fJuobaRRmYunFQQeNbPTvZA1uXvcbzWzWUXVgPMkHZM0OPvqNzOL3tKSevkO/JTQ5Cs9zouBmEsS\n" +
"aj0a4D2QJDQh+d8JRq7yOH8GYp5JqPVDgPdhAWdogj4MOKLKQloedprZNCfxHEmbAnEDZpbbb8AU\n" +
"STtzhjvNbH+EW3gOapP0i6TxkRi/yRfmxI0CZphZ3pQaa+zFkpZFxg+rYCo2oEfSvTnjB8xsRPUD\n" +
"cI2k2BJnj5nVneioLKfm/uKS+s2sIyYUWB4br+6RPLzufZ4fSybpPqDDzPycRdPsaGCWmW2JxOyK\n" +
"ZiB+0z/Ciz2Q0HcvBGocTODtKDAbu/7aHltT2u4leThBDMBBjzcvkQfe7FgawF+BpNO8mI9KCJrt\n" +
"8FLWxqp4vkDngzm8LssCdsi9rpf6zOxKJ8E4Sb1Kx6dmNoXKneSeEryaujlmQlPxnrZs43vVGinb\n" +
"5D7uBsaquMl9XAHMNLOtkRjfCGZWmQiAMcBxZ1e110TCHyUOjypeboADsC3mFLjIix8lSeYErJG0\n" +
"SNIRMxvmfN+8pf109JvZz3mDwGFJwyWtN7N5/uAkx+X2YIb/AYD1js66Jdtq0DYnaMlZ1lgI4JGk\n" +
"QxDoAgac4BvPos4oqKwtVJ9ZDlD0rBGY7xg594+OMwCfOLrSZlFqn3G80WKNKXqedPR0FzNqyZsd\n" +
"cnwZv4UAbnZ0vJUXZ3kDWZLNkmZLOiHpniZrTMUKSRMkvWZmjzecxdsz5wormvKTkPZcsBU4BCxq\n" +
"ignHzHxqp+ZW4wPghqaacMx0UXvSbAV+BZ5tiYGAoUlUHtMdj2sqbWA5cGkjmqKzVoKhMZLmSrpD\n" +
"lZmlPc6owwlJuyV9JWm1mf3eqJYzMuIDmKCKqbGSOpyXqf5PZ7tVWRg/2Yza/wEn6/3reh9oQwAA\n" +
"AABJRU5ErkJggg==").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "人民日报",
packageName = "com.peopledailychina.activity",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAASqSURBVGiBvVrLceNGEH2jcgBQBMbNvpmOYOGLr0IGgiNYZLDYi0+uMvfkI7kRkIqA\n" +
"dASEIiAVAaEIng/dQwwhkpgGAb8qlggK0+g307/pgcNIIJkAeAKQAsj05wTATL/XABr91Pr51znX\n" +
"jPF8d89gkilE+QxAPlDMGsAWwItz7nCPPmaQTEkuOD4WOjmTE0hIfiF5nICEx1GfkUxFIu8hsNTP\n" +
"mISGmutVEp8jHlzpvemIZEjyc4yODz0EEpILAHMD77FNYk7xnWFylcTOMHOpjpuPvCIeOw4hQ1tU\n" +
"Wgfj9tPwICnWYSJRGh+Q6bh8AuW7KGNJWJXZBmM3Eyh+CbejGcUvrDmi0LHZ+PpexZG3/IVkZRR4\n" +
"CMZaAsNVeSQLkj+xPydV10ikHL4ahV3nD9hSVvUflTnruf/IoJwJ80gFWw54d84t9fsXw7hL+A5g\n" +
"A+B3AD/rb31ZPYHo3ILDsrHP5GOsRsogaKjcWDNPgXZFrDXNOyTjJpDVeDOOD/Gm5XtJ8i9es/3r\n" +
"yIGWSHbjxkuY64aohGyk5gBejTI8DgDgnKsB/AmARp3kPkrItaDRMaE57vW3g1EWqSZFScLPXjva\n" +
"omAyxMZzfVA3+WUclkuOOs5HzB3JZ7NOtOWOKpi9Lpb6P2suGgMVKPE7BjE5w1fAGYVQRnsVPQTr\n" +
"PiJbVcgr2LfN3YReSCEyNQmS3DqSO7QtG48G0tmo9Xqm0SEmYR50XIL4yPMHJLn9GHl/FzX+h9nq\n" +
"wxy4fwvgSLKP7oR4dc7NKIl1g4+WEY0HDE9kY8BXFAXuIAHg9QHiD0PwDuAbgF8BPEIzdCTeAHwN\n" +
"Ooupyvuqsh6NejUguR5gkmtKZp9RwmtsIlyTPJt5SqvprCSnPRetH9BGpjjmsgIFWrPIAawix/8C\n" +
"4FnJJyRXkDotAbChOHwCIKqXFaD+ATaTSADsIKYxc841lEQZu49JAfym4xOIaX6HTMQjJOSXBnke\n" +
"tbVobPRvRfIT+9uol7BlsN9mWylUHNYz4Eke4/0ko1S4JbWXZXzghjIBnyi+ERaeCc99Y8m4Zt+p\n" +
"pxbbx2r03opkHXwn25WKhZ+QM2XYNvca6ixHyCqBdmPVsrqOcCu6oEQf71+FwZ5fnHNb51wK8REA\n" +
"WFN8zYfhTP0vphdwrjsj2y+UkJuT3Ov1nLZ9SBrI2ZJSWVCKy4biM38zrvW6RBeUvHDLRDyRhOSq\n" +
"85uFSBnIKai5RZ9tqZRP5neJzK1EtKLs3LoztWFLLAZFMHF7in8uKaQsvna9SUGZJavjWtBQCITN\n" +
"wJQygX7LW0fKOVuNs4Me7YxYHNeCdwCl1lc5JOn5VlCq1/5ou6+QLaKOtWk/VujDgVqXqXwfWLyP\n" +
"nRoPen0rSccdKwRkxjrYXKpiM7atH7+9zvhx0lYkn3g5an2MUhFEEsbZ6zX4OsxHtSPbFfBE9owv\n" +
"SWreeY44ZGVqtvki7Lr4llFs5+Y0bjCJDiGrzyyoJ8LGcZdg84kIMjmnDc1dNBz7hYGAjK9Qp841\n" +
"Fad6haNDKOW4r2t4LDnwpZoxXnPKIUnsaaCYF0hlvb7nNae7iIRQU8ggbZ0ZJFMnkH06INm6++LZ\n" +
"dqwXz/4DLkDyW02CnOwAAAAASUVORK5CYII=").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "即刻",
packageName = "com.ruguoapp.jike",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAKDSURBVGiBzZnLi09hHMafR2yURNmQzDSy8QcoSYMxS9koO6UYys6KYpqVmmwspFDD\n" +
"1tIluQx2biVFbqVRCmUzktRsPhbMxPzOmd95b87vszznfc/zPOf7fs/V+g8AeyWtkfTW9vX/oZkd\n" +
"4A3/MtG2p2CAKao5mFtrUe4DzvLnzPfV7N5SSjcrwL6aSsxyI7dm9ooAA5IudRn2KrduiaX1rsGY\n" +
"3g4CTDY8ZvYg2QBOdOmLOdr2Wgsw3DQE8LGEh+SlBfRLuhUwpciyytEjdwLHv86g2UFSEOCipIHA\n" +
"aU9TNLMDHA7oi79Z37b3OYChyBC9c8UC1gEzkTm+lPIV0yMXJC2J1HsWOa8rDhkMnJZ0NEFvLGHu\n" +
"J0m3bX9IOIYEjMT2RWb2VPlrVBFgu6TJpDORl/75lenaI8BaSeeKWYpjcP6GJs1+RtKG/F6SCHte\n" +
"A8Zb7ocqHoeGONC24xp2hYQYBH627biC8TrPlVct4JGkTUElLM9D25vrdnYEAfokTRW1FMdO23fr\n" +
"dlZdtZYVNBPL2EIhpOqKLJc0XcxSOPds7+g2qKMitr9JOlLEUjgzko41Gbi4aqPts8C0pCHVf/Zs\n" +
"QscdOJCTtp8kHiMN4HnipfZaiF6xj9iSVibMnZa0P2RCySArEuaO2v6azUkKCUvqSoxe0BtiU4Cl\n" +
"kn5ETP1se3WMZqmlFbusDsUK9lKQy7avZneSArA1sC/ep2r2SkV2pwr2QpBTtl+kCrYd5KXt4zkE\n" +
"SwVpelevfVEKpc2KjNj+nkuwrSAPbJ/PKdjK0rK9LbdgqSAL/T4YLiFYKkjd77UJ26H/HNsDWAXc\n" +
"n3f3Hi2pWeTpdxZ+/wLYKOmm7bBPnYH8AqH34VsrgGUmAAAAAElFTkSuQmCC").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "京东",
packageName = "com.jingdong.app.mall",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADkAAAAyCAYAAADm33NGAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAASgSURBVGiB7ZpbqFVFGMd/Y2EahbdEC7MjJZrlhcRuJPiipaGpdKILkm8hIlYa3Sws\n" +
"CEKkrAd7yDQikgoStEyL0qyQfKgO0Y0THLUUrykkoSX8elhjZ7Xcl7X3Xvt4DvSHYfaa+eb7/v89\n" +
"i9mzv5lAN4E6BRgWy+WxHgT0AfpmSp84bD+wL1XagR0hhB/SvkMX8C8JdSxwE3AbMJ1O4vXic2Ar\n" +
"cAQ4nKoPdZlIdRAwC7g5ljEFuD0JPA1sDCH8XM6oqSLVW4GpMc4cYETBIeaGEDZUiD8ZWNar4KCo\n" +
"rerr6h5gC3A4hLAEeKPoWMACdbLaEmMPUcep96mbgR1A7/OLiKSOBOYBdwJXZ7o7Yj2siFgZTI0F\n" +
"tZzNupKt6joTrFNnlhutzlY3WBkzo+3HVeyagW3liF9ZwniTnWT7q0+ov+QMdEg9WgznmjG3nMj5\n" +
"FQa1dxW7ArDyjKZSC09rudcTuKpCX3fCOyGEpWce/vMTok4CdnU5pWLxFTA1hPDHmYbs6lppFhvB\n" +
"QWBIwT6PAnuAvbHsA34D2tICISVSHUB5kQeAoXWSeQZ4D7gdmAtcnCkngVOxPlni+UBKSFpUL5LN\n" +
"RUusRwD7QwjfZwmkZ3J2HFAKQ4HlsdSDhyLBx4DTwHHgWKxPABeQ7F3L1cOBkcAk4IrIc3gmxooQ\n" +
"wpsVWagfVFmtWkx2M980e1msA5urfs0mW6NqGBttL1FfbC7nmrBXHZ1H5As5nA3KjJmlbm8q/Xy4\n" +
"K4/AS9WOKo62Vhi/SN3ddCml8WxVgZHkghzO5lXxcZm6srl6zsK7uQRGgh9VcfZqDb5GqovVrU0W\n" +
"uEntXYvImXFQFl+rC3M7OtvvaPVh9dOCBX6i9quX1EB1jDpRvbBecWV8X6s+ou5qUOBOtd5NSddB\n" +
"Ha8+pf5Yo8BvjRmAHgX1OnWF+msVgevVuhNf5ywlmYVJ0mkGyZatP7Ab+A7Yns2j/o/uDPWGc82h\n" +
"qVCvV/+Mpc1kFe5QT6jLGvVfSEqyEaiDgbUkZxwA4zImpxqNUXhyuQ68BlxTob9ni1RXAWXzuhE9\n" +
"V6S6CFicw7RnilTvAF7Oaf5Xo/G6XKQ6Acj9z4YkmdUQChWpZg97sv0DgFeAwTW47Xav64wq/auB\n" +
"G2v02b1mkniMVgrq88DddfhseH9dtMhRpRrVBcCjdfrsW92kMooWedZBq8mtjtU5x68Fstm3hkUW\n" +
"CvVL9Z74uUVdru7L+ae4NeVnTar9/nOnqAxMckO1ojXjY3aq74FzpaUiTLLs49Up6ukSotKJs1Ul\n" +
"xvdXj8X+Bxvl05TNQAjhSAihDXgcOC82v5Uy2RvrQ8BLJcYfB7bHx2638PwLdQkwLT4upHN13Unn\n" +
"fZ63Qwgd2bERn8X6ouYwbBBqP3VPfN3Wp9o1ycX+FD9Pr+BjQrRZ0zWsa4SdRw/t6sBUu+ot6im1\n" +
"PYefL9T3G+XTrNf13lgvDSH8DsnBEsmlvoNAb+DDHH42UvwxfONQZ8QZey7TPtHkoHdatVc1NWaU\n" +
"yfW1htCMmZwDbAkhPJlp/5vkZskIkssLVWcy3nxsK55ig1C3qRNLtPc1OQSar9Z796Au/APG6bvw\n" +
"wfS6pQAAAABJRU5ErkJggg==").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "拼多多",
packageName = "com.xunmeng.pinduoduo",
iconBitmap = ("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\n" +
"aryqc2+l+A+lYLJN0kJ+6AAAAABJRU5ErkJggg==").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "京喜",
packageName = "com.jd.pingou",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAQLSURBVGiBzVrRdeIwEJzl8X/uIKaC81UQOkg6CB1AB8lVkHQQqCDpAFIBXAWYCiAV\n" +
"zH1ISoQty5Isksx7/sBI651dabW7tiATSJYArgFU+ir1ZaPW105fbyJS59IhGSRLkvck90zHnuRc\n" +
"G+LLCVQknwco34XnLyFEsrgQAReh4lIkZiSPX0DC4EjyNjcJlxdOmRU/dch8zEGgILluCH6g5XYq\n" +
"T20GEHilZXn9zKfGmDVTl5oWuG0IXHjGl1qBEE/VVAbp3NgOMtskMmx7Yhcx95bk0kHqzPo9MgrH\n" +
"/HUsCdeeeIgSkgHaGE08ucaOHJNnAGaOsaeehxYkqwglq4Cl4jr1571e1cp0hdhpz1yzptckb1xK\n" +
"avl31rL1epkqkLhw9Bqhw5UGLi/ZcyuqTWxjr5Vesx046j4PUgWELix9ivgQtEeorLjrkHFi3Ib3\n" +
"ESFdUY9+b3RbwK/I1Fyxc/X811CdRE8oAex75NYiMolUpALwS//8JyLegOGYfwTQFxAmH6VAgAsN\n" +
"vEuCank+sr0fbKz1mJseWYtAnRb2pNB6opXIWcqn1CRHPbdqyJxHyNgDgDBsWTVhKr0CqhrMASMz\n" +
"ZT9NxokTXWXsUAyROR0hn0W/E9UY+YkcALxCNRfMcgGUtQuoFXAL4CrjM6uYjd6HDSPOC6qDs5kJ\n" +
"pGKPDEJ2TDzwchIaSsSZUicSCj3LshPxJpGWgnOS88CxXdnuxYhsAhWzC7Qg7zGx/gfT1qe/HsBH\n" +
"udtEX01TMa3lVCdbgCqf6gzddEfDPTsMMIAESW5GUPE+BRWANR2JJFXt4jqlSwCtToyWsUZ/ptuF\n" +
"3aANZuGFusihagv5LHuk9iRVrdLs1qRglpo0dlsmLFM4QZ34ubKKiSmsauRNGb4SBxEpTTsouoz9\n" +
"QXgC4krdn4qJiNQjANA17yqD0PfAcW+Znrcy9bqYOzqSbCMFveMzfNciMiP5is8wajcflvhcwgeo\n" +
"Df9b/+7qbvbho/EwNndEZEdyBeAuQtARKv4DAEje49wYV/gkMkPbC8aQfyKeabCyX6SK/Q/VqVtb\n" +
"Dw/BXxFpNe+o0pFm93yF9l4UAPcRzwPUSijt9tLY/ldETlRZ7UuMVLqTSFdnklD7w0bKWTIL6pGx\n" +
"/ZLFB2crVZ/aNhb6XuEYF9rDImNrIMYlk0uStOb1tV9TEVQ+NIkU7G5GN0kUVO1N00Mu6c7hpiSv\n" +
"G5cr3XdhR0/p0HrRY6DX4BTtNd3iDLWpTUQqoSLXdZfoxhWCNwDT2N5xCwzbM/dUL3F82PI8Mz7S\n" +
"3ycmM/YFDJlb5n+37sOJuT8YsMgUvNxGtrHkpT7haBAqL0RoyW/6SqikOgOGNNhqLWMQgdCoEUQK\n" +
"KsrZH541i7UDzj882+T68Ow/U+/beKck6XwAAAAASUVORK5CYII=").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "掌上英雄联盟",
packageName = "com.tencent.qt.qtl",
iconBitmap = ("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\n" +
"PPHz6ZIflQAAAABJRU5ErkJggg==").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "央视频",
packageName = "com.cctv.yangshipin.app.androidp",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAM+SURBVGiB7ZlNiE1hHMZ/702SRj4GY3xMU74VFrOQKFPjo8lQFhZESFnPytoKZUlE\n" +
"CSVEWQxhw0IKE7GhfCwm42OGZnxtxOKxOOfmmsY9zzudQ+o+dep0z9Pvf57Tve/7/98DNdVUUzWF\n" +
"osCSlgFNwIy0Th/QH0K4VVTN3CWpS3/Wi399f5YktVYJUVZn3nVLeQOBjYZnS95FiwjSZHhm5F20\n" +
"iCD1hue/COKoJ2/gvwrSmzewiCCzDM/ZAurmJ0nrjKX3UBG1R43gZtuAaSRPfkzFpaVAa3p+AjgP\n" +
"NALTSXb2fuBtCOHmEN4mYC4wFvjM3+gAJN0wnvipCN7xKpxiOgBJu4wQkrTD5O0xWLl3AEjqNoMs\n" +
"MXl3DNaDIoL0GYU/RfAGDd6gy4tZficYnkcOSFIzMNGwOh4gLshrw7M4gperYoK8NTz1kmZnmUII\n" +
"PcBpp6ikmY4vJsgZ02f92IFLwDfD53QKfpAQwkmSjS5LVpAQwjVgLfAsw7rI4pVPJLUAc4AGkl22\n" +
"F+gbZieeAKxIfdOA0emlSUB7yrgw5Ab/uGNLGgvMT48FFZc6gJb0/CjwIT3/XmYBt0MIXyth1XbY\n" +
"o84TSTm7jSU1htdp8I6UzXsN856I4t/y4kkaJ+mjwTtQAjYZzG1uELxlersDSr829wzr+hLgLG8x\n" +
"o6kzNDlzfVlOt9BURBBHeQcZX8Kbn+0eCqgzPDEzu1W7hPdVeBVRuMHwxMzsUx1TCbhs+NxdHbwg\n" +
"Ts2ylhqe/UiaquqT33G3oqQOY6m8ISnzKUtqlHTM4HVJqqvc2dtI+ppGkp24H+gJITwcUqABWFjx\n" +
"UUN6rASWkywen4DulFF5DDezTybZ1TeQdAcTSUaG1anlC3CX35fhPmAAGBjRbC9v8zwnaYrJ22zw\n" +
"9kXfaEbRNUZRSdpp8pyZXZJas2lxbfxW0/fY9LVkWwBvDooKYj0ZfnWpWZpn+t45ppggzabvfQQz\n" +
"Sx9+a9OrKPf/fkMIP3LEPXGNMUEeZlui9NLwPHVhMUGuGp7DEbw3hudSBM+XpH1VlsmLI+Cdr8I7\n" +
"GMOKfs+u5P15+5CP74cQrseyUl4HsIqkOZwMPAeu/Ffv42uqqaa/p58x6XSczznLtgAAAABJRU5E\n" +
"rkJggg==").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "百度网盘",
packageName = "com.baidu.netdisk",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAOXSURBVGiB7ZlNqFVVGIafJSH9GRGEDTKixMDIMq2BJWhhP1ISxY0gHAVZYWDQjXCi\n" +
"g0YNLlGjaJKQE6MMGwRWKCL9wS26qHDph8TA8mJBFwu91NNgnxPH01lrr73vyltxXtiTtdb3vt+7\n" +
"z1nf/vbaMMQQQ6QQShOq84F1wCpgIXBFZ+oH4EfgAPBxCOGX0tpFoC5SX1FPWo/T6m71prnO+yyo\n" +
"m9WjGQb68bO6Za7zB0Dd3sJAP176P5jo4o25MvFAQRNdbG+bT6uqpV4K7ANSm/UUcASYAGaAZZ3r\n" +
"4hr6tSGE/W3yagx1tObO7lCvGhC3WN1TE7vrnJjoJPRZIpFtGfEP1phZei5MrEskcKABz6YET+u9\n" +
"kg2rZ8YgTKvXNeTaG+F6u2le85oGADdExidCCJMNuQ5Hxpc15GllZElkfKIF13hk/NqmRG2MxPBH\n" +
"i5jfS4mXNNKm0hRrGs9LTaqLgI3AeuCynmsQrm+hHy0O6hRwEjgBvAnsaNz6qxeoY1btdhO81kDj\n" +
"3obc36rb1AtzBe5QP2oo0osNmTpt8bn6SB35yCwEerEpofFCIY3He3lDj8AIULLPeZ/qOTFO1TTe\n" +
"CKwA7iqo8VeDGQDUq4FPqN6x/0v4Arg9hPBrt/w+TdrEfuB54H5gLfAQ8HrhpH4Cdnb4FwPnA6uB\n" +
"MeBMJGY5MAqAerN6JvFffCKmbNVAHirwfz9kouNV71GPRWJPqctRn0kIPFd3G9Wltjt4yDLRo7Mi\n" +
"wbEV4y86B+vIe0RiHXEREz06r0Z4PkjV86znQUdggfrbP2mio7M6RpbqtbLbgRDCNFXVy8Vh4OEQ\n" +
"wpEGMQDHYhMlm8ZctDVBCOG72FxJI387bBiA1iYA1DWxuXnAu5G59Q0EbgOuqVk2KxMdrIyMf5gq\n" +
"v9Pqqhx29Z3SG3uAxiXqVIR/a119rk1A3dXGhLpGnVTfU59UF9ToHExorOwuitXnbiKj6pI+4g01\n" +
"5CkTjw5Y+6l6Z9+6K9VnazR29gakfpVe7Otc32esjf6a6luJuONW7xyTmTnd3U++JTMwB3W901eF\n" +
"dAYf5FnmM0HOvtpYQCd9GqneNwvyvXUmenRebqlxXH0sRwP1VqvNl4uj6uYs8rN1RtRvGujstk0Z\n" +
"tyqRY+qXEeI9VhUodkSUo3G5+pRVEenHaXVcfVG9JcWT/aFHvYjqEG4GmAJOhBBm2hqIaMynelNd\n" +
"SPWh6OvSGkMMMcQQ/w78CeKTxkSm6OrCAAAAAElFTkSuQmCC").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "京东极速版",
packageName = "com.jd.jdlite",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADkAAAAyCAYAAADm33NGAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAASgSURBVGiB7ZpbqFVFGMd/Y2EahbdEC7MjJZrlhcRuJPiipaGpdKILkm8hIlYa3Sws\n" +
"CEKkrAd7yDQikgoStEyL0qyQfKgO0Y0THLUUrykkoSX8elhjZ7Xcl7X3Xvt4DvSHYfaa+eb7/v89\n" +
"i9mzv5lAN4E6BRgWy+WxHgT0AfpmSp84bD+wL1XagR0hhB/SvkMX8C8JdSxwE3AbMJ1O4vXic2Ar\n" +
"cAQ4nKoPdZlIdRAwC7g5ljEFuD0JPA1sDCH8XM6oqSLVW4GpMc4cYETBIeaGEDZUiD8ZWNar4KCo\n" +
"rerr6h5gC3A4hLAEeKPoWMACdbLaEmMPUcep96mbgR1A7/OLiKSOBOYBdwJXZ7o7Yj2siFgZTI0F\n" +
"tZzNupKt6joTrFNnlhutzlY3WBkzo+3HVeyagW3liF9ZwniTnWT7q0+ov+QMdEg9WgznmjG3nMj5\n" +
"FQa1dxW7ArDyjKZSC09rudcTuKpCX3fCOyGEpWce/vMTok4CdnU5pWLxFTA1hPDHmYbs6lppFhvB\n" +
"QWBIwT6PAnuAvbHsA34D2tICISVSHUB5kQeAoXWSeQZ4D7gdmAtcnCkngVOxPlni+UBKSFpUL5LN\n" +
"RUusRwD7QwjfZwmkZ3J2HFAKQ4HlsdSDhyLBx4DTwHHgWKxPABeQ7F3L1cOBkcAk4IrIc3gmxooQ\n" +
"wpsVWagfVFmtWkx2M980e1msA5urfs0mW6NqGBttL1FfbC7nmrBXHZ1H5As5nA3KjJmlbm8q/Xy4\n" +
"K4/AS9WOKo62Vhi/SN3ddCml8WxVgZHkghzO5lXxcZm6srl6zsK7uQRGgh9VcfZqDb5GqovVrU0W\n" +
"uEntXYvImXFQFl+rC3M7OtvvaPVh9dOCBX6i9quX1EB1jDpRvbBecWV8X6s+ou5qUOBOtd5NSddB\n" +
"Ha8+pf5Yo8BvjRmAHgX1OnWF+msVgevVuhNf5ywlmYVJ0mkGyZatP7Ab+A7Yns2j/o/uDPWGc82h\n" +
"qVCvV/+Mpc1kFe5QT6jLGvVfSEqyEaiDgbUkZxwA4zImpxqNUXhyuQ68BlxTob9ni1RXAWXzuhE9\n" +
"V6S6CFicw7RnilTvAF7Oaf5Xo/G6XKQ6Acj9z4YkmdUQChWpZg97sv0DgFeAwTW47Xav64wq/auB\n" +
"G2v02b1mkniMVgrq88DddfhseH9dtMhRpRrVBcCjdfrsW92kMooWedZBq8mtjtU5x68Fstm3hkUW\n" +
"CvVL9Z74uUVdru7L+ae4NeVnTar9/nOnqAxMckO1ojXjY3aq74FzpaUiTLLs49Up6ukSotKJs1Ul\n" +
"xvdXj8X+Bxvl05TNQAjhSAihDXgcOC82v5Uy2RvrQ8BLJcYfB7bHx2638PwLdQkwLT4upHN13Unn\n" +
"fZ63Qwgd2bERn8X6ouYwbBBqP3VPfN3Wp9o1ycX+FD9Pr+BjQrRZ0zWsa4SdRw/t6sBUu+ot6im1\n" +
"PYefL9T3G+XTrNf13lgvDSH8DsnBEsmlvoNAb+DDHH42UvwxfONQZ8QZey7TPtHkoHdatVc1NWaU\n" +
"yfW1htCMmZwDbAkhPJlp/5vkZskIkssLVWcy3nxsK55ig1C3qRNLtPc1OQSar9Z796Au/APG6bvw\n" +
"wfS6pQAAAABJRU5ErkJggg==").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "爱奇艺",
packageName = "com.qiyi.video",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAQJSURBVGiB7ZpNaFxVFMd/f50gtLXUorG1rYpKRS0S/Nh0oSmiVakKhei2Ow26UKg7\n" +
"F+nKhVrrzp0IBrRRC22kLoREkIpVqR8pVds0iZZGSVtL/cBi9e/ivUlebu6beTOZZKY4Pzg87jn3\n" +
"nndO3r33vTk30KZNm0qo1gG2O4BO4CpgFXBDRq4o6OaXjPycXs8AvwHnyldJ/xSNK5qI7RXArcAG\n" +
"4E7gtkzwK4o6bwATwHfAEeAHYBQYlTQadpxOxPZq4EngMaBrceKsm6+BNyW9WlYIwHYX8AFwTZMC\n" +
"q5cTktbBTCJ7gUfm4fA8cAqYAs4WHNNBsqZWptfL6rz3c5J2yXYPsDun0/ck83IqI6eC9pSkc3UG\n" +
"MY3tpcwktRJYQzJDVgNXp3JfzvCbsL3Tcxmz/cB8g2s0th+1fSwS74vYPhAx3N/soPOw/Wwk3n7Z\n" +
"dtB3WNKmpkRZANudwDsZlYAwh4sX2e4LdIclDWQVtp8A7gF6gKXA7yRv37IMAPslHQvGhb6R1Jen\n" +
"rzaWZLYMR22R+TYU2N+I9MmjJzOuO2LvS23bIrZngvvujvS5JbUNhYZLIllnnXUD2wL1KDCcSsgL\n" +
"lfxl2AucDnSbg/aDQftLSUfyHFZMBOiO6J6XtCndEMJkbq/iDwBJZ4DBQL3ZybuE9MleHtj7K/mM\n" +
"JfJrlTiq2YuyL2h3kKxBgNiu+VYlZ6XIoJ/qi6tmBkm+bq/L6LbYHgAeCvrukzRVyVnsiaybX3zF\n" +
"kHSeyPQieSrXB/oBqlAChgJd3kJeCAaBpzPtZcxMrzKTVFkfUH2xLyiSPgQOB+qHg/YeSf9W89XU\n" +
"RFLC6RWyp4iTVk/koKSPijhpeiKSPgEO5pjfLeqn6YmkfJWjr7pblWmVREYiumFJ40UdtEoieVOr\n" +
"MC2RiKTP5uujJRJpBP+bRP6K6LL13cUsn1akVMUe2zVesr2FpGgdllb3NySqOqiYiKS3bd8LPJVR\n" +
"35hKyFFgVwNjq4kSsCPQzfqIk9Rr+zXgLpJfjF3AlSSV+SWZrv3ARtvfSppMiwSh70o8TlL1LxP+\n" +
"8MryCvBxpn2yhvvMxfbLeQWGxaZkzynQHZJ0R5HBkrbbngC2ZtRfNCy6CLaXkZSg5hjeb5W/ahFs\n" +
"b4zEewDb2yOGP2xvre52cbF9t+2RSLw7S8A3kTFLgPdsf05SxzqRygTJljwuqeg5SC2BdgBrSY4U\n" +
"wuvN5JebPp3PQc8FkhdmnlyowdfyNODOGmMAeF1Sb/YMcYTZ29/FwElJayDziSJpA9ALHAL+bFJg\n" +
"RThLsjPuKCcB+cfTlwLrSebleuBaZs/ZVQsc7GngODCWytFUxiX9GBtQ8z8MwHSia5md3PI6XP1N\n" +
"UoItyyQw1ogzyTZt2szmP5pchE46/z11AAAAAElFTkSuQmCC").bitmap,
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "中国建设银行",
packageName = "com.chinamworld.main",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAN9SURBVGiBzZpbiE1RGMf/a0guL+LF7UF4EI0UeXWLXEo8kFKiJKUYJYbClDTKAw8j\n" +
"5IEHHtxCruUyHkSJuWjwYB40bpPBRBSlfh6cM9Yce++z9tprn/Gv0znt/X3/7/ud75yz9tl7G1VA\n" +
"wHxJcySNsx79JL2W9EpSq6QmY8yFSvSTWsAWoAN3XQSm9nXfkiRgOFANTAcGFLaNARYBJ4BvZWC6\n" +
"gZq+aHwksAe4CXwpaeon8ABYb8WPBRr+m+lYAG8dmgJ4DCy38lc75HQDy/KE2JYCoFQ2zEqH+B/A\n" +
"gtAAE4DrngBxMKsc4j8DM0NBLAwAEAfj8jF7A8zICnEsMEQUzFqH+JdAtS9EY04QRdkw6xziW4EJ\n" +
"aSFO58vQIxtmg0P8Q2C0K0R9vr3/Ixtmo0P8HWBYOYil+fYcKxtmk0P8VWBQHMRQoDnXdpNlw2xx\n" +
"iD8bB3IwcGNtHjk2zNaEuGvAwCiIaV6txquu4HvXI9eG2R6xvxEYGjeNkOtFXYn3ZQ8PG2antf0R\n" +
"MCIOIuQ06mJqnPLwsmF2AU+BsZEQhaDNeUJYdY5khJmY5B9q8UuEsGodyAJTzvx9JSCsertTeEf/\n" +
"xEaYTskIsT8NhFXXf52IMczy/TjkA2HVTjpQdIcomPl8AQGOZoGw6kf9U0wHUTC64QFxMgSE1cPi\n" +
"TBAFk0spIc6EhLD6mASc98ntX3j+mDLviE8xB3VK6gIaXROMMbOlvyBdKQs2ACuMMc9T5pVTl6Qq\n" +
"n8RiUtqJTJZ0FpjkUzRKwHelh+gZQFXphhQKBgN8kjTYI/VZ8YXvRIrKDAO8kZT8lzVePR/tIkiT\n" +
"byPKAAO0S3I7iRCt3hMxxnRKepjBMDUM0CZpfIaakjUR27jWY1EsVZsLDH9OaGfVV9vT/pW4l/Hd\n" +
"kRwmA9yXNC1ArZuxe4AXAd4piJkMcDuQP1jXXKJAdgQs1AsGuBLQ+3HirIBBQEvAgm3ALOBcQE9I\n" +
"moYFsyZw0dC6FdW3iYG5ISnsVaIw6pY0zxjzpHRH3LFNvaRfubbkp9ooiEQRZl0JqXpvfCp3faSc\n" +
"sv//AQ73McS+zBAWzBLgQx9AuJ2USwlTzZ+7ESqhZmBpcIgSoBr8bxZw0UHiLhfkAFO8faM9IMAx\n" +
"IMTBpDfUEuA48M6j+VZgbwiAyJXdV8BcSXMljZQ0ynoeIqnDeryWdMkY0xKq9m+hHJ1npgOuZQAA\n" +
"AABJRU5ErkJggg==").bitmap,
contributorName = "fankes"
),
// TODO 可继续在这里添加更多 APP
)
}

View File

@@ -46,6 +46,8 @@ class ConfigureActivity : BaseActivity() {
setContentView(R.layout.activity_config)
/** 返回按钮点击事件 */
findViewById<View>(R.id.title_back_icon).setOnClickListener { onBackPressed() }
/** 设置标题个数文本 */
findViewById<TextView>(R.id.config_title_count_text).text = "已适配 ${IconPackParams.iconDatas.size} 个 APP 的通知图标"
/** 设置列表元素和 Adapter */
findViewById<ListView>(R.id.config_list_view).apply {
adapter = object : BaseAdapter() {

View File

@@ -48,12 +48,14 @@ class MainActivity : BaseActivity() {
private const val moduleVersion = BuildConfig.VERSION_NAME
}
private var isWarnDialogShowing = false // 警告对话框是否显示
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
/** 设置文本 */
findViewById<TextView>(R.id.main_text_version).text = "当前版本:$moduleVersion"
findViewById<TextView>(R.id.main_text_miui_version).text = "MIUI 版本:$miuiVersion"
findViewById<TextView>(R.id.main_text_miui_version).text = "MIUI 版本:$miuiFullVersion"
when {
/** 判断是否为 MIUI 系统 */
isNotMIUI ->
@@ -64,15 +66,24 @@ class MainActivity : BaseActivity() {
confirmButton(text = "退出") { finish() }
noCancelable()
}
/** 判断最低系统版本 */
/** 判断最低 Android 系统版本 */
isLowerAndroidP ->
showDialog {
title = "系统版本过低"
title = "Android 系统版本过低"
msg = "此模块最低支持基于 Android 9 的 MIUI 系统,你的系统版本过低不再进行适配。\n" +
"如有问题请联系 酷安 @星夜不荟"
confirmButton(text = "退出") { finish() }
noCancelable()
}
/** 判断最低 MIUI 版本 */
isNotSupportMiuiVersion ->
showDialog {
title = "MIUI 版本过低"
msg = "此模块最低支持 MIUI 12 系统,你的 MIUI 版本为 ${miuiVersion},不再进行适配。\n" +
"如有问题请联系 酷安 @星夜不荟"
confirmButton(text = "退出") { finish() }
noCancelable()
}
/** 判断是否 Hook */
isHooked() -> {
findViewById<LinearLayout>(R.id.main_lin_status).setBackgroundResource(R.drawable.green_round)
@@ -175,6 +186,20 @@ class MainActivity : BaseActivity() {
}
}
override fun onResume() {
super.onResume()
/** MIUI 12 的版本特殊 - 所以给出提示 */
if (!isWarnDialogShowing && isHooked() && miuiVersion == "12" && isMiuiNotifyStyle)
showDialog {
isWarnDialogShowing = true
title = "经典通知栏样式已启用"
msg = "在 MIUI 12 中启用了经典通知栏样式后状态栏图标将不再做原生处理,模块停止工作," +
"这取决于系统设置,你应当在 设置>通知管理>通知显示设置 中将样式设置为“原生样式”。"
confirmButton(text = "我知道了") { isWarnDialogShowing = false }
noCancelable()
}
}
/**
* 判断模块是否激活
* @return [Boolean] 激活状态

View File

@@ -29,6 +29,7 @@ import android.content.res.Configuration
import android.graphics.*
import android.graphics.Bitmap.createBitmap
import android.os.Build
import android.provider.Settings
import android.service.notification.StatusBarNotification
import android.util.Base64
import com.fankes.miui.notify.application.MNNApplication.Companion.appContext
@@ -54,6 +55,17 @@ inline val isNotSystemInDarkMode get() = !isSystemInDarkMode
*/
val Context.isSystemInDarkMode get() = (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES
/**
* 通知栏是否为 MIUI 样式
* @return [Boolean] 是否符合条件
*/
val Context.isMiuiNotifyStyle
get() = try {
Settings.System.getInt(contentResolver, "status_bar_notification_style") == 0
} catch (_: Throwable) {
false
}
/**
* 系统深色模式是否没开启
* @return [Boolean] 是否开启
@@ -91,6 +103,24 @@ val isMIUI by lazy {
*/
inline val isNotMIUI get() = !isMIUI
/**
* 是否为支持的 MIUI 版本
* @return [Boolean]
*/
val isSupportMiuiVersion
get() = when (miuiVersion) {
"12" -> true
"12.5" -> true
"13" -> true
else -> false
}
/**
* 是否不为支持的 MIUI 版本
* @return [Boolean]
*/
inline val isNotSupportMiuiVersion get() = !isSupportMiuiVersion
/**
* 获取 MIUI 版本
* @return [String]
@@ -109,7 +139,15 @@ val miuiVersion
"V13" -> "13"
else -> it.replace(oldValue = "V", newValue = "")
}
} + " " + findPropString(key = "ro.system.build.version.incremental")
}.trim()
else "NULL"
/**
* 获取 MIUI 完全版本
* @return [String]
*/
val miuiFullVersion
get() = if (isMIUI) (miuiVersion + " " + findPropString(key = "ro.system.build.version.incremental"))
else "不是 MIUI 系统"
/**

View File

@@ -28,15 +28,32 @@
android:src="@mipmap/back"
android:tint="@color/colorTextGray" />
<TextView
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center|start"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:singleLine="true"
android:text="通知图标优化名单"
android:textColor="@color/colorTextGray"
android:textSize="25sp"
android:textSize="19sp"
android:textStyle="bold" />
<TextView
android:id="@+id/config_title_count_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="..."
android:textColor="@color/colorTextDark"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
@@ -64,7 +81,7 @@
android:layout_height="wrap_content"
android:alpha="0.6"
android:lineSpacingExtra="5dp"
android:text="启用替换后 APP 的彩色通知图标将被替换为预设的小图标。\n启用全替换将忽略 APP 非彩色图标,强制将全部通知图标替换为列表中预设的小图标。"
android:text="启用替换后 APP 的彩色通知图标将被替换为预设的小图标。\n启用全替换将忽略 APP 非彩色图标,强制将全部通知图标替换为列表中预设的小图标。"
android:textColor="@color/colorTextGray"
android:textSize="11sp"
tools:ignore="SmallSp" />

View File

@@ -80,7 +80,7 @@
android:id="@+id/adp_app_all_switch"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:text="全替换 "
android:text="全替换 "
android:textColor="@color/colorTextGray"
android:textSize="13sp" />
</LinearLayout>