Merge "Tidy up our getAvailableLocales methods to actually ask ICU4C." into dalvik-dev
diff --git a/libcore/icu/src/main/java/com/ibm/icu4jni/text/Collator.java b/libcore/icu/src/main/java/com/ibm/icu4jni/text/Collator.java
index f108737..3673d32 100644
--- a/libcore/icu/src/main/java/com/ibm/icu4jni/text/Collator.java
+++ b/libcore/icu/src/main/java/com/ibm/icu4jni/text/Collator.java
@@ -324,8 +324,4 @@
      * @stable ICU 2.4
      */
     public abstract int hashCode();
-
-    public static Locale[] getAvailableLocales() {
-        return Resources.localesFromStrings(NativeCollation.getAvailableLocalesImpl());
-    }
 }
diff --git a/libcore/icu/src/main/java/com/ibm/icu4jni/text/NativeBreakIterator.java b/libcore/icu/src/main/java/com/ibm/icu4jni/text/NativeBreakIterator.java
index 3f67a64..91f2beb 100644
--- a/libcore/icu/src/main/java/com/ibm/icu4jni/text/NativeBreakIterator.java
+++ b/libcore/icu/src/main/java/com/ibm/icu4jni/text/NativeBreakIterator.java
@@ -125,10 +125,6 @@
         return precedingImpl(this.addr, offset);
     }
 
-    public static Locale[] getAvailableLocales() {
-        return Resources.localesFromStrings(getAvailableLocalesImpl());
-    }
-
     public static NativeBreakIterator getCharacterInstance(Locale where) {
         return new NativeBreakIterator(getCharacterInstanceImpl(where.toString()), BI_CHAR_INSTANCE);
     }
@@ -145,7 +141,6 @@
         return new NativeBreakIterator(getWordInstanceImpl(where.toString()), BI_WORD_INSTANCE);
     }
 
-    private static native String[] getAvailableLocalesImpl();
     private static native int getCharacterInstanceImpl(String locale);
     private static native int getWordInstanceImpl(String locale);
     private static native int getLineInstanceImpl(String locale);
diff --git a/libcore/icu/src/main/java/com/ibm/icu4jni/text/NativeCollation.java b/libcore/icu/src/main/java/com/ibm/icu4jni/text/NativeCollation.java
index 7d474ef..fbdcf93 100644
--- a/libcore/icu/src/main/java/com/ibm/icu4jni/text/NativeCollation.java
+++ b/libcore/icu/src/main/java/com/ibm/icu4jni/text/NativeCollation.java
@@ -244,6 +244,4 @@
   * @internal ICU 2.4
   */
   static native void setOffset(int address, int offset);
-
-  static native String[] getAvailableLocalesImpl();
 }
diff --git a/libcore/icu/src/main/java/com/ibm/icu4jni/util/Resources.java b/libcore/icu/src/main/java/com/ibm/icu4jni/util/Resources.java
index aae2ff4..874d9be 100644
--- a/libcore/icu/src/main/java/com/ibm/icu4jni/util/Resources.java
+++ b/libcore/icu/src/main/java/com/ibm/icu4jni/util/Resources.java
@@ -39,22 +39,17 @@
     /**
      * Cache for ISO language names.
      */
-    private static String[] isoLanguages = null;
+    private static String[] isoLanguages;
 
     /**
      * Cache for ISO country names.
      */
-    private static String[] isoCountries = null;
-
-    /**
-     * Available locales cache.
-     */
-    private static String[] availableLocales = null;
+    private static String[] isoCountries;
 
     /**
      * Available timezones cache.
      */
