Merge "Call KeyboardState.onUpdateShiftState from onCodeInput if code is a normal letter"
This commit is contained in:
commit
33e2813d09
5 changed files with 33 additions and 16 deletions
|
@ -67,7 +67,9 @@ import java.util.Set;
|
|||
public class Keyboard {
|
||||
private static final String TAG = Keyboard.class.getSimpleName();
|
||||
|
||||
/** Some common keys code. These should be aligned with values/keycodes.xml */
|
||||
/** Some common keys code. Must be positive.
|
||||
* These should be aligned with values/keycodes.xml
|
||||
*/
|
||||
public static final int CODE_ENTER = '\n';
|
||||
public static final int CODE_TAB = '\t';
|
||||
public static final int CODE_SPACE = ' ';
|
||||
|
@ -85,7 +87,9 @@ public class Keyboard {
|
|||
public static final int CODE_DIGIT0 = '0';
|
||||
public static final int CODE_PLUS = '+';
|
||||
|
||||
/** Special keys code. These should be aligned with values/keycodes.xml */
|
||||
/** Special keys code. Must be non-positive.
|
||||
* These should be aligned with values/keycodes.xml
|
||||
*/
|
||||
public static final int CODE_DUMMY = 0;
|
||||
public static final int CODE_SHIFT = -1;
|
||||
public static final int CODE_SWITCH_ALPHA_SYMBOL = -2;
|
||||
|
@ -248,6 +252,10 @@ public class Keyboard {
|
|||
return label;
|
||||
}
|
||||
|
||||
public static boolean isLetterCode(int code) {
|
||||
return code > CODE_DUMMY;
|
||||
}
|
||||
|
||||
public static class Params {
|
||||
public KeyboardId mId;
|
||||
public int mThemeId;
|
||||
|
|
|
@ -332,7 +332,7 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions,
|
|||
* Updates state machine to figure out when to automatically snap back to the previous mode.
|
||||
*/
|
||||
public void onCodeInput(int code) {
|
||||
mState.onCodeInput(code, isSinglePointer());
|
||||
mState.onCodeInput(code, isSinglePointer(), mInputMethodService.getCurrentAutoCapsState());
|
||||
}
|
||||
|
||||
public LatinKeyboardView getKeyboardView() {
|
||||
|
|
|
@ -29,9 +29,10 @@ import com.android.inputmethod.keyboard.Keyboard;
|
|||
*
|
||||
* The input events are {@link #onLoadKeyboard(String, boolean)}, {@link #onSaveKeyboardState()},
|
||||
* {@link #onPressShift(boolean)}, {@link #onReleaseShift(boolean)}, {@link #onPressSymbol()},
|
||||
* {@link #onReleaseSymbol()}, {@link #onOtherKeyPressed()}, {@link #onCodeInput(int, boolean)},
|
||||
* {@link #onCancelInput(boolean)}, {@link #onUpdateShiftState(boolean)}, {@link #onToggleShift()},
|
||||
* {@link #onToggleCapsLock()}, and {@link #onToggleAlphabetAndSymbols()}.
|
||||
* {@link #onReleaseSymbol()}, {@link #onOtherKeyPressed()},
|
||||
* {@link #onCodeInput(int, boolean, boolean)}, {@link #onCancelInput(boolean)},
|
||||
* {@link #onUpdateShiftState(boolean)}, {@link #onToggleShift()}, {@link #onToggleCapsLock()},
|
||||
* and {@link #onToggleAlphabetAndSymbols()}.
|
||||
*
|
||||
* The actions are {@link SwitchActions}'s methods.
|
||||
*/
|
||||
|
@ -267,6 +268,10 @@ public class KeyboardState {
|
|||
if (DEBUG_STATE) {
|
||||
Log.d(TAG, "onUpdateShiftState: autoCaps=" + autoCaps + " " + this);
|
||||
}
|
||||
onUpdateShiftStateInternal(autoCaps);
|
||||
}
|
||||
|
||||
private void onUpdateShiftStateInternal(boolean autoCaps) {
|
||||
if (mIsAlphabetMode) {
|
||||
if (!mKeyboardShiftState.isShiftLocked() && !mShiftKeyState.isIgnoring()) {
|
||||
if (mShiftKeyState.isReleasing() && autoCaps) {
|
||||
|
@ -381,10 +386,10 @@ public class KeyboardState {
|
|||
return false;
|
||||
}
|
||||
|
||||
public void onCodeInput(int code, boolean isSinglePointer) {
|
||||
public void onCodeInput(int code, boolean isSinglePointer, boolean autoCaps) {
|
||||
if (DEBUG_STATE) {
|
||||
Log.d(TAG, "onCodeInput: code=" + code + " isSinglePointer=" + isSinglePointer
|
||||
+ " " + this);
|
||||
+ " autoCaps=" + autoCaps + " " + this);
|
||||
}
|
||||
switch (mSwitchState) {
|
||||
case SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL:
|
||||
|
@ -446,6 +451,11 @@ public class KeyboardState {
|
|||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// If the code is a letter, update keyboard shift state.
|
||||
if (Keyboard.isLetterCode(code)) {
|
||||
onUpdateShiftStateInternal(autoCaps);
|
||||
}
|
||||
}
|
||||
|
||||
public void onToggleShift() {
|
||||
|
|
|
@ -1496,7 +1496,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
|
|||
if (null != ic) swapSwapperAndSpaceWhileInBatchEdit(ic);
|
||||
}
|
||||
|
||||
switcher.updateShiftState();
|
||||
if (mSettingsValues.isWordSeparator(code)) {
|
||||
Utils.Stats.onSeparator((char)code, x, y);
|
||||
} else {
|
||||
|
@ -1581,7 +1580,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
|
|||
|
||||
Utils.Stats.onSeparator((char)primaryCode, x, y);
|
||||
|
||||
mKeyboardSwitcher.updateShiftState();
|
||||
if (ic != null) {
|
||||
ic.endBatchEdit();
|
||||
}
|
||||
|
|
|
@ -90,7 +90,8 @@ public class KeyboardStateTests extends AndroidTestCase {
|
|||
// Argument for KeyboardState.onCodeInput.
|
||||
private static final boolean SINGLE = true;
|
||||
private static final boolean MULTI = false;
|
||||
|
||||
private static final boolean NO_AUTO_CAPS = false;
|
||||
private static final boolean AUTO_CAPS = true;
|
||||
|
||||
private void assertAlphabetNormal() {
|
||||
assertEquals(ALPHABET_UNSHIFTED, mSwitcher.mLayout);
|
||||
|
@ -213,7 +214,7 @@ public class KeyboardStateTests extends AndroidTestCase {
|
|||
// Long press recognized in LatinKeyboardView.KeyTimerHandler.
|
||||
mState.onToggleCapsLock();
|
||||
assertAlphabetShiftLocked();
|
||||
mState.onCodeInput(Keyboard.CODE_CAPSLOCK, SINGLE);
|
||||
mState.onCodeInput(Keyboard.CODE_CAPSLOCK, SINGLE, NO_AUTO_CAPS);
|
||||
assertAlphabetShiftLocked();
|
||||
mState.onReleaseShift(NOT_SLIDING);
|
||||
assertAlphabetShiftLocked();
|
||||
|
@ -224,7 +225,7 @@ public class KeyboardStateTests extends AndroidTestCase {
|
|||
// Long press recognized in LatinKeyboardView.KeyTimerHandler.
|
||||
mState.onToggleCapsLock();
|
||||
assertAlphabetNormal();
|
||||
mState.onCodeInput(Keyboard.CODE_CAPSLOCK, SINGLE);
|
||||
mState.onCodeInput(Keyboard.CODE_CAPSLOCK, SINGLE, NO_AUTO_CAPS);
|
||||
assertAlphabetNormal();
|
||||
mState.onReleaseShift(NOT_SLIDING);
|
||||
assertAlphabetNormal();
|
||||
|
@ -236,7 +237,7 @@ public class KeyboardStateTests extends AndroidTestCase {
|
|||
// First shift key tap.
|
||||
mState.onPressShift(NOT_SLIDING);
|
||||
assertAlphabetManualShifted();
|
||||
mState.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
|
||||
mState.onCodeInput(Keyboard.CODE_SHIFT, SINGLE, NO_AUTO_CAPS);
|
||||
assertAlphabetManualShifted();
|
||||
mState.onReleaseShift(NOT_SLIDING);
|
||||
assertAlphabetManualShifted();
|
||||
|
@ -244,13 +245,13 @@ public class KeyboardStateTests extends AndroidTestCase {
|
|||
// Double tap recognized in LatinKeyboardView.KeyTimerHandler.
|
||||
mState.onToggleCapsLock();
|
||||
assertAlphabetShiftLocked();
|
||||
mState.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
|
||||
mState.onCodeInput(Keyboard.CODE_SHIFT, SINGLE, NO_AUTO_CAPS);
|
||||
assertAlphabetShiftLocked();
|
||||
|
||||
// First shift key tap.
|
||||
mState.onPressShift(NOT_SLIDING);
|
||||
assertAlphabetManualShifted();
|
||||
mState.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
|
||||
mState.onCodeInput(Keyboard.CODE_SHIFT, SINGLE, NO_AUTO_CAPS);
|
||||
assertAlphabetManualShifted();
|
||||
mState.onReleaseShift(NOT_SLIDING);
|
||||
assertAlphabetNormal();
|
||||
|
|
Loading…
Reference in a new issue