From 362adb0b2594390f3c25381f5c37d4e18b1a2009 Mon Sep 17 00:00:00 2001 From: Mazda-- Date: Mon, 20 Jan 2020 10:27:44 +0700 Subject: [PATCH] Cherish: Add DU themes [3/3] SDB: Adapt for AOSP Settings Special Thanks to @imjyotiraditya for the help --- res/drawable/ic_settings_themes.xml | 10 ++ res/drawable/ic_system_theme.xml | 9 ++ res/values-vi/cherish_strings.xml | 9 +- res/values/cherish_arrays.xml | 13 ++ res/values/cherish_strings.xml | 8 ++ res/xml/cherish_settings.xml | 7 ++ res/xml/cherish_settings_theme.xml | 37 ++++++ .../settings/fragments/ThemeSettings.java | 114 ++++++++++++++++++ 8 files changed, 206 insertions(+), 1 deletion(-) create mode 100644 res/drawable/ic_settings_themes.xml create mode 100644 res/drawable/ic_system_theme.xml create mode 100644 res/xml/cherish_settings_theme.xml create mode 100644 src/com/cherish/settings/fragments/ThemeSettings.java 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; + } + +}