mirror of
https://github.com/KitsunePie/AppErrorsTracking.git
synced 2025-09-04 02:05:16 +08:00
Added Material 3 dynamic colors theme for app errors dialog
This commit is contained in:
@@ -25,6 +25,7 @@ package com.fankes.apperrorstracking.data
|
|||||||
|
|
||||||
import android.content.ContentResolver
|
import android.content.ContentResolver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.os.Build
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
import android.widget.CompoundButton
|
import android.widget.CompoundButton
|
||||||
import com.highcapable.yukihookapi.hook.factory.modulePrefs
|
import com.highcapable.yukihookapi.hook.factory.modulePrefs
|
||||||
@@ -44,6 +45,9 @@ object ConfigData {
|
|||||||
/** 显示开发者提示 */
|
/** 显示开发者提示 */
|
||||||
val SHOW_DEVELOPER_NOTICE = PrefsData("_show_developer_notice", true)
|
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)
|
val ENABLE_ONLY_SHOW_ERRORS_IN_FRONT = PrefsData("_enable_only_show_errors_in_front", false)
|
||||||
|
|
||||||
@@ -180,4 +184,14 @@ object ConfigData {
|
|||||||
set(value) {
|
set(value) {
|
||||||
putBoolean(ENABLE_APP_CONFIG_TEMPLATE, 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)
|
||||||
|
}
|
||||||
}
|
}
|
@@ -22,8 +22,11 @@
|
|||||||
package com.fankes.apperrorstracking.ui.activity.errors
|
package com.fankes.apperrorstracking.ui.activity.errors
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.os.Build
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
|
import com.fankes.apperrorstracking.R
|
||||||
import com.fankes.apperrorstracking.bean.AppErrorsDisplayBean
|
import com.fankes.apperrorstracking.bean.AppErrorsDisplayBean
|
||||||
|
import com.fankes.apperrorstracking.data.ConfigData
|
||||||
import com.fankes.apperrorstracking.databinding.ActivityAppErrorsDisplayBinding
|
import com.fankes.apperrorstracking.databinding.ActivityAppErrorsDisplayBinding
|
||||||
import com.fankes.apperrorstracking.databinding.DiaAppErrorsDisplayBinding
|
import com.fankes.apperrorstracking.databinding.DiaAppErrorsDisplayBinding
|
||||||
import com.fankes.apperrorstracking.locale.LocaleString
|
import com.fankes.apperrorstracking.locale.LocaleString
|
||||||
@@ -55,9 +58,17 @@ class AppErrorsDisplayActivity : BaseActivity<ActivityAppErrorsDisplayBinding>()
|
|||||||
instance = this
|
instance = this
|
||||||
val appErrorsDisplay = runCatching { intent?.getSerializableExtraCompat<AppErrorsDisplayBean>(EXTRA_APP_ERRORS_DISPLAY) }.getOrNull()
|
val appErrorsDisplay = runCatching { intent?.getSerializableExtraCompat<AppErrorsDisplayBean>(EXTRA_APP_ERRORS_DISPLAY) }.getOrNull()
|
||||||
?: return toastAndFinish(name = "AppErrorsDisplay")
|
?: return toastAndFinish(name = "AppErrorsDisplay")
|
||||||
|
/** 设置 Material 3 动态颜色主题 */
|
||||||
|
if (ConfigData.isEnableMaterial3StyleAppErrorsDialog) setTheme(R.style.Theme_AppErrorsTracking_Translucent_Material3)
|
||||||
/** 显示对话框 */
|
/** 显示对话框 */
|
||||||
showDialog<DiaAppErrorsDisplayBinding> {
|
showDialog<DiaAppErrorsDisplayBinding>(ConfigData.isEnableMaterial3StyleAppErrorsDialog.not()) {
|
||||||
title = appErrorsDisplay.title
|
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.processNameText.isVisible = appErrorsDisplay.packageName != appErrorsDisplay.processName
|
||||||
binding.appInfoItem.isVisible = appErrorsDisplay.isShowAppInfoButton
|
binding.appInfoItem.isVisible = appErrorsDisplay.isShowAppInfoButton
|
||||||
binding.closeAppItem.isVisible = appErrorsDisplay.isShowReopenButton.not() && appErrorsDisplay.isShowCloseAppButton
|
binding.closeAppItem.isVisible = appErrorsDisplay.isShowReopenButton.not() && appErrorsDisplay.isShowCloseAppButton
|
||||||
|
@@ -56,6 +56,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
|||||||
binding.enableAppsConfigsTemplateSwitch.bind(ConfigData.ENABLE_APP_CONFIG_TEMPLATE) {
|
binding.enableAppsConfigsTemplateSwitch.bind(ConfigData.ENABLE_APP_CONFIG_TEMPLATE) {
|
||||||
binding.mgrAppsConfigsTemplateButton.isVisible = it
|
binding.mgrAppsConfigsTemplateButton.isVisible = it
|
||||||
}
|
}
|
||||||
|
binding.enableMaterial3AppErrorsDialogSwitch.bind(ConfigData.ENABLE_MATERIAL3_STYLE_APP_ERRORS_DIALOG)
|
||||||
/** 设置桌面图标显示隐藏 */
|
/** 设置桌面图标显示隐藏 */
|
||||||
binding.hideIconInLauncherSwitch.isChecked = isLauncherIconShowing.not()
|
binding.hideIconInLauncherSwitch.isChecked = isLauncherIconShowing.not()
|
||||||
binding.hideIconInLauncherSwitch.setOnCheckedChangeListener { btn, b ->
|
binding.hideIconInLauncherSwitch.setOnCheckedChangeListener { btn, b ->
|
||||||
|
34
app/src/main/res/drawable/ic_theme.xml
Normal file
34
app/src/main/res/drawable/ic_theme.xml
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="32dp"
|
||||||
|
android:height="32dp"
|
||||||
|
android:viewportWidth="48"
|
||||||
|
android:viewportHeight="48">
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:fillType="evenOdd"
|
||||||
|
android:pathData="M37,37C39.209,37 41,35.209 41,33C41,31.527 39.667,29.527 37,27C34.333,29.527 33,31.527 33,33C33,35.209 34.791,37 37,37Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M20.854,5.504L24.389,9.04"
|
||||||
|
android:strokeWidth="4"
|
||||||
|
android:strokeColor="#ffffff"
|
||||||
|
android:strokeLineCap="round" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M23.682,8.333L8.125,23.889L19.439,35.203L34.995,19.646L23.682,8.333Z"
|
||||||
|
android:strokeWidth="4"
|
||||||
|
android:strokeColor="#ffffff"
|
||||||
|
android:strokeLineJoin="round" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M12,20.073L28.961,25.65"
|
||||||
|
android:strokeWidth="4"
|
||||||
|
android:strokeColor="#ffffff"
|
||||||
|
android:strokeLineCap="round" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M4,43H44"
|
||||||
|
android:strokeWidth="4"
|
||||||
|
android:strokeColor="#ffffff"
|
||||||
|
android:strokeLineCap="round" />
|
||||||
|
</vector>
|
@@ -328,6 +328,71 @@
|
|||||||
android:textSize="12sp" />
|
android:textSize="12sp" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="15dp"
|
||||||
|
android:layout_marginTop="15dp"
|
||||||
|
android:layout_marginRight="15dp"
|
||||||
|
android:background="@drawable/bg_permotion_round"
|
||||||
|
android:elevation="0dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:paddingLeft="15dp"
|
||||||
|
android:paddingTop="15dp"
|
||||||
|
android:paddingRight="15dp">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center|start">
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:layout_width="15dp"
|
||||||
|
android:layout_height="15dp"
|
||||||
|
android:layout_marginEnd="10dp"
|
||||||
|
app:cardBackgroundColor="#BA68C8"
|
||||||
|
app:cardCornerRadius="50dp"
|
||||||
|
app:cardElevation="0dp">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:padding="2.5dp"
|
||||||
|
android:src="@drawable/ic_theme" />
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:alpha="0.85"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:text="@string/theme_setting"
|
||||||
|
android:textColor="@color/colorTextGray"
|
||||||
|
android:textSize="12sp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<com.fankes.apperrorstracking.ui.view.MaterialSwitch
|
||||||
|
android:id="@+id/enable_material3_app_errors_dialog_switch"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/enable_md3_app_errors_dialog"
|
||||||
|
android:textAllCaps="false"
|
||||||
|
android:textColor="@color/colorTextGray"
|
||||||
|
android:textSize="15sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="10dp"
|
||||||
|
android:alpha="0.6"
|
||||||
|
android:lineSpacingExtra="6dp"
|
||||||
|
android:text="@string/enable_md3_app_errors_dialog_tip"
|
||||||
|
android:textColor="@color/colorTextDark"
|
||||||
|
android:textSize="12sp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
@@ -40,6 +40,7 @@
|
|||||||
android:paddingVertical="15dp">
|
android:paddingVertical="15dp">
|
||||||
|
|
||||||
<androidx.constraintlayout.utils.widget.ImageFilterView
|
<androidx.constraintlayout.utils.widget.ImageFilterView
|
||||||
|
android:id="@+id/app_info_icon"
|
||||||
android:layout_width="20dp"
|
android:layout_width="20dp"
|
||||||
android:layout_height="20dp"
|
android:layout_height="20dp"
|
||||||
android:layout_marginEnd="15dp"
|
android:layout_marginEnd="15dp"
|
||||||
@@ -63,6 +64,7 @@
|
|||||||
android:paddingVertical="15dp">
|
android:paddingVertical="15dp">
|
||||||
|
|
||||||
<androidx.constraintlayout.utils.widget.ImageFilterView
|
<androidx.constraintlayout.utils.widget.ImageFilterView
|
||||||
|
android:id="@+id/close_app_icon"
|
||||||
android:layout_width="20dp"
|
android:layout_width="20dp"
|
||||||
android:layout_height="20dp"
|
android:layout_height="20dp"
|
||||||
android:layout_marginEnd="15dp"
|
android:layout_marginEnd="15dp"
|
||||||
@@ -85,6 +87,7 @@
|
|||||||
android:paddingVertical="15dp">
|
android:paddingVertical="15dp">
|
||||||
|
|
||||||
<androidx.constraintlayout.utils.widget.ImageFilterView
|
<androidx.constraintlayout.utils.widget.ImageFilterView
|
||||||
|
android:id="@+id/reopen_app_icon"
|
||||||
android:layout_width="20dp"
|
android:layout_width="20dp"
|
||||||
android:layout_height="20dp"
|
android:layout_height="20dp"
|
||||||
android:layout_marginEnd="15dp"
|
android:layout_marginEnd="15dp"
|
||||||
@@ -107,6 +110,7 @@
|
|||||||
android:paddingVertical="15dp">
|
android:paddingVertical="15dp">
|
||||||
|
|
||||||
<androidx.constraintlayout.utils.widget.ImageFilterView
|
<androidx.constraintlayout.utils.widget.ImageFilterView
|
||||||
|
android:id="@+id/error_detail_icon"
|
||||||
android:layout_width="20dp"
|
android:layout_width="20dp"
|
||||||
android:layout_height="20dp"
|
android:layout_height="20dp"
|
||||||
android:layout_marginEnd="15dp"
|
android:layout_marginEnd="15dp"
|
||||||
@@ -129,6 +133,7 @@
|
|||||||
android:paddingVertical="15dp">
|
android:paddingVertical="15dp">
|
||||||
|
|
||||||
<androidx.constraintlayout.utils.widget.ImageFilterView
|
<androidx.constraintlayout.utils.widget.ImageFilterView
|
||||||
|
android:id="@+id/muted_if_unlock_icon"
|
||||||
android:layout_width="20dp"
|
android:layout_width="20dp"
|
||||||
android:layout_height="20dp"
|
android:layout_height="20dp"
|
||||||
android:layout_marginEnd="15dp"
|
android:layout_marginEnd="15dp"
|
||||||
@@ -151,6 +156,7 @@
|
|||||||
android:paddingVertical="15dp">
|
android:paddingVertical="15dp">
|
||||||
|
|
||||||
<androidx.constraintlayout.utils.widget.ImageFilterView
|
<androidx.constraintlayout.utils.widget.ImageFilterView
|
||||||
|
android:id="@+id/muted_if_restart_icon"
|
||||||
android:layout_width="20dp"
|
android:layout_width="20dp"
|
||||||
android:layout_height="20dp"
|
android:layout_height="20dp"
|
||||||
android:layout_marginEnd="15dp"
|
android:layout_marginEnd="15dp"
|
||||||
|
Reference in New Issue
Block a user