Merge "Notify client to clear intermediate rotated adjustments" into sc-dev am: e672bf134d

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

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I2efe7ae79afa11b00d33554b7603781dbe2da552
This commit is contained in:
Riddle Hsu
2021-02-22 04:35:41 +00:00
committed by Automerger Merge Worker
3 changed files with 10 additions and 9 deletions

View File

@@ -1572,12 +1572,12 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
}
final int rotation = rotationForActivityInDifferentOrientation(r);
if (rotation == ROTATION_UNDEFINED) {
// The display rotation won't be changed by current top activity. If there was fixed
// rotation activity, its rotated state should be cleared to cancel the adjustments.
if (hasTopFixedRotationLaunchingApp()
// Avoid breaking recents animation.
&& !mFixedRotationLaunchingApp.getTask().isAnimatingByRecents()) {
clearFixedRotationLaunchingApp();
// The display rotation won't be changed by current top activity. The client side
// adjustments of previous rotated activity should be cleared earlier. Otherwise if
// the current top is in the same process, it may get the rotated state. The transform
// will be cleared later with transition callback to ensure smooth animation.
if (hasTopFixedRotationLaunchingApp()) {
mFixedRotationLaunchingApp.notifyFixedRotationTransform(false /* enabled */);
}
return false;
}

View File

@@ -549,7 +549,7 @@ class WindowToken extends WindowContainer<WindowState> {
}
/** Notifies application side to enable or disable the rotation adjustment of display info. */
private void notifyFixedRotationTransform(boolean enabled) {
void notifyFixedRotationTransform(boolean enabled) {
FixedRotationAdjustments adjustments = null;
// A token may contain windows of the same processes or different processes. The list is
// used to avoid sending the same adjustments to a process multiple times.

View File

@@ -1489,7 +1489,7 @@ public class DisplayContentTests extends WindowTestsBase {
}
@Test
public void testClearIntermediateFixedRotation() throws RemoteException {
public void testClearIntermediateFixedRotationAdjustments() throws RemoteException {
final ActivityRecord activity = new ActivityBuilder(mAtm).setCreateTask(true).build();
mDisplayContent.setFixedRotationLaunchingApp(activity,
(mDisplayContent.getRotation() + 1) % 4);
@@ -1508,7 +1508,8 @@ public class DisplayContentTests extends WindowTestsBase {
ArgumentCaptor.forClass(FixedRotationAdjustmentsItem.class);
verify(mAtm.getLifecycleManager(), atLeastOnce()).scheduleTransaction(
eq(activity.app.getThread()), adjustmentsCaptor.capture());
assertFalse(activity.hasFixedRotationTransform());
// The transformation is kept for animation in real case.
assertTrue(activity.hasFixedRotationTransform());
final FixedRotationAdjustmentsItem clearAdjustments = FixedRotationAdjustmentsItem.obtain(
activity.token, null /* fixedRotationAdjustments */);
// The captor may match other items. The first one must be the item to clear adjustments.