mirror of
https://github.com/fankes/ColorOSNotifyIcon.git
synced 2025-09-09 20:14:11 +08:00
Compare commits
14 Commits
Author | SHA1 | Date | |
---|---|---|---|
c8b13ce602 | |||
9e7b92fdaa | |||
dd293a7e33 | |||
ddda41ab13 | |||
|
0c5c2daf74 | ||
2b2da7bdb5 | |||
3c07fb40d5 | |||
21ff3938e3 | |||
5fe1598546 | |||
018c137d85 | |||
f066382d4c | |||
c4f79452d0 | |||
4bdb454d3c | |||
e77f9bf494 |
2
.github/ISSUE_TEMPLATE/----bug---.md
vendored
2
.github/ISSUE_TEMPLATE/----bug---.md
vendored
@@ -13,7 +13,7 @@ assignees: fankes
|
|||||||
|
|
||||||
**系统类型(请保留一个)**
|
**系统类型(请保留一个)**
|
||||||
|
|
||||||
* ColorOS/RealmeOS/OxygenOS
|
* ColorOS/RealmeUI/OxygenOS
|
||||||
|
|
||||||
**Android 版本(必填)**
|
**Android 版本(必填)**
|
||||||
|
|
||||||
|
@@ -2,17 +2,17 @@
|
|||||||
|
|
||||||

|

|
||||||

|

|
||||||

|

