summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java3
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java15
2 files changed, 17 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 946d797b8348..6e662a7232ea 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -5703,7 +5703,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
return;
}
- if (animatingRecents != null && animatingRecents == mFixedRotationLaunchingApp) {
+ if (animatingRecents != null && animatingRecents == mFixedRotationLaunchingApp
+ && animatingRecents.isVisible()) {
// 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
diff --git a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java
index f2771175b523..730e9beecf77 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java
@@ -395,6 +395,21 @@ public class RecentsAnimationControllerTest extends WindowTestsBase {
// The rotation transform should be cleared after updating orientation with display.
assertFalse(activity.hasFixedRotationTransform());
assertFalse(mDefaultDisplay.hasTopFixedRotationLaunchingApp());
+
+ // 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());
+
+ // 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());
}
@Test