diff options
| author | 2021-03-30 23:14:38 +0000 | |
|---|---|---|
| committer | 2021-03-30 23:14:38 +0000 | |
| commit | a5c4ed8c7d5436af5d54fb0006866da5e1e44ea0 (patch) | |
| tree | 6dc96e050404a9be3005e354eea3b1fbc65b4c70 | |
| parent | 5ec8620a0bdba7d1bdea17b6fc2f588b6d582ce6 (diff) | |
| parent | 7d388ab840d2b9b7ffa4fb4931eefdce0fab99d3 (diff) | |
Merge "Fix trigger-task reporting when finishing a task" into sc-dev
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityRecord.java | 7 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java | 21 |
2 files changed, 28 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index eadfbe2c4ac0..f0c4a1565bfe 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -2880,6 +2880,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A mAtmService.deferWindowLayout(); try { + final Transition newTransition = (!mAtmService.getTransitionController().isCollecting() + && mAtmService.getTransitionController().getTransitionPlayer() != null) + ? mAtmService.getTransitionController().createTransition(TRANSIT_CLOSE) : null; makeFinishingLocked(); // Make a local reference to its task since this.task could be set to null once this // activity is destroyed and detached from task. @@ -2911,6 +2914,10 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A final boolean endTask = task.getTopNonFinishingActivity() == null && !task.isClearingToReuseTask(); final int transit = endTask ? TRANSIT_OLD_TASK_CLOSE : TRANSIT_OLD_ACTIVITY_CLOSE; + if (newTransition != null) { + mAtmService.getTransitionController().requestStartTransition(newTransition, + endTask ? task : null, null /* remote */); + } if (isState(RESUMED)) { if (endTask) { mAtmService.getTaskChangeNotificationController().notifyTaskRemovalStarted( diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java index 96ebd2460342..027c2f7be05d 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java @@ -1033,6 +1033,27 @@ public class ActivityRecordTests extends WindowTestsBase { } /** + * Verify that finish request for the last activity in a task will request a shell transition + * with that task as a trigger. + */ + @Test + public void testFinishActivityIfPossible_lastInTaskRequestsTransitionWithTrigger() { + // Set-up mock shell transitions + final TestTransitionPlayer testPlayer = new TestTransitionPlayer( + mAtm.getTransitionController(), mAtm.mWindowOrganizerController); + mAtm.getTransitionController().registerTransitionPlayer(testPlayer); + + final ActivityRecord activity = createActivityWithTask(); + activity.finishing = false; + activity.mVisibleRequested = true; + activity.setState(RESUMED, "test"); + activity.finishIfPossible("test", false /* oomAdj */); + + verify(activity).setVisibility(eq(false)); + assertEquals(activity.getTask().mTaskId, testPlayer.mLastRequest.getTriggerTask().taskId); + } + + /** * Verify that complete finish request for non-finishing activity is invalid. */ @Test(expected = IllegalArgumentException.class) |