Search in sources :

Example 26 with ImeSubtypeListItem

use of com.android.internal.inputmethod.InputMethodSubtypeSwitchingController.ImeSubtypeListItem in project android_frameworks_base by AOSPA.

the class InputMethodSubtypeSwitchingControllerTest method assertRotationOrder.

private void assertRotationOrder(final ControllerImpl controller, final boolean onlyCurrentIme, final ImeSubtypeListItem... expectedRotationOrderOfImeSubtypeList) {
    final int N = expectedRotationOrderOfImeSubtypeList.length;
    for (int i = 0; i < N; i++) {
        final int currentIndex = i;
        final int prevIndex = (currentIndex + N - 1) % N;
        final int nextIndex = (currentIndex + 1) % N;
        final ImeSubtypeListItem currentItem = expectedRotationOrderOfImeSubtypeList[currentIndex];
        final ImeSubtypeListItem nextItem = expectedRotationOrderOfImeSubtypeList[nextIndex];
        final ImeSubtypeListItem prevItem = expectedRotationOrderOfImeSubtypeList[prevIndex];
        assertNextInputMethod(controller, onlyCurrentIme, currentItem, nextItem, prevItem);
    }
}
Also used : ImeSubtypeListItem(com.android.internal.inputmethod.InputMethodSubtypeSwitchingController.ImeSubtypeListItem)

Example 27 with ImeSubtypeListItem

use of com.android.internal.inputmethod.InputMethodSubtypeSwitchingController.ImeSubtypeListItem in project android_frameworks_base by AOSPA.

the class InputMethodSubtypeSwitchingControllerTest method testControllerImpl.

@SmallTest
public void testControllerImpl() throws Exception {
    final List<ImeSubtypeListItem> disabledItems = createDisabledImeSubtypes();
    final ImeSubtypeListItem disabledIme_en_US = disabledItems.get(0);
    final ImeSubtypeListItem disabledIme_hi = disabledItems.get(1);
    final ImeSubtypeListItem disabledSwitchingUnawareIme = disabledItems.get(2);
    final ImeSubtypeListItem disabledSubtypeUnawareIme = disabledItems.get(3);
    final List<ImeSubtypeListItem> enabledItems = createEnabledImeSubtypes();
    final ImeSubtypeListItem latinIme_en_US = enabledItems.get(0);
    final ImeSubtypeListItem latinIme_fr = enabledItems.get(1);
    final ImeSubtypeListItem switchingUnawarelatinIme_en_UK = enabledItems.get(2);
    final ImeSubtypeListItem switchingUnawarelatinIme_hi = enabledItems.get(3);
    final ImeSubtypeListItem subtypeUnawareIme = enabledItems.get(4);
    final ImeSubtypeListItem japaneseIme_ja_JP = enabledItems.get(5);
    final ImeSubtypeListItem switchUnawareJapaneseIme_ja_JP = enabledItems.get(6);
    final ControllerImpl controller = ControllerImpl.createFrom(null, /* currentInstance */
    enabledItems);
    // switching-aware loop
    assertRotationOrder(controller, false, /* onlyCurrentIme */
    latinIme_en_US, latinIme_fr, japaneseIme_ja_JP);
    // switching-unaware loop
    assertRotationOrder(controller, false, /* onlyCurrentIme */
    switchingUnawarelatinIme_en_UK, switchingUnawarelatinIme_hi, subtypeUnawareIme, switchUnawareJapaneseIme_ja_JP);
    // test onlyCurrentIme == true
    assertRotationOrder(controller, true, /* onlyCurrentIme */
    latinIme_en_US, latinIme_fr);
    assertRotationOrder(controller, true, /* onlyCurrentIme */
    switchingUnawarelatinIme_en_UK, switchingUnawarelatinIme_hi);
    assertNextInputMethod(controller, true, /* onlyCurrentIme */
    subtypeUnawareIme, null, null);
    assertNextInputMethod(controller, true, /* onlyCurrentIme */
    japaneseIme_ja_JP, null, null);
    assertNextInputMethod(controller, true, /* onlyCurrentIme */
    switchUnawareJapaneseIme_ja_JP, null, null);
    // Make sure that disabled IMEs are not accepted.
    assertNextInputMethod(controller, false, /* onlyCurrentIme */
    disabledIme_en_US, null, null);
    assertNextInputMethod(controller, false, /* onlyCurrentIme */
    disabledIme_hi, null, null);
    assertNextInputMethod(controller, false, /* onlyCurrentIme */
    disabledSwitchingUnawareIme, null, null);
    assertNextInputMethod(controller, false, /* onlyCurrentIme */
    disabledSubtypeUnawareIme, null, null);
    assertNextInputMethod(controller, true, /* onlyCurrentIme */
    disabledIme_en_US, null, null);
    assertNextInputMethod(controller, true, /* onlyCurrentIme */
    disabledIme_hi, null, null);
    assertNextInputMethod(controller, true, /* onlyCurrentIme */
    disabledSwitchingUnawareIme, null, null);
    assertNextInputMethod(controller, true, /* onlyCurrentIme */
    disabledSubtypeUnawareIme, null, null);
}
Also used : ControllerImpl(com.android.internal.inputmethod.InputMethodSubtypeSwitchingController.ControllerImpl) ImeSubtypeListItem(com.android.internal.inputmethod.InputMethodSubtypeSwitchingController.ImeSubtypeListItem) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Example 28 with ImeSubtypeListItem

