Add a showing input method picker option by longpressing setting key

Bug: 2959271

Change-Id: I4b7e9a2de3cbe17b168ed8d0541a9b1cd9a9e107
main
satok 2010-09-03 04:25:31 +09:00
parent 6f8ff3b971
commit 9a6a4d3d5f
3 changed files with 51 additions and 5 deletions

View File

@ -320,7 +320,10 @@
<!-- Menu item for launching Input method switcher --> <!-- Menu item for launching Input method switcher -->
<string name="inputMethod">Input method</string> <string name="inputMethod">Input method</string>
<!-- Menu item for launching Input method picker -->
<string name="selectInputMethod">Select input method</string>
<!-- Title for input language selection screen --> <!-- Title for input language selection screen -->
<string name="language_selection_title">Input languages</string> <string name="language_selection_title">Input languages</string>
<!-- Title summary for input language selection screen --> <!-- Title summary for input language selection screen -->

View File

@ -1083,6 +1083,40 @@ public class LatinIME extends InputMethodService
} }
} }
private boolean hasMultipleEnabledIMEs() {
return ((InputMethodManager) getSystemService(
INPUT_METHOD_SERVICE)).getEnabledInputMethodList().size() > 1;
}
private void showInputMethodPicker() {
((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
.showInputMethodPicker();
}
private void onOptionKeyPressed() {
if (!isShowingOptionDialog()) {
if (hasMultipleEnabledIMEs()) {
showOptionsMenu();
} else {
launchSettings();
}
}
}
private void onOptionKeyLongPressed() {
if (!isShowingOptionDialog()) {
if (hasMultipleEnabledIMEs()) {
showInputMethodPicker();
} else {
launchSettings();
}
}
}
private boolean isShowingOptionDialog() {
return mOptionsDialog != null && mOptionsDialog.isShowing();
}
// Implementation of KeyboardViewListener // Implementation of KeyboardViewListener
public void onKey(int primaryCode, int[] keyCodes, int x, int y) { public void onKey(int primaryCode, int[] keyCodes, int x, int y) {
@ -1102,12 +1136,15 @@ public class LatinIME extends InputMethodService
// Shift key is handled in onPress(). // Shift key is handled in onPress().
break; break;
case Keyboard.KEYCODE_CANCEL: case Keyboard.KEYCODE_CANCEL:
if (mOptionsDialog == null || !mOptionsDialog.isShowing()) { if (!isShowingOptionDialog()) {
handleClose(); handleClose();
} }
break; break;
case LatinKeyboardView.KEYCODE_OPTIONS: case LatinKeyboardView.KEYCODE_OPTIONS:
showOptionsMenu(); onOptionKeyPressed();
break;
case LatinKeyboardView.KEYCODE_OPTIONS_LONGPRESS:
onOptionKeyLongPressed();
break; break;
case LatinKeyboardView.KEYCODE_NEXT_LANGUAGE: case LatinKeyboardView.KEYCODE_NEXT_LANGUAGE:
toggleLanguage(false, true); toggleLanguage(false, true);
@ -2400,7 +2437,7 @@ public class LatinIME extends InputMethodService
builder.setIcon(R.drawable.ic_dialog_keyboard); builder.setIcon(R.drawable.ic_dialog_keyboard);
builder.setNegativeButton(android.R.string.cancel, null); builder.setNegativeButton(android.R.string.cancel, null);
CharSequence itemSettings = getString(R.string.english_ime_settings); CharSequence itemSettings = getString(R.string.english_ime_settings);
CharSequence itemInputMethod = getString(R.string.inputMethod); CharSequence itemInputMethod = getString(R.string.selectInputMethod);
builder.setItems(new CharSequence[] { builder.setItems(new CharSequence[] {
itemSettings, itemInputMethod}, itemSettings, itemInputMethod},
new DialogInterface.OnClickListener() { new DialogInterface.OnClickListener() {

View File

@ -32,6 +32,7 @@ import java.util.List;
public class LatinKeyboardView extends LatinKeyboardBaseView { public class LatinKeyboardView extends LatinKeyboardBaseView {
static final int KEYCODE_OPTIONS = -100; static final int KEYCODE_OPTIONS = -100;
static final int KEYCODE_OPTIONS_LONGPRESS = -101;
static final int KEYCODE_VOICE = -102; static final int KEYCODE_VOICE = -102;
static final int KEYCODE_F1 = -103; static final int KEYCODE_F1 = -103;
static final int KEYCODE_NEXT_LANGUAGE = -104; static final int KEYCODE_NEXT_LANGUAGE = -104;
@ -76,7 +77,12 @@ public class LatinKeyboardView extends LatinKeyboardBaseView {
@Override @Override
protected boolean onLongPress(Key key) { protected boolean onLongPress(Key key) {
if (key.codes[0] == '0' && getKeyboard() == mPhoneKeyboard) { if (key.codes[0] == KEYCODE_OPTIONS) {
getOnKeyboardActionListener().onKey(KEYCODE_OPTIONS_LONGPRESS, null,
LatinKeyboardBaseView.NOT_A_TOUCH_COORDINATE,
LatinKeyboardBaseView.NOT_A_TOUCH_COORDINATE);
return true;
} else if (key.codes[0] == '0' && getKeyboard() == mPhoneKeyboard) {
// Long pressing on 0 in phone number keypad gives you a '+'. // Long pressing on 0 in phone number keypad gives you a '+'.
getOnKeyboardActionListener().onKey( getOnKeyboardActionListener().onKey(
'+', null, LatinKeyboardBaseView.NOT_A_TOUCH_COORDINATE, '+', null, LatinKeyboardBaseView.NOT_A_TOUCH_COORDINATE,