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

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

Allow trackpad gestures in immersive mode ignoring bar visibility

For more context of this change, please check out go/trackpad-immersive-mode

Bug: 287813022
Test: Swipe back in sticky immersive mode (e.g. YouTube)
Change-Id: Icb4b10eb39650ef878dba5611deffb3c7201ec21
parent 2be74e83
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -324,7 +324,7 @@ public class QuickStepContract {
     * Returns whether the specified sysui state is such that the back gesture should be
     * disabled.
     */
    public static boolean isBackGestureDisabled(int sysuiStateFlags) {
    public static boolean isBackGestureDisabled(int sysuiStateFlags, boolean forTrackpad) {
        // Always allow when the bouncer/global actions/voice session is showing (even on top of
        // the keyguard)
        if ((sysuiStateFlags & SYSUI_STATE_BOUNCER_SHOWING) != 0
@@ -335,16 +335,23 @@ public class QuickStepContract {
        if ((sysuiStateFlags & SYSUI_STATE_ALLOW_GESTURE_IGNORING_BAR_VISIBILITY) != 0) {
            sysuiStateFlags &= ~SYSUI_STATE_NAV_BAR_HIDDEN;
        }

        return (sysuiStateFlags & getBackGestureDisabledMask(forTrackpad)) != 0;
    }

    private static int getBackGestureDisabledMask(boolean forTrackpad) {
        // Disable when in immersive, or the notifications are interactive
        int disableFlags = SYSUI_STATE_NAV_BAR_HIDDEN | SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING;
        int disableFlags = SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING;
        if (!forTrackpad) {
            disableFlags |= SYSUI_STATE_NAV_BAR_HIDDEN;
        }

        // EdgeBackGestureHandler ignores Back gesture when SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED.
        // To allow Shade to respond to Back, we're bypassing this check (behind a flag).
        if (!ALLOW_BACK_GESTURE_IN_SHADE) {
            disableFlags |= SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED;
        }

        return (sysuiStateFlags & disableFlags) != 0;
        return disableFlags;
    }

    /**
+1 −1
Original line number Diff line number Diff line
@@ -114,7 +114,7 @@ public class SysUiState implements Dumpable {
        pw.print("  mSysUiStateFlags="); pw.println(mFlags);
        pw.println("    " + QuickStepContract.getSystemUiStateString(mFlags));
        pw.print("    backGestureDisabled=");
        pw.println(QuickStepContract.isBackGestureDisabled(mFlags));
        pw.println(QuickStepContract.isBackGestureDisabled(mFlags, false /* forTrackpad */));
        pw.print("    assistantGestureDisabled=");
        pw.println(QuickStepContract.isAssistantGestureDisabled(mFlags));
    }
+5 −3
Original line number Diff line number Diff line
@@ -1023,7 +1023,8 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack
            boolean isWithinInsets = isWithinInsets((int) ev.getX(), (int) ev.getY());
            boolean isBackAllowedCommon = !mDisabledForQuickstep && mIsBackGestureAllowed
                    && !mGestureBlockingActivityRunning
                    && !QuickStepContract.isBackGestureDisabled(mSysUiFlags)
                    && !QuickStepContract.isBackGestureDisabled(mSysUiFlags,
                            mIsTrackpadThreeFingerSwipe)
                    && !isTrackpadScroll(mIsTrackpadGestureFeaturesEnabled, ev);
            if (mIsTrackpadThreeFingerSwipe) {
                // Trackpad back gestures don't have zones, so we don't need to check if the down
@@ -1056,8 +1057,9 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack
                            + " disp=%s, wl=%d, il=%d, wr=%d, ir=%d, excl=%s]",
                    curTime, curTimeStr, mAllowGesture, mIsTrackpadThreeFingerSwipe,
                    mIsOnLeftEdge, mDeferSetIsOnLeftEdge, mIsBackGestureAllowed,
                    QuickStepContract.isBackGestureDisabled(mSysUiFlags), mDisabledForQuickstep,
                    mGestureBlockingActivityRunning, mIsInPip, mDisplaySize,
                    QuickStepContract.isBackGestureDisabled(mSysUiFlags,
                            mIsTrackpadThreeFingerSwipe),
                    mDisabledForQuickstep, mGestureBlockingActivityRunning, mIsInPip, mDisplaySize,
                    mEdgeWidthLeft, mLeftInset, mEdgeWidthRight, mRightInset, mExcludeRegion));
        } else if (mAllowGesture || mLogGesture) {
            if (!mThresholdCrossed) {