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 {