use of com.android.internal.inputmethod.InputMethodSubtypeSwitchingController.ImeSubtypeListItem in project android_frameworks_base by AOSPA.

the class InputMethodSubtypeSwitchingControllerTest method assertNextInputMethod.

private void assertNextInputMethod(final ControllerImpl controller, final boolean onlyCurrentIme, final ImeSubtypeListItem currentItem, final ImeSubtypeListItem nextItem, final ImeSubtypeListItem prevItem) {
    InputMethodSubtype subtype = null;
    if (currentItem.mSubtypeName != null) {
        subtype = createDummySubtype(currentItem.mSubtypeName.toString());
    }
    final ImeSubtypeListItem nextIme = controller.getNextInputMethod(onlyCurrentIme, currentItem.mImi, subtype, true);
    assertEquals(nextItem, nextIme);
    final ImeSubtypeListItem prevIme = controller.getNextInputMethod(onlyCurrentIme, currentItem.mImi, subtype, false);
    assertEquals(prevItem, prevIme);
}
Also used : InputMethodSubtype(android.view.inputmethod.InputMethodSubtype) ImeSubtypeListItem(com.android.internal.inputmethod.InputMethodSubtypeSwitchingController.ImeSubtypeListItem)

Example 29 with ImeSubtypeListItem

use of com.android.internal.inputmethod.InputMethodSubtypeSwitchingController.ImeSubtypeListItem in project android_frameworks_base by AOSPA.

the class InputMethodSubtypeSwitchingControllerTest method addDummyImeSubtypeListItems.