|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
<img src="https://github.com/fankes/ColorOSNotifyIcon/blob/master/app/src/main/ic_launcher-playstore.png" width = "100" height = "100"/>
|
<img src="https://github.com/fankes/ColorOSNotifyIcon/blob/master/app/src/main/ic_launcher-playstore.png" width = "100" height = "100"/>
|
||||||
<br/>
|
<br/>
|
||||||
Optimize notification icons for ColorOS and adapt to native notification icon specifications.<br/>
|
Optimize notification icons for ColorOS and adapt to native notification icon specifications.<br/>
|
||||||
为 ColorOS 优化通知图标以及适配原生通知图标规范,理论支持 OxygenOS 和 RealmeOS。
|
为 ColorOS 优化通知图标以及适配原生通知图标规范,理论支持 OxygenOS 和 RealmeUI。
|
||||||
|
|
||||||
# 开始使用
|
# 开始使用
|
||||||
|
|
||||||
点击下载最新版本
|
点击下载最新版本
|
||||||
<a href='https://github.com/fankes/ColorOSNotifyIcon/releases'></a>
|
<a href='https://github.com/fankes/ColorOSNotifyIcon/releases'></a>
|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
⚠️ 适配说明<br/>
|
⚠️ 适配说明<br/>
|
||||||
|
|
||||||
|
@@ -65,8 +65,8 @@ dependencies {
|
|||||||
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
|
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
|
||||||
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
|
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
|
||||||
compileOnly 'de.robv.android.xposed:api:82'
|
compileOnly 'de.robv.android.xposed:api:82'
|
||||||
implementation 'com.highcapable.yukihookapi:api:1.0.2'
|
implementation 'com.highcapable.yukihookapi:api:1.0.3'
|
||||||
ksp 'com.highcapable.yukihookapi:ksp-xposed:1.0.2'
|
ksp 'com.highcapable.yukihookapi:ksp-xposed:1.0.3'
|
||||||
implementation 'com.geyifeng.immersionbar:immersionbar:3.2.0'
|
implementation 'com.geyifeng.immersionbar:immersionbar:3.2.0'
|
||||||
implementation 'com.geyifeng.immersionbar:immersionbar-ktx:3.2.0'
|
implementation 'com.geyifeng.immersionbar:immersionbar-ktx:3.2.0'
|
||||||
implementation 'com.squareup.okhttp3:okhttp:4.9.3'
|
implementation 'com.squareup.okhttp3:okhttp:4.9.3'
|
||||||
|
@@ -18,7 +18,7 @@
|
|||||||
android:value="true" />
|
android:value="true" />
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="xposeddescription"
|
android:name="xposeddescription"
|
||||||
android:value="为 ColorOS 优化通知图标以及适配原生通知图标规范,理论支持 OxygenOS 和 RealmeOS\n开发者:酷安 @星夜不荟" />
|
android:value="为 ColorOS 优化通知图标以及适配原生通知图标规范,理论支持 OxygenOS 和 RealmeUI\n开发者:酷安 @星夜不荟" />
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="xposedminversion"
|
android:name="xposedminversion"
|
||||||
android:value="93" />
|
android:value="93" />
|
||||||
|
@@ -84,16 +84,18 @@ class HookEntry : YukiHookXposedInitProxy {
|
|||||||
/** 原生存在的类 */
|
/** 原生存在的类 */
|
||||||
private const val IconManagerClass = "$SYSTEMUI_PACKAGE_NAME.statusbar.notification.icon.IconManager"
|
private const val IconManagerClass = "$SYSTEMUI_PACKAGE_NAME.statusbar.notification.icon.IconManager"
|
||||||
|
|
||||||
/** ColorOS 存在的类 */
|
/** ColorOS 存在的类 - 旧版本不存在 */
|
||||||
private const val OplusContrastColorUtilClass = "com.oplusos.util.OplusContrastColorUtil"
|
private const val OplusContrastColorUtilClass = "com.oplusos.util.OplusContrastColorUtil"
|
||||||
|
|
||||||
/** ColorOS 存在的类 */
|
|
||||||
private const val OplusPowerNotificationWarningsClass =
|
|
||||||
"com.oplusos.systemui.notification.power.OplusPowerNotificationWarnings"
|
|
||||||
|
|
||||||
/** ColorOS 存在的类 */
|
/** ColorOS 存在的类 */
|
||||||
private const val SystemPromptControllerClass = "com.oplusos.systemui.statusbar.policy.SystemPromptController"
|
private const val SystemPromptControllerClass = "com.oplusos.systemui.statusbar.policy.SystemPromptController"
|
||||||
|
|
||||||
|
/** 根据多个版本存在不同的包名相同的类 */
|
||||||
|
private val OplusPowerNotificationWarningsClass = VariousClass(
|
||||||
|
"com.oplusos.systemui.notification.power.OplusPowerNotificationWarnings",
|
||||||
|
"com.coloros.systemui.notification.power.ColorosPowerNotificationWarnings"
|
||||||
|
)
|
||||||
|
|
||||||
/** 根据多个版本存在不同的包名相同的类 */
|
/** 根据多个版本存在不同的包名相同的类 */
|
||||||
private val ExpandableNotificationRowClass = VariousClass(
|
private val ExpandableNotificationRowClass = VariousClass(
|
||||||
"$SYSTEMUI_PACKAGE_NAME.statusbar.notification.row.ExpandableNotificationRow",
|
"$SYSTEMUI_PACKAGE_NAME.statusbar.notification.row.ExpandableNotificationRow",
|
||||||
@@ -174,8 +176,12 @@ class HookEntry : YukiHookXposedInitProxy {
|
|||||||
*/
|
*/
|
||||||
private fun PackageParam.compatCustomIcon(isGrayscaleIcon: Boolean, packageName: String): Pair<Bitmap?, Int> {
|
private fun PackageParam.compatCustomIcon(isGrayscaleIcon: Boolean, packageName: String): Pair<Bitmap?, Int> {
|
||||||
var customPair: Pair<Bitmap?, Int>? = null
|
var customPair: Pair<Bitmap?, Int>? = null
|
||||||
if (prefs.getBoolean(ENABLE_NOTIFY_ICON_FIX, default = true))
|
when {
|
||||||
run {
|
/** 替换系统图标为 Android 默认 */
|
||||||
|
(packageName == "android" || packageName == "com.android.systemui") && !isGrayscaleIcon -> customPair =
|
||||||
|
Pair(if (isUpperOfAndroidS) IconPackParams.android12IconBitmap else IconPackParams.android11IconBitmap, 0)
|
||||||
|
/** 替换自定义通知图标 */
|
||||||
|
prefs.getBoolean(ENABLE_NOTIFY_ICON_FIX, default = true) -> run {
|
||||||
if (iconDatas.isNotEmpty())
|
if (iconDatas.isNotEmpty())
|
||||||
iconDatas.forEach {
|
iconDatas.forEach {
|
||||||
if (packageName == it.packageName && isAppNotifyHookOf(it)) {
|
if (packageName == it.packageName && isAppNotifyHookOf(it)) {
|
||||||
@@ -185,6 +191,7 @@ class HookEntry : YukiHookXposedInitProxy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return customPair ?: Pair(null, 0)
|
return customPair ?: Pair(null, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -228,23 +235,28 @@ class HookEntry : YukiHookXposedInitProxy {
|
|||||||
val oldStyle = (if (context.isSystemInDarkMode) 0xffdcdcdc else 0xff707173).toInt()
|
val oldStyle = (if (context.isSystemInDarkMode) 0xffdcdcdc else 0xff707173).toInt()
|
||||||
|
|
||||||
/** 新版风格 */
|
/** 新版风格 */
|
||||||
val newStyle = (if (context.isSystemInDarkMode) 0xff2d2d2d else Color.WHITE).toInt()
|
val newStyle = (if (context.isSystemInDarkMode) 0xffdcdcdc else Color.WHITE).toInt()
|
||||||
|
|
||||||
/** 图标着色 */
|
/** 优化风格 */
|
||||||
val applyColor = customPair.second.takeIf { it != 0 } ?: iconColor.takeIf { it != 0 } ?: oldStyle
|
val fixStyle = (if (context.isSystemInDarkMode) 0xff707173 else oldStyle).toInt()
|
||||||
|
|
||||||
|
/** 旧版图标着色 */
|
||||||
|
val oldApplyColor = customPair.second.takeIf { it != 0 } ?: iconColor.takeIf { it != 0 } ?: oldStyle
|
||||||
|
|
||||||
|
/** 新版图标着色 */
|
||||||
|
val newApplyColor = customPair.second.takeIf { it != 0 } ?: iconColor.takeIf { it != 0 } ?: fixStyle
|
||||||
/** 判断风格并开始 Hook */
|
/** 判断风格并开始 Hook */
|
||||||
if (isA12Style) {
|
if (isA12Style) {
|
||||||
background = DrawableBuilder().rounded().solidColor(applyColor).build()
|
background = DrawableBuilder().rounded().solidColor(newApplyColor).build()
|
||||||
setColorFilter(if (isA12Style) newStyle else oldStyle)
|
setColorFilter(newStyle)
|
||||||
setPadding(2.dp(context), 2.dp(context), 2.dp(context), 2.dp(context))
|
setPadding(2.dp(context), 2.dp(context), 2.dp(context), 2.dp(context))
|
||||||
} else {
|
} else {
|
||||||
background = null
|
background = null
|
||||||
setColorFilter(applyColor)
|
setColorFilter(oldApplyColor)
|
||||||
setPadding(0, 0, 0, 0)
|
setPadding(0, 0, 0, 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> iconView.apply {
|
else -> iconView.apply {
|
||||||
setImageDrawable(drawable)
|
|
||||||
setPadding(0, 0, 0, 0)
|
setPadding(0, 0, 0, 0)
|
||||||
background = null
|
background = null
|
||||||
colorFilter = null
|
colorFilter = null
|
||||||
@@ -293,7 +305,7 @@ class HookEntry : YukiHookXposedInitProxy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/** 修复并替换 ColorOS 原生灰度图标色彩判断 */
|
/** 修复并替换新版本 ColorOS 原生灰度图标色彩判断*/
|
||||||
NotificationUtilsClass.hook {
|
NotificationUtilsClass.hook {
|
||||||
injectMember {
|
injectMember {
|
||||||
method {
|
method {
|
||||||
@@ -301,7 +313,7 @@ class HookEntry : YukiHookXposedInitProxy {
|
|||||||
param(ImageViewClass, OplusContrastColorUtilClass.clazz)
|
param(ImageViewClass, OplusContrastColorUtilClass.clazz)
|
||||||
}
|
}
|
||||||
replaceAny { (firstArgs as? ImageView?)?.let { isGrayscaleIcon(it.context, it.drawable) } }
|
replaceAny { (firstArgs as? ImageView?)?.let { isGrayscaleIcon(it.context, it.drawable) } }
|
||||||
}
|
}.ignoredHookingFailure()
|
||||||
}
|
}
|
||||||
/** 替换状态栏图标 */
|
/** 替换状态栏图标 */
|
||||||
IconManagerClass.hook {
|
IconManagerClass.hook {
|
||||||
|
@@ -23,6 +23,7 @@
|
|||||||
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.hook.HookConst.NOTIFY_ICON_DATAS
|
import com.fankes.coloros.notify.hook.HookConst.NOTIFY_ICON_DATAS
|
||||||
@@ -43,6 +44,59 @@ 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 已存储的 JSON 数据
|
* 已存储的 JSON 数据
|
||||||
* @return [String]
|
* @return [String]
|
||||||
|
@@ -25,8 +25,6 @@
|
|||||||
package com.fankes.coloros.notify.ui
|
package com.fankes.coloros.notify.ui
|
||||||
|
|
||||||
import android.app.ProgressDialog
|
import android.app.ProgressDialog
|
||||||
import android.content.Intent
|
|
||||||
import android.net.Uri
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
@@ -51,6 +49,9 @@ import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus
|
|||||||
|
|
||||||
class ConfigureActivity : BaseActivity() {
|
class ConfigureActivity : BaseActivity() {
|
||||||
|
|
||||||
|
/** 访问请求链接 */
|
||||||
|
private var rawGithubUrl = "https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/main"
|
||||||
|
|
||||||
/** 当前筛选条件 */
|
/** 当前筛选条件 */
|
||||||
private var filterText = ""
|
private var filterText = ""
|
||||||
|
|
||||||
@@ -192,16 +193,7 @@ class ConfigureActivity : BaseActivity() {
|
|||||||
}
|
}
|
||||||
/** 设置点击事件 */
|
/** 设置点击事件 */
|
||||||
findViewById<View>(R.id.config_cbr_button).setOnClickListener {
|
findViewById<View>(R.id.config_cbr_button).setOnClickListener {
|
||||||
runCatching {
|
openBrowser(url = "https://github.com/fankes/AndroidNotifyIconAdapt/blob/main/CONTRIBUTING.md")
|
||||||
startActivity(Intent().apply {
|
|
||||||
action = "android.intent.action.VIEW"
|
|
||||||
data = Uri.parse("https://github.com/fankes/AndroidNotifyIconAdapt/blob/main/CONTRIBUTING.md")
|
|
||||||
/** 防止顶栈一样重叠在自己的 APP 中 */
|
|
||||||
flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
|
||||||
})
|
|
||||||
}.onFailure {
|
|
||||||
toast(msg = "无法启动系统默认浏览器")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/** 装载数据 */
|
/** 装载数据 */
|
||||||
mockLocalData()
|
mockLocalData()
|
||||||
@@ -227,7 +219,7 @@ class ConfigureActivity : BaseActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** 开始更新数据 */
|
/** 开始更新数据 */
|
||||||
private fun onRefreshing() {
|
private fun onRefreshing() = ClientRequestTool.checkingInternetConnect(context = this) {
|
||||||
ProgressDialog(this).apply {
|
ProgressDialog(this).apply {
|
||||||
setDefaultStyle(context = this@ConfigureActivity)
|
setDefaultStyle(context = this@ConfigureActivity)
|
||||||
setCancelable(false)
|
setCancelable(false)
|
||||||
@@ -237,12 +229,12 @@ class ConfigureActivity : BaseActivity() {
|
|||||||
}.also {
|
}.also {
|
||||||
ClientRequestTool.wait(
|
ClientRequestTool.wait(
|
||||||
context = this,
|
context = this,
|
||||||
url = "https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/main/OS/ColorOS/NotifyIconsSupportConfig.json"
|
url = "$rawGithubUrl/OS/ColorOS/NotifyIconsSupportConfig.json"
|
||||||
) { isDone1, ctOS ->
|
) { isDone1, ctOS ->
|
||||||
it.setMessage("正在同步 APP 数据")
|
it.setMessage("正在同步 APP 数据")
|
||||||
ClientRequestTool.wait(
|
ClientRequestTool.wait(
|
||||||
context = this,
|
context = this,
|
||||||
url = "https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/main/APP/NotifyIconsSupportConfig.json"
|
url = "$rawGithubUrl/APP/NotifyIconsSupportConfig.json"
|
||||||
) { isDone2, ctAPP ->
|
) { isDone2, ctAPP ->
|
||||||
it.cancel()
|
it.cancel()
|
||||||
IconPackParams(context = this).also { params ->
|
IconPackParams(context = this).also { params ->
|
||||||
@@ -253,12 +245,14 @@ class ConfigureActivity : BaseActivity() {
|
|||||||
mockLocalData()
|
mockLocalData()
|
||||||
SystemUITool.showNeedUpdateApplySnake(context = this)
|
SystemUITool.showNeedUpdateApplySnake(context = this)
|
||||||
} else snake(msg = "列表数据已是最新")
|
} else snake(msg = "列表数据已是最新")
|
||||||
} else
|
} else showDialog {
|
||||||
showDialog {
|
title = "连接失败"
|
||||||
title = "连接失败"
|
msg = "连接失败,错误如下:\n${if (!isDone1) ctOS else ctAPP}"
|
||||||
msg = "连接失败,错误如下:\n${if (!isDone1) ctOS else ctAPP}"
|
confirmButton(text = "解决方案") {
|
||||||
confirmButton(text = "我知道了")
|
openBrowser(url = "https://www.baidu.com/s?wd=github%2Braw%2B%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE")
|
||||||
}
|
}
|
||||||
|
cancelButton()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -27,7 +27,6 @@ package com.fankes.coloros.notify.ui
|
|||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.net.Uri
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
@@ -147,10 +146,12 @@ class MainActivity : BaseActivity() {
|
|||||||
devNotifyConfigSwitch.setOnCheckedChangeListener { btn, b ->
|
devNotifyConfigSwitch.setOnCheckedChangeListener { btn, b ->
|
||||||
if (!btn.isPressed) return@setOnCheckedChangeListener
|
if (!btn.isPressed) return@setOnCheckedChangeListener
|
||||||
modulePrefs.putBoolean(REMOVE_DEV_NOTIFY, b)
|
modulePrefs.putBoolean(REMOVE_DEV_NOTIFY, b)
|
||||||
|
SystemUITool.showNeedRestartSnake(context = this)
|
||||||
}
|
}
|
||||||
crcpNotifyConfigSwitch.setOnCheckedChangeListener { btn, b ->
|
crcpNotifyConfigSwitch.setOnCheckedChangeListener { btn, b ->
|
||||||
if (!btn.isPressed) return@setOnCheckedChangeListener
|
if (!btn.isPressed) return@setOnCheckedChangeListener
|
||||||
modulePrefs.putBoolean(REMOVE_CHANGECP_NOTIFY, b)
|
modulePrefs.putBoolean(REMOVE_CHANGECP_NOTIFY, b)
|
||||||
|
SystemUITool.showNeedRestartSnake(context = this)
|
||||||
}
|
}
|
||||||
a12StyleConfigSwitch.setOnCheckedChangeListener { btn, b ->
|
a12StyleConfigSwitch.setOnCheckedChangeListener { btn, b ->
|
||||||
if (!btn.isPressed) return@setOnCheckedChangeListener
|
if (!btn.isPressed) return@setOnCheckedChangeListener
|
||||||
@@ -163,30 +164,11 @@ class MainActivity : BaseActivity() {
|
|||||||
findViewById<View>(R.id.title_restart_icon).setOnClickListener { SystemUITool.restartSystemUI(context = this) }
|
findViewById<View>(R.id.title_restart_icon).setOnClickListener { SystemUITool.restartSystemUI(context = this) }
|
||||||
/** 恰饭! */
|
/** 恰饭! */
|
||||||
findViewById<View>(R.id.link_with_follow_me).setOnClickListener {
|
findViewById<View>(R.id.link_with_follow_me).setOnClickListener {
|
||||||
runCatching {
|
openBrowser(url = "https://www.coolapk.com/u/876977", packageName = "com.coolapk.market")
|
||||||
startActivity(Intent().apply {
|
|
||||||
setPackage("com.coolapk.market")
|
|
||||||
action = "android.intent.action.VIEW"
|
|
||||||
data = Uri.parse("https://www.coolapk.com/u/876977")
|
|
||||||
/** 防止顶栈一样重叠在自己的 APP 中 */
|
|
||||||
flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
|
||||||
})
|
|
||||||
}.onFailure {
|
|
||||||
toast(msg = "你可能没有安装酷安")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/** 项目地址点击事件 */
|
/** 项目地址点击事件 */
|
||||||
findViewById<View>(R.id.link_with_project_address).setOnClickListener {
|
findViewById<View>(R.id.link_with_project_address).setOnClickListener {
|
||||||
runCatching {
|
openBrowser(url = "https://github.com/fankes/ColorOSNotifyIcon")
|
||||||
startActivity(Intent().apply {
|
|
||||||
action = "android.intent.action.VIEW"
|
|
||||||
data = Uri.parse("https://github.com/fankes/ColorOSNotifyIcon")
|
|
||||||
/** 防止顶栈一样重叠在自己的 APP 中 */
|
|
||||||
flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
|
||||||
})
|
|
||||||
}.onFailure {
|
|
||||||
toast(msg = "无法启动系统默认浏览器")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -20,11 +20,15 @@
|
|||||||
*
|
*
|
||||||
* This file is Created by fankes on 2022/2/25.
|
* This file is Created by fankes on 2022/2/25.
|
||||||
*/
|
*/
|
||||||
@file:Suppress("TrustAllX509TrustManager", "CustomX509TrustManager")
|
@file:Suppress("TrustAllX509TrustManager", "CustomX509TrustManager", "DEPRECATION")
|
||||||
|
|
||||||
package com.fankes.coloros.notify.utils
|
package com.fankes.coloros.notify.utils
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
|
import android.app.ProgressDialog
|
||||||
|
import android.content.Intent
|
||||||
|
import android.net.Uri
|
||||||
|
import android.provider.Settings
|
||||||
import com.highcapable.yukihookapi.hook.log.loggerD
|
import com.highcapable.yukihookapi.hook.log.loggerD
|
||||||
import okhttp3.*
|
import okhttp3.*
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
@@ -37,6 +41,38 @@ import javax.net.ssl.*
|
|||||||
*/
|
*/
|
||||||
object ClientRequestTool {
|
object ClientRequestTool {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查网络连接情况
|
||||||
|
* @param context 实例
|
||||||
|
* @param it 已连接回调
|
||||||
|
*/
|
||||||
|
fun checkingInternetConnect(context: Activity, it: () -> Unit) =
|
||||||
|
ProgressDialog(context).apply {
|
||||||
|
setDefaultStyle(context)
|
||||||
|
setCancelable(false)
|
||||||
|
setTitle("准备中")
|
||||||
|
setMessage("正在检查网络连接情况")
|
||||||
|
}.apply {
|
||||||
|
wait(context, url = "https://www.baidu.com") { isDone, _ ->
|
||||||
|
cancel()
|
||||||
|
if (isDone) it() else
|
||||||
|
context.showDialog {
|
||||||
|
title = "网络不可用"
|
||||||
|
msg = "无法连接到互联网,请检查你当前的设备是否可以上网,且没有在手机管家中禁用本模块的联网权限。"
|
||||||
|
confirmButton(text = "检查设置") {
|
||||||
|
runCatching {
|
||||||
|
context.startActivity(Intent().apply {
|
||||||
|
flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
||||||
|
action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
|
||||||
|
data = Uri.fromParts("package", context.packageName, null)
|
||||||
|
})
|
||||||
|
}.onFailure { context.snake(msg = "启动应用信息页面失败") }
|
||||||
|
}
|
||||||
|
cancelButton()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.show()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送 GET 请求内容并等待
|
* 发送 GET 请求内容并等待
|
||||||
* @param context 实例
|
* @param context 实例
|
||||||
|
@@ -27,6 +27,7 @@ package com.fankes.coloros.notify.utils
|
|||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.app.AlertDialog
|
import android.app.AlertDialog
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
import android.content.pm.PackageInfo
|
import android.content.pm.PackageInfo
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
@@ -34,6 +35,7 @@ import android.graphics.Bitmap
|
|||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.graphics.drawable.GradientDrawable
|
import android.graphics.drawable.GradientDrawable
|
||||||
|
import android.net.Uri
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.util.Base64
|
import android.util.Base64
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
@@ -102,7 +104,7 @@ inline val isNotColorOS get() = !isColorOS
|
|||||||
val colorOSVersion
|
val colorOSVersion
|
||||||
get() = safeOf(default = "无法获取") {
|
get() = safeOf(default = "无法获取") {
|
||||||
findPropString(key = "ro.system.build.fingerprint", default = "无法获取")
|
findPropString(key = "ro.system.build.fingerprint", default = "无法获取")
|
||||||
.split("ossi:")[1]
|
.split("ssi:")[1]
|
||||||
.split("/")[0].trim()
|
.split("/")[0].trim()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -233,6 +235,26 @@ fun Context.snake(msg: String, actionText: String = "", it: () -> Unit = {}) =
|
|||||||
setAction(actionText) { it() }
|
setAction(actionText) { it() }
|
||||||
}.show()
|
}.show()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 启动系统浏览器
|
||||||
|
* @param url 网址
|
||||||
|
* @param packageName 指定包名 - 可不填
|
||||||
|
*/
|
||||||
|
fun Context.openBrowser(url: String, packageName: String = "") =
|
||||||
|
runCatching {
|
||||||
|
startActivity(Intent().apply {
|
||||||
|
if (packageName.isNotBlank()) setPackage(packageName)
|
||||||
|
action = Intent.ACTION_VIEW
|
||||||
|
data = Uri.parse(url)
|
||||||
|
/** 防止顶栈一样重叠在自己的 APP 中 */
|
||||||
|
flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
||||||
|
})
|
||||||
|
}.onFailure {
|
||||||
|
if (packageName.isNotBlank())
|
||||||
|
snake(msg = "启动 $packageName 失败")
|
||||||
|
else snake(msg = "启动系统浏览器失败")
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 忽略异常返回值
|
* 忽略异常返回值
|
||||||
* @param it 回调 - 如果异常为空
|
* @param it 回调 - 如果异常为空
|
||||||
|
@@ -5,8 +5,8 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ext {
|
ext {
|
||||||
appVersionName = "1.0"
|
appVersionName = "1.2"
|
||||||
appVersionCode = 1
|
appVersionCode = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
task clean(type: Delete) {
|
task clean(type: Delete) {
|
||||||
|
Reference in New Issue
Block a user