Fix edge swipe logic.
1) Only start delegating upon first move event, if all three fingers went down on the bottom edge. 2) The previous logic only required one finger to be in the edge boundary. It now requires all fingers to be in the edge boundary. Bug: 162521649 Test: manual Change-Id: I829c463c63b384642d129ff3b5ccdb0db816ddcd
This commit is contained in:
@@ -561,24 +561,6 @@ public class TouchExplorer extends BaseEventStreamTransformation
|
||||
// stream consistent.
|
||||
sendHoverExitAndTouchExplorationGestureEndIfNeeded(policyFlags);
|
||||
}
|
||||
if (mGestureDetector.isMultiFingerGesturesEnabled()
|
||||
&& mGestureDetector.isTwoFingerPassthroughEnabled()) {
|
||||
if (event.getPointerCount() == 3) {
|
||||
boolean isOnBottomEdge = false;
|
||||
// If three fingers go down on the bottom edge of the screen, delegate immediately.
|
||||
final long screenHeight = mContext.getResources().getDisplayMetrics().heightPixels;
|
||||
for (int i = 0; i < TouchState.MAX_POINTER_COUNT; ++i) {
|
||||
if (mReceivedPointerTracker.getReceivedPointerDownY(i)
|
||||
> (screenHeight - mEdgeSwipeHeightPixels)) {
|
||||
isOnBottomEdge = true;
|
||||
}
|
||||
}
|
||||
if (isOnBottomEdge) {
|
||||
mState.startDelegating();
|
||||
mDispatcher.sendDownForAllNotInjectedPointers(event, policyFlags);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -644,12 +626,34 @@ public class TouchExplorer extends BaseEventStreamTransformation
|
||||
break;
|
||||
default:
|
||||
if (mGestureDetector.isMultiFingerGesturesEnabled()) {
|
||||
return;
|
||||
if (mGestureDetector.isTwoFingerPassthroughEnabled()) {
|
||||
if (event.getPointerCount() == 3) {
|
||||
boolean isOnBottomEdge = true;
|
||||
// If three fingers went down on the bottom edge of the screen, delegate
|
||||
// immediately.
|
||||
final long screenHeight =
|
||||
mContext.getResources().getDisplayMetrics().heightPixels;
|
||||
for (int i = 0; i < TouchState.MAX_POINTER_COUNT; ++i) {
|
||||
if (mReceivedPointerTracker.getReceivedPointerDownY(i)
|
||||
< (screenHeight - mEdgeSwipeHeightPixels)) {
|
||||
isOnBottomEdge = false;
|
||||
}
|
||||
}
|
||||
if (isOnBottomEdge) {
|
||||
if (DEBUG) {
|
||||
Slog.d(LOG_TAG, "Three-finger edge swipe detected.");
|
||||
}
|
||||
mState.startDelegating();
|
||||
mDispatcher.sendDownForAllNotInjectedPointers(event, policyFlags);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// More than two pointers are delegated to the view hierarchy.
|
||||
mState.startDelegating();
|
||||
event = MotionEvent.obtainNoHistory(event);
|
||||
mDispatcher.sendDownForAllNotInjectedPointers(event, policyFlags);
|
||||
}
|
||||
// More than two pointers are delegated to the view hierarchy.
|
||||
mState.startDelegating();
|
||||
event = MotionEvent.obtainNoHistory(event);
|
||||
mDispatcher.sendDownForAllNotInjectedPointers(event, policyFlags);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user