From 0f6264b15ee35d9262c889c9a63f8b9656fabc2c Mon Sep 17 00:00:00 2001 From: DerGoogler Date: Mon, 16 May 2022 17:25:59 +0200 Subject: [PATCH] Add language selector (#80), Remove force english language [Beta] --- app/src/main/AndroidManifest.xml | 3 +- .../fox2code/mmm/compat/CompatActivity.java | 11 +++++ .../fox2code/mmm/compat/CompatWrapper.java | 40 +++++++++++++++++++ .../mmm/settings/SettingsActivity.java | 34 ++++++++++------ app/src/main/res/values/strings.xml | 2 + app/src/main/res/xml/root_preferences.xml | 12 +++--- 6 files changed, 81 insertions(+), 21 deletions(-) create mode 100644 app/src/main/java/com/fox2code/mmm/compat/CompatWrapper.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 95ec1fe..0f0ec7d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -32,7 +32,8 @@ android:dataExtractionRules="@xml/data_extraction_rules" android:networkSecurityConfig="@xml/network_security_config" android:usesCleartextTraffic="false" - tools:targetApi="s"> + tools:targetApi="s" + tools:replace="android:supportsRtl"> diff --git a/app/src/main/java/com/fox2code/mmm/compat/CompatActivity.java b/app/src/main/java/com/fox2code/mmm/compat/CompatActivity.java index 32bdeb1..8630100 100644 --- a/app/src/main/java/com/fox2code/mmm/compat/CompatActivity.java +++ b/app/src/main/java/com/fox2code/mmm/compat/CompatActivity.java @@ -5,6 +5,7 @@ import android.app.Application; import android.content.Context; import android.content.ContextWrapper; import android.content.Intent; +import android.content.SharedPreferences; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.drawable.Drawable; @@ -36,6 +37,7 @@ import androidx.core.content.ContextCompat; import androidx.core.graphics.ColorUtils; import androidx.core.view.WindowInsetsCompat; import androidx.fragment.app.Fragment; +import androidx.preference.PreferenceManager; import com.fox2code.mmm.Constants; import com.fox2code.mmm.R; @@ -68,6 +70,7 @@ public class CompatActivity extends AppCompatActivity { private CompatActivity.OnBackPressedCallback onBackPressedCallback; private MenuItem.OnMenuItemClickListener menuClickListener; private CharSequence menuContentDescription; + private SharedPreferences mSharedPreferences; @StyleRes private int setThemeDynamic = 0; private boolean onCreateCalledOnce = false; @@ -546,6 +549,14 @@ public class CompatActivity extends AppCompatActivity { return (CompatActivity) context; } + @Override + protected void attachBaseContext(Context newBase) { + mSharedPreferences= PreferenceManager.getDefaultSharedPreferences(newBase); + Locale locale = new Locale(mSharedPreferences.getString("user_preferred_language", "en")); + Context context = CompatWrapper.setLocale(newBase, locale); + super.attachBaseContext(context); + } + public WeakReference asWeakReference() { return this.selfReference; } diff --git a/app/src/main/java/com/fox2code/mmm/compat/CompatWrapper.java b/app/src/main/java/com/fox2code/mmm/compat/CompatWrapper.java new file mode 100644 index 0000000..04b1b85 --- /dev/null +++ b/app/src/main/java/com/fox2code/mmm/compat/CompatWrapper.java @@ -0,0 +1,40 @@ +package com.fox2code.mmm.compat; + +import android.content.Context; +import android.content.ContextWrapper; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.os.Build; +import android.os.LocaleList; + +import java.util.Locale; + +public class CompatWrapper extends android.content.ContextWrapper { + + public CompatWrapper(Context base) { + super(base); + } + + public static ContextWrapper setLocale(Context context, Locale newLocale) { + + Resources res = context.getResources(); + Configuration configuration = res.getConfiguration(); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + configuration.setLocale(newLocale); + + LocaleList localeList = new LocaleList(newLocale); + LocaleList.setDefault(localeList); + configuration.setLocales(localeList); + + context = context.createConfigurationContext(configuration); + + } else { + configuration.setLocale(newLocale); + context = context.createConfigurationContext(configuration); + + } + + return new ContextWrapper(context); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fox2code/mmm/settings/SettingsActivity.java b/app/src/main/java/com/fox2code/mmm/settings/SettingsActivity.java index ad77f20..28942b1 100644 --- a/app/src/main/java/com/fox2code/mmm/settings/SettingsActivity.java +++ b/app/src/main/java/com/fox2code/mmm/settings/SettingsActivity.java @@ -13,6 +13,7 @@ import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; import androidx.preference.TwoStatePreference; +import com.ahmedjazzar.rosetta.LanguageSwitcher; import com.fox2code.mmm.AppUpdateManager; import com.fox2code.mmm.BuildConfig; import com.fox2code.mmm.Constants; @@ -29,6 +30,9 @@ import com.fox2code.mmm.utils.IntentHelper; import com.mikepenz.aboutlibraries.LibsBuilder; import com.topjohnwu.superuser.internal.UiThreadHandler; +import java.util.HashSet; +import java.util.Locale; + public class SettingsActivity extends CompatActivity { private static int devModeStep = 0; @@ -89,24 +93,28 @@ public class SettingsActivity extends CompatActivity { disableMonet.setEnabled(false); } - Preference forceEnglish = findPreference("pref_force_english"); - forceEnglish.setOnPreferenceChangeListener((preference, newValue) -> { - CompatThemeWrapper compatThemeWrapper = - MainApplication.getINSTANCE().getMarkwonThemeContext(); - if (compatThemeWrapper != null) { - compatThemeWrapper.setForceEnglish( - Boolean.parseBoolean(String.valueOf(newValue))); - } - return true; - }); - if (!MainApplication.isDeveloper()) { - forceEnglish.setVisible(false); - } findPreference("pref_dns_over_https").setOnPreferenceChangeListener((p, v) -> { Http.setDoh((Boolean) v); return true; }); + // This is the locale that you wanna your app to launch with. + Locale firstLaunchLocale = new Locale("en"); + + HashSet supportedLocales = new HashSet<>(); + supportedLocales.add(Locale.US); + supportedLocales.add(Locale.CHINA); + supportedLocales.add(Locale.GERMAN); + supportedLocales.add(firstLaunchLocale); + + Preference languageSelector = findPreference("pref_language_selector"); + languageSelector.setOnPreferenceClickListener(preference -> { + LanguageSwitcher ls = new LanguageSwitcher(getActivity(), firstLaunchLocale); + ls.showChangeLanguageDialog(getActivity()); + ls.setSupportedLocales(supportedLocales); + return true; + }); + int nightModeFlags = getContext().getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7ea6749..6cd9c7a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -31,9 +31,11 @@ Requires Android 6.0+ Requires Android 12+ Reboot + Language @android:string/yes @android:string/no @android:string/ok + @android:string/cancel Last version: diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 5e43688..0e8c356 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -43,6 +43,11 @@ app:entryValues="@array/theme_values" app:singleLineTitle="false" /> + + - -