Merge "Clear fixed rotation if rotated recents activity becomes top" into rvc-qpr-dev am: 5c2d5cda50

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

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: Ifff95325484c5f6cb6c0d45845749c7ba5b20b65
This commit is contained in:
Riddle Hsu
2020-12-16 06:13:31 +00:00
committed by Automerger Merge Worker
2 changed files with 27 additions and 10 deletions

View File

@@ -5728,7 +5728,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
} }
if (animatingRecents != null && animatingRecents == mFixedRotationLaunchingApp if (animatingRecents != null && animatingRecents == mFixedRotationLaunchingApp
&& animatingRecents.isVisible()) { && animatingRecents.isVisible() && animatingRecents != topRunningActivity()) {
// The recents activity should be going to be invisible (switch to another app or // The recents activity should be going to be invisible (switch to another app or
// return to original top). Only clear the top launching record without finishing // return to original top). Only clear the top launching record without finishing
// the transform immediately because it won't affect display orientation. And before // the transform immediately because it won't affect display orientation. And before

View File

@@ -393,23 +393,25 @@ public class RecentsAnimationControllerTest extends WindowTestsBase {
// Simulate giving up the swipe up gesture to keep the original activity as top. // Simulate giving up the swipe up gesture to keep the original activity as top.
mController.cleanupAnimation(REORDER_MOVE_TO_ORIGINAL_POSITION); mController.cleanupAnimation(REORDER_MOVE_TO_ORIGINAL_POSITION);
// The rotation transform should be cleared after updating orientation with display. // The rotation transform should be cleared after updating orientation with display.
assertFalse(activity.hasFixedRotationTransform()); assertTopFixedRotationLaunchingAppCleared(activity);
assertFalse(mDefaultDisplay.hasTopFixedRotationLaunchingApp());
// Simulate swiping up recents (home) in different rotation. // Simulate swiping up recents (home) in different rotation.
final ActivityRecord home = mDefaultDisplay.getDefaultTaskDisplayArea().getHomeActivity(); final ActivityRecord home = mDefaultDisplay.getDefaultTaskDisplayArea().getHomeActivity();
mDefaultDisplay.setFixedRotationLaunchingApp(home, (mDefaultDisplay.getRotation() + 1) % 4); startRecentsInDifferentRotation(home);
mController = new RecentsAnimationController(mWm, mMockRunner, mAnimationCallbacks,
mDefaultDisplay.getDisplayId());
initializeRecentsAnimationController(mController, home);
assertTrue(home.hasFixedRotationTransform());
// If the recents activity becomes the top running activity (e.g. the original top activity
// is either finishing or moved to back during recents animation), the display orientation
// will be determined by it so the fixed rotation must be cleared.
activity.finishing = true;
mController.cleanupAnimation(REORDER_MOVE_TO_ORIGINAL_POSITION);
assertTopFixedRotationLaunchingAppCleared(home);
startRecentsInDifferentRotation(home);
// Assume recents activity becomes invisible for some reason (e.g. screen off). // Assume recents activity becomes invisible for some reason (e.g. screen off).
home.setVisible(false); home.setVisible(false);
mController.cleanupAnimation(REORDER_MOVE_TO_ORIGINAL_POSITION); mController.cleanupAnimation(REORDER_MOVE_TO_ORIGINAL_POSITION);
// Although there won't be a transition finish callback, the fixed rotation must be cleared. // Although there won't be a transition finish callback, the fixed rotation must be cleared.
assertFalse(home.hasFixedRotationTransform()); assertTopFixedRotationLaunchingAppCleared(home);
assertFalse(mDefaultDisplay.hasTopFixedRotationLaunchingApp());
} }
@Test @Test
@@ -503,6 +505,21 @@ public class RecentsAnimationControllerTest extends WindowTestsBase {
return homeActivity; return homeActivity;
} }
private void startRecentsInDifferentRotation(ActivityRecord recentsActivity) {
final DisplayContent displayContent = recentsActivity.mDisplayContent;
displayContent.setFixedRotationLaunchingApp(recentsActivity,
(displayContent.getRotation() + 1) % 4);
mController = new RecentsAnimationController(mWm, mMockRunner, mAnimationCallbacks,
displayContent.getDisplayId());
initializeRecentsAnimationController(mController, recentsActivity);
assertTrue(recentsActivity.hasFixedRotationTransform());
}
private static void assertTopFixedRotationLaunchingAppCleared(ActivityRecord activity) {
assertFalse(activity.hasFixedRotationTransform());
assertFalse(activity.mDisplayContent.hasTopFixedRotationLaunchingApp());
}
private static void initializeRecentsAnimationController(RecentsAnimationController controller, private static void initializeRecentsAnimationController(RecentsAnimationController controller,
ActivityRecord activity) { ActivityRecord activity) {
controller.initialize(activity.getActivityType(), new SparseBooleanArray(), activity); controller.initialize(activity.getActivityType(), new SparseBooleanArray(), activity);