Merge "GestureNav: Fix broken split screen navbar" into qt-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
730b22c229
@@ -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
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user