Refactor more keys menu framework (part 3)
Make it possible to re-enter gesture input even after triggering the long-press menu. This is useful for new users who may pause at the start of a word. Works for both single and bi-manual gestures. Bug: 7595193 Change-Id: Ieaecfd5385ed6c10ae9347b99c2e35a0de5e895dmain
parent
be68b41ccb
commit
ac69ab400d
|
@ -1013,7 +1013,7 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy,
|
||||||
public void closing() {
|
public void closing() {
|
||||||
dismissAllKeyPreviews();
|
dismissAllKeyPreviews();
|
||||||
cancelAllMessages();
|
cancelAllMessages();
|
||||||
|
onCancelMoreKeysPanel();
|
||||||
mInvalidateAllKeys = true;
|
mInvalidateAllKeys = true;
|
||||||
requestLayout();
|
requestLayout();
|
||||||
}
|
}
|
||||||
|
@ -1031,11 +1031,11 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy,
|
||||||
return (mMoreKeysPanel != null);
|
return (mMoreKeysPanel != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean dismissMoreKeysPanel() {
|
@Override
|
||||||
|
public void onCancelMoreKeysPanel() {
|
||||||
if (isShowingMoreKeysPanel()) {
|
if (isShowingMoreKeysPanel()) {
|
||||||
return mMoreKeysPanel.dismissMoreKeysPanel();
|
mMoreKeysPanel.dismissMoreKeysPanel();
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -844,10 +844,16 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
|
||||||
@Override
|
@Override
|
||||||
public void closing() {
|
public void closing() {
|
||||||
super.closing();
|
super.closing();
|
||||||
dismissMoreKeysPanel();
|
onCancelMoreKeysPanel();
|
||||||
mMoreKeysPanelCache.clear();
|
mMoreKeysPanelCache.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCancelMoreKeysPanel() {
|
||||||
|
super.onCancelMoreKeysPanel();
|
||||||
|
PointerTracker.dismissAllMoreKeysPanels();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onDismissMoreKeysPanel() {
|
public boolean onDismissMoreKeysPanel() {
|
||||||
dimEntireKeyboard(false /* dimmed */);
|
dimEntireKeyboard(false /* dimmed */);
|
||||||
|
|
|
@ -120,7 +120,15 @@ public class MoreKeysKeyboardView extends KeyboardView implements MoreKeysPanel
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onMoveEvent(int x, int y, final int pointerId, long eventTime) {
|
public void onMoveEvent(int x, int y, final int pointerId, long eventTime) {
|
||||||
|
if (mActivePointerId != pointerId) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final boolean hasOldKey = (mCurrentKey != null);
|
||||||
onMoveKeyInternal(x, y, pointerId);
|
onMoveKeyInternal(x, y, pointerId);
|
||||||
|
if (hasOldKey && mCurrentKey == null) {
|
||||||
|
// If the pointer has moved too far away from any target then cancel the panel.
|
||||||
|
mController.onCancelMoreKeysPanel();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -30,6 +30,11 @@ public interface MoreKeysPanel {
|
||||||
* Remove the current {@link MoreKeysPanel} from the target view.
|
* Remove the current {@link MoreKeysPanel} from the target view.
|
||||||
*/
|
*/
|
||||||
public boolean onDismissMoreKeysPanel();
|
public boolean onDismissMoreKeysPanel();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instructs the parent to cancel the panel (e.g., when entering a different input mode).
|
||||||
|
*/
|
||||||
|
public void onCancelMoreKeysPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -412,6 +412,17 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void dismissAllMoreKeysPanels() {
|
||||||
|
final int trackersSize = sTrackers.size();
|
||||||
|
for (int i = 0; i < trackersSize; ++i) {
|
||||||
|
final PointerTracker tracker = sTrackers.get(i);
|
||||||
|
if (tracker.isShowingMoreKeysPanel()) {
|
||||||
|
tracker.mMoreKeysPanel.dismissMoreKeysPanel();
|
||||||
|
tracker.mMoreKeysPanel = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private PointerTracker(final int id, final KeyEventHandler handler) {
|
private PointerTracker(final int id, final KeyEventHandler handler) {
|
||||||
if (handler == null) {
|
if (handler == null) {
|
||||||
throw new NullPointerException();
|
throw new NullPointerException();
|
||||||
|
@ -715,6 +726,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
|
||||||
sLastRecognitionPointSize = 0;
|
sLastRecognitionPointSize = 0;
|
||||||
sLastRecognitionTime = 0;
|
sLastRecognitionTime = 0;
|
||||||
mListener.onStartBatchInput();
|
mListener.onStartBatchInput();
|
||||||
|
dismissAllMoreKeysPanels();
|
||||||
}
|
}
|
||||||
mTimerProxy.cancelLongPressTimer();
|
mTimerProxy.cancelLongPressTimer();
|
||||||
mDrawingProxy.showGesturePreviewTrail(this, isOldestTrackerInQueue(this));
|
mDrawingProxy.showGesturePreviewTrail(this, isOldestTrackerInQueue(this));
|
||||||
|
@ -846,7 +858,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
|
||||||
}
|
}
|
||||||
// A gesture should start only from a non-modifier key.
|
// A gesture should start only from a non-modifier key.
|
||||||
mIsDetectingGesture = (mKeyboard != null) && mKeyboard.mId.isAlphabetKeyboard()
|
mIsDetectingGesture = (mKeyboard != null) && mKeyboard.mId.isAlphabetKeyboard()
|
||||||
&& !isShowingMoreKeysPanel() && key != null && !key.isModifier();
|
&& key != null && !key.isModifier();
|
||||||
if (mIsDetectingGesture) {
|
if (mIsDetectingGesture) {
|
||||||
if (getActivePointerTrackerCount() == 1) {
|
if (getActivePointerTrackerCount() == 1) {
|
||||||
sGestureFirstDownTime = eventTime;
|
sGestureFirstDownTime = eventTime;
|
||||||
|
@ -907,6 +919,11 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
|
||||||
cancelBatchInput();
|
cancelBatchInput();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// If the MoreKeysPanel is showing then do not attempt to enter gesture mode. However,
|
||||||
|
// the gestured touch points are still being recorded in case the panel is dismissed.
|
||||||
|
if (isShowingMoreKeysPanel()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
mayStartBatchInput(key);
|
mayStartBatchInput(key);
|
||||||
if (sInGesture) {
|
if (sInGesture) {
|
||||||
mayUpdateBatchInput(eventTime, key);
|
mayUpdateBatchInput(eventTime, key);
|
||||||
|
@ -926,7 +943,6 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
|
||||||
final int translatedX = mMoreKeysPanel.translateX(x);
|
final int translatedX = mMoreKeysPanel.translateX(x);
|
||||||
final int translatedY = mMoreKeysPanel.translateY(y);
|
final int translatedY = mMoreKeysPanel.translateY(y);
|
||||||
mMoreKeysPanel.onMoveEvent(translatedX, translatedY, mPointerId, eventTime);
|
mMoreKeysPanel.onMoveEvent(translatedX, translatedY, mPointerId, eventTime);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sShouldHandleGesture && me != null) {
|
if (sShouldHandleGesture && me != null) {
|
||||||
|
@ -941,6 +957,11 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
|
||||||
false /* isMajorEvent */, null);
|
false /* isMajorEvent */, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isShowingMoreKeysPanel()) {
|
||||||
|
// Do not handle sliding keys (or show key pop-ups) when the MoreKeysPanel is visible.
|
||||||
|
return;
|
||||||
|
}
|
||||||
onMoveEventInternal(x, y, eventTime);
|
onMoveEventInternal(x, y, eventTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1199,8 +1220,10 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
|
||||||
mTimerProxy.cancelKeyTimers();
|
mTimerProxy.cancelKeyTimers();
|
||||||
setReleasedKeyGraphics(mCurrentKey);
|
setReleasedKeyGraphics(mCurrentKey);
|
||||||
resetSlidingKeyInput();
|
resetSlidingKeyInput();
|
||||||
mMoreKeysPanel.dismissMoreKeysPanel();
|
if (isShowingMoreKeysPanel()) {
|
||||||
mMoreKeysPanel = null;
|
mMoreKeysPanel.dismissMoreKeysPanel();
|
||||||
|
mMoreKeysPanel = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startRepeatKey(final Key key) {
|
private void startRepeatKey(final Key key) {
|
||||||
|
|
|
@ -684,6 +684,11 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
|
||||||
public void onShowMoreKeysPanel(MoreKeysPanel panel) {
|
public void onShowMoreKeysPanel(MoreKeysPanel panel) {
|
||||||
mKeyboardView.onShowMoreKeysPanel(panel);
|
mKeyboardView.onShowMoreKeysPanel(panel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCancelMoreKeysPanel() {
|
||||||
|
dismissMoreSuggestions();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
boolean dismissMoreSuggestions() {
|
boolean dismissMoreSuggestions() {
|
||||||
|
|
Loading…
Reference in New Issue