Loading services/core/java/com/android/server/wm/ActivityRecord.java +6 −0 Original line number Diff line number Diff line Loading @@ -8386,6 +8386,12 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } } @NonNull Rect getScreenResolvedBounds() { final Configuration resolvedConfig = getResolvedOverrideConfiguration(); final Rect resolvedBounds = resolvedConfig.windowConfiguration.getBounds(); return mSizeCompatBounds != null ? mSizeCompatBounds : resolvedBounds; } void recomputeConfiguration() { // We check if the current activity is transparent. In that case we need to // recomputeConfiguration of the first opaque activity beneath, to allow a Loading services/core/java/com/android/server/wm/LetterboxUiController.java +6 −2 Original line number Diff line number Diff line Loading @@ -977,6 +977,8 @@ final class LetterboxUiController { * </ul> */ private boolean isHorizontalReachabilityEnabled(Configuration parentConfiguration) { // Use screen resolved bounds which uses resolved bounds or size compat bounds // as activity bounds can sometimes be empty return mLetterboxConfiguration.getIsHorizontalReachabilityEnabled() && parentConfiguration.windowConfiguration.getWindowingMode() == WINDOWING_MODE_FULLSCREEN Loading @@ -984,7 +986,7 @@ final class LetterboxUiController { && mActivityRecord.getOrientationForReachability() == ORIENTATION_PORTRAIT) // Check whether the activity fills the parent vertically. && parentConfiguration.windowConfiguration.getAppBounds().height() <= mActivityRecord.getBounds().height(); <= mActivityRecord.getScreenResolvedBounds().height(); } @VisibleForTesting Loading @@ -1004,6 +1006,8 @@ final class LetterboxUiController { * </ul> */ private boolean isVerticalReachabilityEnabled(Configuration parentConfiguration) { // Use screen resolved bounds which uses resolved bounds or size compat bounds // as activity bounds can sometimes be empty return mLetterboxConfiguration.getIsVerticalReachabilityEnabled() && parentConfiguration.windowConfiguration.getWindowingMode() == WINDOWING_MODE_FULLSCREEN Loading @@ -1011,7 +1015,7 @@ final class LetterboxUiController { && mActivityRecord.getOrientationForReachability() == ORIENTATION_LANDSCAPE) // Check whether the activity fills the parent horizontally. && parentConfiguration.windowConfiguration.getBounds().width() == mActivityRecord.getBounds().width(); == mActivityRecord.getScreenResolvedBounds().width(); } @VisibleForTesting Loading services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +40 −7 Original line number Diff line number Diff line Loading @@ -3077,11 +3077,43 @@ public class SizeCompatTests extends WindowTestsBase { assertTrue(mActivity.inSizeCompatMode()); // Vertical reachability is disabled because the app does not match parent width assertNotEquals(mActivity.getBounds().width(), mActivity.mDisplayContent.getBounds() .width()); assertNotEquals(mActivity.getScreenResolvedBounds().width(), mActivity.mDisplayContent.getBounds().width()); assertFalse(mActivity.mLetterboxUiController.isVerticalReachabilityEnabled()); } @Test public void testIsVerticalReachabilityEnabled_emptyBounds_true() { setUpDisplaySizeWithApp(/* dw */ 1000, /* dh */ 2800); mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */); mWm.mLetterboxConfiguration.setIsVerticalReachabilityEnabled(true); prepareUnresizable(mActivity, SCREEN_ORIENTATION_LANDSCAPE); // Set up activity with empty bounds to mock loading of app mActivity.getWindowConfiguration().setBounds(null); assertEquals(new Rect(0, 0, 0, 0), mActivity.getBounds()); // Vertical reachability is still enabled as resolved bounds is not empty assertTrue(mActivity.mLetterboxUiController.isVerticalReachabilityEnabled()); } @Test public void testIsHorizontalReachabilityEnabled_emptyBounds_true() { setUpDisplaySizeWithApp(/* dw */ 2800, /* dh */ 1000); mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */); mWm.mLetterboxConfiguration.setIsHorizontalReachabilityEnabled(true); prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT); // Set up activity with empty bounds to mock loading of app mActivity.getWindowConfiguration().setBounds(null); assertEquals(new Rect(0, 0, 0, 0), mActivity.getBounds()); // Horizontal reachability is still enabled as resolved bounds is not empty assertTrue(mActivity.mLetterboxUiController.isHorizontalReachabilityEnabled()); } @Test public void testIsHorizontalReachabilityEnabled_doesNotMatchParentHeight_false() { setUpDisplaySizeWithApp(2800, 1000); Loading @@ -3098,8 +3130,8 @@ public class SizeCompatTests extends WindowTestsBase { assertTrue(mActivity.inSizeCompatMode()); // Horizontal reachability is disabled because the app does not match parent height assertNotEquals(mActivity.getBounds().height(), mActivity.mDisplayContent.getBounds() .height()); assertNotEquals(mActivity.getScreenResolvedBounds().height(), mActivity.mDisplayContent.getBounds().height()); assertFalse(mActivity.mLetterboxUiController.isHorizontalReachabilityEnabled()); } Loading @@ -3119,8 +3151,8 @@ public class SizeCompatTests extends WindowTestsBase { assertTrue(mActivity.inSizeCompatMode()); // Horizontal reachability is enabled because the app matches parent height assertEquals(mActivity.getBounds().height(), mActivity.mDisplayContent.getBounds() .height()); assertEquals(mActivity.getScreenResolvedBounds().height(), mActivity.mDisplayContent.getBounds().height()); assertTrue(mActivity.mLetterboxUiController.isHorizontalReachabilityEnabled()); } Loading @@ -3140,7 +3172,8 @@ public class SizeCompatTests extends WindowTestsBase { assertTrue(mActivity.inSizeCompatMode()); // Vertical reachability is enabled because the app matches parent width assertEquals(mActivity.getBounds().width(), mActivity.mDisplayContent.getBounds().width()); assertEquals(mActivity.getScreenResolvedBounds().width(), mActivity.mDisplayContent.getBounds().width()); assertTrue(mActivity.mLetterboxUiController.isVerticalReachabilityEnabled()); } Loading Loading
services/core/java/com/android/server/wm/ActivityRecord.java +6 −0 Original line number Diff line number Diff line Loading @@ -8386,6 +8386,12 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } } @NonNull Rect getScreenResolvedBounds() { final Configuration resolvedConfig = getResolvedOverrideConfiguration(); final Rect resolvedBounds = resolvedConfig.windowConfiguration.getBounds(); return mSizeCompatBounds != null ? mSizeCompatBounds : resolvedBounds; } void recomputeConfiguration() { // We check if the current activity is transparent. In that case we need to // recomputeConfiguration of the first opaque activity beneath, to allow a Loading
services/core/java/com/android/server/wm/LetterboxUiController.java +6 −2 Original line number Diff line number Diff line Loading @@ -977,6 +977,8 @@ final class LetterboxUiController { * </ul> */ private boolean isHorizontalReachabilityEnabled(Configuration parentConfiguration) { // Use screen resolved bounds which uses resolved bounds or size compat bounds // as activity bounds can sometimes be empty return mLetterboxConfiguration.getIsHorizontalReachabilityEnabled() && parentConfiguration.windowConfiguration.getWindowingMode() == WINDOWING_MODE_FULLSCREEN Loading @@ -984,7 +986,7 @@ final class LetterboxUiController { && mActivityRecord.getOrientationForReachability() == ORIENTATION_PORTRAIT) // Check whether the activity fills the parent vertically. && parentConfiguration.windowConfiguration.getAppBounds().height() <= mActivityRecord.getBounds().height(); <= mActivityRecord.getScreenResolvedBounds().height(); } @VisibleForTesting Loading @@ -1004,6 +1006,8 @@ final class LetterboxUiController { * </ul> */ private boolean isVerticalReachabilityEnabled(Configuration parentConfiguration) { // Use screen resolved bounds which uses resolved bounds or size compat bounds // as activity bounds can sometimes be empty return mLetterboxConfiguration.getIsVerticalReachabilityEnabled() && parentConfiguration.windowConfiguration.getWindowingMode() == WINDOWING_MODE_FULLSCREEN Loading @@ -1011,7 +1015,7 @@ final class LetterboxUiController { && mActivityRecord.getOrientationForReachability() == ORIENTATION_LANDSCAPE) // Check whether the activity fills the parent horizontally. && parentConfiguration.windowConfiguration.getBounds().width() == mActivityRecord.getBounds().width(); == mActivityRecord.getScreenResolvedBounds().width(); } @VisibleForTesting Loading
services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +40 −7 Original line number Diff line number Diff line Loading @@ -3077,11 +3077,43 @@ public class SizeCompatTests extends WindowTestsBase { assertTrue(mActivity.inSizeCompatMode()); // Vertical reachability is disabled because the app does not match parent width assertNotEquals(mActivity.getBounds().width(), mActivity.mDisplayContent.getBounds() .width()); assertNotEquals(mActivity.getScreenResolvedBounds().width(), mActivity.mDisplayContent.getBounds().width()); assertFalse(mActivity.mLetterboxUiController.isVerticalReachabilityEnabled()); } @Test public void testIsVerticalReachabilityEnabled_emptyBounds_true() { setUpDisplaySizeWithApp(/* dw */ 1000, /* dh */ 2800); mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */); mWm.mLetterboxConfiguration.setIsVerticalReachabilityEnabled(true); prepareUnresizable(mActivity, SCREEN_ORIENTATION_LANDSCAPE); // Set up activity with empty bounds to mock loading of app mActivity.getWindowConfiguration().setBounds(null); assertEquals(new Rect(0, 0, 0, 0), mActivity.getBounds()); // Vertical reachability is still enabled as resolved bounds is not empty assertTrue(mActivity.mLetterboxUiController.isVerticalReachabilityEnabled()); } @Test public void testIsHorizontalReachabilityEnabled_emptyBounds_true() { setUpDisplaySizeWithApp(/* dw */ 2800, /* dh */ 1000); mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */); mWm.mLetterboxConfiguration.setIsHorizontalReachabilityEnabled(true); prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT); // Set up activity with empty bounds to mock loading of app mActivity.getWindowConfiguration().setBounds(null); assertEquals(new Rect(0, 0, 0, 0), mActivity.getBounds()); // Horizontal reachability is still enabled as resolved bounds is not empty assertTrue(mActivity.mLetterboxUiController.isHorizontalReachabilityEnabled()); } @Test public void testIsHorizontalReachabilityEnabled_doesNotMatchParentHeight_false() { setUpDisplaySizeWithApp(2800, 1000); Loading @@ -3098,8 +3130,8 @@ public class SizeCompatTests extends WindowTestsBase { assertTrue(mActivity.inSizeCompatMode()); // Horizontal reachability is disabled because the app does not match parent height assertNotEquals(mActivity.getBounds().height(), mActivity.mDisplayContent.getBounds() .height()); assertNotEquals(mActivity.getScreenResolvedBounds().height(), mActivity.mDisplayContent.getBounds().height()); assertFalse(mActivity.mLetterboxUiController.isHorizontalReachabilityEnabled()); } Loading @@ -3119,8 +3151,8 @@ public class SizeCompatTests extends WindowTestsBase { assertTrue(mActivity.inSizeCompatMode()); // Horizontal reachability is enabled because the app matches parent height assertEquals(mActivity.getBounds().height(), mActivity.mDisplayContent.getBounds() .height()); assertEquals(mActivity.getScreenResolvedBounds().height(), mActivity.mDisplayContent.getBounds().height()); assertTrue(mActivity.mLetterboxUiController.isHorizontalReachabilityEnabled()); } Loading @@ -3140,7 +3172,8 @@ public class SizeCompatTests extends WindowTestsBase { assertTrue(mActivity.inSizeCompatMode()); // Vertical reachability is enabled because the app matches parent width assertEquals(mActivity.getBounds().width(), mActivity.mDisplayContent.getBounds().width()); assertEquals(mActivity.getScreenResolvedBounds().width(), mActivity.mDisplayContent.getBounds().width()); assertTrue(mActivity.mLetterboxUiController.isVerticalReachabilityEnabled()); } Loading