From c1683f864b59241b540dc4422720af2c664be2d6 Mon Sep 17 00:00:00 2001 From: Evan Rosky Date: Mon, 29 Aug 2022 18:59:32 -0700 Subject: [PATCH] Report enterAnimationComplete when transient launch is committed Transient launches are not considered "visible-at-end" since their whole point is being only visible during the transition. If, however, the transition is "committed", we should still report enterAnimationComplete, so add an additional check for it. Bug: 243698723 Test: atest TransitionTests Change-Id: Ib33d1f7ef55a1da25bfc0e93db6d14d7ffcccbfc --- .../java/com/android/server/wm/Transition.java | 4 ++++ .../src/com/android/server/wm/TransitionTests.java | 14 +++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) 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