diff options
| author | 2023-03-23 10:53:58 +0000 | |
|---|---|---|
| committer | 2023-03-23 10:53:58 +0000 | |
| commit | 700202fee27487d6145e08d70a89cf4abf8038cc (patch) | |
| tree | 40ccf7154e1508cdaa075a5601be91c475156dba | |
| parent | 8790168a2f7f5ead96aaedb626e677a3cd4af415 (diff) | |
| parent | f2d3b4a55f4ede76a7276b7d503c3e11b72615ac (diff) | |
Merge "Don't check height if activity bounds empty" into tm-qpr-dev am: f2d3b4a55f
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22162527
Change-Id: I9737517a14ea60446c11b952547bf4b13c9fd428
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
3 files changed, 52 insertions, 9 deletions
| diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index df13c13b208a..607b7e78c4ad 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -8388,6 +8388,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 diff --git a/services/core/java/com/android/server/wm/LetterboxUiController.java b/services/core/java/com/android/server/wm/LetterboxUiController.java index 54137eb41c5f..93c9a1171354 100644 --- a/services/core/java/com/android/server/wm/LetterboxUiController.java +++ b/services/core/java/com/android/server/wm/LetterboxUiController.java @@ -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 @@ -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 @@ -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 @@ -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 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 3e423c4d29ec..d266da1d87bf 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java @@ -3077,12 +3077,44 @@ 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);          mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */); @@ -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());      } @@ -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());      } @@ -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());      } |