Loading services/core/java/com/android/server/wm/DisplayPolicy.java +19 −31 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY; import static android.content.res.Configuration.UI_MODE_TYPE_CAR; Loading Loading @@ -1416,7 +1417,7 @@ public class DisplayPolicy { /** * @return true if the system bars are forced to stay visible */ public boolean areSystemBarsForcedShownLw(WindowState windowState) { public boolean areSystemBarsForcedShownLw() { return mForceShowSystemBars; } Loading Loading @@ -2631,8 +2632,6 @@ public class DisplayPolicy { final WindowState win = winCandidate; mSystemUiControllingWindow = win; mDisplayContent.getInsetsPolicy().updateBarControlTarget(win); final boolean inSplitScreen = mService.mRoot.getDefaultTaskDisplayArea().isSplitScreenModeActivated(); if (inSplitScreen) { Loading Loading @@ -2779,19 +2778,22 @@ public class DisplayPolicy { } private int updateSystemBarsLw(WindowState win, int disableFlags) { final boolean dockedRootTaskVisible = mDisplayContent.getDefaultTaskDisplayArea() .isRootTaskVisible(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); final boolean resizing = mDisplayContent.getDockedDividerController().isResizing(); // We need to force system bars when the docked root task is visible, when the freeform // root task is focused but also when we are resizing for the transitions when docked // root task visibility changes. mForceShowSystemBars = dockedRootTaskVisible || win.inFreeformWindowingMode() || resizing; final TaskDisplayArea defaultTaskDisplayArea = mDisplayContent.getDefaultTaskDisplayArea(); final boolean multiWindowTaskVisible = defaultTaskDisplayArea.isRootTaskVisible(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) || defaultTaskDisplayArea.isRootTaskVisible(WINDOWING_MODE_MULTI_WINDOW); final boolean freeformRootTaskVisible = defaultTaskDisplayArea.isRootTaskVisible(WINDOWING_MODE_FREEFORM); // We need to force showing system bars when the multi-window or freeform root task is // visible. mForceShowSystemBars = multiWindowTaskVisible || freeformRootTaskVisible; mDisplayContent.getInsetsPolicy().updateBarControlTarget(win); int appearance = APPEARANCE_OPAQUE_NAVIGATION_BARS | APPEARANCE_OPAQUE_STATUS_BARS; appearance = configureStatusBarOpacity(appearance); appearance = configureNavBarOpacity(appearance, dockedRootTaskVisible, resizing); appearance = configureNavBarOpacity(appearance, multiWindowTaskVisible, freeformRootTaskVisible); final boolean requestHideNavBar = !win.getRequestedVisibility(ITYPE_NAVIGATION_BAR); final long now = SystemClock.uptimeMillis(); Loading Loading @@ -2910,10 +2912,8 @@ public class DisplayPolicy { * @return the current visibility flags with the nav-bar opacity related flags toggled based * on the nav bar opacity rules chosen by {@link #mNavBarOpacityMode}. */ private int configureNavBarOpacity(int appearance, boolean dockedRootTaskVisible, boolean isDockedDividerResizing) { final boolean freeformRootTaskVisible = mDisplayContent.getDefaultTaskDisplayArea() .isRootTaskVisible(WINDOWING_MODE_FREEFORM); private int configureNavBarOpacity(int appearance, boolean multiWindowTaskVisible, boolean freeformRootTaskVisible) { final boolean fullscreenDrawsBackground = drawsBarBackground(mTopFullscreenOpaqueWindowState); final boolean dockedDrawsBackground = Loading @@ -2922,26 +2922,18 @@ public class DisplayPolicy { if (mNavBarOpacityMode == NAV_BAR_FORCE_TRANSPARENT) { if (fullscreenDrawsBackground && dockedDrawsBackground) { appearance = clearNavBarOpaqueFlag(appearance); } else if (dockedRootTaskVisible) { appearance = setNavBarOpaqueFlag(appearance); } } else if (mNavBarOpacityMode == NAV_BAR_OPAQUE_WHEN_FREEFORM_OR_DOCKED) { if (dockedRootTaskVisible || freeformRootTaskVisible || isDockedDividerResizing) { if (multiWindowTaskVisible || freeformRootTaskVisible) { if (mIsFreeformWindowOverlappingWithNavBar) { appearance = clearNavBarOpaqueFlag(appearance); } else { appearance = setNavBarOpaqueFlag(appearance); } } else if (fullscreenDrawsBackground) { appearance = clearNavBarOpaqueFlag(appearance); } } else if (mNavBarOpacityMode == NAV_BAR_TRANSLUCENT_WHEN_FREEFORM_OPAQUE_OTHERWISE) { if (isDockedDividerResizing) { appearance = setNavBarOpaqueFlag(appearance); } else if (freeformRootTaskVisible) { if (freeformRootTaskVisible) { appearance = clearNavBarOpaqueFlag(appearance); } else { appearance = setNavBarOpaqueFlag(appearance); } } Loading @@ -2953,10 +2945,6 @@ public class DisplayPolicy { return appearance; } private int setNavBarOpaqueFlag(int appearance) { return appearance | APPEARANCE_OPAQUE_NAVIGATION_BARS; } private int clearNavBarOpaqueFlag(int appearance) { return appearance & ~APPEARANCE_OPAQUE_NAVIGATION_BARS; } Loading services/core/java/com/android/server/wm/InsetsPolicy.java +10 −32 Original line number Diff line number Diff line Loading @@ -18,8 +18,6 @@ package com.android.server.wm; import static android.app.StatusBarManager.WINDOW_STATE_HIDDEN; import static android.app.StatusBarManager.WINDOW_STATE_SHOWING; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; import static android.view.InsetsController.ANIMATION_TYPE_HIDE; import static android.view.InsetsController.ANIMATION_TYPE_SHOW; import static android.view.InsetsController.LAYOUT_INSETS_DURING_ANIMATION_HIDDEN; Loading Loading @@ -136,11 +134,8 @@ class InsetsPolicy { abortTransient(); } mFocusedWin = focusedWin; boolean forceShowsSystemBarsForWindowingMode = forceShowsSystemBarsForWindowingMode(); InsetsControlTarget statusControlTarget = getStatusControlTarget(focusedWin, forceShowsSystemBarsForWindowingMode); InsetsControlTarget navControlTarget = getNavControlTarget(focusedWin, forceShowsSystemBarsForWindowingMode); InsetsControlTarget statusControlTarget = getStatusControlTarget(focusedWin); InsetsControlTarget navControlTarget = getNavControlTarget(focusedWin); mStateController.onBarControlTargetChanged(statusControlTarget, getFakeControlTarget(focusedWin, statusControlTarget), navControlTarget, Loading Loading @@ -314,8 +309,7 @@ class InsetsPolicy { return realControlTarget == mDummyControlTarget ? focused : null; } private @Nullable InsetsControlTarget getStatusControlTarget(@Nullable WindowState focusedWin, boolean forceShowsSystemBarsForWindowingMode) { private @Nullable InsetsControlTarget getStatusControlTarget(@Nullable WindowState focusedWin) { if (mShowingTransientTypes.indexOf(ITYPE_STATUS_BAR) != -1) { return mDummyControlTarget; } Loading @@ -329,10 +323,9 @@ class InsetsPolicy { focusedWin.mAttrs.packageName); return mDisplayContent.mRemoteInsetsControlTarget; } if (forceShowsSystemBarsForWindowingMode) { // Status bar is forcibly shown for the windowing mode which is a steady state. // We don't want the client to control the status bar, and we will dispatch the real // visibility of status bar to the client. if (mPolicy.areSystemBarsForcedShownLw()) { // Status bar is forcibly shown. We don't want the client to control the status bar, and // we will dispatch the real visibility of status bar to the client. return null; } if (forceShowsStatusBarTransiently()) { Loading Loading @@ -360,8 +353,7 @@ class InsetsPolicy { && !win.inMultiWindowMode(); } private @Nullable InsetsControlTarget getNavControlTarget(@Nullable WindowState focusedWin, boolean forceShowsSystemBarsForWindowingMode) { private @Nullable InsetsControlTarget getNavControlTarget(@Nullable WindowState focusedWin) { final WindowState imeWin = mDisplayContent.mInputMethodWindow; if (imeWin != null && imeWin.isVisible()) { // Force showing navigation bar while IME is visible. Loading @@ -379,10 +371,9 @@ class InsetsPolicy { focusedWin.mAttrs.packageName); return mDisplayContent.mRemoteInsetsControlTarget; } if (forceShowsSystemBarsForWindowingMode) { // Navigation bar is forcibly shown for the windowing mode which is a steady state. // We don't want the client to control the navigation bar, and we will dispatch the real // visibility of navigation bar to the client. if (mPolicy.areSystemBarsForcedShownLw()) { // Navigation bar is forcibly shown. We don't want the client to control the navigation // bar, and we will dispatch the real visibility of navigation bar to the client. return null; } if (forceShowsNavigationBarTransiently()) { Loading Loading @@ -427,19 +418,6 @@ class InsetsPolicy { && (win.mAttrs.privateFlags & PRIVATE_FLAG_STATUS_FORCE_SHOW_NAVIGATION) != 0; } private boolean forceShowsSystemBarsForWindowingMode() { final boolean isDockedRootTaskVisible = mDisplayContent.getDefaultTaskDisplayArea() .isRootTaskVisible(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); final boolean isFreeformRootTaskVisible = mDisplayContent.getDefaultTaskDisplayArea() .isRootTaskVisible(WINDOWING_MODE_FREEFORM); final boolean isResizing = mDisplayContent.getDockedDividerController().isResizing(); // We need to force system bars when the docked root task is visible, when the freeform // root task is visible but also when we are resizing for the transitions when docked // root task visibility changes. return isDockedRootTaskVisible || isFreeformRootTaskVisible || isResizing; } @VisibleForTesting void startAnimation(boolean show, Runnable callback) { int typesReady = 0; Loading services/core/java/com/android/server/wm/WindowManagerService.java +1 −1 Original line number Diff line number Diff line Loading @@ -2483,7 +2483,7 @@ public class WindowManagerService extends IWindowManager.Stub if (win.mActivityRecord != null) { win.mActivityRecord.updateReportedVisibilityLocked(); } if (displayPolicy.areSystemBarsForcedShownLw(win)) { if (displayPolicy.areSystemBarsForcedShownLw()) { result |= WindowManagerGlobal.RELAYOUT_RES_CONSUME_ALWAYS_SYSTEM_BARS; } if (!win.isGoneForLayout()) { Loading services/core/java/com/android/server/wm/WindowState.java +1 −1 Original line number Diff line number Diff line Loading @@ -3893,7 +3893,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP final boolean forceRelayout = syncRedraw || reportOrientation || isDragResizeChanged(); final DisplayContent displayContent = getDisplayContent(); final boolean alwaysConsumeSystemBars = displayContent.getDisplayPolicy().areSystemBarsForcedShownLw(this); displayContent.getDisplayPolicy().areSystemBarsForcedShownLw(); final int displayId = displayContent.getDisplayId(); markRedrawForSyncReported(); Loading services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java +9 −7 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.wm; import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; import static android.view.InsetsState.ITYPE_NAVIGATION_BAR; import static android.view.InsetsState.ITYPE_STATUS_BAR; Loading Loading @@ -80,7 +81,7 @@ public class InsetsPolicyTest extends WindowTestsBase { } @Test public void testControlsForDispatch_dockedStackVisible() { public void testControlsForDispatch_dockedTaskVisible() { addWindow(TYPE_STATUS_BAR, "statusBar"); addWindow(TYPE_NAVIGATION_BAR, "navBar"); Loading @@ -93,25 +94,26 @@ public class InsetsPolicyTest extends WindowTestsBase { } @Test public void testControlsForDispatch_freeformStackVisible() { public void testControlsForDispatch_multiWindowTaskVisible() { addWindow(TYPE_STATUS_BAR, "statusBar"); addWindow(TYPE_NAVIGATION_BAR, "navBar"); final WindowState win = createWindow(null, WINDOWING_MODE_FREEFORM, final WindowState win = createWindow(null, WINDOWING_MODE_MULTI_WINDOW, ACTIVITY_TYPE_STANDARD, TYPE_APPLICATION, mDisplayContent, "app"); final InsetsSourceControl[] controls = addWindowAndGetControlsForDispatch(win); // The app must not control any bars. // The app must not control any system bars. assertNull(controls); } @Test public void testControlsForDispatch_dockedDividerControllerResizing() { public void testControlsForDispatch_freeformTaskVisible() { addWindow(TYPE_STATUS_BAR, "statusBar"); addWindow(TYPE_NAVIGATION_BAR, "navBar"); mDisplayContent.getDockedDividerController().setResizing(true); final InsetsSourceControl[] controls = addAppWindowAndGetControlsForDispatch(); final WindowState win = createWindow(null, WINDOWING_MODE_FREEFORM, ACTIVITY_TYPE_STANDARD, TYPE_APPLICATION, mDisplayContent, "app"); final InsetsSourceControl[] controls = addWindowAndGetControlsForDispatch(win); // The app must not control any system bars. assertNull(controls); Loading Loading
services/core/java/com/android/server/wm/DisplayPolicy.java +19 −31 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY; import static android.content.res.Configuration.UI_MODE_TYPE_CAR; Loading Loading @@ -1416,7 +1417,7 @@ public class DisplayPolicy { /** * @return true if the system bars are forced to stay visible */ public boolean areSystemBarsForcedShownLw(WindowState windowState) { public boolean areSystemBarsForcedShownLw() { return mForceShowSystemBars; } Loading Loading @@ -2631,8 +2632,6 @@ public class DisplayPolicy { final WindowState win = winCandidate; mSystemUiControllingWindow = win; mDisplayContent.getInsetsPolicy().updateBarControlTarget(win); final boolean inSplitScreen = mService.mRoot.getDefaultTaskDisplayArea().isSplitScreenModeActivated(); if (inSplitScreen) { Loading Loading @@ -2779,19 +2778,22 @@ public class DisplayPolicy { } private int updateSystemBarsLw(WindowState win, int disableFlags) { final boolean dockedRootTaskVisible = mDisplayContent.getDefaultTaskDisplayArea() .isRootTaskVisible(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); final boolean resizing = mDisplayContent.getDockedDividerController().isResizing(); // We need to force system bars when the docked root task is visible, when the freeform // root task is focused but also when we are resizing for the transitions when docked // root task visibility changes. mForceShowSystemBars = dockedRootTaskVisible || win.inFreeformWindowingMode() || resizing; final TaskDisplayArea defaultTaskDisplayArea = mDisplayContent.getDefaultTaskDisplayArea(); final boolean multiWindowTaskVisible = defaultTaskDisplayArea.isRootTaskVisible(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) || defaultTaskDisplayArea.isRootTaskVisible(WINDOWING_MODE_MULTI_WINDOW); final boolean freeformRootTaskVisible = defaultTaskDisplayArea.isRootTaskVisible(WINDOWING_MODE_FREEFORM); // We need to force showing system bars when the multi-window or freeform root task is // visible. mForceShowSystemBars = multiWindowTaskVisible || freeformRootTaskVisible; mDisplayContent.getInsetsPolicy().updateBarControlTarget(win); int appearance = APPEARANCE_OPAQUE_NAVIGATION_BARS | APPEARANCE_OPAQUE_STATUS_BARS; appearance = configureStatusBarOpacity(appearance); appearance = configureNavBarOpacity(appearance, dockedRootTaskVisible, resizing); appearance = configureNavBarOpacity(appearance, multiWindowTaskVisible, freeformRootTaskVisible); final boolean requestHideNavBar = !win.getRequestedVisibility(ITYPE_NAVIGATION_BAR); final long now = SystemClock.uptimeMillis(); Loading Loading @@ -2910,10 +2912,8 @@ public class DisplayPolicy { * @return the current visibility flags with the nav-bar opacity related flags toggled based * on the nav bar opacity rules chosen by {@link #mNavBarOpacityMode}. */ private int configureNavBarOpacity(int appearance, boolean dockedRootTaskVisible, boolean isDockedDividerResizing) { final boolean freeformRootTaskVisible = mDisplayContent.getDefaultTaskDisplayArea() .isRootTaskVisible(WINDOWING_MODE_FREEFORM); private int configureNavBarOpacity(int appearance, boolean multiWindowTaskVisible, boolean freeformRootTaskVisible) { final boolean fullscreenDrawsBackground = drawsBarBackground(mTopFullscreenOpaqueWindowState); final boolean dockedDrawsBackground = Loading @@ -2922,26 +2922,18 @@ public class DisplayPolicy { if (mNavBarOpacityMode == NAV_BAR_FORCE_TRANSPARENT) { if (fullscreenDrawsBackground && dockedDrawsBackground) { appearance = clearNavBarOpaqueFlag(appearance); } else if (dockedRootTaskVisible) { appearance = setNavBarOpaqueFlag(appearance); } } else if (mNavBarOpacityMode == NAV_BAR_OPAQUE_WHEN_FREEFORM_OR_DOCKED) { if (dockedRootTaskVisible || freeformRootTaskVisible || isDockedDividerResizing) { if (multiWindowTaskVisible || freeformRootTaskVisible) { if (mIsFreeformWindowOverlappingWithNavBar) { appearance = clearNavBarOpaqueFlag(appearance); } else { appearance = setNavBarOpaqueFlag(appearance); } } else if (fullscreenDrawsBackground) { appearance = clearNavBarOpaqueFlag(appearance); } } else if (mNavBarOpacityMode == NAV_BAR_TRANSLUCENT_WHEN_FREEFORM_OPAQUE_OTHERWISE) { if (isDockedDividerResizing) { appearance = setNavBarOpaqueFlag(appearance); } else if (freeformRootTaskVisible) { if (freeformRootTaskVisible) { appearance = clearNavBarOpaqueFlag(appearance); } else { appearance = setNavBarOpaqueFlag(appearance); } } Loading @@ -2953,10 +2945,6 @@ public class DisplayPolicy { return appearance; } private int setNavBarOpaqueFlag(int appearance) { return appearance | APPEARANCE_OPAQUE_NAVIGATION_BARS; } private int clearNavBarOpaqueFlag(int appearance) { return appearance & ~APPEARANCE_OPAQUE_NAVIGATION_BARS; } Loading
services/core/java/com/android/server/wm/InsetsPolicy.java +10 −32 Original line number Diff line number Diff line Loading @@ -18,8 +18,6 @@ package com.android.server.wm; import static android.app.StatusBarManager.WINDOW_STATE_HIDDEN; import static android.app.StatusBarManager.WINDOW_STATE_SHOWING; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; import static android.view.InsetsController.ANIMATION_TYPE_HIDE; import static android.view.InsetsController.ANIMATION_TYPE_SHOW; import static android.view.InsetsController.LAYOUT_INSETS_DURING_ANIMATION_HIDDEN; Loading Loading @@ -136,11 +134,8 @@ class InsetsPolicy { abortTransient(); } mFocusedWin = focusedWin; boolean forceShowsSystemBarsForWindowingMode = forceShowsSystemBarsForWindowingMode(); InsetsControlTarget statusControlTarget = getStatusControlTarget(focusedWin, forceShowsSystemBarsForWindowingMode); InsetsControlTarget navControlTarget = getNavControlTarget(focusedWin, forceShowsSystemBarsForWindowingMode); InsetsControlTarget statusControlTarget = getStatusControlTarget(focusedWin); InsetsControlTarget navControlTarget = getNavControlTarget(focusedWin); mStateController.onBarControlTargetChanged(statusControlTarget, getFakeControlTarget(focusedWin, statusControlTarget), navControlTarget, Loading Loading @@ -314,8 +309,7 @@ class InsetsPolicy { return realControlTarget == mDummyControlTarget ? focused : null; } private @Nullable InsetsControlTarget getStatusControlTarget(@Nullable WindowState focusedWin, boolean forceShowsSystemBarsForWindowingMode) { private @Nullable InsetsControlTarget getStatusControlTarget(@Nullable WindowState focusedWin) { if (mShowingTransientTypes.indexOf(ITYPE_STATUS_BAR) != -1) { return mDummyControlTarget; } Loading @@ -329,10 +323,9 @@ class InsetsPolicy { focusedWin.mAttrs.packageName); return mDisplayContent.mRemoteInsetsControlTarget; } if (forceShowsSystemBarsForWindowingMode) { // Status bar is forcibly shown for the windowing mode which is a steady state. // We don't want the client to control the status bar, and we will dispatch the real // visibility of status bar to the client. if (mPolicy.areSystemBarsForcedShownLw()) { // Status bar is forcibly shown. We don't want the client to control the status bar, and // we will dispatch the real visibility of status bar to the client. return null; } if (forceShowsStatusBarTransiently()) { Loading Loading @@ -360,8 +353,7 @@ class InsetsPolicy { && !win.inMultiWindowMode(); } private @Nullable InsetsControlTarget getNavControlTarget(@Nullable WindowState focusedWin, boolean forceShowsSystemBarsForWindowingMode) { private @Nullable InsetsControlTarget getNavControlTarget(@Nullable WindowState focusedWin) { final WindowState imeWin = mDisplayContent.mInputMethodWindow; if (imeWin != null && imeWin.isVisible()) { // Force showing navigation bar while IME is visible. Loading @@ -379,10 +371,9 @@ class InsetsPolicy { focusedWin.mAttrs.packageName); return mDisplayContent.mRemoteInsetsControlTarget; } if (forceShowsSystemBarsForWindowingMode) { // Navigation bar is forcibly shown for the windowing mode which is a steady state. // We don't want the client to control the navigation bar, and we will dispatch the real // visibility of navigation bar to the client. if (mPolicy.areSystemBarsForcedShownLw()) { // Navigation bar is forcibly shown. We don't want the client to control the navigation // bar, and we will dispatch the real visibility of navigation bar to the client. return null; } if (forceShowsNavigationBarTransiently()) { Loading Loading @@ -427,19 +418,6 @@ class InsetsPolicy { && (win.mAttrs.privateFlags & PRIVATE_FLAG_STATUS_FORCE_SHOW_NAVIGATION) != 0; } private boolean forceShowsSystemBarsForWindowingMode() { final boolean isDockedRootTaskVisible = mDisplayContent.getDefaultTaskDisplayArea() .isRootTaskVisible(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); final boolean isFreeformRootTaskVisible = mDisplayContent.getDefaultTaskDisplayArea() .isRootTaskVisible(WINDOWING_MODE_FREEFORM); final boolean isResizing = mDisplayContent.getDockedDividerController().isResizing(); // We need to force system bars when the docked root task is visible, when the freeform // root task is visible but also when we are resizing for the transitions when docked // root task visibility changes. return isDockedRootTaskVisible || isFreeformRootTaskVisible || isResizing; } @VisibleForTesting void startAnimation(boolean show, Runnable callback) { int typesReady = 0; Loading
services/core/java/com/android/server/wm/WindowManagerService.java +1 −1 Original line number Diff line number Diff line Loading @@ -2483,7 +2483,7 @@ public class WindowManagerService extends IWindowManager.Stub if (win.mActivityRecord != null) { win.mActivityRecord.updateReportedVisibilityLocked(); } if (displayPolicy.areSystemBarsForcedShownLw(win)) { if (displayPolicy.areSystemBarsForcedShownLw()) { result |= WindowManagerGlobal.RELAYOUT_RES_CONSUME_ALWAYS_SYSTEM_BARS; } if (!win.isGoneForLayout()) { Loading
services/core/java/com/android/server/wm/WindowState.java +1 −1 Original line number Diff line number Diff line Loading @@ -3893,7 +3893,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP final boolean forceRelayout = syncRedraw || reportOrientation || isDragResizeChanged(); final DisplayContent displayContent = getDisplayContent(); final boolean alwaysConsumeSystemBars = displayContent.getDisplayPolicy().areSystemBarsForcedShownLw(this); displayContent.getDisplayPolicy().areSystemBarsForcedShownLw(); final int displayId = displayContent.getDisplayId(); markRedrawForSyncReported(); Loading
services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java +9 −7 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.wm; import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; import static android.view.InsetsState.ITYPE_NAVIGATION_BAR; import static android.view.InsetsState.ITYPE_STATUS_BAR; Loading Loading @@ -80,7 +81,7 @@ public class InsetsPolicyTest extends WindowTestsBase { } @Test public void testControlsForDispatch_dockedStackVisible() { public void testControlsForDispatch_dockedTaskVisible() { addWindow(TYPE_STATUS_BAR, "statusBar"); addWindow(TYPE_NAVIGATION_BAR, "navBar"); Loading @@ -93,25 +94,26 @@ public class InsetsPolicyTest extends WindowTestsBase { } @Test public void testControlsForDispatch_freeformStackVisible() { public void testControlsForDispatch_multiWindowTaskVisible() { addWindow(TYPE_STATUS_BAR, "statusBar"); addWindow(TYPE_NAVIGATION_BAR, "navBar"); final WindowState win = createWindow(null, WINDOWING_MODE_FREEFORM, final WindowState win = createWindow(null, WINDOWING_MODE_MULTI_WINDOW, ACTIVITY_TYPE_STANDARD, TYPE_APPLICATION, mDisplayContent, "app"); final InsetsSourceControl[] controls = addWindowAndGetControlsForDispatch(win); // The app must not control any bars. // The app must not control any system bars. assertNull(controls); } @Test public void testControlsForDispatch_dockedDividerControllerResizing() { public void testControlsForDispatch_freeformTaskVisible() { addWindow(TYPE_STATUS_BAR, "statusBar"); addWindow(TYPE_NAVIGATION_BAR, "navBar"); mDisplayContent.getDockedDividerController().setResizing(true); final InsetsSourceControl[] controls = addAppWindowAndGetControlsForDispatch(); final WindowState win = createWindow(null, WINDOWING_MODE_FREEFORM, ACTIVITY_TYPE_STANDARD, TYPE_APPLICATION, mDisplayContent, "app"); final InsetsSourceControl[] controls = addWindowAndGetControlsForDispatch(win); // The app must not control any system bars. assertNull(controls); Loading