Merge "GestureNav: Fix broken split screen navbar" into qt-dev

This commit is contained in:
TreeHugger Robot
2019-06-06 16:09:25 +00:00
committed by Android (Google) Code Review
4 changed files with 31 additions and 8 deletions

View File

@@ -1160,16 +1160,17 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
// Note: We don't need to check for IN_SCREEN or INSET_DECOR because unlike the status bar, // Note: We don't need to check for IN_SCREEN or INSET_DECOR because unlike the status bar,
// these flags wouldn't make the window draw behind the navigation bar, unless // these flags wouldn't make the window draw behind the navigation bar, unless
// LAYOUT_HIDE_NAVIGATION was set. // LAYOUT_HIDE_NAVIGATION was set.
boolean hideNavigation = (sysUiVisibility & SYSTEM_UI_FLAG_HIDE_NAVIGATION) != 0;
boolean forceConsumingNavBar = (mForceWindowDrawsBarBackgrounds boolean forceConsumingNavBar = (mForceWindowDrawsBarBackgrounds
&& (attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) == 0 && (attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) == 0
&& (sysUiVisibility & SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) == 0 && (sysUiVisibility & SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) == 0
&& (sysUiVisibility & SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0) && !hideNavigation)
|| mLastShouldAlwaysConsumeSystemBars; || (mLastShouldAlwaysConsumeSystemBars && hideNavigation);
boolean consumingNavBar = boolean consumingNavBar =
((attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0 ((attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0
&& (sysUiVisibility & SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) == 0 && (sysUiVisibility & SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) == 0
&& (sysUiVisibility & SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0) && !hideNavigation)
|| forceConsumingNavBar; || forceConsumingNavBar;
// If we didn't request fullscreen layout, but we still got it because of the // If we didn't request fullscreen layout, but we still got it because of the

View File

@@ -3280,6 +3280,7 @@
0 - Nav bar is always opaque when either the freeform stack or docked stack is visible. 0 - Nav bar is always opaque when either the freeform stack or docked stack is visible.
1 - Nav bar is always translucent when the freeform stack is visible, otherwise always 1 - Nav bar is always translucent when the freeform stack is visible, otherwise always
opaque. opaque.
2 - Nav bar is never forced opaque.
--> -->
<integer name="config_navBarOpacityMode">0</integer> <integer name="config_navBarOpacityMode">0</integer>

View File

@@ -37,6 +37,15 @@
{@link Window#setEnsuringNavigationBarContrastWhenTransparent}. --> {@link Window#setEnsuringNavigationBarContrastWhenTransparent}. -->
<bool name="config_navBarNeedsScrim">false</bool> <bool name="config_navBarNeedsScrim">false</bool>
<!-- Controls the opacity of the navigation bar depending on the visibility of the
various workspace stacks.
0 - Nav bar is always opaque when either the freeform stack or docked stack is visible.
1 - Nav bar is always translucent when the freeform stack is visible, otherwise always
opaque.
2 - Nav bar is never forced opaque.
-->
<integer name="config_navBarOpacityMode">2</integer>
<!-- Controls whether seamless rotation should be allowed even though the navbar can move <!-- Controls whether seamless rotation should be allowed even though the navbar can move
(which normally prevents seamless rotation). --> (which normally prevents seamless rotation). -->
<bool name="config_allowSeamlessRotationDespiteNavBarMoving">true</bool> <bool name="config_allowSeamlessRotationDespiteNavBarMoving">true</bool>

View File

@@ -198,6 +198,8 @@ public class DisplayPolicy {
private static final int NAV_BAR_OPAQUE_WHEN_FREEFORM_OR_DOCKED = 0; private static final int NAV_BAR_OPAQUE_WHEN_FREEFORM_OR_DOCKED = 0;
// Nav bar is always translucent when the freeform stack is visible, otherwise always opaque. // Nav bar is always translucent when the freeform stack is visible, otherwise always opaque.
private static final int NAV_BAR_TRANSLUCENT_WHEN_FREEFORM_OPAQUE_OTHERWISE = 1; private static final int NAV_BAR_TRANSLUCENT_WHEN_FREEFORM_OPAQUE_OTHERWISE = 1;
// Nav bar is never forced opaque.
private static final int NAV_BAR_FORCE_TRANSPARENT = 2;
/** /**
* These are the system UI flags that, when changing, can cause the layout * These are the system UI flags that, when changing, can cause the layout
@@ -3288,8 +3290,10 @@ public class DisplayPolicy {
: mTopFullscreenOpaqueWindowState; : mTopFullscreenOpaqueWindowState;
vis = mStatusBarController.applyTranslucentFlagLw(fullscreenTransWin, vis, oldVis); vis = mStatusBarController.applyTranslucentFlagLw(fullscreenTransWin, vis, oldVis);
vis = mNavigationBarController.applyTranslucentFlagLw(fullscreenTransWin, vis, oldVis); vis = mNavigationBarController.applyTranslucentFlagLw(fullscreenTransWin, vis, oldVis);
final int dockedVis = mStatusBarController.applyTranslucentFlagLw( int dockedVis = mStatusBarController.applyTranslucentFlagLw(
mTopDockedOpaqueWindowState, 0, 0); mTopDockedOpaqueWindowState, 0, 0);
dockedVis = mNavigationBarController.applyTranslucentFlagLw(
mTopDockedOpaqueWindowState, dockedVis, 0);
final boolean fullscreenDrawsStatusBarBackground = final boolean fullscreenDrawsStatusBarBackground =
drawsStatusBarBackground(vis, mTopFullscreenOpaqueWindowState); drawsStatusBarBackground(vis, mTopFullscreenOpaqueWindowState);
@@ -3297,6 +3301,8 @@ public class DisplayPolicy {
drawsStatusBarBackground(dockedVis, mTopDockedOpaqueWindowState); drawsStatusBarBackground(dockedVis, mTopDockedOpaqueWindowState);
final boolean fullscreenDrawsNavBarBackground = final boolean fullscreenDrawsNavBarBackground =
drawsNavigationBarBackground(vis, mTopFullscreenOpaqueWindowState); drawsNavigationBarBackground(vis, mTopFullscreenOpaqueWindowState);
final boolean dockedDrawsNavigationBarBackground =
drawsNavigationBarBackground(dockedVis, mTopDockedOpaqueWindowState);
// prevent status bar interaction from clearing certain flags // prevent status bar interaction from clearing certain flags
int type = win.getAttrs().type; int type = win.getAttrs().type;
@@ -3321,7 +3327,7 @@ public class DisplayPolicy {
} }
vis = configureNavBarOpacity(vis, dockedStackVisible, freeformStackVisible, resizing, vis = configureNavBarOpacity(vis, dockedStackVisible, freeformStackVisible, resizing,
fullscreenDrawsNavBarBackground); fullscreenDrawsNavBarBackground, dockedDrawsNavigationBarBackground);
// update status bar // update status bar
boolean immersiveSticky = boolean immersiveSticky =
@@ -3439,8 +3445,14 @@ public class DisplayPolicy {
*/ */
private int configureNavBarOpacity(int visibility, boolean dockedStackVisible, private int configureNavBarOpacity(int visibility, boolean dockedStackVisible,
boolean freeformStackVisible, boolean isDockedDividerResizing, boolean freeformStackVisible, boolean isDockedDividerResizing,
boolean fullscreenDrawsBackground) { boolean fullscreenDrawsBackground, boolean dockedDrawsNavigationBarBackground) {
if (mNavBarOpacityMode == NAV_BAR_OPAQUE_WHEN_FREEFORM_OR_DOCKED) { if (mNavBarOpacityMode == NAV_BAR_FORCE_TRANSPARENT) {
if (fullscreenDrawsBackground && dockedDrawsNavigationBarBackground) {
visibility = setNavBarTransparentFlag(visibility);
} else if (dockedStackVisible) {
visibility = setNavBarOpaqueFlag(visibility);
}
} else if (mNavBarOpacityMode == NAV_BAR_OPAQUE_WHEN_FREEFORM_OR_DOCKED) {
if (dockedStackVisible || freeformStackVisible || isDockedDividerResizing) { if (dockedStackVisible || freeformStackVisible || isDockedDividerResizing) {
visibility = setNavBarOpaqueFlag(visibility); visibility = setNavBarOpaqueFlag(visibility);
} else if (fullscreenDrawsBackground) { } else if (fullscreenDrawsBackground) {