From 665516944ed27d00c064e63a16f6327dac9b8e6f Mon Sep 17 00:00:00 2001 From: gdlbo <41114720+gdlbo@users.noreply.github.com> Date: Tue, 27 Sep 2022 11:41:21 +0300 Subject: [PATCH] themes imp --- .../ru/vtosters/lite/ui/PreferencesUtil.java | 1 + .../lite/ui/dialogs/ThemeChanging.java | 8 ++- .../lite/ui/fragments/VTSettings.java | 54 +++++++++---------- .../ru/vtosters/lite/utils/Preferences.java | 2 +- 4 files changed, 35 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/ru/vtosters/lite/ui/PreferencesUtil.java b/app/src/main/java/ru/vtosters/lite/ui/PreferencesUtil.java index ea38e4c13..7f042b3c4 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/PreferencesUtil.java +++ b/app/src/main/java/ru/vtosters/lite/ui/PreferencesUtil.java @@ -50,6 +50,7 @@ public class PreferencesUtil { preference.setDialogTitle(title); // setDialogTitle preference.setKey(key); // setKey preference.setDefaultValue(def); // setDefaultValue + preference.setValue(def); preference.setOnPreferenceChangeListener(listener); if (icon != null) diff --git a/app/src/main/java/ru/vtosters/lite/ui/dialogs/ThemeChanging.java b/app/src/main/java/ru/vtosters/lite/ui/dialogs/ThemeChanging.java index 5bf88976f..44dccc4a9 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/dialogs/ThemeChanging.java +++ b/app/src/main/java/ru/vtosters/lite/ui/dialogs/ThemeChanging.java @@ -3,6 +3,7 @@ package ru.vtosters.lite.ui.dialogs; import static ru.vtosters.lite.utils.AndroidUtils.edit; import static ru.vtosters.lite.utils.AndroidUtils.getString; import static ru.vtosters.lite.utils.Preferences.getBoolValue; +import static ru.vtosters.lite.utils.ThemesUtils.*; import android.app.Activity; @@ -10,16 +11,18 @@ import com.vk.core.dialogs.alert.VkAlertDialog; import com.vk.core.ui.themes.VKThemeHelper; import ru.vtosters.lite.hooks.VKUIHook; +import ru.vtosters.lite.utils.Preferences; +import ru.vtosters.lite.utils.ThemesUtils; public class ThemeChanging { public static void changeTheme(Activity activity, float[] f) { - if (getBoolValue("systemtheme", true)) { + if (Preferences.systemtheme()) { new VkAlertDialog.Builder(activity) .setTitle(getString("warning")) .setMessage(getString("system_theme_warning")) .setCancelable(false) .setPositiveButton(getString("proxy_disable"), (dialogInterface, i) -> { // Отключить - edit().putBoolean("systemtheme", false).commit(); + edit().putString("currsystemtheme", !isDarkTheme() ? "dark" : "light").commit(); VKThemeHelper.b(activity, f); VKUIHook.clearWebCache(); }) @@ -27,6 +30,7 @@ public class ThemeChanging { .show(); } else { VKThemeHelper.b(activity, f); + edit().putString("currsystemtheme", !isDarkTheme() ? "dark" : "light").commit(); VKUIHook.clearWebCache(); } } diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/VTSettings.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/VTSettings.java index d015b0986..40b5825e7 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/VTSettings.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/VTSettings.java @@ -1,5 +1,6 @@ package ru.vtosters.lite.ui.fragments; +import static ru.vtosters.lite.ui.PreferencesUtil.addListPreferenceIcon; import static ru.vtosters.lite.ui.PreferencesUtil.addMaterialSwitchPreference; import static ru.vtosters.lite.ui.PreferencesUtil.addPreference; import static ru.vtosters.lite.ui.PreferencesUtil.addPreferenceCategory; @@ -70,6 +71,7 @@ import ru.vtosters.lite.utils.AndroidUtils; import ru.vtosters.lite.utils.CacheUtils; import ru.vtosters.lite.utils.Preferences; import ru.vtosters.lite.utils.SSFSUtils; +import ru.vtosters.lite.utils.ThemesUtils; public class VTSettings extends MaterialPreferenceToolbarFragment { public static String getValAsString(String stringid, Boolean value) { @@ -173,39 +175,37 @@ public class VTSettings extends MaterialPreferenceToolbarFragment { addPreferenceCategory(this, AndroidUtils.getString("vtsettdarktheme")); - addMaterialSwitchPreference(this, "", AndroidUtils.getString("vtsettdarktheme"), "", "ic_palette_outline_28", isDarkTheme(), (preference, o) -> { - final var switchPreference = (MaterialSwitchPreference) preference; - final var isDarkTheme = !switchPreference.isChecked(); - - if (Preferences.systemtheme()) { - new VkAlertDialog.Builder(requireActivity()) - .setTitle(AndroidUtils.getString("warning")) - .setMessage(AndroidUtils.getString("system_theme_warning")) - .setCancelable(false) - .setPositiveButton(AndroidUtils.getString("proxy_disable"), (dialogInterface, i) -> { // Отключить - switchPreference.setChecked(isDarkTheme); - ((MaterialSwitchPreference) findPreference("systemtheme")).setChecked(false); - requireActivity().runOnUiThread(() -> { - switchTheme(isDarkTheme); - }); - }) - .setNeutralButton(AndroidUtils.getString("cancel"), null) - .show(); - return false; - } - switchTheme(isDarkTheme); - return true; - }); - if (Build.VERSION.SDK_INT >= 28) { - addMaterialSwitchPreference(this, "systemtheme", AndroidUtils.getString("appearance_theme_use_system"), "", "ic_recent_outline_28", true, (preference, o) -> { - boolean value = (boolean) o; + addListPreferenceIcon(this, "currsystemtheme", "system", AndroidUtils.getString("appearance_theme_use_system"), "ic_palette_outline_28", "", new CharSequence[]{ + "Системная тема", "Тёмная тема", "Светлая тема" + }, new String[]{ + "system", "dark", "light" + }, (preference, o) -> { + String value = (String) o; - edit().putBoolean("systemtheme", value).commit(); + switch (value) { + case "dark": + // Night mode is active, we're using dark theme + ThemesUtils.applyTheme(ThemesUtils.getDarkTheme()); + break; + case "light": + // Night mode is not active, we're using light theme + ThemesUtils.applyTheme(ThemesUtils.getLightTheme()); + break; + } + + edit().putString("currsystemtheme", value).commit(); SystemThemeChangerHook.onThemeChanged(getResources().getConfiguration()); return true; }); + } else { + addMaterialSwitchPreference(this, "", AndroidUtils.getString("vtsettdarktheme"), "", "ic_palette_outline_28", isDarkTheme(), (preference, o) -> { + final var switchPreference = (MaterialSwitchPreference) preference; + final var isDarkTheme = !switchPreference.isChecked(); + switchTheme(isDarkTheme); + return true; + }); } if (!isGmsInstalled()) { diff --git a/app/src/main/java/ru/vtosters/lite/utils/Preferences.java b/app/src/main/java/ru/vtosters/lite/utils/Preferences.java index 40f002988..0b94db83f 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/Preferences.java +++ b/app/src/main/java/ru/vtosters/lite/utils/Preferences.java @@ -61,7 +61,7 @@ public class Preferences { } public static boolean systemtheme() { - return Build.VERSION.SDK_INT >= 28 && getBoolValue("systemtheme", true); + return Build.VERSION.SDK_INT >= 28 && AndroidUtils.getPrefsValue("currsystemtheme").equals("system"); } public static boolean authorsrecomm() {