diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index 8e389d30ffe1a..d9109dd0f46e8 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -728,6 +728,10 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe if (mChanges.get(ar).mVisible != visibleAtTransitionEnd) { // Legacy dispatch relies on this (for now). ar.mEnteringAnimation = visibleAtTransitionEnd; + } else if (mTransientLaunches != null && mTransientLaunches.containsKey(ar) + && ar.isVisible()) { + // Transient launch was committed, so report enteringAnimation + ar.mEnteringAnimation = true; } continue; } 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 4f68e98094732..041db55dc1853 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java @@ -962,8 +962,17 @@ public class TransitionTests extends WindowTestsBase { @Test public void testTransientLaunch() { final TaskSnapshotController snapshotController = mock(TaskSnapshotController.class); + final ArrayList enteringAnimReports = new ArrayList<>(); final TransitionController controller = new TransitionController(mAtm, snapshotController, - mock(TransitionTracer.class)); + mock(TransitionTracer.class)) { + @Override + protected void dispatchLegacyAppTransitionFinished(ActivityRecord ar) { + if (ar.mEnteringAnimation) { + enteringAnimReports.add(ar); + } + super.dispatchLegacyAppTransitionFinished(ar); + } + }; final ITransitionPlayer player = new ITransitionPlayer.Default(); controller.registerTransitionPlayer(player, null /* playerProc */); final Transition openTransition = controller.createTransition(TRANSIT_OPEN); @@ -1008,6 +1017,7 @@ public class TransitionTests extends WindowTestsBase { activity1.mVisibleRequested = false; activity2.mVisibleRequested = true; + activity2.setVisible(true); // Using abort to force-finish the sync (since we obviously can't wait for drawing). // We didn't call abort on the actual transition, so it will still run onTransactionReady @@ -1018,9 +1028,11 @@ public class TransitionTests extends WindowTestsBase { // called until finish). verify(snapshotController, times(0)).recordTaskSnapshot(eq(task1), eq(false)); + enteringAnimReports.clear(); closeTransition.finishTransition(); verify(snapshotController, times(1)).recordTaskSnapshot(eq(task1), eq(false)); + assertTrue(enteringAnimReports.contains(activity2)); } @Test