diff options
| author | 2022-07-19 14:39:12 +0000 | |
|---|---|---|
| committer | 2022-07-19 14:39:12 +0000 | |
| commit | 7023f28bd0ffffdeea7542ff82adbdef11697768 (patch) | |
| tree | 3d330a21c51f150c770e2e7bdd3462b8cbdc8c80 | |
| parent | 0869abd8484af7966293b232ef63b7455c90797c (diff) | |
| parent | 494afca0bf7efd5943f8273a30051a05af466664 (diff) | |
Merge "Do not update visibility inside clearing task" into tm-qpr-dev
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityRecord.java | 4 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/TaskTests.java | 14 |
2 files changed, 17 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 3676ffb6336c..0a58044d66c6 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -3528,7 +3528,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } final boolean isCurrentVisible = mVisibleRequested || isState(PAUSED, STARTED); - if (updateVisibility && isCurrentVisible) { + if (updateVisibility && isCurrentVisible + // Avoid intermediate lifecycle change when launching with clearing task. + && !task.isClearingToReuseTask()) { boolean ensureVisibility = false; if (occludesParent(true /* includingFinishing */)) { // If the current activity is not opaque, we need to make sure the visibilities of diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskTests.java index e2fe1b175dc8..1f03039de72b 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskTests.java @@ -268,6 +268,20 @@ public class TaskTests extends WindowTestsBase { assertFalse(task.hasChild()); // In real case, the task should be preserved for adding new activity. assertTrue(task.isAttached()); + + final ActivityRecord activityA = new ActivityBuilder(mAtm).setTask(task).build(); + final ActivityRecord activityB = new ActivityBuilder(mAtm).setTask(task).build(); + final ActivityRecord activityC = new ActivityBuilder(mAtm).setTask(task).build(); + activityA.setState(ActivityRecord.State.STOPPED, "test"); + activityB.setState(ActivityRecord.State.PAUSED, "test"); + activityC.setState(ActivityRecord.State.RESUMED, "test"); + doReturn(true).when(activityB).shouldBeVisibleUnchecked(); + doReturn(true).when(activityC).shouldBeVisibleUnchecked(); + activityA.getConfiguration().densityDpi += 100; + assertTrue(task.performClearTop(activityA, 0 /* launchFlags */).finishing); + // The bottom activity should destroy directly without relaunch for config change. + assertEquals(ActivityRecord.State.DESTROYING, activityA.getState()); + verify(activityA, never()).startRelaunching(); } @Test |