Modify inject module resources to system ui in SystemUIHooker

- Merge app support notification icon type to vector
- Remove all android adb hardcode base64 icon data
- Merge android default icon to "com.android.internal.R.drawable.stat_sys_adb"
This commit is contained in:
2023-01-29 02:05:15 +08:00
parent 9c8df9f173
commit e33c51a320
4 changed files with 30 additions and 186 deletions

View File

@@ -30,7 +30,6 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.IntentFilter import android.content.IntentFilter
import android.content.res.ColorStateList import android.content.res.ColorStateList
import android.graphics.Bitmap
import android.graphics.Color import android.graphics.Color
import android.graphics.Outline import android.graphics.Outline
import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.BitmapDrawable
@@ -45,6 +44,7 @@ import android.view.ViewOutlineProvider
import android.widget.ImageView import android.widget.ImageView
import androidx.core.graphics.drawable.toBitmap import androidx.core.graphics.drawable.toBitmap
import androidx.core.view.children import androidx.core.view.children
import com.fankes.coloros.notify.R
import com.fankes.coloros.notify.bean.IconDataBean import com.fankes.coloros.notify.bean.IconDataBean
import com.fankes.coloros.notify.data.DataConst import com.fankes.coloros.notify.data.DataConst
import com.fankes.coloros.notify.hook.HookConst.ANDROID_PACKAGE_NAME import com.fankes.coloros.notify.hook.HookConst.ANDROID_PACKAGE_NAME
@@ -351,28 +351,26 @@ object SystemUIHooker : YukiBaseHooker() {
/** /**
* 自动适配状态栏、通知栏自定义小图标 * 自动适配状态栏、通知栏自定义小图标
* @param context 实例
* @param isGrayscaleIcon 是否为灰度图标 * @param isGrayscaleIcon 是否为灰度图标
* @param packageName APP 包名 * @param packageName APP 包名
* @return [Pair] - ([Bitmap] 位图,[Int] 颜色) * @return [Pair] - ([Drawable] 位图 or null,[Int] 颜色)
*/ */
private fun compatCustomIcon(isGrayscaleIcon: Boolean, packageName: String): Pair<Bitmap?, Int> { private fun compatCustomIcon(context: Context, isGrayscaleIcon: Boolean, packageName: String): Pair<Drawable?, Int> {
var customPair: Pair<Bitmap?, Int>? = null var customPair: Pair<Drawable?, Int>? = null
val statSysAdbIcon = runCatching {
context.resources.drawableOf("com.android.internal.R\$drawable".toClass().field { name = "stat_sys_adb" }.get().int())
}.getOrNull() ?: context.resources.drawableOf(R.drawable.ic_unsupported)
when { when {
/** 替换系统图标为 Android 默认 */ /** 替换系统图标为 Android 默认 */
(packageName == ANDROID_PACKAGE_NAME || packageName == SYSTEMUI_PACKAGE_NAME) && isGrayscaleIcon.not() -> (packageName == ANDROID_PACKAGE_NAME || packageName == SYSTEMUI_PACKAGE_NAME) && isGrayscaleIcon.not() ->
customPair = Pair( customPair = Pair(statSysAdbIcon, 0)
when {
isUpperOfAndroidT -> IconPackParams.android13IconBitmap
isUpperOfAndroidS -> IconPackParams.android12IconBitmap
else -> IconPackParams.android11IconBitmap
}, 0
)
/** 替换自定义通知图标 */ /** 替换自定义通知图标 */
prefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX) -> run { prefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX) -> run {
iconDatas.takeIf { it.isNotEmpty() }?.forEach { iconDatas.takeIf { it.isNotEmpty() }?.forEach {
if (packageName == it.packageName && isAppNotifyHookOf(it)) { if (packageName == it.packageName && isAppNotifyHookOf(it)) {
if (isGrayscaleIcon.not() || isAppNotifyHookAllOf(it)) if (isGrayscaleIcon.not() || isAppNotifyHookAllOf(it))
customPair = Pair(it.iconBitmap, it.iconColor) customPair = Pair(BitmapDrawable(context.resources, it.iconBitmap), it.iconColor)
return@run return@run
} }
} }
@@ -396,11 +394,10 @@ object SystemUIHooker : YukiBaseHooker() {
isGrayscaleIcon: Boolean, isGrayscaleIcon: Boolean,
packageName: String, packageName: String,
drawable: Drawable drawable: Drawable
) = compatCustomIcon(isGrayscaleIcon, packageName).first.also { ) = compatCustomIcon(context, isGrayscaleIcon, packageName).first.also {
/** 打印日志 */ /** 打印日志 */
printLogcat(tag = "StatusIcon", context, packageName, isCustom = it != null, isGrayscaleIcon) printLogcat(tag = "StatusIcon", context, packageName, isCustom = it != null, isGrayscaleIcon)
}?.let { Pair(BitmapDrawable(context.resources, it), true) } }?.let { Pair(it, true) } ?: Pair(if (isGrayscaleIcon) drawable else nf.compatPushingIcon(drawable), isGrayscaleIcon.not())
?: Pair(if (isGrayscaleIcon) drawable else nf.compatPushingIcon(drawable), isGrayscaleIcon.not())
/** /**
* 自动适配通知栏小图标 * 自动适配通知栏小图标
@@ -421,7 +418,7 @@ object SystemUIHooker : YukiBaseHooker() {
iconColor: Int, iconColor: Int,
iconView: ImageView iconView: ImageView
) = runInSafe { ) = runInSafe {
compatCustomIcon(isGrayscaleIcon, packageName).also { customPair -> compatCustomIcon(context, isGrayscaleIcon, packageName).also { customPair ->
when { when {
prefs.get(DataConst.ENABLE_NOTIFY_ICON_FORCE_APP_ICON) && isEnableHookColorNotifyIcon(isHooking = false) -> prefs.get(DataConst.ENABLE_NOTIFY_ICON_FORCE_APP_ICON) && isEnableHookColorNotifyIcon(isHooking = false) ->
iconView.apply { iconView.apply {
@@ -434,7 +431,7 @@ object SystemUIHooker : YukiBaseHooker() {
/** 设置不要裁切到边界 */ /** 设置不要裁切到边界 */
clipToOutline = false clipToOutline = false
/** 重新设置图标 */ /** 重新设置图标 */
setImageBitmap(customPair.first ?: drawable.toBitmap()) setImageDrawable(customPair.first ?: drawable)
/** 是否开启 Android 12 风格 */ /** 是否开启 Android 12 风格 */
val isA12Style = prefs.get(DataConst.ENABLE_ANDROID12_STYLE) val isA12Style = prefs.get(DataConst.ENABLE_ANDROID12_STYLE)
@@ -544,6 +541,8 @@ object SystemUIHooker : YukiBaseHooker() {
IconAdaptationTool.prepareAutoUpdateIconRule(context, prefs.get(DataConst.NOTIFY_ICON_FIX_AUTO_TIME)) IconAdaptationTool.prepareAutoUpdateIconRule(context, prefs.get(DataConst.NOTIFY_ICON_FIX_AUTO_TIME))
} }
onCreate { onCreate {
/** 注入模块资源 */
injectModuleAppResources()
/** 注册发送适配新的 APP 图标通知监听 */ /** 注册发送适配新的 APP 图标通知监听 */
registerReceiver(object : BroadcastReceiver() { registerReceiver(object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent?) { override fun onReceive(context: Context, intent: Intent?) {

View File

@@ -25,7 +25,6 @@
package com.fankes.coloros.notify.param package com.fankes.coloros.notify.param
import android.content.Context import android.content.Context
import android.graphics.Bitmap
import android.graphics.Color import android.graphics.Color
import com.fankes.coloros.notify.bean.IconDataBean import com.fankes.coloros.notify.bean.IconDataBean
import com.fankes.coloros.notify.data.DataConst import com.fankes.coloros.notify.data.DataConst
@@ -44,112 +43,6 @@ import org.json.JSONObject
*/ */
class IconPackParams(private val context: Context? = null, private val param: PackageParam? = null) { class IconPackParams(private val context: Context? = null, private val param: PackageParam? = null) {
companion object {
/**
* Android 11 系统默认图标
* @return [Bitmap]
*/
val android11IconBitmap by lazy {
("iVBORw0KGgoAAAANSUhEUgAAAEIAAABCCAYAAADjVADoAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAAPkSURBVHic7ZvfVdswFMY/9fS93qDZoNmg6QS4E8AGdAMYgQ1gg4QJkk5AOkGcCUgm\n" +
"+Pog27EdCa7+WDIn/J4gx77W/SzpyvdKwCefdFE5H06yAPCj/vefUuqQqy1JhCA5B3AFYFH/NAdQ\n" +
"WC4/ANjWf28APCultpZrozGaECQbx0sAs0BzFYAVgI1S6jm0baNDsiB5R/KV4/FK8i63r1ZIXpPc\n" +
"jSjAkB3J69x+t5AsEwtgEqTMLcJjRgGGPOYQoCC5zu25gTV1SE4iwpx5h8J77KjDtRNO4ZPkAsAS\n" +
"9jXAVDgA+K2U2khvEAtRq7zG9EVoOAD4JV2MfZFcRD3uXHvCEcBfh+vf429tU0oBYMmYcwbJF+H4\n" +
"3FKH09ng/jnJG5IHh7F+qO+ZD2zN6mdshXbWsUSQhsh7ga2C5Epga0XBmyR5L2xbWGilVl6C04KG\n" +
"5MMbth6m0MbhQyRhcuVhtyBZGWxV9BjTlPWynavdxviNwLhXw2v7C4M95/hf27IJO+TGx7CkNzh1\n" +
"Y8Nzuo0PyjmQfBK019orbOHzD2Q5hMqr1Se6zse0ZWNGy6RuE+I24sOl98e09RZG386EoJ5dU60e\n" +
"xUvgiBQ0RBBTj1gYfkuB10Tpef+ZjyYhrvzbEsT3wPtdhDjzsSdEHb5CE62+zEPCJ4CfDrfMhs8a\n" +
"9oi8KS//j6RHuL/A3vAYCpFrfmiYAXj3m6VLPfH5vMDePaLP8MTckhT1DOq0/jJ6C+hejwjqQTQv\n" +
"sxteqUsEps/wK8pTA1b7XbtfB22bUvapAPAEACQBveZ4q1ToY7+lHRpMlf31Z4HIL6rrc3eOCF3Q\n" +
"fERan6c4WWahK8TopfcJ0vrcCpFzk0Yuuj5f8tDolQaGQsSsQ0yd3lRwyT2ix1CIHImSXPSy70Mh\n" +
"nFPzH5jeS+8JURdM90mbk4f9sDhsmiMuoVec+WgS4hLmiTMfz4RQSq3gVn4PIUci6Fj72MMWPqUV\n" +
"rJSZ51jIq3OU1xJDS36p92K5V9MoKwLvGLcIPDZuReBOYyW9wjlnSHmROSb+tVXm2SgyFmGlCsrK\n" +
"7aRgozh1T1iO56uVpyAROg5shA98oc4wmzaTXXPcXfs2ROsi0T5L6glxC7f6ZHMAJWfRaA9gLkk6\n" +
"uW443QD4FtCwlBwBLKJuOAXaD7IS6VadIRwBlKMegarHuySs5qKiZ1XdR4yC8gk0JRvmKFRRHlpT\n" +
"ECdEBohRMu9QqZj7KFMX6m+TlIJU9P12SAH1RnGXXfiuHCjYAO/KmAdgS5wOwIZuFNvjdAB2lFRi\n" +
"yiPRjTCATsjYFmZHnIovjfMf90i0BOpQ18T87SXWXz+ZKv8BVnFXPlKejoIAAAAASUVORK5CYII=").bitmap
}
/**
* Android 12 系统默认图标
* @return [Bitmap]
*/
val android12IconBitmap by lazy {
("iVBORw0KGgoAAAANSUhEUgAAAEIAAABCCAYAAADjVADoAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\n" +
"CHwIZIgAAANkSURBVHic7ZvNkRoxEIWfXL4vIbBVvpsMTAhksIRgRwAZsBnAxWfjCMARGM4+MBkw\n" +
"RPB8kKh1zagljUYzwlv6qrZ2a0fo50lq9agboFAoFApeVI5GSX4xf07NDwDUAE4AbkqpU45+9Ybk\n" +
"hOTK8/yF5JbklX6uJH+QfPG0uyI5ST+iCMwgf5sBbC3PVoGDd4nSGrARlabtvGI0RLizNc9eegrQ\n" +
"5EJy0RDhTj4xBBHu/EkoQGjdvcT40EOLKYBn4dmnHvX6kOp+xpvh7UyvU4PkDMARwFOHj50B7KBP\n" +
"iEopVZmZnOHtFFkA+NyhzhuAedbThuSMZB2wpHckg2eM5JzkMaDem5mQ/JD86ehoTXLeo+6lR+jv\n" +
"KccSjZk5iRMTWHP6V1200MmgPtYGE+GfdlxiXFK1E9u5pdCxmh3sQYf2Jg4xlqnb69IxaTUsBmxz\n" +
"LbR5GKpNX4dmQoeOI7RdCW1Hnx59HCrJQL02/0FySnJD8kDtHovbJrDsumOfhoN297oWyjZnUDRu\n" +
"oWVptxX7VOMLRliaO0s56XhtLeOOZfe2grHj6bM1bFSJ63OR//KGsqG0nhZsL3dRsNCyJBehqyeE\n" +
"jzEfAiA5SlYbAW3EvkK/WFWQjV2XshWAX96eDoljL+d3dSNJbSP+W4oQhiKEoQhhiD01JDYUvMsR\n" +
"+RZzZZdaiEe4Mou6Aylbw1CEMBQhDLE2okZu91bbgi6xj/dJaje/bA1DEcJQhDAUIQxRp4a5BdpY\n" +
"HkW5t49AHxfbZp2nGO8uUQoJRN2bRm0Nx6yP+a5hFUIpNZ4QDrILMTq0xxWuI7ZvS1SL3pZ9VoQt\n" +
"xjnhCFFp6rCB7XW7FWAaHMqxjcFzFajjosliGik6dBI65Ipb9G1TCuyMGWVrdUpKFLlygARQ6ki5\n" +
"lMSaL1HEdE7KVbikXKp0J7jmd+LoTia7phDDIwL5KBE2kq8eMZxZ9p6653TndI9/UkiYGZMM551D\n" +
"l5mjtgfN5PMmydKUkn1xhdo4HuG/PjsB2EO/E1QAzkqpmnoLPUF7p0v4vdQzdNpx7jhKm8CVkYKk\n" +
"OZyDYMTYDSjC49iEEKgdH+lojaFmbl8hFurVsWZY9r5LgDUffSuEQu2F7gNFqam313IsAXJ93XEG\n" +
"/fZ4/w3o06QGAKXU4Nm7hUKhUIjgL/9/6dhvvYPfAAAAAElFTkSuQmCC").bitmap
}
/**
* Android 13 系统默认图标
* @return [Bitmap]
*/
val android13IconBitmap by lazy {
("iVBORw0KGgoAAAANSUhEUgAAAEIAAABCCAYAAADjVADoAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFG2lUWHRYTU" +
"w6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZ" +
"VN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0i" +
"QWRvYmUgWE1QIENvcmUgNi4wLWMwMDYgNzkuZGFiYWNiYiwgMjAyMS8wNC8xNC0wMDozOTo0NCAgICA" +
"gICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi" +
"1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwO" +
"i8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1l" +
"bnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4" +
"wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RX" +
"Z0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDc" +
"mVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjQgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRl" +
"PSIyMDIzLTAxLTI3VDAxOjQ2OjAzKzA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMy0wMS0yN1QwMTo" +
"0NjozOSswODowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMy0wMS0yN1QwMTo0NjozOSswODowMCIgZG" +
"M6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQc" +
"m9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphZjQwOGEx" +
"ZC0wM2M4LTRiNTgtYmQxMC1kNDBkYTg4MDU0ODUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6YWY" +
"0MDhhMWQtMDNjOC00YjU4LWJkMTAtZDQwZGE4ODA1NDg1IiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SU" +
"Q9InhtcC5kaWQ6YWY0MDhhMWQtMDNjOC00YjU4LWJkMTAtZDQwZGE4ODA1NDg1Ij4gPHhtcE1NOkhpc" +
"3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFu" +
"Y2VJRD0ieG1wLmlpZDphZjQwOGExZC0wM2M4LTRiNTgtYmQxMC1kNDBkYTg4MDU0ODUiIHN0RXZ0Ond" +
"oZW49IjIwMjMtMDEtMjdUMDE6NDY6MDMrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIF" +
"Bob3Rvc2hvcCAyMi40IChNYWNpbnRvc2gpIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L" +
"3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/" +
"PqALyqMAAAU1SURBVHic7Vvvces2DP+l1+9lJ6i7gTaoOkG0QdQJnEwQbxC/CaK3gd4EUSaIOkGcCSx" +
"PgH4AdVEk/gEp2sy95nfHsywBIAQRJABKV0SELwC/5Fbgs+AShtgAeATwBOABgBLwKABbzXMv5FkHIj" +
"pnq4joSB/xQkTKwaM0zRSvRFScU9dzj4gKy6dZALh18Nxqmik2AOoE+lhxdebJ8gjzsB4A/A2gn50vw" +
"O5g4jkA+DORXguc2xAu4T3YGIP+r8BGKBw8Vwl0MgvOaIgRvf4tBLRnM8SvkXxb8BMcAHyz0JRCWUVA" +
"vwWW7jRCopMdETPsk2FGL2c0G8PMnwJPtFxxCq3DnC7ovkJd4xYcC5jQgCc0BZ7hVfBTkaEHsAc/+Qr" +
"21eQfrZMIoYboAPwVwpARz5C7Z3Ac0QXS50QXQpzbECfwk3vWxynRhRDHLJ8d4tzjBKDV/C3e44c5FN" +
"j3S/37W0RfQW4BIGrVqANn+p4451iTr/SBfdah/cQoVgiVOcQo5Gi1lilBESo/JumSDLnv4OCniZBvQ" +
"6NlfhfQlsHSAy2naBm8zHGbcBTY2q1Hh1dyp/qLZpssCwDX+ngABzElOKBSDrsGBTErUYMLPjYcwLp0" +
"4PtR+vwPmMJ0g3Uqj7VzjoTQkWFDNZdlGvrHCMGNRdGSiB6JaEuBQ3Wiz1bLKC00TYS+x7kck+KhOJD" +
"5JtWMbm+g8bX9TIatn0OE3h8Mm6JUt4M5OCo8/yWQyBi0DutgsHDIUOs9T3SY0MbMIdM5YPDQ9gF6L1" +
"zZ5pedUOBi0jHIqmldBbrQMkxuMW2VUOfOJEv6NEzwPaEcbToCTahtvK45Yg/gznG9Xe2X6dE6rt3BE" +
"eP4JkuX4M7DmwOd41rrYpSk4TaC32FPpXNBgfdSTHBWwH1V7NpxrfXwfjbUcLiGa0QU4Fi+SKxQLvTg" +
"XKg3XTQZogRwgzPvNWZEA07lu+nJuSEe4N6g/Zmwx2RVnK4aO/x/jADwve7GP9PJsgwU9LxSkQLLwuw" +
"J9i09KUIKy+V4MDXEENhhFcEzRYel0j1iymzvULAvnyYM48HUNdrATqtA+kugCqRvx4OpIRrwLrJ0o6" +
"UM7PQSKIV0J/C9NuMJ0/KpwP67AVv4ek6gMYCjy1h0WLpG+MbMR9je0AG4VtmCa5k95m4tyOhKRzbnS" +
"8NdzZTqdyvkudLw0scvqVB1sO8l3Av4LwXb6wrfIEgQpaW6g+V8gc8RgdZgVzbhIBEgNcTguHaZF0Lt" +
"UHCPzEEiRGIIX0cb2IflJfAA+2gYryufEIkhJIJq5AnPd/C7poLkQXlm051jJjbBWhM0tLWrRh2o284" +
"lz9WRorhdr63wRtYY4j5CryM5KuEu11CImwT34IJODK8PSsveRfIq20WXIQ4A3iI6BNhvX8AFnlS40T" +
"LrSP5/4VhKfZPlznDuBA5Xf8BtqA04ln+BPUyX4BrAq5a1cdC9TfQy5Ut7Zy8Cf6yIt8haWu44KX1e6" +
"qOPRHRD9t20Tl+70bRHoezWoFetzzckSAVSvJSuwEMu5u23FDiBR8qwRkiK3fAB66tKa9Ajwf7K18dt" +
"GqkM8UciOdn6TvXhSu6PR1d/0HIJ17gDK3oF/nRJEpu8adqRz7Urnwa+ZUXYBsuyZso9NoLlcGPgs+U" +
"WQ4p7SGWIwmAMkxHG1jiM0Dj45sYYKNH3oLHfdM3R42O1qoO7PNbBHn67+BpwzFLO/q/Gub/ys0HBHI" +
"QlCY5ikCuOGGDOY3bI9PJJrhExosT77lSLjK8j5TbEp8FXiK3xH4bAld9cxsQDAAAAAElFTkSuQmCC").bitmap
}
}
/** /**
* 已存储的 JSON 数据 * 已存储的 JSON 数据
* @return [String] * @return [String]

View File

@@ -29,11 +29,11 @@ import android.app.PendingIntent
import android.content.ComponentName import android.content.ComponentName
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.graphics.Bitmap
import android.graphics.drawable.Icon import android.graphics.drawable.Icon
import android.os.Build import android.os.Build
import androidx.core.graphics.drawable.toBitmap import androidx.core.graphics.drawable.toBitmap
import com.fankes.coloros.notify.BuildConfig import com.fankes.coloros.notify.BuildConfig
import com.fankes.coloros.notify.R
import com.fankes.coloros.notify.hook.HookEntry import com.fankes.coloros.notify.hook.HookEntry
import com.fankes.coloros.notify.utils.factory.* import com.fankes.coloros.notify.utils.factory.*
@@ -53,66 +53,6 @@ object IconAdaptationTool {
/** 已过期的日期 */ /** 已过期的日期 */
private val outDateLimits = HashSet<String>() private val outDateLimits = HashSet<String>()
/**
* 使用的小图标
* @return [Bitmap]
*/
private val smallIcon by lazy {
("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAAG\n" +
"x2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkP\n" +
"SJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG\n" +
"9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDYgNzkuZGF\n" +
"iYWNiYiwgMjAyMS8wNC8xNC0wMDozOTo0NCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6\n" +
"cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gP\n" +
"HJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYW\n" +
"RvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1\n" +
"lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90\n" +
"b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuM\n" +
"C9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cG\n" +
"UvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI\n" +
"yLjQgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDIyLTAzLTIzVDAyOjU1OjM2\n" +
"KzA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMi0wMy0yM1QwMzowMDoyMSswODowMCIge\n" +
"G1wOk1ldGFkYXRhRGF0ZT0iMjAyMi0wMy0yM1QwMzowMDoyMSswODowMCIgZGM6Zm9ybW\n" +
"F0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0N\n" +
"Qcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlp\n" +
"ZDpiZGY1YWY2NS1lYjYxLTRiOGUtOTk1NS01OTE5OThkN2ExNDAiIHhtcE1NOkRvY3VtZ\n" +
"W50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2MDFlYjQ1OC01ZTdlLWFjNDYtODA0Mi\n" +
"1iNWJmYTFhYWQwNGMiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjYTU\n" +
"4YTA1ZS04OTU1LTQyNzItODg2NC0xNmI5MWI0YzcxMmUiPiA8eG1wTU06SGlzdG9yeT4g\n" +
"PHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0Y\n" +
"W5jZUlEPSJ4bXAuaWlkOmNhNThhMDVlLTg5NTUtNDI3Mi04ODY0LTE2YjkxYjRjNzEyZS\n" +
"Igc3RFdnQ6d2hlbj0iMjAyMi0wMy0yM1QwMjo1NTozNiswODowMCIgc3RFdnQ6c29mdHd\n" +
"hcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIyLjQgKE1hY2ludG9zaCkiLz4gPHJkZjps\n" +
"aSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjg5Y\n" +
"mIxNTI1LWVjYmMtNGY2NC1iZTRlLWU1N2EyNjQ1NDE1YyIgc3RFdnQ6d2hlbj0iMjAyMi\n" +
"0wMy0yM1QwMjo1NzoxMCswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGh\n" +
"vdG9zaG9wIDIyLjQgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjps\n" +
"aSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmJkZ\n" +
"jVhZjY1LWViNjEtNGI4ZS05OTU1LTU5MTk5OGQ3YTE0MCIgc3RFdnQ6d2hlbj0iMjAyMi\n" +
"0wMy0yM1QwMzowMDoyMSswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGh\n" +
"vdG9zaG9wIDIyLjQgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6\n" +
"U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+I\n" +
"DwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+QdGsggAAA35JREFUaIHtmE2IVW\n" +
"Ucxn9z0Ukm7cMSo1AxUwjNIclLRVSL0CAoyD5oYwS1iogWGW0rwQpcJNjCRdKmTR+SBhF\n" +
"BWWZlZllmOgsT/EqHKRuqMVv8XJy5zPGd95x75hyh03Ae+C/O//2/z3Oee97P26MyGdD6\n" +
"r1/gQqExUjc0RuqGxkjd0BipGxojdcOkMTKlS/tCYBXQBvqBWcA/wI/AD8AW4NML9C79w\n" +
"APAYmAOcCUwCBwCvgTeB37J7K3Goq1utRgG1NUZPEXibnVnQa231CUxnhjxmoKkId5WWx\n" +
"M08XpJrSe7GXmlJHEH36l9oUgketRPKmqtS3P2OHaxWgO8HBl9vwPbgM+AU8B0YAnJ3Fk\n" +
"Uqd8HLAfO5MyHz4HbIvkh4ENgJ/Dn6DxZCdxFfGF6GngtPUeuz3D9qnpZzi/7mDoS6fe9\n" +
"Oi1SP0XdnqH1vDo9Q2eeujmj33WmhtbuSMFTOQbSsUg9Gem/3/HDbEuk7ox6c0GtZyP9d\n" +
"3WMLIg0vlGQuBPz1cEIzx51aqouxN/qsglqvRnhWYj6UpAcVnsnSN75/MciIntTfC+m8r\n" +
"+qi0vo9Kp/BBrrUD8KkutLkHdijvpbxMy3jn2Z1eoL6uUVdDYE/NtRjwfJ+yoIoF6rnoi\n" +
"Y2VORNx33B9wHWsDMYEk7m7NsFsEhYBlwMsjfCOwFplbkBzgdPPe2gOEg2e38VQQnSMwM\n" +
"BvmlwBfAtIr8FwXPIy1gf5BsVxS5ieTQd5zEzFDQvhzYBfRU0OgPnk/j+GPJYMlx26d+P\n" +
"MpxNjXX5hlfmneYbJBltAYCrk2YnCZDnHeOKRAXqz8FHMOp9mtMltsQu0uYeTzC085yqL\n" +
"qqIPFMdV+k/46gbr7xpflrz98086Kt/hv0P6JjR5RbIwKqz5h/NF/p+OVb9bA6O1I/N6P\n" +
"+Z/WWLiYezXjHO9JGMBlOMRxW16r3mhwn7jS5D2Rdho6ps3JeKGuYaXKnedhkL5qhLlWf\n" +
"UL/KqN/Y4Q1FNmd0KIqj6tU5JtJmjnThGu7S/k6aMyayvpSF5FfL+xJhXKF+U1JrU8iXJ\n" +
"bLC7M8Z4pTJXJrIypOO59ShgloH1YdiPOkbYgy3A48ANwBXAZcCIyQ79gDwAfAe8FeFzQ\n" +
"3gEuBB4B5gATAb6BvlPUpy63wX2JpF0M3I/waT5g+6xkjd0BipGxojdUNjpG5ojNQNjZG\n" +
"64Rx5J7QeMy++3AAAAABJRU5ErkJggg==").bitmap
}
/** /**
* 推送新 APP 安装适配通知 * 推送新 APP 安装适配通知
* @param context 实例 * @param context 实例
@@ -134,7 +74,7 @@ object IconAdaptationTool {
setContentText("尚未适配此应用,点按打开在线规则。") setContentText("尚未适配此应用,点按打开在线规则。")
setColor(0xFF2993F0.toInt()) setColor(0xFF2993F0.toInt())
setAutoCancel(true) setAutoCancel(true)
setSmallIcon(Icon.createWithBitmap(smallIcon)) setSmallIcon(Icon.createWithResource(BuildConfig.APPLICATION_ID, R.drawable.ic_unsupported))
setLargeIcon(context.appIconOf(packageName)?.toBitmap()) setLargeIcon(context.appIconOf(packageName)?.toBitmap())
setContentIntent( setContentIntent(
PendingIntent.getActivity( PendingIntent.getActivity(

View File

@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="52dp"
android:height="52dp"
android:viewportWidth="739.56"
android:viewportHeight="739.56">
<path
android:fillColor="#ffffff"
android:pathData="m207.74,575.04c-105.24,0 -192,-86.76 -192,-192 0,-105.24 86.76,-192 192,-192 36.98,0 72.53,9.96 103.82,29.87 12.8,8.53 17.07,25.6 8.53,39.82 -8.53,12.8 -25.6,17.07 -39.82,8.53 -21.33,-14.22 -46.93,-21.33 -72.53,-21.33 -73.96,0 -135.11,61.16 -135.11,135.11 0,73.96 61.16,135.11 135.11,135.11 73.96,0 135.11,-61.16 135.11,-135.11 0,-15.64 12.8,-28.44 28.44,-28.44 15.64,0 28.44,12.8 28.44,28.44 0,105.24 -86.76,192 -192,192z" />
<path
android:fillColor="#ffffff"
android:pathData="m534.85,575.04c-39.82,0 -78.22,-11.38 -109.51,-34.13 -12.8,-8.53 -15.64,-27.02 -7.11,-39.82 8.53,-12.8 27.02,-15.64 39.82,-7.11 22.76,15.64 49.78,24.18 76.8,24.18 73.96,0 135.11,-61.16 135.11,-135.11 0,-73.96 -61.16,-135.11 -135.11,-135.11 -73.96,0 -135.11,61.16 -135.11,135.11 0,15.64 -12.8,28.44 -28.44,28.44 -15.64,0 -28.44,-12.8 -28.44,-28.44 0,-105.24 86.76,-192 192,-192 105.24,0 192,85.33 192,192 0,105.24 -86.76,192 -192,192z" />
</vector>