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"));
}