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

Commit 5b8c6fac authored by Tracy Zhou's avatar Tracy Zhou
Browse files

Consider motion events classification (for trackpad gestures) when cancelling current gesture

Bug: 271048891
Test: Pull up the notification shade with 3-finger swipe on the trackpad
Change-Id: Iae3a7ad2d5e3912bc9c3be210150474ed786d181
parent 3b65691e
Loading
Loading
Loading
Loading
+20 −5
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.shade;

import static com.android.systemui.flags.Flags.TRACKPAD_GESTURE_BACK;
import static com.android.systemui.util.kotlin.JavaAdapterKt.collectFlow;

import android.app.StatusBarManager;
@@ -39,6 +40,7 @@ import com.android.systemui.R;
import com.android.systemui.biometrics.domain.interactor.UdfpsOverlayInteractor;
import com.android.systemui.classifier.FalsingCollector;
import com.android.systemui.dock.DockManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
import com.android.systemui.keyguard.domain.interactor.AlternateBouncerInteractor;
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
@@ -88,10 +90,12 @@ public class NotificationShadeWindowViewController {
    private final NotificationInsetsController mNotificationInsetsController;
    private final AlternateBouncerInteractor mAlternateBouncerInteractor;
    private final UdfpsOverlayInteractor mUdfpsOverlayInteractor;
    private final boolean mIsTrackpadGestureBackEnabled;
    private GestureDetector mPulsingWakeupGestureHandler;
    private View mBrightnessMirror;
    private boolean mTouchActive;
    private boolean mTouchCancelled;
    private MotionEvent mDownEvent;
    private boolean mExpandAnimationRunning;
    private NotificationStackScrollLayout mStackScrollLayout;
    private PhoneStatusBarViewController mStatusBarViewController;
@@ -137,8 +141,8 @@ public class NotificationShadeWindowViewController {
            AlternateBouncerInteractor alternateBouncerInteractor,
            UdfpsOverlayInteractor udfpsOverlayInteractor,
            KeyguardTransitionInteractor keyguardTransitionInteractor,
            PrimaryBouncerToGoneTransitionViewModel primaryBouncerToGoneTransitionViewModel
    ) {
            PrimaryBouncerToGoneTransitionViewModel primaryBouncerToGoneTransitionViewModel,
            FeatureFlags featureFlags) {
        mLockscreenShadeTransitionController = transitionController;
        mFalsingCollector = falsingCollector;
        mStatusBarStateController = statusBarStateController;
@@ -159,6 +163,7 @@ public class NotificationShadeWindowViewController {
        mNotificationInsetsController = notificationInsetsController;
        mAlternateBouncerInteractor = alternateBouncerInteractor;
        mUdfpsOverlayInteractor = udfpsOverlayInteractor;
        mIsTrackpadGestureBackEnabled = featureFlags.isEnabled(TRACKPAD_GESTURE_BACK);

        // This view is not part of the newly inflated expanded status bar.
        mBrightnessMirror = mView.findViewById(R.id.brightness_mirror_container);
@@ -219,9 +224,11 @@ public class NotificationShadeWindowViewController {
                if (isDown) {
                    mTouchActive = true;
                    mTouchCancelled = false;
                    mDownEvent = ev;
                } else if (ev.getActionMasked() == MotionEvent.ACTION_UP
                        || ev.getActionMasked() == MotionEvent.ACTION_CANCEL) {
                    mTouchActive = false;
                    mDownEvent = null;
                }
                if (mTouchCancelled || mExpandAnimationRunning) {
                    return false;
@@ -447,9 +454,17 @@ public class NotificationShadeWindowViewController {
    public void cancelCurrentTouch() {
        if (mTouchActive) {
            final long now = SystemClock.uptimeMillis();
            MotionEvent event = MotionEvent.obtain(now, now,
            final MotionEvent event;
            if (mIsTrackpadGestureBackEnabled) {
                event = MotionEvent.obtain(mDownEvent);
                event.setDownTime(now);
                event.setAction(MotionEvent.ACTION_CANCEL);
                event.setLocation(0.0f, 0.0f);
            } else {
                event = MotionEvent.obtain(now, now,
                        MotionEvent.ACTION_CANCEL, 0.0f, 0.0f, 0);
                event.setSource(InputDevice.SOURCE_TOUCHSCREEN);
            }
            mView.dispatchTouchEvent(event);
            event.recycle();
            mTouchCancelled = true;
+6 −0
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.biometrics.domain.interactor.UdfpsOverlayInteractor
import com.android.systemui.classifier.FalsingCollectorFake
import com.android.systemui.dock.DockManager
import com.android.systemui.flags.FakeFeatureFlags
import com.android.systemui.flags.Flags
import com.android.systemui.keyguard.KeyguardUnlockAnimationController
import com.android.systemui.keyguard.domain.interactor.AlternateBouncerInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
@@ -112,6 +114,9 @@ class NotificationShadeWindowViewControllerTest : SysuiTestCase() {
            .thenReturn(keyguardSecurityContainerController)
        whenever(keyguardTransitionInteractor.lockscreenToDreamingTransition)
            .thenReturn(emptyFlow<TransitionStep>())

        val featureFlags = FakeFeatureFlags();
        featureFlags.set(Flags.TRACKPAD_GESTURE_BACK, false)
        underTest =
            NotificationShadeWindowViewController(
                lockscreenShadeTransitionController,
@@ -138,6 +143,7 @@ class NotificationShadeWindowViewControllerTest : SysuiTestCase() {
                udfpsOverlayInteractor,
                keyguardTransitionInteractor,
                primaryBouncerToGoneTransitionViewModel,
                featureFlags,
            )
        underTest.setupExpandedStatusBar()

+6 −1
Original line number Diff line number Diff line
@@ -43,6 +43,8 @@ import com.android.systemui.SysuiTestCase;
import com.android.systemui.biometrics.domain.interactor.UdfpsOverlayInteractor;
import com.android.systemui.classifier.FalsingCollectorFake;
import com.android.systemui.dock.DockManager;
import com.android.systemui.flags.FakeFeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
import com.android.systemui.keyguard.domain.interactor.AlternateBouncerInteractor;
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
@@ -132,6 +134,8 @@ public class NotificationShadeWindowViewTest extends SysuiTestCase {
        when(mKeyguardTransitionInteractor.getLockscreenToDreamingTransition())
                .thenReturn(emptyFlow());

        FakeFeatureFlags featureFlags = new FakeFeatureFlags();
        featureFlags.set(Flags.TRACKPAD_GESTURE_BACK, false);
        mController = new NotificationShadeWindowViewController(
                mLockscreenShadeTransitionController,
                new FalsingCollectorFake(),
@@ -156,7 +160,8 @@ public class NotificationShadeWindowViewTest extends SysuiTestCase {
                mAlternateBouncerInteractor,
                mUdfpsOverlayInteractor,
                mKeyguardTransitionInteractor,
                mPrimaryBouncerToGoneTransitionViewModel
                mPrimaryBouncerToGoneTransitionViewModel,
                featureFlags
        );
        mController.setupExpandedStatusBar();
        mController.setDragDownHelper(mDragDownHelper);