Vertically center SCM-eligible on warm launch

Currently, a landscape activity that is eligible for size compat
mode is vertically centered on cold launch, and when put into
size compat mode. Fix an issue introduced in a prior change,
where vertical centering is not applied on warm launch.

Bug: 207849112
Bug: 205682025
Test: atest com.android.server.wm.SizeCompatTests
Change-Id: Id72e6efae49963ac9b6dd89cbc8c99e3a85b67f2
This commit is contained in:
Naomi Musgrave
2021-11-29 13:09:50 +00:00
parent b0a2e9f742
commit 54d74e463f

View File

@@ -7922,9 +7922,17 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
// Above coordinates are in "@" space, now place "*" and "#" to screen space.
final boolean fillContainer = resolvedBounds.equals(containingBounds);
final int screenPosX = fillContainer ? containerBounds.left : containerAppBounds.left;
final int screenPosY = mSizeCompatBounds == null
// If the activity is not in size compat mode, calculate vertical centering
// from the container and resolved bounds.
// If the activity is in size compat mode, calculate vertical centering
// from the container and size compat bounds.
// The container bounds contain the parent bounds offset in the display, for
// example when an activity is in the lower split of split screen.
final int screenPosY = (mSizeCompatBounds == null
? (containerBounds.height() - resolvedBounds.height()) / 2
: (containerBounds.height() - mSizeCompatBounds.height()) / 2;
: (containerBounds.height() - mSizeCompatBounds.height()) / 2)
+ containerBounds.top;
if (screenPosX != 0 || screenPosY != 0) {
if (mSizeCompatBounds != null) {
mSizeCompatBounds.offset(screenPosX, screenPosY);