summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Vali Calinescu <vcalinescu@google.com> 2022-08-10 09:18:59 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-08-10 09:18:59 +0000
commitcf93bf7134ee88621ca8d1bb4f4227ba0401b05d (patch)
tree20fe527f5d9321ce89eebb88b263ebea996d0dfe
parent9cc6ab62b27389c7979aa98a0b90188d195d0b5f (diff)
parent2537d032eca6170db3dcb8891defb74263741f0e (diff)
Merge "Fix split colour in Letterbox Landscape mode" into tm-qpr-dev
-rw-r--r--services/core/java/com/android/server/wm/DisplayPolicy.java21
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java38
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;
}
/**