private void setContextThemeWrapper(final Context context, final KeyboardTheme keyboardTheme) {
   if (mThemeContext == null || mKeyboardTheme.mThemeId != keyboardTheme.mThemeId) {
     mKeyboardTheme = keyboardTheme;
     mThemeContext = new ContextThemeWrapper(context, keyboardTheme.mStyleId);
     KeyboardLayoutSet.clearKeyboardCache();
   }
 }
  private void doTestMoreKeysOf(
      final int code,
      final InputMethodSubtype subtype,
      final int elementId,
      final int inputType,
      final int imeOptions,
      final ExpectedMoreKey... expectedMoreKeys) {
    final EditorInfo editorInfo = new EditorInfo();
    editorInfo.inputType = inputType;
    editorInfo.imeOptions = imeOptions;
    final KeyboardLayoutSet layoutSet = createKeyboardLayoutSet(subtype, editorInfo);
    final Keyboard keyboard = layoutSet.getKeyboard(elementId);

    final Key actualKey = keyboard.getKey(code);
    final MoreKeySpec[] actualMoreKeys = actualKey.getMoreKeys();
    final String tag = actualKey.toString() + " moreKeys=" + Arrays.toString(actualMoreKeys);
    if (expectedMoreKeys.length == 0) {
      assertEquals(tag, null, actualMoreKeys);
      return;
    }
    if (expectedMoreKeys.length == 1) {
      assertEquals(tag + " fixedOrder", false, actualKey.isMoreKeysFixedOrder());
      assertEquals(tag + " fixedColumn", false, actualKey.isMoreKeysFixedColumn());
    } else {
      assertEquals(tag + " fixedOrder", true, actualKey.isMoreKeysFixedOrder());
      assertEquals(tag + " fixedColumn", true, actualKey.isMoreKeysFixedColumn());
      // TODO: Can't handle multiple rows of more keys.
      assertEquals(tag + " column", expectedMoreKeys.length, actualKey.getMoreKeysColumnNumber());
    }
    assertNotNull(tag + " moreKeys", actualMoreKeys);
    assertEquals(tag, expectedMoreKeys.length, actualMoreKeys.length);
    for (int index = 0; index < actualMoreKeys.length; index++) {
      final int expectedLabelResId = expectedMoreKeys[index].mLabelResId;
      if (expectedLabelResId == ExpectedMoreKey.NO_LABEL) {
        assertEquals(tag + " label " + index, null, actualMoreKeys[index].mLabel);
      } else {
        final CharSequence expectedLabel = getContext().getText(expectedLabelResId);
        assertEquals(tag + " label " + index, expectedLabel, actualMoreKeys[index].mLabel);
      }
      final int expectedIconId = expectedMoreKeys[index].mIconId;
      assertEquals(tag + " icon " + index, expectedIconId, actualMoreKeys[index].mIconId);
    }
  }
 // Implements {@link KeyboardState.SwitchActions}.
 @Override
 public void setSymbolsShiftedKeyboard() {
   setKeyboard(mKeyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_SYMBOLS_SHIFTED));
 }
 // Implements {@link KeyboardState.SwitchActions}.
 @Override
 public void setSymbolsKeyboard() {
   setKeyboard(mKeyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_SYMBOLS));
 }
 // Implements {@link KeyboardState.SwitchActions}.
 @Override
 public void setAlphabetShiftLockShiftedKeyboard() {
   setKeyboard(mKeyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED));
 }
 // Implements {@link KeyboardState.SwitchActions}.
 @Override
 public void setAlphabetAutomaticShiftedKeyboard() {
   setKeyboard(mKeyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED));
 }
 // Implements {@link KeyboardState.SwitchActions}.
 @Override
 public void setAlphabetManualShiftedKeyboard() {
   setKeyboard(mKeyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED));
 }
 // Implements {@link KeyboardState.SwitchActions}.
 @Override
 public void setAlphabetKeyboard() {
   setKeyboard(mKeyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET));
 }