Merge "Remove toggleShift and toggleAlphabetAndSymbols from KeyboardSwitcher"

This commit is contained in:
Tadashi G. Takaoka 2012-01-17 00:07:38 -08:00 committed by Android (Google) Code Review
commit c9fade6b87
6 changed files with 201 additions and 529 deletions

View file

@ -148,7 +148,7 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions,
// have separate layouts with unique KeyboardIds for alphabet and alphabet-shifted // have separate layouts with unique KeyboardIds for alphabet and alphabet-shifted
// respectively. // respectively.
if (mainKeyboardId.isPhoneKeyboard()) { if (mainKeyboardId.isPhoneKeyboard()) {
mState.onToggleAlphabetAndSymbols(); mState.setSymbolsKeyboard();
} }
updateShiftState(); updateShiftState();
} }
@ -256,13 +256,6 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions,
} }
} }
/**
* Toggle keyboard shift state triggered by user touch event.
*/
public void toggleShift() {
mState.onToggleShift();
}
/** /**
* Toggle caps lock state triggered by user touch event. * Toggle caps lock state triggered by user touch event.
*/ */
@ -270,13 +263,6 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions,
mState.onToggleCapsLock(); mState.onToggleCapsLock();
} }
/**
* Toggle between alphabet and symbols modes triggered by user touch event.
*/
public void toggleAlphabetAndSymbols() {
mState.onToggleAlphabetAndSymbols();
}
/** /**
* Update keyboard shift state triggered by connected EditText status change. * Update keyboard shift state triggered by connected EditText status change.
*/ */

View file

