diff --git a/README.md b/README.md
index 083b35c..439de9c 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@


-
+
@@ -12,7 +12,7 @@ Optimize notification icons for ColorOS and adapt to native notification icon sp
# 开始使用
点击下载最新版本
-
+
⚠️ 适配说明
diff --git a/app/src/main/java/com/fankes/coloros/notify/bean/IconDataBean.kt b/app/src/main/java/com/fankes/coloros/notify/bean/IconDataBean.kt
index 819a8f8..a519702 100644
--- a/app/src/main/java/com/fankes/coloros/notify/bean/IconDataBean.kt
+++ b/app/src/main/java/com/fankes/coloros/notify/bean/IconDataBean.kt
@@ -23,7 +23,7 @@
package com.fankes.coloros.notify.bean
import android.graphics.Bitmap
-import com.fankes.coloros.notify.utils.base64
+import com.fankes.coloros.notify.utils.factory.base64
import java.io.Serializable
/**
diff --git a/app/src/main/java/com/fankes/coloros/notify/hook/HookEntry.kt b/app/src/main/java/com/fankes/coloros/notify/hook/HookEntry.kt
index 23f1a45..d9d0f78 100644
--- a/app/src/main/java/com/fankes/coloros/notify/hook/HookEntry.kt
+++ b/app/src/main/java/com/fankes/coloros/notify/hook/HookEntry.kt
@@ -42,8 +42,8 @@ import com.fankes.coloros.notify.hook.HookConst.SYSTEMUI_PACKAGE_NAME
import com.fankes.coloros.notify.hook.factory.isAppNotifyHookAllOf
import com.fankes.coloros.notify.hook.factory.isAppNotifyHookOf
import com.fankes.coloros.notify.param.IconPackParams
-import com.fankes.coloros.notify.utils.*
import com.fankes.coloros.notify.utils.drawable.drawabletoolbox.DrawableBuilder
+import com.fankes.coloros.notify.utils.factory.*
import com.highcapable.yukihookapi.annotation.xposed.InjectYukiHookWithXposed
import com.highcapable.yukihookapi.hook.bean.VariousClass
import com.highcapable.yukihookapi.hook.factory.configs
diff --git a/app/src/main/java/com/fankes/coloros/notify/param/IconPackParams.kt b/app/src/main/java/com/fankes/coloros/notify/param/IconPackParams.kt
index c3ab619..7dae945 100644
--- a/app/src/main/java/com/fankes/coloros/notify/param/IconPackParams.kt
+++ b/app/src/main/java/com/fankes/coloros/notify/param/IconPackParams.kt
@@ -29,7 +29,7 @@ import android.graphics.Bitmap
import android.graphics.Color
import com.fankes.coloros.notify.bean.IconDataBean
import com.fankes.coloros.notify.hook.HookConst.NOTIFY_ICON_DATAS
-import com.fankes.coloros.notify.utils.*
+import com.fankes.coloros.notify.utils.factory.*
import com.highcapable.yukihookapi.hook.factory.modulePrefs
import com.highcapable.yukihookapi.hook.param.PackageParam
import org.json.JSONArray
diff --git a/app/src/main/java/com/fankes/coloros/notify/ui/ConfigureActivity.kt b/app/src/main/java/com/fankes/coloros/notify/ui/ConfigureActivity.kt
index 9fb3279..b00739a 100644
--- a/app/src/main/java/com/fankes/coloros/notify/ui/ConfigureActivity.kt
+++ b/app/src/main/java/com/fankes/coloros/notify/ui/ConfigureActivity.kt
@@ -48,7 +48,9 @@ import com.fankes.coloros.notify.hook.factory.putAppNotifyHookAllOf
import com.fankes.coloros.notify.hook.factory.putAppNotifyHookOf
import com.fankes.coloros.notify.param.IconPackParams
import com.fankes.coloros.notify.ui.base.BaseActivity
-import com.fankes.coloros.notify.utils.*
+import com.fankes.coloros.notify.utils.factory.*
+import com.fankes.coloros.notify.utils.tool.ClientRequestTool
+import com.fankes.coloros.notify.utils.tool.SystemUITool
import com.fankes.coloros.notify.view.MaterialSwitch
import com.google.android.material.radiobutton.MaterialRadioButton
import com.google.android.material.textfield.TextInputEditText
diff --git a/app/src/main/java/com/fankes/coloros/notify/ui/MainActivity.kt b/app/src/main/java/com/fankes/coloros/notify/ui/MainActivity.kt
index 7dfa2f8..e1a7154 100644
--- a/app/src/main/java/com/fankes/coloros/notify/ui/MainActivity.kt
+++ b/app/src/main/java/com/fankes/coloros/notify/ui/MainActivity.kt
@@ -44,7 +44,8 @@ import com.fankes.coloros.notify.hook.HookConst.ENABLE_NOTIFY_ICON_FIX
import com.fankes.coloros.notify.hook.HookConst.REMOVE_CHANGECP_NOTIFY
import com.fankes.coloros.notify.hook.HookConst.REMOVE_DEV_NOTIFY
import com.fankes.coloros.notify.ui.base.BaseActivity
-import com.fankes.coloros.notify.utils.*
+import com.fankes.coloros.notify.utils.factory.*
+import com.fankes.coloros.notify.utils.tool.SystemUITool
import com.highcapable.yukihookapi.hook.factory.modulePrefs
import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus
diff --git a/app/src/main/java/com/fankes/coloros/notify/ui/base/BaseActivity.kt b/app/src/main/java/com/fankes/coloros/notify/ui/base/BaseActivity.kt
index f1a3308..1b889f7 100644
--- a/app/src/main/java/com/fankes/coloros/notify/ui/base/BaseActivity.kt
+++ b/app/src/main/java/com/fankes/coloros/notify/ui/base/BaseActivity.kt
@@ -25,7 +25,7 @@ package com.fankes.coloros.notify.ui.base
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.fankes.coloros.notify.R
-import com.fankes.coloros.notify.utils.isNotSystemInDarkMode
+import com.fankes.coloros.notify.utils.factory.isNotSystemInDarkMode
import com.gyf.immersionbar.ktx.immersionBar
abstract class BaseActivity : AppCompatActivity() {
diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/DialogBuilder.kt b/app/src/main/java/com/fankes/coloros/notify/utils/factory/DialogBuilderFactory.kt
similarity index 98%
rename from app/src/main/java/com/fankes/coloros/notify/utils/DialogBuilder.kt
rename to app/src/main/java/com/fankes/coloros/notify/utils/factory/DialogBuilderFactory.kt
index 1cf1644..a6223a7 100644
--- a/app/src/main/java/com/fankes/coloros/notify/utils/DialogBuilder.kt
+++ b/app/src/main/java/com/fankes/coloros/notify/utils/factory/DialogBuilderFactory.kt
@@ -22,7 +22,7 @@
*/
@file:Suppress("unused", "DEPRECATION")
-package com.fankes.coloros.notify.utils
+package com.fankes.coloros.notify.utils.factory
import android.app.AlertDialog
import android.content.Context
diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/factory/ExceptionFactory.kt b/app/src/main/java/com/fankes/coloros/notify/utils/factory/ExceptionFactory.kt
new file mode 100644
index 0000000..adc099c
--- /dev/null
+++ b/app/src/main/java/com/fankes/coloros/notify/utils/factory/ExceptionFactory.kt
@@ -0,0 +1,72 @@
+/*
+ * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications.
+ * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com)
+ * https://github.com/fankes/ColorOSNotifyIcon
+ *
+ * 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.
+ *
+ *
+ * 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
+ *
+ *
+ * This file is Created by fankes on 2022/3/13.
+ */
+@file:Suppress("unused")
+
+package com.fankes.coloros.notify.utils.factory
+
+/**
+ * 忽略异常返回值
+ * @param result 回调 - 如果异常为空
+ * @return [T] 发生异常时返回设定值否则返回正常值
+ */
+inline fun safeOfNull(result: () -> T): T? = safeOf(default = null, result)
+
+/**
+ * 忽略异常返回值
+ * @param result 回调 - 如果异常为 false
+ * @return [Boolean] 发生异常时返回设定值否则返回正常值
+ */
+inline fun safeOfFalse(result: () -> Boolean) = safeOf(default = false, result)
+
+/**
+ * 忽略异常返回值
+ * @param result 回调 - 如果异常为 true
+ * @return [Boolean] 发生异常时返回设定值否则返回正常值
+ */
+inline fun safeOfTrue(result: () -> Boolean) = safeOf(default = true, result)
+
+/**
+ * 忽略异常返回值
+ * @param result 回调 - 如果异常为 false
+ * @return [String] 发生异常时返回设定值否则返回正常值
+ */
+inline fun safeOfNothing(result: () -> String) = safeOf(default = "", result)
+
+/**
+ * 忽略异常返回值
+ * @param result 回调 - 如果异常为 false
+ * @return [Int] 发生异常时返回设定值否则返回正常值
+ */
+inline fun safeOfNan(result: () -> Int) = safeOf(default = 0, result)
+
+/**
+ * 忽略异常返回值
+ * @param default 异常返回值
+ * @param result 正常回调值
+ * @return [T] 发生异常时返回设定值否则返回正常值
+ */
+inline fun safeOf(default: T, result: () -> T) = try {
+ result()
+} catch (t: Throwable) {
+ default
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/Utils.kt b/app/src/main/java/com/fankes/coloros/notify/utils/factory/FunctionFactory.kt
similarity index 62%
rename from app/src/main/java/com/fankes/coloros/notify/utils/Utils.kt
rename to app/src/main/java/com/fankes/coloros/notify/utils/factory/FunctionFactory.kt
index cbee9f3..59c3445 100644
--- a/app/src/main/java/com/fankes/coloros/notify/utils/Utils.kt
+++ b/app/src/main/java/com/fankes/coloros/notify/utils/factory/FunctionFactory.kt
@@ -22,7 +22,7 @@
*/
@file:Suppress("DEPRECATION", "PrivateApi", "unused", "ObsoleteSdkInt")
-package com.fankes.coloros.notify.utils
+package com.fankes.coloros.notify.utils.factory
import android.app.Activity
import android.app.AlertDialog
@@ -47,7 +47,6 @@ import com.highcapable.yukihookapi.hook.factory.classOf
import com.highcapable.yukihookapi.hook.factory.field
import com.highcapable.yukihookapi.hook.factory.hasClass
import com.highcapable.yukihookapi.hook.factory.method
-import com.highcapable.yukihookapi.hook.log.loggerE
import com.highcapable.yukihookapi.hook.type.java.StringType
import com.topjohnwu.superuser.Shell
import java.io.ByteArrayOutputStream
@@ -110,9 +109,9 @@ val colorOSVersion
(classOf(name = "com.oplus.os.OplusBuild").let {
it.field { name = "VERSIONS" }.ignoredError().of>()
?.get((it.method { name = "getOplusOSVERSION" }.ignoredError().get().invoke() ?: 23) - 1)
- } ?: findPropString(key = "ro.system.build.fingerprint", default = "无法获取")
- .split("ssi:")[1]
- .split("/")[0].trim()) + " ${Build.DISPLAY}"
+ } ?: findPropString(
+ key = "ro.system.build.fingerprint", default = "无法获取"
+ ).split("ssi:")[1].split("/")[0].trim()) + " ${Build.DISPLAY}"
}
/**
@@ -128,8 +127,7 @@ val Context.packageInfo get() = packageManager?.getPackageInfo(packageName, 0) ?
val String.isInstall
get() = safeOfFalse {
appContext.packageManager.getPackageInfo(
- this,
- PackageManager.GET_UNINSTALLED_PACKAGES
+ this, PackageManager.GET_UNINSTALLED_PACKAGES
)
true
}
@@ -198,16 +196,13 @@ val String.bitmap: Bitmap get() = unbase64.bitmap
* 设置对话框默认风格
* @param context 使用的实例
*/
-fun AlertDialog.setDefaultStyle(context: Context) =
- window?.setBackgroundDrawable(
- GradientDrawable(
- GradientDrawable.Orientation.TOP_BOTTOM,
- intArrayOf(Color.WHITE, Color.WHITE)
- ).apply {
- shape = GradientDrawable.RECTANGLE
- gradientType = GradientDrawable.LINEAR_GRADIENT
- cornerRadius = 15.dp(context).toFloat()
- })
+fun AlertDialog.setDefaultStyle(context: Context) = window?.setBackgroundDrawable(GradientDrawable(
+ GradientDrawable.Orientation.TOP_BOTTOM, intArrayOf(Color.WHITE, Color.WHITE)
+).apply {
+ shape = GradientDrawable.RECTANGLE
+ gradientType = GradientDrawable.LINEAR_GRADIENT
+ cornerRadius = 15.dp(context).toFloat()
+})
/**
* 获取系统 Prop 值
@@ -246,32 +241,29 @@ fun toast(msg: String) = Toast.makeText(appContext, msg, Toast.LENGTH_SHORT).sho
* @param it 按钮事件回调
*/
fun Context.snake(msg: String, actionText: String = "", it: () -> Unit = {}) =
- Snackbar.make((this as Activity).findViewById(android.R.id.content), msg, Snackbar.LENGTH_LONG)
- .apply {
- if (actionText.isBlank()) return@apply
- setActionTextColor(Color.WHITE)
- setAction(actionText) { it() }
- }.show()
+ Snackbar.make((this as Activity).findViewById(android.R.id.content), msg, Snackbar.LENGTH_LONG).apply {
+ if (actionText.isBlank()) return@apply
+ setActionTextColor(Color.WHITE)
+ setAction(actionText) { it() }
+ }.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 = "启动系统浏览器失败")
- }
+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 = "启动系统浏览器失败")
+}
/**
* 复制到剪贴板
@@ -284,101 +276,4 @@ fun Context.copyToClipboard(content: String) = runCatching {
if (it != content) snake(msg = "复制失败") else snake(msg = "已复制")
}
}
-}
-
-/**
- * 忽略异常返回值
- * @param it 回调 - 如果异常为空
- * @return [T] 发生异常时返回设定值否则返回正常值
- */
-inline fun safeOfNull(it: () -> T): T? = safeOf(null, it)
-
-/**
- * 忽略异常返回值
- * @param it 回调 - 如果异常为 false
- * @return [Boolean] 发生异常时返回设定值否则返回正常值
- */
-inline fun safeOfFalse(it: () -> Boolean) = safeOf(default = false, it)
-
-/**
- * 忽略异常返回值
- * @param it 回调 - 如果异常为 true
- * @return [Boolean] 发生异常时返回设定值否则返回正常值
- */
-inline fun safeOfTrue(it: () -> Boolean) = safeOf(default = true, it)
-
-/**
- * 忽略异常返回值
- * @param it 回调 - 如果异常为 false
- * @return [String] 发生异常时返回设定值否则返回正常值
- */
-inline fun safeOfNothing(it: () -> String) = safeOf(default = "", it)
-
-/**
- * 忽略异常返回值
- * @param it 回调 - 如果异常为 false
- * @return [Int] 发生异常时返回设定值否则返回正常值
- */
-inline fun safeOfNan(it: () -> Int) = safeOf(default = 0, it)
-
-/**
- * 忽略异常返回值
- * @param default 异常返回值
- * @param it 正常回调值
- * @return [T] 发生异常时返回设定值否则返回正常值
- */
-inline fun safeOf(default: T, it: () -> T): T {
- return try {
- it()
- } catch (t: NullPointerException) {
- default
- } catch (t: UnsatisfiedLinkError) {
- default
- } catch (t: UnsupportedOperationException) {
- default
- } catch (t: ClassNotFoundException) {
- default
- } catch (t: IllegalStateException) {
- default
- } catch (t: NoSuchMethodError) {
- default
- } catch (t: NoSuchFieldError) {
- default
- } catch (t: Error) {
- default
- } catch (t: Exception) {
- default
- } catch (t: Throwable) {
- default
- }
-}
-
-/**
- * 忽略异常运行
- * @param msg 出错输出的消息 - 默认为空
- * @param it 正常回调
- */
-inline fun safeRun(msg: String = "", it: () -> Unit) {
- try {
- it()
- } catch (e: NullPointerException) {
- if (msg.isNotBlank()) loggerE(msg = msg, e = e)
- } catch (e: UnsatisfiedLinkError) {
- if (msg.isNotBlank()) loggerE(msg = msg, e = e)
- } catch (e: UnsupportedOperationException) {
- if (msg.isNotBlank()) loggerE(msg = msg, e = e)
- } catch (e: ClassNotFoundException) {
- if (msg.isNotBlank()) loggerE(msg = msg, e = e)
- } catch (e: IllegalStateException) {
- if (msg.isNotBlank()) loggerE(msg = msg, e = e)
- } catch (e: NoSuchMethodError) {
- if (msg.isNotBlank()) loggerE(msg = msg, e = e)
- } catch (e: NoSuchFieldError) {
- if (msg.isNotBlank()) loggerE(msg = msg, e = e)
- } catch (e: Error) {
- if (msg.isNotBlank()) loggerE(msg = msg, e = e)
- } catch (e: Exception) {
- if (msg.isNotBlank()) loggerE(msg = msg, e = e)
- } catch (e: Throwable) {
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/ClientRequestTool.kt b/app/src/main/java/com/fankes/coloros/notify/utils/tool/ClientRequestTool.kt
similarity index 95%
rename from app/src/main/java/com/fankes/coloros/notify/utils/ClientRequestTool.kt
rename to app/src/main/java/com/fankes/coloros/notify/utils/tool/ClientRequestTool.kt
index 5e3e384..62913ac 100644
--- a/app/src/main/java/com/fankes/coloros/notify/utils/ClientRequestTool.kt
+++ b/app/src/main/java/com/fankes/coloros/notify/utils/tool/ClientRequestTool.kt
@@ -22,13 +22,17 @@
*/
@file:Suppress("TrustAllX509TrustManager", "CustomX509TrustManager", "DEPRECATION")
-package com.fankes.coloros.notify.utils
+package com.fankes.coloros.notify.utils.tool
import android.app.Activity
import android.app.ProgressDialog
import android.content.Intent
import android.net.Uri
import android.provider.Settings
+import com.fankes.coloros.notify.utils.factory.safeOfNull
+import com.fankes.coloros.notify.utils.factory.setDefaultStyle
+import com.fankes.coloros.notify.utils.factory.showDialog
+import com.fankes.coloros.notify.utils.factory.snake
import com.highcapable.yukihookapi.hook.log.loggerD
import okhttp3.*
import java.io.IOException
diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/SystemUITool.kt b/app/src/main/java/com/fankes/coloros/notify/utils/tool/SystemUITool.kt
similarity index 90%
rename from app/src/main/java/com/fankes/coloros/notify/utils/SystemUITool.kt
rename to app/src/main/java/com/fankes/coloros/notify/utils/tool/SystemUITool.kt
index 4c081db..bff367b 100644
--- a/app/src/main/java/com/fankes/coloros/notify/utils/SystemUITool.kt
+++ b/app/src/main/java/com/fankes/coloros/notify/utils/tool/SystemUITool.kt
@@ -20,9 +20,13 @@
*
* This file is Created by fankes on 2022/2/8.
*/
-package com.fankes.coloros.notify.utils
+package com.fankes.coloros.notify.utils.tool
import android.content.Context
+import com.fankes.coloros.notify.utils.factory.execShellSu
+import com.fankes.coloros.notify.utils.factory.showDialog
+import com.fankes.coloros.notify.utils.factory.snake
+import com.fankes.coloros.notify.utils.factory.toast
import com.google.android.material.snackbar.Snackbar
import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus
diff --git a/app/src/main/java/com/fankes/coloros/notify/view/MaterialSwitch.kt b/app/src/main/java/com/fankes/coloros/notify/view/MaterialSwitch.kt
index 86b6423..1b968cc 100644
--- a/app/src/main/java/com/fankes/coloros/notify/view/MaterialSwitch.kt
+++ b/app/src/main/java/com/fankes/coloros/notify/view/MaterialSwitch.kt
@@ -29,7 +29,7 @@ import android.content.res.ColorStateList
import android.graphics.Color
import android.util.AttributeSet
import androidx.appcompat.widget.SwitchCompat
-import com.fankes.coloros.notify.utils.dp
+import com.fankes.coloros.notify.utils.factory.dp
import com.fankes.coloros.notify.utils.drawable.drawabletoolbox.DrawableBuilder
class MaterialSwitch(context: Context, attrs: AttributeSet?) : SwitchCompat(context, attrs) {
diff --git a/build.gradle b/build.gradle
index f11067c..28e4d83 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,8 +5,8 @@ plugins {
}
ext {
- appVersionName = "1.3"
- appVersionCode = 4
+ appVersionName = "1.35"
+ appVersionCode = 5
}
task clean(type: Delete) {