diff --git a/res/drawable/ic_settings_themes.xml b/res/drawable/ic_settings_themes.xml
new file mode 100644
index 0000000..b99a835
--- /dev/null
+++ b/res/drawable/ic_settings_themes.xml
@@ -0,0 +1,10 @@
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/ic_system_theme.xml b/res/drawable/ic_system_theme.xml
new file mode 100644
index 0000000..1144e6f
--- /dev/null
+++ b/res/drawable/ic_system_theme.xml
@@ -0,0 +1,9 @@
+
+
+
\ No newline at end of file
diff --git a/res/values-vi/cherish_strings.xml b/res/values-vi/cherish_strings.xml
index 255f111..be55088 100644
--- a/res/values-vi/cherish_strings.xml
+++ b/res/values-vi/cherish_strings.xml
@@ -1,4 +1,4 @@
-
+
Sử dụng kiểu di động cũ
Hợp nhất các tín hiệu và loại biểu tượng
+
+ Chủ đề hệ thống
+ Lựa chọn chủ đê
+ Sáng
+ Google dark
+ Solarized dark
diff --git a/res/values/cherish_arrays.xml b/res/values/cherish_arrays.xml
index 4f7cd8b..a464bd8 100644
--- a/res/values/cherish_arrays.xml
+++ b/res/values/cherish_arrays.xml
@@ -264,4 +264,17 @@
- 4
- 5
+
+
+
+ - @string/theme_type_light
+ - @string/theme_type_pitch_black
+ - @string/theme_type_solarized_dark
+
+
+
+ - 1
+ - 2
+ - 3
+
diff --git a/res/values/cherish_strings.xml b/res/values/cherish_strings.xml
index 305d043..a6f34ed 100644
--- a/res/values/cherish_strings.xml
+++ b/res/values/cherish_strings.xml
@@ -21,6 +21,7 @@
Miscellaneous
Navigation bar
Power menu
+ Themes
Quick Settings
Recents apps
Status bar
@@ -259,5 +260,12 @@
Use old mobile type style
Merge signal and type icons
+
+
+ System theme
+ Select theme
+ Light
+ Google dark
+ Solarized dark
diff --git a/res/xml/cherish_settings.xml b/res/xml/cherish_settings.xml
index 427dee8..d88e7b7 100644
--- a/res/xml/cherish_settings.xml
+++ b/res/xml/cherish_settings.xml
@@ -30,6 +30,13 @@
android:title="@string/quicksettings_title"
android:fragment="com.cherish.settings.fragments.QuickSettings"
android:icon="@drawable/ic_settings_quicksettings"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/com/cherish/settings/fragments/ThemeSettings.java b/src/com/cherish/settings/fragments/ThemeSettings.java
new file mode 100644
index 0000000..1609f02
--- /dev/null
+++ b/src/com/cherish/settings/fragments/ThemeSettings.java
@@ -0,0 +1,114 @@
+package com.cherish.settings.fragments;
+
+import com.android.internal.logging.nano.MetricsProto;
+
+import static android.os.UserHandle.USER_SYSTEM;
+import android.app.UiModeManager;
+import android.os.Bundle;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.os.UserHandle;
+import android.content.ContentResolver;
+import android.content.res.Resources;
+import androidx.preference.ListPreference;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+import androidx.preference.PreferenceManager;
+import androidx.preference.Preference.OnPreferenceChangeListener;
+import androidx.preference.SwitchPreference;
+import com.cherish.settings.preferences.CustomSeekBarPreference;
+import android.provider.Settings;
+import com.android.settings.R;
+import com.android.settings.SettingsPreferenceFragment;
+import java.util.Locale;
+import android.text.TextUtils;
+import android.view.View;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Objects;
+
+import com.android.internal.util.cherish.ThemesUtils;
+import com.android.internal.util.cherish.Utils;
+
+public class ThemeSettings extends SettingsPreferenceFragment implements
+ OnPreferenceChangeListener {
+
+ private static final String PREF_THEME_SWITCH = "theme_switch";
+
+ private UiModeManager mUiModeManager;
+
+ private ListPreference mThemeSwitch;
+
+ @Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+
+ addPreferencesFromResource(R.xml.cherish_settings_theme);
+
+ PreferenceScreen prefScreen = getPreferenceScreen();
+ ContentResolver resolver = getActivity().getContentResolver();
+ mUiModeManager = getContext().getSystemService(UiModeManager.class);
+ setupThemeSwitchPref();
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object objValue) {
+ if (preference == mThemeSwitch) {
+ String theme_switch = (String) objValue;
+ final Context context = getContext();
+ switch (theme_switch) {
+ case "1":
+ handleBackgrounds(false, context, UiModeManager.MODE_NIGHT_NO, ThemesUtils.SOLARIZED_DARK);
+ break;
+ case "2":
+ handleBackgrounds(false, context, UiModeManager.MODE_NIGHT_YES, ThemesUtils.SOLARIZED_DARK);
+ break;
+ case "3":
+ handleBackgrounds(true, context, UiModeManager.MODE_NIGHT_YES, ThemesUtils.SOLARIZED_DARK);
+ break;
+ }
+ try {
+ mOverlayService.reloadAndroidAssets(UserHandle.USER_CURRENT);
+ mOverlayService.reloadAssets("com.android.settings", UserHandle.USER_CURRENT);
+ mOverlayService.reloadAssets("com.android.systemui", UserHandle.USER_CURRENT);
+ } catch (RemoteException ignored) {
+ }
+ }
+ return true;
+ }
+
+ private void setupThemeSwitchPref() {
+ mThemeSwitch = (ListPreference) findPreference(PREF_THEME_SWITCH);
+ mThemeSwitch.setOnPreferenceChangeListener(this);
+ if (Utils.isThemeEnabled("com.android.theme.solarizeddark.system")) {
+ mThemeSwitch.setValue("3");
+ } else if (mUiModeManager.getNightMode() == UiModeManager.MODE_NIGHT_YES) {
+ mThemeSwitch.setValue("2");
+ } else {
+ mThemeSwitch.setValue("1");
+ }
+ }
+
+ private void handleBackgrounds(Boolean state, Context context, int mode, String[] overlays) {
+ if (context != null) {
+ Objects.requireNonNull(context.getSystemService(UiModeManager.class))
+ .setNightMode(mode);
+ }
+ for (int i = 0; i < overlays.length; i++) {
+ String background = overlays[i];
+ try {
+ mOverlayService.setEnabled(background, state, USER_SYSTEM);
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsProto.MetricsEvent.CHERISH_SETTINGS;
+ }
+
+}