From 44ef5575aaded6fdfd778b8724a0e19a6caf1a62 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Mon, 11 May 2009 18:03:39 -0700 Subject: [PATCH] Show locale names in alphabetical order, in their own language. Bug 1776043: List the locales in alphabetical order. Bug 1703550: List the locales in their own languages instead of in the current language. --- src/com/android/settings/LocalePicker.java | 24 ++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/com/android/settings/LocalePicker.java b/src/com/android/settings/LocalePicker.java index 67978ee2a60..ecd9689a08f 100644 --- a/src/com/android/settings/LocalePicker.java +++ b/src/com/android/settings/LocalePicker.java @@ -30,6 +30,7 @@ import android.widget.ListView; import java.io.BufferedWriter; import java.io.FileOutputStream; +import java.text.Collator; import java.util.Arrays; import java.util.Locale; @@ -38,7 +39,9 @@ public class LocalePicker extends ListActivity { Loc[] mLocales; - private static class Loc { + private static class Loc implements Comparable { + static Collator sCollator = Collator.getInstance(); + String label; Locale locale; @@ -51,6 +54,10 @@ public class LocalePicker extends ListActivity { public String toString() { return this.label; } + + public int compareTo(Object o) { + return sCollator.compare(this.label, ((Loc) o).label); + } } int getContentView() { @@ -78,9 +85,9 @@ public class LocalePicker extends ListActivity { if (finalSize == 0) { Log.v(TAG, "adding initial "+ - toTitleCase(l.getDisplayLanguage())); + toTitleCase(l.getDisplayLanguage(l))); preprocess[finalSize++] = - new Loc(toTitleCase(l.getDisplayLanguage()), l); + new Loc(toTitleCase(l.getDisplayLanguage(l)), l); } else { // check previous entry: // same lang and a country -> upgrade to full name and @@ -91,20 +98,20 @@ public class LocalePicker extends ListActivity { Log.v(TAG, "backing up and fixing "+ preprocess[finalSize-1].label+" to "+ preprocess[finalSize-1].locale. - getDisplayName()); + getDisplayName(l)); preprocess[finalSize-1].label = toTitleCase( preprocess[finalSize-1]. - locale.getDisplayName()); + locale.getDisplayName(l)); Log.v(TAG, " and adding "+ - toTitleCase(l.getDisplayName())); + toTitleCase(l.getDisplayName(l))); preprocess[finalSize++] = - new Loc(toTitleCase(l.getDisplayName()), l); + new Loc(toTitleCase(l.getDisplayName(l)), l); } else { String displayName; if (s.equals("zz_ZZ")) { displayName = "Pseudo..."; } else { - displayName = toTitleCase(l.getDisplayLanguage()); + displayName = toTitleCase(l.getDisplayLanguage(l)); } Log.v(TAG, "adding "+displayName); preprocess[finalSize++] = new Loc(displayName, l); @@ -116,6 +123,7 @@ public class LocalePicker extends ListActivity { for (int i = 0; i < finalSize ; i++) { mLocales[i] = preprocess[i]; } + Arrays.sort(mLocales); int layoutId = R.layout.locale_picker_item; int fieldId = R.id.locale; ArrayAdapter adapter =