summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author wilsonshih <wilsonshih@google.com> 2024-05-30 16:08:20 +0800
committer wilsonshih <wilsonshih@google.com> 2024-05-30 16:08:20 +0800
commitbdcf13a15ebdd2ed885f32184e9962c15e08c466 (patch)
treeac33a722ad7fe83a403524ca7978041e72d8b91f
parentec19f1f4b72d146f1d7dc08dfba43a2d55cace60 (diff)
Post clean up starting window related data.
When Core request to add another starting window to the same task, shell will remove previous starting window if any. Also clear related data so the mStartingData won't be reused to create another starting window. Bug: 341054451 Test: atest ActivityRecordTests Change-Id: Ibc507a9cf841d620c3c53a57da4becdd4ef1a491
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java13
2 files changed, 15 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 e0e61fd52812..8ad6b7817f4f 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -7642,6 +7642,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
// This could only happen when the window is removed from hierarchy. So do not keep its
// reference anymore.
mStartingWindow = null;
+ mStartingData = null;
+ mStartingSurface = null;
}
if (mChildren.size() == 0 && mVisibleSetFromTransferredStartingWindow) {
// We set the visible state to true for the token from a transferred starting
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 70319754253b..83a528d3cc61 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
@@ -2745,6 +2745,19 @@ public class ActivityRecordTests extends WindowTestsBase {
assertNoStartingWindow(activity);
}
+ @Test
+ public void testPostCleanupStartingWindow() {
+ registerTestStartingWindowOrganizer();
+ final ActivityRecord activity = new ActivityBuilder(mAtm).setCreateTask(true).build();
+ activity.addStartingWindow(mPackageName, android.R.style.Theme, null, true, true, false,
+ true, false, false, false);
+ waitUntilHandlersIdle();
+ assertHasStartingWindow(activity);
+ // Simulate Shell remove starting window actively.
+ activity.mStartingWindow.removeImmediately();
+ assertNoStartingWindow(activity);
+ }
+
private void testLegacySplashScreen(int targetSdk, int verifyType) {
final ActivityRecord activity = new ActivityBuilder(mAtm).setCreateTask(true).build();
activity.mTargetSdk = targetSdk;