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

Commit 52e7eaf7 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Always allow back gesture when there are transient bars showing"

parents 89e09c39 3d6c0800
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;
@@ -144,6 +146,7 @@ public class EdgeBackGestureHandler implements DisplayListener {
    private boolean mIsAttached;
    private boolean mIsGesturalModeEnabled;
    private boolean mIsEnabled;
    private boolean mIsInTransientImmersiveStickyState;

    private InputMonitor mInputMonitor;
    private InputEventReceiver mInputEventReceiver;
@@ -205,6 +208,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();
@@ -305,13 +314,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
@@ -346,6 +346,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