@ -31,8 +31,7 @@ import com.android.inputmethod.keyboard.Keyboard;
* {@link #onPressShift(boolean)}, {@link #onReleaseShift(boolean)}, {@link #onPressSymbol()}, * {@link #onPressShift(boolean)}, {@link #onReleaseShift(boolean)}, {@link #onPressSymbol()},
* {@link #onReleaseSymbol()}, {@link #onOtherKeyPressed()}, * {@link #onReleaseSymbol()}, {@link #onOtherKeyPressed()},
* {@link #onCodeInput(int, boolean, boolean)}, {@link #onCancelInput(boolean)}, * {@link #onCodeInput(int, boolean, boolean)}, {@link #onCancelInput(boolean)},
* {@link #onUpdateShiftState(boolean)}, {@link #onToggleShift()}, {@link #onToggleCapsLock()}, * {@link #onUpdateShiftState(boolean)}, and {@link #onToggleCapsLock()}.
* and {@link #onToggleAlphabetAndSymbols()}.
* *
* The actions are {@link SwitchActions}'s methods. * The actions are {@link SwitchActions}'s methods.
*/ */
@ -219,7 +218,8 @@ public class KeyboardState {
mSwitchActions.requestUpdatingShiftState(); mSwitchActions.requestUpdatingShiftState();
} }
private void setSymbolsKeyboard() { // TODO: Make this method private
public void setSymbolsKeyboard() {
if (DEBUG_STATE) { if (DEBUG_STATE) {
Log.d(TAG, "setSymbolsKeyboard"); Log.d(TAG, "setSymbolsKeyboard");
} }
@ -464,18 +464,6 @@ public class KeyboardState {
} }
} }
public void onToggleShift() {
if (DEBUG_STATE) {
Log.d(TAG, "onToggleShift: " + this);
}
if (mIsAlphabetMode) {
setShifted(mKeyboardShiftState.isShiftedOrShiftLocked()
? SwitchActions.UNSHIFT : SwitchActions.MANUAL_SHIFT);
} else {
toggleShiftInSymbols();
}
}
public void onToggleCapsLock() { public void onToggleCapsLock() {
if (DEBUG_STATE) { if (DEBUG_STATE) {
Log.d(TAG, "onToggleCapsLock: " + this); Log.d(TAG, "onToggleCapsLock: " + this);
@ -492,13 +480,6 @@ public class KeyboardState {
} }
} }
public void onToggleAlphabetAndSymbols() {
if (DEBUG_STATE) {
Log.d(TAG, "onToggleAlphabetAndSymbols: " + this);
}
toggleAlphabetAndSymbols();
}
private static String shiftModeToString(int shiftMode) { private static String shiftModeToString(int shiftMode) {
switch (shiftMode) { switch (shiftMode) {
case SwitchActions.UNSHIFT: return "UNSHIFT"; case SwitchActions.UNSHIFT: return "UNSHIFT";

View file

@ -1261,16 +1261,8 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
LatinImeLogger.logOnDelete(); LatinImeLogger.logOnDelete();
break; break;
case Keyboard.CODE_SHIFT: case Keyboard.CODE_SHIFT:
// Shift key is handled in onPress() when device has distinct multi-touch panel.
if (!distinctMultiTouch) {
switcher.toggleShift();
}
break;
case Keyboard.CODE_SWITCH_ALPHA_SYMBOL: case Keyboard.CODE_SWITCH_ALPHA_SYMBOL:
// Symbol key is handled in onPress() when device has distinct multi-touch panel. // Shift and symbol key is handled in onPress() and onRelease().
if (!distinctMultiTouch) {
switcher.toggleAlphabetAndSymbols();
}
break; break;
case Keyboard.CODE_SETTINGS: case Keyboard.CODE_SETTINGS:
onSettingsKeyPressed(); onSettingsKeyPressed();
@ -2271,10 +2263,9 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
if (switcher.isVibrateAndSoundFeedbackRequired()) { if (switcher.isVibrateAndSoundFeedbackRequired()) {
hapticAndAudioFeedback(primaryCode); hapticAndAudioFeedback(primaryCode);
} }
final boolean distinctMultiTouch = switcher.hasDistinctMultitouch(); if (primaryCode == Keyboard.CODE_SHIFT) {
if (distinctMultiTouch && primaryCode == Keyboard.CODE_SHIFT) {
switcher.onPressShift(withSliding); switcher.onPressShift(withSliding);
} else if (distinctMultiTouch && primaryCode == Keyboard.CODE_SWITCH_ALPHA_SYMBOL) { } else if (primaryCode == Keyboard.CODE_SWITCH_ALPHA_SYMBOL) {
switcher.onPressSymbol(); switcher.onPressSymbol();
} else { } else {
switcher.onOtherKeyPressed(); switcher.onOtherKeyPressed();
@ -2284,11 +2275,9 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
@Override @Override
public void onRelease(int primaryCode, boolean withSliding) { public void onRelease(int primaryCode, boolean withSliding) {
KeyboardSwitcher switcher = mKeyboardSwitcher; KeyboardSwitcher switcher = mKeyboardSwitcher;
// Reset any drag flags in the keyboard if (primaryCode == Keyboard.CODE_SHIFT) {
final boolean distinctMultiTouch = switcher.hasDistinctMultitouch();
if (distinctMultiTouch && primaryCode == Keyboard.CODE_SHIFT) {
switcher.onReleaseShift(withSliding); switcher.onReleaseShift(withSliding);
} else if (distinctMultiTouch && primaryCode == Keyboard.CODE_SWITCH_ALPHA_SYMBOL) { } else if (primaryCode == Keyboard.CODE_SWITCH_ALPHA_SYMBOL) {
switcher.onReleaseSymbol(); switcher.onReleaseSymbol();
} }
} }

View file

@ -21,7 +21,11 @@ import android.test.AndroidTestCase;
import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.keyboard.Keyboard;
public class KeyboardStateNonDistinctTests extends AndroidTestCase { public class KeyboardStateNonDistinctTests extends AndroidTestCase {
private MockKeyboardSwitcher mSwitcher; protected MockKeyboardSwitcher mSwitcher;
public boolean hasDistinctMultitouch() {
return false;
}
@Override @Override
protected void setUp() throws Exception { protected void setUp() throws Exception {
@ -30,40 +34,39 @@ public class KeyboardStateNonDistinctTests extends AndroidTestCase {
mSwitcher = new MockKeyboardSwitcher(); mSwitcher = new MockKeyboardSwitcher();
final String layoutSwitchBackSymbols = ""; final String layoutSwitchBackSymbols = "";
final boolean hasDistinctMultitouch = false; mSwitcher.loadKeyboard(layoutSwitchBackSymbols, hasDistinctMultitouch());
mSwitcher.loadKeyboard(layoutSwitchBackSymbols, hasDistinctMultitouch);
} }
// Argument for KeyboardState.onPressShift and onReleaseShift. // Argument for KeyboardState.onPressShift and onReleaseShift.
private static final boolean NOT_SLIDING = false; public static final boolean NOT_SLIDING = false;
private static final boolean SLIDING = true; public static final boolean SLIDING = true;
// Argument for KeyboardState.onCodeInput. // Argument for KeyboardState.onCodeInput.
private static final boolean SINGLE = true; public static final boolean SINGLE = true;
private static final boolean MULTI = false; public static final boolean MULTI = false;
static final boolean NO_AUTO_CAPS = false; public static final boolean NO_AUTO_CAPS = false;
private static final boolean AUTO_CAPS = true; public static final boolean AUTO_CAPS = true;
private void assertAlphabetNormal() { public void assertAlphabetNormal() {
assertTrue(mSwitcher.assertAlphabetNormal()); assertTrue(mSwitcher.assertAlphabetNormal());
} }
private void assertAlphabetManualShifted() { public void assertAlphabetManualShifted() {
assertTrue(mSwitcher.assertAlphabetManualShifted()); assertTrue(mSwitcher.assertAlphabetManualShifted());
} }
private void assertAlphabetAutomaticShifted() { public void assertAlphabetAutomaticShifted() {
assertTrue(mSwitcher.assertAlphabetAutomaticShifted()); assertTrue(mSwitcher.assertAlphabetAutomaticShifted());
} }
private void assertAlphabetShiftLocked() { public void assertAlphabetShiftLocked() {
assertTrue(mSwitcher.assertAlphabetShiftLocked()); assertTrue(mSwitcher.assertAlphabetShiftLocked());
} }
private void assertSymbolsNormal() { public void assertSymbolsNormal() {
assertTrue(mSwitcher.assertSymbolsNormal()); assertTrue(mSwitcher.assertSymbolsNormal());
} }
private void assertSymbolsShifted() { public void assertSymbolsShifted() {
assertTrue(mSwitcher.assertSymbolsShifted()); assertTrue(mSwitcher.assertSymbolsShifted());
} }
@ -75,23 +78,20 @@ public class KeyboardStateNonDistinctTests extends AndroidTestCase {
// Shift key in alphabet mode. // Shift key in alphabet mode.
public void testShift() { public void testShift() {
// Press/release shift key, enter into shift state. // Press/release shift key, enter into shift state.
mSwitcher.onOtherKeyPressed(); mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetNormal(); assertAlphabetManualShifted();
mSwitcher.toggleShift(); mSwitcher.onReleaseShift(NOT_SLIDING);
mSwitcher.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
assertAlphabetManualShifted(); assertAlphabetManualShifted();
// Press/release shift key, back to normal state. // Press/release shift key, back to normal state.
mSwitcher.onOtherKeyPressed(); mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetManualShifted(); assertAlphabetManualShifted();
mSwitcher.toggleShift(); mSwitcher.onReleaseShift(NOT_SLIDING);
mSwitcher.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
assertAlphabetNormal(); assertAlphabetNormal();
// Press/release shift key, enter into shift state. // Press/release shift key, enter into shift state.
mSwitcher.onOtherKeyPressed(); mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetNormal(); assertAlphabetManualShifted();
mSwitcher.toggleShift(); mSwitcher.onReleaseShift(NOT_SLIDING);
mSwitcher.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
assertAlphabetManualShifted(); assertAlphabetManualShifted();
// Press/release letter key, snap back to normal state. // Press/release letter key, snap back to normal state.
mSwitcher.onOtherKeyPressed(); mSwitcher.onOtherKeyPressed();
@ -99,20 +99,36 @@ public class KeyboardStateNonDistinctTests extends AndroidTestCase {
assertAlphabetNormal(); assertAlphabetNormal();
} }
private void enterSymbolsMode() { // Shift key sliding input.
// Press/release "?123" key. public void testShiftSliding() {
// Press shift key.
mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetManualShifted();
// Slide out shift key.
mSwitcher.onReleaseShift(SLIDING);
assertAlphabetManualShifted();
// Enter into letter key.
mSwitcher.onOtherKeyPressed(); mSwitcher.onOtherKeyPressed();
assertAlphabetManualShifted();
// Release letter key, snap back to alphabet.
mSwitcher.onCodeInput('Z', SINGLE);
assertAlphabetNormal(); assertAlphabetNormal();
mSwitcher.toggleAlphabetAndSymbols(); }
public void enterSymbolsMode() {
// Press/release "?123" key.
mSwitcher.onPressSymbol();
assertSymbolsNormal();
mSwitcher.onCodeInput(Keyboard.CODE_SWITCH_ALPHA_SYMBOL, SINGLE); mSwitcher.onCodeInput(Keyboard.CODE_SWITCH_ALPHA_SYMBOL, SINGLE);
mSwitcher.onReleaseSymbol();
assertSymbolsNormal(); assertSymbolsNormal();
} }
private void leaveSymbolsMode() { public void leaveSymbolsMode() {
// Press/release "ABC" key. // Press/release "ABC" key.
mSwitcher.onOtherKeyPressed(); mSwitcher.onPressSymbol();
assertSymbolsNormal(); assertAlphabetNormal();
mSwitcher.toggleAlphabetAndSymbols();
mSwitcher.onCodeInput(Keyboard.CODE_SWITCH_ALPHA_SYMBOL, SINGLE); mSwitcher.onCodeInput(Keyboard.CODE_SWITCH_ALPHA_SYMBOL, SINGLE);
assertAlphabetNormal(); assertAlphabetNormal();
} }
@ -126,20 +142,31 @@ public class KeyboardStateNonDistinctTests extends AndroidTestCase {
// Switching between alphabet shift locked and symbols. // Switching between alphabet shift locked and symbols.
public void testAlphabetShiftLockedAndSymbols() { public void testAlphabetShiftLockedAndSymbols() {
enterShiftLockWithLongPressShift(); enterShiftLockWithLongPressShift();
enterSymbolsMode();
// Press/release "?123" key.
mSwitcher.onOtherKeyPressed();
assertAlphabetShiftLocked();
mSwitcher.toggleAlphabetAndSymbols();
mSwitcher.onCodeInput(Keyboard.CODE_SWITCH_ALPHA_SYMBOL, SINGLE);
assertSymbolsNormal();
// Press/release "ABC" key, switch back to shift locked mode. // Press/release "ABC" key, switch back to shift locked mode.
mSwitcher.onPressSymbol();
assertAlphabetShiftLocked();
mSwitcher.onCodeInput(Keyboard.CODE_SWITCH_ALPHA_SYMBOL, SINGLE);
mSwitcher.onReleaseSymbol();
assertAlphabetShiftLocked();
}
// Symbols key sliding input.
public void testSymbolsSliding() {
// Press "123?" key.
mSwitcher.onPressSymbol();
assertSymbolsNormal();
// Slide out from "123?" key.
mSwitcher.onReleaseSymbol();
assertSymbolsNormal();
// Enter into letter key.
mSwitcher.onOtherKeyPressed(); mSwitcher.onOtherKeyPressed();
assertSymbolsNormal(); assertSymbolsNormal();
mSwitcher.toggleAlphabetAndSymbols(); // Release letter key, snap back to alphabet.
mSwitcher.onCodeInput(Keyboard.CODE_SWITCH_ALPHA_SYMBOL, SINGLE); mSwitcher.onCodeInput('z', SINGLE);
assertAlphabetShiftLocked(); assertAlphabetNormal();
} }
// Switching between symbols and symbols shifted. // Switching between symbols and symbols shifted.
@ -147,23 +174,64 @@ public class KeyboardStateNonDistinctTests extends AndroidTestCase {
enterSymbolsMode(); enterSymbolsMode();
// Press/release "=\<" key. // Press/release "=\<" key.
// Press/release shift key, enter into shift state. mSwitcher.onPressShift(NOT_SLIDING);
mSwitcher.onOtherKeyPressed(); assertSymbolsShifted();
assertSymbolsNormal(); mSwitcher.onReleaseShift(NOT_SLIDING);
mSwitcher.toggleShift();
mSwitcher.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
assertSymbolsShifted(); assertSymbolsShifted();
// Press/release "?123" key. // Press/release "?123" key.
mSwitcher.onOtherKeyPressed(); mSwitcher.onPressShift(NOT_SLIDING);
assertSymbolsShifted(); assertSymbolsNormal();
mSwitcher.toggleShift(); mSwitcher.onReleaseShift(NOT_SLIDING);
mSwitcher.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
assertSymbolsNormal(); assertSymbolsNormal();
leaveSymbolsMode(); leaveSymbolsMode();
} }
// Symbols shift sliding input
public void testSymbolsShiftSliding() {
enterSymbolsMode();
// Press "=\<" key.
mSwitcher.onPressShift(NOT_SLIDING);
assertSymbolsShifted();
// Slide out "=\<" key.
mSwitcher.onReleaseShift(SLIDING);
assertSymbolsShifted();
// Enter into symbol shifted letter key.
mSwitcher.onOtherKeyPressed();
assertSymbolsShifted();
// Release symbol shifted letter key, snap back to symbols.
mSwitcher.onCodeInput('~', SINGLE);
assertSymbolsNormal();
}
// Symbols shift sliding input from symbols shifted.
public void testSymbolsShiftSliding2() {
enterSymbolsMode();
// Press/release "=\<" key.
mSwitcher.onPressShift(NOT_SLIDING);
assertSymbolsShifted();
mSwitcher.onReleaseShift(NOT_SLIDING);
assertSymbolsShifted();
// Press "123?" key.
mSwitcher.onPressShift(NOT_SLIDING);
assertSymbolsNormal();
// Slide out "123?" key.
mSwitcher.onReleaseShift(SLIDING);
assertSymbolsNormal();
// Enter into symbol letter key.
mSwitcher.onOtherKeyPressed();
assertSymbolsNormal();
// Release symbol letter key, snap back to symbols shift.
mSwitcher.onCodeInput('1', SINGLE);
assertSymbolsShifted();
}
// Automatic snap back to alphabet from symbols by space key. // Automatic snap back to alphabet from symbols by space key.
public void testSnapBackBySpace() { public void testSnapBackBySpace() {
enterSymbolsMode(); enterSymbolsMode();
@ -178,9 +246,9 @@ public class KeyboardStateNonDistinctTests extends AndroidTestCase {
assertSymbolsNormal(); assertSymbolsNormal();
mSwitcher.onCodeInput(Keyboard.CODE_SPACE, SINGLE); mSwitcher.onCodeInput(Keyboard.CODE_SPACE, SINGLE);
assertAlphabetNormal(); assertAlphabetNormal();
}
// TODO: Add automatic snap back to shift locked test. // TODO: Add automatic snap back to shift locked test.
}
// Automatic snap back to alphabet from symbols by registered letters. // Automatic snap back to alphabet from symbols by registered letters.
public void testSnapBack() { public void testSnapBack() {
@ -211,31 +279,79 @@ public class KeyboardStateNonDistinctTests extends AndroidTestCase {
assertAlphabetAutomaticShifted(); assertAlphabetAutomaticShifted();
// Press shift key. // Press shift key.
mSwitcher.onOtherKeyPressed(); mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetAutomaticShifted(); assertAlphabetManualShifted();
// Release shift key. // Release shift key.
mSwitcher.toggleShift(); mSwitcher.onReleaseShift(NOT_SLIDING);
mSwitcher.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
assertAlphabetNormal(); assertAlphabetNormal();
} }
private void enterShiftLockWithLongPressShift() { // Sliding from shift key in automatic upper case.
public void testAutomaticUpperCaseSliding() {
mSwitcher.setAutoCapsMode(AUTO_CAPS);
// Update shift state with auto caps enabled.
mSwitcher.updateShiftState();
assertAlphabetAutomaticShifted();
// Press shift key. // Press shift key.
mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetManualShifted();
// Slide out shift key.
mSwitcher.onReleaseShift(SLIDING);
assertAlphabetManualShifted();
// Enter into letter key.
mSwitcher.onOtherKeyPressed(); mSwitcher.onOtherKeyPressed();
assertAlphabetManualShifted();
// Release letter key, snap back to alphabet.
mSwitcher.onCodeInput('Z', SINGLE);
assertAlphabetNormal(); assertAlphabetNormal();
}
// Sliding from symbol key in automatic upper case.
public void testAutomaticUpperCaseSliding2() {
mSwitcher.setAutoCapsMode(AUTO_CAPS);
// Update shift state with auto caps enabled.
mSwitcher.updateShiftState();
assertAlphabetAutomaticShifted();
// Press "123?" key.
mSwitcher.onPressSymbol();
assertSymbolsNormal();
// Slide out "123?" key.
mSwitcher.onReleaseSymbol();
assertSymbolsNormal();
// Enter into symbol letter keys.
mSwitcher.onOtherKeyPressed();
assertSymbolsNormal();
// Release symbol letter key, snap back to alphabet.
mSwitcher.onCodeInput('1', SINGLE);
assertAlphabetNormal();
}
public void enterShiftLockWithLongPressShift() {
// Long press shift key
mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetManualShifted();
// Long press recognized in LatinKeyboardView.KeyTimerHandler. // Long press recognized in LatinKeyboardView.KeyTimerHandler.
mSwitcher.toggleCapsLock(); mSwitcher.toggleCapsLock();
assertAlphabetShiftLocked();
mSwitcher.onCodeInput(Keyboard.CODE_CAPSLOCK, SINGLE); mSwitcher.onCodeInput(Keyboard.CODE_CAPSLOCK, SINGLE);
assertAlphabetShiftLocked(); assertAlphabetShiftLocked();
mSwitcher.onReleaseShift(NOT_SLIDING);
assertAlphabetShiftLocked();
} }
private void leaveShiftLockWithLongPressShift() { public void leaveShiftLockWithLongPressShift() {
// Press shift key. // Press shift key.
mSwitcher.onOtherKeyPressed(); mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetManualShifted();
// Long press recognized in LatinKeyboardView.KeyTimerHandler. // Long press recognized in LatinKeyboardView.KeyTimerHandler.
mSwitcher.toggleCapsLock(); mSwitcher.toggleCapsLock();
assertAlphabetNormal();
mSwitcher.onCodeInput(Keyboard.CODE_CAPSLOCK, SINGLE); mSwitcher.onCodeInput(Keyboard.CODE_CAPSLOCK, SINGLE);
assertAlphabetNormal(); assertAlphabetNormal();
mSwitcher.onReleaseShift(NOT_SLIDING);
assertAlphabetNormal();
} }
// Long press shift key. // Long press shift key.
@ -251,10 +367,11 @@ public class KeyboardStateNonDistinctTests extends AndroidTestCase {
assertAlphabetShiftLocked(); assertAlphabetShiftLocked();
// Tap shift key. // Tap shift key.
mSwitcher.onOtherKeyPressed(); mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetShiftLocked(); assertAlphabetManualShifted();
mSwitcher.toggleShift();
mSwitcher.onCodeInput(Keyboard.CODE_SHIFT, SINGLE); mSwitcher.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
assertAlphabetManualShifted();
mSwitcher.onReleaseShift(NOT_SLIDING);
assertAlphabetNormal(); assertAlphabetNormal();
} }
@ -262,11 +379,12 @@ public class KeyboardStateNonDistinctTests extends AndroidTestCase {
// TODO: Move double tap recognizing timer/logic into KeyboardState. // TODO: Move double tap recognizing timer/logic into KeyboardState.
public void testDoubleTapShift() { public void testDoubleTapShift() {
// First shift key tap. // First shift key tap.
mSwitcher.onOtherKeyPressed(); mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetNormal(); assertAlphabetManualShifted();
mSwitcher.toggleShift();
mSwitcher.onCodeInput(Keyboard.CODE_SHIFT, SINGLE); mSwitcher.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
assertAlphabetManualShifted(); assertAlphabetManualShifted();
mSwitcher.onReleaseShift(NOT_SLIDING);
assertAlphabetManualShifted();
// Second shift key tap. // Second shift key tap.
// Double tap recognized in LatinKeyboardView.KeyTimerHandler. // Double tap recognized in LatinKeyboardView.KeyTimerHandler.
mSwitcher.toggleCapsLock(); mSwitcher.toggleCapsLock();
@ -275,10 +393,11 @@ public class KeyboardStateNonDistinctTests extends AndroidTestCase {
assertAlphabetShiftLocked(); assertAlphabetShiftLocked();
// First shift key tap. // First shift key tap.
mSwitcher.onOtherKeyPressed(); mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetShiftLocked(); assertAlphabetManualShifted();
mSwitcher.toggleShift();
mSwitcher.onCodeInput(Keyboard.CODE_SHIFT, SINGLE); mSwitcher.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
assertAlphabetManualShifted();
mSwitcher.onReleaseShift(NOT_SLIDING);
assertAlphabetNormal(); assertAlphabetNormal();
// Second shift key tap. // Second shift key tap.
// Second tap is ignored in LatinKeyboardView.KeyTimerHandler. // Second tap is ignored in LatinKeyboardView.KeyTimerHandler.

View file

@ -16,84 +16,12 @@
package com.android.inputmethod.keyboard.internal; package com.android.inputmethod.keyboard.internal;
import android.test.AndroidTestCase;
import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.keyboard.Keyboard;
public class KeyboardStateTests extends AndroidTestCase { public class KeyboardStateTests extends KeyboardStateNonDistinctTests {
private MockKeyboardSwitcher mSwitcher;
@Override @Override
protected void setUp() throws Exception { public boolean hasDistinctMultitouch() {
super.setUp(); return true;
mSwitcher = new MockKeyboardSwitcher();
final String layoutSwitchBackSymbols = "";
final boolean hasDistinctMultitouch = true;
mSwitcher.loadKeyboard(layoutSwitchBackSymbols, hasDistinctMultitouch);
}
// Argument for KeyboardState.onPressShift and onReleaseShift.
private static final boolean NOT_SLIDING = false;
private static final boolean SLIDING = true;
// Argument for KeyboardState.onCodeInput.
private static final boolean SINGLE = true;
private static final boolean MULTI = false;
static final boolean NO_AUTO_CAPS = false;
private static final boolean AUTO_CAPS = true;
private void assertAlphabetNormal() {
assertTrue(mSwitcher.assertAlphabetNormal());
}
private void assertAlphabetManualShifted() {
assertTrue(mSwitcher.assertAlphabetManualShifted());
}
private void assertAlphabetAutomaticShifted() {
assertTrue(mSwitcher.assertAlphabetAutomaticShifted());
}
private void assertAlphabetShiftLocked() {
assertTrue(mSwitcher.assertAlphabetShiftLocked());
}
private void assertSymbolsNormal() {
assertTrue(mSwitcher.assertSymbolsNormal());
}
private void assertSymbolsShifted() {
assertTrue(mSwitcher.assertSymbolsShifted());
}
// Initial state test.
public void testLoadKeyboard() {
assertAlphabetNormal();
}
// Shift key in alphabet mode.
public void testShift() {
// Press/release shift key, enter into shift state.
mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetManualShifted();
mSwitcher.onReleaseShift(NOT_SLIDING);
assertAlphabetManualShifted();
// Press/release shift key, back to normal state.
mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetManualShifted();
mSwitcher.onReleaseShift(NOT_SLIDING);
assertAlphabetNormal();
// Press/release shift key, enter into shift state.
mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetManualShifted();
mSwitcher.onReleaseShift(NOT_SLIDING);
assertAlphabetManualShifted();
// Press/release letter key, snap back to normal state.
mSwitcher.onOtherKeyPressed();
mSwitcher.onCodeInput('Z', SINGLE);
assertAlphabetNormal();
} }
// Shift key chording input. // Shift key chording input.
@ -117,59 +45,6 @@ public class KeyboardStateTests extends AndroidTestCase {
assertAlphabetNormal(); assertAlphabetNormal();
} }
// Shift key sliding input.
public void testShiftSliding() {
// Press shift key.
mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetManualShifted();
// Slide out shift key.
mSwitcher.onReleaseShift(SLIDING);
assertAlphabetManualShifted();
// Enter into letter key.
mSwitcher.onOtherKeyPressed();
assertAlphabetManualShifted();
// Release letter key, snap back to alphabet.
mSwitcher.onCodeInput('Z', SINGLE);
assertAlphabetNormal();
}
private void enterSymbolsMode() {
// Press/release "?123" key.
mSwitcher.onPressSymbol();
assertSymbolsNormal();
mSwitcher.onCodeInput(Keyboard.CODE_SWITCH_ALPHA_SYMBOL, SINGLE);
mSwitcher.onReleaseSymbol();
assertSymbolsNormal();
}
private void leaveSymbolsMode() {
// Press/release "ABC" key.
mSwitcher.onPressSymbol();
assertAlphabetNormal();
mSwitcher.onCodeInput(Keyboard.CODE_SWITCH_ALPHA_SYMBOL, SINGLE);
assertAlphabetNormal();
}
// Switching between alphabet and symbols.
public void testAlphabetAndSymbols() {
enterSymbolsMode();
leaveSymbolsMode();
}
// Switching between alphabet shift locked and symbols.
public void testAlphabetShiftLockedAndSymbols() {
enterShiftLockWithLongPressShift();
enterSymbolsMode();
// Press/release "ABC" key, switch back to shift locked mode.
mSwitcher.onPressSymbol();
assertAlphabetShiftLocked();
mSwitcher.onCodeInput(Keyboard.CODE_SWITCH_ALPHA_SYMBOL, SINGLE);
mSwitcher.onReleaseSymbol();
assertAlphabetShiftLocked();
}
// Symbols key chording input. // Symbols key chording input.
public void testSymbolsChording() { public void testSymbolsChording() {
// Press symbols key and hold, enter into choring shift state. // Press symbols key and hold, enter into choring shift state.
@ -191,138 +66,6 @@ public class KeyboardStateTests extends AndroidTestCase {
assertAlphabetNormal(); assertAlphabetNormal();
} }
// Symbols key sliding input.
public void testSymbolsSliding() {
// Press "123?" key.
mSwitcher.onPressSymbol();
assertSymbolsNormal();
// Slide out from "123?" key.
mSwitcher.onReleaseSymbol();
assertSymbolsNormal();
// Enter into letter key.
mSwitcher.onOtherKeyPressed();
assertSymbolsNormal();
// Release letter key, snap back to alphabet.
mSwitcher.onCodeInput('z', SINGLE);
assertAlphabetNormal();
}
// Switching between symbols and symbols shifted.
public void testSymbolsAndSymbolsShifted() {
enterSymbolsMode();
// Press/release "=\<" key.
mSwitcher.onPressShift(NOT_SLIDING);
assertSymbolsShifted();
mSwitcher.onReleaseShift(NOT_SLIDING);
assertSymbolsShifted();
// Press/release "?123" key.
mSwitcher.onPressShift(NOT_SLIDING);
assertSymbolsNormal();
mSwitcher.onReleaseShift(NOT_SLIDING);
assertSymbolsNormal();
leaveSymbolsMode();
}
// Symbols shift sliding input
public void testSymbolsShiftSliding() {
enterSymbolsMode();
// Press "=\<" key.
mSwitcher.onPressShift(NOT_SLIDING);
assertSymbolsShifted();
// Slide out "=\<" key.
mSwitcher.onReleaseShift(SLIDING);
assertSymbolsShifted();
// Enter into symbol shifted letter key.
mSwitcher.onOtherKeyPressed();
assertSymbolsShifted();
// Release symbol shifted letter key, snap back to symbols.
mSwitcher.onCodeInput('~', SINGLE);
assertSymbolsNormal();
}
// Symbols shift sliding input from symbols shifted.
public void testSymbolsShiftSliding2() {
enterSymbolsMode();
// Press/release "=\<" key.
mSwitcher.onPressShift(NOT_SLIDING);
assertSymbolsShifted();
mSwitcher.onReleaseShift(NOT_SLIDING);
assertSymbolsShifted();
// Press "123?" key.
mSwitcher.onPressShift(NOT_SLIDING);
assertSymbolsNormal();
// Slide out "123?" key.
mSwitcher.onReleaseShift(SLIDING);
assertSymbolsNormal();
// Enter into symbol letter key.
mSwitcher.onOtherKeyPressed();
assertSymbolsNormal();
// Release symbol letter key, snap back to symbols shift.
mSwitcher.onCodeInput('1', SINGLE);
assertSymbolsShifted();
}
// Automatic snap back to alphabet from symbols by space key.
public void testSnapBackBySpace() {
enterSymbolsMode();
// Enter a symbol letter.
mSwitcher.onOtherKeyPressed();
assertSymbolsNormal();
mSwitcher.onCodeInput('1', SINGLE);
assertSymbolsNormal();
// Enter space, snap back to alphabet.
mSwitcher.onOtherKeyPressed();
assertSymbolsNormal();
mSwitcher.onCodeInput(Keyboard.CODE_SPACE, SINGLE);
assertAlphabetNormal();
}
// Automatic snap back to alphabet from symbols by registered letters.
public void testSnapBack() {
final String snapBackChars = "'";
final int snapBackCode = snapBackChars.codePointAt(0);
final boolean hasDistinctMultitouch = true;
mSwitcher.loadKeyboard(snapBackChars, hasDistinctMultitouch);
enterSymbolsMode();
// Enter a symbol letter.
mSwitcher.onOtherKeyPressed();
assertSymbolsNormal();
mSwitcher.onCodeInput('1', SINGLE);
assertSymbolsNormal();
// Enter snap back letter, snap back to alphabet.
mSwitcher.onOtherKeyPressed();
assertSymbolsNormal();
mSwitcher.onCodeInput(snapBackCode, SINGLE);
assertAlphabetNormal();
}
// Automatic upper case test
public void testAutomaticUpperCase() {
mSwitcher.setAutoCapsMode(AUTO_CAPS);
// Update shift state with auto caps enabled.
mSwitcher.updateShiftState();
assertAlphabetAutomaticShifted();
// Press shift key.
mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetManualShifted();
// Release shift key.
mSwitcher.onReleaseShift(NOT_SLIDING);
assertAlphabetNormal();
}
// Chording shift key in automatic upper case. // Chording shift key in automatic upper case.
public void testAutomaticUpperCaseChording() { public void testAutomaticUpperCaseChording() {
mSwitcher.setAutoCapsMode(AUTO_CAPS); mSwitcher.setAutoCapsMode(AUTO_CAPS);
@ -364,143 +107,5 @@ public class KeyboardStateTests extends AndroidTestCase {
assertAlphabetNormal(); assertAlphabetNormal();
} }
// Sliding from shift key in automatic upper case.
public void testAutomaticUpperCaseSliding() {
mSwitcher.setAutoCapsMode(AUTO_CAPS);
// Update shift state with auto caps enabled.
mSwitcher.updateShiftState();
assertAlphabetAutomaticShifted();
// Press shift key.
mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetManualShifted();
// Slide out shift key.
mSwitcher.onReleaseShift(SLIDING);
assertAlphabetManualShifted();
// Enter into letter key.
mSwitcher.onOtherKeyPressed();
assertAlphabetManualShifted();
// Release letter key, snap back to alphabet.
mSwitcher.onCodeInput('Z', SINGLE);
assertAlphabetNormal();
}
// Sliding from symbol key in automatic upper case.
public void testAutomaticUpperCaseSliding2() {
mSwitcher.setAutoCapsMode(AUTO_CAPS);
// Update shift state with auto caps enabled.
mSwitcher.updateShiftState();
assertAlphabetAutomaticShifted();
// Press "123?" key.
mSwitcher.onPressSymbol();
assertSymbolsNormal();
// Slide out "123?" key.
mSwitcher.onReleaseSymbol();
assertSymbolsNormal();
// Enter into symbol letter keys.
mSwitcher.onOtherKeyPressed();
assertSymbolsNormal();
// Release symbol letter key, snap back to alphabet.
mSwitcher.onCodeInput('1', SINGLE);
assertAlphabetNormal();
}
private void enterShiftLockWithLongPressShift() {
// Long press shift key
mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetManualShifted();
// Long press recognized in LatinKeyboardView.KeyTimerHandler.
mSwitcher.toggleCapsLock();
assertAlphabetShiftLocked();
mSwitcher.onCodeInput(Keyboard.CODE_CAPSLOCK, SINGLE);
assertAlphabetShiftLocked();
mSwitcher.onReleaseShift(NOT_SLIDING);
assertAlphabetShiftLocked();
}
private void leaveShiftLockWithLongPressShift() {
mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetManualShifted();
// Long press recognized in LatinKeyboardView.KeyTimerHandler.
mSwitcher.toggleCapsLock();
assertAlphabetNormal();
mSwitcher.onCodeInput(Keyboard.CODE_CAPSLOCK, SINGLE);
assertAlphabetNormal();
mSwitcher.onReleaseShift(NOT_SLIDING);
assertAlphabetNormal();
}
// Long press shift key.
// TODO: Move long press recognizing timer/logic into KeyboardState.
public void testLongPressShift() {
enterShiftLockWithLongPressShift();
leaveShiftLockWithLongPressShift();
}
// Leave shift lock with single tap shift key.
public void testShiftInShiftLock() {
enterShiftLockWithLongPressShift();
assertAlphabetShiftLocked();
// Tap shift key.
mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetManualShifted();
mSwitcher.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
assertAlphabetManualShifted();
mSwitcher.onReleaseShift(NOT_SLIDING);
assertAlphabetNormal();
}
// Double tap shift key.
// TODO: Move double tap recognizing timer/logic into KeyboardState.
public void testDoubleTapShift() {
// First shift key tap.
mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetManualShifted();
mSwitcher.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
assertAlphabetManualShifted();
mSwitcher.onReleaseShift(NOT_SLIDING);
assertAlphabetManualShifted();
// Second shift key tap.
// Double tap recognized in LatinKeyboardView.KeyTimerHandler.
mSwitcher.toggleCapsLock();
assertAlphabetShiftLocked();
mSwitcher.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
assertAlphabetShiftLocked();
// First shift key tap.
mSwitcher.onPressShift(NOT_SLIDING);
assertAlphabetManualShifted();
mSwitcher.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
assertAlphabetManualShifted();
mSwitcher.onReleaseShift(NOT_SLIDING);
assertAlphabetNormal();
// Second shift key tap.
// Second tap is ignored in LatinKeyboardView.KeyTimerHandler.
}
// Update shift state.
public void testUpdateShiftState() {
mSwitcher.setAutoCapsMode(AUTO_CAPS);
// Update shift state.
mSwitcher.updateShiftState();
assertAlphabetAutomaticShifted();
}
// Update shift state when shift locked.
public void testUpdateShiftStateInShiftLocked() {
mSwitcher.setAutoCapsMode(AUTO_CAPS);
enterShiftLockWithLongPressShift();
assertAlphabetShiftLocked();
// Update shift state when shift locked
mSwitcher.updateShiftState();
assertAlphabetShiftLocked();
}
// TODO: Multitouch test // TODO: Multitouch test
// TODO: Change focus test.
// TODO: Change orientation test.
} }

View file

@ -104,18 +104,10 @@ public class MockKeyboardSwitcher implements KeyboardState.SwitchActions {
mState.onUpdateShiftState(mAutoCapsMode && mAutoCapsState); mState.onUpdateShiftState(mAutoCapsMode && mAutoCapsState);
} }
public void toggleShift() {
mState.onToggleShift();
}
public void toggleCapsLock() { public void toggleCapsLock() {
mState.onToggleCapsLock(); mState.onToggleCapsLock();
} }
public void toggleAlphabetAndSymbols() {
mState.onToggleAlphabetAndSymbols();
}
public void updateShiftState() { public void updateShiftState() {
mState.onUpdateShiftState(mAutoCapsMode && mAutoCapsState); mState.onUpdateShiftState(mAutoCapsMode && mAutoCapsState);
} }