diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0de361b90..5720257b5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -59,18 +59,21 @@ @@ -82,37 +85,44 @@ @@ -174,37 +184,44 @@ + android:colorMode="wideColorGamut" + android:configChanges="uiMode" /> @@ -214,12 +231,14 @@ @@ -227,52 +246,62 @@ + android:colorMode="wideColorGamut" + android:configChanges="uiMode" /> @@ -290,6 +319,7 @@ @@ -301,11 +331,13 @@ diff --git a/app/src/main/java/me/ykrank/s1next/data/pref/GeneralPreferences.kt b/app/src/main/java/me/ykrank/s1next/data/pref/GeneralPreferences.kt index 1c0375ac2..f23848ecc 100644 --- a/app/src/main/java/me/ykrank/s1next/data/pref/GeneralPreferences.kt +++ b/app/src/main/java/me/ykrank/s1next/data/pref/GeneralPreferences.kt @@ -15,6 +15,9 @@ class GeneralPreferencesImpl(context: Context, sharedPreferences: SharedPreferen override var themeIndex: Int by PreferenceDelegates.int( R.string.pref_key_theme, R.string.pref_theme_default_value) + override var darkThemeIndex: Int by PreferenceDelegates.int( + R.string.pref_key_dark_theme, R.string.pref_dark_theme_default_value) + override val fontScale: Float get() = getPrefString(R.string.pref_key_font_size, R.string.pref_font_size_default_value)?.toFloat()?:1.0f @@ -33,6 +36,7 @@ class GeneralPreferencesImpl(context: Context, sharedPreferences: SharedPreferen interface GeneralPreferences { var themeIndex: Int + var darkThemeIndex: Int val fontScale: Float val isSignatureEnabled: Boolean var isPostSelectable: Boolean diff --git a/app/src/main/java/me/ykrank/s1next/data/pref/ThemeManager.java b/app/src/main/java/me/ykrank/s1next/data/pref/ThemeManager.java index eecca858f..5d4f36191 100644 --- a/app/src/main/java/me/ykrank/s1next/data/pref/ThemeManager.java +++ b/app/src/main/java/me/ykrank/s1next/data/pref/ThemeManager.java @@ -1,6 +1,7 @@ package me.ykrank.s1next.data.pref; import android.content.Context; +import android.content.res.Configuration; import android.content.res.TypedArray; import androidx.annotation.ColorInt; import androidx.annotation.IntDef; @@ -49,7 +50,14 @@ public final class ThemeManager { @Override public Theme get() { - Theme theme = Theme.VALUES.get(mGeneralPreferencesProvider.getThemeIndex()); + Theme theme; + + int currentNightMode = mContext.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; + if (currentNightMode == Configuration.UI_MODE_NIGHT_YES) { + theme = Theme.VALUES.get(mGeneralPreferencesProvider.getDarkThemeIndex()); + } else { + theme = Theme.VALUES.get(mGeneralPreferencesProvider.getThemeIndex()); + } invalidateAccentColor(theme); return theme; diff --git a/app/src/main/java/me/ykrank/s1next/view/activity/BaseActivity.kt b/app/src/main/java/me/ykrank/s1next/view/activity/BaseActivity.kt index c169f531a..68c416b59 100644 --- a/app/src/main/java/me/ykrank/s1next/view/activity/BaseActivity.kt +++ b/app/src/main/java/me/ykrank/s1next/view/activity/BaseActivity.kt @@ -104,6 +104,7 @@ abstract class BaseActivity : LibBaseActivity() { } } + super.onCreate(savedInstanceState) mRxBus.get() @@ -223,7 +224,8 @@ abstract class BaseActivity : LibBaseActivity() { super.onConfigurationChanged(newConfig) drawerLayoutDelegate?.onConfigurationChanged(newConfig) - + mThemeManager.invalidateTheme() + mRxBus.post(ThemeChangeEvent()) } /** diff --git a/app/src/main/java/me/ykrank/s1next/view/fragment/setting/GeneralPreferenceFragment.kt b/app/src/main/java/me/ykrank/s1next/view/fragment/setting/GeneralPreferenceFragment.kt index 7149ca8a2..97c1ff658 100644 --- a/app/src/main/java/me/ykrank/s1next/view/fragment/setting/GeneralPreferenceFragment.kt +++ b/app/src/main/java/me/ykrank/s1next/view/fragment/setting/GeneralPreferenceFragment.kt @@ -72,7 +72,7 @@ class GeneralPreferenceFragment : BasePreferenceFragment(), Preference.OnPrefere if (!isAdded) { return } - if (key == getString(R.string.pref_key_theme)) { + if (key == getString(R.string.pref_key_theme) || key == getString(R.string.pref_key_dark_theme)) { trackAgent.post(ThemeChangeTrackEvent(false)) mThemeManager.invalidateTheme() mRxBus.post(ThemeChangeEvent()) diff --git a/app/src/main/java/me/ykrank/s1next/view/page/post/PostListFragment.kt b/app/src/main/java/me/ykrank/s1next/view/page/post/PostListFragment.kt index 85a6c2bc9..61569e758 100644 --- a/app/src/main/java/me/ykrank/s1next/view/page/post/PostListFragment.kt +++ b/app/src/main/java/me/ykrank/s1next/view/page/post/PostListFragment.kt @@ -100,6 +100,7 @@ class PostListFragment : BaseViewPagerFragment(), PostListPagerFragment.PagerCal trackAgent.post(ViewThreadTrackEvent(mThreadTitle, mThreadId, hashMapOf( Pair("Type", type.toString()), Pair("Theme", mGeneralPreferencesManager.themeIndex.toString()), + Pair("Dark Theme", mGeneralPreferencesManager.darkThemeIndex.toString()), Pair("FontScale", mGeneralPreferencesManager.fontScale.toString()), Pair("SignatureEnabled", mGeneralPreferencesManager.isSignatureEnabled.toString()), Pair("PostSelectable", mGeneralPreferencesManager.isPostSelectable.toString()), diff --git a/app/src/main/res/values-zh-rTW/string_pref_value.xml b/app/src/main/res/values-zh-rTW/string_pref_value.xml index 6b436a32f..e6e024995 100644 --- a/app/src/main/res/values-zh-rTW/string_pref_value.xml +++ b/app/src/main/res/values-zh-rTW/string_pref_value.xml @@ -5,6 +5,8 @@      主題      + 深色主題 +      字體大小      尾巴 diff --git a/app/src/main/res/values-zh/string_pref_value.xml b/app/src/main/res/values-zh/string_pref_value.xml index e34a4c7bf..6e1563e9b 100644 --- a/app/src/main/res/values-zh/string_pref_value.xml +++ b/app/src/main/res/values-zh/string_pref_value.xml @@ -2,6 +2,7 @@ 常规 主题 + 深色主题 字体大小 尾巴 高级 diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 1f9044917..a3512eeb1 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -35,6 +35,32 @@ 8 + + + @string/pref_theme_entries_0 + @string/pref_theme_entries_1 + @string/pref_theme_entries_2 + @string/pref_theme_entries_3 + @string/pref_theme_entries_4 + @string/pref_theme_entries_5 + @string/pref_theme_entries_6 + @string/pref_theme_entries_7 + @string/pref_theme_entries_8 + + + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + + + @string/pref_font_size_entries_1 @string/pref_font_size_entries_2 diff --git a/app/src/main/res/values/string_pref_key.xml b/app/src/main/res/values/string_pref_key.xml index e6c0e8882..7f6342e66 100644 --- a/app/src/main/res/values/string_pref_key.xml +++ b/app/src/main/res/values/string_pref_key.xml @@ -2,6 +2,7 @@ pref_key_theme + pref_key_dark_theme pref_key_font_size_v2 pref_key_signature pref_key_downloads diff --git a/app/src/main/res/values/string_pref_value.xml b/app/src/main/res/values/string_pref_value.xml index 9a0d92d6d..5a2bdc0bb 100644 --- a/app/src/main/res/values/string_pref_value.xml +++ b/app/src/main/res/values/string_pref_value.xml @@ -4,6 +4,8 @@ General Theme 0 + Dark Theme + 6 Font size 1.0 Signature diff --git a/app/src/main/res/xml/preference_general.xml b/app/src/main/res/xml/preference_general.xml index b08893e27..bdbd6c9d3 100644 --- a/app/src/main/res/xml/preference_general.xml +++ b/app/src/main/res/xml/preference_general.xml @@ -19,6 +19,17 @@ android:title="@string/pref_theme" app:iconSpaceReserved="false" /> + +