diff options
author | Narayan Kamath <narayan@google.com> | 2014-07-14 16:36:10 +0100 |
---|---|---|
committer | Narayan Kamath <narayan@google.com> | 2014-07-23 11:10:16 +0100 |
commit | 59c3da2367bad63efd71753b4d1ad88f2298ddc6 (patch) | |
tree | e859c24ebdc4c296ab09364c02486b31b5f62f42 /src/com/android/settings/accessibility | |
parent | b125caa7ed29f1ecf5062452191d061fa890decb (diff) | |
download | packages_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.java | 100 |
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); - } - } } |