InputMethodUtilsTest.java revision 443c2bafd824779a75cd4b922b6839a8df9795e9
1f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka/* 2f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka * Copyright (C) 2013 The Android Open Source Project 3f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka * 4f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka * Licensed under the Apache License, Version 2.0 (the "License"); 5f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka * you may not use this file except in compliance with the License. 6f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka * You may obtain a copy of the License at 7f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka * 8f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka * http://www.apache.org/licenses/LICENSE-2.0 9f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka * 10f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka * Unless required by applicable law or agreed to in writing, software 11f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka * distributed under the License is distributed on an "AS IS" BASIS, 12f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka * See the License for the specific language governing permissions and 14f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka * limitations under the License. 15f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka */ 16f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka 17f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataokapackage android.os; 18f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka 19f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataokaimport com.android.internal.inputmethod.InputMethodUtils; 20f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka 21f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataokaimport android.content.Context; 22f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataokaimport android.content.pm.ApplicationInfo; 23f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataokaimport android.content.pm.ResolveInfo; 24f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataokaimport android.content.pm.ServiceInfo; 25f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataokaimport android.test.InstrumentationTestCase; 26f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataokaimport android.test.suitebuilder.annotation.SmallTest; 27f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataokaimport android.view.inputmethod.InputMethodInfo; 28f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataokaimport android.view.inputmethod.InputMethodSubtype; 29443c2bafd824779a75cd4b922b6839a8df9795e9Yohei Yukawaimport android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder; 30f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka 31f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataokaimport java.util.ArrayList; 32f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataokaimport java.util.List; 33f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka 34f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataokapublic class InputMethodTest extends InstrumentationTestCase { 35f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka private static final boolean IS_AUX = true; 36f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka private static final boolean IS_DEFAULT = true; 37f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka private static final boolean IS_AUTO = true; 38589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa private static final ArrayList<InputMethodSubtype> NO_SUBTYPE = null; 39f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka 40f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka @SmallTest 41f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka public void testDefaultEnabledImesWithDefaultVoiceIme() throws Exception { 42f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka final Context context = getInstrumentation().getTargetContext(); 43f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka final ArrayList<InputMethodInfo> imis = new ArrayList<InputMethodInfo>(); 44f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka imis.add(createDefaultAutoDummyVoiceIme()); 45f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka imis.add(createNonDefaultAutoDummyVoiceIme0()); 46f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka imis.add(createNonDefaultAutoDummyVoiceIme1()); 47f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka imis.add(createNonDefaultDummyVoiceIme2()); 48f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka imis.add(createDefaultDummyEnUSKeyboardIme()); 49f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka imis.add(createNonDefaultDummyJaJPKeyboardIme()); 50589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa imis.add(createNonDefaultDummyJaJPKeyboardImeWithoutSubtypes()); 51f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka final ArrayList<InputMethodInfo> enabledImis = InputMethodUtils.getDefaultEnabledImes( 52f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka context, true, imis); 53f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka assertEquals(2, enabledImis.size()); 54f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka for (int i = 0; i < enabledImis.size(); ++i) { 55f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka final InputMethodInfo imi = enabledImis.get(0); 56f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka // "DummyDefaultAutoVoiceIme" and "DummyDefaultEnKeyboardIme" 57f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka if (imi.getPackageName().equals("DummyDefaultAutoVoiceIme") 58f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka || imi.getPackageName().equals("DummyDefaultEnKeyboardIme")) { 59f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka continue; 60f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka } else { 61f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka fail("Invalid enabled subtype."); 62f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka } 63f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka } 64f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka } 65f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka 66f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka @SmallTest 67f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka public void testDefaultEnabledImesWithOutDefaultVoiceIme() throws Exception { 68f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka final Context context = getInstrumentation().getTargetContext(); 69f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka final ArrayList<InputMethodInfo> imis = new ArrayList<InputMethodInfo>(); 70f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka imis.add(createNonDefaultAutoDummyVoiceIme0()); 71f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka imis.add(createNonDefaultAutoDummyVoiceIme1()); 72f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka imis.add(createNonDefaultDummyVoiceIme2()); 73f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka imis.add(createDefaultDummyEnUSKeyboardIme()); 74f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka imis.add(createNonDefaultDummyJaJPKeyboardIme()); 75589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa imis.add(createNonDefaultDummyJaJPKeyboardImeWithoutSubtypes()); 76f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka final ArrayList<InputMethodInfo> enabledImis = InputMethodUtils.getDefaultEnabledImes( 77f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka context, true, imis); 78f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka assertEquals(3, enabledImis.size()); 79f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka for (int i = 0; i < enabledImis.size(); ++i) { 80f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka final InputMethodInfo imi = enabledImis.get(0); 81f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka // "DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1" and 82f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka // "DummyDefaultEnKeyboardIme" 83f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka if (imi.getPackageName().equals("DummyNonDefaultAutoVoiceIme0") 84f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka || imi.getPackageName().equals("DummyNonDefaultAutoVoiceIme1") 85f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka || imi.getPackageName().equals("DummyDefaultEnKeyboardIme")) { 86f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka continue; 87f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka } else { 88f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka fail("Invalid enabled subtype."); 89f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka } 90f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka } 91f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka } 92f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka 93589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa @SmallTest 94589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa public void testParcelable() throws Exception { 95589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa final ArrayList<InputMethodInfo> originalList = new ArrayList<InputMethodInfo>(); 96589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa originalList.add(createNonDefaultAutoDummyVoiceIme0()); 97589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa originalList.add(createNonDefaultAutoDummyVoiceIme1()); 98589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa originalList.add(createNonDefaultDummyVoiceIme2()); 99589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa originalList.add(createDefaultDummyEnUSKeyboardIme()); 100589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa originalList.add(createNonDefaultDummyJaJPKeyboardIme()); 101589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa originalList.add(createNonDefaultDummyJaJPKeyboardImeWithoutSubtypes()); 102589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa 103589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa final List<InputMethodInfo> clonedList = cloneViaParcel(originalList); 104589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa assertNotNull(clonedList); 105c18cd393f65146fac03a9bdfa45380a69460ee98Yohei Yukawa final List<InputMethodInfo> clonedClonedList = cloneViaParcel(clonedList); 106c18cd393f65146fac03a9bdfa45380a69460ee98Yohei Yukawa assertNotNull(clonedClonedList); 107589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa assertEquals(originalList, clonedList); 108c18cd393f65146fac03a9bdfa45380a69460ee98Yohei Yukawa assertEquals(clonedList, clonedClonedList); 109c18cd393f65146fac03a9bdfa45380a69460ee98Yohei Yukawa assertEquals(originalList.size(), clonedList.size()); 110c18cd393f65146fac03a9bdfa45380a69460ee98Yohei Yukawa assertEquals(clonedList.size(), clonedClonedList.size()); 111589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa for (int imeIndex = 0; imeIndex < originalList.size(); ++imeIndex) { 112c18cd393f65146fac03a9bdfa45380a69460ee98Yohei Yukawa verifyEquality(originalList.get(imeIndex), clonedList.get(imeIndex)); 113c18cd393f65146fac03a9bdfa45380a69460ee98Yohei Yukawa verifyEquality(clonedList.get(imeIndex), clonedClonedList.get(imeIndex)); 114589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa } 115589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa } 116589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa 117589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa private static List<InputMethodInfo> cloneViaParcel(final List<InputMethodInfo> list) { 118589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa Parcel p = null; 119589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa try { 120589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa p = Parcel.obtain(); 121589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa p.writeTypedList(list); 122589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa p.setDataPosition(0); 123589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa return p.createTypedArrayList(InputMethodInfo.CREATOR); 124589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa } finally { 125589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa if (p != null) { 126589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa p.recycle(); 127589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa } 128589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa } 129589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa } 130589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa 131c18cd393f65146fac03a9bdfa45380a69460ee98Yohei Yukawa private static void verifyEquality(InputMethodInfo expected, InputMethodInfo actual) { 132c18cd393f65146fac03a9bdfa45380a69460ee98Yohei Yukawa assertEquals(expected, actual); 133c18cd393f65146fac03a9bdfa45380a69460ee98Yohei Yukawa assertEquals(expected.getSubtypeCount(), actual.getSubtypeCount()); 134c18cd393f65146fac03a9bdfa45380a69460ee98Yohei Yukawa for (int subtypeIndex = 0; subtypeIndex < expected.getSubtypeCount(); ++subtypeIndex) { 135c18cd393f65146fac03a9bdfa45380a69460ee98Yohei Yukawa final InputMethodSubtype expectedSubtype = expected.getSubtypeAt(subtypeIndex); 136c18cd393f65146fac03a9bdfa45380a69460ee98Yohei Yukawa final InputMethodSubtype actualSubtype = actual.getSubtypeAt(subtypeIndex); 137c18cd393f65146fac03a9bdfa45380a69460ee98Yohei Yukawa assertEquals(expectedSubtype, actualSubtype); 138c18cd393f65146fac03a9bdfa45380a69460ee98Yohei Yukawa assertEquals(expectedSubtype.hashCode(), actualSubtype.hashCode()); 139c18cd393f65146fac03a9bdfa45380a69460ee98Yohei Yukawa } 140c18cd393f65146fac03a9bdfa45380a69460ee98Yohei Yukawa } 141c18cd393f65146fac03a9bdfa45380a69460ee98Yohei Yukawa 142f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka private static InputMethodInfo createDummyInputMethodInfo(String packageName, String name, 143f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka CharSequence label, boolean isAuxIme, boolean isDefault, 144f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka List<InputMethodSubtype> subtypes) { 145f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka final ResolveInfo ri = new ResolveInfo(); 146f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka final ServiceInfo si = new ServiceInfo(); 147f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka final ApplicationInfo ai = new ApplicationInfo(); 148f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka ai.packageName = packageName; 149f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka ai.enabled = true; 150f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka ai.flags |= ApplicationInfo.FLAG_SYSTEM; 151f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka si.applicationInfo = ai; 152f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka si.enabled = true; 153f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka si.packageName = packageName; 154f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka si.name = name; 155f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka si.exported = true; 156f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka si.nonLocalizedLabel = label; 157f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka ri.serviceInfo = si; 158f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka return new InputMethodInfo(ri, isAuxIme, "", subtypes, 1, isDefault); 159f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka } 160f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka 161f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka private static InputMethodSubtype createDummyInputMethodSubtype(String locale, String mode, 162f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka boolean isAuxiliary, boolean overridesImplicitlyEnabledSubtype) { 163443c2bafd824779a75cd4b922b6839a8df9795e9Yohei Yukawa return new InputMethodSubtypeBuilder() 164443c2bafd824779a75cd4b922b6839a8df9795e9Yohei Yukawa .setSubtypeNameResId(0) 165443c2bafd824779a75cd4b922b6839a8df9795e9Yohei Yukawa .setSubtypeIconResId(0) 166443c2bafd824779a75cd4b922b6839a8df9795e9Yohei Yukawa .setSubtypeLocale(locale) 167443c2bafd824779a75cd4b922b6839a8df9795e9Yohei Yukawa .setSubtypeMode(mode) 168443c2bafd824779a75cd4b922b6839a8df9795e9Yohei Yukawa .setSubtypeExtraValue("") 169443c2bafd824779a75cd4b922b6839a8df9795e9Yohei Yukawa .setIsAuxiliary(isAuxiliary) 170443c2bafd824779a75cd4b922b6839a8df9795e9Yohei Yukawa .setOverridesImplicitlyEnabledSubtype(overridesImplicitlyEnabledSubtype) 171443c2bafd824779a75cd4b922b6839a8df9795e9Yohei Yukawa .build(); 172f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka } 173f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka 174f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka private static InputMethodInfo createDefaultAutoDummyVoiceIme() { 175f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>(); 176f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka subtypes.add(createDummyInputMethodSubtype("auto", "voice", IS_AUX, IS_AUTO)); 177f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka subtypes.add(createDummyInputMethodSubtype("en_US", "voice", IS_AUX, !IS_AUTO)); 178f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka return createDummyInputMethodInfo("DummyDefaultAutoVoiceIme", "dummy.voice0", 179f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka "DummyVoice0", IS_AUX, IS_DEFAULT, subtypes); 180f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka } 181f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka 182f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka private static InputMethodInfo createNonDefaultAutoDummyVoiceIme0() { 183f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>(); 184f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka subtypes.add(createDummyInputMethodSubtype("auto", "voice", IS_AUX, IS_AUTO)); 185f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka subtypes.add(createDummyInputMethodSubtype("en_US", "voice", IS_AUX, !IS_AUTO)); 186f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka return createDummyInputMethodInfo("DummyNonDefaultAutoVoiceIme0", "dummy.voice1", 187f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka "DummyVoice1", IS_AUX, !IS_DEFAULT, subtypes); 188f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka } 189f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka 190f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka private static InputMethodInfo createNonDefaultAutoDummyVoiceIme1() { 191f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>(); 192f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka subtypes.add(createDummyInputMethodSubtype("auto", "voice", IS_AUX, IS_AUTO)); 193f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka subtypes.add(createDummyInputMethodSubtype("en_US", "voice", IS_AUX, !IS_AUTO)); 194f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka return createDummyInputMethodInfo("DummyNonDefaultAutoVoiceIme1", "dummy.voice2", 195f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka "DummyVoice2", IS_AUX, !IS_DEFAULT, subtypes); 196f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka } 197f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka 198f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka private static InputMethodInfo createNonDefaultDummyVoiceIme2() { 199f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>(); 200f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka subtypes.add(createDummyInputMethodSubtype("en_US", "voice", IS_AUX, !IS_AUTO)); 201f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka return createDummyInputMethodInfo("DummyNonDefaultVoiceIme2", "dummy.voice3", 202f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka "DummyVoice3", IS_AUX, !IS_DEFAULT, subtypes); 203f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka } 204f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka 205f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka private static InputMethodInfo createDefaultDummyEnUSKeyboardIme() { 206f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>(); 207f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka subtypes.add(createDummyInputMethodSubtype("en_US", "keyboard", !IS_AUX, !IS_AUTO)); 208f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka return createDummyInputMethodInfo("DummyDefaultEnKeyboardIme", "dummy.keyboard0", 209f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka "DummyKeyboard0", !IS_AUX, IS_DEFAULT, subtypes); 210f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka } 211f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka 212f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka private static InputMethodInfo createNonDefaultDummyJaJPKeyboardIme() { 213f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>(); 214f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka subtypes.add(createDummyInputMethodSubtype("ja_JP", "keyboard", !IS_AUX, !IS_AUTO)); 215f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka return createDummyInputMethodInfo("DummyNonDefaultJaJPKeyboardIme", "dummy.keyboard1", 216f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka "DummyKeyboard1", !IS_AUX, !IS_DEFAULT, subtypes); 217f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka } 218589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa 219589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa // Although IMEs that have no subtype are considered to be deprecated, the Android framework 220589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa // must still be able to handle such IMEs as well as IMEs that have at least one subtype. 221589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa private static InputMethodInfo createNonDefaultDummyJaJPKeyboardImeWithoutSubtypes() { 222589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>(); 223589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa return createDummyInputMethodInfo("DummyNonDefaultJaJPKeyboardImeWithoutSubtypes", 224589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa "dummy.keyboard2", "DummyKeyboard2", !IS_AUX, !IS_DEFAULT, NO_SUBTYPE); 225589800485d770cab7b159ffcf4b18c10ae2aee6dYohei Yukawa } 226f1367b7e903a2a69a8f833bb272e91d77abd57c6Satoshi Kataoka} 227