Loading services/core/java/com/android/server/wm/Task.java +9 −3 Original line number Diff line number Diff line Loading @@ -1606,9 +1606,15 @@ class Task extends TaskFragment { } else { forAllActivities((r) -> { if (r.finishing) return; // TODO: figure-out how to avoid object creation due to capture of reason variable. r.finishIfPossible(Activity.RESULT_CANCELED, null /* resultData */, null /* resultGrants */, reason, false /* oomAdj */); // Prevent the transition from being executed too early if the top activity is // resumed but the mVisibleRequested of any other activity is true, the transition // should wait until next activity resumed. if (r.isState(RESUMED) || (r.isVisible() && !mDisplayContent.mAppTransition.containsTransitRequest(TRANSIT_CLOSE))) { r.finishIfPossible(reason, false /* oomAdj */); } else { r.destroyIfPossible(reason); } }); } } Loading services/tests/wmtests/src/com/android/server/wm/AppTransitionControllerTest.java +14 −0 Original line number Diff line number Diff line Loading @@ -102,6 +102,20 @@ public class AppTransitionControllerTest extends WindowTestsBase { mDisplayContent.mChangingContainers, null, null, false)); } @Test public void testClearTaskSkipAppExecuteTransition() { final ActivityRecord behind = createActivityRecord(mDisplayContent, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD); final Task task = behind.getTask(); final ActivityRecord top = createActivityRecord(task); top.setState(ActivityRecord.State.RESUMED, "test"); behind.setState(ActivityRecord.State.STARTED, "test"); behind.mVisibleRequested = true; task.performClearTask("test"); assertFalse(mDisplayContent.mAppTransition.isReady()); } @Test public void testTranslucentOpen() { final ActivityRecord behind = createActivityRecord(mDisplayContent, Loading Loading
services/core/java/com/android/server/wm/Task.java +9 −3 Original line number Diff line number Diff line Loading @@ -1606,9 +1606,15 @@ class Task extends TaskFragment { } else { forAllActivities((r) -> { if (r.finishing) return; // TODO: figure-out how to avoid object creation due to capture of reason variable. r.finishIfPossible(Activity.RESULT_CANCELED, null /* resultData */, null /* resultGrants */, reason, false /* oomAdj */); // Prevent the transition from being executed too early if the top activity is // resumed but the mVisibleRequested of any other activity is true, the transition // should wait until next activity resumed. if (r.isState(RESUMED) || (r.isVisible() && !mDisplayContent.mAppTransition.containsTransitRequest(TRANSIT_CLOSE))) { r.finishIfPossible(reason, false /* oomAdj */); } else { r.destroyIfPossible(reason); } }); } } Loading
services/tests/wmtests/src/com/android/server/wm/AppTransitionControllerTest.java +14 −0 Original line number Diff line number Diff line Loading @@ -102,6 +102,20 @@ public class AppTransitionControllerTest extends WindowTestsBase { mDisplayContent.mChangingContainers, null, null, false)); } @Test public void testClearTaskSkipAppExecuteTransition() { final ActivityRecord behind = createActivityRecord(mDisplayContent, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD); final Task task = behind.getTask(); final ActivityRecord top = createActivityRecord(task); top.setState(ActivityRecord.State.RESUMED, "test"); behind.setState(ActivityRecord.State.STARTED, "test"); behind.mVisibleRequested = true; task.performClearTask("test"); assertFalse(mDisplayContent.mAppTransition.isReady()); } @Test public void testTranslucentOpen() { final ActivityRecord behind = createActivityRecord(mDisplayContent, Loading