From 1fc9f07b9f6ccd3fde60b64b915040b05833c1b4 Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Mon, 3 Oct 2022 04:09:54 +0800 Subject: [PATCH] Added Material 3 dynamic colors theme for app errors dialog --- .../apperrorstracking/data/ConfigData.kt | 14 ++++ .../errors/AppErrorsDisplayActivity.kt | 13 +++- .../ui/activity/main/MainActivity.kt | 1 + app/src/main/res/drawable/ic_theme.xml | 34 ++++++++++ app/src/main/res/layout/activity_main.xml | 65 +++++++++++++++++++ .../res/layout/dia_app_errors_display.xml | 6 ++ 6 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/drawable/ic_theme.xml diff --git a/app/src/main/java/com/fankes/apperrorstracking/data/ConfigData.kt b/app/src/main/java/com/fankes/apperrorstracking/data/ConfigData.kt index 459a817..d6526b6 100644 --- a/app/src/main/java/com/fankes/apperrorstracking/data/ConfigData.kt +++ b/app/src/main/java/com/fankes/apperrorstracking/data/ConfigData.kt @@ -25,6 +25,7 @@ package com.fankes.apperrorstracking.data import android.content.ContentResolver import android.content.Context +import android.os.Build import android.provider.Settings import android.widget.CompoundButton import com.highcapable.yukihookapi.hook.factory.modulePrefs @@ -44,6 +45,9 @@ object ConfigData { /** 显示开发者提示 */ val SHOW_DEVELOPER_NOTICE = PrefsData("_show_developer_notice", true) + /** 启用 Material 3 风格的错误对话框 */ + val ENABLE_MATERIAL3_STYLE_APP_ERRORS_DIALOG = PrefsData("_enable_material3_style_dialog", Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) + /** 仅对前台应用显示错误对话框 */ val ENABLE_ONLY_SHOW_ERRORS_IN_FRONT = PrefsData("_enable_only_show_errors_in_front", false) @@ -180,4 +184,14 @@ object ConfigData { set(value) { putBoolean(ENABLE_APP_CONFIG_TEMPLATE, value) } + + /** + * 是否启用 Material 3 风格的错误对话框 + * @return [Boolean] + */ + var isEnableMaterial3StyleAppErrorsDialog + get() = getBoolean(ENABLE_MATERIAL3_STYLE_APP_ERRORS_DIALOG) + set(value) { + putBoolean(ENABLE_MATERIAL3_STYLE_APP_ERRORS_DIALOG, value) + } } \ No newline at end of file diff --git a/app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDisplayActivity.kt b/app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDisplayActivity.kt index c721cc3..3970a6b 100644 --- a/app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDisplayActivity.kt +++ b/app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDisplayActivity.kt @@ -22,8 +22,11 @@ package com.fankes.apperrorstracking.ui.activity.errors import android.content.Context +import android.os.Build import androidx.core.view.isVisible +import com.fankes.apperrorstracking.R import com.fankes.apperrorstracking.bean.AppErrorsDisplayBean +import com.fankes.apperrorstracking.data.ConfigData import com.fankes.apperrorstracking.databinding.ActivityAppErrorsDisplayBinding import com.fankes.apperrorstracking.databinding.DiaAppErrorsDisplayBinding import com.fankes.apperrorstracking.locale.LocaleString @@ -55,9 +58,17 @@ class AppErrorsDisplayActivity : BaseActivity() instance = this val appErrorsDisplay = runCatching { intent?.getSerializableExtraCompat(EXTRA_APP_ERRORS_DISPLAY) }.getOrNull() ?: return toastAndFinish(name = "AppErrorsDisplay") + /** 设置 Material 3 动态颜色主题 */ + if (ConfigData.isEnableMaterial3StyleAppErrorsDialog) setTheme(R.style.Theme_AppErrorsTracking_Translucent_Material3) /** 显示对话框 */ - showDialog { + showDialog(ConfigData.isEnableMaterial3StyleAppErrorsDialog.not()) { title = appErrorsDisplay.title + if (ConfigData.isEnableMaterial3StyleAppErrorsDialog && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) + arrayOf( + binding.appInfoIcon, binding.closeAppIcon, + binding.reopenAppIcon, binding.errorDetailIcon, + binding.mutedIfUnlockIcon, binding.mutedIfRestartIcon + ).forEach { it.setColorFilter(resources.colorOf(android.R.color.system_accent1_600)) } binding.processNameText.isVisible = appErrorsDisplay.packageName != appErrorsDisplay.processName binding.appInfoItem.isVisible = appErrorsDisplay.isShowAppInfoButton binding.closeAppItem.isVisible = appErrorsDisplay.isShowReopenButton.not() && appErrorsDisplay.isShowCloseAppButton diff --git a/app/src/main/java/com/fankes/apperrorstracking/ui/activity/main/MainActivity.kt b/app/src/main/java/com/fankes/apperrorstracking/ui/activity/main/MainActivity.kt index 9980379..cf7d284 100644 --- a/app/src/main/java/com/fankes/apperrorstracking/ui/activity/main/MainActivity.kt +++ b/app/src/main/java/com/fankes/apperrorstracking/ui/activity/main/MainActivity.kt @@ -56,6 +56,7 @@ class MainActivity : BaseActivity() { binding.enableAppsConfigsTemplateSwitch.bind(ConfigData.ENABLE_APP_CONFIG_TEMPLATE) { binding.mgrAppsConfigsTemplateButton.isVisible = it } + binding.enableMaterial3AppErrorsDialogSwitch.bind(ConfigData.ENABLE_MATERIAL3_STYLE_APP_ERRORS_DIALOG) /** 设置桌面图标显示隐藏 */ binding.hideIconInLauncherSwitch.isChecked = isLauncherIconShowing.not() binding.hideIconInLauncherSwitch.setOnCheckedChangeListener { btn, b -> diff --git a/app/src/main/res/drawable/ic_theme.xml b/app/src/main/res/drawable/ic_theme.xml new file mode 100644 index 0000000..5a1b379 --- /dev/null +++ b/app/src/main/res/drawable/ic_theme.xml @@ -0,0 +1,34 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 71fbc87..200464d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -328,6 +328,71 @@ android:textSize="12sp" /> + + + + + + + + + + + + + + + + +