Switch to use ICU4J's Alphabetic Index.

Revise tests for expected ellipsis in overflow buckets and for
Ukrainian in English locale.

Change-Id: Ia61000de8f87b3c336f46818f886ba69d9c9f06e
diff --git a/src/com/android/providers/contacts/ContactLocaleUtils.java b/src/com/android/providers/contacts/ContactLocaleUtils.java
index 340b6a5..7d51b94 100644
--- a/src/com/android/providers/contacts/ContactLocaleUtils.java
+++ b/src/com/android/providers/contacts/ContactLocaleUtils.java
@@ -16,6 +16,8 @@
 
 package com.android.providers.contacts;
 
+import android.icu.text.AlphabeticIndex;
+import android.icu.text.AlphabeticIndex.ImmutableIndex;
 import android.provider.ContactsContract.FullNameStyle;
 import android.provider.ContactsContract.PhoneticNameStyle;
 import android.text.TextUtils;
@@ -36,8 +38,7 @@
 import java.util.Map;
 import java.util.Set;
 
-import libcore.icu.AlphabeticIndex;
-import libcore.icu.AlphabeticIndex.ImmutableIndex;
+
 import libcore.icu.Transliterator;
 
 /**
@@ -102,7 +103,7 @@
                 .addLabels(LOCALE_GREEK)
                 .addLabels(LOCALE_UKRAINIAN)
                 .addLabels(LOCALE_SERBIAN)
-                .getImmutableIndex();
+                .buildImmutableIndex();
             mAlphabeticIndexBucketCount = mAlphabeticIndex.getBucketCount();
             mNumberBucketIndex = mAlphabeticIndexBucketCount - 1;
         }
@@ -181,7 +182,7 @@
             } else if (bucketIndex > mNumberBucketIndex) {
                 --bucketIndex;
             }
-            return mAlphabeticIndex.getBucketLabel(bucketIndex);
+            return mAlphabeticIndex.getBucket(bucketIndex).getLabel();
         }
 
         @SuppressWarnings("unused")
diff --git a/tests/src/com/android/providers/contacts/ContactLocaleUtilsTest.java b/tests/src/com/android/providers/contacts/ContactLocaleUtilsTest.java
index 394a1aa..9bac4c0 100644
--- a/tests/src/com/android/providers/contacts/ContactLocaleUtilsTest.java
+++ b/tests/src/com/android/providers/contacts/ContactLocaleUtilsTest.java
@@ -55,7 +55,7 @@
     private static final String[] LATIN_NAME_KEY_2 = {
         "John Paul Jones", "Paul Jones", "Jones", "JPJ", "PJ", "J"};
     private static final String[] LABELS_EN_US = {
-        "", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
+        "\u2026", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
         "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
         "#", ""};
     private static final String[] LABELS_JA_JP = {
@@ -83,12 +83,12 @@
         "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
         "#", ""};
     private static final String[] LABELS_AR = {
-        "", "\u0627", "\u0628", "\u062a", "\u062b", "\u062c", "\u062d",
+        "\u2026", "\u0627", "\u0628", "\u062a", "\u062b", "\u062c", "\u062d",
         "\u062e", "\u062f", "\u0630", "\u0631", "\u0632", "\u0633", "\u0634",
         "\u0635", "\u0636", "\u0637", "\u0638", "\u0639", "\u063a", "\u0641",
         "\u0642", "\u0643", "\u0644", "\u0645", "\u0646", "\u0647", "\u0648",
         "\u064a",
-        "", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
+        "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
         "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
         "#", ""};
 
@@ -152,7 +152,7 @@
         assertEquals("#", getLabel(PHONE_NUMBER_1));
         assertEquals("#", getLabel(PHONE_NUMBER_2));
         assertEquals("J", getLabel(LATIN_NAME));
-        assertEquals("", getLabel(CHINESE_NAME));
+        assertEquals("\u2026", getLabel(CHINESE_NAME));
         assertEquals("D", getLabel(CHINESE_LATIN_MIX_NAME_1));
         assertEquals("B", getLabel("Bob Smith"));
 
@@ -163,7 +163,9 @@
             assertEquals("\u0408", getLabel(SERBIAN_NAME));
         }
         if (hasUkrainianCollator) {
-            assertEquals("\u0407", getLabel(UKRAINIAN_NAME));
+            // Updated in CLDR 27/ICU 55:
+            // http://cldr.unicode.org/index/downloads/cldr-27#TOC-Changes-to-Collation
+            assertEquals("\u0406", getLabel(UKRAINIAN_NAME));
         }
 
         assertNull(getNameLookupKeys(LATIN_NAME, FullNameStyle.UNDEFINED));
@@ -335,9 +337,6 @@
 
         ContactLocaleUtils.setLocale(LOCALE_UKRAINIAN);
         assertEquals("\u0407", getLabel(UKRAINIAN_NAME));
-        // ICU 52 has a bug whereby this letter has a bucket created only if
-        // Ukrainian is the primary language. Once this is fixed also test this
-        // label when in English locale.
         assertEquals("\u0490", getLabel(UKRAINIAN_NAME_2));
         assertEquals("B", getLabel("Bob Smith"));
     }