-    private static String[] availableTimezones = null;
+    private static String[] availableTimezones;
 
     /**
      * Returns a shared LocaleData for the given locale.
@@ -102,7 +97,7 @@
     /**
      * Returns an array of ISO language names (two-letter codes), fetched either
      * from ICU's database or from our memory cache.
-     * 
+     *
      * @return The array.
      */
     public static String[] getISOLanguages() {
@@ -116,7 +111,7 @@
     /**
      * Returns an array of ISO country names (two-letter codes), fetched either
      * from ICU's database or from our memory cache.
-     * 
+     *
      * @return The array.
      */
     public static String[] getISOCountries() {
@@ -128,23 +123,9 @@
     }
 
     /**
-     * Returns an array of names of locales that are available in the system,
-     * fetched either from ICU's database or from our memory cache.
-     * 
-     * @return The array.
-     */
-    public static String[] getAvailableLocales() {
-        if (availableLocales == null) {
-            availableLocales = getAvailableLocalesNative();
-        }
-
-        return availableLocales.clone();
-    }
-
-    /**
      * Returns an array of names of timezones that are available in the system,
      * fetched either from the TimeZone class or from our memory cache.
-     * 
+     *
      * @return The array.
      */
     public static String[] getKnownTimezones() {
@@ -158,7 +139,7 @@
 
     /**
      * Returns the display name for the given time zone using the given locale.
-     * 
+     *
      * @param id The time zone ID, for example "Europe/Berlin"
      * @param daylight Indicates whether daylight savings is in use
      * @param style The style, 0 for long, 1 for short
@@ -261,7 +242,7 @@
 
     /**
      * Returns the display names for all given timezones using the given locale.
-     * 
+     *
      * @return An array of time zone strings. Each row represents one time zone.
      *         The first columns holds the ID of the time zone, for example
      *         "Europe/Berlin". The other columns then hold for each row the
@@ -274,14 +255,14 @@
         if (locale == null) {
             locale = defaultLocale;
         }
-        
+
         // If locale == default and the default locale hasn't changed since
         // DefaultTimeZones loaded, return the cached names.
         // TODO: We should force a reboot if the default locale changes.
         if (defaultLocale.equals(locale) && DefaultTimeZones.locale.equals(defaultLocale)) {
             return clone2dStringArray(DefaultTimeZones.names);
         }
-        
+
         return createTimeZoneNamesFor(locale);
     }
 
@@ -322,8 +303,51 @@
         return result;
     }
 
+    private static Locale[] availableLocalesCache;
+    public static Locale[] getAvailableLocales() {
+        if (availableLocalesCache == null) {
+            availableLocalesCache = localesFromStrings(getAvailableLocalesNative());
+        }
+        return availableLocalesCache.clone();
+    }
+
+    public static Locale[] getAvailableBreakIteratorLocales() {
+        return localesFromStrings(getAvailableBreakIteratorLocalesNative());
+    }
+
+    public static Locale[] getAvailableCalendarLocales() {
+        return localesFromStrings(getAvailableCalendarLocalesNative());
+    }
+
+    public static Locale[] getAvailableCollatorLocales() {
+        return localesFromStrings(getAvailableCollatorLocalesNative());
+    }
+
+    public static Locale[] getAvailableDateFormatLocales() {
+        return localesFromStrings(getAvailableDateFormatLocalesNative());
+    }
+
+    public static Locale[] getAvailableDateFormatSymbolsLocales() {
+        return getAvailableDateFormatLocales();
+    }
+
+    public static Locale[] getAvailableDecimalFormatSymbolsLocales() {
+        return getAvailableNumberFormatLocales();
+    }
+
+    public static Locale[] getAvailableNumberFormatLocales() {
+        return localesFromStrings(getAvailableNumberFormatLocalesNative());
+    }
+
     // --- Native methods accessing ICU's database ----------------------------
 
+    private static native String[] getAvailableBreakIteratorLocalesNative();
+    private static native String[] getAvailableCalendarLocalesNative();
+    private static native String[] getAvailableCollatorLocalesNative();
+    private static native String[] getAvailableDateFormatLocalesNative();
+    private static native String[] getAvailableLocalesNative();
+    private static native String[] getAvailableNumberFormatLocalesNative();
+
     public static native String getDisplayCountryNative(String countryCode, String locale);
     public static native String getDisplayLanguageNative(String languageCode, String locale);
     public static native String getDisplayVariantNative(String variantCode, String locale);
@@ -336,8 +360,6 @@
 
     public static native int getCurrencyFractionDigitsNative(String currencyCode);
 
-    private static native String[] getAvailableLocalesNative();
-
     private static native String[] getISOLanguagesNative();
     private static native String[] getISOCountriesNative();
 
diff --git a/libcore/icu/src/main/native/NativeBreakIterator.cpp b/libcore/icu/src/main/native/NativeBreakIterator.cpp
index cd6e712..6cc774b 100644
--- a/libcore/icu/src/main/native/NativeBreakIterator.cpp
+++ b/libcore/icu/src/main/native/NativeBreakIterator.cpp
@@ -22,21 +22,6 @@
 #include "unicode/putil.h"
 #include <stdlib.h>
 
-static jobjectArray getAvailableLocalesImpl(JNIEnv* env, jclass) {
-    jclass stringClass = env->FindClass("java/lang/String");
-    if (stringClass == NULL) {
-        return NULL;
-    }
-    size_t count = ubrk_countAvailable();
-    jobjectArray result = env->NewObjectArray(count, stringClass, NULL);
-    for (size_t i = 0; i < count; ++i) {
-        jstring s = env->NewStringUTF(ubrk_getAvailable(i));
-        env->SetObjectArrayElement(result, i, s);
-        env->DeleteLocalRef(s);
-    }
-    return result;
-}
-
 static jint getIterator(JNIEnv* env, jstring locale, UBreakIteratorType type) {
     UErrorCode status = U_ZERO_ERROR;
     ScopedUtfChars localeChars(env, locale);
@@ -140,7 +125,6 @@
     { "currentImpl", "(I)I", (void*) currentImpl },
     { "firstImpl", "(I)I", (void*) firstImpl },
     { "followingImpl", "(II)I", (void*) followingImpl },
-    { "getAvailableLocalesImpl", "()[Ljava/lang/String;", (void*) getAvailableLocalesImpl },
     { "getCharacterInstanceImpl", "(Ljava/lang/String;)I", (void*) getCharacterInstanceImpl },
     { "getLineInstanceImpl", "(Ljava/lang/String;)I", (void*) getLineInstanceImpl },
     { "getSentenceInstanceImpl", "(Ljava/lang/String;)I", (void*) getSentenceInstanceImpl },
diff --git a/libcore/icu/src/main/native/NativeCollation.cpp b/libcore/icu/src/main/native/NativeCollation.cpp
index 09f192b..148c16e 100644
--- a/libcore/icu/src/main/native/NativeCollation.cpp
+++ b/libcore/icu/src/main/native/NativeCollation.cpp
@@ -496,24 +496,8 @@
    icu4jni_error(env, status);
 }
 
-static jobjectArray getAvailableLocalesImpl(JNIEnv *env, jclass clazz) {
-    jclass stringClass = env->FindClass("java/lang/String");
-    if (stringClass == NULL) {
-        return NULL;
-    }
-    size_t count = ucol_countAvailable();
-    jobjectArray result = env->NewObjectArray(count, stringClass, NULL);
-    for (size_t i = 0; i < count; ++i) {
-        jstring s = env->NewStringUTF(ucol_getAvailable(i));
-        env->SetObjectArrayElement(result, i, s);
-        env->DeleteLocalRef(s);
-    }
-    return result;
-}
-
 static JNINativeMethod gMethods[] = {
     /* name, signature, funcPtr */
-    { "getAvailableLocalesImpl", "()[Ljava/lang/String;", (void*) getAvailableLocalesImpl },
     { "openCollator", "()I", (void*) openCollator__ },
     { "openCollator", "(Ljava/lang/String;)I", (void*) openCollator__Ljava_lang_String_2 },
     { "openCollatorFromRules", "(Ljava/lang/String;II)I", (void*) openCollatorFromRules },
diff --git a/libcore/icu/src/main/native/Resources.cpp b/libcore/icu/src/main/native/Resources.cpp
index 1dd4bff..e4138b1 100644
--- a/libcore/icu/src/main/native/Resources.cpp
+++ b/libcore/icu/src/main/native/Resources.cpp
@@ -20,7 +20,10 @@
 #include "cutils/log.h"
 #include "unicode/numfmt.h"
 #include "unicode/locid.h"
+#include "unicode/ubrk.h"
 #include "unicode/ucal.h"
+#include "unicode/ucol.h"
+#include "unicode/udat.h"
 #include "unicode/gregocal.h"
 #include "unicode/ucurr.h"
 #include "unicode/calendar.h"
@@ -239,17 +242,42 @@
     return toStringArray(env, Locale::getISOLanguages());
 }
 
-static jobjectArray getAvailableLocalesNative(JNIEnv* env, jclass clazz) {
-    size_t count = uloc_countAvailable();
+template <typename Counter, typename Getter>
+static jobjectArray getAvailableLocales(JNIEnv* env, Counter* counter, Getter* getter) {
+    size_t count = (*counter)();
     jobjectArray result = env->NewObjectArray(count, string_class, NULL);
     for (size_t i = 0; i < count; ++i) {
-        jstring s = env->NewStringUTF(uloc_getAvailable(i));
+        jstring s = env->NewStringUTF((*getter)(i));
         env->SetObjectArrayElement(result, i, s);
         env->DeleteLocalRef(s);
     }
     return result;
 }
 
+static jobjectArray getAvailableLocalesNative(JNIEnv* env, jclass) {
+    return getAvailableLocales(env, uloc_countAvailable, uloc_getAvailable);
+}
+
+static jobjectArray getAvailableBreakIteratorLocalesNative(JNIEnv* env, jclass) {
+    return getAvailableLocales(env, ubrk_countAvailable, ubrk_getAvailable);
+}
+
+static jobjectArray getAvailableCalendarLocalesNative(JNIEnv* env, jclass) {
+    return getAvailableLocales(env, ucal_countAvailable, ucal_getAvailable);
+}
+
+static jobjectArray getAvailableCollatorLocalesNative(JNIEnv* env, jclass) {
+    return getAvailableLocales(env, ucol_countAvailable, ucol_getAvailable);
+}
+
+static jobjectArray getAvailableDateFormatLocalesNative(JNIEnv* env, jclass) {
+    return getAvailableLocales(env, udat_countAvailable, udat_getAvailable);
+}
+
+static jobjectArray getAvailableNumberFormatLocalesNative(JNIEnv* env, jclass) {
+    return getAvailableLocales(env, unum_countAvailable, unum_getAvailable);
+}
+
 static TimeZone* timeZoneFromId(JNIEnv* env, jstring id) {
     const jchar* chars = env->GetStringChars(id, NULL);
     const UnicodeString zoneID(reinterpret_cast<const UChar*>(chars), env->GetStringLength(id));
@@ -690,42 +718,25 @@
 
 static JNINativeMethod gMethods[] = {
     /* name, signature, funcPtr */
-    {"getCurrencyFractionDigitsNative", "(Ljava/lang/String;)I",
-            (void*) getCurrencyFractionDigitsNative},
-    {"getCurrencyCodeNative", "(Ljava/lang/String;)Ljava/lang/String;",
-            (void*) getCurrencyCodeNative},
-    {"getCurrencySymbolNative", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",
-            (void*) getCurrencySymbolNative},
-    {"getDisplayCountryNative",
-            "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",
-            (void*) getDisplayCountryNative},
-    {"getDisplayLanguageNative",
-            "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",
-            (void*) getDisplayLanguageNative},
-    {"getDisplayVariantNative",
-            "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",
-            (void*) getDisplayVariantNative},
-    {"getISO3CountryNative",
-            "(Ljava/lang/String;)Ljava/lang/String;",
-            (void*) getISO3CountryNative},
-    {"getISO3LanguageNative",
-            "(Ljava/lang/String;)Ljava/lang/String;",
-            (void*) getISO3LanguageNative},
-    {"getISOCountriesNative", "()[Ljava/lang/String;",
-            (void*) getISOCountriesNative},
-    {"getISOLanguagesNative", "()[Ljava/lang/String;",
-            (void*) getISOLanguagesNative},
-    {"getAvailableLocalesNative", "()[Ljava/lang/String;",
-            (void*) getAvailableLocalesNative},
-    {"getTimeZonesNative",
-            "([[Ljava/lang/String;Ljava/lang/String;)V",
-            (void*) getTimeZonesNative},
-    {"getDisplayTimeZoneNative",
-            "(Ljava/lang/String;ZILjava/lang/String;)Ljava/lang/String;",
-            (void*) getDisplayTimeZoneNative},
-    {"initLocaleDataImpl",
-            "(Ljava/lang/String;Lcom/ibm/icu4jni/util/LocaleData;)Z",
-            (void*) initLocaleDataImpl},
+    {"getAvailableBreakIteratorLocalesNative", "()[Ljava/lang/String;", (void*) getAvailableBreakIteratorLocalesNative},
+    {"getAvailableCalendarLocalesNative", "()[Ljava/lang/String;", (void*) getAvailableCalendarLocalesNative},
+    {"getAvailableCollatorLocalesNative", "()[Ljava/lang/String;", (void*) getAvailableCollatorLocalesNative},
+    {"getAvailableDateFormatLocalesNative", "()[Ljava/lang/String;", (void*) getAvailableDateFormatLocalesNative},
+    {"getAvailableLocalesNative", "()[Ljava/lang/String;", (void*) getAvailableLocalesNative},
+    {"getAvailableNumberFormatLocalesNative", "()[Ljava/lang/String;", (void*) getAvailableNumberFormatLocalesNative},
+    {"getCurrencyCodeNative", "(Ljava/lang/String;)Ljava/lang/String;", (void*) getCurrencyCodeNative},
+    {"getCurrencyFractionDigitsNative", "(Ljava/lang/String;)I", (void*) getCurrencyFractionDigitsNative},
+    {"getCurrencySymbolNative", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", (void*) getCurrencySymbolNative},
+    {"getDisplayCountryNative", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", (void*) getDisplayCountryNative},
+    {"getDisplayLanguageNative", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", (void*) getDisplayLanguageNative},
+    {"getDisplayTimeZoneNative", "(Ljava/lang/String;ZILjava/lang/String;)Ljava/lang/String;", (void*) getDisplayTimeZoneNative},
+    {"getDisplayVariantNative", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", (void*) getDisplayVariantNative},
+    {"getISO3CountryNative", "(Ljava/lang/String;)Ljava/lang/String;", (void*) getISO3CountryNative},
+    {"getISO3LanguageNative", "(Ljava/lang/String;)Ljava/lang/String;", (void*) getISO3LanguageNative},
+    {"getISOCountriesNative", "()[Ljava/lang/String;", (void*) getISOCountriesNative},
+    {"getISOLanguagesNative", "()[Ljava/lang/String;", (void*) getISOLanguagesNative},
+    {"getTimeZonesNative", "([[Ljava/lang/String;Ljava/lang/String;)V", (void*) getTimeZonesNative},
+    {"initLocaleDataImpl", "(Ljava/lang/String;Lcom/ibm/icu4jni/util/LocaleData;)Z", (void*) initLocaleDataImpl},
 };
 
 int register_com_ibm_icu4jni_util_Resources(JNIEnv* env) {
diff --git a/libcore/luni/src/main/java/java/util/Calendar.java b/libcore/luni/src/main/java/java/util/Calendar.java
index 167db6c..6cb3ec7 100644
--- a/libcore/luni/src/main/java/java/util/Calendar.java
+++ b/libcore/luni/src/main/java/java/util/Calendar.java
@@ -18,6 +18,7 @@
 package java.util;
 
 import com.ibm.icu4jni.util.LocaleData;
+import com.ibm.icu4jni.util.Resources;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
@@ -961,7 +962,7 @@
      * are available.
      */
     public static synchronized Locale[] getAvailableLocales() {
-        return Locale.getAvailableLocales();
+        return Resources.getAvailableCalendarLocales();
     }
 
     /**
diff --git a/libcore/luni/src/main/java/java/util/Locale.java b/libcore/luni/src/main/java/java/util/Locale.java
index 9b35a0f..75250b4 100644
--- a/libcore/luni/src/main/java/java/util/Locale.java
+++ b/libcore/luni/src/main/java/java/util/Locale.java
@@ -68,10 +68,6 @@
 
     private static final long serialVersionUID = 9149081749638150636L;
 
-    // BEGIN android-added
-    private static volatile Locale[] availableLocales;
-    // END android-added
-
     // Initialize a default which is used during static
     // initialization of the default for the platform.
     private static Locale defaultLocale = new Locale();
@@ -343,12 +339,7 @@
      * @return an array of {@code Locale}s.
      */
     public static Locale[] getAvailableLocales() {
-        // BEGIN android-changed
-        if (availableLocales == null) {
-            availableLocales = Resources.localesFromStrings(Resources.getAvailableLocales());
-        }
-        return availableLocales.clone();
-        // END android-changed
+        return Resources.getAvailableLocales();
     }
 
     /**
diff --git a/libcore/text/src/main/java/java/text/BreakIterator.java b/libcore/text/src/main/java/java/text/BreakIterator.java
index 0144d1e..901f5ab 100644
--- a/libcore/text/src/main/java/java/text/BreakIterator.java
+++ b/libcore/text/src/main/java/java/text/BreakIterator.java
@@ -15,13 +15,10 @@
  * limitations under the License.
  */
 
-// BEGIN android-note
-// The icu implementation used was changed from icu4j to icu4jni.
-// END android-note
-
 package java.text;
 
 import com.ibm.icu4jni.text.NativeBreakIterator;
+import com.ibm.icu4jni.util.Resources;
 import java.util.Locale;
 import org.apache.harmony.text.internal.nls.Messages;
 
@@ -256,7 +253,7 @@
      * are available.
      */
     public static Locale[] getAvailableLocales() {
-        return NativeBreakIterator.getAvailableLocales();
+        return Resources.getAvailableBreakIteratorLocales();
     }
 
     /**
diff --git a/libcore/text/src/main/java/java/text/CollationElementIterator.java b/libcore/text/src/main/java/java/text/CollationElementIterator.java
index fb562d8..863821c 100644
--- a/libcore/text/src/main/java/java/text/CollationElementIterator.java
+++ b/libcore/text/src/main/java/java/text/CollationElementIterator.java
@@ -17,10 +17,6 @@
 
 package java.text;
 
-// BEGIN android-note
-// The icu implementation used was changed from icu4j to icu4jni.
-// END android-note
-
 /**
  * Created by a {@code RuleBasedCollator} to iterate through a string. The
  * result of each iteration is a 32-bit collation element that defines the
diff --git a/libcore/text/src/main/java/java/text/Collator.java b/libcore/text/src/main/java/java/text/Collator.java
index bbfc76d..fca464d 100644
--- a/libcore/text/src/main/java/java/text/Collator.java
+++ b/libcore/text/src/main/java/java/text/Collator.java
@@ -15,12 +15,9 @@
  * limitations under the License.
  */
 
-// BEGIN android-note
-// The icu implementation used was changed from icu4j to icu4jni.
-// END android-note
-
 package java.text;
 
+import com.ibm.icu4jni.util.Resources;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.Comparator;
@@ -257,7 +254,7 @@
      * are available.
      */
     public static Locale[] getAvailableLocales() {
-        return com.ibm.icu4jni.text.Collator.getAvailableLocales();
+        return Resources.getAvailableCollatorLocales();
     }
 
     /**
diff --git a/libcore/text/src/main/java/java/text/DateFormat.java b/libcore/text/src/main/java/java/text/DateFormat.java
index 57c9852..055cbc3 100644
--- a/libcore/text/src/main/java/java/text/DateFormat.java
+++ b/libcore/text/src/main/java/java/text/DateFormat.java
@@ -15,20 +15,16 @@
  * limitations under the License.
  */
 
-// BEGIN android-note
-// changed from ICU to resource bundles
-// END android-note
-
 package java.text;
 
+import com.ibm.icu4jni.util.LocaleData;
+import com.ibm.icu4jni.util.Resources;
 import java.io.InvalidObjectException;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.Hashtable;
 import java.util.Locale;
 import java.util.TimeZone;
-
-import com.ibm.icu4jni.util.LocaleData;
 import org.apache.harmony.text.internal.nls.Messages;
 
 /**
@@ -411,7 +407,7 @@
      * are available.
      */
     public static Locale[] getAvailableLocales() {
-        return Locale.getAvailableLocales();
+        return Resources.getAvailableDateFormatLocales();
     }
 
     /**
diff --git a/libcore/text/src/main/java/java/text/DateFormatSymbols.java b/libcore/text/src/main/java/java/text/DateFormatSymbols.java
index b47ca83..f702716 100644
--- a/libcore/text/src/main/java/java/text/DateFormatSymbols.java
+++ b/libcore/text/src/main/java/java/text/DateFormatSymbols.java
@@ -15,22 +15,16 @@
  * limitations under the License.
  */
 
-// BEGIN android-note
-// The icu implementation used was changed from icu4j to icu4jni.
-// END android-note
-
 package java.text;
 
+import com.ibm.icu4jni.util.LocaleData;
+import com.ibm.icu4jni.util.Resources;
 import java.io.IOException;
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
 import java.util.Arrays;
 import java.util.Locale;
 
-// BEGIN android-added
-import com.ibm.icu4jni.util.LocaleData;
-import com.ibm.icu4jni.util.Resources;
-// END android-added
 /**
  * Encapsulates localizable date-time formatting data, such as the names of the
  * months, the names of the days of the week, and the time zone data.
@@ -169,7 +163,7 @@
      * @hide
      */
     public static Locale[] getAvailableLocales() {
-        return Locale.getAvailableLocales();
+        return Resources.getAvailableDateFormatSymbolsLocales();
     }
 
     private void writeObject(ObjectOutputStream oos) throws IOException {
diff --git a/libcore/text/src/main/java/java/text/DecimalFormat.java b/libcore/text/src/main/java/java/text/DecimalFormat.java
index 07047b2..e33d407 100644
--- a/libcore/text/src/main/java/java/text/DecimalFormat.java
+++ b/libcore/text/src/main/java/java/text/DecimalFormat.java
@@ -15,10 +15,6 @@
  * limitations under the License.
  */
 
-// BEGIN android-note
-// The icu implementation used was changed from icu4j to icu4jni.
-// END android-note
-
 package java.text;
 
 import java.io.IOException;
diff --git a/libcore/text/src/main/java/java/text/DecimalFormatSymbols.java b/libcore/text/src/main/java/java/text/DecimalFormatSymbols.java
index fa1de6d..0ee705c 100644
--- a/libcore/text/src/main/java/java/text/DecimalFormatSymbols.java
+++ b/libcore/text/src/main/java/java/text/DecimalFormatSymbols.java
@@ -17,6 +17,8 @@
 
 package java.text;
 
+import com.ibm.icu4jni.util.LocaleData;
+import com.ibm.icu4jni.util.Resources;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
@@ -26,8 +28,6 @@
 import java.util.Currency;
 import java.util.Locale;
 
-import com.ibm.icu4jni.util.LocaleData;
-
 /**
  * Encapsulates the set of symbols (such as the decimal separator, the grouping
  * separator, and so on) needed by {@code DecimalFormat} to format numbers.
@@ -136,7 +136,7 @@
      * @hide
      */
     public static Locale[] getAvailableLocales() {
-        return Locale.getAvailableLocales();
+        return Resources.getAvailableDecimalFormatSymbolsLocales();
     }
 
     /**
diff --git a/libcore/text/src/main/java/java/text/NumberFormat.java b/libcore/text/src/main/java/java/text/NumberFormat.java
index b187f53..2d0c6c5 100644
--- a/libcore/text/src/main/java/java/text/NumberFormat.java
+++ b/libcore/text/src/main/java/java/text/NumberFormat.java
@@ -15,12 +15,10 @@
  * limitations under the License.
  */
 
-// BEGIN android-note
-// changed from ICU to resource bundles
-// END android-note
-
 package java.text;
 
+import com.ibm.icu4jni.util.LocaleData;
+import com.ibm.icu4jni.util.Resources;
 import java.io.IOException;
 import java.io.InvalidObjectException;
 import java.io.ObjectInputStream;
@@ -30,8 +28,6 @@
 import java.math.RoundingMode;
 import java.util.Currency;
 import java.util.Locale;
-
-import com.ibm.icu4jni.util.LocaleData;
 import org.apache.harmony.text.internal.nls.Messages;
 
 /**
@@ -319,7 +315,7 @@
      * are available.
      */
     public static Locale[] getAvailableLocales() {
-        return Locale.getAvailableLocales();
+        return Resources.getAvailableNumberFormatLocales();
     }
 
     /**
diff --git a/libcore/text/src/main/java/java/text/RuleBasedBreakIterator.java b/libcore/text/src/main/java/java/text/RuleBasedBreakIterator.java
index ed8a7c1..2537f0c 100644
--- a/libcore/text/src/main/java/java/text/RuleBasedBreakIterator.java
+++ b/libcore/text/src/main/java/java/text/RuleBasedBreakIterator.java
@@ -15,10 +15,6 @@
  * limitations under the License.
  */
 
-// BEGIN android-note
-// The icu implementation used was changed from icu4j to icu4jni.
-// END android-note
-
 package java.text;
 
 import com.ibm.icu4jni.text.NativeBreakIterator;
diff --git a/libcore/text/src/main/java/java/text/RuleBasedCollator.java b/libcore/text/src/main/java/java/text/RuleBasedCollator.java
index 77b3ffc..6954d8c 100644
--- a/libcore/text/src/main/java/java/text/RuleBasedCollator.java
+++ b/libcore/text/src/main/java/java/text/RuleBasedCollator.java
@@ -15,10 +15,6 @@
  * limitations under the License.
  */
 
-// BEGIN android-note
-// The icu implementation used was changed from icu4j to icu4jni.
-// END android-note
-
 package java.text;
 
 import org.apache.harmony.text.internal.nls.Messages;
diff --git a/libcore/text/src/main/java/java/text/SimpleDateFormat.java b/libcore/text/src/main/java/java/text/SimpleDateFormat.java
index 20fff63..d5c06fe 100644
--- a/libcore/text/src/main/java/java/text/SimpleDateFormat.java
+++ b/libcore/text/src/main/java/java/text/SimpleDateFormat.java
@@ -15,10 +15,6 @@
  * limitations under the License.
  */
 
-// BEGIN android-note
-// changed from ICU to resource bundles and Java parsing/formatting
-// END android-note
-
 package java.text;
 
 import java.io.IOException;