From e94a4e27474a410f6c9d1b2aa4ef8a8b58a8d218 Mon Sep 17 00:00:00 2001 From: Robert Greenwalt Date: Wed, 6 May 2009 10:10:42 -0700 Subject: [PATCH] Fix locale selection to never chose a lang-only locale. This avoids us using the non-standard lang-only locale when communicating off device. Fixes 1810133. --- src/com/android/settings/LocalePicker.java | 39 ++++++++++++---------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/com/android/settings/LocalePicker.java b/src/com/android/settings/LocalePicker.java index 386d7e0f4d2..67978ee2a60 100644 --- a/src/com/android/settings/LocalePicker.java +++ b/src/com/android/settings/LocalePicker.java @@ -71,31 +71,34 @@ public class LocalePicker extends ListActivity { for (int i = 0 ; i < origSize; i++ ) { String s = locales[i]; int len = s.length(); - if (len == 2) { - Locale l = new Locale(s); - preprocess[finalSize++] = new Loc(toTitleCase(l.getDisplayLanguage()), l); - } else if (len == 5) { + if (len == 5) { String language = s.substring(0, 2); String country = s.substring(3, 5); Locale l = new Locale(language, country); if (finalSize == 0) { - preprocess[finalSize++] = new Loc(toTitleCase(l.getDisplayLanguage()), l); + Log.v(TAG, "adding initial "+ + toTitleCase(l.getDisplayLanguage())); + preprocess[finalSize++] = + new Loc(toTitleCase(l.getDisplayLanguage()), l); } else { // check previous entry: - // same lang and no country -> overwrite it with a lang-only name - // same lang and a country -> upgrade to full name and + // same lang and a country -> upgrade to full name and // insert ours with full name // diff lang -> insert ours with lang-only name - if (preprocess[finalSize-1].locale.getLanguage().equals(language)) { - String prevCountry = preprocess[finalSize-1].locale.getCountry(); - if (prevCountry.length() == 0) { - preprocess[finalSize-1].locale = l; - preprocess[finalSize-1].label = toTitleCase(l.getDisplayLanguage()); - } else { - preprocess[finalSize-1].label = toTitleCase(preprocess[finalSize-1].locale.getDisplayName()); - preprocess[finalSize++] = new Loc(toTitleCase(l.getDisplayName()), l); - } + if (preprocess[finalSize-1].locale.getLanguage().equals( + language)) { + Log.v(TAG, "backing up and fixing "+ + preprocess[finalSize-1].label+" to "+ + preprocess[finalSize-1].locale. + getDisplayName()); + preprocess[finalSize-1].label = toTitleCase( + preprocess[finalSize-1]. + locale.getDisplayName()); + Log.v(TAG, " and adding "+ + toTitleCase(l.getDisplayName())); + preprocess[finalSize++] = + new Loc(toTitleCase(l.getDisplayName()), l); } else { String displayName; if (s.equals("zz_ZZ")) { @@ -103,6 +106,7 @@ public class LocalePicker extends ListActivity { } else { displayName = toTitleCase(l.getDisplayLanguage()); } + Log.v(TAG, "adding "+displayName); preprocess[finalSize++] = new Loc(displayName, l); } } @@ -114,7 +118,8 @@ public class LocalePicker extends ListActivity { } int layoutId = R.layout.locale_picker_item; int fieldId = R.id.locale; - ArrayAdapter adapter = new ArrayAdapter(this, layoutId, fieldId, mLocales); + ArrayAdapter adapter = + new ArrayAdapter(this, layoutId, fieldId, mLocales); getListView().setAdapter(adapter); }