Merge "Consider requested orientation for snapshot compatible" into tm-dev

This commit is contained in:
Riddle Hsu
2022-04-25 05:43:47 +00:00
committed by Android (Google) Code Review
2 changed files with 35 additions and 11 deletions

View File

@@ -2452,20 +2452,29 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
// Obsoleted snapshot.
return false;
}
final Rect taskBounds = task.getBounds();
final Point taskSize = snapshot.getTaskSize();
// Task size has changed? e.g. foldable device.
if (Math.abs(((float) taskSize.x / Math.max(taskSize.y, 1))
- ((float) taskBounds.width() / Math.max(taskBounds.height(), 1))) > 0.01f) {
return false;
}
final int rotation = mDisplayContent.rotationForActivityInDifferentOrientation(this);
final int currentRotation = task.getWindowConfiguration().getRotation();
final int targetRotation = rotation != ROTATION_UNDEFINED
// The display may rotate according to the orientation of this activity.
? rotation
// The activity won't change display orientation.
: task.getWindowConfiguration().getRotation();
return snapshot.getRotation() == targetRotation;
: currentRotation;
if (snapshot.getRotation() != targetRotation) {
return false;
}
final Rect taskBounds = task.getBounds();
int w = taskBounds.width();
int h = taskBounds.height();
final Point taskSize = snapshot.getTaskSize();
if ((Math.abs(currentRotation - targetRotation) % 2) == 1) {
// Flip the size if the activity will show in 90 degree difference.
final int t = w;
w = h;
h = t;
}
// Task size might be changed with the same rotation such as on a foldable device.
return Math.abs(((float) taskSize.x / Math.max(taskSize.y, 1))
- ((float) w / Math.max(h, 1))) <= 0.01f;
}
/**

View File

@@ -1896,10 +1896,13 @@ public class ActivityRecordTests extends WindowTestsBase {
final ActivityRecord activity = createActivityWithTask();
final Task task = activity.getTask();
final Rect taskBounds = task.getBounds();
final int currentRotation = mDisplayContent.getRotation();
final int w = taskBounds.width();
final int h = taskBounds.height();
final TaskSnapshot snapshot = new TaskSnapshotPersisterTestBase.TaskSnapshotBuilder()
.setTopActivityComponent(activity.mActivityComponent)
.setRotation(activity.getWindowConfiguration().getRotation())
.setTaskSize(taskBounds.width(), taskBounds.height())
.setRotation(currentRotation)
.setTaskSize(w, h)
.build();
assertTrue(activity.isSnapshotCompatible(snapshot));
@@ -1909,6 +1912,18 @@ public class ActivityRecordTests extends WindowTestsBase {
activity.getWindowConfiguration().setBounds(taskBounds);
assertFalse(activity.isSnapshotCompatible(snapshot));
// Flipped size should be accepted if the activity will show with 90 degree rotation.
final int targetRotation = currentRotation + 1;
doReturn(targetRotation).when(mDisplayContent)
.rotationForActivityInDifferentOrientation(any());
final TaskSnapshot rotatedSnapshot = new TaskSnapshotPersisterTestBase.TaskSnapshotBuilder()
.setTopActivityComponent(activity.mActivityComponent)
.setRotation(targetRotation)
.setTaskSize(h, w)
.build();
task.getWindowConfiguration().getBounds().set(0, 0, w, h);
assertTrue(activity.isSnapshotCompatible(rotatedSnapshot));
}
@Test