diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java index b1987c151e5fb..5a8dec1865f98 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java @@ -17,6 +17,7 @@ package com.android.systemui.shade; import static android.app.StatusBarManager.WINDOW_STATE_SHOWING; +import static android.view.MotionEvent.CLASSIFICATION_MULTI_FINGER_SWIPE; import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; @@ -305,6 +306,7 @@ public final class NotificationPanelViewController implements Dumpable { */ public final boolean mAnimateBack; + private final boolean mTrackpadGestureBack; /** * The minimum scale to "squish" the Shade and associated elements down to, for Back gesture */ @@ -849,6 +851,7 @@ public final class NotificationPanelViewController implements Dumpable { mLayoutInflater = layoutInflater; mFeatureFlags = featureFlags; mAnimateBack = mFeatureFlags.isEnabled(Flags.WM_SHADE_ANIMATE_BACK_GESTURE); + mTrackpadGestureBack = mFeatureFlags.isEnabled(Flags.TRACKPAD_GESTURE_BACK); mFalsingCollector = falsingCollector; mPowerManager = powerManager; mWakeUpCoordinator = coordinator; @@ -4758,6 +4761,9 @@ public final class NotificationPanelViewController implements Dumpable { addMovement(event); break; case MotionEvent.ACTION_POINTER_UP: + if (isTrackpadMotionEvent(event)) { + break; + } final int upPointer = event.getPointerId(event.getActionIndex()); if (mTrackingPointer == upPointer) { // gesture is ongoing, find a new pointer to track @@ -4771,7 +4777,8 @@ public final class NotificationPanelViewController implements Dumpable { mShadeLog.logMotionEventStatusBarState(event, mStatusBarStateController.getState(), "onInterceptTouchEvent: pointer down action"); - if (mStatusBarStateController.getState() == StatusBarState.KEYGUARD) { + if (!isTrackpadMotionEvent(event) + && mStatusBarStateController.getState() == StatusBarState.KEYGUARD) { mMotionAborted = true; mVelocityTracker.clear(); } @@ -4974,6 +4981,9 @@ public final class NotificationPanelViewController implements Dumpable { break; case MotionEvent.ACTION_POINTER_UP: + if (isTrackpadMotionEvent(event)) { + break; + } final int upPointer = event.getPointerId(event.getActionIndex()); if (mTrackingPointer == upPointer) { // gesture is ongoing, find a new pointer to track @@ -4990,7 +5000,8 @@ public final class NotificationPanelViewController implements Dumpable { mShadeLog.logMotionEventStatusBarState(event, mStatusBarStateController.getState(), "handleTouch: pointer down action"); - if (mStatusBarStateController.getState() == StatusBarState.KEYGUARD) { + if (!isTrackpadMotionEvent(event) + && mStatusBarStateController.getState() == StatusBarState.KEYGUARD) { mMotionAborted = true; endMotionEvent(event, x, y, true /* forceCancel */); return false; @@ -5064,6 +5075,11 @@ public final class NotificationPanelViewController implements Dumpable { } return !mGestureWaitForTouchSlop || mTracking; } + + private boolean isTrackpadMotionEvent(MotionEvent ev) { + return mTrackpadGestureBack + && ev.getClassification() == CLASSIFICATION_MULTI_FINGER_SWIPE; + } } static class SplitShadeTransitionAdapter extends Transition {