summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Riddle Hsu <riddlehsu@google.com> 2022-07-19 14:39:12 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-07-19 14:39:12 +0000
commit7023f28bd0ffffdeea7542ff82adbdef11697768 (patch)
tree3d330a21c51f150c770e2e7bdd3462b8cbdc8c80
parent0869abd8484af7966293b232ef63b7455c90797c (diff)
parent494afca0bf7efd5943f8273a30051a05af466664 (diff)
Merge "Do not update visibility inside clearing task" into tm-qpr-dev
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java4
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TaskTests.java14
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