Merge "Don't check height if activity bounds empty" into tm-qpr-dev am: f2d3b4a55f am: 700202fee2

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22162527

Change-Id: I25ed3c0d0b5047112a14db9b0bc8107fc2fabdb5
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Graciela Putri
2023-03-23 11:33:45 +00:00
committed by Automerger Merge Worker
3 changed files with 52 additions and 9 deletions

View File

@@ -8442,6 +8442,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

View File

@@ -969,6 +969,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
@@ -976,7 +978,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
@@ -996,6 +998,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
@@ -1003,7 +1007,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

View File

@@ -3113,11 +3113,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);
@@ -3134,8 +3166,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());
}
@@ -3155,8 +3187,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());
}
@@ -3176,7 +3208,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());
}