Generate language list compile time (#1561)
* Generate language list compile time * Add English
This commit is contained in:
parent
8ed19ae7fd
commit
2bc178ed48
|
|
@ -18,8 +18,10 @@
|
|||
*/
|
||||
|
||||
import com.android.build.gradle.internal.dsl.BuildType
|
||||
import java.io.PrintStream
|
||||
import java.nio.file.Paths
|
||||
import java.time.Instant
|
||||
import java.util.*
|
||||
|
||||
plugins {
|
||||
id("org.gradle.idea")
|
||||
|
|
@ -161,6 +163,38 @@ tasks.whenTaskAdded {
|
|||
}
|
||||
}
|
||||
|
||||
afterEvaluate {
|
||||
android.applicationVariants.forEach { variant ->
|
||||
val outSrcDir = file("$buildDir/generated/source/langList/${variant.name}")
|
||||
val outSrc = file("$outSrcDir/org/lsposed/manager/util/LangList.java")
|
||||
val genLangList =
|
||||
tasks.register("generate${variant.name.capitalize(Locale.ROOT)}LangList") {
|
||||
inputs.files("src/main/res")
|
||||
outputs.file(outSrc)
|
||||
doLast {
|
||||
val langList = File(projectDir, "src/main/res").listFiles { dir ->
|
||||
dir.name.startsWith("values-") && File(dir, "strings.xml").exists()
|
||||
}.orEmpty().map {
|
||||
it.name.substring(7).split("-", limit = 2)
|
||||
}.map {
|
||||
if (it.size == 1) Locale(it[0])
|
||||
else Locale(it[0], it[1].substring(1))
|
||||
}.map { it.toLanguageTag() }
|
||||
PrintStream(outSrc).print(
|
||||
"""
|
||||
|package org.lsposed.manager.util;
|
||||
|public final class LangList {
|
||||
| public static final String[] LANG_LIST = {"SYSTEM", ${
|
||||
langList.joinToString(", ") { """"$it"""" }
|
||||
}};
|
||||
|}""".trimMargin()
|
||||
)
|
||||
}
|
||||
}
|
||||
variant.registerJavaGeneratingTask(genLangList, outSrcDir)
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
val glideVersion = "4.12.0"
|
||||
val navVersion: String by rootProject.extra
|
||||
|
|
|
|||
|
|
@ -20,8 +20,6 @@
|
|||
package org.lsposed.manager.ui.fragment;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources.NotFoundException;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
|
|
@ -49,6 +47,7 @@ import org.lsposed.manager.R;
|
|||
import org.lsposed.manager.databinding.FragmentSettingsBinding;
|
||||
import org.lsposed.manager.ui.activity.MainActivity;
|
||||
import org.lsposed.manager.util.BackupUtils;
|
||||
import org.lsposed.manager.util.LangList;
|
||||
import org.lsposed.manager.util.NavUtil;
|
||||
import org.lsposed.manager.util.ThemeUtil;
|
||||
|
||||
|
|
@ -255,18 +254,17 @@ public class SettingsFragment extends BaseFragment {
|
|||
var tag = language.getValue();
|
||||
var userLocale = App.getLocale();
|
||||
var entries = new ArrayList<CharSequence>();
|
||||
entries.add(language.getEntries()[0]);
|
||||
var lstLang = getAppLanguages(requireContext(), R.string.Settings);
|
||||
var lstLang = LangList.LANG_LIST;
|
||||
for (var lang : lstLang) {
|
||||
if (lang.equals(SYSTEM)) {
|
||||
entries.add(getString(rikka.core.R.string.follow_system));
|
||||
continue;
|
||||
}
|
||||
var locale = Locale.forLanguageTag(lang);
|
||||
entries.add(HtmlCompat.fromHtml(String.format("%s - %s",
|
||||
!TextUtils.isEmpty(locale.getScript()) ? locale.getDisplayScript(locale) : locale.getDisplayName(locale),
|
||||
!TextUtils.isEmpty(locale.getScript()) ? locale.getDisplayScript(userLocale) : locale.getDisplayName(userLocale)
|
||||
), HtmlCompat.FROM_HTML_MODE_LEGACY));
|
||||
entries.add(HtmlCompat.fromHtml(locale.getDisplayName(locale), HtmlCompat.FROM_HTML_MODE_LEGACY));
|
||||
}
|
||||
language.setEntries(entries.toArray(new CharSequence[0]));
|
||||
lstLang.add(0, SYSTEM);
|
||||
language.setEntryValues(lstLang.toArray(new CharSequence[0]));
|
||||
language.setEntryValues(lstLang);
|
||||
if (TextUtils.isEmpty(tag) || SYSTEM.equals(tag)) {
|
||||
language.setSummary(getString(rikka.material.R.string.follow_system));
|
||||
} else {
|
||||
|
|
@ -312,34 +310,5 @@ public class SettingsFragment extends BaseFragment {
|
|||
}
|
||||
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);
|
||||
|
||||
var lstLang = new ArrayList<String>();
|
||||
lstLang.add(Locale.ENGLISH.getLanguage());
|
||||
|
||||
final String reference;
|
||||
try {
|
||||
reference = ctx.createConfigurationContext(conf).getString(id);
|
||||
} catch (NotFoundException nfe) {
|
||||
return lstLang; // return only english
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -32,10 +32,6 @@
|
|||
<item>MODE_NIGHT_FOLLOW_SYSTEM</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="language" translatable="false">
|
||||
<item>@string/follow_system</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="color_values" translatable="false">
|
||||
<item>SAKURA</item>
|
||||
<item>MATERIAL_RED</item>
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@
|
|||
|
||||
<rikka.preference.SimpleMenuPreference
|
||||
android:defaultValue="SYSTEM"
|
||||
android:entries="@array/language"
|
||||
android:icon="@drawable/ic_baseline_translate_24"
|
||||
android:key="language"
|
||||
android:summary="%s"
|
||||
|
|
|
|||
Loading…
Reference in New Issue