private static void addDummyImeSubtypeListItems(List<ImeSubtypeListItem> items, String imeName, String imeLabel, List<String> subtypeLocales, boolean supportsSwitchingToNextInputMethod) {
    final ResolveInfo ri = new ResolveInfo();
    final ServiceInfo si = new ServiceInfo();
    final ApplicationInfo ai = new ApplicationInfo();
    ai.packageName = DUMMY_PACKAGE_NAME;
    ai.enabled = true;
    si.applicationInfo = ai;
    si.enabled = true;
    si.packageName = DUMMY_PACKAGE_NAME;
    si.name = imeName;
    si.exported = true;
    si.nonLocalizedLabel = imeLabel;
    ri.serviceInfo = si;
    List<InputMethodSubtype> subtypes = null;
    if (subtypeLocales != null) {
        subtypes = new ArrayList<>();
        for (String subtypeLocale : subtypeLocales) {
            subtypes.add(createDummySubtype(subtypeLocale));
        }
    }
    final InputMethodInfo imi = new InputMethodInfo(ri, DUMMY_IS_AUX_IME, DUMMY_SETTING_ACTIVITY_NAME, subtypes, DUMMY_IS_DEFAULT_RES_ID, DUMMY_FORCE_DEFAULT, supportsSwitchingToNextInputMethod);
    if (subtypes == null) {
        items.add(new ImeSubtypeListItem(imeName, null, /* variableName */
        imi, NOT_A_SUBTYPE_ID, null, SYSTEM_LOCALE));
    } else {
        for (int i = 0; i < subtypes.size(); ++i) {
            final String subtypeLocale = subtypeLocales.get(i);
            items.add(new ImeSubtypeListItem(imeName, subtypeLocale, imi, i, subtypeLocale, SYSTEM_LOCALE));
        }
    }
}
Also used : ResolveInfo(android.content.pm.ResolveInfo) ServiceInfo(android.content.pm.ServiceInfo) InputMethodSubtype(android.view.inputmethod.InputMethodSubtype) ApplicationInfo(android.content.pm.ApplicationInfo) InputMethodInfo(android.view.inputmethod.InputMethodInfo) ImeSubtypeListItem(com.android.internal.inputmethod.InputMethodSubtypeSwitchingController.ImeSubtypeListItem)

Example 30 with ImeSubtypeListItem

use of com.android.internal.inputmethod.InputMethodSubtypeSwitchingController.ImeSubtypeListItem in project android_frameworks_base by AOSPA.

the class InputMethodSubtypeSwitchingControllerTest method testControllerImplWithUserAction.

