summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Riddle Hsu <riddlehsu@google.com> 2023-08-18 18:20:42 +0800
committer Riddle Hsu <riddlehsu@google.com> 2023-08-18 12:49:12 +0000
commit352aa3d13c8566c114b3fdd4233927a27889c42f (patch)
treefd4797724ebadb211d840313185431c6a184c342
parent558f38ac48c4b224e67447764c31a0bcf1ccf6db (diff)
Remove host activity association when removing EmbeddedWindow
The common steps to destroy an activity is first to remove its window and then the activity record. So if EmbeddedWindow is removed when removing the window, onActivityRemoved won't be able to match. If an ActivityRecord is removed, its window will also be removed. So it can simply clean the host records when removing EmbeddedWindow. Bug: 296535363 Test: Launch "Wallpaper & style" from home several times. > adb shell dumpsys activity p | grep -A2 "Remote Activities" The output should only show one record per owner process. And then remove the task from recents. > adb shell dumpsys activity p | grep "Remote Activities" The output should be empty. Change-Id: Iebe96417ed5be1832995ad7649408c28e6c0f58c
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java1
-rw-r--r--services/core/java/com/android/server/wm/EmbeddedWindowController.java20
2 files changed, 7 insertions, 14 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 5a6851ea196c..37e4902d9d8e 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -4364,7 +4364,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
// Reset the last saved PiP snap fraction on removal.
mDisplayContent.mPinnedTaskController.onActivityHidden(mActivityComponent);
mDisplayContent.onRunningActivityChanged();
- mWmService.mEmbeddedWindowController.onActivityRemoved(this);
mRemovingFromDisplay = false;
}
diff --git a/services/core/java/com/android/server/wm/EmbeddedWindowController.java b/services/core/java/com/android/server/wm/EmbeddedWindowController.java
index 98027bbed37f..c9bae127b800 100644
--- a/services/core/java/com/android/server/wm/EmbeddedWindowController.java
+++ b/services/core/java/com/android/server/wm/EmbeddedWindowController.java
@@ -135,19 +135,6 @@ class EmbeddedWindowController {
return mWindowsByWindowToken.get(windowToken);
}
- void onActivityRemoved(ActivityRecord activityRecord) {
- for (int i = mWindows.size() - 1; i >= 0; i--) {
- final EmbeddedWindow window = mWindows.valueAt(i);
- if (window.mHostActivityRecord == activityRecord) {
- final WindowProcessController processController =
- mAtmService.getProcessController(window.mOwnerPid, window.mOwnerUid);
- if (processController != null) {
- processController.removeHostActivity(activityRecord);
- }
- }
- }
- }
-
static class EmbeddedWindow implements InputTarget {
final IWindow mClient;
@Nullable final WindowState mHostWindowState;
@@ -230,6 +217,13 @@ class EmbeddedWindowController {
mInputChannel.dispose();
mInputChannel = null;
}
+ if (mHostActivityRecord != null) {
+ final WindowProcessController wpc =
+ mWmService.mAtmService.getProcessController(mOwnerPid, mOwnerUid);
+ if (wpc != null) {
+ wpc.removeHostActivity(mHostActivityRecord);
+ }
+ }
}
@Override