Skip to content

Commit 18dcaa5

Browse files
committed
feat: monet color
1 parent 4c0384f commit 18dcaa5

9 files changed

Lines changed: 32 additions & 0 deletions

File tree

app/src/main/java/io/nekohasekai/sagernet/Constants.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ object Key {
1313

1414
const val APP_EXPERT = "isExpert"
1515
const val APP_THEME = "appTheme"
16+
const val MONET_COLOR = "monetColor"
1617
const val NIGHT_THEME = "nightTheme"
1718
const val APP_LANGUAGE = "appLanguage"
1819
const val SERVICE_MODE = "serviceMode"

app/src/main/java/io/nekohasekai/sagernet/database/DataStore.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ object DataStore : OnPreferenceDataStoreChangeListener {
102102

103103
var isExpert by configurationStore.boolean(Key.APP_EXPERT)
104104
var appTheme by configurationStore.int(Key.APP_THEME)
105+
var monetColor by configurationStore.boolean(Key.MONET_COLOR) { false }
105106
var nightTheme by configurationStore.stringToInt(Key.NIGHT_THEME)
106107
var appLanguage by configurationStore.string(Key.APP_LANGUAGE) { "" }
107108
var serviceMode by configurationStore.string(Key.SERVICE_MODE) { Key.MODE_VPN }

app/src/main/java/io/nekohasekai/sagernet/ui/SettingsPreferenceFragment.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,18 @@ class SettingsPreferenceFragment : PreferenceFragmentCompat() {
6060
true
6161
}
6262

63+
val monetColor = findPreference<SwitchPreference>(Key.MONET_COLOR)!!
64+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
65+
monetColor.isVisible = false
66+
} else {
67+
appTheme.isEnabled = !DataStore.monetColor
68+
monetColor.setOnPreferenceChangeListener { _, newValue ->
69+
appTheme.isEnabled = !(newValue as Boolean)
70+
ActivityCompat.recreate(requireActivity())
71+
true
72+
}
73+
}
74+
6375
val nightTheme = findPreference<SimpleMenuPreference>(Key.NIGHT_THEME)!!
6476
nightTheme.setOnPreferenceChangeListener { _, newTheme ->
6577
Theme.currentNightMode = (newTheme as String).toInt()

app/src/main/java/io/nekohasekai/sagernet/ui/ThemedActivity.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ abstract class ThemedActivity : AppCompatActivity {
3333
}
3434
Theme.applyNightTheme()
3535

36+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && DataStore.monetColor) {
37+
com.google.android.material.color.DynamicColors.applyToActivityIfAvailable(this)
38+
}
39+
3640
super.onCreate(savedInstanceState)
3741

3842
uiMode = resources.configuration.uiMode

app/src/main/res/values-zh-rCN/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,8 @@
238238
<string name="file_manager_missing">您的设备缺少 Android 标准文件选择器, 请安装一个, 如 Material Files.</string>
239239
<string name="need_reload">重载代理服务以应用修改</string>
240240
<string name="theme">主题颜色</string>
241+
<string name="monet_color">使用系统主题色</string>
242+
<string name="monet_color_summary">使用系统动态色彩 (Android 12+)</string>
241243
<string name="donate">捐款</string>
242244
<string name="donate_info">猫猫很可爱 请给猫猫钱</string>
243245
<string name="extra_headers">附加标头</string>

app/src/main/res/values-zh-rHK/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
<string name="app_desc">以 Kotlin 編寫的 Android 通用代理工具鏈。</string>
99
<string name="group_update">更新</string>
1010
<string name="theme">主題</string>
11+
<string name="monet_color">使用系统主题色</string>
12+
<string name="monet_color_summary">使用系統動態色彩 (Android 12+)</string>
1113
<string name="document">文件</string>
1214
<string name="project">項目</string>
1315
<string name="oss_licenses">開放源碼授權條款</string>

app/src/main/res/values-zh-rTW/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,8 @@
209209
<string name="extra_headers">額外標頭</string>
210210
<string name="config_type">設定類型</string>
211211
<string name="theme">主題</string>
212+
<string name="monet_color">使用系統主題色</string>
213+
<string name="monet_color_summary">使用系統動態色彩 (Android 12+)</string>
212214
<string name="edit_config">編輯設定</string>
213215
<string name="ipv6">IPv6 路由</string>
214216
<string name="prefer">優先</string>

app/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
<string name="menu_group">Group</string>
1515
<string name="menu_about">About</string>
1616
<string name="theme">Theme</string>
17+
<string name="monet_color">Dynamic Color</string>
18+
<string name="monet_color_summary">Use system dynamic colors (Android 12+)</string>
1719
<string name="document">Document</string>
1820
<string name="group_default">Ungrouped</string>
1921
<string name="quick_toggle">Toggle</string>

app/src/main/res/xml/global_preferences.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@
1212
android:title="@string/theme"
1313
app:icon="@drawable/ic_baseline_color_lens_24"
1414
app:key="appTheme" />
15+
<SwitchPreference
16+
app:defaultValue="false"
17+
app:icon="@drawable/ic_baseline_color_lens_24"
18+
app:key="monetColor"
19+
app:title="@string/monet_color"
20+
app:summary="@string/monet_color_summary" />
1521
<moe.matsuri.nb4a.ui.SimpleMenuPreference
1622
app:defaultValue="0"
1723
app:entries="@array/night_mode"

0 commit comments

Comments
 (0)