Skip to content
This repository was archived by the owner on May 4, 2023. It is now read-only.

Commit 0f6264b

Browse files
committed
Add language selector (#80), Remove force english language [Beta]
1 parent 328ee8d commit 0f6264b

File tree

6 files changed

+81
-21
lines changed

6 files changed

+81
-21
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232
android:dataExtractionRules="@xml/data_extraction_rules"
3333
android:networkSecurityConfig="@xml/network_security_config"
3434
android:usesCleartextTraffic="false"
35-
tools:targetApi="s">
35+
tools:targetApi="s"
36+
tools:replace="android:supportsRtl">
3637
<receiver android:name="com.fox2code.mmm.manager.ModuleBootReceive"
3738
android:exported="true">
3839
<intent-filter>

app/src/main/java/com/fox2code/mmm/compat/CompatActivity.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.content.Context;
66
import android.content.ContextWrapper;
77
import android.content.Intent;
8+
import android.content.SharedPreferences;
89
import android.content.res.Configuration;
910
import android.content.res.Resources;
1011
import android.graphics.drawable.Drawable;
@@ -36,6 +37,7 @@
3637
import androidx.core.graphics.ColorUtils;
3738
import androidx.core.view.WindowInsetsCompat;
3839
import androidx.fragment.app.Fragment;
40+
import androidx.preference.PreferenceManager;
3941

4042
import com.fox2code.mmm.Constants;
4143
import com.fox2code.mmm.R;
@@ -68,6 +70,7 @@ public boolean onBackPressed(CompatActivity compatActivity) {
6870
private CompatActivity.OnBackPressedCallback onBackPressedCallback;
6971
private MenuItem.OnMenuItemClickListener menuClickListener;
7072
private CharSequence menuContentDescription;
73+
private SharedPreferences mSharedPreferences;
7174
@StyleRes
7275
private int setThemeDynamic = 0;
7376
private boolean onCreateCalledOnce = false;
@@ -546,6 +549,14 @@ public static CompatActivity getCompatActivity(Context context) {
546549
return (CompatActivity) context;
547550
}
548551

552+
@Override
553+
protected void attachBaseContext(Context newBase) {
554+
mSharedPreferences= PreferenceManager.getDefaultSharedPreferences(newBase);
555+
Locale locale = new Locale(mSharedPreferences.getString("user_preferred_language", "en"));
556+
Context context = CompatWrapper.setLocale(newBase, locale);
557+
super.attachBaseContext(context);
558+
}
559+
549560
public WeakReference<CompatActivity> asWeakReference() {
550561
return this.selfReference;
551562
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.fox2code.mmm.compat;
2+
3+
import android.content.Context;
4+
import android.content.ContextWrapper;
5+
import android.content.res.Configuration;
6+
import android.content.res.Resources;
7+
import android.os.Build;
8+
import android.os.LocaleList;
9+
10+
import java.util.Locale;
11+
12+
public class CompatWrapper extends android.content.ContextWrapper {
13+
14+
public CompatWrapper(Context base) {
15+
super(base);
16+
}
17+
18+
public static ContextWrapper setLocale(Context context, Locale newLocale) {
19+
20+
Resources res = context.getResources();
21+
Configuration configuration = res.getConfiguration();
22+
23+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
24+
configuration.setLocale(newLocale);
25+
26+
LocaleList localeList = new LocaleList(newLocale);
27+
LocaleList.setDefault(localeList);
28+
configuration.setLocales(localeList);
29+
30+
context = context.createConfigurationContext(configuration);
31+
32+
} else {
33+
configuration.setLocale(newLocale);
34+
context = context.createConfigurationContext(configuration);
35+
36+
}
37+
38+
return new ContextWrapper(context);
39+
}
40+
}

app/src/main/java/com/fox2code/mmm/settings/SettingsActivity.java

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import androidx.preference.PreferenceFragmentCompat;
1414
import androidx.preference.TwoStatePreference;
1515

16+
import com.ahmedjazzar.rosetta.LanguageSwitcher;
1617
import com.fox2code.mmm.AppUpdateManager;
1718
import com.fox2code.mmm.BuildConfig;
1819
import com.fox2code.mmm.Constants;
@@ -29,6 +30,9 @@
2930
import com.mikepenz.aboutlibraries.LibsBuilder;
3031
import com.topjohnwu.superuser.internal.UiThreadHandler;
3132

33+
import java.util.HashSet;
34+
import java.util.Locale;
35+
3236
public class SettingsActivity extends CompatActivity {
3337
private static int devModeStep = 0;
3438

@@ -89,24 +93,28 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
8993
disableMonet.setEnabled(false);
9094
}
9195

92-
Preference forceEnglish = findPreference("pref_force_english");
93-
forceEnglish.setOnPreferenceChangeListener((preference, newValue) -> {
94-
CompatThemeWrapper compatThemeWrapper =
95-
MainApplication.getINSTANCE().getMarkwonThemeContext();
96-
if (compatThemeWrapper != null) {
97-
compatThemeWrapper.setForceEnglish(
98-
Boolean.parseBoolean(String.valueOf(newValue)));
99-
}
100-
return true;
101-
});
102-
if (!MainApplication.isDeveloper()) {
103-
forceEnglish.setVisible(false);
104-
}
10596
findPreference("pref_dns_over_https").setOnPreferenceChangeListener((p, v) -> {
10697
Http.setDoh((Boolean) v);
10798
return true;
10899
});
109100

101+
// This is the locale that you wanna your app to launch with.
102+
Locale firstLaunchLocale = new Locale("en");
103+
104+
HashSet<Locale> supportedLocales = new HashSet<>();
105+
supportedLocales.add(Locale.US);
106+
supportedLocales.add(Locale.CHINA);
107+
supportedLocales.add(Locale.GERMAN);
108+
supportedLocales.add(firstLaunchLocale);
109+
110+
Preference languageSelector = findPreference("pref_language_selector");
111+
languageSelector.setOnPreferenceClickListener(preference -> {
112+
LanguageSwitcher ls = new LanguageSwitcher(getActivity(), firstLaunchLocale);
113+
ls.showChangeLanguageDialog(getActivity());
114+
ls.setSupportedLocales(supportedLocales);
115+
return true;
116+
});
117+
110118
int nightModeFlags =
111119
getContext().getResources().getConfiguration().uiMode &
112120
Configuration.UI_MODE_NIGHT_MASK;

app/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,11 @@
3131
<string name="require_android_6">Requires Android 6.0+</string>
3232
<string name="require_android_12">Requires Android 12+</string>
3333
<string name="install_terminal_reboot_now">Reboot</string>
34+
<string name="language">Language</string>
3435
<string name="yes" translatable="false">@android:string/yes</string>
3536
<string name="no" translatable="false">@android:string/no</string>
3637
<string name="ok" translatable="false">@android:string/ok</string>
38+
<string name="cancel" translatable="false">@android:string/cancel</string>
3739

3840
<!-- Module section translation -->
3941
<string name="module_last_update">Last version:</string>

app/src/main/res/xml/root_preferences.xml

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,20 +43,18 @@
4343
app:entryValues="@array/theme_values"
4444
app:singleLineTitle="false" />
4545

46+
<Preference
47+
app:key="pref_language_selector"
48+
app:icon="@drawable/ic_baseline_language_24"
49+
app:title="@string/language" />
50+
4651
<SwitchPreferenceCompat
4752
app:defaultValue="false"
4853
app:key="pref_enable_blur"
4954
app:icon="@drawable/ic_baseline_blur_on_24"
5055
app:title="@string/enable_blur_pref"
5156
app:singleLineTitle="false" />
5257

53-
<SwitchPreferenceCompat
54-
app:defaultValue="false"
55-
app:key="pref_force_english"
56-
app:icon="@drawable/ic_baseline_language_24"
57-
app:title="@string/force_english_pref"
58-
app:singleLineTitle="false" />
59-
6058
<SwitchPreferenceCompat
6159
app:defaultValue="false"
6260
app:key="pref_force_dark_terminal"

0 commit comments

Comments
 (0)