diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java index 05a86fa9d7ea4..38ff468304b7c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java @@ -152,6 +152,8 @@ public class EdgeBackGestureHandler implements DisplayListener { private WindowManager.LayoutParams mEdgePanelLp; private final Rect mSamplingRect = new Rect(); private RegionSamplingHelper mRegionSamplingHelper; + private int mLeftInset; + private int mRightInset; public EdgeBackGestureHandler(Context context, OverviewProxyService overviewProxyService) { final Resources res = context.getResources(); @@ -299,7 +301,7 @@ public class EdgeBackGestureHandler implements DisplayListener { return false; } - if (x > mEdgeWidth && x < (mDisplaySize.x - mEdgeWidth)) { + if (x > mEdgeWidth + mLeftInset && x < (mDisplaySize.x - mEdgeWidth - mRightInset)) { return false; } boolean isInExcludedRegion = mExcludeRegion.contains(x, y); @@ -325,7 +327,7 @@ public class EdgeBackGestureHandler implements DisplayListener { // Verify if this is in within the touch region and we aren't in immersive mode, and // either the bouncer is showing or the notification panel is hidden int stateFlags = mOverviewProxyService.getSystemUiStateFlags(); - mIsOnLeftEdge = ev.getX() <= mEdgeWidth; + mIsOnLeftEdge = ev.getX() <= mEdgeWidth + mLeftInset; mAllowGesture = !QuickStepContract.isBackGestureDisabled(stateFlags) && isWithinTouchRegion((int) ev.getX(), (int) ev.getY()); if (mAllowGesture) { @@ -400,7 +402,7 @@ public class EdgeBackGestureHandler implements DisplayListener { private void updateSamplingRect() { int top = mEdgePanelLp.y; - int left = mIsOnLeftEdge ? 0 : mDisplaySize.x - mEdgePanelLp.width; + int left = mIsOnLeftEdge ? mLeftInset : mDisplaySize.x - mRightInset - mEdgePanelLp.width; int right = left + mEdgePanelLp.width; int bottom = top + mEdgePanelLp.height; mSamplingRect.set(left, top, right, bottom); @@ -442,6 +444,11 @@ public class EdgeBackGestureHandler implements DisplayListener { InputManager.getInstance().injectInputEvent(ev, InputManager.INJECT_INPUT_EVENT_MODE_ASYNC); } + public void setInsets(int leftInset, int rightInset) { + mLeftInset = leftInset; + mRightInset = rightInset; + } + class SysUiInputEventReceiver extends InputEventReceiver { SysUiInputEventReceiver(InputChannel channel, Looper looper) { super(channel, looper); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java index 3ec16090ea871..2ccc2b8a9c437 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java @@ -1095,8 +1095,13 @@ public class NavigationBarView extends FrameLayout implements @Override public WindowInsets onApplyWindowInsets(WindowInsets insets) { - setPadding(insets.getSystemWindowInsetLeft(), insets.getSystemWindowInsetTop(), - insets.getSystemWindowInsetRight(), insets.getSystemWindowInsetBottom()); + int leftInset = insets.getSystemWindowInsetLeft(); + int rightInset = insets.getSystemWindowInsetRight(); + setPadding(leftInset, insets.getSystemWindowInsetTop(), rightInset, + insets.getSystemWindowInsetBottom()); + // we're passing the insets onto the gesture handler since the back arrow is only + // conditionally added and doesn't always get all the insets. + mEdgeBackGestureHandler.setInsets(leftInset, rightInset); return super.onApplyWindowInsets(insets); }