Display spacebar language switcher even when key preview is off

Bug: 4313884
Change-Id: I9d4a474302dadbfc610324799f8768b803705e52
This commit is contained in:
Tadashi G. Takaoka 2011-04-21 12:22:00 +09:00
parent 5454ff5a66
commit e6cb8fc234
2 changed files with 18 additions and 9 deletions

View file

@ -889,8 +889,11 @@ public class KeyboardView extends View implements PointerTracker.UIProxy {
@Override
public void showKeyPreview(int keyIndex, PointerTracker tracker) {
if (mShowKeyPreview || mKeyboard.needSpacebarPreview(keyIndex)) {
if (mShowKeyPreview) {
mHandler.showKeyPreview(mDelayBeforePreview, keyIndex, tracker);
} else if (mKeyboard.needSpacebarPreview(keyIndex)) {
// Show key preview (in this case, slide language switcher) without any delay.
showKey(keyIndex, tracker);
}
}
@ -899,6 +902,9 @@ public class KeyboardView extends View implements PointerTracker.UIProxy {
if (mShowKeyPreview) {
mHandler.cancelShowKeyPreview(tracker);
mHandler.dismissKeyPreview(mDelayAfterPreview, tracker);
} else if (mKeyboard.needSpacebarPreview(KeyDetector.NOT_A_KEY)) {
// Dismiss key preview (in this case, slide language switcher) without any delay.
mPreviewText.setVisibility(View.INVISIBLE);
}
}

View file

@ -392,7 +392,7 @@ public class PointerTracker {
startLongPressTimer(keyIndex);
showKeyPreview(keyIndex);
setPressedKeyGraphics(keyIndex);
} else if (!isMinorMoveBounce(x, y, keyIndex)) {
} else if (isMajorEnoughMoveToBeOnNewKey(x, y, keyIndex)) {
// The pointer has been slid in to the new key from the previous key, we must call
// onRelease() first to notify that the previous key has been released, then call
// onPress() to notify that the new key is being pressed.
@ -430,9 +430,12 @@ public class PointerTracker {
}
return;
}
} else if (mKeyboard.needSpacebarPreview(keyIndex)) {
// Display spacebar slide language switcher.
showKeyPreview(keyIndex);
}
} else {
if (oldKey != null && !isMinorMoveBounce(x, y, keyIndex)) {
if (oldKey != null && isMajorEnoughMoveToBeOnNewKey(x, y, keyIndex)) {
// The pointer has been slid out from the previous key, we must call onRelease() to
// notify that the previous key has been released.
setReleasedKeyGraphics(oldKeyIndex);
@ -483,7 +486,7 @@ public class PointerTracker {
mIsInSlidingKeyInput = false;
final PointerTrackerKeyState keyState = mKeyState;
final int keyX, keyY;
if (!isMinorMoveBounce(x, y, keyState.onMoveKey(x, y))) {
if (isMajorEnoughMoveToBeOnNewKey(x, y, keyState.onMoveKey(x, y))) {
keyX = x;
keyY = y;
} else {
@ -544,16 +547,16 @@ public class PointerTracker {
return mKeyState.getDownTime();
}
private boolean isMinorMoveBounce(int x, int y, int newKey) {
private boolean isMajorEnoughMoveToBeOnNewKey(int x, int y, int newKey) {
if (mKeys == null || mKeyHysteresisDistanceSquared < 0)
throw new IllegalStateException("keyboard and/or hysteresis not set");
int curKey = mKeyState.getKeyIndex();
if (newKey == curKey) {
return true;
} else if (isValidKeyIndex(curKey)) {
return mKeys.get(curKey).squaredDistanceToEdge(x, y) < mKeyHysteresisDistanceSquared;
} else {
return false;
} else if (isValidKeyIndex(curKey)) {
return mKeys.get(curKey).squaredDistanceToEdge(x, y) >= mKeyHysteresisDistanceSquared;
} else {
return true;
}
}