Loading core/java/android/view/ViewRootImpl.java +1 −1 Original line number Diff line number Diff line Loading @@ -1141,7 +1141,7 @@ public final class ViewRootImpl implements ViewParent, final Rect displayCutoutSafe = mTempRect; state.getDisplayCutoutSafe(displayCutoutSafe); final WindowConfiguration winConfig = getConfiguration().windowConfiguration; mWindowLayout.computeWindowFrames(mWindowAttributes, state, mWindowLayout.computeFrames(mWindowAttributes, state, displayCutoutSafe, winConfig.getBounds(), winConfig.getWindowingMode(), UNSPECIFIED_LENGTH, UNSPECIFIED_LENGTH, mInsetsController.getRequestedVisibilities(), Loading core/java/android/view/WindowLayout.java +1 −1 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ public class WindowLayout { private final Rect mTempDisplayCutoutSafeExceptMaybeBarsRect = new Rect(); private final Rect mTempRect = new Rect(); public boolean computeWindowFrames(WindowManager.LayoutParams attrs, InsetsState state, public boolean computeFrames(WindowManager.LayoutParams attrs, InsetsState state, Rect displayCutoutSafe, Rect windowBounds, @WindowingMode int windowingMode, int requestedWidth, int requestedHeight, InsetsVisibilities requestedVisibilities, Rect attachedWindowFrame, float compatScale, Rect outDisplayFrame, Rect outParentFrame, Loading services/core/java/com/android/server/wm/DisplayPolicy.java +2 −2 Original line number Diff line number Diff line Loading @@ -1447,7 +1447,7 @@ public class DisplayPolicy { final InsetsStateController controller = mDisplayContent.getInsetsStateController(); for (int i = mInsetsSourceWindowsExceptIme.size() - 1; i >= 0; i--) { final WindowState win = mInsetsSourceWindowsExceptIme.valueAt(i); mWindowLayout.computeWindowFrames(win.getLayoutingAttrs(displayFrames.mRotation), mWindowLayout.computeFrames(win.getLayoutingAttrs(displayFrames.mRotation), displayFrames.mInsetsState, displayFrames.mDisplayCutoutSafe, displayFrames.mUnrestricted, win.getWindowingMode(), UNSPECIFIED_LENGTH, UNSPECIFIED_LENGTH, win.getRequestedVisibilities(), Loading Loading @@ -1496,7 +1496,7 @@ public class DisplayPolicy { sTmpLastParentFrame.set(pf); final boolean clippedByDisplayCutout = mWindowLayout.computeWindowFrames(attrs, final boolean clippedByDisplayCutout = mWindowLayout.computeFrames(attrs, win.getInsetsState(), displayFrames.mDisplayCutoutSafe, win.getBounds(), win.getWindowingMode(), requestedWidth, requestedHeight, win.getRequestedVisibilities(), attachedWindowFrame, win.mGlobalScale, Loading services/tests/wmtests/src/com/android/server/wm/DisplayPolicyLayoutTests.java +0 −421 Original line number Diff line number Diff line Loading @@ -22,18 +22,9 @@ import static android.view.InsetsState.ITYPE_NAVIGATION_BAR; import static android.view.InsetsState.ITYPE_STATUS_BAR; import static android.view.InsetsState.ITYPE_TOP_GESTURES; import static android.view.Surface.ROTATION_0; import static android.view.Surface.ROTATION_270; import static android.view.Surface.ROTATION_90; import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR; import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_INSET_PARENT_FRAME_BY_IME; import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR; import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL; Loading @@ -56,11 +47,8 @@ import android.util.Pair; import android.view.DisplayCutout; import android.view.DisplayInfo; import android.view.InsetsState; import android.view.InsetsVisibilities; import android.view.PrivacyIndicatorBounds; import android.view.RoundedCorners; import android.view.WindowInsets.Side; import android.view.WindowInsets.Type; import androidx.test.filters.SmallTest; Loading Loading @@ -108,15 +96,6 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase { updateDisplayFrames(); } void addWindowWithRawInsetsState(WindowState win) { addWindow(win); // Without mPerformLayout in display content, the window cannot see any insets. Override the // insets state with the global one. final InsetsState insetsState = win.getDisplayContent().getInsetsStateController().getRawInsetsState(); win.mAboveInsetsState.set(insetsState); } public void setRotation(int rotation, boolean includingWindows) { mRotation = rotation; updateDisplayFrames(); Loading Loading @@ -231,388 +210,6 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase { expectThrows(IllegalArgumentException.class, () -> addWindow(win2)); } @Test public void layoutWindowLw_fitStatusBars() { mWindow.mAttrs.setFitInsetsTypes(Type.statusBars()); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getDisplayFrame(), STATUS_BAR_HEIGHT, 0); assertInsetByTopBottom(mWindow.getParentFrame(), STATUS_BAR_HEIGHT, 0); } @Test public void layoutWindowLw_fitNavigationBars() { mWindow.mAttrs.setFitInsetsTypes(Type.navigationBars()); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getDisplayFrame(), 0, NAV_BAR_HEIGHT); assertInsetByTopBottom(mWindow.getParentFrame(), 0, NAV_BAR_HEIGHT); } @Test public void layoutWindowLw_fitAllSides() { mWindow.mAttrs.setFitInsetsSides(Side.all()); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getDisplayFrame(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT); assertInsetByTopBottom(mWindow.getParentFrame(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT); } @Test public void layoutWindowLw_fitTopOnly() { mWindow.mAttrs.setFitInsetsSides(Side.TOP); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getDisplayFrame(), STATUS_BAR_HEIGHT, 0); assertInsetByTopBottom(mWindow.getParentFrame(), STATUS_BAR_HEIGHT, 0); } @Test public void layoutWindowLw_fitInsetsIgnoringVisibility() { final InsetsState state = mDisplayContent.getInsetsStateController().getRawInsetsState(); state.getSource(InsetsState.ITYPE_STATUS_BAR).setVisible(false); state.getSource(InsetsState.ITYPE_NAVIGATION_BAR).setVisible(false); mWindow.mAttrs.setFitInsetsIgnoringVisibility(true); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getDisplayFrame(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT); assertInsetByTopBottom(mWindow.getParentFrame(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT); } @Test public void layoutWindowLw_fitInsetsNotIgnoringVisibility() { final InsetsState state = mDisplayContent.getInsetsStateController().getRawInsetsState(); state.getSource(InsetsState.ITYPE_STATUS_BAR).setVisible(false); state.getSource(InsetsState.ITYPE_NAVIGATION_BAR).setVisible(false); mWindow.mAttrs.setFitInsetsIgnoringVisibility(false); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getDisplayFrame(), 0, 0); assertInsetByTopBottom(mWindow.getParentFrame(), 0, 0); } @Test public void layoutWindowLw_insetParentFrameByIme() { final InsetsState state = mDisplayContent.getInsetsStateController().getRawInsetsState(); state.getSource(InsetsState.ITYPE_IME).setVisible(true); state.getSource(InsetsState.ITYPE_IME).setFrame( 0, DISPLAY_HEIGHT - IME_HEIGHT, DISPLAY_WIDTH, DISPLAY_HEIGHT); mWindow.mAttrs.privateFlags |= PRIVATE_FLAG_INSET_PARENT_FRAME_BY_IME; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getDisplayFrame(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT); assertInsetByTopBottom(mWindow.getParentFrame(), STATUS_BAR_HEIGHT, IME_HEIGHT); } @Test public void layoutWindowLw_fitDisplayCutout() { addDisplayCutout(); mWindow.mAttrs.setFitInsetsTypes(Type.displayCutout()); mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getDisplayFrame(), DISPLAY_CUTOUT_HEIGHT, 0); assertInsetByTopBottom(mWindow.getParentFrame(), DISPLAY_CUTOUT_HEIGHT, 0); } @Test public void layoutWindowLw_withDisplayCutout() { addDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getParentFrame(), 0, 0); assertInsetByTopBottom(mWindow.getDisplayFrame(), 0, 0); } @Test public void layoutWindowLw_withDisplayCutout_never() { addDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getParentFrame(), STATUS_BAR_HEIGHT, 0); assertInsetByTopBottom(mWindow.getDisplayFrame(), STATUS_BAR_HEIGHT, 0); } @Test public void layoutWindowLw_withDisplayCutout_shortEdges() { addDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), 0, 0, 0, 0); assertInsetBy(mWindow.getDisplayFrame(), 0, 0, 0, 0); } @Test public void layoutWindowLw_withDisplayCutout_always() { addDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), 0, 0, 0, 0); assertInsetBy(mWindow.getDisplayFrame(), 0, 0, 0, 0); } @Test public void layoutWindowLw_withDisplayCutout_layoutFullscreen() { addDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getParentFrame(), 0, 0); assertInsetByTopBottom(mWindow.getDisplayFrame(), 0, 0); } @Test public void layoutWindowLw_withDisplayCutout_fullscreen() { addDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); mDisplayContent.getInsetsStateController().getRawInsetsState() .getSource(InsetsState.ITYPE_STATUS_BAR).setVisible(false); final InsetsVisibilities requestedVisibilities = new InsetsVisibilities(); requestedVisibilities.setVisibility(ITYPE_STATUS_BAR, false); mWindow.setRequestedVisibilities(requestedVisibilities); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getParentFrame(), STATUS_BAR_HEIGHT, 0); assertInsetByTopBottom(mWindow.getDisplayFrame(), STATUS_BAR_HEIGHT, 0); } @Test public void layoutWindowLw_withDisplayCutout_fullscreenInCutout() { addDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); mDisplayContent.getInsetsStateController().getRawInsetsState() .getSource(InsetsState.ITYPE_STATUS_BAR).setVisible(false); final InsetsVisibilities requestedVisibilities = new InsetsVisibilities(); requestedVisibilities.setVisibility(ITYPE_STATUS_BAR, false); mWindow.setRequestedVisibilities(requestedVisibilities); mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getParentFrame(), 0, 0); assertInsetByTopBottom(mWindow.getDisplayFrame(), 0, 0); } @Test public void layoutWindowLw_withDisplayCutout_landscape() { addDisplayCutout(); setRotation(ROTATION_90, true /* includingWindows */); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0); assertInsetBy(mWindow.getDisplayFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0); } @Test public void layoutWindowLw_withDisplayCutout_seascape() { addDisplayCutout(); setRotation(ROTATION_270, true /* includingWindows */); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), 0, 0, DISPLAY_CUTOUT_HEIGHT, 0); assertInsetBy(mWindow.getDisplayFrame(), 0, 0, DISPLAY_CUTOUT_HEIGHT, 0); } @Test public void layoutWindowLw_withDisplayCutout_fullscreen_landscape() { addDisplayCutout(); setRotation(ROTATION_90, true /* includingWindows */); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0); } @Test public void layoutWindowLw_withDisplayCutout_floatingInScreen() { addDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN; mWindow.mAttrs.setFitInsetsTypes(Type.systemBars() & ~Type.statusBars()); mWindow.mAttrs.type = TYPE_APPLICATION_OVERLAY; mWindow.mAttrs.width = DISPLAY_WIDTH; mWindow.mAttrs.height = DISPLAY_HEIGHT; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getParentFrame(), 0, NAV_BAR_HEIGHT); assertInsetByTopBottom(mWindow.getDisplayFrame(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT); } @Test public void layoutWindowLw_withDisplayCutout_fullscreenInCutout_landscape() { addDisplayCutout(); setRotation(ROTATION_90, true /* includingWindows */); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), 0, 0, 0, 0); } @Test public void layoutWindowLw_withLongEdgeDisplayCutout() { addLongEdgeDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0); assertInsetBy(mWindow.getDisplayFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0); } @Test public void layoutWindowLw_withLongEdgeDisplayCutout_never() { addLongEdgeDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0); assertInsetBy(mWindow.getDisplayFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0); } @Test public void layoutWindowLw_withLongEdgeDisplayCutout_shortEdges() { addLongEdgeDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0); assertInsetBy(mWindow.getDisplayFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0); } @Test public void layoutWindowLw_withLongEdgeDisplayCutout_always() { addLongEdgeDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), 0, 0, 0, 0); assertInsetBy(mWindow.getDisplayFrame(), 0, 0, 0, 0); } @Test public void layoutWindowLw_withForwardInset_SoftInputAdjustNothing() { mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); mWindow.mAttrs.softInputMode = SOFT_INPUT_ADJUST_NOTHING; addWindowWithRawInsetsState(mWindow); final int forwardedInsetBottom = 50; mDisplayPolicy.setForwardedInsets(Insets.of(0, 0, 0, forwardedInsetBottom)); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), 0, 0, 0, 0); assertInsetBy(mWindow.getDisplayFrame(), 0, 0, 0, 0); } @Test public void layoutHint_appWindow() { mWindow.mAttrs.setFitInsetsTypes(0); Loading Loading @@ -691,22 +288,4 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase { assertEquals(DISPLAY_WIDTH, frame.width()); assertEquals(DISPLAY_HEIGHT, rotatedFrame.width()); } /** * Asserts that {@code actual} is inset by the given amounts from the full display rect. * * Convenience wrapper for when only the top and bottom inset are non-zero. */ private void assertInsetByTopBottom(Rect actual, int expectedInsetTop, int expectedInsetBottom) { assertInsetBy(actual, 0, expectedInsetTop, 0, expectedInsetBottom); } /** Asserts that {@code actual} is inset by the given amounts from the full display rect. */ private void assertInsetBy(Rect actual, int expectedInsetLeft, int expectedInsetTop, int expectedInsetRight, int expectedInsetBottom) { assertEquals(new Rect(expectedInsetLeft, expectedInsetTop, mFrames.mDisplayWidth - expectedInsetRight, mFrames.mDisplayHeight - expectedInsetBottom), actual); } } services/tests/wmtests/src/com/android/server/wm/WindowLayoutTests.java +268 −39 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
core/java/android/view/ViewRootImpl.java +1 −1 Original line number Diff line number Diff line Loading @@ -1141,7 +1141,7 @@ public final class ViewRootImpl implements ViewParent, final Rect displayCutoutSafe = mTempRect; state.getDisplayCutoutSafe(displayCutoutSafe); final WindowConfiguration winConfig = getConfiguration().windowConfiguration; mWindowLayout.computeWindowFrames(mWindowAttributes, state, mWindowLayout.computeFrames(mWindowAttributes, state, displayCutoutSafe, winConfig.getBounds(), winConfig.getWindowingMode(), UNSPECIFIED_LENGTH, UNSPECIFIED_LENGTH, mInsetsController.getRequestedVisibilities(), Loading
core/java/android/view/WindowLayout.java +1 −1 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ public class WindowLayout { private final Rect mTempDisplayCutoutSafeExceptMaybeBarsRect = new Rect(); private final Rect mTempRect = new Rect(); public boolean computeWindowFrames(WindowManager.LayoutParams attrs, InsetsState state, public boolean computeFrames(WindowManager.LayoutParams attrs, InsetsState state, Rect displayCutoutSafe, Rect windowBounds, @WindowingMode int windowingMode, int requestedWidth, int requestedHeight, InsetsVisibilities requestedVisibilities, Rect attachedWindowFrame, float compatScale, Rect outDisplayFrame, Rect outParentFrame, Loading
services/core/java/com/android/server/wm/DisplayPolicy.java +2 −2 Original line number Diff line number Diff line Loading @@ -1447,7 +1447,7 @@ public class DisplayPolicy { final InsetsStateController controller = mDisplayContent.getInsetsStateController(); for (int i = mInsetsSourceWindowsExceptIme.size() - 1; i >= 0; i--) { final WindowState win = mInsetsSourceWindowsExceptIme.valueAt(i); mWindowLayout.computeWindowFrames(win.getLayoutingAttrs(displayFrames.mRotation), mWindowLayout.computeFrames(win.getLayoutingAttrs(displayFrames.mRotation), displayFrames.mInsetsState, displayFrames.mDisplayCutoutSafe, displayFrames.mUnrestricted, win.getWindowingMode(), UNSPECIFIED_LENGTH, UNSPECIFIED_LENGTH, win.getRequestedVisibilities(), Loading Loading @@ -1496,7 +1496,7 @@ public class DisplayPolicy { sTmpLastParentFrame.set(pf); final boolean clippedByDisplayCutout = mWindowLayout.computeWindowFrames(attrs, final boolean clippedByDisplayCutout = mWindowLayout.computeFrames(attrs, win.getInsetsState(), displayFrames.mDisplayCutoutSafe, win.getBounds(), win.getWindowingMode(), requestedWidth, requestedHeight, win.getRequestedVisibilities(), attachedWindowFrame, win.mGlobalScale, Loading
services/tests/wmtests/src/com/android/server/wm/DisplayPolicyLayoutTests.java +0 −421 Original line number Diff line number Diff line Loading @@ -22,18 +22,9 @@ import static android.view.InsetsState.ITYPE_NAVIGATION_BAR; import static android.view.InsetsState.ITYPE_STATUS_BAR; import static android.view.InsetsState.ITYPE_TOP_GESTURES; import static android.view.Surface.ROTATION_0; import static android.view.Surface.ROTATION_270; import static android.view.Surface.ROTATION_90; import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR; import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_INSET_PARENT_FRAME_BY_IME; import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR; import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL; Loading @@ -56,11 +47,8 @@ import android.util.Pair; import android.view.DisplayCutout; import android.view.DisplayInfo; import android.view.InsetsState; import android.view.InsetsVisibilities; import android.view.PrivacyIndicatorBounds; import android.view.RoundedCorners; import android.view.WindowInsets.Side; import android.view.WindowInsets.Type; import androidx.test.filters.SmallTest; Loading Loading @@ -108,15 +96,6 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase { updateDisplayFrames(); } void addWindowWithRawInsetsState(WindowState win) { addWindow(win); // Without mPerformLayout in display content, the window cannot see any insets. Override the // insets state with the global one. final InsetsState insetsState = win.getDisplayContent().getInsetsStateController().getRawInsetsState(); win.mAboveInsetsState.set(insetsState); } public void setRotation(int rotation, boolean includingWindows) { mRotation = rotation; updateDisplayFrames(); Loading Loading @@ -231,388 +210,6 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase { expectThrows(IllegalArgumentException.class, () -> addWindow(win2)); } @Test public void layoutWindowLw_fitStatusBars() { mWindow.mAttrs.setFitInsetsTypes(Type.statusBars()); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getDisplayFrame(), STATUS_BAR_HEIGHT, 0); assertInsetByTopBottom(mWindow.getParentFrame(), STATUS_BAR_HEIGHT, 0); } @Test public void layoutWindowLw_fitNavigationBars() { mWindow.mAttrs.setFitInsetsTypes(Type.navigationBars()); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getDisplayFrame(), 0, NAV_BAR_HEIGHT); assertInsetByTopBottom(mWindow.getParentFrame(), 0, NAV_BAR_HEIGHT); } @Test public void layoutWindowLw_fitAllSides() { mWindow.mAttrs.setFitInsetsSides(Side.all()); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getDisplayFrame(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT); assertInsetByTopBottom(mWindow.getParentFrame(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT); } @Test public void layoutWindowLw_fitTopOnly() { mWindow.mAttrs.setFitInsetsSides(Side.TOP); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getDisplayFrame(), STATUS_BAR_HEIGHT, 0); assertInsetByTopBottom(mWindow.getParentFrame(), STATUS_BAR_HEIGHT, 0); } @Test public void layoutWindowLw_fitInsetsIgnoringVisibility() { final InsetsState state = mDisplayContent.getInsetsStateController().getRawInsetsState(); state.getSource(InsetsState.ITYPE_STATUS_BAR).setVisible(false); state.getSource(InsetsState.ITYPE_NAVIGATION_BAR).setVisible(false); mWindow.mAttrs.setFitInsetsIgnoringVisibility(true); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getDisplayFrame(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT); assertInsetByTopBottom(mWindow.getParentFrame(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT); } @Test public void layoutWindowLw_fitInsetsNotIgnoringVisibility() { final InsetsState state = mDisplayContent.getInsetsStateController().getRawInsetsState(); state.getSource(InsetsState.ITYPE_STATUS_BAR).setVisible(false); state.getSource(InsetsState.ITYPE_NAVIGATION_BAR).setVisible(false); mWindow.mAttrs.setFitInsetsIgnoringVisibility(false); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getDisplayFrame(), 0, 0); assertInsetByTopBottom(mWindow.getParentFrame(), 0, 0); } @Test public void layoutWindowLw_insetParentFrameByIme() { final InsetsState state = mDisplayContent.getInsetsStateController().getRawInsetsState(); state.getSource(InsetsState.ITYPE_IME).setVisible(true); state.getSource(InsetsState.ITYPE_IME).setFrame( 0, DISPLAY_HEIGHT - IME_HEIGHT, DISPLAY_WIDTH, DISPLAY_HEIGHT); mWindow.mAttrs.privateFlags |= PRIVATE_FLAG_INSET_PARENT_FRAME_BY_IME; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getDisplayFrame(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT); assertInsetByTopBottom(mWindow.getParentFrame(), STATUS_BAR_HEIGHT, IME_HEIGHT); } @Test public void layoutWindowLw_fitDisplayCutout() { addDisplayCutout(); mWindow.mAttrs.setFitInsetsTypes(Type.displayCutout()); mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getDisplayFrame(), DISPLAY_CUTOUT_HEIGHT, 0); assertInsetByTopBottom(mWindow.getParentFrame(), DISPLAY_CUTOUT_HEIGHT, 0); } @Test public void layoutWindowLw_withDisplayCutout() { addDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getParentFrame(), 0, 0); assertInsetByTopBottom(mWindow.getDisplayFrame(), 0, 0); } @Test public void layoutWindowLw_withDisplayCutout_never() { addDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getParentFrame(), STATUS_BAR_HEIGHT, 0); assertInsetByTopBottom(mWindow.getDisplayFrame(), STATUS_BAR_HEIGHT, 0); } @Test public void layoutWindowLw_withDisplayCutout_shortEdges() { addDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), 0, 0, 0, 0); assertInsetBy(mWindow.getDisplayFrame(), 0, 0, 0, 0); } @Test public void layoutWindowLw_withDisplayCutout_always() { addDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), 0, 0, 0, 0); assertInsetBy(mWindow.getDisplayFrame(), 0, 0, 0, 0); } @Test public void layoutWindowLw_withDisplayCutout_layoutFullscreen() { addDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getParentFrame(), 0, 0); assertInsetByTopBottom(mWindow.getDisplayFrame(), 0, 0); } @Test public void layoutWindowLw_withDisplayCutout_fullscreen() { addDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); mDisplayContent.getInsetsStateController().getRawInsetsState() .getSource(InsetsState.ITYPE_STATUS_BAR).setVisible(false); final InsetsVisibilities requestedVisibilities = new InsetsVisibilities(); requestedVisibilities.setVisibility(ITYPE_STATUS_BAR, false); mWindow.setRequestedVisibilities(requestedVisibilities); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getParentFrame(), STATUS_BAR_HEIGHT, 0); assertInsetByTopBottom(mWindow.getDisplayFrame(), STATUS_BAR_HEIGHT, 0); } @Test public void layoutWindowLw_withDisplayCutout_fullscreenInCutout() { addDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); mDisplayContent.getInsetsStateController().getRawInsetsState() .getSource(InsetsState.ITYPE_STATUS_BAR).setVisible(false); final InsetsVisibilities requestedVisibilities = new InsetsVisibilities(); requestedVisibilities.setVisibility(ITYPE_STATUS_BAR, false); mWindow.setRequestedVisibilities(requestedVisibilities); mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getParentFrame(), 0, 0); assertInsetByTopBottom(mWindow.getDisplayFrame(), 0, 0); } @Test public void layoutWindowLw_withDisplayCutout_landscape() { addDisplayCutout(); setRotation(ROTATION_90, true /* includingWindows */); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0); assertInsetBy(mWindow.getDisplayFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0); } @Test public void layoutWindowLw_withDisplayCutout_seascape() { addDisplayCutout(); setRotation(ROTATION_270, true /* includingWindows */); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), 0, 0, DISPLAY_CUTOUT_HEIGHT, 0); assertInsetBy(mWindow.getDisplayFrame(), 0, 0, DISPLAY_CUTOUT_HEIGHT, 0); } @Test public void layoutWindowLw_withDisplayCutout_fullscreen_landscape() { addDisplayCutout(); setRotation(ROTATION_90, true /* includingWindows */); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0); } @Test public void layoutWindowLw_withDisplayCutout_floatingInScreen() { addDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN; mWindow.mAttrs.setFitInsetsTypes(Type.systemBars() & ~Type.statusBars()); mWindow.mAttrs.type = TYPE_APPLICATION_OVERLAY; mWindow.mAttrs.width = DISPLAY_WIDTH; mWindow.mAttrs.height = DISPLAY_HEIGHT; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getParentFrame(), 0, NAV_BAR_HEIGHT); assertInsetByTopBottom(mWindow.getDisplayFrame(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT); } @Test public void layoutWindowLw_withDisplayCutout_fullscreenInCutout_landscape() { addDisplayCutout(); setRotation(ROTATION_90, true /* includingWindows */); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), 0, 0, 0, 0); } @Test public void layoutWindowLw_withLongEdgeDisplayCutout() { addLongEdgeDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0); assertInsetBy(mWindow.getDisplayFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0); } @Test public void layoutWindowLw_withLongEdgeDisplayCutout_never() { addLongEdgeDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0); assertInsetBy(mWindow.getDisplayFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0); } @Test public void layoutWindowLw_withLongEdgeDisplayCutout_shortEdges() { addLongEdgeDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0); assertInsetBy(mWindow.getDisplayFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0); } @Test public void layoutWindowLw_withLongEdgeDisplayCutout_always() { addLongEdgeDisplayCutout(); mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; addWindowWithRawInsetsState(mWindow); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), 0, 0, 0, 0); assertInsetBy(mWindow.getDisplayFrame(), 0, 0, 0, 0); } @Test public void layoutWindowLw_withForwardInset_SoftInputAdjustNothing() { mWindow.mAttrs.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; mWindow.mAttrs.setFitInsetsTypes(0 /* types */); mWindow.mAttrs.softInputMode = SOFT_INPUT_ADJUST_NOTHING; addWindowWithRawInsetsState(mWindow); final int forwardedInsetBottom = 50; mDisplayPolicy.setForwardedInsets(Insets.of(0, 0, 0, forwardedInsetBottom)); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getParentFrame(), 0, 0, 0, 0); assertInsetBy(mWindow.getDisplayFrame(), 0, 0, 0, 0); } @Test public void layoutHint_appWindow() { mWindow.mAttrs.setFitInsetsTypes(0); Loading Loading @@ -691,22 +288,4 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase { assertEquals(DISPLAY_WIDTH, frame.width()); assertEquals(DISPLAY_HEIGHT, rotatedFrame.width()); } /** * Asserts that {@code actual} is inset by the given amounts from the full display rect. * * Convenience wrapper for when only the top and bottom inset are non-zero. */ private void assertInsetByTopBottom(Rect actual, int expectedInsetTop, int expectedInsetBottom) { assertInsetBy(actual, 0, expectedInsetTop, 0, expectedInsetBottom); } /** Asserts that {@code actual} is inset by the given amounts from the full display rect. */ private void assertInsetBy(Rect actual, int expectedInsetLeft, int expectedInsetTop, int expectedInsetRight, int expectedInsetBottom) { assertEquals(new Rect(expectedInsetLeft, expectedInsetTop, mFrames.mDisplayWidth - expectedInsetRight, mFrames.mDisplayHeight - expectedInsetBottom), actual); } }
services/tests/wmtests/src/com/android/server/wm/WindowLayoutTests.java +268 −39 File changed.Preview size limit exceeded, changes collapsed. Show changes