Merge "Ensure size compat insets created for visible activity." into sc-dev

This commit is contained in:
Mariia Sandrikova
2021-03-16 09:28:18 +00:00
committed by Android (Google) Code Review

View File

@@ -664,13 +664,16 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
// naturally.
private boolean mInSizeCompatModeForBounds = false;
// Whether this activity is letterboxed for fixed orientation. If letterboxed due to fixed
// orientation then aspect ratio restrictions are also already respected.
// Bounds populated in resolveFixedOrientationConfiguration when this activity is letterboxed
// for fixed orientation. If not null, they are used as parent container in
// resolveSizeCompatModeConfiguration and in a constructor of CompatDisplayInsets. If
// letterboxed due to fixed orientation then aspect ratio restrictions are also respected.
// This happens when an activity has fixed orientation which doesn't match orientation of the
// parent because a display is ignoring orientation request or fixed to user rotation.
// See WindowManagerService#getIgnoreOrientationRequest and
// WindowManagerService#getFixedToUserRotation for more context.
private boolean mIsLetterboxedForFixedOrientationAndAspectRatio = false;
@Nullable
private Rect mLetterboxBoundsForFixedOrientationAndAspectRatio;
// activity is not displayed?
// TODO: rename to mNoDisplay
@@ -6863,7 +6866,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
}
// TODO(b/36505427): Consider moving this method and similar ones to ConfigurationContainer.
private void updateCompatDisplayInsets(@Nullable Rect fixedOrientationBounds) {
private void updateCompatDisplayInsets() {
if (mCompatDisplayInsets != null || !shouldCreateCompatDisplayInsets()) {
// The override configuration is set only once in size compatibility mode.
return;
@@ -6891,7 +6894,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
// The role of CompatDisplayInsets is like the override bounds.
mCompatDisplayInsets =
new CompatDisplayInsets(mDisplayContent, this, fixedOrientationBounds);
new CompatDisplayInsets(
mDisplayContent, this, mLetterboxBoundsForFixedOrientationAndAspectRatio);
}
@VisibleForTesting
@@ -6945,8 +6949,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|| windowingMode == WINDOWING_MODE_FULLSCREEN) {
resolveFixedOrientationConfiguration(newParentConfiguration);
}
final Rect fixedOrientationBounds = isLetterboxedForFixedOrientationAndAspectRatio()
? new Rect(resolvedConfig.windowConfiguration.getBounds()) : null;
if (mCompatDisplayInsets != null) {
resolveSizeCompatModeConfiguration(newParentConfiguration);
@@ -6966,7 +6968,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
}
if (mVisibleRequested) {
updateCompatDisplayInsets(fixedOrientationBounds);
updateCompatDisplayInsets();
}
// TODO(b/175212232): Consolidate position logic from each "resolve" method above here.
@@ -7001,7 +7003,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
* WindowManagerService#getIgnoreOrientationRequest} for more context.
*/
boolean isLetterboxedForFixedOrientationAndAspectRatio() {
return mIsLetterboxedForFixedOrientationAndAspectRatio;
return mLetterboxBoundsForFixedOrientationAndAspectRatio != null;
}
/**
@@ -7012,7 +7014,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
* in this methiod.
*/
private void resolveFixedOrientationConfiguration(@NonNull Configuration newParentConfig) {
mIsLetterboxedForFixedOrientationAndAspectRatio = false;
mLetterboxBoundsForFixedOrientationAndAspectRatio = null;
if (handlesOrientationChangeFromDescendant()) {
// No need to letterbox because of fixed orientation. Display will handle
// fixed-orientation requests.
@@ -7089,7 +7091,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
// Calculate app bounds using fixed orientation bounds because they will be needed later
// for comparison with size compat app bounds in {@link resolveSizeCompatModeConfiguration}.
task.computeConfigResourceOverrides(getResolvedOverrideConfiguration(), newParentConfig);
mIsLetterboxedForFixedOrientationAndAspectRatio = true;
mLetterboxBoundsForFixedOrientationAndAspectRatio = new Rect(resolvedBounds);
}
/**
@@ -7635,6 +7637,12 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
if (getConfiguration().equals(mTmpConfig) && !forceNewConfig && !displayChanged) {
ProtoLog.v(WM_DEBUG_CONFIGURATION, "Configuration & display "
+ "unchanged in %s", this);
// It's possible that resolveOverrideConfiguration was called before mVisibleRequested
// became true and mCompatDisplayInsets may not have been created so ensure
// that mCompatDisplayInsets is created here.
if (mVisibleRequested) {
updateCompatDisplayInsets();
}
return true;
}