Loading services/core/java/com/android/server/wm/DisplayPolicy.java +7 −7 Original line number Diff line number Diff line Loading @@ -1494,8 +1494,6 @@ public class DisplayPolicy { } sTmpRect.setEmpty(); sTmpDockedFrame.set(displayFrames.mDock); final int displayId = displayFrames.mDisplayId; final Rect dockFrame = displayFrames.mDock; final int displayHeight = displayFrames.mDisplayHeight; Loading @@ -1508,11 +1506,13 @@ public class DisplayPolicy { continue; } w.getWindowFrames().setFrames(sTmpDockedFrame /* parentFrame */, sTmpDockedFrame /* displayFrame */, sTmpDockedFrame /* overscanFrame */, sTmpDockedFrame /* contentFrame */, sTmpDockedFrame /* visibleFrame */, sTmpRect /* decorFrame */, sTmpDockedFrame /* stableFrame */, sTmpDockedFrame /* outsetFrame */); w.getWindowFrames().setFrames(displayFrames.mUnrestricted /* parentFrame */, displayFrames.mUnrestricted /* displayFrame */, displayFrames.mUnrestricted /* overscanFrame */, displayFrames.mUnrestricted /* contentFrame */, displayFrames.mUnrestricted /* visibleFrame */, sTmpRect /* decorFrame */, displayFrames.mUnrestricted /* stableFrame */, displayFrames.mUnrestricted /* outsetFrame */); w.getWindowFrames().setDisplayCutout(displayFrames.mDisplayCutout); w.computeFrameLw(); final Rect frame = w.getFrameLw(); Loading services/tests/wmtests/src/com/android/server/wm/DisplayPolicyLayoutTests.java +59 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ package com.android.server.wm; import static android.view.Gravity.BOTTOM; import static android.view.Gravity.LEFT; import static android.view.Gravity.RIGHT; import static android.view.Gravity.TOP; import static android.view.Surface.ROTATION_0; import static android.view.Surface.ROTATION_270; import static android.view.Surface.ROTATION_90; Loading @@ -26,9 +30,11 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; 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.FLAG_NOT_FOCUSABLE; 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.PRIVATE_FLAG_FORCE_DRAW_BAR_BACKGROUNDS; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_IS_SCREEN_DECOR; import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING; import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; Loading Loading @@ -66,6 +72,7 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase { private WindowState mWindow; private int mRotation = ROTATION_0; private boolean mHasDisplayCutout; private static final int DECOR_WINDOW_INSET = 50; @Before public void setUp() throws Exception { Loading Loading @@ -520,6 +527,58 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase { } } @Test public void testScreenDecorWindows() { synchronized (mWm.mGlobalLock) { final WindowState decorWindow = createWindow(null, TYPE_APPLICATION_OVERLAY, "decorWindow"); decorWindow.mAttrs.flags |= FLAG_NOT_FOCUSABLE; decorWindow.mAttrs.privateFlags |= PRIVATE_FLAG_IS_SCREEN_DECOR; addWindow(decorWindow); addWindow(mWindow); // Decor on top updateDecorWindow(decorWindow, MATCH_PARENT, DECOR_WINDOW_INSET, TOP); mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getContentFrameLw(), DECOR_WINDOW_INSET, NAV_BAR_HEIGHT); // Decor on bottom updateDecorWindow(decorWindow, MATCH_PARENT, DECOR_WINDOW_INSET, BOTTOM); mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getContentFrameLw(), STATUS_BAR_HEIGHT, DECOR_WINDOW_INSET); // Decor on the left updateDecorWindow(decorWindow, DECOR_WINDOW_INSET, MATCH_PARENT, LEFT); mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getContentFrameLw(), DECOR_WINDOW_INSET, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); // Decor on the right updateDecorWindow(decorWindow, DECOR_WINDOW_INSET, MATCH_PARENT, RIGHT); mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getContentFrameLw(), 0, STATUS_BAR_HEIGHT, DECOR_WINDOW_INSET, NAV_BAR_HEIGHT); // Decor not allowed as inset updateDecorWindow(decorWindow, DECOR_WINDOW_INSET, DECOR_WINDOW_INSET, TOP); mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getContentFrameLw(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT); } } private void updateDecorWindow(WindowState decorWindow, int width, int height, int gravity) { decorWindow.mAttrs.width = width; decorWindow.mAttrs.height = height; decorWindow.mAttrs.gravity = gravity; decorWindow.setRequestedSize(width, height); } /** * Asserts that {@code actual} is inset by the given amounts from the full display rect. * Loading Loading
services/core/java/com/android/server/wm/DisplayPolicy.java +7 −7 Original line number Diff line number Diff line Loading @@ -1494,8 +1494,6 @@ public class DisplayPolicy { } sTmpRect.setEmpty(); sTmpDockedFrame.set(displayFrames.mDock); final int displayId = displayFrames.mDisplayId; final Rect dockFrame = displayFrames.mDock; final int displayHeight = displayFrames.mDisplayHeight; Loading @@ -1508,11 +1506,13 @@ public class DisplayPolicy { continue; } w.getWindowFrames().setFrames(sTmpDockedFrame /* parentFrame */, sTmpDockedFrame /* displayFrame */, sTmpDockedFrame /* overscanFrame */, sTmpDockedFrame /* contentFrame */, sTmpDockedFrame /* visibleFrame */, sTmpRect /* decorFrame */, sTmpDockedFrame /* stableFrame */, sTmpDockedFrame /* outsetFrame */); w.getWindowFrames().setFrames(displayFrames.mUnrestricted /* parentFrame */, displayFrames.mUnrestricted /* displayFrame */, displayFrames.mUnrestricted /* overscanFrame */, displayFrames.mUnrestricted /* contentFrame */, displayFrames.mUnrestricted /* visibleFrame */, sTmpRect /* decorFrame */, displayFrames.mUnrestricted /* stableFrame */, displayFrames.mUnrestricted /* outsetFrame */); w.getWindowFrames().setDisplayCutout(displayFrames.mDisplayCutout); w.computeFrameLw(); final Rect frame = w.getFrameLw(); Loading
services/tests/wmtests/src/com/android/server/wm/DisplayPolicyLayoutTests.java +59 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ package com.android.server.wm; import static android.view.Gravity.BOTTOM; import static android.view.Gravity.LEFT; import static android.view.Gravity.RIGHT; import static android.view.Gravity.TOP; import static android.view.Surface.ROTATION_0; import static android.view.Surface.ROTATION_270; import static android.view.Surface.ROTATION_90; Loading @@ -26,9 +30,11 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; 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.FLAG_NOT_FOCUSABLE; 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.PRIVATE_FLAG_FORCE_DRAW_BAR_BACKGROUNDS; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_IS_SCREEN_DECOR; import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING; import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; Loading Loading @@ -66,6 +72,7 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase { private WindowState mWindow; private int mRotation = ROTATION_0; private boolean mHasDisplayCutout; private static final int DECOR_WINDOW_INSET = 50; @Before public void setUp() throws Exception { Loading Loading @@ -520,6 +527,58 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase { } } @Test public void testScreenDecorWindows() { synchronized (mWm.mGlobalLock) { final WindowState decorWindow = createWindow(null, TYPE_APPLICATION_OVERLAY, "decorWindow"); decorWindow.mAttrs.flags |= FLAG_NOT_FOCUSABLE; decorWindow.mAttrs.privateFlags |= PRIVATE_FLAG_IS_SCREEN_DECOR; addWindow(decorWindow); addWindow(mWindow); // Decor on top updateDecorWindow(decorWindow, MATCH_PARENT, DECOR_WINDOW_INSET, TOP); mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getContentFrameLw(), DECOR_WINDOW_INSET, NAV_BAR_HEIGHT); // Decor on bottom updateDecorWindow(decorWindow, MATCH_PARENT, DECOR_WINDOW_INSET, BOTTOM); mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getContentFrameLw(), STATUS_BAR_HEIGHT, DECOR_WINDOW_INSET); // Decor on the left updateDecorWindow(decorWindow, DECOR_WINDOW_INSET, MATCH_PARENT, LEFT); mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getContentFrameLw(), DECOR_WINDOW_INSET, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); // Decor on the right updateDecorWindow(decorWindow, DECOR_WINDOW_INSET, MATCH_PARENT, RIGHT); mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetBy(mWindow.getContentFrameLw(), 0, STATUS_BAR_HEIGHT, DECOR_WINDOW_INSET, NAV_BAR_HEIGHT); // Decor not allowed as inset updateDecorWindow(decorWindow, DECOR_WINDOW_INSET, DECOR_WINDOW_INSET, TOP); mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */); mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames); assertInsetByTopBottom(mWindow.getContentFrameLw(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT); } } private void updateDecorWindow(WindowState decorWindow, int width, int height, int gravity) { decorWindow.mAttrs.width = width; decorWindow.mAttrs.height = height; decorWindow.mAttrs.gravity = gravity; decorWindow.setRequestedSize(width, height); } /** * Asserts that {@code actual} is inset by the given amounts from the full display rect. * Loading