Clarify how IME ID is treated in ImeSubtypeListItem#compareTo()
This is a preparation to remove dependency on TreeMap from InputMethodAndSubtypeList#getSortedInputMethodAndSubtypeList(). This CL itself must not have any behavior change. Bug: 64612471 Test: atest InputMethodSubtypeSwitchingControllerTest Change-Id: I5684bbbb3b223c4e6cc7892b2620fb91356b7037
This commit is contained in:
@@ -20,6 +20,7 @@ import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.content.pm.ServiceInfo;
|
||||
@@ -99,17 +100,18 @@ public class InputMethodSubtypeSwitchingControllerTest {
|
||||
}
|
||||
}
|
||||
|
||||
private static ImeSubtypeListItem createDummyItem(String imeName,
|
||||
String subtypeName, String subtypeLocale, int subtypeIndex, String systemLocale) {
|
||||
private static ImeSubtypeListItem createDummyItem(ComponentName imeComponentName,
|
||||
String imeName, String subtypeName, String subtypeLocale, int subtypeIndex,
|
||||
String systemLocale) {
|
||||
final ResolveInfo ri = new ResolveInfo();
|
||||
final ServiceInfo si = new ServiceInfo();
|
||||
final ApplicationInfo ai = new ApplicationInfo();
|
||||
ai.packageName = DUMMY_PACKAGE_NAME;
|
||||
ai.packageName = imeComponentName.getPackageName();
|
||||
ai.enabled = true;
|
||||
si.applicationInfo = ai;
|
||||
si.enabled = true;
|
||||
si.packageName = DUMMY_PACKAGE_NAME;
|
||||
si.name = imeName;
|
||||
si.packageName = imeComponentName.getPackageName();
|
||||
si.name = imeComponentName.getClassName();
|
||||
si.exported = true;
|
||||
si.nonLocalizedLabel = DUMMY_IME_LABEL;
|
||||
ri.serviceInfo = si;
|
||||
@@ -367,52 +369,56 @@ public class InputMethodSubtypeSwitchingControllerTest {
|
||||
|
||||
@Test
|
||||
public void testImeSubtypeListComparator() throws Exception {
|
||||
final ComponentName imeX1 = new ComponentName("com.example.imeX", "Ime1");
|
||||
final ComponentName imeX2 = new ComponentName("com.example.imeX", "Ime2");
|
||||
final ComponentName imeY1 = new ComponentName("com.example.imeY", "Ime1");
|
||||
final ComponentName imeZ1 = new ComponentName("com.example.imeZ", "Ime1");
|
||||
{
|
||||
final List<ImeSubtypeListItem> items = Arrays.asList(
|
||||
// Subtypes of IME "X".
|
||||
// Subtypes that has the same locale of the system's.
|
||||
createDummyItem("X", "E", "en_US", 0, "en_US"),
|
||||
createDummyItem("X", "Z", "en_US", 3, "en_US"),
|
||||
createDummyItem("X", "", "en_US", 6, "en_US"),
|
||||
createDummyItem(imeX1, "X", "E", "en_US", 0, "en_US"),
|
||||
createDummyItem(imeX1, "X", "Z", "en_US", 3, "en_US"),
|
||||
createDummyItem(imeX1, "X", "", "en_US", 6, "en_US"),
|
||||
// Subtypes that has the same language of the system's.
|
||||
createDummyItem("X", "E", "en", 1, "en_US"),
|
||||
createDummyItem("X", "Z", "en", 4, "en_US"),
|
||||
createDummyItem("X", "", "en", 7, "en_US"),
|
||||
createDummyItem(imeX1, "X", "E", "en", 1, "en_US"),
|
||||
createDummyItem(imeX1, "X", "Z", "en", 4, "en_US"),
|
||||
createDummyItem(imeX1, "X", "", "en", 7, "en_US"),
|
||||
// Subtypes that has different language than the system's.
|
||||
createDummyItem("X", "A", "hi_IN", 27, "en_US"),
|
||||
createDummyItem("X", "E", "ja", 2, "en_US"),
|
||||
createDummyItem("X", "Z", "ja", 5, "en_US"),
|
||||
createDummyItem("X", "", "ja", 8, "en_US"),
|
||||
createDummyItem(imeX1, "X", "A", "hi_IN", 27, "en_US"),
|
||||
createDummyItem(imeX1, "X", "E", "ja", 2, "en_US"),
|
||||
createDummyItem(imeX1, "X", "Z", "ja", 5, "en_US"),
|
||||
createDummyItem(imeX1, "X", "", "ja", 8, "en_US"),
|
||||
|
||||
// Subtypes of IME "Y".
|
||||
// Subtypes that has the same locale of the system's.
|
||||
createDummyItem("Y", "E", "en_US", 9, "en_US"),
|
||||
createDummyItem("Y", "Z", "en_US", 12, "en_US"),
|
||||
createDummyItem("Y", "", "en_US", 15, "en_US"),
|
||||
createDummyItem(imeY1, "Y", "E", "en_US", 9, "en_US"),
|
||||
createDummyItem(imeY1, "Y", "Z", "en_US", 12, "en_US"),
|
||||
createDummyItem(imeY1, "Y", "", "en_US", 15, "en_US"),
|
||||
// Subtypes that has the same language of the system's.
|
||||
createDummyItem("Y", "E", "en", 10, "en_US"),
|
||||
createDummyItem("Y", "Z", "en", 13, "en_US"),
|
||||
createDummyItem("Y", "", "en", 16, "en_US"),
|
||||
createDummyItem(imeY1, "Y", "E", "en", 10, "en_US"),
|
||||
createDummyItem(imeY1, "Y", "Z", "en", 13, "en_US"),
|
||||
createDummyItem(imeY1, "Y", "", "en", 16, "en_US"),
|
||||
// Subtypes that has different language than the system's.
|
||||
createDummyItem("Y", "A", "hi_IN", 28, "en_US"),
|
||||
createDummyItem("Y", "E", "ja", 11, "en_US"),
|
||||
createDummyItem("Y", "Z", "ja", 14, "en_US"),
|
||||
createDummyItem("Y", "", "ja", 17, "en_US"),
|
||||
createDummyItem(imeY1, "Y", "A", "hi_IN", 28, "en_US"),
|
||||
createDummyItem(imeY1, "Y", "E", "ja", 11, "en_US"),
|
||||
createDummyItem(imeY1, "Y", "Z", "ja", 14, "en_US"),
|
||||
createDummyItem(imeY1, "Y", "", "ja", 17, "en_US"),
|
||||
|
||||
// Subtypes of IME "".
|
||||
// Subtypes of IME Z.
|
||||
// Subtypes that has the same locale of the system's.
|
||||
createDummyItem("", "E", "en_US", 18, "en_US"),
|
||||
createDummyItem("", "Z", "en_US", 21, "en_US"),
|
||||
createDummyItem("", "", "en_US", 24, "en_US"),
|
||||
createDummyItem(imeZ1, "", "E", "en_US", 18, "en_US"),
|
||||
createDummyItem(imeZ1, "", "Z", "en_US", 21, "en_US"),
|
||||
createDummyItem(imeZ1, "", "", "en_US", 24, "en_US"),
|
||||
// Subtypes that has the same language of the system's.
|
||||
createDummyItem("", "E", "en", 19, "en_US"),
|
||||
createDummyItem("", "Z", "en", 22, "en_US"),
|
||||
createDummyItem("", "", "en", 25, "en_US"),
|
||||
createDummyItem(imeZ1, "", "E", "en", 19, "en_US"),
|
||||
createDummyItem(imeZ1, "", "Z", "en", 22, "en_US"),
|
||||
createDummyItem(imeZ1, "", "", "en", 25, "en_US"),
|
||||
// Subtypes that has different language than the system's.
|
||||
createDummyItem("", "A", "hi_IN", 29, "en_US"),
|
||||
createDummyItem("", "E", "ja", 20, "en_US"),
|
||||
createDummyItem("", "Z", "ja", 23, "en_US"),
|
||||
createDummyItem("", "", "ja", 26, "en_US"));
|
||||
createDummyItem(imeZ1, "", "A", "hi_IN", 29, "en_US"),
|
||||
createDummyItem(imeZ1, "", "E", "ja", 20, "en_US"),
|
||||
createDummyItem(imeZ1, "", "Z", "ja", 23, "en_US"),
|
||||
createDummyItem(imeZ1, "", "", "ja", 26, "en_US"));
|
||||
|
||||
// Ensure {@link java.lang.Comparable#compareTo} contracts are satisfied.
|
||||
for (int i = 0; i < items.size(); ++i) {
|
||||
@@ -432,14 +438,25 @@ public class InputMethodSubtypeSwitchingControllerTest {
|
||||
{
|
||||
// Following two items have the same priority.
|
||||
final ImeSubtypeListItem nonSystemLocale1 =
|
||||
createDummyItem("X", "A", "ja_JP", 0, "en_US");
|
||||
createDummyItem(imeX1, "X", "A", "ja_JP", 0, "en_US");
|
||||
final ImeSubtypeListItem nonSystemLocale2 =
|
||||
createDummyItem("X", "A", "hi_IN", 1, "en_US");
|
||||
createDummyItem(imeX1, "X", "A", "hi_IN", 1, "en_US");
|
||||
assertTrue(nonSystemLocale1.compareTo(nonSystemLocale2) == 0);
|
||||
assertTrue(nonSystemLocale2.compareTo(nonSystemLocale1) == 0);
|
||||
// But those aren't equal to each other.
|
||||
assertFalse(nonSystemLocale1.equals(nonSystemLocale2));
|
||||
assertFalse(nonSystemLocale2.equals(nonSystemLocale1));
|
||||
}
|
||||
|
||||
{
|
||||
// Currently ComponentName is not used for sorting.
|
||||
final ImeSubtypeListItem ime1 = createDummyItem(imeX1, "X", "A", "ja_JP", 0, "en_US");
|
||||
final ImeSubtypeListItem ime2 = createDummyItem(imeX2, "X", "A", "ja_JP", 0, "en_US");
|
||||
assertTrue(ime1.compareTo(ime2) == 0);
|
||||
assertTrue(ime2.compareTo(ime1) == 0);
|
||||
// But those aren't equal to each other.
|
||||
assertFalse(ime1.equals(ime2));
|
||||
assertFalse(ime2.equals(ime1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user