[app] generate at runtime list of languages supported by app (#1146)
This commit is contained in:
parent
f364e1cafd
commit
d605a84f91
|
|
@ -20,6 +20,7 @@
|
||||||
package org.lsposed.manager.ui.fragment;
|
package org.lsposed.manager.ui.fragment;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.res.Configuration;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
|
@ -137,6 +138,8 @@ public class SettingsFragment extends BaseFragment {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreatePreferencesFix(Bundle savedInstanceState, String rootKey) {
|
public void onCreatePreferencesFix(Bundle savedInstanceState, String rootKey) {
|
||||||
|
final String SYSTEM = "SYSTEM";
|
||||||
|
|
||||||
addPreferencesFromResource(R.xml.prefs);
|
addPreferencesFromResource(R.xml.prefs);
|
||||||
|
|
||||||
boolean installed = ConfigManager.isBinderAlive();
|
boolean installed = ConfigManager.isBinderAlive();
|
||||||
|
|
@ -240,7 +243,7 @@ public class SettingsFragment extends BaseFragment {
|
||||||
SimpleMenuPreference language = findPreference("language");
|
SimpleMenuPreference language = findPreference("language");
|
||||||
if (language != null) {
|
if (language != null) {
|
||||||
language.setOnPreferenceChangeListener((preference, newValue) -> {
|
language.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
var locale = "SYSTEM".equals(newValue) ? LocaleDelegate.getSystemLocale() : Locale.forLanguageTag((String) newValue);
|
var locale = SYSTEM.equals(newValue) ? LocaleDelegate.getSystemLocale() : Locale.forLanguageTag((String) newValue);
|
||||||
LocaleDelegate.setDefaultLocale(locale);
|
LocaleDelegate.setDefaultLocale(locale);
|
||||||
MainActivity activity = (MainActivity) getActivity();
|
MainActivity activity = (MainActivity) getActivity();
|
||||||
if (activity != null) {
|
if (activity != null) {
|
||||||
|
|
@ -251,19 +254,19 @@ public class SettingsFragment extends BaseFragment {
|
||||||
var tag = language.getValue();
|
var tag = language.getValue();
|
||||||
var userLocale = App.getLocale();
|
var userLocale = App.getLocale();
|
||||||
var entries = new ArrayList<CharSequence>();
|
var entries = new ArrayList<CharSequence>();
|
||||||
for (int i = 0; i < language.getEntries().length; i++) {
|
entries.add(language.getEntries()[0]);
|
||||||
if (i > 0) {
|
var lstLang = getAppLanguages(getContext(), R.string.Settings);
|
||||||
var locale = Locale.forLanguageTag(language.getEntries()[i].toString());
|
for (var lang : lstLang) {
|
||||||
entries.add(HtmlCompat.fromHtml(String.format("%s - %s",
|
var locale = Locale.forLanguageTag(lang);
|
||||||
!TextUtils.isEmpty(locale.getScript()) ? locale.getDisplayScript(locale) : locale.getDisplayName(locale),
|
entries.add(HtmlCompat.fromHtml(String.format("%s - %s",
|
||||||
!TextUtils.isEmpty(locale.getScript()) ? locale.getDisplayScript(userLocale) : locale.getDisplayName(userLocale)
|
!TextUtils.isEmpty(locale.getScript()) ? locale.getDisplayScript(locale) : locale.getDisplayName(locale),
|
||||||
), HtmlCompat.FROM_HTML_MODE_LEGACY));
|
!TextUtils.isEmpty(locale.getScript()) ? locale.getDisplayScript(userLocale) : locale.getDisplayName(userLocale)
|
||||||
} else {
|
), HtmlCompat.FROM_HTML_MODE_LEGACY));
|
||||||
entries.add(language.getEntries()[i]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
language.setEntries(entries.toArray(new CharSequence[0]));
|
language.setEntries(entries.toArray(new CharSequence[0]));
|
||||||
if (TextUtils.isEmpty(tag) || "SYSTEM".equals(tag)) {
|
lstLang.add(0, SYSTEM);
|
||||||
|
language.setEntryValues(lstLang.toArray(new CharSequence[0]));
|
||||||
|
if (TextUtils.isEmpty(tag) || SYSTEM.equals(tag)) {
|
||||||
language.setSummary(getString(rikka.material.R.string.follow_system));
|
language.setSummary(getString(rikka.material.R.string.follow_system));
|
||||||
} else {
|
} else {
|
||||||
var locale = Locale.forLanguageTag(tag);
|
var locale = Locale.forLanguageTag(tag);
|
||||||
|
|
@ -303,6 +306,29 @@ public class SettingsFragment extends BaseFragment {
|
||||||
});
|
});
|
||||||
return recyclerView;
|
return recyclerView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ArrayList<String> getAppLanguages(Context ctx, int id) {
|
||||||
|
Configuration conf = ctx.getResources().getConfiguration();
|
||||||
|
Locale originalLocale = conf.getLocales().get(0);
|
||||||
|
conf.setLocale(Locale.ENGLISH);
|
||||||
|
final String reference = ctx.createConfigurationContext(conf).getString(id);
|
||||||
|
|
||||||
|
var lstLang = new ArrayList<String>();
|
||||||
|
lstLang.add(Locale.ENGLISH.getLanguage());
|
||||||
|
|
||||||
|
for (String loc : ctx.getAssets().getLocales()) {
|
||||||
|
if (loc.isEmpty()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Locale locale = Locale.forLanguageTag(loc);
|
||||||
|
conf.setLocale(locale);
|
||||||
|
if (!lstLang.contains(loc) && !reference.equals(ctx.createConfigurationContext(conf).getString(id))) {
|
||||||
|
lstLang.add(loc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
conf.setLocale(originalLocale);
|
||||||
|
return lstLang;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void makeSnackBar(@StringRes int text, @Snackbar.Duration int duration) {
|
public void makeSnackBar(@StringRes int text, @Snackbar.Duration int duration) {
|
||||||
|
|
|
||||||
|
|
@ -34,65 +34,6 @@
|
||||||
|
|
||||||
<string-array name="language" translatable="false">
|
<string-array name="language" translatable="false">
|
||||||
<item>@string/follow_system</item>
|
<item>@string/follow_system</item>
|
||||||
<item>af</item>
|
|
||||||
<item>ar</item>
|
|
||||||
<item>ca</item>
|
|
||||||
<item>cs</item>
|
|
||||||
<item>da</item>
|
|
||||||
<item>el</item>
|
|
||||||
<item>en</item>
|
|
||||||
<item>es</item>
|
|
||||||
<item>fi</item>
|
|
||||||
<item>fr</item>
|
|
||||||
<item>hu</item>
|
|
||||||
<item>it</item>
|
|
||||||
<item>iw</item>
|
|
||||||
<item>ja</item>
|
|
||||||
<item>ko</item>
|
|
||||||
<item>nl</item>
|
|
||||||
<item>no</item>
|
|
||||||
<item>pl</item>
|
|
||||||
<item>pt-BR</item>
|
|
||||||
<item>pt-PT</item>
|
|
||||||
<item>ro</item>
|
|
||||||
<item>ru</item>
|
|
||||||
<item>tr</item>
|
|
||||||
<item>uk</item>
|
|
||||||
<item>vi</item>
|
|
||||||
<item>zh-CN</item>
|
|
||||||
<item>zh-HK</item>
|
|
||||||
<item>zh-TW</item>
|
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="language_value" translatable="false">
|
|
||||||
<item>SYSTEM</item>
|
|
||||||
<item>af</item>
|
|
||||||
<item>ar</item>
|
|
||||||
<item>ca</item>
|
|
||||||
<item>cs</item>
|
|
||||||
<item>da</item>
|
|
||||||
<item>el</item>
|
|
||||||
<item>en</item>
|
|
||||||
<item>es</item>
|
|
||||||
<item>fi</item>
|
|
||||||
<item>fr</item>
|
|
||||||
<item>hu</item>
|
|
||||||
<item>it</item>
|
|
||||||
<item>iw</item>
|
|
||||||
<item>ja</item>
|
|
||||||
<item>ko</item>
|
|
||||||
<item>nl</item>
|
|
||||||
<item>no</item>
|
|
||||||
<item>pl</item>
|
|
||||||
<item>pt-BR</item>
|
|
||||||
<item>pt-PT</item>
|
|
||||||
<item>ro</item>
|
|
||||||
<item>ru</item>
|
|
||||||
<item>tr</item>
|
|
||||||
<item>uk</item>
|
|
||||||
<item>vi</item>
|
|
||||||
<item>zh-CN</item>
|
|
||||||
<item>zh-HK</item>
|
|
||||||
<item>zh-TW</item>
|
|
||||||
</string-array>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,6 @@
|
||||||
<rikka.preference.SimpleMenuPreference
|
<rikka.preference.SimpleMenuPreference
|
||||||
android:defaultValue="SYSTEM"
|
android:defaultValue="SYSTEM"
|
||||||
android:entries="@array/language"
|
android:entries="@array/language"
|
||||||
android:entryValues="@array/language_value"
|
|
||||||
android:icon="@drawable/ic_baseline_translate_24"
|
android:icon="@drawable/ic_baseline_translate_24"
|
||||||
android:summary="%s"
|
android:summary="%s"
|
||||||
android:key="language"
|
android:key="language"
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,6 @@
|
||||||
<rikka.preference.SimpleMenuPreference
|
<rikka.preference.SimpleMenuPreference
|
||||||
android:defaultValue="SYSTEM"
|
android:defaultValue="SYSTEM"
|
||||||
android:entries="@array/language"
|
android:entries="@array/language"
|
||||||
android:entryValues="@array/language_value"
|
|
||||||
android:icon="@drawable/ic_baseline_translate_24"
|
android:icon="@drawable/ic_baseline_translate_24"
|
||||||
android:summary="%s"
|
android:summary="%s"
|
||||||
android:key="language"
|
android:key="language"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue