diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 526b4c2..a0de2a1 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -7,13 +7,13 @@ - diff --git a/.idea/misc.xml b/.idea/misc.xml index 40b3180..1d14df7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -13,7 +13,7 @@ - + diff --git a/README.md b/README.md index 083b35c..439de9c 100644 --- a/README.md +++ b/README.md @@ -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.3-green) +![Eclipse Marketplace](https://img.shields.io/badge/version-v1.35-green)


@@ -12,7 +12,7 @@ Optimize notification icons for ColorOS and adapt to native notification icon sp # 开始使用 点击下载最新版本 -![Eclipse Marketplace](https://img.shields.io/badge/download-v1.3-green) +![Eclipse Marketplace](https://img.shields.io/badge/download-v1.35-green)

⚠️ 适配说明
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) {