diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml
index 22b9d8d..7b1bc5f 100644
--- a/.idea/dbnavigator.xml
+++ b/.idea/dbnavigator.xml
@@ -145,11 +145,11 @@
-
-
+
+
-
+
diff --git a/app/src/main/java/com/fatapp/oxygentoolbox/App.java b/app/src/main/java/com/fatapp/oxygentoolbox/App.java
index 0a3937a..2efc2d2 100644
--- a/app/src/main/java/com/fatapp/oxygentoolbox/App.java
+++ b/app/src/main/java/com/fatapp/oxygentoolbox/App.java
@@ -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());
}
}
}
diff --git a/app/src/main/java/com/fatapp/oxygentoolbox/ui/home/HomeFragment.java b/app/src/main/java/com/fatapp/oxygentoolbox/ui/home/HomeFragment.java
index 0f8d9cf..80b45ff 100644
--- a/app/src/main/java/com/fatapp/oxygentoolbox/ui/home/HomeFragment.java
+++ b/app/src/main/java/com/fatapp/oxygentoolbox/ui/home/HomeFragment.java
@@ -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;
}
diff --git a/app/src/main/java/com/fatapp/oxygentoolbox/ui/setting/SettingFragment.java b/app/src/main/java/com/fatapp/oxygentoolbox/ui/setting/SettingFragment.java
index ff09143..86268ea 100644
--- a/app/src/main/java/com/fatapp/oxygentoolbox/ui/setting/SettingFragment.java
+++ b/app/src/main/java/com/fatapp/oxygentoolbox/ui/setting/SettingFragment.java
@@ -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;
});
}
diff --git a/app/src/main/java/com/fatapp/oxygentoolbox/util/MultiLanguageUtils.java b/app/src/main/java/com/fatapp/oxygentoolbox/util/MultiLanguageUtils.java
index bff4b25..6bb676f 100644
--- a/app/src/main/java/com/fatapp/oxygentoolbox/util/MultiLanguageUtils.java
+++ b/app/src/main/java/com/fatapp/oxygentoolbox/util/MultiLanguageUtils.java
@@ -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 {
diff --git a/app/src/main/java/com/fatapp/oxygentoolbox/util/ResourceUtil.java b/app/src/main/java/com/fatapp/oxygentoolbox/util/ResourceUtil.java
index 4f98925..ae5b805 100644
--- a/app/src/main/java/com/fatapp/oxygentoolbox/util/ResourceUtil.java
+++ b/app/src/main/java/com/fatapp/oxygentoolbox/util/ResourceUtil.java
@@ -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);
}
diff --git a/app/src/main/java/com/fatapp/oxygentoolbox/util/SharedPreferencesUtils.java b/app/src/main/java/com/fatapp/oxygentoolbox/util/SharedPreferencesUtils.java
index a608453..f5ff92d 100644
--- a/app/src/main/java/com/fatapp/oxygentoolbox/util/SharedPreferencesUtils.java
+++ b/app/src/main/java/com/fatapp/oxygentoolbox/util/SharedPreferencesUtils.java
@@ -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
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/fatapp/oxygentoolbox/util/ToolsList.java b/app/src/main/java/com/fatapp/oxygentoolbox/util/ToolsList.java
index f0027dc..0d29d96 100644
--- a/app/src/main/java/com/fatapp/oxygentoolbox/util/ToolsList.java
+++ b/app/src/main/java/com/fatapp/oxygentoolbox/util/ToolsList.java
@@ -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();
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 25bee5c..198e62d 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -37,6 +37,12 @@
- 工具
- 收藏
+ 主题模式
+
+ - 跟随系统
+ - 亮色
+ - 深色
+
开源许可
查找
关于
diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml
index 1060723..198e62d 100644
--- a/app/src/main/res/values-zh-rHK/strings.xml
+++ b/app/src/main/res/values-zh-rHK/strings.xml
@@ -33,6 +33,16 @@
- English
启动页
+
+ - 工具
+ - 收藏
+
+ 主题模式
+
+ - 跟随系统
+ - 亮色
+ - 深色
+
开源许可
查找
关于
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 1060723..198e62d 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -33,6 +33,16 @@
- English
启动页
+
+ - 工具
+ - 收藏
+
+ 主题模式
+
+ - 跟随系统
+ - 亮色
+ - 深色
+
开源许可
查找
关于
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e9a8a86..126c44e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -41,11 +41,11 @@
- English
- - default
+ - system
- zh_CN
- en_US
- default
+ system
Launch Page
app_launch_page
@@ -57,6 +57,19 @@
- favourites
tools
+ Theme Mode
+ app_ui_mode
+
+ - Follow System
+ - Light
+ - Dark
+
+
+ - system
+ - light
+ - dark
+
+ system
OpenSource
Search
About
diff --git a/app/src/main/res/xml/fragment_setting.xml b/app/src/main/res/xml/fragment_setting.xml
index 96916d5..b74e363 100644
--- a/app/src/main/res/xml/fragment_setting.xml
+++ b/app/src/main/res/xml/fragment_setting.xml
@@ -17,6 +17,13 @@
app:key="@string/setting_launch_page_key"
app:title="@string/setting_launch_page"
app:useSimpleSummaryProvider="true" />
+