1
0
Fork 0
mirror of https://github.com/gsantner/dandelion synced 2024-06-17 00:54:53 +02:00

Make use of opoc/LanguagePreference (fixes #169)

This commit is contained in:
Gregor Santner 2017-09-15 19:56:10 +02:00
parent 4ba1b8671d
commit 184de1931e
No known key found for this signature in database
GPG key ID: 7E83A7834AECB009
3 changed files with 38 additions and 17 deletions

View file

@ -32,6 +32,7 @@ android {
buildConfigField "boolean", "IS_TEST_BUILD", "false" buildConfigField "boolean", "IS_TEST_BUILD", "false"
buildConfigField "boolean", "IS_GPLAY_BUILD", "false" buildConfigField "boolean", "IS_GPLAY_BUILD", "false"
buildConfigField("String[]", "APPLICATION_LANGUAGES", '{' + getUsedAndroidLanguages().collect {"\"${it}\""}.join(",") + '}')
vectorDrawables.useSupportLibrary = true vectorDrawables.useSupportLibrary = true
} }
@ -92,6 +93,23 @@ dependencies {
annotationProcessor "com.jakewharton:butterknife-compiler:${version_lib.butterknife}" annotationProcessor "com.jakewharton:butterknife-compiler:${version_lib.butterknife}"
} }
@SuppressWarnings(["UnnecessaryQualifiedReference", "SpellCheckingInspection"])
static String[] getUsedAndroidLanguages() {
Set<String> langs = new HashSet<>()
new File('.').eachFileRecurse(groovy.io.FileType.DIRECTORIES) {
final foldername = it.name
if (foldername.startsWith('values-') && !it.canonicalPath.contains("build" + File.separator + "intermediates")) {
new File(it.toString()).eachFileRecurse(groovy.io.FileType.FILES) {
if (it.name.toLowerCase().endsWith(".xml") && it.getCanonicalFile().getText('UTF-8').contains("<string")) {
langs.add(foldername.replace("values-", ""))
}
}
}
}
return langs.toArray(new String[langs.size()])
}
// ##################### // #####################
// Groovy Coding Area // Groovy Coding Area
// ##################### // #####################

View file

@ -39,10 +39,8 @@ static String[] getUsedAndroidLanguages() {
* Summary: Change language of this app. Restart app for changes to take effect * Summary: Change language of this app. Restart app for changes to take effect
* Define element in Preferences-XML: * Define element in Preferences-XML:
<!--suppress AndroidDomInspection -->
<net.gsantner.opoc.ui.LanguagePreference <net.gsantner.opoc.ui.LanguagePreference
android:icon="@drawable/ic_language_black_24dp" android:icon="@drawable/ic_language_black_24dp"
android:defaultValue=""
android:key="@string/pref_key__language" android:key="@string/pref_key__language"
android:summary="@string/pref_desc__language" android:summary="@string/pref_desc__language"
android:title="@string/pref_title__language"/> android:title="@string/pref_title__language"/>
@ -55,18 +53,25 @@ import android.os.Build;
import android.preference.ListPreference; import android.preference.ListPreference;
import android.util.AttributeSet; import android.util.AttributeSet;
import net.gsantner.opoc.util.ContextUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import net.gsantner.opoc.util.ContextUtils;
/** /**
* A {@link android.preference.ListPreference} that displays a list of languages to select from * A {@link android.preference.ListPreference} that displays a list of languages to select from
*/ */
@SuppressWarnings({"unused", "SpellCheckingInspection"}) @SuppressWarnings({"unused", "SpellCheckingInspection", "WeakerAccess"})
public class LanguagePreference extends ListPreference { public class LanguagePreference extends ListPreference {
private static final String SYSTEM_LANGUAGE_CODE = "";
public static String SYSTEM_LANGUAGE_NAME = "System";
// The language of res/values/ -> (usually English)
public static String DEFAULT_LANGUAGE_NAME = "English";
public static String DEFAULT_LANGUAGE_CODE = "en";
public LanguagePreference(Context context) { public LanguagePreference(Context context) {
super(context); super(context);
init(context, null); init(context, null);
@ -99,13 +104,15 @@ public class LanguagePreference extends ListPreference {
} }
private void init(Context context, AttributeSet attrs) { private void init(Context context, AttributeSet attrs) {
setDefaultValue(SYSTEM_LANGUAGE_CODE);
// Fetch readable details // Fetch readable details
ContextUtils ContextUtils = new ContextUtils(context); ContextUtils contextUtils = new ContextUtils(context);
List<String> languages = new ArrayList<>(); List<String> languages = new ArrayList<>();
Object bcof = ContextUtils.getBuildConfigValue("APPLICATION_LANGUAGES"); Object bcof = contextUtils.getBuildConfigValue("APPLICATION_LANGUAGES");
if (bcof instanceof String[]) { if (bcof instanceof String[]) {
for (String langId : (String[]) bcof) { for (String langId : (String[]) bcof) {
Locale locale = ContextUtils.getLocaleByAndroidCode(langId); Locale locale = contextUtils.getLocaleByAndroidCode(langId);
languages.add(summarizeLocale(locale) + ";" + langId); languages.add(summarizeLocale(locale) + ";" + langId);
} }
} }
@ -120,10 +127,10 @@ public class LanguagePreference extends ListPreference {
entries[i + 2] = languages.get(i).split(";")[0]; entries[i + 2] = languages.get(i).split(";")[0];
entryval[i + 2] = languages.get(i).split(";")[1]; entryval[i + 2] = languages.get(i).split(";")[1];
} }
entries[0] = "System"; entries[0] = SYSTEM_LANGUAGE_NAME;
entryval[0] = ""; entryval[0] = SYSTEM_LANGUAGE_CODE;
entries[1] = "English"; entries[1] = DEFAULT_LANGUAGE_NAME;
entryval[1] = "en"; entryval[1] = DEFAULT_LANGUAGE_CODE;
setEntries(entries); setEntries(entries);
setEntryValues(entryval); setEntryValues(entryval);

View file

@ -17,16 +17,12 @@
android:summary="@string/pref_desc__sub_nav_slider" android:summary="@string/pref_desc__sub_nav_slider"
android:title="@string/pref_title__sub_nav_slider"/> android:title="@string/pref_title__sub_nav_slider"/>
<ListPreference <net.gsantner.opoc.ui.LanguagePreference
android:defaultValue=""
android:entries="@array/pref_arrdisp__language"
android:entryValues="@array/pref_arrkeys__language"
android:icon="@drawable/ic_language_black_48px" android:icon="@drawable/ic_language_black_48px"
android:key="@string/pref_key__language" android:key="@string/pref_key__language"
android:summary="@string/pref_desc__language" android:summary="@string/pref_desc__language"
android:title="@string/pref_title__language"/> android:title="@string/pref_title__language"/>
<ListPreference <ListPreference
android:dialogTitle="@string/pref_title__font_size" android:dialogTitle="@string/pref_title__font_size"
android:entries="@array/pref_entries__font_size" android:entries="@array/pref_entries__font_size"