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
This commit is contained in:
Tracy Zhou
2023-03-06 23:47:42 -08:00
parent b5528bd2cb
commit ff6800b9a9

View File

@@ -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 {