/* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.os; import com.android.internal.inputmethod.InputMethodUtils; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.test.InstrumentationTestCase; import android.test.suitebuilder.annotation.SmallTest; import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodSubtype; import java.util.ArrayList; import java.util.List; public class InputMethodTest extends InstrumentationTestCase { private static final boolean IS_AUX = true; private static final boolean IS_DEFAULT = true; private static final boolean IS_AUTO = true; @SmallTest public void testDefaultEnabledImesWithDefaultVoiceIme() throws Exception { final Context context = getInstrumentation().getTargetContext(); final ArrayList imis = new ArrayList(); imis.add(createDefaultAutoDummyVoiceIme()); imis.add(createNonDefaultAutoDummyVoiceIme0()); imis.add(createNonDefaultAutoDummyVoiceIme1()); imis.add(createNonDefaultDummyVoiceIme2()); imis.add(createDefaultDummyEnUSKeyboardIme()); imis.add(createNonDefaultDummyJaJPKeyboardIme()); final ArrayList enabledImis = InputMethodUtils.getDefaultEnabledImes( context, true, imis); assertEquals(2, enabledImis.size()); for (int i = 0; i < enabledImis.size(); ++i) { final InputMethodInfo imi = enabledImis.get(0); // "DummyDefaultAutoVoiceIme" and "DummyDefaultEnKeyboardIme" if (imi.getPackageName().equals("DummyDefaultAutoVoiceIme") || imi.getPackageName().equals("DummyDefaultEnKeyboardIme")) { continue; } else { fail("Invalid enabled subtype."); } } } @SmallTest public void testDefaultEnabledImesWithOutDefaultVoiceIme() throws Exception { final Context context = getInstrumentation().getTargetContext(); final ArrayList imis = new ArrayList(); imis.add(createNonDefaultAutoDummyVoiceIme0()); imis.add(createNonDefaultAutoDummyVoiceIme1()); imis.add(createNonDefaultDummyVoiceIme2()); imis.add(createDefaultDummyEnUSKeyboardIme()); imis.add(createNonDefaultDummyJaJPKeyboardIme()); final ArrayList enabledImis = InputMethodUtils.getDefaultEnabledImes( context, true, imis); assertEquals(3, enabledImis.size()); for (int i = 0; i < enabledImis.size(); ++i) { final InputMethodInfo imi = enabledImis.get(0); // "DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1" and // "DummyDefaultEnKeyboardIme" if (imi.getPackageName().equals("DummyNonDefaultAutoVoiceIme0") || imi.getPackageName().equals("DummyNonDefaultAutoVoiceIme1") || imi.getPackageName().equals("DummyDefaultEnKeyboardIme")) { continue; } else { fail("Invalid enabled subtype."); } } } private static InputMethodInfo createDummyInputMethodInfo(String packageName, String name, CharSequence label, boolean isAuxIme, boolean isDefault, List subtypes) { final ResolveInfo ri = new ResolveInfo(); final ServiceInfo si = new ServiceInfo(); final ApplicationInfo ai = new ApplicationInfo(); ai.packageName = packageName; ai.enabled = true; ai.flags |= ApplicationInfo.FLAG_SYSTEM; si.applicationInfo = ai; si.enabled = true; si.packageName = packageName; si.name = name; si.exported = true; si.nonLocalizedLabel = label; ri.serviceInfo = si; return new InputMethodInfo(ri, isAuxIme, "", subtypes, 1, isDefault); } private static InputMethodSubtype createDummyInputMethodSubtype(String locale, String mode, boolean isAuxiliary, boolean overridesImplicitlyEnabledSubtype) { return new InputMethodSubtype(0, 0, locale, mode, "", isAuxiliary, overridesImplicitlyEnabledSubtype); } private static InputMethodInfo createDefaultAutoDummyVoiceIme() { final ArrayList subtypes = new ArrayList(); subtypes.add(createDummyInputMethodSubtype("auto", "voice", IS_AUX, IS_AUTO)); subtypes.add(createDummyInputMethodSubtype("en_US", "voice", IS_AUX, !IS_AUTO)); return createDummyInputMethodInfo("DummyDefaultAutoVoiceIme", "dummy.voice0", "DummyVoice0", IS_AUX, IS_DEFAULT, subtypes); } private static InputMethodInfo createNonDefaultAutoDummyVoiceIme0() { final ArrayList subtypes = new ArrayList(); subtypes.add(createDummyInputMethodSubtype("auto", "voice", IS_AUX, IS_AUTO)); subtypes.add(createDummyInputMethodSubtype("en_US", "voice", IS_AUX, !IS_AUTO)); return createDummyInputMethodInfo("DummyNonDefaultAutoVoiceIme0", "dummy.voice1", "DummyVoice1", IS_AUX, !IS_DEFAULT, subtypes); } private static InputMethodInfo createNonDefaultAutoDummyVoiceIme1() { final ArrayList subtypes = new ArrayList(); subtypes.add(createDummyInputMethodSubtype("auto", "voice", IS_AUX, IS_AUTO)); subtypes.add(createDummyInputMethodSubtype("en_US", "voice", IS_AUX, !IS_AUTO)); return createDummyInputMethodInfo("DummyNonDefaultAutoVoiceIme1", "dummy.voice2", "DummyVoice2", IS_AUX, !IS_DEFAULT, subtypes); } private static InputMethodInfo createNonDefaultDummyVoiceIme2() { final ArrayList subtypes = new ArrayList(); subtypes.add(createDummyInputMethodSubtype("en_US", "voice", IS_AUX, !IS_AUTO)); return createDummyInputMethodInfo("DummyNonDefaultVoiceIme2", "dummy.voice3", "DummyVoice3", IS_AUX, !IS_DEFAULT, subtypes); } private static InputMethodInfo createDefaultDummyEnUSKeyboardIme() { final ArrayList subtypes = new ArrayList(); subtypes.add(createDummyInputMethodSubtype("en_US", "keyboard", !IS_AUX, !IS_AUTO)); return createDummyInputMethodInfo("DummyDefaultEnKeyboardIme", "dummy.keyboard0", "DummyKeyboard0", !IS_AUX, IS_DEFAULT, subtypes); } private static InputMethodInfo createNonDefaultDummyJaJPKeyboardIme() { final ArrayList subtypes = new ArrayList(); subtypes.add(createDummyInputMethodSubtype("ja_JP", "keyboard", !IS_AUX, !IS_AUTO)); return createDummyInputMethodInfo("DummyNonDefaultJaJPKeyboardIme", "dummy.keyboard1", "DummyKeyboard1", !IS_AUX, !IS_DEFAULT, subtypes); } }