diff options
| author | 2019-10-09 18:12:52 -0700 | |
|---|---|---|
| committer | 2019-10-09 18:12:52 -0700 | |
| commit | 7a2e7100ac1d4bc1277895d73064646d406af137 (patch) | |
| tree | 61d690770769d8a12721b2514ef8c059ecddcf54 | |
| parent | 0b2114ea827da92db3cc27c1fb95ceea0ffcd49d (diff) | |
| parent | 645feb581dd27e5fdbe38b39d224983648992e7e (diff) | |
Merge "Always allow back gesture when there are transient bars showing" am: 52e7eaf708 am: cbc1f5ca15 am: 6c3d98283c
am: 645feb581d
Change-Id: Ic89cadac071bf53d5acc844546d1e35420b15b4f
3 files changed, 24 insertions, 0 deletions
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 4cd3ad27ab34..ca7c227f42b7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java @@ -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.res.Resources; @@ -131,6 +133,7 @@ public class EdgeBackGestureHandler implements DisplayListener { private boolean mIsAttached; private boolean mIsGesturalModeEnabled; private boolean mIsEnabled; + private boolean mIsInTransientImmersiveStickyState; private InputMonitor mInputMonitor; private InputEventReceiver mInputEventReceiver; @@ -195,6 +198,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(); @@ -296,13 +305,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, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java index 6e61d7ceaf6c..38dc5ea4dcd5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java @@ -560,6 +560,9 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback } mAutoHideController.touchAutoHide(); } + if (mNavigationBarView != null) { + mNavigationBarView.onSystemUiVisibilityChanged(mSystemUiVisibility); + } } mLightBarController.onNavigationVisibilityChanged( vis, mask, nbModeChanged, mNavigationBarMode, navbarColorManagedByIme); 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 2aae5b1b9139..9804f9ff4698 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java @@ -366,6 +366,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 |