From 1113e624758b5950ce1b5a1e097a7b3438dddf72 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Mon, 17 May 2021 21:56:47 -0700 Subject: 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 --- .../navigationbar/NavigationBarOverlayController.java | 4 +++- .../com/android/systemui/navigationbar/NavigationBarView.java | 10 ++++++---- .../navigationbar/gestural/EdgeBackGestureHandler.java | 11 +++++++++-- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarOverlayController.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarOverlayController.java index 40f908b0c62f..9f2fb50c0214 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarOverlayController.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarOverlayController.java @@ -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 visibilityChangeCallback) {} + public void init(Consumer visibilityChangeCallback, + Consumer excludeBackRegionCallback) {} /** * Set whether the view can be shown. diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java index fcbd59659ae4..7af4853dd3f2 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java @@ -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) { diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java index fc615deb1db6..be513f3aead0 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java @@ -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); -- cgit v1.2.3-59-g8ed1b