From 0f1e2b450f3b29edfbc1170ecea14b04ec44c440 Mon Sep 17 00:00:00 2001 From: HuanCheng65 <22636177+HuanCheng65@users.noreply.github.com> Date: Fri, 6 Oct 2023 14:50:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=8A=A8=E6=80=81=E5=8F=96=E8=89=B2?= =?UTF-8?q?=E6=97=B6=E4=B8=BB=E9=A2=98=E9=A2=84=E8=A7=88=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 3 --- .../java/com/huanchengfly/tieba/post/App.kt | 26 ++++++++++++++----- .../tieba/post/activities/BaseActivity.kt | 8 +++--- .../tieba/post/adapters/ThemeAdapter.java | 6 ++--- .../tieba/post/fragments/WebViewFragment.java | 2 +- .../post/ui/common/theme/compose/Theme.kt | 2 +- .../ui/page/settings/theme/AppThemePage.kt | 2 +- .../tieba/post/utils/PopupUtil.java | 10 +++---- .../tieba/post/utils/ThemeUtil.kt | 24 +++++++++++------ .../tieba/post/utils/TiebaLiteJavaScript.java | 2 +- .../huanchengfly/tieba/post/utils/Util.java | 2 +- 11 files changed, 53 insertions(+), 34 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 51bb4b59..e9392e59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -126,9 +126,6 @@ - { - if (ThemeUtil.THEME_CUSTOM == theme) { + if (ThemeUtil.isDynamicTheme(theme) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + val dynamicTonalPalette = dynamicTonalPalette(context) + return if (ThemeUtil.isNightMode(theme)) { + dynamicTonalPalette.primary80.toArgb() + } else { + dynamicTonalPalette.primary40.toArgb() + } + } else if (ThemeUtil.THEME_CUSTOM == theme) { val customPrimaryColorStr = context.appPreferences.customPrimaryColor return if (customPrimaryColorStr != null) { Color.parseColor(customPrimaryColorStr) @@ -370,7 +377,7 @@ class App : Application(), IApp, SketchFactory { } R.attr.colorNewPrimary -> { - return if (ThemeUtil.isUsingDynamicTheme() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + return if (ThemeUtil.isDynamicTheme(theme) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { val dynamicTonalPalette = dynamicTonalPalette(context) if (ThemeUtil.isNightMode(theme)) { dynamicTonalPalette.primary80.toArgb() @@ -389,7 +396,14 @@ class App : Application(), IApp, SketchFactory { } R.attr.colorAccent -> { - return if (ThemeUtil.THEME_CUSTOM == theme || ThemeUtil.isTranslucentTheme(theme)) { + return if (ThemeUtil.isDynamicTheme(theme) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + val dynamicTonalPalette = dynamicTonalPalette(context) + if (ThemeUtil.isNightMode(theme)) { + dynamicTonalPalette.secondary80.toArgb() + } else { + dynamicTonalPalette.secondary40.toArgb() + } + } else if (ThemeUtil.THEME_CUSTOM == theme || ThemeUtil.isTranslucentTheme(theme)) { getColorByAttr(context, R.attr.colorPrimary, theme) } else { context.getColorCompat( @@ -729,7 +743,7 @@ class App : Application(), IApp, SketchFactory { } override fun getColorByAttr(context: Context, attrId: Int): Int { - return getColorByAttr(context, attrId, ThemeUtil.getThemeTranslucent()) + return getColorByAttr(context, attrId, ThemeUtil.getCurrentTheme()) } override fun getColorById(context: Context, colorId: Int): Int { diff --git a/app/src/main/java/com/huanchengfly/tieba/post/activities/BaseActivity.kt b/app/src/main/java/com/huanchengfly/tieba/post/activities/BaseActivity.kt index 60294b26..15fe3a9a 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/activities/BaseActivity.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/activities/BaseActivity.kt @@ -115,7 +115,7 @@ abstract class BaseActivity : AppCompatActivity(), ExtraRefreshable, CoroutineSc getDeviceDensity() INSTANCE.addActivity(this) if (isNeedSetTheme) ThemeUtil.setTheme(this) - oldTheme = ThemeUtil.getTheme() + oldTheme = ThemeUtil.getRawTheme() if (isNeedImmersionBar) { refreshStatusBarColor() } @@ -137,8 +137,8 @@ abstract class BaseActivity : AppCompatActivity(), ExtraRefreshable, CoroutineSc } fun refreshUIIfNeed() { - if (TextUtils.equals(oldTheme, ThemeUtil.getTheme()) && - ThemeUtil.THEME_CUSTOM != ThemeUtil.getTheme() && + if (TextUtils.equals(oldTheme, ThemeUtil.getRawTheme()) && + ThemeUtil.THEME_CUSTOM != ThemeUtil.getRawTheme() && !ThemeUtil.isTranslucentTheme() ) { return @@ -299,7 +299,7 @@ abstract class BaseActivity : AppCompatActivity(), ExtraRefreshable, CoroutineSc if (isNeedImmersionBar) { refreshStatusBarColor() } - oldTheme = ThemeUtil.getTheme() + oldTheme = ThemeUtil.getRawTheme() } private fun recreateIfNeed(): Boolean { diff --git a/app/src/main/java/com/huanchengfly/tieba/post/adapters/ThemeAdapter.java b/app/src/main/java/com/huanchengfly/tieba/post/adapters/ThemeAdapter.java index d3279341..d9396200 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/adapters/ThemeAdapter.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/adapters/ThemeAdapter.java @@ -44,12 +44,12 @@ public class ThemeAdapter extends RecyclerView.Adapter implements themes = mContext.getResources().getStringArray(R.array.theme_values); themeNames = mContext.getResources().getStringArray(R.array.themeNames); List themeList = Arrays.asList(themes); - selectedPosition = themeList.indexOf(ThemeUtil.getTheme()); + selectedPosition = themeList.indexOf(ThemeUtil.getRawTheme()); } public void refresh() { List themeList = Arrays.asList(themes); - selectedPosition = themeList.indexOf(ThemeUtil.getTheme()); + selectedPosition = themeList.indexOf(ThemeUtil.getRawTheme()); notifyDataSetChanged(); } @@ -98,7 +98,7 @@ public class ThemeAdapter extends RecyclerView.Adapter implements } previewView.setBackgroundTintList(ColorStateList.valueOf(toolbarColor)); holder.setItemOnClickListener(v -> { - int oldPosition = selectedPosition + 0; + int oldPosition = selectedPosition; selectedPosition = position; notifyItemChanged(oldPosition); notifyItemChanged(position); diff --git a/app/src/main/java/com/huanchengfly/tieba/post/fragments/WebViewFragment.java b/app/src/main/java/com/huanchengfly/tieba/post/fragments/WebViewFragment.java index 5692023a..2a5799b1 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/fragments/WebViewFragment.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/fragments/WebViewFragment.java @@ -267,7 +267,7 @@ public class WebViewFragment extends BaseFragment implements DownloadListener, B private void injectJavaScript() { if (mWebView == null) return; mWebView.evaluateJavascript(clipboardGuardJs, null); - String nowTheme = ThemeUtil.getTheme(); + String nowTheme = ThemeUtil.getRawTheme(); String url = mWebView.getUrl(); if (url == null || nowTheme == null) { return; diff --git a/app/src/main/java/com/huanchengfly/tieba/post/ui/common/theme/compose/Theme.kt b/app/src/main/java/com/huanchengfly/tieba/post/ui/common/theme/compose/Theme.kt index c717b124..461c93c9 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/ui/common/theme/compose/Theme.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/ui/common/theme/compose/Theme.kt @@ -314,7 +314,7 @@ private fun getBlackDarkDynamicColor(tonalPalette: TonalPalette): ExtendedColors @Composable private fun getThemeColorForTheme(theme: String): ExtendedColors { val context = LocalContext.current - val nowTheme = ThemeUtil.getThemeTranslucent(theme) + val nowTheme = ThemeUtil.getCurrentTheme(theme) val textColor = Color(App.ThemeDelegate.getColorByAttr(context, R.attr.colorText, nowTheme)) val bottomBarColor = diff --git a/app/src/main/java/com/huanchengfly/tieba/post/ui/page/settings/theme/AppThemePage.kt b/app/src/main/java/com/huanchengfly/tieba/post/ui/page/settings/theme/AppThemePage.kt index 79a10023..21842658 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/ui/page/settings/theme/AppThemePage.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/ui/page/settings/theme/AppThemePage.kt @@ -423,7 +423,7 @@ fun AppThemePage( Color( App.ThemeDelegate.getColorByAttr( context, - R.attr.colorOnBackground, + R.attr.colorText, item ) ) diff --git a/app/src/main/java/com/huanchengfly/tieba/post/utils/PopupUtil.java b/app/src/main/java/com/huanchengfly/tieba/post/utils/PopupUtil.java index f008b2d2..7a8c9482 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/utils/PopupUtil.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/utils/PopupUtil.java @@ -26,14 +26,14 @@ public class PopupUtil { Field contextField = ListPopupWindow.class.getDeclaredField("mContext"); contextField.setAccessible(true); Context context = (Context) contextField.get(listPopupWindow); - if (ThemeUtil.INSTANCE.getThemeTranslucent().equals(ThemeUtil.THEME_TRANSLUCENT_LIGHT)) { + if (ThemeUtil.INSTANCE.getCurrentTheme().equals(ThemeUtil.THEME_TRANSLUCENT_LIGHT)) { listPopupWindow.setBackgroundDrawable( ThemeUtils.tintDrawable( AppCompatResources.getDrawable(context, R.drawable.bg_popup), context.getResources().getColor(R.color.theme_color_background_light) ) ); - } else if (ThemeUtil.INSTANCE.getThemeTranslucent().equals(ThemeUtil.THEME_TRANSLUCENT_DARK)) { + } else if (ThemeUtil.INSTANCE.getCurrentTheme().equals(ThemeUtil.THEME_TRANSLUCENT_DARK)) { listPopupWindow.setBackgroundDrawable( ThemeUtils.tintDrawable( AppCompatResources.getDrawable(context, R.drawable.bg_popup), @@ -65,13 +65,13 @@ public class PopupUtil { Field popupField = obj.getClass().getDeclaredField("mPopup"); popupField.setAccessible(true); MenuPopupWindow menuPopupWindow = (MenuPopupWindow) popupField.get(obj); - Log.i("Theme", ThemeUtil.INSTANCE.getThemeTranslucent()); - if (ThemeUtil.INSTANCE.getThemeTranslucent().equals(ThemeUtil.THEME_TRANSLUCENT_LIGHT)) { + Log.i("Theme", ThemeUtil.INSTANCE.getCurrentTheme()); + if (ThemeUtil.INSTANCE.getCurrentTheme().equals(ThemeUtil.THEME_TRANSLUCENT_LIGHT)) { menuPopupWindow.setBackgroundDrawable( ThemeUtils.tintDrawable(context.getDrawable(R.drawable.bg_popup), context.getResources().getColor(R.color.theme_color_background_light)) ); - } else if (ThemeUtil.INSTANCE.getThemeTranslucent().equals(ThemeUtil.THEME_TRANSLUCENT_DARK)) { + } else if (ThemeUtil.INSTANCE.getCurrentTheme().equals(ThemeUtil.THEME_TRANSLUCENT_DARK)) { menuPopupWindow.setBackgroundDrawable( ThemeUtils.tintDrawable(context.getDrawable(R.drawable.bg_popup), context.getResources().getColor(R.color.theme_color_background_dark)) diff --git a/app/src/main/java/com/huanchengfly/tieba/post/utils/ThemeUtil.kt b/app/src/main/java/com/huanchengfly/tieba/post/utils/ThemeUtil.kt index 1554fc17..9542018a 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/utils/ThemeUtil.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/utils/ThemeUtil.kt @@ -6,6 +6,7 @@ import android.content.res.ColorStateList import android.graphics.Color import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable +import android.os.Build import android.view.View import android.view.ViewGroup import android.webkit.WebView @@ -118,7 +119,7 @@ object ThemeUtil { fun switchTheme(newTheme: String, recordOldTheme: Boolean = true) { if (recordOldTheme) { - val oldTheme = getTheme() + val oldTheme = getRawTheme() if (!isNightMode(oldTheme)) { dataStore.putString(KEY_OLD_THEME, oldTheme) } @@ -224,7 +225,7 @@ object ThemeUtil { @JvmStatic fun isNightMode(): Boolean { - return isNightMode(getTheme()) + return isNightMode(getRawTheme()) } @JvmStatic @@ -236,7 +237,7 @@ object ThemeUtil { } fun isTranslucentTheme(): Boolean { - return isTranslucentTheme(getTheme()) + return isTranslucentTheme(getRawTheme()) } @JvmStatic @@ -250,8 +251,12 @@ object ThemeUtil { ) } + fun isDynamicTheme(theme: String): Boolean { + return theme.endsWith("_dynamic") + } + fun isStatusBarFontDark(): Boolean { - val theme = getTheme() + val theme = getRawTheme() val isToolbarPrimaryColor: Boolean = INSTANCE.appPreferences.toolbarPrimaryColor return if (theme == THEME_CUSTOM) { INSTANCE.appPreferences.customStatusBarFontDark @@ -269,12 +274,12 @@ object ThemeUtil { } fun setTheme(context: Activity) { - val nowTheme = getThemeTranslucent() + val nowTheme = getCurrentTheme() context.setTheme(getThemeByName(nowTheme)) } @JvmOverloads - fun getThemeTranslucent(theme: String = getTheme()): String { + fun getCurrentTheme(theme: String = getRawTheme()): String { var nowTheme = theme if (isTranslucentTheme(nowTheme)) { val colorTheme = @@ -284,6 +289,8 @@ object ThemeUtil { } else { THEME_TRANSLUCENT_LIGHT } + } else if (isUsingDynamicTheme() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + nowTheme = "${nowTheme}_dynamic" } return nowTheme } @@ -442,7 +449,7 @@ object ThemeUtil { } @JvmStatic - fun getTheme(): String { + fun getRawTheme(): String { val theme = themeState.value return when (theme.lowercase(Locale.getDefault())) { THEME_TRANSLUCENT, @@ -456,7 +463,8 @@ object ThemeUtil { THEME_RED, THEME_BLUE_DARK, THEME_GREY_DARK, - THEME_AMOLED_DARK -> theme.lowercase(Locale.getDefault()) + THEME_AMOLED_DARK, + -> theme.lowercase(Locale.getDefault()) else -> THEME_DEFAULT } diff --git a/app/src/main/java/com/huanchengfly/tieba/post/utils/TiebaLiteJavaScript.java b/app/src/main/java/com/huanchengfly/tieba/post/utils/TiebaLiteJavaScript.java index 99714b47..c3b491ce 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/utils/TiebaLiteJavaScript.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/utils/TiebaLiteJavaScript.java @@ -33,7 +33,7 @@ public class TiebaLiteJavaScript { @JavascriptInterface public String getTheme() { - return ThemeUtil.getTheme(); + return ThemeUtil.getRawTheme(); } @JavascriptInterface diff --git a/app/src/main/java/com/huanchengfly/tieba/post/utils/Util.java b/app/src/main/java/com/huanchengfly/tieba/post/utils/Util.java index 857bc478..a040376a 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/utils/Util.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/utils/Util.java @@ -93,7 +93,7 @@ public class Util { Button mButton = mView.findViewById(R.id.snackbar_action); TextView mTextView = mView.findViewById(R.id.snackbar_text); mButton.setTextAppearance(view.getContext(), R.style.TextAppearance_Bold); - if (ThemeUtil.THEME_TRANSLUCENT.equals(ThemeUtil.getTheme())) { + if (ThemeUtil.THEME_TRANSLUCENT.equals(ThemeUtil.getRawTheme())) { mView.setBackgroundTintList(ColorStateList.valueOf(view.getResources().getColor(R.color.white))); mTextView.setTextColor(view.getResources().getColor(R.color.color_text)); } else {