am 94fe2b62: am efc4a437: Symbol key acts as modifier key
Merge commit '94fe2b626164f275a7f07f546ceca1b1f0d214a2' * commit '94fe2b626164f275a7f07f546ceca1b1f0d214a2': Symbol key acts as modifier keymain
commit
f888b99d36
|
@ -228,8 +228,9 @@ public class LatinIME extends InputMethodService
|
|||
private int mDeleteCount;
|
||||
private long mLastKeyTime;
|
||||
|
||||
// Shift modifier key state
|
||||
// Modifier keys state
|
||||
private ModifierKeyState mShiftKeyState = new ModifierKeyState();
|
||||
private ModifierKeyState mSymbolKeyState = new ModifierKeyState();
|
||||
|
||||
private Tutorial mTutorial;
|
||||
|
||||
|
@ -1132,6 +1133,7 @@ public class LatinIME extends InputMethodService
|
|||
mDeleteCount = 0;
|
||||
}
|
||||
mLastKeyTime = when;
|
||||
final boolean distinctMultiTouch = mKeyboardSwitcher.hasDistinctMultitouch();
|
||||
switch (primaryCode) {
|
||||
case Keyboard.KEYCODE_DELETE:
|
||||
handleBackspace();
|
||||
|
@ -1140,9 +1142,14 @@ public class LatinIME extends InputMethodService
|
|||
break;
|
||||
case Keyboard.KEYCODE_SHIFT:
|
||||
// Shift key is handled in onPress() when device has distinct multi-touch panel.
|
||||
if (!mKeyboardSwitcher.hasDistinctMultitouch())
|
||||
if (!distinctMultiTouch)
|
||||
handleShift();
|
||||
break;
|
||||
case Keyboard.KEYCODE_MODE_CHANGE:
|
||||
// Symbol key is handled in onPress() when device has distinct multi-touch panel.
|
||||
if (!distinctMultiTouch)
|
||||
changeKeyboardMode();
|
||||
break;
|
||||
case Keyboard.KEYCODE_CANCEL:
|
||||
if (!isShowingOptionDialog()) {
|
||||
handleClose();
|
||||
|
@ -1160,10 +1167,6 @@ public class LatinIME extends InputMethodService
|
|||
case LatinKeyboardView.KEYCODE_PREV_LANGUAGE:
|
||||
toggleLanguage(false, false);
|
||||
break;
|
||||
case Keyboard.KEYCODE_MODE_CHANGE:
|
||||
// TODO: Mode change (symbol key) should be handled in onPress().
|
||||
changeKeyboardMode();
|
||||
break;
|
||||
case LatinKeyboardView.KEYCODE_VOICE:
|
||||
if (VOICE_INSTALLED) {
|
||||
startListening(false /* was a button press, was not a swipe */);
|
||||
|
@ -2209,13 +2212,16 @@ public class LatinIME extends InputMethodService
|
|||
public void onPress(int primaryCode) {
|
||||
vibrate();
|
||||
playKeyClick(primaryCode);
|
||||
if (mKeyboardSwitcher.hasDistinctMultitouch() && primaryCode == Keyboard.KEYCODE_SHIFT) {
|
||||
final boolean distinctMultiTouch = mKeyboardSwitcher.hasDistinctMultitouch();
|
||||
if (distinctMultiTouch && primaryCode == Keyboard.KEYCODE_SHIFT) {
|
||||
mShiftKeyState.onPress();
|
||||
handleShift();
|
||||
} else if (primaryCode == Keyboard.KEYCODE_MODE_CHANGE) {
|
||||
// TODO: We should handle KEYCODE_MODE_CHANGE (symbol) here as well.
|
||||
} else if (distinctMultiTouch && primaryCode == Keyboard.KEYCODE_MODE_CHANGE) {
|
||||
mSymbolKeyState.onPress();
|
||||
changeKeyboardMode();
|
||||
} else {
|
||||
mShiftKeyState.onOtherKeyPressed();
|
||||
mSymbolKeyState.onOtherKeyPressed();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2223,12 +2229,15 @@ public class LatinIME extends InputMethodService
|
|||
// Reset any drag flags in the keyboard
|
||||
((LatinKeyboard) mKeyboardSwitcher.getInputView().getKeyboard()).keyReleased();
|
||||
//vibrate();
|
||||
if (mKeyboardSwitcher.hasDistinctMultitouch() && primaryCode == Keyboard.KEYCODE_SHIFT) {
|
||||
final boolean distinctMultiTouch = mKeyboardSwitcher.hasDistinctMultitouch();
|
||||
if (distinctMultiTouch && primaryCode == Keyboard.KEYCODE_SHIFT) {
|
||||
if (mShiftKeyState.isMomentary())
|
||||
resetShift();
|
||||
mShiftKeyState.onRelease();
|
||||
} else if (primaryCode == Keyboard.KEYCODE_MODE_CHANGE) {
|
||||
// TODO: We should handle KEYCODE_MODE_CHANGE (symbol) here as well.
|
||||
} else if (distinctMultiTouch && primaryCode == Keyboard.KEYCODE_MODE_CHANGE) {
|
||||
if (mSymbolKeyState.isMomentary())
|
||||
changeKeyboardMode();
|
||||
mSymbolKeyState.onRelease();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -52,9 +52,6 @@ public class LatinKeyboardView extends LatinKeyboardBaseView {
|
|||
/** The y coordinate of the last row */
|
||||
private int mLastRowY;
|
||||
|
||||
// This is local working variable for onLongPress().
|
||||
private int[] mKeyCodes = new int[1];
|
||||
|
||||
public LatinKeyboardView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
|
|
@ -111,6 +111,8 @@ public class PointerTracker {
|
|||
throw new IllegalArgumentException();
|
||||
mKeys = keys;
|
||||
mKeyDebounceThresholdSquared = (int)(hysteresisPixel * hysteresisPixel);
|
||||
// Update current key index because keyboard layout has been changed.
|
||||
mCurrentKey = mKeyDetector.getKeyIndexAndNearbyCodes(mStartX, mStartY, null);
|
||||
}
|
||||
|
||||
private boolean isValidKeyIndex(int keyIndex) {
|
||||
|
@ -126,8 +128,8 @@ public class PointerTracker {
|
|||
if (key == null)
|
||||
return false;
|
||||
int primaryCode = key.codes[0];
|
||||
// TODO: KEYCODE_MODE_CHANGE (symbol) will be also a modifier key
|
||||
return primaryCode == Keyboard.KEYCODE_SHIFT;
|
||||
return primaryCode == Keyboard.KEYCODE_SHIFT
|
||||
|| primaryCode == Keyboard.KEYCODE_MODE_CHANGE;
|
||||
}
|
||||
|
||||
public void updateKey(int keyIndex) {
|
||||
|
@ -173,6 +175,8 @@ public class PointerTracker {
|
|||
}
|
||||
|
||||
public void onDownEvent(int x, int y, long eventTime) {
|
||||
if (DEBUG)
|
||||
debugLog("onDownEvent:", x, y);
|
||||
int keyIndex = mKeyDetector.getKeyIndexAndNearbyCodes(x, y, null);
|
||||
mCurrentKey = keyIndex;
|
||||
mStartX = x;
|
||||
|
@ -186,6 +190,8 @@ public class PointerTracker {
|
|||
if (mListener != null) {
|
||||
int primaryCode = isValidKeyIndex(keyIndex) ? mKeys[keyIndex].codes[0] : 0;
|
||||
mListener.onPress(primaryCode);
|
||||
// This onPress call may have changed keyboard layout and have updated mCurrentKey
|
||||
keyIndex = mCurrentKey;
|
||||
}
|
||||
if (isValidKeyIndex(keyIndex)) {
|
||||
if (mKeys[keyIndex].repeatable) {
|
||||
|
@ -197,11 +203,11 @@ public class PointerTracker {
|
|||
}
|
||||
showKeyPreviewAndUpdateKey(keyIndex);
|
||||
updateMoveDebouncing(x, y);
|
||||
if (DEBUG)
|
||||
debugLog("onDownEvent:", x, y);
|
||||
}
|
||||
|
||||
public void onMoveEvent(int x, int y, long eventTime) {
|
||||
if (DEBUG_MOVE)
|
||||
debugLog("onMoveEvent:", x, y);
|
||||
if (mKeyAlreadyProcessed)
|
||||
return;
|
||||
int keyIndex = mKeyDetector.getKeyIndexAndNearbyCodes(x, y, null);
|
||||
|
@ -242,15 +248,13 @@ public class PointerTracker {
|
|||
*/
|
||||
showKeyPreviewAndUpdateKey(isMinorTimeBounce() ? mLastKey : mCurrentKey);
|
||||
updateMoveDebouncing(x, y);
|
||||
if (DEBUG_MOVE)
|
||||
debugLog("onMoveEvent:", x, y);
|
||||
}
|
||||
|
||||
public void onUpEvent(int x, int y, long eventTime) {
|
||||
if (mKeyAlreadyProcessed)
|
||||
return;
|
||||
if (DEBUG)
|
||||
debugLog("onUpEvent :", x, y);
|
||||
if (mKeyAlreadyProcessed)
|
||||
return;
|
||||
mHandler.cancelKeyTimers();
|
||||
mHandler.cancelPopupPreview();
|
||||
int keyIndex = mKeyDetector.getKeyIndexAndNearbyCodes(x, y, null);
|
||||
|
@ -384,9 +388,12 @@ public class PointerTracker {
|
|||
// The modifier key, such as shift key, should not be shown as preview when multi-touch is
|
||||
// supported. On thge other hand, if multi-touch is not supported, the modifier key should
|
||||
// be shown as preview.
|
||||
if (!isModifier() || !mHasDistinctMultitouch)
|
||||
if (mHasDistinctMultitouch && isModifier()) {
|
||||
mProxy.showPreview(NOT_A_KEY, this);
|
||||
} else {
|
||||
mProxy.showPreview(keyIndex, this);
|
||||
}
|
||||
}
|
||||
|
||||
private void detectAndSendKey(int index, int x, int y, long eventTime) {
|
||||
final OnKeyboardActionListener listener = mListener;
|
||||
|
@ -478,7 +485,7 @@ public class PointerTracker {
|
|||
}
|
||||
|
||||
private void debugLog(String title, int x, int y) {
|
||||
Key key = getKey(mCurrentKey);
|
||||
Key key = getKey(mKeyDetector.getKeyIndexAndNearbyCodes(x, y, null));
|
||||
final String code;
|
||||
if (key == null) {
|
||||
code = "----";
|
||||
|
|
Loading…
Reference in New Issue