mirror of
https://github.com/fankes/MIUINativeNotifyIcon.git
synced 2025-09-06 02:35:32 +08:00
Added color notification icons placeholder icon function in SystemUIHooker, ConfigData, MainActivity, activity_main
This commit is contained in:
@@ -66,6 +66,9 @@ object ConfigData {
|
|||||||
/** 启用通知图标优化 */
|
/** 启用通知图标优化 */
|
||||||
val ENABLE_NOTIFY_ICON_FIX = PrefsData("_notify_icon_fix", true)
|
val ENABLE_NOTIFY_ICON_FIX = PrefsData("_notify_icon_fix", true)
|
||||||
|
|
||||||
|
/** 使用占位符修补未适配的通知图标 */
|
||||||
|
val ENABLE_NOTIFY_ICON_FIX_PLACEHOLDER = PrefsData("_notify_icon_fix_placeholder", false)
|
||||||
|
|
||||||
/** 提醒未适配通知图标的新安装应用 */
|
/** 提醒未适配通知图标的新安装应用 */
|
||||||
val ENABLE_NOTIFY_ICON_FIX_NOTIFY = PrefsData("_notify_icon_fix_notify", true)
|
val ENABLE_NOTIFY_ICON_FIX_NOTIFY = PrefsData("_notify_icon_fix_notify", true)
|
||||||
|
|
||||||
@@ -274,6 +277,16 @@ object ConfigData {
|
|||||||
putBoolean(ENABLE_NOTIFY_ICON_FIX, value)
|
putBoolean(ENABLE_NOTIFY_ICON_FIX, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否使用占位符修补未适配的通知图标
|
||||||
|
* @return [Boolean]
|
||||||
|
*/
|
||||||
|
var isEnableNotifyIconFixPlaceholder
|
||||||
|
get() = getBoolean(ENABLE_NOTIFY_ICON_FIX_PLACEHOLDER)
|
||||||
|
set(value) {
|
||||||
|
putBoolean(ENABLE_NOTIFY_ICON_FIX_PLACEHOLDER, value)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否提醒未适配通知图标的新安装应用
|
* 是否提醒未适配通知图标的新安装应用
|
||||||
* @return [Boolean]
|
* @return [Boolean]
|
||||||
|
@@ -46,6 +46,7 @@ import androidx.core.graphics.drawable.toBitmap
|
|||||||
import androidx.core.graphics.drawable.toDrawable
|
import androidx.core.graphics.drawable.toDrawable
|
||||||
import androidx.core.view.children
|
import androidx.core.view.children
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
|
import com.fankes.miui.notify.R
|
||||||
import com.fankes.miui.notify.bean.IconDataBean
|
import com.fankes.miui.notify.bean.IconDataBean
|
||||||
import com.fankes.miui.notify.const.PackageName
|
import com.fankes.miui.notify.const.PackageName
|
||||||
import com.fankes.miui.notify.data.ConfigData
|
import com.fankes.miui.notify.data.ConfigData
|
||||||
@@ -346,20 +347,24 @@ object SystemUIHooker : YukiBaseHooker() {
|
|||||||
* @param context 实例
|
* @param context 实例
|
||||||
* @param isGrayscaleIcon 是否为灰度图标
|
* @param isGrayscaleIcon 是否为灰度图标
|
||||||
* @param packageName APP 包名
|
* @param packageName APP 包名
|
||||||
* @return [Pair] - ([Drawable] 小图标,[Int] 颜色)
|
* @return [Triple] - ([Drawable] 小图标,[Int] 颜色,[Boolean] 是否为占位符图标)
|
||||||
*/
|
*/
|
||||||
private fun compatCustomIcon(context: Context, isGrayscaleIcon: Boolean, packageName: String): Pair<Drawable?, Int> {
|
private fun compatCustomIcon(context: Context, isGrayscaleIcon: Boolean, packageName: String): Triple<Drawable?, Int, Boolean> {
|
||||||
var customPair: Pair<Drawable?, Int>? = null
|
/** 防止模块资源注入失败重新注入 */
|
||||||
|
context.injectModuleAppResources()
|
||||||
|
var customPair: Triple<Drawable?, Int, Boolean>? = null
|
||||||
if (ConfigData.isEnableNotifyIconFix) run {
|
if (ConfigData.isEnableNotifyIconFix) 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.toDrawable(context.resources), it.iconColor)
|
customPair = Triple(it.iconBitmap.toDrawable(context.resources), it.iconColor, false)
|
||||||
return@run
|
return@run
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (isGrayscaleIcon.not() && ConfigData.isEnableNotifyIconFixPlaceholder)
|
||||||
|
customPair = Triple(context.resources.drawableOf(R.drawable.ic_unsupported), 0, true)
|
||||||
}
|
}
|
||||||
return customPair ?: Pair(null, 0)
|
return customPair ?: Triple(null, 0, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -375,17 +380,17 @@ object SystemUIHooker : YukiBaseHooker() {
|
|||||||
expandedNf?.let { notifyInstance ->
|
expandedNf?.let { notifyInstance ->
|
||||||
if (iconDrawable == null) return@let Pair(null, false)
|
if (iconDrawable == null) return@let Pair(null, false)
|
||||||
/** 判断是否不是灰度图标 */
|
/** 判断是否不是灰度图标 */
|
||||||
val isNotGrayscaleIcon = notifyInstance.isXmsf || isGrayscaleIcon(context, iconDrawable, notifyInstance).not()
|
val isGrayscaleIcon = notifyInstance.isXmsf.not() && isGrayscaleIcon(context, iconDrawable, notifyInstance)
|
||||||
|
|
||||||
/** 目标彩色通知 APP 图标 */
|
/** 目标彩色通知 APP 图标 */
|
||||||
val customIcon = compatCustomIcon(context, isNotGrayscaleIcon.not(), notifyInstance.nfPkgName).first
|
val customIcon = compatCustomIcon(context, isGrayscaleIcon, notifyInstance.nfPkgName).first
|
||||||
/** 打印日志 */
|
/** 打印日志 */
|
||||||
printLogcat(tag = "StatusIcon", context, notifyInstance, isCustom = customIcon != null, isNotGrayscaleIcon.not())
|
printLogcat(tag = "StatusIcon", context, notifyInstance, isCustom = customIcon != null, isGrayscaleIcon)
|
||||||
when {
|
when {
|
||||||
/** 处理自定义通知图标优化 */
|
/** 处理自定义通知图标优化 */
|
||||||
customIcon != null -> Pair(customIcon, true)
|
customIcon != null -> Pair(customIcon, true)
|
||||||
/** 若不是灰度图标自动处理为圆角 */
|
/** 若不是灰度图标自动处理为圆角 */
|
||||||
isNotGrayscaleIcon -> Pair(notifyInstance.compatPushingIcon(context, iconDrawable).rounded(context), true)
|
isGrayscaleIcon.not() -> Pair(notifyInstance.compatPushingIcon(context, iconDrawable).rounded(context), true)
|
||||||
/** 否则返回原始小图标 */
|
/** 否则返回原始小图标 */
|
||||||
else -> Pair(notifyInstance.notification.smallIcon.loadDrawable(context), false)
|
else -> Pair(notifyInstance.notification.smallIcon.loadDrawable(context), false)
|
||||||
}
|
}
|
||||||
@@ -469,11 +474,13 @@ object SystemUIHooker : YukiBaseHooker() {
|
|||||||
val isGrayscaleIcon = notifyInstance.isXmsf.not() && isGrayscaleIcon(context, iconDrawable, notifyInstance)
|
val isGrayscaleIcon = notifyInstance.isXmsf.not() && isGrayscaleIcon(context, iconDrawable, notifyInstance)
|
||||||
|
|
||||||
/** 自定义默认小图标 */
|
/** 自定义默认小图标 */
|
||||||
var customIcon: Drawable?
|
var customIcon: Drawable? = null
|
||||||
|
|
||||||
/** 自定义默认小图标颜色 */
|
/** 自定义默认小图标颜色 */
|
||||||
var customIconColor: Int
|
var customIconColor = 0
|
||||||
compatCustomIcon(context, isGrayscaleIcon, notifyInstance.nfPkgName).also {
|
compatCustomIcon(context, isGrayscaleIcon, notifyInstance.nfPkgName).also {
|
||||||
|
/** 不处理占位符图标 */
|
||||||
|
if (it.third) return@also
|
||||||
customIcon = it.first
|
customIcon = it.first
|
||||||
customIconColor = if (isUseMaterial3Style || isExpanded)
|
customIconColor = if (isUseMaterial3Style || isExpanded)
|
||||||
(it.second.takeIf { e -> e != 0 } ?: (if (isUseMaterial3Style) context.systemAccentColor else 0)) else 0
|
(it.second.takeIf { e -> e != 0 } ?: (if (isUseMaterial3Style) context.systemAccentColor else 0)) else 0
|
||||||
|
@@ -227,6 +227,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
|||||||
binding.notifyIconFixSwitch.bind(ConfigData.ENABLE_NOTIFY_ICON_FIX) {
|
binding.notifyIconFixSwitch.bind(ConfigData.ENABLE_NOTIFY_ICON_FIX) {
|
||||||
onInitialize {
|
onInitialize {
|
||||||
binding.notifyIconFixButton.isVisible = it
|
binding.notifyIconFixButton.isVisible = it
|
||||||
|
binding.notifyIconFixPlaceholderItem.isVisible = it
|
||||||
binding.notifyIconFixNotifyItem.isVisible = it
|
binding.notifyIconFixNotifyItem.isVisible = it
|
||||||
binding.notifyIconAutoSyncItem.isVisible = it
|
binding.notifyIconAutoSyncItem.isVisible = it
|
||||||
}
|
}
|
||||||
@@ -235,6 +236,26 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
|||||||
SystemUITool.refreshSystemUI(context = this@MainActivity)
|
SystemUITool.refreshSystemUI(context = this@MainActivity)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
binding.notifyIconFixPlaceholderSwitch.bind(ConfigData.ENABLE_NOTIFY_ICON_FIX_PLACEHOLDER) {
|
||||||
|
isAutoApplyChanges = false
|
||||||
|
onChanged {
|
||||||
|
/** 应用更改并刷新系统界面 */
|
||||||
|
fun applyChangesAndRefresh() {
|
||||||
|
applyChanges()
|
||||||
|
SystemUITool.refreshSystemUI(context = this@MainActivity)
|
||||||
|
}
|
||||||
|
if (it) showDialog {
|
||||||
|
title = "注意"
|
||||||
|
msg = "开启这个功能后,当发现未适配的彩色通知图标时," +
|
||||||
|
"状态栏中显示的通知图标将会使用预置的占位符图标进行修补," +
|
||||||
|
"通知栏中显示的通知图标保持原始图标不变。\n\n" +
|
||||||
|
"此功能的作用仅为临时修复破坏规范的通知图标,仍然继续开启吗?"
|
||||||
|
confirmButton { applyChangesAndRefresh() }
|
||||||
|
cancelButton { cancelChanges() }
|
||||||
|
noCancelable()
|
||||||
|
} else applyChangesAndRefresh()
|
||||||
|
}
|
||||||
|
}
|
||||||
binding.notifyIconFixNotifySwitch.bind(ConfigData.ENABLE_NOTIFY_ICON_FIX_NOTIFY) {
|
binding.notifyIconFixNotifySwitch.bind(ConfigData.ENABLE_NOTIFY_ICON_FIX_NOTIFY) {
|
||||||
onChanged { SystemUITool.refreshSystemUI(context = this@MainActivity, isRefreshCacheOnly = true) }
|
onChanged { SystemUITool.refreshSystemUI(context = this@MainActivity, isRefreshCacheOnly = true) }
|
||||||
}
|
}
|
||||||
|
@@ -979,6 +979,34 @@
|
|||||||
android:textColor="@color/colorTextDark"
|
android:textColor="@color/colorTextDark"
|
||||||
android:textSize="12sp" />
|
android:textSize="12sp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/notify_icon_fix_placeholder_item"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="15dp"
|
||||||
|
android:layout_marginRight="15dp"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<com.fankes.miui.notify.ui.widget.MaterialSwitch
|
||||||
|
android:id="@+id/notify_icon_fix_placeholder_switch"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="30dp"
|
||||||
|
android:layout_marginBottom="5dp"
|
||||||
|
android:text="使用占位符修补未适配的通知图标"
|
||||||
|
android:textColor="@color/colorTextGray"
|
||||||
|
android:textSize="15sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
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
|
<LinearLayout
|
||||||
android:id="@+id/notify_icon_fix_notify_item"
|
android:id="@+id/notify_icon_fix_notify_item"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
Reference in New Issue
Block a user