Merge "Support swiping in both directions for trackpad back gesture" into udc-dev

This commit is contained in:
Tracy Zhou
2023-03-01 05:49:47 +00:00
committed by Android (Google) Code Review

View File

@@ -234,6 +234,7 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack
private boolean mLogGesture = false; private boolean mLogGesture = false;
private boolean mInRejectedExclusion = false; private boolean mInRejectedExclusion = false;
private boolean mIsOnLeftEdge; private boolean mIsOnLeftEdge;
private boolean mDeferSetIsOnLeftEdge;
private boolean mIsAttached; private boolean mIsAttached;
private boolean mIsGesturalModeEnabled; private boolean mIsGesturalModeEnabled;
@@ -878,7 +879,9 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack
// either the bouncer is showing or the notification panel is hidden // either the bouncer is showing or the notification panel is hidden
mInputEventReceiver.setBatchingEnabled(false); mInputEventReceiver.setBatchingEnabled(false);
if (isTrackpadEvent) { if (isTrackpadEvent) {
// TODO: show the back arrow based on the direction of the swipe. // Since trackpad gestures don't have zones, this will be determined later by the
// direction of the gesture. {@code mIsOnLeftEdge} is set to false to begin with.
mDeferSetIsOnLeftEdge = true;
mIsOnLeftEdge = false; mIsOnLeftEdge = false;
} else { } else {
mIsOnLeftEdge = ev.getX() <= mEdgeWidthLeft + mLeftInset; mIsOnLeftEdge = ev.getX() <= mEdgeWidthLeft + mLeftInset;
@@ -899,7 +902,7 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack
mEdgeBackPlugin.onMotionEvent(ev); mEdgeBackPlugin.onMotionEvent(ev);
dispatchToBackAnimation(ev); dispatchToBackAnimation(ev);
} }
if (mLogGesture) { if (mLogGesture || isTrackpadEvent) {
mDownPoint.set(ev.getX(), ev.getY()); mDownPoint.set(ev.getX(), ev.getY());
mEndPoint.set(-1, -1); mEndPoint.set(-1, -1);
mThresholdCrossed = false; mThresholdCrossed = false;
@@ -907,9 +910,9 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack
// For debugging purposes, only log edge points // For debugging purposes, only log edge points
(isWithinInsets ? mGestureLogInsideInsets : mGestureLogOutsideInsets).log(String.format( (isWithinInsets ? mGestureLogInsideInsets : mGestureLogOutsideInsets).log(String.format(
"Gesture [%d,alw=%B,%B,%B,%B,%B,disp=%s,wl=%d,il=%d,wr=%d,ir=%d,excl=%s]", "Gesture [%d,alw=%B,%B,%B,%B,%B,%B,disp=%s,wl=%d,il=%d,wr=%d,ir=%d,excl=%s]",
System.currentTimeMillis(), isTrackpadEvent, mAllowGesture, mIsOnLeftEdge, System.currentTimeMillis(), isTrackpadEvent, mAllowGesture, mIsOnLeftEdge,
mIsBackGestureAllowed, mDeferSetIsOnLeftEdge, mIsBackGestureAllowed,
QuickStepContract.isBackGestureDisabled(mSysUiFlags), mDisplaySize, QuickStepContract.isBackGestureDisabled(mSysUiFlags), mDisplaySize,
mEdgeWidthLeft, mLeftInset, mEdgeWidthRight, mRightInset, mExcludeRegion)); mEdgeWidthLeft, mLeftInset, mEdgeWidthRight, mRightInset, mExcludeRegion));
} else if (mAllowGesture || mLogGesture) { } else if (mAllowGesture || mLogGesture) {
@@ -928,6 +931,14 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack
mLogGesture = false; mLogGesture = false;
return; return;
} else if (action == MotionEvent.ACTION_MOVE) { } else if (action == MotionEvent.ACTION_MOVE) {
if (isTrackpadEvent && mDeferSetIsOnLeftEdge) {
// mIsOnLeftEdge is determined by the relative position between the down
// and the current motion event for trackpad gestures instead of zoning.
mIsOnLeftEdge = mEndPoint.x > mDownPoint.x;
mEdgeBackPlugin.setIsLeftPanel(mIsOnLeftEdge);
mDeferSetIsOnLeftEdge = false;
}
if ((ev.getEventTime() - ev.getDownTime()) > mLongPressTimeout) { if ((ev.getEventTime() - ev.getDownTime()) > mLongPressTimeout) {
if (mAllowGesture) { if (mAllowGesture) {
logGesture(SysUiStatsLog.BACK_GESTURE__TYPE__INCOMPLETE_LONG_PRESS); logGesture(SysUiStatsLog.BACK_GESTURE__TYPE__INCOMPLETE_LONG_PRESS);