Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ff6800b9 authored by Tracy Zhou's avatar Tracy Zhou
Browse files

Support 3-finger swipe on the trackpad to unlock

- Don't handle ACTION_POINTER_DOWN and ACTION_POINTER_UP for trackpad gestures (We cancel multi finger gestures on the screen. We don't want to do that for trackpad gestures since on the trackpad, one finger gesture is reserved for cursor)

Fixes: 270605500
Test: 3-finger swipe up on the lockscreen, and see that it's unlocked
Change-Id: Ida8d9e3d5c543ec7e5619a0df8ce58d8ea02c831
parent b5528bd2
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -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 {