Merge "Always allow back gesture when there are transient bars showing" am: 52e7eaf708 am: cbc1f5ca15

am: 6c3d98283c

Change-Id: I1bff99974a3b7c7494ead90065ee4a1c41d060b6
This commit is contained in:
Winson Chung
2019-10-09 18:00:39 -07:00
committed by android-build-merger
3 changed files with 24 additions and 0 deletions

View File

@@ -16,6 +16,8 @@
package com.android.systemui.statusbar.phone; package com.android.systemui.statusbar.phone;
import static android.view.Display.INVALID_DISPLAY; 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.Context;
import android.content.pm.ParceledListSlice; import android.content.pm.ParceledListSlice;
@@ -154,6 +156,7 @@ public class EdgeBackGestureHandler implements DisplayListener {
private boolean mIsAttached; private boolean mIsAttached;
private boolean mIsGesturalModeEnabled; private boolean mIsGesturalModeEnabled;
private boolean mIsEnabled; private boolean mIsEnabled;
private boolean mIsInTransientImmersiveStickyState;
private InputMonitor mInputMonitor; private InputMonitor mInputMonitor;
private InputEventReceiver mInputEventReceiver; private InputEventReceiver mInputEventReceiver;
@@ -215,6 +218,12 @@ public class EdgeBackGestureHandler implements DisplayListener {
updateCurrentUserResources(currentUserContext.getResources()); updateCurrentUserResources(currentUserContext.getResources());
} }
public void onSystemUiVisibilityChanged(int systemUiVisibility) {
mIsInTransientImmersiveStickyState =
(systemUiVisibility & SYSTEM_UI_FLAG_IMMERSIVE_STICKY) != 0
&& (systemUiVisibility & NAVIGATION_BAR_TRANSIENT) != 0;
}
private void disposeInputChannel() { private void disposeInputChannel() {
if (mInputEventReceiver != null) { if (mInputEventReceiver != null) {
mInputEventReceiver.dispose(); mInputEventReceiver.dispose();
@@ -315,13 +324,21 @@ public class EdgeBackGestureHandler implements DisplayListener {
} }
private boolean isWithinTouchRegion(int x, int y) { private boolean isWithinTouchRegion(int x, int y) {
// Disallow if over the IME
if (y > (mDisplaySize.y - Math.max(mImeHeight, mNavBarHeight))) { if (y > (mDisplaySize.y - Math.max(mImeHeight, mNavBarHeight))) {
return false; return false;
} }
// Disallow if too far from the edge
if (x > mEdgeWidth + mLeftInset && x < (mDisplaySize.x - mEdgeWidth - mRightInset)) { if (x > mEdgeWidth + mLeftInset && x < (mDisplaySize.x - mEdgeWidth - mRightInset)) {
return false; return false;
} }
// Always allow if the user is in a transient sticky immersive state
if (mIsInTransientImmersiveStickyState) {
return true;
}
boolean isInExcludedRegion = mExcludeRegion.contains(x, y); boolean isInExcludedRegion = mExcludeRegion.contains(x, y);
if (isInExcludedRegion) { if (isInExcludedRegion) {
mOverviewProxyService.notifyBackAction(false /* completed */, -1, -1, mOverviewProxyService.notifyBackAction(false /* completed */, -1, -1,

View File

@@ -539,6 +539,9 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
} }
mAutoHideController.touchAutoHide(); mAutoHideController.touchAutoHide();
} }
if (mNavigationBarView != null) {
mNavigationBarView.onSystemUiVisibilityChanged(mSystemUiVisibility);
}
} }
mLightBarController.onNavigationVisibilityChanged( mLightBarController.onNavigationVisibilityChanged(
vis, mask, nbModeChanged, mNavigationBarMode, navbarColorManagedByIme); vis, mask, nbModeChanged, mNavigationBarMode, navbarColorManagedByIme);

View File

@@ -349,6 +349,10 @@ public class NavigationBarView extends FrameLayout implements
return super.onTouchEvent(event); return super.onTouchEvent(event);
} }
void onSystemUiVisibilityChanged(int systemUiVisibility) {
mEdgeBackGestureHandler.onSystemUiVisibilityChanged(systemUiVisibility);
}
void onBarTransition(int newMode) { void onBarTransition(int newMode) {
if (newMode == MODE_OPAQUE) { if (newMode == MODE_OPAQUE) {
// If the nav bar background is opaque, stop auto tinting since we know the icons are // If the nav bar background is opaque, stop auto tinting since we know the icons are