Auto-switch back from symbols keyboard on space.

Also fix bug 1904029: Rotating keyboard while texting causes words to be deleted.
main
Amith Yamasani 2009-07-21 15:47:11 -07:00 committed by Jean-Baptiste Queru
parent 34386e6988
commit b19668cfc1
2 changed files with 44 additions and 4 deletions

View File

@ -37,6 +37,10 @@ public class KeyboardSwitcher {
public static final int KEYBOARDMODE_EMAIL = R.id.mode_email;
public static final int KEYBOARDMODE_IM = R.id.mode_im;
private static final int SYMBOLS_MODE_STATE_NONE = 0;
private static final int SYMBOLS_MODE_STATE_BEGIN = 1;
private static final int SYMBOLS_MODE_STATE_SYMBOL = 2;
LatinKeyboardView mInputView;
LatinIME mContext;
@ -50,6 +54,7 @@ public class KeyboardSwitcher {
private int mImeOptions;
private int mTextMode = MODE_TEXT_QWERTY;
private boolean mIsSymbols;
private int mSymbolsModeState = SYMBOLS_MODE_STATE_NONE;
private int mLastDisplayWidth;
@ -228,5 +233,28 @@ public class KeyboardSwitcher {
void toggleSymbols() {
setKeyboardMode(mMode, mImeOptions, !mIsSymbols);
if (mIsSymbols) {
mSymbolsModeState = SYMBOLS_MODE_STATE_BEGIN;
} else {
mSymbolsModeState = SYMBOLS_MODE_STATE_NONE;
}
}
/**
* Updates state machine to figure out when to automatically switch back to alpha mode.
* Returns true if the keyboard needs to switch back
*/
boolean onKey(int key) {
// Switch back to alpha mode if user types one or more non-space characters followed by
// a space.
switch (mSymbolsModeState) {
case SYMBOLS_MODE_STATE_BEGIN:
if (key != ' ' && key > 0) mSymbolsModeState = SYMBOLS_MODE_STATE_SYMBOL;
break;
case SYMBOLS_MODE_STATE_SYMBOL:
if (key == ' ') return true;
break;
}
return false;
}
}

View File

@ -115,6 +115,8 @@ public class LatinIME extends InputMethodService
private boolean mQuickFixes;
private boolean mShowSuggestions;
private int mCorrectionMode;
private int mOrientation;
// Indicates whether the suggestion strip is to be on in landscape
private boolean mJustAccepted;
private CharSequence mJustRevertedSeparator;
@ -159,10 +161,12 @@ public class LatinIME extends InputMethodService
super.onCreate();
//setStatusIcon(R.drawable.ime_qwerty);
mKeyboardSwitcher = new KeyboardSwitcher(this);
initSuggest(getResources().getConfiguration().locale.toString());
final Configuration conf = getResources().getConfiguration();
initSuggest(conf.locale.toString());
mOrientation = conf.orientation;
mVibrateDuration = getResources().getInteger(R.integer.vibrate_duration_ms);
// register to receive ringer mode changes for silent mode
IntentFilter filter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION);
registerReceiver(mReceiver, filter);
@ -191,9 +195,14 @@ public class LatinIME extends InputMethodService
if (!TextUtils.equals(conf.locale.toString(), mLocale)) {
initSuggest(conf.locale.toString());
}
// If orientation changed while predicting, commit the change
if (conf.orientation != mOrientation) {
commitTyped(getCurrentInputConnection());
mOrientation = conf.orientation;
}
super.onConfigurationChanged(conf);
}
@Override
public View onCreateInputView() {
mInputView = (LatinKeyboardView) getLayoutInflater().inflate(
@ -575,6 +584,9 @@ public class LatinIME extends InputMethodService
// Cancel the just reverted state
mJustRevertedSeparator = null;
}
if (mKeyboardSwitcher.onKey(primaryCode)) {
changeKeyboardMode();
}
}
public void onText(CharSequence text) {