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:
@@ -5728,7 +5728,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
||||
}
|
||||
|
||||
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
|
||||
// return to original top). Only clear the top launching record without finishing
|
||||
// the transform immediately because it won't affect display orientation. And before
|
||||
|
||||
@@ -393,23 +393,25 @@ public class RecentsAnimationControllerTest extends WindowTestsBase {
|
||||
// Simulate giving up the swipe up gesture to keep the original activity as top.
|
||||
mController.cleanupAnimation(REORDER_MOVE_TO_ORIGINAL_POSITION);
|
||||
// The rotation transform should be cleared after updating orientation with display.
|
||||
assertFalse(activity.hasFixedRotationTransform());
|
||||
assertFalse(mDefaultDisplay.hasTopFixedRotationLaunchingApp());
|
||||
assertTopFixedRotationLaunchingAppCleared(activity);
|
||||
|
||||
// Simulate swiping up recents (home) in different rotation.
|
||||
final ActivityRecord home = mDefaultDisplay.getDefaultTaskDisplayArea().getHomeActivity();
|
||||
mDefaultDisplay.setFixedRotationLaunchingApp(home, (mDefaultDisplay.getRotation() + 1) % 4);
|
||||
mController = new RecentsAnimationController(mWm, mMockRunner, mAnimationCallbacks,
|
||||
mDefaultDisplay.getDisplayId());
|
||||
initializeRecentsAnimationController(mController, home);
|
||||
assertTrue(home.hasFixedRotationTransform());
|
||||
startRecentsInDifferentRotation(home);
|
||||
|
||||
// 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).
|
||||
home.setVisible(false);
|
||||
mController.cleanupAnimation(REORDER_MOVE_TO_ORIGINAL_POSITION);
|
||||
// Although there won't be a transition finish callback, the fixed rotation must be cleared.
|
||||
assertFalse(home.hasFixedRotationTransform());
|
||||
assertFalse(mDefaultDisplay.hasTopFixedRotationLaunchingApp());
|
||||
assertTopFixedRotationLaunchingAppCleared(home);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -503,6 +505,21 @@ public class RecentsAnimationControllerTest extends WindowTestsBase {
|
||||
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,
|
||||
ActivityRecord activity) {
|
||||
controller.initialize(activity.getActivityType(), new SparseBooleanArray(), activity);
|
||||
|
||||
Reference in New Issue
Block a user