diff options
| author | 2022-08-10 09:18:59 +0000 | |
|---|---|---|
| committer | 2022-08-10 09:18:59 +0000 | |
| commit | cf93bf7134ee88621ca8d1bb4f4227ba0401b05d (patch) | |
| tree | 20fe527f5d9321ce89eebb88b263ebea996d0dfe | |
| parent | 9cc6ab62b27389c7979aa98a0b90188d195d0b5f (diff) | |
| parent | 2537d032eca6170db3dcb8891defb74263741f0e (diff) | |
Merge "Fix split colour in Letterbox Landscape mode" into tm-qpr-dev
| -rw-r--r-- | services/core/java/com/android/server/wm/DisplayPolicy.java | 21 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java | 38 |
2 files changed, 47 insertions, 12 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java index 25d187fbf86f..07694065cbd7 100644 --- a/services/core/java/com/android/server/wm/DisplayPolicy.java +++ b/services/core/java/com/android/server/wm/DisplayPolicy.java @@ -1725,16 +1725,6 @@ public class DisplayPolicy { win.mAttrs.insetsFlags.appearance & APPEARANCE_LIGHT_STATUS_BARS, new Rect(win.getFrame()))); mStatusBarColorCheckedBounds.union(sTmpRect); - // Check if current activity is letterboxed in order create a LetterboxDetails - // component to be passed to SysUI for status bar treatment - final ActivityRecord currentActivity = win.getActivityRecord(); - if (currentActivity != null) { - final LetterboxDetails currentLetterboxDetails = currentActivity - .mLetterboxUiController.getLetterboxDetails(); - if (currentLetterboxDetails != null) { - mLetterboxDetails.add(currentLetterboxDetails); - } - } } } @@ -1752,6 +1742,17 @@ public class DisplayPolicy { mNavBarBackgroundWindow = win; } } + + // Check if current activity is letterboxed in order create a LetterboxDetails + // component to be passed to SysUI for status bar treatment + final ActivityRecord currentActivity = win.getActivityRecord(); + if (currentActivity != null) { + final LetterboxDetails currentLetterboxDetails = currentActivity + .mLetterboxUiController.getLetterboxDetails(); + if (currentLetterboxDetails != null) { + mLetterboxDetails.add(currentLetterboxDetails); + } + } } else if (win.isDimming()) { if (mStatusBar != null) { addStatusBarAppearanceRegionsForDimmingWindow( diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java index 21839aac4ec5..fde6e3cc0b4f 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java @@ -102,7 +102,6 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestRule; import org.junit.runner.RunWith; -import org.mockito.Mockito; /** * Tests for Size Compatibility mode. @@ -2165,6 +2164,40 @@ public class SizeCompatTests extends WindowTestsBase { } @Test + public void testLetterboxDetailsForStatusBar_letterboxNotOverlappingStatusBar() { + final DisplayContent display = new TestDisplayContent.Builder(mAtm, 1000, 2800) + .setNotch(100) + .build(); + setUpApp(display); + TestWindowState statusBar = addStatusBar(mActivity.mDisplayContent); + spyOn(statusBar); + doReturn(new Rect(0, 0, statusBar.mRequestedWidth, statusBar.mRequestedHeight)) + .when(statusBar).getFrame(); + addWindowToActivity(mActivity); // Add a window to the activity so that we can get an + // appearance inside letterboxDetails + // Prepare unresizable activity with max aspect ratio + prepareUnresizable(mActivity, /* maxAspect */ 1.1f, SCREEN_ORIENTATION_UNSPECIFIED); + // Refresh the letterbox + mActivity.mRootWindowContainer.performSurfacePlacement(); + + Rect mBounds = new Rect(mActivity.getWindowConfiguration().getBounds()); + assertEquals(mBounds, new Rect(0, 750, 1000, 1950)); + + DisplayPolicy displayPolicy = mActivity.getDisplayContent().getDisplayPolicy(); + LetterboxDetails[] expectedLetterboxDetails = {new LetterboxDetails( + mBounds, + mActivity.getDisplayContent().getBounds(), + mActivity.findMainWindow().mAttrs.insetsFlags.appearance + )}; + + // Check that letterboxDetails actually gets passed to SysUI + StatusBarManagerInternal statusBarManager = displayPolicy.getStatusBarManagerInternal(); + verify(statusBarManager).onSystemBarAttributesChanged(anyInt(), anyInt(), + any(), anyBoolean(), anyInt(), + any(InsetsVisibilities.class), isNull(), eq(expectedLetterboxDetails)); + } + + @Test public void testSplitScreenLetterboxDetailsForStatusBar_twoLetterboxedApps() { mAtm.mDevEnableNonResizableMultiWindow = true; setUpDisplaySizeWithApp(2800, 1000); @@ -2785,7 +2818,7 @@ public class SizeCompatTests extends WindowTestsBase { return w; } - private static void addStatusBar(DisplayContent displayContent) { + private static TestWindowState addStatusBar(DisplayContent displayContent) { final DisplayPolicy displayPolicy = displayContent.getDisplayPolicy(); doReturn(true).when(displayPolicy).hasStatusBar(); displayPolicy.onConfigurationChanged(); @@ -2806,6 +2839,7 @@ public class SizeCompatTests extends WindowTestsBase { displayPolicy.addWindowLw(statusBar, attrs); displayPolicy.layoutWindowLw(statusBar, null, displayContent.mDisplayFrames); + return statusBar; } /** |