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 com.android.build.gradle.internal.dsl.BuildType
|
||||||
|
import java.io.PrintStream
|
||||||
import java.nio.file.Paths
|
import java.nio.file.Paths
|
||||||
import java.time.Instant
|
import java.time.Instant
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("org.gradle.idea")
|
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 {
|
dependencies {
|
||||||
val glideVersion = "4.12.0"
|
val glideVersion = "4.12.0"
|
||||||
val navVersion: String by rootProject.extra
|
val navVersion: String by rootProject.extra
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,6 @@
|
||||||
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.content.res.Resources.NotFoundException;
|
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
|
@ -49,6 +47,7 @@ import org.lsposed.manager.R;
|
||||||
import org.lsposed.manager.databinding.FragmentSettingsBinding;
|
import org.lsposed.manager.databinding.FragmentSettingsBinding;
|
||||||
import org.lsposed.manager.ui.activity.MainActivity;
|
import org.lsposed.manager.ui.activity.MainActivity;
|
||||||
import org.lsposed.manager.util.BackupUtils;
|
import org.lsposed.manager.util.BackupUtils;
|
||||||
|
import org.lsposed.manager.util.LangList;
|
||||||
import org.lsposed.manager.util.NavUtil;
|
import org.lsposed.manager.util.NavUtil;
|
||||||
import org.lsposed.manager.util.ThemeUtil;
|
import org.lsposed.manager.util.ThemeUtil;
|
||||||
|
|
||||||
|
|
@ -255,18 +254,17 @@ 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>();
|
||||||
entries.add(language.getEntries()[0]);
|
var lstLang = LangList.LANG_LIST;
|
||||||
var lstLang = getAppLanguages(requireContext(), R.string.Settings);
|
|
||||||
for (var lang : lstLang) {
|
for (var lang : lstLang) {
|
||||||
|
if (lang.equals(SYSTEM)) {
|
||||||
|
entries.add(getString(rikka.core.R.string.follow_system));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
var locale = Locale.forLanguageTag(lang);
|
var locale = Locale.forLanguageTag(lang);
|
||||||
entries.add(HtmlCompat.fromHtml(String.format("%s - %s",
|
entries.add(HtmlCompat.fromHtml(locale.getDisplayName(locale), HtmlCompat.FROM_HTML_MODE_LEGACY));
|
||||||
!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));
|
|
||||||
}
|
}
|
||||||
language.setEntries(entries.toArray(new CharSequence[0]));
|
language.setEntries(entries.toArray(new CharSequence[0]));
|
||||||
lstLang.add(0, SYSTEM);
|
language.setEntryValues(lstLang);
|
||||||
language.setEntryValues(lstLang.toArray(new CharSequence[0]));
|
|
||||||
if (TextUtils.isEmpty(tag) || SYSTEM.equals(tag)) {
|
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 {
|
||||||
|
|
@ -312,34 +310,5 @@ 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);
|
|
||||||
|
|
||||||
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>
|
<item>MODE_NIGHT_FOLLOW_SYSTEM</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="language" translatable="false">
|
|
||||||
<item>@string/follow_system</item>
|
|
||||||
</string-array>
|
|
||||||
|
|
||||||
<string-array name="color_values" translatable="false">
|
<string-array name="color_values" translatable="false">
|
||||||
<item>SAKURA</item>
|
<item>SAKURA</item>
|
||||||
<item>MATERIAL_RED</item>
|
<item>MATERIAL_RED</item>
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,6 @@
|
||||||
|
|
||||||
<rikka.preference.SimpleMenuPreference
|
<rikka.preference.SimpleMenuPreference
|
||||||
android:defaultValue="SYSTEM"
|
android:defaultValue="SYSTEM"
|
||||||
android:entries="@array/language"
|
|
||||||
android:icon="@drawable/ic_baseline_translate_24"
|
android:icon="@drawable/ic_baseline_translate_24"
|
||||||
android:key="language"
|
android:key="language"
|
||||||
android:summary="%s"
|
android:summary="%s"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue