From e5638a6f75472127493422a68954aa3fd2109658 Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Fri, 25 Mar 2016 22:57:01 -0700 Subject: [PATCH] Fix nav bar consuming - Cache shouldAlwaysConsumeNavbar so it doesn't get reset when insets == null - Remove logic with frame comparison when determining whether to consume nav bar. Not sure how that ever worked. - Make sure shouldAlwaysConsumeNavBar survives when consuming insets. Bug: 27157904 Change-Id: I35f209ab27cc12240038da7efa9e79c95f70c6ce --- core/java/android/view/WindowInsets.java | 1 + core/java/com/android/internal/policy/DecorView.java | 5 +++-- .../java/com/android/server/policy/PhoneWindowManager.java | 3 +-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/core/java/android/view/WindowInsets.java b/core/java/android/view/WindowInsets.java index 929fdac82c284..750931ab661c2 100644 --- a/core/java/android/view/WindowInsets.java +++ b/core/java/android/view/WindowInsets.java @@ -91,6 +91,7 @@ public final class WindowInsets { mWindowDecorInsetsConsumed = src.mWindowDecorInsetsConsumed; mStableInsetsConsumed = src.mStableInsetsConsumed; mIsRound = src.mIsRound; + mAlwaysConsumeNavBar = src.mAlwaysConsumeNavBar; } /** @hide */ diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java index 9904893f3e5c2..4b695b93d0e92 100644 --- a/core/java/com/android/internal/policy/DecorView.java +++ b/core/java/com/android/internal/policy/DecorView.java @@ -183,6 +183,7 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind private boolean mLastHasBottomStableInset = false; private boolean mLastHasRightStableInset = false; private int mLastWindowFlags = 0; + private boolean mLastShouldAlwaysConsumeNavBar = false; private int mRootScrollY = 0; @@ -996,6 +997,7 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind boolean hasRightStableInset = insets.getStableInsetRight() != 0; disallowAnimate |= (hasRightStableInset != mLastHasRightStableInset); mLastHasRightStableInset = hasRightStableInset; + mLastShouldAlwaysConsumeNavBar = insets.shouldAlwaysConsumeNavBar(); } boolean navBarToRightEdge = isNavBarToRightEdge(mLastBottomInset, mLastRightInset); @@ -1016,12 +1018,11 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind // When we expand the window with FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, we still need // to ensure that the rest of the view hierarchy doesn't notice it, unless they've // explicitly asked for it. - boolean consumingNavBar = (attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0 && (sysUiVisibility & SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) == 0 && (sysUiVisibility & SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0 - || (insets != null && insets.shouldAlwaysConsumeNavBar()); + || mLastShouldAlwaysConsumeNavBar; // If we didn't request fullscreen layout, but we still got it because of the // mForceWindowDrawsStatusBarBackground flag, also consume top inset. diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index c1f430cd93ae4..574faa01a241a 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -6299,8 +6299,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { @Override public boolean isNavBarForcedShownLw(WindowState windowState) { - return mForceShowSystemBars - && !windowState.getFrameLw().equals(windowState.getDisplayFrameLw()); + return mForceShowSystemBars; } @Override