summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/accessibility
diff options
context:
space:
mode:
authorNarayan Kamath <narayan@google.com>2014-07-14 16:36:10 +0100
committerNarayan Kamath <narayan@google.com>2014-07-23 11:10:16 +0100
commit59c3da2367bad63efd71753b4d1ad88f2298ddc6 (patch)
treee859c24ebdc4c296ab09364c02486b31b5f62f42 /src/com/android/settings/accessibility
parentb125caa7ed29f1ecf5062452191d061fa890decb (diff)
downloadpackages_apps_Settings-59c3da2367bad63efd71753b4d1ad88f2298ddc6.zip
packages_apps_Settings-59c3da2367bad63efd71753b4d1ad88f2298ddc6.tar.gz
packages_apps_Settings-59c3da2367bad63efd71753b4d1ad88f2298ddc6.tar.bz2
Get rid of duplicated code in accessibility settings.
Has the side effect of picking up changes to LocalePicker that added support for 3 letter language codes. bug: 10090157 (cherry picked from commit 26edbccb58c6da452f20ad0695716324e3c29224) Change-Id: I0f41f27e3e6eb88f0265c9ef6b3f34df04bfff1b
Diffstat (limited to 'src/com/android/settings/accessibility')
-rw-r--r--src/com/android/settings/accessibility/LocalePreference.java100
1 files changed, 8 insertions, 92 deletions
diff --git a/src/com/android/settings/accessibility/LocalePreference.java b/src/com/android/settings/accessibility/LocalePreference.java
index 41cb1e5..0a94817 100644
--- a/src/com/android/settings/accessibility/LocalePreference.java
+++ b/src/com/android/settings/accessibility/LocalePreference.java
@@ -21,10 +21,12 @@ import android.content.res.Resources;
import android.preference.ListPreference;
import android.util.AttributeSet;
+import com.android.internal.app.LocalePicker;
import com.android.settings.R;
import java.text.Collator;
import java.util.Arrays;
+import java.util.List;
import java.util.Locale;
/**
@@ -43,108 +45,22 @@ public class LocalePreference extends ListPreference {
}
public void init(Context context) {
- final String[] systemLocales = Resources.getSystem().getAssets().getLocales();
- Arrays.sort(systemLocales);
-
- final Resources resources = context.getResources();
- final String[] specialLocaleCodes = resources.getStringArray(
- com.android.internal.R.array.special_locale_codes);
- final String[] specialLocaleNames = resources.getStringArray(
- com.android.internal.R.array.special_locale_names);
-
- int finalSize = 0;
-
- final int origSize = systemLocales.length;
- final LocaleInfo[] localeInfos = new LocaleInfo[origSize];
- for (int i = 0; i < origSize; i++) {
- final String localeStr = systemLocales[i];
- final int len = localeStr.length();
- if (len != 5) {
- continue;
- }
-
- final String language = localeStr.substring(0, 2);
- final String country = localeStr.substring(3, 5);
- final Locale l = new Locale(language, country);
-
- if (finalSize == 0) {
- localeInfos[finalSize++] = new LocaleInfo(l.getDisplayLanguage(l), l);
- } else {
- // check previous entry:
- // same lang and a country -> upgrade to full name and
- // insert ours with full name
- // diff lang -> insert ours with lang-only name
- final LocaleInfo previous = localeInfos[finalSize - 1];
- if (previous.locale.getLanguage().equals(language)
- && !previous.locale.getLanguage().equals("zz")) {
- previous.label = getDisplayName(
- localeInfos[finalSize - 1].locale, specialLocaleCodes,
- specialLocaleNames);
- localeInfos[finalSize++] = new LocaleInfo(getDisplayName(l,
- specialLocaleCodes, specialLocaleNames), l);
- } else {
- final String displayName;
- if (localeStr.equals("zz_ZZ")) {
- displayName = "[Developer] Accented English";
- } else if (localeStr.equals("zz_ZY")) {
- displayName = "[Developer] Fake Bi-Directional";
- } else {
- displayName = l.getDisplayLanguage(l);
- }
- localeInfos[finalSize++] = new LocaleInfo(displayName, l);
- }
- }
- }
+ List<LocalePicker.LocaleInfo> locales = LocalePicker.getAllAssetLocales(context,
+ false /* in developer mode */);
+ final int finalSize = locales.size();
final CharSequence[] entries = new CharSequence[finalSize + 1];
final CharSequence[] entryValues = new CharSequence[finalSize + 1];
- Arrays.sort(localeInfos, 0, finalSize);
-
- entries[0] = resources.getString(R.string.locale_default);
+ entries[0] = context.getResources().getString(R.string.locale_default);
entryValues[0] = "";
for (int i = 0; i < finalSize; i++) {
- final LocaleInfo info = localeInfos[i];
+ final LocalePicker.LocaleInfo info = locales.get(i);
entries[i + 1] = info.toString();
- entryValues[i + 1] = info.locale.toString();
+ entryValues[i + 1] = info.getLocale().toString();
}
setEntries(entries);
setEntryValues(entryValues);
}
-
- private static String getDisplayName(
- Locale l, String[] specialLocaleCodes, String[] specialLocaleNames) {
- String code = l.toString();
-
- for (int i = 0; i < specialLocaleCodes.length; i++) {
- if (specialLocaleCodes[i].equals(code)) {
- return specialLocaleNames[i];
- }
- }
-
- return l.getDisplayName(l);
- }
-
- private static class LocaleInfo implements Comparable<LocaleInfo> {
- private static final Collator sCollator = Collator.getInstance();
-
- public String label;
- public Locale locale;
-
- public LocaleInfo(String label, Locale locale) {
- this.label = label;
- this.locale = locale;
- }
-
- @Override
- public String toString() {
- return label;
- }
-
- @Override
- public int compareTo(LocaleInfo another) {
- return sCollator.compare(this.label, another.label);
- }
- }
}