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

Commit 6d894e77 authored by Winson Chung's avatar Winson Chung Committed by Luca Stefani
Browse files

Always allow back gesture when there are transient bars showing

Bug: 142091458
Test: Open immersive sticky app with exclusion rects specified, ensure that
      when transient bars are showing that we don't respect the exclusion
      rects

Change-Id: I98cd6ff3b003c6188e93289d8ff92dce5ff2a7ba
parent d2001a5f
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@
package com.android.systemui.statusbar.phone;

import static android.view.Display.INVALID_DISPLAY;
import static android.view.View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
import static android.view.View.NAVIGATION_BAR_TRANSIENT;

import android.content.Context;
import android.content.pm.ParceledListSlice;
@@ -154,6 +156,7 @@ public class EdgeBackGestureHandler implements DisplayListener {
    private boolean mIsAttached;
    private boolean mIsGesturalModeEnabled;
    private boolean mIsEnabled;
    private boolean mIsInTransientImmersiveStickyState;

    private InputMonitor mInputMonitor;
    private InputEventReceiver mInputEventReceiver;
@@ -215,6 +218,12 @@ public class EdgeBackGestureHandler implements DisplayListener {
        updateCurrentUserResources(currentUserContext.getResources());
    }

    public void onSystemUiVisibilityChanged(int systemUiVisibility) {
        mIsInTransientImmersiveStickyState =
                (systemUiVisibility & SYSTEM_UI_FLAG_IMMERSIVE_STICKY) != 0
                && (systemUiVisibility & NAVIGATION_BAR_TRANSIENT) != 0;
    }

    private void disposeInputChannel() {
        if (mInputEventReceiver != null) {
            mInputEventReceiver.dispose();
@@ -315,13 +324,21 @@ public class EdgeBackGestureHandler implements DisplayListener {
    }

    private boolean isWithinTouchRegion(int x, int y) {
        // Disallow if over the IME
        if (y > (mDisplaySize.y - Math.max(mImeHeight, mNavBarHeight))) {
            return false;
        }

        // Disallow if too far from the edge
        if (x > mEdgeWidth + mLeftInset && x < (mDisplaySize.x - mEdgeWidth - mRightInset)) {
            return false;
        }

        // Always allow if the user is in a transient sticky immersive state
        if (mIsInTransientImmersiveStickyState) {
            return true;
        }

        boolean isInExcludedRegion = mExcludeRegion.contains(x, y);
        if (isInExcludedRegion) {
            mOverviewProxyService.notifyBackAction(false /* completed */, -1, -1,
+3 −0
Original line number Diff line number Diff line
@@ -539,6 +539,9 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
                }
                mAutoHideController.touchAutoHide();
            }
            if (mNavigationBarView != null) {
                mNavigationBarView.onSystemUiVisibilityChanged(mSystemUiVisibility);
            }
        }
        mLightBarController.onNavigationVisibilityChanged(
                vis, mask, nbModeChanged, mNavigationBarMode, navbarColorManagedByIme);
+4 −0
Original line number Diff line number Diff line
@@ -365,6 +365,10 @@ public class NavigationBarView extends FrameLayout implements
        return super.onTouchEvent(event);
    }

    void onSystemUiVisibilityChanged(int systemUiVisibility) {
        mEdgeBackGestureHandler.onSystemUiVisibilityChanged(systemUiVisibility);
    }

    void onBarTransition(int newMode) {
        if (newMode == MODE_OPAQUE) {
            // If the nav bar background is opaque, stop auto tinting since we know the icons are