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

Commit 1113e624 authored by Winson Chung's avatar Winson Chung
Browse files

Ignore regions specified by the nav bar overlay

- We normally allow back regardless of system exclusion regions set
  to prevent games from disabling it entirely, so we need to add
  a side channel for the shortcut bar to exclude the region for
  pulling itself in.

Bug: 188095560
Test: Enable shortcut bar, drag from edge
Change-Id: Id5bf22ad2f8efb6ffb388e9aa5664936e2ad6a9d
parent 6eb35894
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.navigationbar;

import android.content.Context;
import android.graphics.Rect;
import android.view.View;

import com.android.systemui.dagger.SysUISingleton;
@@ -47,7 +48,8 @@ public class NavigationBarOverlayController {
    /**
     * Initialize the controller with visibility change callback.
     */
    public void init(Consumer<Boolean> visibilityChangeCallback) {}
    public void init(Consumer<Boolean> visibilityChangeCallback,
            Consumer<Rect> excludeBackRegionCallback) {}

    /**
     * Set whether the view can be shown.
+6 −4
Original line number Diff line number Diff line
@@ -323,10 +323,6 @@ public class NavigationBarView extends FrameLayout implements

        mOverviewProxyService = Dependency.get(OverviewProxyService.class);
        mRecentsOnboarding = new RecentsOnboarding(context, mOverviewProxyService);
        mNavBarOverlayController = Dependency.get(NavigationBarOverlayController.class);
        if (mNavBarOverlayController.isNavigationBarOverlayEnabled()) {
            mNavBarOverlayController.init(mNavbarOverlayVisibilityChangeCallback);
        }

        mConfiguration = new Configuration();
        mTmpLastConfiguration = new Configuration();
@@ -371,6 +367,12 @@ public class NavigationBarView extends FrameLayout implements
                        return isGesturalModeOnDefaultDisplay(getContext(), mNavBarMode);
                    }
                });

        mNavBarOverlayController = Dependency.get(NavigationBarOverlayController.class);
        if (mNavBarOverlayController.isNavigationBarOverlayEnabled()) {
            mNavBarOverlayController.init(mNavbarOverlayVisibilityChangeCallback,
                    mEdgeBackGestureHandler::updateNavigationBarOverlayExcludeRegion);
        }
    }

    public void setAutoHideController(AutoHideController autoHideController) {
+9 −2
Original line number Diff line number Diff line
@@ -187,6 +187,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
    private final Executor mMainExecutor;

    private final Rect mPipExcludedBounds = new Rect();
    private final Rect mNavBarOverlayExcludedBounds = new Rect();
    private final Region mExcludeRegion = new Region();
    private final Region mUnrestrictedExcludeRegion = new Region();

@@ -366,6 +367,10 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
        mTouchSlop = mViewConfiguration.getScaledTouchSlop() * backGestureSlop;
    }

    public void updateNavigationBarOverlayExcludeRegion(Rect exclude) {
        mNavBarOverlayExcludedBounds.set(exclude);
    }

    private void onNavigationSettingsChanged() {
        boolean wasBackAllowed = isHandlingGestures();
        updateCurrentUserResources();
@@ -629,8 +634,9 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
            return false;
        }

        // If the point is inside the PiP excluded bounds, then drop it.
        if (mPipExcludedBounds.contains(x, y)) {
        // If the point is inside the PiP or Nav bar overlay excluded bounds, then ignore the back
        // gesture
        if (mPipExcludedBounds.contains(x, y) || mNavBarOverlayExcludedBounds.contains(x, y)) {
            return false;
        }

@@ -893,6 +899,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
        pw.println("  mExcludeRegion=" + mExcludeRegion);
        pw.println("  mUnrestrictedExcludeRegion=" + mUnrestrictedExcludeRegion);
        pw.println("  mPipExcludedBounds=" + mPipExcludedBounds);
        pw.println("  mNavBarOverlayExcludedBounds=" + mNavBarOverlayExcludedBounds);
        pw.println("  mEdgeWidthLeft=" + mEdgeWidthLeft);
        pw.println("  mEdgeWidthRight=" + mEdgeWidthRight);
        pw.println("  mLeftInset=" + mLeftInset);