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" />
+
+