28 Commits
1.6 ... 1.7

Author SHA1 Message Date
09191802ad Update version to 1.7,fix more bugs 2022-02-20 12:42:45 +08:00
64f252986b 增加通知图标兼容模式,修改回之前的方案 2022-02-20 12:36:13 +08:00
c073d350d0 修改文案 2022-02-20 12:14:17 +08:00
cbeaaa8733 优化代码 2022-02-20 12:04:52 +08:00
3b5e066e2d Merge code 2022-02-20 03:44:34 +08:00
79843eb0d0 修复一个彩色图标判断失误的问题,重新发布版本 1.67 2022-02-20 01:22:56 +08:00
7a4e254230 Update version to 1.66,fix more bugs 2022-02-20 00:24:07 +08:00
0534ab9218 新增“QQ浏览器”、“QQ阅读”通知优化图标 2022-02-20 00:20:19 +08:00
5cee229a99 优化日志打印文本 2022-02-19 23:48:32 +08:00
b6920e3ca1 从 AOSP 源码提取工具类修复 💩 MIUI 对 Android 系统源码的破坏导致灰度图标无法判断 2022-02-19 23:46:03 +08:00
Fankesyooni
a4f7c95f84 Update issue templates 2022-02-19 22:26:16 +08:00
38803846cd Merge code 2022-02-19 03:12:04 +08:00
fb44c4e945 Update version to 1.65,fix more bugs 2022-02-18 23:24:04 +08:00
a2fc95d765 Update version to 1.65,fix more bugs 2022-02-18 23:22:53 +08:00
0e3ef5418c 优化“哔哩哔哩漫画”通知优化图标、增加“讯飞输入法”、“讯飞输入法小米版”通知优化图标 2022-02-18 23:20:30 +08:00
4e5e2cee09 优化代码 2022-02-18 04:10:17 +08:00
7b4b728523 移除不必要的 Hook,修复 MIUI 12 下依然卡顿的问题 2022-02-18 04:04:04 +08:00
9b6540df65 更新 YukiHookAPI 版本 2022-02-18 03:58:22 +08:00
3e8982aad0 Update IconPackParams.kt 2022-02-17 21:59:32 +08:00
085f2498c8 Update IconPackParams.kt 2022-02-17 21:58:09 +08:00
a1e01d1d33 Merge to pending 2022-02-17 21:54:18 +08:00
03aa550487 Update IconPackParams.kt 2022-02-17 21:52:22 +08:00
ea632b8892 Merge code 2022-02-17 21:51:10 +08:00
Fankesyooni
69847a0b0b Merge pull request #29 from sddpljx/master
优化 Jump 图标,增加 斗鱼 图标
2022-02-17 21:44:57 +08:00
sddpljx
4cdbfa944d 优化Jump图标,增加斗鱼图标 2022-02-17 16:21:29 +08:00
Fankesyooni
9edb04cf08 Merge pull request #28 from naicfeng/master
优化 工商银行 网易邮箱大师 小米音乐 图标
2022-02-17 14:39:19 +08:00
naicfeng
071c98e8f3 优化 工商银行 网易邮箱大师 小米音乐 图标 2022-02-17 09:18:47 +08:00
Fankesyooni
a317cc07f5 Update issue templates 2022-02-17 05:16:52 +08:00
35 changed files with 561 additions and 271 deletions

View File

