Loading services/core/java/com/android/server/wm/DisplayContent.java +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java +26 −9 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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); Loading Loading
services/core/java/com/android/server/wm/DisplayContent.java +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java +26 −9 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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); Loading