@SmallTest
public void testControllerImplWithUserAction() throws Exception {
    final List<ImeSubtypeListItem> enabledItems = createEnabledImeSubtypes();
    final ImeSubtypeListItem latinIme_en_US = enabledItems.get(0);
    final ImeSubtypeListItem latinIme_fr = enabledItems.get(1);
    final ImeSubtypeListItem switchingUnawarelatinIme_en_UK = enabledItems.get(2);
    final ImeSubtypeListItem switchingUnawarelatinIme_hi = enabledItems.get(3);
    final ImeSubtypeListItem subtypeUnawareIme = enabledItems.get(4);
    final ImeSubtypeListItem japaneseIme_ja_JP = enabledItems.get(5);
    final ImeSubtypeListItem switchUnawareJapaneseIme_ja_JP = enabledItems.get(6);
    final ControllerImpl controller = ControllerImpl.createFrom(null, /* currentInstance */
    enabledItems);
    // === switching-aware loop ===
    assertRotationOrder(controller, false, /* onlyCurrentIme */
    latinIme_en_US, latinIme_fr, japaneseIme_ja_JP);
    // Then notify that a user did something for latinIme_fr.
    onUserAction(controller, latinIme_fr);
    assertRotationOrder(controller, false, /* onlyCurrentIme */
    latinIme_fr, latinIme_en_US, japaneseIme_ja_JP);
    // Then notify that a user did something for latinIme_fr again.
    onUserAction(controller, latinIme_fr);
    assertRotationOrder(controller, false, /* onlyCurrentIme */
    latinIme_fr, latinIme_en_US, japaneseIme_ja_JP);
    // Then notify that a user did something for japaneseIme_ja_JP.
    onUserAction(controller, latinIme_fr);
    assertRotationOrder(controller, false, /* onlyCurrentIme */
    japaneseIme_ja_JP, latinIme_fr, latinIme_en_US);
    // Check onlyCurrentIme == true.
    assertNextInputMethod(controller, true, /* onlyCurrentIme */
    japaneseIme_ja_JP, null, null);
    assertRotationOrder(controller, true, /* onlyCurrentIme */
    latinIme_fr, latinIme_en_US);
    assertRotationOrder(controller, true, /* onlyCurrentIme */
    latinIme_en_US, latinIme_fr);
    // === switching-unaware loop ===
    assertRotationOrder(controller, false, /* onlyCurrentIme */
    switchingUnawarelatinIme_en_UK, switchingUnawarelatinIme_hi, subtypeUnawareIme, switchUnawareJapaneseIme_ja_JP);
    // User action should be ignored for switching unaware IMEs.
    onUserAction(controller, switchingUnawarelatinIme_hi);
    assertRotationOrder(controller, false, /* onlyCurrentIme */
    switchingUnawarelatinIme_en_UK, switchingUnawarelatinIme_hi, subtypeUnawareIme, switchUnawareJapaneseIme_ja_JP);
    // User action should be ignored for switching unaware IMEs.
    onUserAction(controller, switchUnawareJapaneseIme_ja_JP);
    assertRotationOrder(controller, false, /* onlyCurrentIme */
    switchingUnawarelatinIme_en_UK, switchingUnawarelatinIme_hi, subtypeUnawareIme, switchUnawareJapaneseIme_ja_JP);
    // Check onlyCurrentIme == true.
    assertRotationOrder(controller, true, /* onlyCurrentIme */
    switchingUnawarelatinIme_en_UK, switchingUnawarelatinIme_hi);
    assertNextInputMethod(controller, true, /* onlyCurrentIme */
    subtypeUnawareIme, null, null);
    assertNextInputMethod(controller, true, /* onlyCurrentIme */
    switchUnawareJapaneseIme_ja_JP, null, null);
    // Rotation order should be preserved when created with the same subtype list.
    final List<ImeSubtypeListItem> sameEnabledItems = createEnabledImeSubtypes();
    final ControllerImpl newController = ControllerImpl.createFrom(controller, sameEnabledItems);
    assertRotationOrder(newController, false, /* onlyCurrentIme */
    japaneseIme_ja_JP, latinIme_fr, latinIme_en_US);
    assertRotationOrder(newController, false, /* onlyCurrentIme */
    switchingUnawarelatinIme_en_UK, switchingUnawarelatinIme_hi, subtypeUnawareIme, switchUnawareJapaneseIme_ja_JP);
    // Rotation order should be initialized when created with a different subtype list.
    final List<ImeSubtypeListItem> differentEnabledItems = Arrays.asList(latinIme_en_US, latinIme_fr, switchingUnawarelatinIme_en_UK, switchUnawareJapaneseIme_ja_JP);
    final ControllerImpl anotherController = ControllerImpl.createFrom(controller, differentEnabledItems);
    assertRotationOrder(anotherController, false, /* onlyCurrentIme */
    latinIme_en_US, latinIme_fr);
    assertRotationOrder(anotherController, false, /* onlyCurrentIme */
    switchingUnawarelatinIme_en_UK, switchUnawareJapaneseIme_ja_JP);
}
Also used : ControllerImpl(com.android.internal.inputmethod.InputMethodSubtypeSwitchingController.ControllerImpl) ImeSubtypeListItem(com.android.internal.inputmethod.InputMethodSubtypeSwitchingController.ImeSubtypeListItem) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Aggregations

ImeSubtypeListItem (com.android.internal.inputmethod.InputMethodSubtypeSwitchingController.ImeSubtypeListItem)50 SmallTest (android.test.suitebuilder.annotation.SmallTest)15 InputMethodInfo (android.view.inputmethod.InputMethodInfo)15 InputMethodSubtype (android.view.inputmethod.InputMethodSubtype)15 ControllerImpl (com.android.internal.inputmethod.InputMethodSubtypeSwitchingController.ControllerImpl)10 ArrayList (java.util.ArrayList)10 AlertDialog (android.app.AlertDialog)5 Context (android.content.Context)5 DialogInterface (android.content.DialogInterface)5 OnCancelListener (android.content.DialogInterface.OnCancelListener)5 OnClickListener (android.content.DialogInterface.OnClickListener)5 ApplicationInfo (android.content.pm.ApplicationInfo)5 ResolveInfo (android.content.pm.ResolveInfo)5 ServiceInfo (android.content.pm.ServiceInfo)5 TypedArray (android.content.res.TypedArray)5 Drawable (android.graphics.drawable.Drawable)5 LocaleList (android.os.LocaleList)5 ContextThemeWrapper (android.view.ContextThemeWrapper)5 LayoutInflater (android.view.LayoutInflater)5 View (android.view.View)5