From ec4f83ae26810db5d92331e70279c5df76aa9750 Mon Sep 17 00:00:00 2001 From: Riddle Hsu Date: Fri, 25 Oct 2024 15:59:18 +0800 Subject: Collect transition participant when moving to a different display So the transition has a chance to reset the crop according to the latest bounds. Or play corresponding animation even if the container configuration is not changed. Fix: 373410849 Flag: EXEMPT bugfix Test: atest TransitionTests#testCollectReparentChange Change-Id: Iba774557bb5ed8774d8e6b5c0bc72e8761628da6 --- services/core/java/com/android/server/wm/ActivityRecord.java | 2 -- services/core/java/com/android/server/wm/WindowContainer.java | 1 + .../tests/wmtests/src/com/android/server/wm/TransitionTests.java | 5 +++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 460de01a7d1d..b967f0bd028f 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -1792,8 +1792,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } prevDc.onRunningActivityChanged(); - // TODO(b/169035022): move to a more-appropriate place. - mTransitionController.collect(this); if (prevDc.mOpeningApps.remove(this)) { // Transfer opening transition to new display. mDisplayContent.mOpeningApps.add(this); diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index 95cf6bc3b771..6c92ae6bb3e7 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -1117,6 +1117,7 @@ class WindowContainer extends ConfigurationContainer< */ void onDisplayChanged(DisplayContent dc) { if (mDisplayContent != null && mDisplayContent != dc) { + mTransitionController.collect(this); // Cancel any change transition queued-up for this container on the old display when // this container is moved from the old display. mDisplayContent.mClosingChangingContainers.remove(this); diff --git a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java index 7196acc8ec2e..e8779c2b9ead 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java @@ -2354,6 +2354,11 @@ public class TransitionTests extends WindowTestsBase { // ChangeInfo#mCommonAncestor should be set after reparent. final Transition.ChangeInfo change = transition.mChanges.get(activity); assertEquals(newParent.getDisplayArea(), change.mCommonAncestor); + + // WindowContainer#onDisplayChanged should collect the moved task. + final DisplayContent newDisplay = createNewDisplay(); + newParent.reparent(newDisplay.getDefaultTaskDisplayArea(), true /* onTop */); + assertTrue(transition.mParticipants.contains(newParent)); } @Test -- cgit v1.2.3-59-g8ed1b