diff options
| author | 2023-03-01 05:49:47 +0000 | |
|---|---|---|
| committer | 2023-03-01 05:49:47 +0000 | |
| commit | e7020d59bd8d37de52f846e557477be97aebfa57 (patch) | |
| tree | 11577582debd1de47baba7618d76384176a9baa8 | |
| parent | 8186b7edc889e5be93db747d068910b8c87ec44d (diff) | |
| parent | 0ec47d29f20a7cf5898e0710b11d2f5603f16a39 (diff) | |
Merge "Support swiping in both directions for trackpad back gesture" into udc-dev
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java index f3d60145a057..342e0b006c18 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java @@ -234,6 +234,7 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack private boolean mLogGesture = false; private boolean mInRejectedExclusion = false; private boolean mIsOnLeftEdge; + private boolean mDeferSetIsOnLeftEdge; private boolean mIsAttached; private boolean mIsGesturalModeEnabled; @@ -878,7 +879,9 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack // either the bouncer is showing or the notification panel is hidden mInputEventReceiver.setBatchingEnabled(false); 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; } else { mIsOnLeftEdge = ev.getX() <= mEdgeWidthLeft + mLeftInset; @@ -899,7 +902,7 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack mEdgeBackPlugin.onMotionEvent(ev); dispatchToBackAnimation(ev); } - if (mLogGesture) { + if (mLogGesture || isTrackpadEvent) { mDownPoint.set(ev.getX(), ev.getY()); mEndPoint.set(-1, -1); mThresholdCrossed = false; @@ -907,9 +910,9 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack // For debugging purposes, only log edge points (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, - mIsBackGestureAllowed, + mDeferSetIsOnLeftEdge, mIsBackGestureAllowed, QuickStepContract.isBackGestureDisabled(mSysUiFlags), mDisplaySize, mEdgeWidthLeft, mLeftInset, mEdgeWidthRight, mRightInset, mExcludeRegion)); } else if (mAllowGesture || mLogGesture) { @@ -928,6 +931,14 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack mLogGesture = false; return; } 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 (mAllowGesture) { logGesture(SysUiStatsLog.BACK_GESTURE__TYPE__INCOMPLETE_LONG_PRESS); |