mirror of
https://github.com/FatttSnake/OxygenToolbox.git
synced 2026-04-06 01:01:27 +08:00
Added theme mode switch
This commit is contained in:
6
.idea/dbnavigator.xml
generated
6
.idea/dbnavigator.xml
generated
@@ -145,11 +145,11 @@
|
||||
<nulls-first value="true" />
|
||||
<max-sorting-columns value="4" />
|
||||
</sorting>
|
||||
<tracking-columns>
|
||||
<columnNames value="" />
|
||||
<audit-columns>
|
||||
<column-names value="" />
|
||||
<visible value="true" />
|
||||
<editable value="false" />
|
||||
</tracking-columns>
|
||||
</audit-columns>
|
||||
</dataset-grid-settings>
|
||||
<dataset-editor-settings>
|
||||
<text-editor-popup>
|
||||
|
||||
@@ -4,11 +4,7 @@ import android.app.Activity;
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.LocaleList;
|
||||
import android.util.DisplayMetrics;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -17,8 +13,6 @@ import com.fatapp.oxygentoolbox.util.MultiLanguageUtils;
|
||||
import com.fatapp.oxygentoolbox.util.ResourceUtil;
|
||||
import com.fatapp.oxygentoolbox.util.SharedPreferencesUtils;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public class App extends Application {
|
||||
@Override
|
||||
public void onCreate() {
|
||||
@@ -27,9 +21,10 @@ public class App extends Application {
|
||||
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
|
||||
@Override
|
||||
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle bundle) {
|
||||
ResourceUtil.init(App.this);
|
||||
SharedPreferencesUtils.init(App.this);
|
||||
setAppLanguage(getApplicationContext(), SharedPreferencesUtils.getLanguage());
|
||||
ResourceUtil.init(App.this);
|
||||
ResourceUtil.setAppLocale(SharedPreferencesUtils.getPreferenceLocale());
|
||||
loadAppUiMode();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -75,23 +70,16 @@ public class App extends Application {
|
||||
MultiLanguageUtils.attachBaseContext(this);
|
||||
}
|
||||
|
||||
|
||||
private static void setAppLanguage(Context context, Locale locale) {
|
||||
Resources resources = context.getResources();
|
||||
Configuration configuration = resources.getConfiguration();
|
||||
DisplayMetrics displayMetrics = resources.getDisplayMetrics();
|
||||
//Android 7.0以上的方法
|
||||
if (Build.VERSION.SDK_INT >= 24) {
|
||||
configuration.setLocale(locale);
|
||||
configuration.setLocales(new LocaleList(locale));
|
||||
context.createConfigurationContext(configuration);
|
||||
//实测,updateConfiguration这个方法虽然很多博主说是版本不适用
|
||||
//但是我的生产环境androidX+Android Q环境下,必须加上这一句,才可以通过重启App来切换语言
|
||||
resources.updateConfiguration(configuration, displayMetrics);
|
||||
} else {
|
||||
//Android 4.1 以上方法
|
||||
configuration.setLocale(locale);
|
||||
resources.updateConfiguration(configuration, displayMetrics);
|
||||
public static void loadAppUiMode() {
|
||||
switch (SharedPreferencesUtils.getPreferenceUiMode()) {
|
||||
case light:
|
||||
ResourceUtil.setAppUiMode(ResourceUtil.UI_MODE_LIGHT);
|
||||
break;
|
||||
case dark:
|
||||
ResourceUtil.setAppUiMode(ResourceUtil.UI_MODE_DARK);
|
||||
break;
|
||||
default:
|
||||
ResourceUtil.setAppUiMode(ResourceUtil.getSystemUiMode());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ public class HomeFragment extends Fragment {
|
||||
}
|
||||
});
|
||||
|
||||
bottomNavViewPager.setCurrentItem(SharedPreferencesUtils.getLaunchPage() == SharedPreferencesUtils.LaunchPage.tools ? 0 : 1, false);
|
||||
bottomNavViewPager.setCurrentItem(SharedPreferencesUtils.getPreferenceLaunchPage() == SharedPreferencesUtils.LaunchPage.tools ? 0 : 1, false);
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
package com.fatapp.oxygentoolbox.ui.setting;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.navigation.Navigation;
|
||||
import androidx.preference.ListPreference;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceFragmentCompat;
|
||||
|
||||
import com.fatapp.oxygentoolbox.MainActivity;
|
||||
import com.fatapp.oxygentoolbox.R;
|
||||
import com.fatapp.oxygentoolbox.ui.about.LibrariesActivity;
|
||||
import com.fatapp.oxygentoolbox.util.ResourceUtil;
|
||||
|
||||
public class SettingFragment extends PreferenceFragmentCompat {
|
||||
@@ -21,10 +23,7 @@ public class SettingFragment extends PreferenceFragmentCompat {
|
||||
ListPreference appLanguagePreference = findPreference(ResourceUtil.getString(R.string.setting_language_key));
|
||||
if (appLanguagePreference != null) {
|
||||
appLanguagePreference.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
Intent intent = new Intent(getActivity(), MainActivity.class);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
||||
requireActivity().startActivity(intent);
|
||||
requireActivity().finish();
|
||||
ResourceUtil.restartActivity(requireActivity(), MainActivity.class);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
@@ -32,10 +31,20 @@ public class SettingFragment extends PreferenceFragmentCompat {
|
||||
Preference aboutPreference = findPreference(ResourceUtil.getString(R.string.setting_about_oxygen_toolbox_key));
|
||||
if (aboutPreference != null) {
|
||||
aboutPreference.setOnPreferenceClickListener(preference -> {
|
||||
/*
|
||||
Intent intent = new Intent(getActivity(), LibrariesActivity.class);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
startActivity(intent);
|
||||
// Navigation.findNavController(requireView()).navigate(R.id.action_setting_to_about);
|
||||
*/
|
||||
Navigation.findNavController(requireView()).navigate(R.id.action_setting_to_about);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
ListPreference uiModePreference = findPreference(ResourceUtil.getString(R.string.setting_ui_mode_key));
|
||||
if (uiModePreference != null) {
|
||||
uiModePreference.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
ResourceUtil.restartActivity(requireActivity(), MainActivity.class);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -10,12 +10,11 @@ import android.util.DisplayMetrics;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Objects;
|
||||
|
||||
public class MultiLanguageUtils {
|
||||
|
||||
public static Context attachBaseContext(Context context) {
|
||||
Locale locale = SharedPreferencesUtils.getLanguage();
|
||||
Locale locale = SharedPreferencesUtils.getPreferenceLocale();
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
|
||||
return createConfigurationContext(context, locale.getLanguage(), locale.getCountry());
|
||||
} else {
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
package com.fatapp.oxygentoolbox.util;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Build;
|
||||
import android.os.LocaleList;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.Window;
|
||||
|
||||
@@ -25,11 +28,17 @@ import java.util.Locale;
|
||||
import java.util.Objects;
|
||||
|
||||
public final class ResourceUtil {
|
||||
private static int UI_MODE_SYSTEM;
|
||||
public static final int UI_MODE_LIGHT = Configuration.UI_MODE_NIGHT_NO + Configuration.UI_MODE_TYPE_NORMAL;
|
||||
public static final int UI_MODE_DARK = Configuration.UI_MODE_NIGHT_YES + Configuration.UI_MODE_TYPE_NORMAL;
|
||||
|
||||
private static Application sApp;
|
||||
|
||||
public static void init(Application app) {
|
||||
sApp = app;
|
||||
if (UI_MODE_SYSTEM == 0) {
|
||||
UI_MODE_SYSTEM = getAppUiMode();
|
||||
}
|
||||
}
|
||||
|
||||
public static Application getApplication() {
|
||||
@@ -110,6 +119,41 @@ public final class ResourceUtil {
|
||||
return ConfigurationCompat.getLocales(configuration);
|
||||
}
|
||||
|
||||
public static void setAppLocale(Locale locale) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
getConfiguration().setLocale(locale);
|
||||
getConfiguration().setLocales(new LocaleList(locale));
|
||||
getApplication().createConfigurationContext(getConfiguration());
|
||||
} else {
|
||||
getConfiguration().setLocale(locale);
|
||||
}
|
||||
updateConfiguration();
|
||||
}
|
||||
|
||||
public static int getSystemUiMode() {
|
||||
return UI_MODE_SYSTEM;
|
||||
}
|
||||
|
||||
public static int getAppUiMode() {
|
||||
return getConfiguration().uiMode;
|
||||
}
|
||||
|
||||
public static void setAppUiMode(int uiMode) {
|
||||
getConfiguration().uiMode = uiMode;
|
||||
updateConfiguration();
|
||||
}
|
||||
|
||||
private static void updateConfiguration() {
|
||||
getResources().updateConfiguration(getConfiguration(), getDisplayMetrics());
|
||||
}
|
||||
|
||||
public static void restartActivity(Activity activity, Class<?> cls) {
|
||||
Intent intent = new Intent(activity, cls);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
||||
activity.startActivity(intent);
|
||||
activity.finish();
|
||||
}
|
||||
|
||||
public static int dpToPx(float dp) {
|
||||
return (int) (dp * getDisplayMetrics().density + 0.5f);
|
||||
}
|
||||
|
||||
@@ -17,7 +17,11 @@ public class SharedPreferencesUtils {
|
||||
preferences = PreferenceManager.getDefaultSharedPreferences(app);
|
||||
}
|
||||
|
||||
public static Locale getLanguage() {
|
||||
public static boolean isNull() {
|
||||
return preferences == null;
|
||||
}
|
||||
|
||||
public static Locale getPreferenceLocale() {
|
||||
String languagePreference;
|
||||
String language;
|
||||
String country;
|
||||
@@ -33,15 +37,21 @@ public class SharedPreferencesUtils {
|
||||
return new Locale(language, country);
|
||||
}
|
||||
|
||||
public static boolean isNull() {
|
||||
return preferences == null;
|
||||
}
|
||||
|
||||
public static LaunchPage getLaunchPage() {
|
||||
public static LaunchPage getPreferenceLaunchPage() {
|
||||
return LaunchPage.valueOf(preferences.getString(ResourceUtil.getString(R.string.setting_launch_page_key), ResourceUtil.getString(R.string.setting_launch_page_default_value)));
|
||||
}
|
||||
|
||||
public enum LaunchPage {
|
||||
tools,favourites
|
||||
public static UiMode getPreferenceUiMode() {
|
||||
return UiMode.valueOf(preferences.getString(ResourceUtil.getString(R.string.setting_ui_mode_key), ResourceUtil.getString(R.string.setting_ui_mode_default_value)));
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public enum LaunchPage {
|
||||
tools, favourites
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public enum UiMode {
|
||||
system, light, dark
|
||||
}
|
||||
}
|
||||
@@ -41,7 +41,7 @@ public class ToolsList {
|
||||
}
|
||||
|
||||
private static String getLocale(Locales strings) {
|
||||
if (SharedPreferencesUtils.getLanguage().getLanguage().equals("zh")) {
|
||||
if (SharedPreferencesUtils.getPreferenceLocale().getLanguage().equals("zh")) {
|
||||
return strings.getCn();
|
||||
}
|
||||
return strings.getEn();
|
||||
|
||||
@@ -37,6 +37,12 @@
|
||||
<item>工具</item>
|
||||
<item>收藏</item>
|
||||
</string-array>
|
||||
<string name="setting_ui_mode">主题模式</string>
|
||||
<string-array name="setting_ui_mode_array">
|
||||
<item>跟随系统</item>
|
||||
<item>亮色</item>
|
||||
<item>深色</item>
|
||||
</string-array>
|
||||
<string name="setting_open_source">开源许可</string>
|
||||
<string name="setting_search">查找</string>
|
||||
<string name="setting_about">关于</string>
|
||||
|
||||
@@ -33,6 +33,16 @@
|
||||
<item>English</item>
|
||||
</string-array>
|
||||
<string name="setting_launch_page">启动页</string>
|
||||
<string-array name="setting_launch_page_array">
|
||||
<item>工具</item>
|
||||
<item>收藏</item>
|
||||
</string-array>
|
||||
<string name="setting_ui_mode">主题模式</string>
|
||||
<string-array name="setting_ui_mode_array">
|
||||
<item>跟随系统</item>
|
||||
<item>亮色</item>
|
||||
<item>深色</item>
|
||||
</string-array>
|
||||
<string name="setting_open_source">开源许可</string>
|
||||
<string name="setting_search">查找</string>
|
||||
<string name="setting_about">关于</string>
|
||||
|
||||
@@ -33,6 +33,16 @@
|
||||
<item>English</item>
|
||||
</string-array>
|
||||
<string name="setting_launch_page">启动页</string>
|
||||
<string-array name="setting_launch_page_array">
|
||||
<item>工具</item>
|
||||
<item>收藏</item>
|
||||
</string-array>
|
||||
<string name="setting_ui_mode">主题模式</string>
|
||||
<string-array name="setting_ui_mode_array">
|
||||
<item>跟随系统</item>
|
||||
<item>亮色</item>
|
||||
<item>深色</item>
|
||||
</string-array>
|
||||
<string name="setting_open_source">开源许可</string>
|
||||
<string name="setting_search">查找</string>
|
||||
<string name="setting_about">关于</string>
|
||||
|
||||
@@ -41,11 +41,11 @@
|
||||
<item>English</item>
|
||||
</string-array>
|
||||
<string-array name="setting_language_values">
|
||||
<item>default</item>
|
||||
<item>system</item>
|
||||
<item>zh_CN</item>
|
||||
<item>en_US</item>
|
||||
</string-array>
|
||||
<string name="setting_language_default_value" translatable="false">default</string>
|
||||
<string name="setting_language_default_value" translatable="false">system</string>
|
||||
<string name="setting_launch_page">Launch Page</string>
|
||||
<string name="setting_launch_page_key" translatable="false">app_launch_page</string>
|
||||
<string-array name="setting_launch_page_array">
|
||||
@@ -57,6 +57,19 @@
|
||||
<item>favourites</item>
|
||||
</string-array>
|
||||
<string name="setting_launch_page_default_value" translatable="false">tools</string>
|
||||
<string name="setting_ui_mode">Theme Mode</string>
|
||||
<string name="setting_ui_mode_key" translatable="false">app_ui_mode</string>
|
||||
<string-array name="setting_ui_mode_array">
|
||||
<item>Follow System</item>
|
||||
<item>Light</item>
|
||||
<item>Dark</item>
|
||||
</string-array>
|
||||
<string-array name="setting_ui_mode_values">
|
||||
<item>system</item>
|
||||
<item>light</item>
|
||||
<item>dark</item>
|
||||
</string-array>
|
||||
<string name="setting_ui_mode_default_value" translatable="false">system</string>
|
||||
<string name="setting_open_source">OpenSource</string>
|
||||
<string name="setting_search">Search</string>
|
||||
<string name="setting_about">About</string>
|
||||
|
||||
@@ -17,6 +17,13 @@
|
||||
app:key="@string/setting_launch_page_key"
|
||||
app:title="@string/setting_launch_page"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
<ListPreference
|
||||
app:defaultValue="@string/setting_ui_mode_default_value"
|
||||
app:entries="@array/setting_ui_mode_array"
|
||||
app:entryValues="@array/setting_ui_mode_values"
|
||||
app:key="@string/setting_ui_mode_key"
|
||||
app:title="@string/setting_ui_mode"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory app:title="@string/setting_about">
|
||||
|
||||
Reference in New Issue
Block a user