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 09e3d5a..246015b 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -23,7 +23,7 @@ - + diff --git a/app/src/main/java/com/fankes/miui/notify/application/MNNApplication.kt b/app/src/main/java/com/fankes/miui/notify/application/MNNApplication.kt index c6c0b74..8a08a3d 100644 --- a/app/src/main/java/com/fankes/miui/notify/application/MNNApplication.kt +++ b/app/src/main/java/com/fankes/miui/notify/application/MNNApplication.kt @@ -36,15 +36,10 @@ class MNNApplication : Application() { /** 调用全局静态实例 */ val appContext get() = context ?: error("App is death") - - /** 自身 APP 是否已启动 */ - var isMineStarted = false } override fun onCreate() { super.onCreate() - /** 设置状态 */ - isMineStarted = true /** 设置静态实例 */ context = this /** 跟随系统夜间模式 */ diff --git a/app/src/main/java/com/fankes/miui/notify/bean/IconDataBean.kt b/app/src/main/java/com/fankes/miui/notify/bean/IconDataBean.kt index 8cbf125..7cbcb0a 100644 --- a/app/src/main/java/com/fankes/miui/notify/bean/IconDataBean.kt +++ b/app/src/main/java/com/fankes/miui/notify/bean/IconDataBean.kt @@ -23,7 +23,7 @@ package com.fankes.miui.notify.bean import android.graphics.Bitmap -import com.fankes.miui.notify.utils.base64 +import com.fankes.miui.notify.utils.factory.base64 import java.io.Serializable /** diff --git a/app/src/main/java/com/fankes/miui/notify/hook/HookEntry.kt b/app/src/main/java/com/fankes/miui/notify/hook/HookEntry.kt index 0876cf4..5c4cd83 100644 --- a/app/src/main/java/com/fankes/miui/notify/hook/HookEntry.kt +++ b/app/src/main/java/com/fankes/miui/notify/hook/HookEntry.kt @@ -45,8 +45,9 @@ import com.fankes.miui.notify.hook.HookConst.SYSTEMUI_PACKAGE_NAME import com.fankes.miui.notify.hook.factory.isAppNotifyHookAllOf import com.fankes.miui.notify.hook.factory.isAppNotifyHookOf import com.fankes.miui.notify.params.IconPackParams -import com.fankes.miui.notify.utils.* import com.fankes.miui.notify.utils.drawable.drawabletoolbox.DrawableBuilder +import com.fankes.miui.notify.utils.factory.* +import com.fankes.miui.notify.utils.tool.BitmapCompatTool import com.highcapable.yukihookapi.annotation.xposed.InjectYukiHookWithXposed import com.highcapable.yukihookapi.hook.bean.VariousClass import com.highcapable.yukihookapi.hook.factory.* @@ -292,16 +293,16 @@ class HookEntry : YukiHookXposedInitProxy { expandedNf: StatusBarNotification?, iconDrawable: Drawable?, it: (Bitmap) -> Unit - ) = safeRun(msg = "GetSmallIconOnSet") { - if (iconDrawable == null) return@safeRun + ) = runSafe(msg = "GetSmallIconOnSet") { + if (iconDrawable == null) return@runSafe /** 如果没开启修复 APP 的彩色图标 */ - if (!prefs.getBoolean(ENABLE_COLOR_ICON_HOOK, default = true)) return@safeRun + if (!prefs.getBoolean(ENABLE_COLOR_ICON_HOOK, default = true)) return@runSafe /** 获取通知对象 - 由于 MIUI 的版本迭代不规范性可能是空的 */ expandedNf?.also { notifyInstance -> /** 判断是 MIUI 样式就停止 Hook */ if (context.isMiuiNotifyStyle) { it(notifyInstance.findAppIcon(context).toBitmap()) - return@safeRun + return@runSafe } /** 判断是否不是灰度图标 */ val isNotGrayscaleIcon = notifyInstance.isXmsf || !isGrayscaleIcon(context, iconDrawable) @@ -333,11 +334,11 @@ class HookEntry : YukiHookXposedInitProxy { expandedNf: StatusBarNotification?, iconImageView: ImageView, isExpanded: Boolean - ) = safeRun(msg = "AutoSetAppIconOnSet") { + ) = runSafe(msg = "AutoSetAppIconOnSet") { /** 判断是 MIUI 样式就停止 Hook */ - if (context.isMiuiNotifyStyle) return@safeRun + if (context.isMiuiNotifyStyle) return@runSafe /** 如果没开启修复 APP 的彩色图标 */ - if (!prefs.getBoolean(ENABLE_COLOR_ICON_HOOK, default = true)) return@safeRun + if (!prefs.getBoolean(ENABLE_COLOR_ICON_HOOK, default = true)) return@runSafe /** 获取通知对象 - 由于 MIUI 的版本迭代不规范性可能是空的 */ expandedNf?.let { notifyInstance -> @@ -451,7 +452,7 @@ class HookEntry : YukiHookXposedInitProxy { (if (isTargetFixApp) false else isNotGrayscaleIcon).also { printLogcat(tag = "IconColor", context, expandedNf, isTargetFixApp, !isNotGrayscaleIcon) } - } ?: true.also { printLogcat(tag = "IconColor", context, expandedNf, isCustom = false, isGrayscale = false) } + } ?: true.also { printLogcat(tag = "IconColor", context, expandedNf = null, isCustom = false, isGrayscale = false) } } else false.also { printLogcat(tag = "IconColor", context, expandedNf, isCustom = false, isGrayscale = true) } else true.also { printLogcat(tag = "IconColor", context, expandedNf, isCustom = false, isGrayscale = false) } diff --git a/app/src/main/java/com/fankes/miui/notify/params/IconPackParams.kt b/app/src/main/java/com/fankes/miui/notify/params/IconPackParams.kt index 7b56803..283f515 100644 --- a/app/src/main/java/com/fankes/miui/notify/params/IconPackParams.kt +++ b/app/src/main/java/com/fankes/miui/notify/params/IconPackParams.kt @@ -28,7 +28,7 @@ import android.content.Context import android.graphics.Color import com.fankes.miui.notify.bean.IconDataBean import com.fankes.miui.notify.hook.HookConst.NOTIFY_ICON_DATAS -import com.fankes.miui.notify.utils.* +import com.fankes.miui.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/miui/notify/ui/ConfigureActivity.kt b/app/src/main/java/com/fankes/miui/notify/ui/ConfigureActivity.kt index e1661ba..b7c657d 100644 --- a/app/src/main/java/com/fankes/miui/notify/ui/ConfigureActivity.kt +++ b/app/src/main/java/com/fankes/miui/notify/ui/ConfigureActivity.kt @@ -48,7 +48,9 @@ import com.fankes.miui.notify.hook.factory.putAppNotifyHookAllOf import com.fankes.miui.notify.hook.factory.putAppNotifyHookOf import com.fankes.miui.notify.params.IconPackParams import com.fankes.miui.notify.ui.base.BaseActivity -import com.fankes.miui.notify.utils.* +import com.fankes.miui.notify.utils.factory.* +import com.fankes.miui.notify.utils.tool.ClientRequestTool +import com.fankes.miui.notify.utils.tool.SystemUITool import com.fankes.miui.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/miui/notify/ui/MainActivity.kt b/app/src/main/java/com/fankes/miui/notify/ui/MainActivity.kt index 993b5c1..23ef159 100644 --- a/app/src/main/java/com/fankes/miui/notify/ui/MainActivity.kt +++ b/app/src/main/java/com/fankes/miui/notify/ui/MainActivity.kt @@ -43,7 +43,8 @@ import com.fankes.miui.notify.hook.HookConst.ENABLE_MODULE import com.fankes.miui.notify.hook.HookConst.ENABLE_MODULE_LOG import com.fankes.miui.notify.hook.HookConst.ENABLE_NOTIFY_ICON_FIX import com.fankes.miui.notify.ui.base.BaseActivity -import com.fankes.miui.notify.utils.* +import com.fankes.miui.notify.utils.factory.* +import com.fankes.miui.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/miui/notify/ui/base/BaseActivity.kt b/app/src/main/java/com/fankes/miui/notify/ui/base/BaseActivity.kt index 546c4f5..874efb4 100644 --- a/app/src/main/java/com/fankes/miui/notify/ui/base/BaseActivity.kt +++ b/app/src/main/java/com/fankes/miui/notify/ui/base/BaseActivity.kt @@ -25,7 +25,7 @@ package com.fankes.miui.notify.ui.base import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.fankes.miui.notify.R -import com.fankes.miui.notify.utils.isNotSystemInDarkMode +import com.fankes.miui.notify.utils.factory.isNotSystemInDarkMode import com.gyf.immersionbar.ktx.immersionBar abstract class BaseActivity : AppCompatActivity() { diff --git a/app/src/main/java/com/fankes/miui/notify/utils/DialogBuilder.kt b/app/src/main/java/com/fankes/miui/notify/utils/factory/DialogBuilderFactory.kt similarity index 98% rename from app/src/main/java/com/fankes/miui/notify/utils/DialogBuilder.kt rename to app/src/main/java/com/fankes/miui/notify/utils/factory/DialogBuilderFactory.kt index 38976f6..89d1f36 100644 --- a/app/src/main/java/com/fankes/miui/notify/utils/DialogBuilder.kt +++ b/app/src/main/java/com/fankes/miui/notify/utils/factory/DialogBuilderFactory.kt @@ -22,7 +22,7 @@ */ @file:Suppress("unused", "DEPRECATION") -package com.fankes.miui.notify.utils +package com.fankes.miui.notify.utils.factory import android.app.AlertDialog import android.content.Context diff --git a/app/src/main/java/com/fankes/miui/notify/utils/factory/ExceptionFactory.kt b/app/src/main/java/com/fankes/miui/notify/utils/factory/ExceptionFactory.kt new file mode 100644 index 0000000..ceedde6 --- /dev/null +++ b/app/src/main/java/com/fankes/miui/notify/utils/factory/ExceptionFactory.kt @@ -0,0 +1,83 @@ +/* + * MIUINativeNotifyIcon - Fix the native notification bar icon function abandoned by the MIUI development team. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/MIUINativeNotifyIcon + * + * 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.miui.notify.utils.factory + +import com.highcapable.yukihookapi.hook.log.loggerE + +/** + * 忽略异常返回值 + * @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 (_: Throwable) { + default +} + +/** + * 忽略异常运行 + * @param msg 出错输出的消息 - 默认为空 + * @param block 正常回调 + */ +inline fun T.runSafe(msg: String = "", block: () -> Unit) { + runCatching(block).onFailure { if (msg.isNotBlank()) loggerE(msg = msg, e = it) } +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/miui/notify/utils/Utils.kt b/app/src/main/java/com/fankes/miui/notify/utils/factory/FunctionFactory.kt similarity index 73% rename from app/src/main/java/com/fankes/miui/notify/utils/Utils.kt rename to app/src/main/java/com/fankes/miui/notify/utils/factory/FunctionFactory.kt index 523e499..fb8a89a 100644 --- a/app/src/main/java/com/fankes/miui/notify/utils/Utils.kt +++ b/app/src/main/java/com/fankes/miui/notify/utils/factory/FunctionFactory.kt @@ -22,7 +22,7 @@ */ @file:Suppress("DEPRECATION", "PrivateApi", "unused", "ObsoleteSdkInt") -package com.fankes.miui.notify.utils +package com.fankes.miui.notify.utils.factory import android.app.Activity import android.app.AlertDialog @@ -47,7 +47,6 @@ import com.google.android.material.snackbar.Snackbar import com.highcapable.yukihookapi.hook.factory.classOf 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 @@ -324,127 +323,29 @@ fun Context.snake(msg: String, actionText: String = "", it: () -> Unit = {}) = * @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 = "启动系统浏览器失败") +} /** * 复制到剪贴板 * @param content 要复制的文本 */ -fun Context.copyToClipboard(content: String) = runCatching { +fun Context.copyToClipboard(content: String) = runSafe { (getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager).apply { setPrimaryClip(ClipData.newPlainText(null, content)) (primaryClip?.getItemAt(0)?.text ?: "").also { 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/miui/notify/utils/BitmapCompatTool.kt b/app/src/main/java/com/fankes/miui/notify/utils/tool/BitmapCompatTool.kt similarity index 97% rename from app/src/main/java/com/fankes/miui/notify/utils/BitmapCompatTool.kt rename to app/src/main/java/com/fankes/miui/notify/utils/tool/BitmapCompatTool.kt index 2f6d2e4..3615cc7 100644 --- a/app/src/main/java/com/fankes/miui/notify/utils/BitmapCompatTool.kt +++ b/app/src/main/java/com/fankes/miui/notify/utils/tool/BitmapCompatTool.kt @@ -20,7 +20,7 @@ * * This file is Created by fankes on 2022/2/19. */ -package com.fankes.miui.notify.utils +package com.fankes.miui.notify.utils.tool import android.graphics.* import android.graphics.drawable.AnimationDrawable @@ -29,6 +29,7 @@ import android.graphics.drawable.Drawable import android.graphics.drawable.VectorDrawable import android.util.ArrayMap import androidx.core.graphics.drawable.toBitmap +import com.fankes.miui.notify.utils.factory.safeOfFalse import kotlin.math.abs /** diff --git a/app/src/main/java/com/fankes/miui/notify/utils/ClientRequestTool.kt b/app/src/main/java/com/fankes/miui/notify/utils/tool/ClientRequestTool.kt similarity index 95% rename from app/src/main/java/com/fankes/miui/notify/utils/ClientRequestTool.kt rename to app/src/main/java/com/fankes/miui/notify/utils/tool/ClientRequestTool.kt index 18adf9f..1945da7 100644 --- a/app/src/main/java/com/fankes/miui/notify/utils/ClientRequestTool.kt +++ b/app/src/main/java/com/fankes/miui/notify/utils/tool/ClientRequestTool.kt @@ -22,13 +22,17 @@ */ @file:Suppress("TrustAllX509TrustManager", "CustomX509TrustManager", "DEPRECATION") -package com.fankes.miui.notify.utils +package com.fankes.miui.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.miui.notify.utils.factory.safeOfNull +import com.fankes.miui.notify.utils.factory.setDefaultStyle +import com.fankes.miui.notify.utils.factory.showDialog +import com.fankes.miui.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/miui/notify/utils/SystemUITool.kt b/app/src/main/java/com/fankes/miui/notify/utils/tool/SystemUITool.kt similarity index 91% rename from app/src/main/java/com/fankes/miui/notify/utils/SystemUITool.kt rename to app/src/main/java/com/fankes/miui/notify/utils/tool/SystemUITool.kt index f5a7f2a..fd2d130 100644 --- a/app/src/main/java/com/fankes/miui/notify/utils/SystemUITool.kt +++ b/app/src/main/java/com/fankes/miui/notify/utils/tool/SystemUITool.kt @@ -20,9 +20,13 @@ * * This file is Created by fankes on 2022/2/8. */ -package com.fankes.miui.notify.utils +package com.fankes.miui.notify.utils.tool import android.content.Context +import com.fankes.miui.notify.utils.factory.execShellSu +import com.fankes.miui.notify.utils.factory.showDialog +import com.fankes.miui.notify.utils.factory.snake +import com.fankes.miui.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/miui/notify/view/MaterialSwitch.kt b/app/src/main/java/com/fankes/miui/notify/view/MaterialSwitch.kt index 7c649c7..396dae4 100644 --- a/app/src/main/java/com/fankes/miui/notify/view/MaterialSwitch.kt +++ b/app/src/main/java/com/fankes/miui/notify/view/MaterialSwitch.kt @@ -29,8 +29,8 @@ import android.content.res.ColorStateList import android.graphics.Color import android.util.AttributeSet import androidx.appcompat.widget.SwitchCompat -import com.fankes.miui.notify.utils.dp import com.fankes.miui.notify.utils.drawable.drawabletoolbox.DrawableBuilder +import com.fankes.miui.notify.utils.factory.dp class MaterialSwitch(context: Context, attrs: AttributeSet?) : SwitchCompat(context, attrs) {