Add language selector (#80), Remove force english language [Beta]

pull/145/head
DerGoogler 2 years ago
parent 328ee8da9a
commit 0f6264b15e

@ -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">
<receiver android:name="com.fox2code.mmm.manager.ModuleBootReceive"
android:exported="true">
<intent-filter>

@ -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<CompatActivity> asWeakReference() {
return this.selfReference;
}

@ -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);
}
}

@ -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<Locale> 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;

@ -31,9 +31,11 @@
<string name="require_android_6">Requires Android 6.0+</string>
<string name="require_android_12">Requires Android 12+</string>
<string name="install_terminal_reboot_now">Reboot</string>
<string name="language">Language</string>
<string name="yes" translatable="false">@android:string/yes</string>
<string name="no" translatable="false">@android:string/no</string>
<string name="ok" translatable="false">@android:string/ok</string>
<string name="cancel" translatable="false">@android:string/cancel</string>
<!-- Module section translation -->
<string name="module_last_update">Last version:</string>

@ -43,6 +43,11 @@
app:entryValues="@array/theme_values"
app:singleLineTitle="false" />
<Preference
app:key="pref_language_selector"
app:icon="@drawable/ic_baseline_language_24"
app:title="@string/language" />
<SwitchPreferenceCompat
app:defaultValue="false"
app:key="pref_enable_blur"
@ -50,13 +55,6 @@
app:title="@string/enable_blur_pref"
app:singleLineTitle="false" />
<SwitchPreferenceCompat
app:defaultValue="false"
app:key="pref_force_english"
app:icon="@drawable/ic_baseline_language_24"
app:title="@string/force_english_pref"
app:singleLineTitle="false" />
<SwitchPreferenceCompat
app:defaultValue="false"
app:key="pref_force_dark_terminal"

Loading…
Cancel
Save