summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Evan Rosky <erosky@google.com> 2021-03-30 23:14:38 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-03-30 23:14:38 +0000
commita5c4ed8c7d5436af5d54fb0006866da5e1e44ea0 (patch)
tree6dc96e050404a9be3005e354eea3b1fbc65b4c70
parent5ec8620a0bdba7d1bdea17b6fc2f588b6d582ce6 (diff)
parent7d388ab840d2b9b7ffa4fb4931eefdce0fab99d3 (diff)
Merge "Fix trigger-task reporting when finishing a task" into sc-dev
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java7
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java21
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)