Merge change 8077 into donut

* changes:
  Implement the Back button handler to save a VPN.
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index a470acc..6ec90ca 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -255,4 +255,17 @@
         <item>2</item>
     </string-array>
 
+    <!-- Locales in this list are displayed with the corresponding
+         name from special_locale_names instead of using the name
+         from Locale.getDisplayName(). -->
+    <string-array translatable="false" name="special_locale_codes">
+        <item>zh_CN</item>
+        <item>zh_TW</item>
+    </string-array>
+
+    <string-array translatable="false" name="special_locale_names">
+        <item>中文(简体)</item>
+        <item>中文 (繁體)</item>
+    </string-array>
+
 </resources>
diff --git a/src/com/android/settings/LocalePicker.java b/src/com/android/settings/LocalePicker.java
index 39fb6fa..d31e82c 100644
--- a/src/com/android/settings/LocalePicker.java
+++ b/src/com/android/settings/LocalePicker.java
@@ -39,6 +39,8 @@
     private static final String TAG = "LocalePicker";
 
     Loc[] mLocales;
+    String[] mSpecialLocaleCodes;
+    String[] mSpecialLocaleNames;
 
     private static class Loc implements Comparable {
         static Collator sCollator = Collator.getInstance();
@@ -70,6 +72,9 @@
         super.onCreate(icicle);
         setContentView(getContentView());
 
+        mSpecialLocaleCodes = getResources().getStringArray(R.array.special_locale_codes);
+        mSpecialLocaleNames = getResources().getStringArray(R.array.special_locale_names);
+
         String[] locales = getAssets().getLocales();
         Arrays.sort(locales);
 
@@ -98,15 +103,13 @@
                             language)) {
                         Log.v(TAG, "backing up and fixing "+
                                 preprocess[finalSize-1].label+" to "+
-                                preprocess[finalSize-1].locale.
-                                getDisplayName(l));
+                                getDisplayName(preprocess[finalSize-1].locale));
                         preprocess[finalSize-1].label = toTitleCase(
-                                preprocess[finalSize-1].
-                                locale.getDisplayName(l));
+                                getDisplayName(preprocess[finalSize-1].locale));
                         Log.v(TAG, "  and adding "+
-                                toTitleCase(l.getDisplayName(l)));
+                                toTitleCase(getDisplayName(l)));
                         preprocess[finalSize++] =
-                                new Loc(toTitleCase(l.getDisplayName(l)), l);
+                                new Loc(toTitleCase(getDisplayName(l)), l);
                     } else {
                         String displayName;
                         if (s.equals("zz_ZZ")) {
@@ -140,6 +143,18 @@
         return Character.toUpperCase(s.charAt(0)) + s.substring(1);
     }
 
+    private String getDisplayName(Locale l) {
+        String code = l.toString();
+
+        for (int i = 0; i < mSpecialLocaleCodes.length; i++) {
+            if (mSpecialLocaleCodes[i].equals(code)) {
+                return mSpecialLocaleNames[i];
+            }
+        }
+
+        return l.getDisplayName(l);
+    }
+
     @Override
     public void onResume() {
         super.onResume();