@@ -9,7 +9,7 @@ assignees: ''
**需要适配的 APP 名称/包名/通知图标颜色 (必填)**
* (示例:小米音乐/com.miui.player/0xfff16033)
* (示例:小米音乐/com.miui.player/#fff16033)
*
@@ -23,6 +23,7 @@ assignees: ''
* (若直接在附件提交这里可不填)
<!--- 提交时请将示例内容全部删除 --->
<!--- 提交时请将括号内容包括括号全部删除,填入你自己的内容 --->
<!--- 请保留模板原始标题 --->
<!--- 不按规定提交的 issues 将直接被关闭 --->
<!--- Create by Template --->

View File

@@ -46,6 +46,7 @@ assignees: fankes
</code></pre></details>
<!--- 提交时请将示例内容全部删除 --->
<!--- 提交时请将括号内容包括括号全部删除,填入你自己的内容 --->
<!--- 请保留模板原始标题 --->
<!--- 不按规定提交的 issues 将直接被关闭 --->
<!--- Create by Template --->

2
.idea/misc.xml generated
View File

@@ -10,7 +10,7 @@
<entry key="app/src/main/res/drawable/white_round.xml" value="0.256" />
<entry key="app/src/main/res/layout/activity_config.xml" value="0.42168674698795183" />
<entry key="app/src/main/res/layout/activity_login.xml" value="0.4375" />
<entry key="app/src/main/res/layout/activity_main.xml" value="0.37516748548459133" />
<entry key="app/src/main/res/layout/activity_main.xml" value="0.36160137752905724" />
<entry key="app/src/main/res/layout/adapter_config.xml" value="0.4375" />
<entry key="app/src/main/res/layout/dia_icon_search.xml" value="0.4307692307692308" />
<entry key="app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml" value="0.44871794871794873" />

View File

@@ -2,7 +2,7 @@
![Eclipse Marketplace](https://img.shields.io/badge/build-passing-brightgreen)
![Eclipse Marketplace](https://img.shields.io/badge/license-AGPL3.0-blue)
![Eclipse Marketplace](https://img.shields.io/badge/version-v1.6-green)
![Eclipse Marketplace](https://img.shields.io/badge/version-v1.7-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,12 +12,13 @@ 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.6-green)</a>
<a href='https://github.com/fankes/MIUINativeNotifyIcon/releases'>![Eclipse Marketplace](https://img.shields.io/badge/download-v1.7-green)</a>
<br/><br/>
⚠️ 适配说明<br/>
- 此模块仅支持 LSPosed(作用域“系统界面”)、~~EdXposed(随时停止支持)~~、不支持太极无极
- 目前最低支持基于 Android 9 版本的 MIUI 12 或 MIUI 12.5(最低建议)
- 建议最低从 MIUI 12.5 `2021-5-18` 开发版以后开始使用模块,之前的版本可能或多或少存在 MIUI 自身 BUG 不生效、黑白块的问题
- 请始终保持最新版本的 LSPosed旧版本可能会出现 Hook 不生效的问题
# 请勿用于非法用途

View File

@@ -51,9 +51,13 @@ android {
tasks.whenTaskAdded {
task -> if (task.name == "lintVitalRelease") task.enabled = false
}
/** 移除无效耗时 lint Task */
tasks.whenTaskAdded {
task -> if (task.name == "lintVitalAnalyzeRelease") task.enabled = false
}
/** 移除无效耗时 lint Task */
tasks.whenTaskAdded {
task -> if (task.name == "lintVitalReportRelease") task.enabled = false
}
@@ -64,8 +68,8 @@ dependencies {
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
compileOnly 'de.robv.android.xposed:api:82'
implementation 'com.highcapable.yukihookapi:api:1.0.1'
ksp 'com.highcapable.yukihookapi:ksp-xposed:1.0.1'
implementation 'com.highcapable.yukihookapi:api:1.0.2'
ksp 'com.highcapable.yukihookapi:ksp-xposed:1.0.2'
implementation 'com.geyifeng.immersionbar:immersionbar:3.2.0'
implementation 'com.geyifeng.immersionbar:immersionbar-ktx:3.2.0'
implementation 'androidx.core:core-ktx:1.7.0'

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -30,6 +30,7 @@ object HookConst {
const val ENABLE_MODULE_LOG = "_enable_module_log"
const val ENABLE_HIDE_ICON = "_hide_icon"
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 SYSTEMUI_PACKAGE_NAME = "com.android.systemui"

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -34,6 +34,7 @@ import android.view.View
import android.view.ViewOutlineProvider
import android.widget.ImageView
import androidx.core.graphics.drawable.toBitmap
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_MODULE
import com.fankes.miui.notify.hook.HookConst.ENABLE_MODULE_LOG
@@ -76,15 +77,12 @@ class HookEntry : YukiHookXposedInitProxy {
private const val NotificationViewWrapperClass =
"$SYSTEMUI_PACKAGE_NAME.statusbar.notification.NotificationViewWrapper"
/** 原生存在的类 */
private const val StatusBarIconViewClass = "$SYSTEMUI_PACKAGE_NAME.statusbar.StatusBarIconView"
/** 未确定是否只有旧版本存在的类 */
private const val ExpandableNotificationRowClass = "$SYSTEMUI_PACKAGE_NAME.statusbar.ExpandableNotificationRow"
/** 原生存在的类 */
private const val ContrastColorUtilClass = "com.android.internal.util.ContrastColorUtil"
/** 未确定是否只有旧版本存在的类 */
private const val ExpandableNotificationRowClass = "$SYSTEMUI_PACKAGE_NAME.statusbar.ExpandableNotificationRow"
/** 根据多个版本存在不同的包名相同的类 */
private val NotificationUtilClass = VariousClass(
"$SYSTEMUI_PACKAGE_NAME.statusbar.notification.NotificationUtil",
@@ -106,20 +104,18 @@ class HookEntry : YukiHookXposedInitProxy {
* @param drawable 要判断的图标
* @return [Boolean]
*/
private fun PackageParam.isGrayscaleIcon(context: Context, drawable: Drawable) = safeOfFalse {
ContrastColorUtilClass.clazz.let {
it.method(name = "isGrayscaleIcon", DrawableClass)
?.call<Boolean>(it.method(name = "getInstance", ContextClass)?.callStatic(context), drawable) ?: false
}
}
/**
* 获取当前通知栏的样式
* @return [Boolean]
*/
private fun PackageParam.isShowMiuiStyle() = safeOfFalse {
NotificationUtilClass.clazz.method(name = "showMiuiStyle")?.callStatic() ?: false
}
private fun PackageParam.isGrayscaleIcon(context: Context, drawable: Drawable) =
if (!prefs.getBoolean(ENABLE_COLOR_ICON_COMPAT)) safeOfFalse {
ContrastColorUtilClass.clazz.let {
it.method {
name = "isGrayscaleIcon"
param(DrawableClass)
}.get(it.method {
name = "getInstance"
param(ContextClass)
}.get().invoke(context)).invoke<Boolean>(drawable) ?: false
}
} else BitmapCompatTool.isGrayscaleDrawable(drawable)
/**
* 是否为新版本 MIUI 方案
@@ -127,9 +123,19 @@ class HookEntry : YukiHookXposedInitProxy {
* 拥有状态栏图标颜色检查功能
* @return [Boolean]
*/
private fun PackageParam.hasIgnoreStatusBarIconColor() = safeOfFalse {
NotificationUtilClass.clazz.hasMethod(name = "ignoreStatusBarIconColor", ExpandedNotificationClass.clazz)
}
private val PackageParam.hasIgnoreStatusBarIconColor
get() = safeOfFalse {
NotificationUtilClass.clazz.hasMethod(name = "ignoreStatusBarIconColor", ExpandedNotificationClass.clazz)
}
/**
* 获取当前通知栏的样式
* @return [Boolean]
*/
private val PackageParam.isShowMiuiStyle
get() = safeOfFalse {
NotificationUtilClass.clazz.method { name = "showMiuiStyle" }.get().invoke() ?: false
}
/**
* 获取 [ExpandedNotificationClass] 的应用名称
@@ -137,7 +143,7 @@ class HookEntry : YukiHookXposedInitProxy {
* @return [String]
*/
private fun PackageParam.findAppName(instance: Any?) = safeOf(default = "<unknown>") {
ExpandedNotificationClass.clazz.method(name = "getAppName")?.call(instance) ?: "<empty>"
ExpandedNotificationClass.clazz.method { name = "getAppName" }.get(instance).invoke() ?: "<empty>"
}
/**
@@ -197,7 +203,9 @@ class HookEntry : YukiHookXposedInitProxy {
*/
private val PackageParam.globalContext
get() = safeOfNull {
SystemUIApplicationClass.clazz.method(name = "getContext")?.callStatic<Context>()
if (SystemUIApplicationClass.clazz.hasMethod(name = "getContext"))
SystemUIApplicationClass.clazz.method { name = "getContext" }.get().invoke<Context>()
else null
}
/**
@@ -218,10 +226,11 @@ class HookEntry : YukiHookXposedInitProxy {
if (iconDrawable == null) return@safeRun
/** 如果没开启修复 APP 的彩色图标 */
if (!prefs.getBoolean(ENABLE_COLOR_ICON_HOOK, default = true)) return@safeRun
/** 判断是否不是灰度图标 */
val isNotGrayscaleIcon = !isGrayscaleIcon(context, iconDrawable)
/** 获取通知对象 - 由于 MIUI 的版本迭代不规范性可能是空的 */
expandedNf?.also { notifyInstance ->
/** 判断是否不是灰度图标 */
val isNotGrayscaleIcon = notifyInstance.isXmsf || !isGrayscaleIcon(context, iconDrawable)
/** 目标彩色通知 APP 图标 */
var customIcon: Bitmap? = null
if (prefs.getBoolean(ENABLE_NOTIFY_ICON_FIX, default = true))
@@ -239,12 +248,12 @@ class HookEntry : YukiHookXposedInitProxy {
}
/** 打印日志 */
if (prefs.getBoolean(ENABLE_MODULE_LOG))
loggerD(msg = "hook Icon [${findAppName(notifyInstance)}][${notifyInstance.opPkgName}] custom [${customIcon != null}] grayscale [${!isNotGrayscaleIcon}]")
loggerD(msg = "Icon --> [${findAppName(notifyInstance)}][${notifyInstance.opPkgName}] custom [${customIcon != null}] grayscale [${!isNotGrayscaleIcon}] xmsf [${notifyInstance.isXmsf}]")
when {
/** 处理自定义通知图标优化 */
customIcon != null -> it(customIcon!!)
/** 若不是灰度图标自动处理为圆角 */
isNotGrayscaleIcon -> it(expandedNf.compatNotifyIcon(context, iconDrawable).toBitmap().round(15.dp(context)))
isNotGrayscaleIcon -> it(notifyInstance.compatNotifyIcon(context, iconDrawable).toBitmap().round(15.dp(context)))
}
}
}
@@ -291,7 +300,7 @@ class HookEntry : YukiHookXposedInitProxy {
val iconDrawable = notifyInstance.notification.smallIcon.loadDrawable(context)
/** 判断图标风格 */
val isGrayscaleIcon = isGrayscaleIcon(context, iconDrawable)
val isGrayscaleIcon = !notifyInstance.isXmsf && isGrayscaleIcon(context, iconDrawable)
/** 自定义默认小图标 */
var customIcon: Bitmap? = null
@@ -336,7 +345,7 @@ class HookEntry : YukiHookXposedInitProxy {
background = DrawableBuilder().rounded().solidColor(iconColor).build()
} else iconImageView.apply {
/** 重新设置图标 */
setImageDrawable(expandedNf.compatNotifyIcon(context, iconDrawable))
setImageDrawable(notifyInstance.compatNotifyIcon(context, iconDrawable))
/** 设置裁切到边界 */
clipToOutline = true
/** 设置一个圆角轮廓裁切 */
@@ -374,7 +383,7 @@ class HookEntry : YukiHookXposedInitProxy {
notifyInstance.notification.smallIcon.loadDrawable(context)
/** 判断是否不是灰度图标 */
val isNotGrayscaleIcon = !isGrayscaleIcon(context, iconDrawable)
val isNotGrayscaleIcon = notifyInstance.isXmsf || !isGrayscaleIcon(context, iconDrawable)
/** 获取目标修复彩色图标的 APP */
var isTargetFixApp = false
@@ -427,9 +436,9 @@ class HookEntry : YukiHookXposedInitProxy {
* 因为之前的 MIUI 版本的状态栏图标颜色会全部设置为白色的 - 找不到修复的地方就直接判断版本了
* 对于之前没有通知图标色彩判断功能的版本判断是 MIUI 样式就停止 Hook
*/
replaceAny { if (hasIgnoreStatusBarIconColor()) false else isShowMiuiStyle() }
replaceAny { if (hasIgnoreStatusBarIconColor) false else isShowMiuiStyle }
}
if (hasIgnoreStatusBarIconColor())
if (hasIgnoreStatusBarIconColor)
injectMember {
method {
name = "ignoreStatusBarIconColor"
@@ -460,7 +469,7 @@ class HookEntry : YukiHookXposedInitProxy {
}
afterHook {
/** 对于之前没有通知图标色彩判断功能的版本判断是 MIUI 样式就停止 Hook */
if (hasIgnoreStatusBarIconColor() || !isShowMiuiStyle())
if (hasIgnoreStatusBarIconColor || !isShowMiuiStyle)
(globalContext ?: args[0] as Context).also { context ->
hookSmallIconOnSet(
context = context,
@@ -471,35 +480,8 @@ class HookEntry : YukiHookXposedInitProxy {
}
}
}
findClass(StatusBarIconViewClass).hook {
/** 修复通知图标为彩色 - MIPUSH 修复 */
injectMember {
method { name = "updateIconColor" }
afterHook {
/** 获取自身 */
val iconImageView = instance<ImageView?>() ?: return@afterHook
/** 获取通知实例 */
val expandedNf = field { name = "mNotification" }.of<StatusBarNotification>(instance)
/** 对于之前没有通知图标色彩判断功能的版本判断是 MIUI 样式就停止 Hook */
if (!hasIgnoreStatusBarIconColor() && isShowMiuiStyle()) return@afterHook
/**
* 强制重新进行设置图标
* 防止 MIPUSH 不生效
*/
if (expandedNf?.isXmsf == true)
hookSmallIconOnSet(
context = iconImageView.context,
expandedNf,
expandedNf.notification?.smallIcon?.loadDrawable(iconImageView.context),
) { icon -> iconImageView.setImageBitmap(icon) }
}
}
}
if (NotificationHeaderViewWrapperInjectorClass.hasClass)
findClass(NotificationHeaderViewWrapperInjectorClass).hook {
NotificationHeaderViewWrapperInjectorClass.hook {
/** 修复下拉通知图标自动设置回 APP 图标的方法 */
injectMember {
var isUseLegacy = false
@@ -539,30 +521,30 @@ class HookEntry : YukiHookXposedInitProxy {
}
}
else
findClass(NotificationHeaderViewWrapperClass).hook {
NotificationHeaderViewWrapperClass.hook {
/** 之前的版本解决方案 */
injectMember {
method { name = "handleHeaderViews" }
afterHook {
/** 对于之前没有通知图标色彩判断功能的版本判断是 MIUI 样式就停止 Hook */
if (!hasIgnoreStatusBarIconColor() && isShowMiuiStyle()) return@afterHook
if (!hasIgnoreStatusBarIconColor && isShowMiuiStyle) return@afterHook
/** 获取小图标 */
val iconImageView = field {
classSet = NotificationHeaderViewWrapperClass.clazz
name = "mIcon"
}.of<ImageView>(instance) ?: return@afterHook
/** 从父类中得到 mRow 变量 - [ExpandableNotificationRowClass] */
field {
classSet = NotificationViewWrapperClass.clazz
name = "mRow"
}.get(instance).apply {
/** 获取其中的得到通知方法 */
val expandedNf =
ExpandableNotificationRowClass.clazz.method(name = "getStatusBarNotification")
?.call<StatusBarNotification>(instance = self)
/** 执行 Hook */
hookNotifyIconOnSet(iconImageView.context, expandedNf, iconImageView)
}
val iconImageView =
NotificationHeaderViewWrapperClass.clazz
.field { name = "mIcon" }.of<ImageView>(instance) ?: return@afterHook
/**
* 从父类中得到 mRow 变量 - [ExpandableNotificationRowClass]
* 获取其中的得到通知方法
*/
val expandedNf =
ExpandableNotificationRowClass.clazz
.method { name = "getStatusBarNotification" }
.get(NotificationViewWrapperClass.clazz.field { name = "mRow" }.get(instance).self)
.invoke<StatusBarNotification>()
/** 执行 Hook */
hookNotifyIconOnSet(iconImageView.context, expandedNf, iconImageView)
}
}
}

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -983,8 +983,34 @@ object IconPackParams {
"XJeAll4JkTEwEPid8h/M3cBkYECu3zfAJGqL0qol0GGgNzZ3pYEmAHuAdyWG/gP+SEy/qDCe4jTw\n" +
"U58FKAg0EthI7T5xxRPgGLAg1IeJESYFMFK1F/75PwxI0vPM8Ui19+s9MfWbaKKJcnwCIC7Ye698\n" +
"lvkAAAAASUVORK5CYII=").bitmap,
iconColor = 0xff63ad59.toInt(),
contributorName = "fankes"
iconColor = 0xff29cbb6.toInt(),
contributorName = "fankes、naicfeng"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "小米音乐",
packageName = "com.miui.player",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAOBSURBVGiB7ZpdqE1ZAMf/azCahrxwY0LqUpgZ6YrCPJBIRJTrwQMejY/y5oUi4/q+\n" +
"zMPUECEe6FKUPJB8PLjiwc3wIpOP8T0vY540pZ+Hs7e2ffbeZ33d+zLnX7tz1mqt/8fae6+z1t5H\n" +
"aqKJ/weA6T79+veCkR8kTZQ0OnMg6amkZ8lnjzHmaQnFEkndrrpRggAzJC1Kju8t+/wp6Yak68aY\n" +
"k0ldP0njfDwEBQHmSFonaalH91ZJryTdytStlGcQLwDTgBP44QFwBFhSwHs5adPq6sn5jACrJB2v\n" +
"aPKvpL8kvcgcabnHGPO2hHe9pLlJcbWkLa7erAFsKBnlrYG8rcCzHOeBWL7zYpcqLpfQIBdKeI/E\n" +
"8p8KnW1w3T8EhnhyH2rAfSZWiK0NhFJs8+D+xZJ7fWiIxZZCAB+BHx24bzlwvwHGhwS55iAGcMyC\n" +
"sz0x5opTviHWeogBLKzg3OTJmWK1a4hhwGNPsZsFfMuBm4EhAK64Bvk5UHBNjq/RrOeCKUWevyrJ\n" +
"MtspeT1+BYZmyrsC+bJYZtUKGBxp5HbmeDsj8f5jG6Q9kiBAW4Z3OH6zVRHm5X0XXVptBXW+2Jd+\n" +
"Mca8UbxL7Lt8RVEQr6VGCWaTWa4bYw5KuhuBd0S+oreDSFL+h2xPBM4+PyOS9C2wPS0YY85KOhfI\n" +
"aXVGBgaKFGEzkB3F/YF8dYNdFMRuenPH53WYMaZb0sEArvf5ir4MMg+YnykfkFS47bVAXZCiPXto\n" +
"kHuSrqs2O70ua2SMeQ7sk7TXQ6MuSB3wX/UC7AAG2boB+gN3PHQab62BUZ4h2m0D5PRWeGhNsCV3\n" +
"3VB5hcjonXfQul3EUbb6vezgo8sY0+Vu/wu4PPq5aN0SaAM+WI7QLHffhZoXLbQ+kFmI2hJ32KSI\n" +
"ESLR+81CrsOH2Gq7GzFIo8dOj4FhZf3L7hEZY/6W1BnLaAR0Jp78AHQ1GKlY90jVc67QyeSzyMsK\n" +
"keBlOTClgv9ljAyp0LgKofvAmED+qgfkcV/8AGMrxK4CX3vyHq3gHRs1REa0pWL0zgMzHbimAt0l\n" +
"XJeAll4JkTEwEPid8h/M3cBkYECu3zfAJGqL0qol0GGgNzZ3pYEmAHuAdyWG/gP+SEy/qDCe4jTw\n" +
"U58FKAg0EthI7T5xxRPgGLAg1IeJESYFMFK1F/75PwxI0vPM8Ui19+s9MfWbaKKJcnwCIC7Ye698\n" +
"lvkAAAAASUVORK5CYII=").bitmap,
iconColor = 0xff29cbb6.toInt(),
contributorName = "naicfeng、fankes"
),
IconDataBean(
isEnabled = true,
@@ -1829,23 +1855,37 @@ object IconPackParams {
"IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS\n" +
"ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD\n" +
"cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJ\n" +
"RD0ieG1wLmlpZDpFRDc1OTdFMDhGMzExMUVDQUM1QUNCM0FGODcxOTZFMiIgeG1wTU06RG9jdW1l\n" +
"bnRJRD0ieG1wLmRpZDpFRDc1OTdFMThGMzExMUVDQUM1QUNCM0FGODcxOTZFMiI+IDx4bXBNTTpE\n" +
"ZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkVENzU5N0RFOEYzMTExRUNBQzVB\n" +
"Q0IzQUY4NzE5NkUyIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkVENzU5N0RGOEYzMTExRUNB\n" +
"QzVBQ0IzQUY4NzE5NkUyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBt\n" +
"ZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+gJFIWwAAAkJJREFUeNrsmr8vQ1EUx19/aJUSJYTJyiIR\n" +
"m4HRQiIxdOpkEZtBJP4Qm8FoEIPJYGCwiJiEkU7iV8WPltI+35OcgZtb77z2tvrjnuSz3Jucd7+v\n" +
"93vce56A67pOM0TQaZKwQqyQKkVYM7YAesFHmTkDoB0cgktlbgRMg3dQbpWJgkew82uUqpZC2jUT\n" +
"KU3ulKHcaTV3NbdWXjhmPVIrIRHhWNXMrgsy5g0ospm9BITAq2aOxjKgINhmLr/oQcEzxULewAxX\n" +
"i4iwstxpxo/ApLAi5rl6HoO4KSH0S1yD5wp3wAMjjRd+tjW7FVJPR5RS5l0HWa5If0WIC8I2OFXm\n" +
"JkCSjVzwyEPzHfxso0LWfL6kC42QMbDaaFsrKxyzHmkZs9/zsSAjuHeQadvAQIXruAWfXCS87ikJ\n" +
"XqOnkBRfjLyqSpH/0i8bMPAW2ADdgl0S4ouZp5Bzn4t4MrAzKMfVf3skWg85bNX6Ec/1kEPnkTnQ\n" +
"I7j4kNlzYNyAEMoxC2KClxthT+2Z7qIUS4wnNbmTPnPUtIsSqIcc1uyN2kUp8LH8S7ANwtwsyGnm\n" +
"cnz3f+VcXl0UyjUquAOJhdDxe54bBxHBAmLcOFDjAEyxIK8XQlWzD5yBLlNCXG7vVFrvM4LDqFri\n" +
"XWt2K6QBuigkeNjx3zJVu4pk3n7HX8s0aFJIJ9h3/DWxF8GuMkcVa9Px18TuNCmEFj/k89eOlxhL\n" +
"NJpH7Bcre9ZSYsUx83n6RDNHY0uOmc/Tvx9q/6nGCrFCWkPItwADAOE16XaIqJjsAAAAAElFTkSu\n" +
"QmCC").bitmap,
"RD0ieG1wLmlpZDoyMTU2MUMyOThGOEUxMUVDOTQ5NUZGMTVFMEJEOUZDNiIgeG1wTU06RG9jdW1l\n" +
"bnRJRD0ieG1wLmRpZDoyMTU2MUMyQThGOEUxMUVDOTQ5NUZGMTVFMEJEOUZDNiI+IDx4bXBNTTpE\n" +
"ZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjIxNTYxQzI3OEY4RTExRUM5NDk1\n" +
"RkYxNUUwQkQ5RkM2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjIxNTYxQzI4OEY4RTExRUM5\n" +
"NDk1RkYxNUUwQkQ5RkM2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBt\n" +
"ZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+h/0NYwAABW9JREFUeNrkmltsVFUUhqfTI9VSLF7oRYHG\n" +
"SmyAmFBUIDSkQaXGWi8xagzii7US5cWoiTG8mRAe5N1o9MWkr8SAFi+Z4CV9sII1YvASeaiNlRZJ\n" +
"L/Rip50Z/538myyX+5zZc+agUFfypT1nzl57rb3XXvtyTkWhUEglKGlQDa4GNWAlWM7fZsAEmAZ/\n" +
"glmQT6riIJWsVIEb6MB1IY6M828OzF1OjlwDNoFWsAPcCdYVKfMLOAG+BIPg23KdqigjtEwjPAUe\n" +
"BQ8aXTH1GAOOgsOgFyzG0wJHYvA4OFZIXo5Rd8k2ldoj68FB8FBEDxiFJ8EYOEeMrCJ14I4i5Y+A\n" +
"18APlyK0OsGbYK3jN5OBPgEfgG/AWQ7uWREqATOaGfwNYDPoAh28r+VX8DzoSzK09oFJRyiYe4dA\n" +
"C6iJERI1LHsoQv8+H10+lR0EC6qCedALNoJ0zHEmSVNXL3VLWaANZTliWmNRKR4HexMwPoy9rEPK\n" +
"YrGeiVK4C0wphUOg4xI6YelgXVKmaFNJjqwDI0rRKLs/9S+xkXVKGaFt3un3CCc5K/NgF2diI7eA\n" +
"e5kq8471ltUxpn5bDe4PKVfJeyb7DfOeWSl8yqWPlaNM/0WzVifIqvjsFr/fBk56TG5fgZtEubXg\n" +
"lEe5z0GTKNetxmmWNkaGlkmHGaW4Vz3zTAkzdZuKe195TNXZq37P6HSfVh30CNgpri+AA44Q8BET\n" +
"Ij+K6+9Bf8zF7AHaYmUnbXUWMLPrbrV0eBucVkpz6volrmQD4eg0nZgQz42Ah0ELV8x5MVbawesR\n" +
"dZymLS/bFQltPczVw99Ca6uajGY466aKhNaOBDJUl9LpWji20CY5KW91hdZdYJkKjWHPXWESO8ti\n" +
"MkybrCyjzRcVpJne2lTBDy92W7SMJ+DIhMczs7RJShttTweM1xvBFlVowNOIV8EZMUbS3JP3OXS0\n" +
"c6BWcXzYMbLes64B2mZXy1u4kv4jYBddC5pEgZ/AaIgynbV2hzz3Art+iNctnMxWeBgclhlHaVsr\n" +
"r5to+5RpvVoeGMjCv0fsoS94tp7ZRN2qNmUrPMuG1TFH26TDxvbagCcdtarAOW6MXGLi9B3wNNNk\n" +
"TqTMKoaqlajjnjkufSrVVPAW+CykzIzYcVoxtq8MuGOrcTiSi2it57gVtXEuJ9R31bY1bG54Fnwk\n" +
"d6v8ez7C+ZzDEWP78rjHQYFowUKMWd8+e5XDkSDOSUrA7pp2xHeYwlrOsk/4nAlEOPleSBnToy86\n" +
"bLL2rlL3zHMzaebwSYcj1SEVdXk6EXey7AZ3h/xW7XDE2D6R5j/nVQw3qkGrlfnIEFOllVM8XfGR\n" +
"6ohTzUY1Zoztk6arsiYPs+JmkfPrQ+aSnCMUfmbrV5Acs9tv4rkz3KzdwzCTE+LtYE9EHVbqaJts\n" +
"LGN7NmAaPMtZs1m0iJk1v/NovTdUy0fJCaJlm3IkTLap3hqg7Qtptsi8Y6/wgGcYNSaw1qr3DLdO\n" +
"da+ftuflYPyaYWbFnACu8aggiXccPjrW0CYrWdr8j42VGYwZHg7YFugBrxSpoJ0pWc7Q0zw6HXP0\n" +
"3ma+CMoJJ7Z7ONKjIiRDm52HD3tAXp0lbVDP9Hjuu/tBgyhnDhQGPcs+qercoM7Y8rQ1dM/+Pjgu\n" +
"rs0ib796JusZLttF8rCZcJNnWV3HfrXgPE5byzoOagZfeLSqOemoF+VWgwGPcn3g5lKPg+Ie0DVw\n" +
"bFQ4cr6dI/ocy/HrOWCjDugyYuFY1gHdFXlkuuQPsZfUa4Ul9aLninn1luTL0I/5MnRQvAydEVmt\n" +
"kttq+zK0lXub+5J4GbpkXk//bz8YuGw/4SjHkSXzUU2YU3Upv8+cxlIJfuaUtCP/2YdnfwkwABDy\n" +
"UyV45nFEAAAAAElFTkSuQmCC").bitmap,
iconColor = 0xffa90000.toInt(),
contributorName = "fankes、naicfeng"
),
@@ -2070,26 +2110,20 @@ object IconPackParams {
isEnabledAll = false,
appName = "哔哩哔哩漫画",
packageName = "com.bilibili.comic",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADcAAAAyCAYAAAD4FkP1AAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAPtSURBVGiB3ZpLUttAEIa/drElOCfA2WUX3wA4QZwLJBwgVSEnAE4AnAByAswJbG+z\n" +
"idllBz4BcILOQiMzkntGI0t+hL/KpddI6uc/0y1DAKraU9ULVf0TGvPfQVW/qepIPWxapkbwvPSk\n" +
"BjYt39Ioe+ktKdcB3m9aiFVhBxgDnzYtiAVV7VKU7UVEpqn37wDJg9cFVT0ERsalZ2pEmqhqD3iI\n" +
"DhKReuI1RyjX68jSEZFH4KU1qdrDrOkDOm67daEJPDZ9wDYrN7ZOunxMQq5cYyutAG/ac60pt42e\n" +
"Cxm8l/qADoBjzK2CiDxjs3g95RzuG0uUCLdQP1XVa1Xtq+rYW8r6hBFNF1XtquqB+/XcLz/e3fHG\n" +
"Pkce0q+z7ElAHzhz+zMyJQ7ccdcb558PPSdfyZy77anbfvc9Z1Kv8cI2UDaUb9h+4Lx1PZpOndjF\n" +
"VaGU4z3C4Wednxu6iitSPbcKTNy2R9FDPmEEUyUFvnKNHrQEcqvvUfSQr5zluf3UF8yVa5kwUpC/\n" +
"r+9ofwGB8+WpYGKMAdJzLnk9VwNlY/7CFnTpKWqndDwhTr1tYgocuS0ichwYV5UuY+/n43fhqDSZ\n" +
"+jhjQ1DVS0OefvWdi54bY3tuFWGJE/KAjN77vNL8uYjknrA8lzTvlpVbNy6xjTnhNcyqlmBD4LNx\n" +
"6WuZUNY914Xe50dKFWOGJvJ3qWy5KpIJeWXP269SLkQ4HwvKeXG+LoSUmxNGg/l3N3lt6RqkraJB\n" +
"5833XNAhFqGE5rqRqoZCYEoWHlNgVtPaZllTKrPuKXaekwrWOmwZm1sKU4UzwhgYAneh5ZVDqGbz\n" +
"IyV2f/CaFZZt5F0XGAA3wJOq3kZacim9kjIjzo0Ri5J11XMDsrAeGUouo1wSLOVWWR0ckil5nRNU\n" +
"S9WI2Xq3lEut634CVyzHdsfAg7dGtKoB38MLqVKKANOzTTzXFZETEekCX4C7xPvm9wMXNd9ZCwvK\n" +
"VTCbCREZisgA+EDWhUr9QpNb31LOp37LM1UVe5BQUgrEBfYTkUcRORORWNPHRx7SyzSCKpdgIeVS\n" +
"vLdnnXSN0lvi82KOIYRJJbVuCyGkXIrVF17shBmRUX8VXoAT79giFX8iL0dTlHCgmedwn5zz/WMy\n" +
"xVKs/QIclvLbCr2qBm0UjZQDei4Mr4Fr0irkezLFytERzTtDpv3INSC8tkyl5gEZnafmxhVwFmBk\n" +
"651+6TMA+8uqiEyt/wc0bTP8SBw3A45j9aKIjEsCzjBCtU7NGVKure7zjMxTN4njj4DHJb8X3lEM\n" +
"47/B/3Q0+M/XjIzihxuo7Atoo/s1IcuXKTDepq+0MeV8N/s9xLxDvFGvpOAfWYvqI/JlEOsAAAAA\n" +
"SUVORK5CYII=").bitmap,
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAKcSURBVGiB7ZnPSxRhHIef79APoowg6hAVglR4sPDaJSHwEHUo6NKpk5co/4CgrkJ0\n" +
"yQTxlN4sKugYhh2sTqXrSTBFwoyKIujHwYJPhx0jx3dmZ2fm3VHZB5Zlv/PO+36ed2Z2Z/aFJk28\n" +
"YLUaSNoCHAd+A0tm9sV7quq4e4EDwFZg2sz+ZOmkW9KApAlJy1rNoqSbkjo9hO8M+16MjLkcZhmQ\n" +
"1J22s0Gl47ukngIlesI+0zAY3d8inX0C9tWZ4ZqZ9TuCdbkam9lzR9urwJ06x/1sZvvXVCUNpZwN\n" +
"FxcltUu6Lmk8RfvxsG17uG9Whv5NUChxHnhU54ysFy6Y2WOTtBOoAG1lJ8rIHHAiADrYuBJQzd6x\n" +
"IrLRaYqsNzoCYLrsFAUwHQAzZacogJkAmC07RQHMBmY2BoyWnSQHo2Y2FoQf1twrbSD6AQIAM3sB\n" +
"9JUaJxt9YfbVSBrJcQPXaEYSFSX1SpovO2UC85J6Ux0vSefKTpvAGVfmwFUEjqQyLodDrmKcyFGP\n" +
"QfJy0FWMEznmMUheDruKcSLrmU0j8t5V3PQiCx6D5GXJVYwTmfAYJC91HZE3HoPkpeIqOkXMbBKY\n" +
"8honG2Nm5nx+SrrYhz2FycO9uA2xywqS9gCTQKuPRBn4CLSZ2U/XxtgjYmbfSJiBEngQJwE1Fnok\n" +
"7QJeUv5fRm+B02b2Lq5B4g+imf0AbhedKgM3kiRSI+lhic8fd9NkrLmG+J9MhepaYiOZonpKfa3V\n" +
"MLUIgKRfwI6sqerkGXDZzBa99C7pfgNOp2FJ27wIRGSueJS45V0gInNSxX4JPJF0tqESEaFLkl6V\n" +
"LVDXxZ6EpFagCzgVvsfd2iwAr1deZva0iPELE4kiaTvQAuwO31uAOTP74GvMJk088Be/qJb9kyEC\n" +
"bwAAAABJRU5ErkJggg==").bitmap,
iconColor = 0xffd3618a.toInt(),
contributorName = "fankes"
),
@@ -2937,36 +2971,31 @@ object IconPackParams {
isEnabledAll = false,
appName = "Jump",
packageName = "com.vgjump.jump",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ\n" +
"bWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp\n" +
"bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6\n" +
"eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2\n" +
"MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo\n" +
"dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw\n" +
"dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv\n" +
"IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS\n" +
"ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD\n" +
"cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJ\n" +
"RD0ieG1wLmlpZDozNDNENkZGMDhGMzMxMUVDQUU3NkE0MENFRUUzRUI4RSIgeG1wTU06RG9jdW1l\n" +
"bnRJRD0ieG1wLmRpZDozNDNENkZGMThGMzMxMUVDQUU3NkE0MENFRUUzRUI4RSI+IDx4bXBNTTpE\n" +
"ZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjM0M0Q2RkVFOEYzMzExRUNBRTc2\n" +
"QTQwQ0VFRTNFQjhFIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjM0M0Q2RkVGOEYzMzExRUNB\n" +
"RTc2QTQwQ0VFRTNFQjhFIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBt\n" +
"ZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+JLQbCgAAAvxJREFUeNrsmVtIVUEUhs/RzDJ76Ka9dTCC\n" +
"8ME0jIIosYtUUkFRVOBL0FPZ7cEiUCR6iK4vhRU9RJcHw8KsoIyIhG5geCOKLlSCFmWkVBZa7v6J\n" +
"tel3sfcpKkhkDXyw51+zZubfM7P35pyo53mRwVASIoOkmBEzYkbMiBkxI2bEjJgRM2JGzMhANLIf\n" +
"PAMPQSvIH8hGhsSJ5YAMqg/7wzGiwPtfRoaCNKq/AfVyXQTyQDdIAbvBU4nFwDbQA0aCq6CS+ikB\n" +
"zeBKwJizwFywE/SpWDFYDJLACNlJXaAdnAUXI+7HhwAmgFfez3JJ9ETwhPRuEKO8rV7/spFiuaLV\n" +
"BoyXCh5LfLyKuTEbvPDyFZSHGZkHeqhxuejTVCenKCcJ1FHsPZhM8SrRXb+z1XgXKG+hik0Cbyle\n" +
"AbaoG9oeZmSXmnCB6KVKX0c52aCXYtdAVGL56sZcp7yDqs89ai7LKPYF5IheTHp90BlJBguo3gFa\n" +
"5DqXdLdHb1J9kTpztXTIS2V/+2UOKBBtsxo/T9V5zCbQANLBWtIPBa2G3j41tHWaSb9BOcPBA4q5\n" +
"u58lsZUhe7sNdAXo70AG9V2ttnKWOjMVP35kDDByQnW8RvR0tVf3Uk6hyrkr2yo5wPxl1faj9NVG\n" +
"2goa87VofeATtfksWz0SZGS+JPjlOUiR2DjQQbFq0UeB+2pySyS2SenTxRyvRJm0vUfaEZqPLq1g\n" +
"H5jKc9eP3BcqaQPF3QTuUOwbuA0eqZxj0j5TDqdfblFfO0Q7T9oZavsBjAXbSesUY2lBDyj/wj19\n" +
"WtSE3B1KUAmFsqRBxa3kAbW6L0Meq24yJ8FE0tZT23Oy0jWkVYU8YfsZKQKNlOSWfkpI0kxwGjTJ\n" +
"/nfn4ahMXLd1L7fD4Dg9isOYASrBcqnH5GXnl5LfMeKfAf8Orv7FoI7RYIy8lSP/gERVXyo3q062\n" +
"ZXa8/Kj6f2QVyARlA+CDNlU+VHvlw7Mz7pep/dFjRsyIGTEjZsSMmBEzYkbMiBkxI39XvgswAC6J\n" +
"7TsnD1fXAAAAAElFTkSuQmCC").bitmap,
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAUDSURBVGiB1ZpriFVVGIbfz0uRmtKUVk5ZImoqkanlJUOLoAtdzKxMoqKSNKOIqIik\n" +
"+mH5IwoJycgiSDTGICEwLamEHG+ZTmqmkl1MJ0vzxjg6mT792HuPaz73mfHMOfucfP/MrPdd37e/\n" +
"d6+z1zp7rWMqEoD+koZLGijpMkmVks6R1DHuUi9pn6Q/JG2RVCNppZl9X6waWg2gL/AK8B2tx0Zg\n" +
"OnBlOQxcDXxUQPG58CkwuhQGzgc+yMCAx3ygZ1YmxgP7S2AiQQMwqdgmZpbQgEdVsUwsLqOJBCuB\n" +
"s5qr01owUS1pRFHuSOHYJGmwmR1JE9vkigKW6P9jQpL6S6rOJaYaAd6WdENWFRWAQcDHp9QTGFPO\n" +
"h+EU8Ziv25yJTpL2S2pblPuXLSrNrDZp+I/WbJ0eJiRpbthoHBGgr6TNJS+nMIw0s2qp6Yi8XqZi\n" +
"CsEbyT8mScBFkn4vWzmF4QozW5+MyKNlLaUwTJZOjMgWSX0C8VdJe4N2d0kXlKqyPLHHzLoa0EvS\n" +
"T04cZmarkgawWNKNJS0vPwxpJ+m6FMEbuyb+u1DSOkWTRIOk8ZL6xVqdpLfi/48rGsWHgxxVktpL\n" +
"GpujmDclPSSpwvHbJE1TtL41xLnbSuomaaikSZIeETDLrZq/hVmAEYHWzmk/Btocp90WJg34NEyM\n" +
"tQUp2ss5jCf57gDmCfjKBc53HZ+K+RrHj3Jxtzp9WaBNC/gZLm5moD2dYuSWQO9J9H4/zF1rnIDN\n" +
"LnCK61QV89MdPy2IOQC0DbRzgeOxVue0LsDRWPvc5RyQYqRryk0FCBfz6QL+dIGXuOS7Y/5ex38T\n" +
"xLzntAmB9rgcgPeBA56PtdogdoPTlsb8hwHXA9gn4GAQuNoFXhVovQO+0pm/3sUlOyy1SgHRiPXI\n" +
"oc0J8s4K+LOBncC7rn8NgDdyk+v0TszvcvzEIGaH09oA9bE2JuA7ApemFN6faAlI2g8GuSe4+M5B\n" +
"+zxgUdyvTsCOuLHcXaA9cDjWtjvt7uBi45w2OeY3Ov5JomepfcB1Bo4ATwRc9yD3hSnGK4Bngb1B\n" +
"v7pwOuzmAl4ItKMED12s3w+MdVy3uLAjQD+nbYtzzQm4dTH3muu7A/jXcbcDC4FDnIy/k+n3PhfU\n" +
"IRiNBLPUDIimxi1xXz+6D7hcw4BXg7Z/NlcDXzuultzYKOCkL4zk3gKagXtIgV7AVKJRSFAPLCda\n" +
"FLtw8szocYhoArgH+DbmRgfXqGghfkGy+bY2CHq+haBjRDPFKpqu7Lmwt+UuHKfpLmY90Il4raDp\n" +
"5JKGlwy4XNJ6Sc9J2iBpUXMfoRKhQdH70RmSUPTN+8xm+o9KHG+XdHHm5WWDg5IqkhereeWspEAs\n" +
"MLNjyYj0UXSKdDpihJmtaCNJZrZV0tLy1tMq/GBmK6SmuyjPlKmYQtBYc6MRM1sr6bOylNM6rDGz\n" +
"xtcAv2XaVdJfJS+pdehtZo2v5E22TM1st06PraEXQxNSjoMe4BNJd5akpPyxzMyu9WTOEytgjaTB\n" +
"mZaUP36WNCDt1CrniZWiLaBNmZWUP3ZKGpr30ZuZNUgaIml1rj4lxFZJg8xsT0FZyOZXDqeKJUCH\n" +
"4tyPyMwUTmzxlApTi2bAmelL9HuRrPElMCgTE87QzcAXGRioBu7K3ECKoeFEb5i/FFB8LTAbKOg4\n" +
"vNlfPuRpaqSiKXugorOWSkn+IT0saZeiWahG0nJJ1Wb2T6HX/w/46hXjH66RIAAAAABJRU5ErkJg\n" +
"gg==").bitmap,
iconColor = 0xffff3a48.toInt(),
contributorName = "sddpljx、naicfeng"
),
@@ -3073,62 +3102,32 @@ object IconPackParams {
"IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS\n" +
"ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD\n" +
"cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJ\n" +
"RD0ieG1wLmlpZDpENzI5MzQ4RDhGM0ExMUVDODg5OEEzNzE1NTJGMDhBMyIgeG1wTU06RG9jdW1l\n" +
"bnRJRD0ieG1wLmRpZDpENzI5MzQ4RThGM0ExMUVDODg5OEEzNzE1NTJGMDhBMyI+IDx4bXBNTTpE\n" +
"ZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkQ3MjkzNDhCOEYzQTExRUM4ODk4\n" +
"QTM3MTU1MkYwOEEzIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkQ3MjkzNDhDOEYzQTExRUM4\n" +
"ODk4QTM3MTU1MkYwOEEzIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBt\n" +
"ZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+rXaktQAABJ5JREFUeNrsmkloFEEUhnsmrTGJmUzMOole\n" +
"3EFERVEJCAqCIiIeDIiexJMg6EFPIkKioCIoHvSo4HLQBEQQVBAPCuKGgqAoQsCNJCaaZExmSTLt\n" +
"X/I3FkX1THfPlhELPnpS1V1dr5ZXf71OwLKsZsMwykDKKM0UBJMmjRAEStgQw+RIBEp4RERKBfNQ\n" +
"qUUKPyw5SgHyE8Q4XQuWzBx0xC+QYONFWs96n4LqUhmRCRAGc8FmcAzcBktBtJRGpA9cA9tBhZQ/\n" +
"kOd2W6qXDeagwnrFiFyvPbXeYTCirkEzB5WPZtGoGK/lkvsX6y0ueT57a0jwugLMB/dBVS4N8Zom\n" +
"wTj4QWfQRIchGtkPKkGLNKoWDW0Ey8Ah8ATcdGuIqCgJBvlypzSiyfvC6zeHZ8RUXAk6wWVwg/l7\n" +
"wU6wCsxM075+t4u9jAtWDP1G0AZqNPcJz7Rak78frFPcb4rvqwWLwFrmn+f1HDjgf7VaVgTMBi1E\n" +
"/K4CIXDdyn9aAtqUvF6wA8wB1aBDKb8ADKm9Ed2IiEU1Bm6BbZryOKdckPO3QjOyca6DgDTPKx12\n" +
"e/HsbiXvCOjiM6ItQ342RLEmNjkYITa8JfQcYo63grua+w6ybCXvnQdeOLQhxKkmp9c0ulZaU543\n" +
"RDGXN2jyr4AOGl/BXh6TpInaGVE6iRRHKJFGo6kjVc581+LTabHXafKe8xqRXiAMmaa513aLYRoy\n" +
"lOZdlsYrBv1sSk6+3tD0klEMiZ6NIVaeJf+UPo8Utd2FMiSRQR34OT5kLeNjPAV6lSjVHnt8Qnq+\n" +
"TynvycYQ2UXuowLNJFGq+FyNm71A6SyDumsx67LTV3BV7Rgvhoienw4ecJNLl7YTO90BbzQbn1Ma\n" +
"4O5+XMl/BY6yLbV+14iofCuNiFN6R3XzleVR3iPODXtkyZ0hiWm7hUYkWY+9mYpg4llwEvT6NSRC\n" +
"mbGcZ3K3EkVIne9glsv3TKPR7WAh6zkttWEBZU3K79QSc/wTzwJlHiRKJTvMrdcS55CHVBJOojGW\n" +
"zWK3GyL3rFuJEvPoGaezs8J8R4UbNzcVU8DwGIsu1Z39vyH/DZHiUqk05ZlSqhCiMaTJm6H8PZ7B\n" +
"UCuDkclM5yUv7td2oapPf8aNSz7LvOPvYUYiW7iR6Xo6qmlHVBGNa5Tyj9kYEqZQiyiNvsSon5w3\n" +
"woYnqa/OMKKoJqG/3mpiZk3Mm8WgXbvSod2q5PFiiBBxh5U5HeSGFVfurWbdEw6BPTt18ll1Kt5L\n" +
"s1Z2UWG0ylPSdLm47DN7uSa/0se66mdEpptGp/t+GadWewwugkfKrEhrSD2vH8BLVpT0s+NqOqiH\n" +
"R4H3lOK6hb6JWqtBmk6f+btVF1cwHdSneOgEOGXk58tTFR3AhEO8q49yPiEd6hrZNsttXKuBmr+X\n" +
"Yq3RyN93eMshalMjicZM0R1HQwIcyjqW5zuONako6lGOlKc9znTopUIG48Kcyl1044N033We5IMI\n" +
"yRvF+18UO0ofplMJ0hWHjL//leFGZk0W49Ob2ohRLu5m6eRpeO3YYhti0ZhQtlP5n5HxJo0pZYP+\n" +
"fDkzJUlcqv/m9Of7ym8BBgCXcsuULxM98wAAAABJRU5ErkJggg==").bitmap,
"RD0ieG1wLmlpZDo2Qjk1MzRGRDhGOEUxMUVDOTZEM0FDQjI4OTNENjZDOSIgeG1wTU06RG9jdW1l\n" +
"bnRJRD0ieG1wLmRpZDo2Qjk1MzRGRThGOEUxMUVDOTZEM0FDQjI4OTNENjZDOSI+IDx4bXBNTTpE\n" +
"ZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjZCOTUzNEZCOEY4RTExRUM5NkQz\n" +
"QUNCMjg5M0Q2NkM5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjZCOTUzNEZDOEY4RTExRUM5\n" +
"NkQzQUNCMjg5M0Q2NkM5Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBt\n" +
"ZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+WYn/OwAAA8FJREFUeNrsmkloFEEUhnuSSTIk0SgaNB4U\n" +
"N9DxEONCFFQQJaLgQUVcQERFBTcEFTyIggguB9ccvKgX9SRevAgibiiiYg6SxJ2okRgT4hpjkkm3\n" +
"f+FrUhav2urpNpOJ8+AjM7V09+t6Ve+vmkQcx7H6gmVZfcTCdqQcDEhXRyKgFOwDl0B+KhyJBui7\n" +
"H0wHg8BYUAgS4Gu6ObIATFbKWlM174Lc9KMmzDKrlk+bR1EROLTCDO+EYduBoAzMBbvAOzAqqCNt\n" +
"TJntY7KLZfooqASPpfJxYAWYCHIkZ8VqOASMkdq2m4zIFDDYI+6HM2W5YAn4oemTB0ro2vPp80mp\n" +
"fjs4CGKGL8P2cmQZ2ARmJTFK+ZRL/FgH/V0Hjil1F8E9+jwU7NEmM0VrbQMnmHbfwVtmRAqZN/QC\n" +
"dDHXKKEYV20ExXo9GEZl4qEOgL1SuwJ6DtlqwITfPeAIUerw9hCUSe1crjBtP4Mcpq3guOb6/cAk\n" +
"pew9iCn940zfardeDq01zNv6AlbSWzZZuiM0DzqZumxNVPx0Vx7JPlF5UnlkGlPfoHHCK/ll+Wzv\n" +
"5WRSjhQx9V09lEvsoApBdsTpTZIjbEcyO8QeskhfccROhSNhzzchg5rCUL+tPkRjQQgr4Bvl+31w\n" +
"w9QR+S3OoL25a3GmvRB7O6RkJtTrVHCGkmsyJqRQBUkZWXnvBs+6l6puCVDNSIAqkAXOOclbHSgC\n" +
"hzX1QtIs1UiPtUp5B7gLFtNzRTmJwlkLmAMWgttKOAkpXqy0T9BwJ2g5F31OUTwX+hiFb3SosQFU\n" +
"gUZS1jMpEo6AszQi5SahJfYjr8B4eWKRXQaLGJVcobmWnzyVQywHddLusIU2ZO7ZWbHpHBEC8LWm\n" +
"LqbJS/1DOBISb/8Dsw3Q7lL/tvx2Wakx+3/L7BlHMo5kHDF8/p50JOh+J+FxlBTIkVxN3on4XFJt\n" +
"Q2Wcy6iO+jDUbzNTJk7o2zXtuYTWSLkqavD2Vyvf74Cbpo50eNQJ+bBKKevUtJ1Nek21q5LMV2V/\n" +
"XHpGcZ+dShuh4Z6YOiKOKTd7CLs2RiOpp4kjSfzFGF12SApJ2UaDao/n2gKuywUmjlT+g4lfC9aD\n" +
"p5qFwLb+PAh3SLReI9X7QL1glJlMNt2omTZIdogOCDF5C5ynEdXZc1eeK2HbpusgOyIe+jS4AB5Z\n" +
"Po8sQzbfP6rKjmy0uo/w0y5Ryx1S6YTDrFpWsiOSSsuTQkpM8pp0dSSbImIreOmRVPXHPb3kv4NE\n" +
"3miw9L89po36bQriRG8akczGyrVfAgwAdEkarANjcnYAAAAASUVORK5CYII=").bitmap,
iconColor = 0xffec1a1c.toInt(),
contributorName = "naicfeng"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "小米音乐",
packageName = "com.miui.player",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAOBSURBVGiB7ZpdqE1ZAMf/azCahrxwY0LqUpgZ6YrCPJBIRJTrwQMejY/y5oUi4/q+\n" +
"zMPUECEe6FKUPJB8PLjiwc3wIpOP8T0vY540pZ+Hs7e2ffbeZ33d+zLnX7tz1mqt/8fae6+z1t5H\n" +
"aqKJ/weA6T79+veCkR8kTZQ0OnMg6amkZ8lnjzHmaQnFEkndrrpRggAzJC1Kju8t+/wp6Yak68aY\n" +
"k0ldP0njfDwEBQHmSFonaalH91ZJryTdytStlGcQLwDTgBP44QFwBFhSwHs5adPq6sn5jACrJB2v\n" +
"aPKvpL8kvcgcabnHGPO2hHe9pLlJcbWkLa7erAFsKBnlrYG8rcCzHOeBWL7zYpcqLpfQIBdKeI/E\n" +
"8p8KnW1w3T8EhnhyH2rAfSZWiK0NhFJs8+D+xZJ7fWiIxZZCAB+BHx24bzlwvwHGhwS55iAGcMyC\n" +
"sz0x5opTviHWeogBLKzg3OTJmWK1a4hhwGNPsZsFfMuBm4EhAK64Bvk5UHBNjq/RrOeCKUWevyrJ\n" +
"MtspeT1+BYZmyrsC+bJYZtUKGBxp5HbmeDsj8f5jG6Q9kiBAW4Z3OH6zVRHm5X0XXVptBXW+2Jd+\n" +
"Mca8UbxL7Lt8RVEQr6VGCWaTWa4bYw5KuhuBd0S+oreDSFL+h2xPBM4+PyOS9C2wPS0YY85KOhfI\n" +
"aXVGBgaKFGEzkB3F/YF8dYNdFMRuenPH53WYMaZb0sEArvf5ir4MMg+YnykfkFS47bVAXZCiPXto\n" +
"kHuSrqs2O70ua2SMeQ7sk7TXQ6MuSB3wX/UC7AAG2boB+gN3PHQab62BUZ4h2m0D5PRWeGhNsCV3\n" +
"3VB5hcjonXfQul3EUbb6vezgo8sY0+Vu/wu4PPq5aN0SaAM+WI7QLHffhZoXLbQ+kFmI2hJ32KSI\n" +
"ESLR+81CrsOH2Gq7GzFIo8dOj4FhZf3L7hEZY/6W1BnLaAR0Jp78AHQ1GKlY90jVc67QyeSzyMsK\n" +
"keBlOTClgv9ljAyp0LgKofvAmED+qgfkcV/8AGMrxK4CX3vyHq3gHRs1REa0pWL0zgMzHbimAt0l\n" +
"XJeAll4JkTEwEPid8h/M3cBkYECu3zfAJGqL0qol0GGgNzZ3pYEmAHuAdyWG/gP+SEy/qDCe4jTw\n" +
"U58FKAg0EthI7T5xxRPgGLAg1IeJESYFMFK1F/75PwxI0vPM8Ui19+s9MfWbaKKJcnwCIC7Ye698\n" +
"lvkAAAAASUVORK5CYII=").bitmap,
iconColor = 0xff63ad59.toInt(),
contributorName = "naicfeng、fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
@@ -3341,7 +3340,156 @@ object IconPackParams {
iconColor = 0xff5cc8c6.toInt(),
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "斗鱼",
packageName = "air.tv.douyu.android",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAVcSURBVGiB1Zp7zNZjGMc/F29JpRwih8WSkVNT/dG8ySFmElmGiGVjw8JG/sgYs8gw\n" +
"M21mzGmsN1tGjsOwyZmcErJYGw2ziurtsA76+OP+vfX09HvOz9Ob7/Zsv999X/d1X9/7vn7XdR8e\n" +
"1L7q8eo+/M+g9lNHqP3JSOzb3UbVC3WAehJqr+42plGovWMXdLI30B84AGgD1gErgc6I2FIkuz8w\n" +
"COgNbAR+j4i/qumnaUTUA4E+mbEnA+3AscAJQD+gR4H4emAV8BOwANgbOBMYTCLRhU3AUuAzYF5E\n" +
"vNose/MInK7Od9fgW/XiPDsamhH1auDJ7PU5YD5wONAJTAZGNKK/DOZExOWFBXUTUScDHcBaYCKw\n" +
"P8k9jgCWAF8A40iEWoFvgNERsaGu1upeakc21X+rh6jnlXCFm9XvW+lq9ZI4UV1aoGhWQd3CgvIP\n" +
"1LnqRerMFhJRfRZShKmWxFjgXXZ0x/fUo4FpwIFZ2TLgzIjYnLUbXteoVY8p6rdVEVFPBd7LqVoL\n" +
"jAKuLSjr0UUiw8D6bayIDaRvZVNFSXVImWl9Uz0yp/xL9W71qOy52fhevcqUuypDbVP/qKD0xszg\n" +
"BUXlL5q+j41NJnFHnq1lw6/6MnBBFZxvAF4BziVl5z+BfYFbSVm7GJtJ7tCnCt1dWANcEhFv19AG\n" +
"1Ik1jtQy9V1Tlv+1guwEdXGN+i+vbPXOJNrUzho7qhYPZ31Uctli5LpUJSJ3tYCA6sqCPlbX2Pan\n" +
"cjbv9I2obSR/zPPtRrAVGE5a8Z4BvFWHjkMj4s+8ij1yyq6i+SQE2iPiO2Am9ZGAtCXIxQ4JUQ3g\n" +
"njo7KYWNwPCIWJy9L29AV8m8kTcjnzXQUTEWASMjYrFpKQPwVQP6Sq4SdiASEUbEBOA64LcGOuwE\n" +
"boqIYRHxg3ow8L46A7iiAb1962qljldfVrdWGVnWq9eU0PVRjVEqD1NL2dpW0NFA0h57ACnCLIuI\n" +
"N4A3svpjgEeBsaTM/SPwc/a8AjgbOBLopZ4DXEkKGlMj4g+Sy46ua0S3Y0VJImpf4BngItJqdhEp\n" +
"yqxX+5NC8XxgIXAcMCki5hYqUUeRDhQ+IvnxBcB4YB9gnPo0cFqDJCANXD7Ux7Jpm2XRatJ0kjda\n" +
"vT+T+UKdpk4okJmnvqYOKmo7tEnu1IU1phxXksgCdWu5YVAnq69nz5eps9V71Y+7ysu0fadJRMrn\n" +
"HvX8THDPMjJz1ClFZd+o68oq3y67uQlEJlXT0Tz1nTL1s9WRBe+nmRaV/SroHaU+ov7bIIn1al7O\n" +
"24Y2gIiYqH6qzoiIO3PkepICQBceBG6JiDUFRk8DhpGCw5Dsd0y5zmvArIgo6/7bYFq6v6Tel1P3\n" +
"vHpJ9jxGfSFHZnqDo14K/5oia1lsm66I2BIRFwKb1cfVwlPCX9gePtuBF4sVRcT9QMmE1QCmR8Ta\n" +
"ulqq49Tb1Xa1lzrIdO7aWz3VlDxLtT3FFM2agYV10y8yaojaJ3t+yPQdVXXMajp9fEr92nSoV+uO\n" +
"c4t6aFOI5Bi3Wp1bWXKndj3V5TUSGdMKDl0GHWY6732gxna31Uji/FZxKDRqoMlVPlGHViE/tgYC\n" +
"K9X2lpMoMvBx9UfTMv8sixKW6cD7wRpIvGbat+x6qIerT2SGdJqi1QfqkhoILFEv7RYCxTCF3Frx\n" +
"tumyaPeCaf1VDhtMK4Tr1cHdbW9ZuP0mKw8zu9u+qmHa45dCK+9Jco+DGkFnifLp1V787xZQL8yZ\n" +
"ic+7266aoX5YRKJD7VG55W4E09+NNN2TdKhn7cK+e3QtOfo3QdlBpmxecu/fCpi2FgeHaZneB/in\n" +
"6DZ2t4fpL1r7Aav+A1kpEaj/kLRHAAAAAElFTkSuQmCC").bitmap,
iconColor = 0xffff6c2d.toInt(),
contributorName = "sddpljx"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "讯飞输入法",
packageName = "com.iflytek.inputmethod",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAATQSURBVGiB7ZpviBVVGMafN4TIAomUtD9bq1ZmJQaFftEsxJCgApEiCimDKDCKiP5Q\n" +
"uEKJEVJQ0QdpCSFKw4JIxaJWSqjQLUuLcLfM1N1c1nUlZD9Y/PowM3X2vWdm7r17996CHhjunDPv\n" +
"n+c558yZOXOu9D/+XbBGBgNmSloqaY6kmZIuk3S+pBPB8bOk7uwws98byaFuAEuAF4FvqR0DwGvA\n" +
"olYKWAR01UE+D13Aynr51DW0gA5JqwtMRiT1SDoi6bikQUmnJV0haVb6m4dtktab2af1cKsKJb2w\n" +
"A7gXKCIZxloObC7ooaKGGpOIlTkJNwALxxC3HVgHnB53McCTkSRbaOBNClwPbIrk2dioBC81rduT\n" +
"fKsj+brGGvSdSNBHG8S5KO9Tkbyb6g12fyRY0+Z7kueTx7pag0wFel2QO8aJcxGPmJibagnwsnMe\n" +
"t3uiCi4POC5bq3Vc7By/A84ZZ75lnF51nMrfAIB3ndOKJnAt49QO9AWcvihzmOtEbGsS11IAjzlu\n" +
"dxYZr3PGDzaRaymAQwG37UWG+wLDU8DFTeRZCuAt19AzsmsTAqMZkq4O/D40s8Mu0O2SRsxsR1ou\n" +
"fa6Y2c7Qzsx2BvFC//1mNujyTZF0VVr8RtInku4KTOZI+smrvcepvdtdX5XWHwyJUIyHU7uOrMIL\n" +
"BZ4P7JcH9cuD+lvSusku/nMVLUeyUgtxubuekfmySiFdEd+YkInA7sBvtuOy1tkfieUIDcJ1Rn+F\n" +
"gSqHkhOyKDimA2dWIyS9flsQ52BwvquE56FYsIHAoKrVmRdSYFcoJLV5gUrcGrHb4GwmSMHNLmlK\n" +
"cP51jIykr5Tc7Dv99UxYenpS0rCkE2Y2nEfe4RlJ8yVli7ROM/sgYnfMladLOjAhYihJE3Pqswdk\n" +
"bK0fWzOskdSRE2sUzOx0OuYzIRWNmeLcWPmMHOO2apKXYLuZVSUiB0dz6r2QHmn00DogKZup6hHS\n" +
"kSbvTctH6ogRoi+nPhQyZGZD0mgh3SoWUkbsIzMrfpmT5G74vUqG0OFI7+X1yDXBeU92Eg6t7uB8\n" +
"EjDXBTiZ/nZGgndWIyKCuZLuk7TZ1b9iZhVCgGslXRhU/X0f+R4JsUJJi2U4KWmBmfm5PVYXw5qc\n" +
"+j4z+yEoX2lmP+bYLnXlPVErYDiYn3uiRi0EsNU9Q+blGW50hr4FWgbgItfQ/cDZ2XU//X7uyjeP\n" +
"P8Wq8YikSUH5TTM7FbUEpgFHA9X7m0KxBCRfIf8IeI0As8qcOhiN65rEt4iTX1C9Xo2T75WWfQpK\n" +
"+SxzIo4SrAzLnB8KHMf23XUMAOYBg05Ibd8RgDdaKSSdpfY5Ee/VE2gKsLeFQj52InoB/8JYdbAF\n" +
"wJYGcyzLuRT4jEoU7oSV7iECyyRNljSkZHv5mJLXiuMNYf5PnqmSnpa0KnJ5oZn5Z1xdSWYD+10L\n" +
"NWRrGTgvnVx6Ir3QQ6O/rQFtVH5pybAbWAvcWEO8+SS7YX05Md8HJpVHSlDz9jTJ+9cTkm7IMTkl\n" +
"aZekX93Rlh6XSLpU0uIc/34l29Pra+VWF4DHgV9yWrMejJBsH7Q3RYATcxbJRsxY/gHxPfBsSwTE\n" +
"AMwhGfN7GP2K4zFA8r+Vt4Eljcrf0H8HeQDTJF2Q5umX9JuZ/TmeOf/z+AuQV+ZFLOIPXAAAAABJ\n" +
"RU5ErkJggg==").bitmap,
iconColor = 0xff4679e9.toInt(),
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "讯飞输入法小米版",
packageName = "com.iflytek.inputmethod.miui",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAATQSURBVGiB7ZpviBVVGMafN4TIAomUtD9bq1ZmJQaFftEsxJCgApEiCimDKDCKiP5Q\n" +
"uEKJEVJQ0QdpCSFKw4JIxaJWSqjQLUuLcLfM1N1c1nUlZD9Y/PowM3X2vWdm7r17996CHhjunDPv\n" +
"n+c558yZOXOu9D/+XbBGBgNmSloqaY6kmZIuk3S+pBPB8bOk7uwws98byaFuAEuAF4FvqR0DwGvA\n" +
"olYKWAR01UE+D13Aynr51DW0gA5JqwtMRiT1SDoi6bikQUmnJV0haVb6m4dtktab2af1cKsKJb2w\n" +
"A7gXKCIZxloObC7ooaKGGpOIlTkJNwALxxC3HVgHnB53McCTkSRbaOBNClwPbIrk2dioBC81rduT\n" +
"fKsj+brGGvSdSNBHG8S5KO9Tkbyb6g12fyRY0+Z7kueTx7pag0wFel2QO8aJcxGPmJibagnwsnMe\n" +
"t3uiCi4POC5bq3Vc7By/A84ZZ75lnF51nMrfAIB3ndOKJnAt49QO9AWcvihzmOtEbGsS11IAjzlu\n" +
"dxYZr3PGDzaRaymAQwG37UWG+wLDU8DFTeRZCuAt19AzsmsTAqMZkq4O/D40s8Mu0O2SRsxsR1ou\n" +
"fa6Y2c7Qzsx2BvFC//1mNujyTZF0VVr8RtInku4KTOZI+smrvcepvdtdX5XWHwyJUIyHU7uOrMIL\n" +
"BZ4P7JcH9cuD+lvSusku/nMVLUeyUgtxubuekfmySiFdEd+YkInA7sBvtuOy1tkfieUIDcJ1Rn+F\n" +
"gSqHkhOyKDimA2dWIyS9flsQ52BwvquE56FYsIHAoKrVmRdSYFcoJLV5gUrcGrHb4GwmSMHNLmlK\n" +
"cP51jIykr5Tc7Dv99UxYenpS0rCkE2Y2nEfe4RlJ8yVli7ROM/sgYnfMladLOjAhYihJE3Pqswdk\n" +
"bK0fWzOskdSRE2sUzOx0OuYzIRWNmeLcWPmMHOO2apKXYLuZVSUiB0dz6r2QHmn00DogKZup6hHS\n" +
"kSbvTctH6ogRoi+nPhQyZGZD0mgh3SoWUkbsIzMrfpmT5G74vUqG0OFI7+X1yDXBeU92Eg6t7uB8\n" +
"EjDXBTiZ/nZGgndWIyKCuZLuk7TZ1b9iZhVCgGslXRhU/X0f+R4JsUJJi2U4KWmBmfm5PVYXw5qc\n" +
"+j4z+yEoX2lmP+bYLnXlPVErYDiYn3uiRi0EsNU9Q+blGW50hr4FWgbgItfQ/cDZ2XU//X7uyjeP\n" +
"P8Wq8YikSUH5TTM7FbUEpgFHA9X7m0KxBCRfIf8IeI0As8qcOhiN65rEt4iTX1C9Xo2T75WWfQpK\n" +
"+SxzIo4SrAzLnB8KHMf23XUMAOYBg05Ibd8RgDdaKSSdpfY5Ee/VE2gKsLeFQj52InoB/8JYdbAF\n" +
"wJYGcyzLuRT4jEoU7oSV7iECyyRNljSkZHv5mJLXiuMNYf5PnqmSnpa0KnJ5oZn5Z1xdSWYD+10L\n" +
"NWRrGTgvnVx6Ir3QQ6O/rQFtVH5pybAbWAvcWEO8+SS7YX05Md8HJpVHSlDz9jTJ+9cTkm7IMTkl\n" +
"aZekX93Rlh6XSLpU0uIc/34l29Pra+VWF4DHgV9yWrMejJBsH7Q3RYATcxbJRsxY/gHxPfBsSwTE\n" +
"AMwhGfN7GP2K4zFA8r+Vt4Eljcrf0H8HeQDTJF2Q5umX9JuZ/TmeOf/z+AuQV+ZFLOIPXAAAAABJ\n" +
"RU5ErkJggg==").bitmap,
iconColor = 0xff4679e9.toInt(),
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "QQ阅读",
packageName = "com.qq.reader",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAMRSURBVGiB7ZhNSFVBGIbfCVIuBG4UMgiSgihq5dZqY5ERSOSunRtXgYs2tW3TImjh\n" +
"tkWbqHDRIrAfI7CltErIwMJIJfuRDOEKGjwtZvTe5J6fb+7Rg+ADlwv3fjPzvjNz5nzfSHvs0RSu\n" +
"yM6AbklXJJ2RdExSh6S/kpYkTUl6I+mJc26uyHGbBugFJsnPI6CrbN0CKsB9g/B6qsBQmeLbjbOe\n" +
"xEgZ4isFiS/HBDBSoPgNru2U+O5tEA+wDHRa9eyL8HA7ok0e2iTdsjYyvQeAw5K+WgcxsCqp0zn3\n" +
"J28D6wr0G+OtVCRdtTSwGjhnjI/hrCXYauC4MT6Gk5Zgq4GDxvgYTCeR1UCLMT6GVktwzDG63eQ+\n" +
"gSS7gZ/G+Bi+W4KtBiYkrRvbWPgo6XEhPVHL8R8Ag4T8HZ/I9QJ3gZkm04c1YAwY2kgj8FluP3AH\n" +
"GA9jDMYYmGsw4Bw+/+8HKiGuG5/c/TAIfw8MA+2hj54geDohfiXGQJagKvAUGMCvSgvQh5/RRqzh\n" +
"K7Hu0P/RILrRRG1lOcbAeI6ONwfAr0xPnbgRYCUYHaG2BQeACUPfAGMxBvqNg2wwDdwEOoG28GkH\n" +
"bgCzkX32JelsmI1SKy46JN0zu68xL38rcaSJPq5LWpTU6px7mKsFfm/PACfCzJXFcNAwA4zmtkyt\n" +
"3q3i9/NCCeJngS78cwQw2Uhr0ovsV/iuSOqV9CG3++J4J+mCpANbNP1HkoH6p35/gaKs1I+d/yTC\n" +
"n+mjYeuUvYUWgpa4TBh/JJbFcJa+xKIenyp8knQoynlxzEs6lVTop95KAFX5B7lM1p1zidsnK51e\n" +
"KFhMDKn1QZaB3wUKieVb2p+7YQVSS8wsA0sFCokldRKzDCwWKCSWhm/gDXaDgVQNWQY+Fygkli9p\n" +
"f2beTuOrrMuSLkk6XZCoLKYkvZL0wjn3Oi0w5nr9vKQ+SRdVyxSbZVXSS0nPJD13zqUenYWAL+QH\n" +
"8IX6SnI6k8gK/spm84ajNOrMjOKLoCSqIWagdNFJ4Iv4QeBtnfCJ8Ftb2fpMBDO7S/RO8w+xh352\n" +
"EqfboQAAAABJRU5ErkJggg==").bitmap,
iconColor = 0xff45afff.toInt(),
contributorName = "fankes"
),
IconDataBean(
isEnabled = true,
isEnabledAll = false,
appName = "QQ浏览器",
packageName = "com.tencent.mtt",
iconBitmap = ("iVBORw0KGgoAAAANSUhEUgAAADUAAAAyCAYAAAD845PIAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAPhSURBVGiB5ZpLiB1FFIb/I4nR8REw0UkGE9zERyIDxriIbgYXQTKuXKhBERcujAYf\n" +
"oAshiwEloLgQNA+UoKCiC40YRBEXCYoIEiE4YzJxQPJkzEtEGXQw8LmovtjpdPf0qep7r+gPDUPX\n" +
"qXPOV9W3q+r0SP9BWTecAssl5a/fJB3PrmNmdrobcVsVsBzYCHxCM50CtgKjwEC/8z9PwDpgd0OQ\n" +
"OsDtwM39hlkLvJMIU9QM8CLh0e050JaWYYqaBh7tFcwA8H6XgfLa3m2gNT2EyeuzbgEN9wmoo21t\n" +
"Ay0FzvYZCtr6jQHzga/6TZPTA21APd9vioKmafi6v6gCaIWkx5NHRpqV9J2koy34WqKUnIBXEkZ0\n" +
"J/AwcGvB5yBhB/IMcDzS9wwxOw9gNXAuMug9DWMMArsiY/jXL+C5iEDfAAsiYq2LiHUWuMwbaI8z\n" +
"yF9emEK8FRFg99b5PO9FASyTNOLMa5MXJC8zm5L0tLPbaGNL4DHniO1wJlMX+wtH3DN1voqv9Ouc\n" +
"ubS56fzYYbsIuLqqsQh1pcPxjKQfHPZzadJpv6yqIQXqgJmdcyZSp/1O+2urGopQCx1O25wlmdkZ\n" +
"+XYejaHmOZxOO2y74bNyAopQPzucLnXYNtUqh+2JqoYUqCGH7ZwCrpJ0uaNLJVTxcfNM/wiwwMxm\n" +
"HX0ELFFYOi6RJDPbmzXdqFDsrPytFFQJVQx4v3Pxva+Bz4XAZmAf8EuJj6PAy8BdwLzMdrZB7Cua\n" +
"Qo04ob4GKh8ZYBMw6fC3M+t3C3Cyxm6iEVAukXEnWOmuAnjX6aej01n/0RqbMS/UxohExgo+tkbh\n" +
"/KMvMz9PVLSv9EINEndIHMv6vxBLUtBLmb/rgQ3ANuBXGjx6F9QozOykpLdcIxE0AAyqndqGJD0L\n" +
"HJH0mqTbJX0kaY2kD6K8AesjRvY24JGWZqlKrxLOfHHKHDTVt1mf1M86TbQPuDQF7OAcASaAp4DF\n" +
"hM8wvdIbKVAraxxPZO3rqV9TuqUNVXmXFjM7MrMDkp4saZqV9JDCNut1SddEj1y87kzqzYU7jS3Z\n" +
"/bf7MEMd/ZQ8LIRPOp3y2U3E1ezaVunxp/bxy8vMvpf0oKRdZnZQ0nDySKXrhrKbjaEkycxOKIBJ\n" +
"0h2pGbWgQ2U3XVCSZGZ/ZH+eSkonXXvNrPT854bKaTyhbxvaXdWQAlU69T3Spwp7wvYF7Pg3vfXa\n" +
"BPuwhzAzwNquAuXA7gamSpL4E3gT+HyOZPcQzkx1h8v3mubT2r/GEWoVw9k1X9IxSfvN7HDWfrHC\n" +
"Z6IhhZrh7wrVq3Ez+zHnZ7XC+jOkUK+flDSVLSf/X/0N9IzKpFVJbfwAAAAASUVORK5CYII=").bitmap,
iconColor = 0xff6593f1.toInt(),
contributorName = "fankes"
),
// TODO 可继续在这里添加更多 APP
)
}
}
}

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -37,6 +37,7 @@ import androidx.constraintlayout.utils.widget.ImageFilterView
import androidx.core.view.isVisible
import com.fankes.miui.notify.BuildConfig
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_MODULE
@@ -115,10 +116,14 @@ class MainActivity : BaseActivity() {
val notifyIconConfigItem = findViewById<View>(R.id.config_item_notify)
val hideIconInLauncherSwitch = findViewById<SwitchCompat>(R.id.hide_icon_in_launcher_switch)
val colorIconHookSwitch = findViewById<SwitchCompat>(R.id.color_icon_fix_switch)
val colorIconCompatSwitch = findViewById<SwitchCompat>(R.id.color_icon_compat_switch)
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 存储的信息 */
colorIconHookItem.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)
@@ -127,6 +132,7 @@ class MainActivity : BaseActivity() {
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)
moduleEnableSwitch.setOnCheckedChangeListener { btn, b ->
if (!btn.isPressed) return@setOnCheckedChangeListener
@@ -154,6 +160,13 @@ class MainActivity : BaseActivity() {
if (!btn.isPressed) return@setOnCheckedChangeListener
modulePrefs.putBoolean(ENABLE_COLOR_ICON_HOOK, b)
notifyIconConfigItem.isVisible = b
colorIconCompatSwitch.isVisible = b
colorIconCompatText.isVisible = b
SystemUITool.showNeedRestartSnake(context = this)
}
colorIconCompatSwitch.setOnCheckedChangeListener { btn, b ->
if (!btn.isPressed) return@setOnCheckedChangeListener
modulePrefs.putBoolean(ENABLE_COLOR_ICON_COMPAT, b)
SystemUITool.showNeedRestartSnake(context = this)
}
notifyIconFixSwitch.setOnCheckedChangeListener { btn, b ->

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -0,0 +1,118 @@
/*
* MIUINativeNotifyIcon - Fix the native notification bar icon function abandoned by the MIUI development team.
* Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com)
* https://github.com/fankes/MIUINativeNotifyIcon
*
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* and eula along with this software. If not, see
* <https://www.gnu.org/licenses/>
*
* This file is Created by fankes on 2022/2/19.
*/
package com.fankes.miui.notify.utils
import android.graphics.*
import android.graphics.drawable.AnimationDrawable
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import android.graphics.drawable.VectorDrawable
import android.util.ArrayMap
import androidx.core.graphics.drawable.toBitmap
import kotlin.math.abs
/**
* 这是一个从 AOSP 源码中分离出来的功能
*
* 主要作用于兼容部分 MIUI 魔改颜色判断代码造成判断位图灰度功能失效
*/
object BitmapCompatTool {
/** 缓存已判断的结果防止卡顿 */
private var cachedBitmapGrayscales = ArrayMap<Int, Boolean>()
private var tempBuffer = intArrayOf(0)
private var tempCompactBitmap: Bitmap? = null
private var tempCompactBitmapCanvas: Canvas? = null
private var tempCompactBitmapPaint: Paint? = null
private val tempMatrix = Matrix()
/**
* 判断 [Drawable] 是否为灰度位图
* @param drawable 要判断的 [Drawable]
* @return [Boolean] 是否灰度
*/
fun isGrayscaleDrawable(drawable: Drawable) = safeOfFalse {
when (drawable) {
is BitmapDrawable -> isGrayscaleBitmap(drawable.bitmap)
is AnimationDrawable -> !(drawable.numberOfFrames <= 0 || !isGrayscaleBitmap(drawable.getFrame(0).toBitmap()))
is VectorDrawable -> true
else -> isGrayscaleBitmap(drawable.toBitmap())
}
}
/**
* 判断 [Bitmap] 是否为灰度位图
* @param bitmap 要判断的位图
* @return [Boolean] 是否灰度
*/
private fun isGrayscaleBitmap(bitmap: Bitmap) =
cachedBitmapGrayscales[bitmap.generationId] ?: let {
var height = bitmap.height
var width = bitmap.width
if (height > 64 || width > 64) {
if (tempCompactBitmap == null) {
tempCompactBitmap = Bitmap.createBitmap(64, 64, Bitmap.Config.ARGB_8888)
.also { tempCompactBitmapCanvas = Canvas(it) }
tempCompactBitmapPaint = Paint(Paint.FILTER_BITMAP_FLAG).apply { isFilterBitmap = true }
}
tempMatrix.reset()
tempMatrix.setScale(64f / width, 64f / height, 0f, 0f)
tempCompactBitmapCanvas?.drawColor(0, PorterDuff.Mode.SRC)
tempCompactBitmapCanvas?.drawBitmap(bitmap, tempMatrix, tempCompactBitmapPaint)
height = 64
width = 64
}
val size = height * width
ensureBufferSize(size)
tempCompactBitmap?.getPixels(tempBuffer, 0, width, 0, 0, width, height)
for (i in 0 until size)
if (!isGrayscaleColor(tempBuffer[i])) {
cachedBitmapGrayscales[bitmap.generationId] = false
return@let false
}
cachedBitmapGrayscales[bitmap.generationId] = true
true
}
/**
* 提纯 [Bitmap] 颜色判断灰度
* @param color 颜色
* @return [Boolean] 是否灰度
*/
private fun isGrayscaleColor(color: Int): Boolean {
if (color shr 24 and 255 < 50) return true
val r = color shr 16 and 255
val g = color shr 8 and 255
val b = color and 255
return !(abs(r - g) >= 20 || abs(r - b) >= 20 || abs(g - b) >= 20)
}
/**
* 计算字节数组
* @param size 大小
*/
private fun ensureBufferSize(size: Int) {
if (tempBuffer.size < size) tempBuffer = IntArray(size)
}
}

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -37,7 +37,6 @@ import android.util.Base64
import android.widget.Toast
import com.fankes.miui.notify.application.MNNApplication.Companion.appContext
import com.google.android.material.snackbar.Snackbar
import com.highcapable.yukihookapi.hook.factory.callStatic
import com.highcapable.yukihookapi.hook.factory.classOf
import com.highcapable.yukihookapi.hook.factory.hasClass
import com.highcapable.yukihookapi.hook.factory.method
@@ -241,9 +240,10 @@ fun Bitmap.round(radius: Float): Bitmap =
* @return [String]
*/
fun findPropString(key: String, default: String = "") = safeOf(default) {
(classOf(name = "android.os.SystemProperties").method(
name = "get", StringType, StringType
)?.callStatic(key, default)) ?: default
(classOf(name = "android.os.SystemProperties").method {
name = "get"
param(StringType, StringType)
}.get().invoke(key, default)) ?: default
}
/**

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -6,8 +6,8 @@
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version and our eula as published
* by ferredoxin.
* version 3 of the License, or any later version.
* <p>
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -220,6 +220,26 @@
android:text="此选项默认开启,开启后将自动对 APP 通知图标进行判断,保持高版本 API 的 APP 不规范的彩色图标不被着色为白、黑色块并对图标进行圆角优化,关闭后将按照 Android API 规范对 APP 通知进行图标着色,可能会出现着色为黑白、色块情况。"
android:textColor="@color/colorTextDark"
android:textSize="12sp" />
<com.fankes.miui.notify.view.MaterialSwitch
android:id="@+id/color_icon_compat_switch"
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_marginBottom="5dp"
android:text="启用兼容模式"
android:textColor="@color/colorTextGray"
android:textSize="15sp" />
<TextView
android:id="@+id/color_icon_compat_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:alpha="0.6"
android:lineSpacingExtra="6dp"
android:text="如果发现通知图标颜色判定不正常可启用兼容模式,一般情况下不建议启用兼容模式,发生问题请关闭兼容模式。"
android:textColor="@color/colorTextDark"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
@@ -367,7 +387,7 @@
android:layout_marginBottom="10dp"
android:alpha="0.8"
android:lineSpacingExtra="6dp"
android:text="Q.哪些是已知问题?\nA.以下是问题描述列表:\n(1) 动态小图标可能会在高版本系统中闪烁,这是 MIUI 自身就存在的问题,后期只能等官方修复。\n(2) 请始终保持最新版本的 LSPosed旧版本可能会出现 Hook 不生效的问题。"
android:text="Q.哪些是已知问题?\nA.以下是问题描述列表:\n(1) 动态小图标可能会在高版本系统中闪烁,这是 MIUI 自身就存在的问题,后期只能等官方修复。\n(2) 请始终保持最新版本的 LSPosed旧版本可能会出现 Hook 不生效的问题。\n(3) 建议最低从 MIUI 12.5 “2021-5-18” 开发版以后开始使用,之前的版本可能或多或少存在 MIUI 自身 BUG 不生效、黑白块问题,若你的系统不存在原生图标问题不建议使用模块。"
android:textColor="@color/colorTextDark"
android:textSize="12sp" />

View File

@@ -5,8 +5,8 @@ plugins {
}
ext {
appVersionName = "1.6"
appVersionCode = 11
appVersionName = "1.7"
appVersionCode = 15
}
task clean(type: Delete) {

View File

@@ -10,7 +10,8 @@ dependencyResolutionManagement {
repositories {
google()
maven { url "https://api.xposed.info/" }
maven { url 'https://www.jitpack.io' }
maven { url "https://www.jitpack.io" }
maven { url "https://s01.oss.sonatype.org/content/repositories/releases" }
mavenCentral()
}
}