Loading services/core/java/com/android/server/wm/ActivityRecord.java +7 −0 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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( Loading services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +21 −0 Original line number Diff line number Diff line Loading @@ -1032,6 +1032,27 @@ public class ActivityRecordTests extends WindowTestsBase { verify(activity.mDisplayContent, never()).prepareAppTransition(eq(TRANSIT_CLOSE)); } /** * 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. */ Loading Loading
services/core/java/com/android/server/wm/ActivityRecord.java +7 −0 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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( Loading
services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +21 −0 Original line number Diff line number Diff line Loading @@ -1032,6 +1032,27 @@ public class ActivityRecordTests extends WindowTestsBase { verify(activity.mDisplayContent, never()).prepareAppTransition(eq(TRANSIT_CLOSE)); } /** * 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. */ Loading