From bbe36a869743511594bc1c9723fdd65471bebb71 Mon Sep 17 00:00:00 2001 From: Shivam Agrawal Date: Tue, 16 Nov 2021 11:59:38 -0800 Subject: [PATCH] Do Not Report Activities that are Finishing ...in TaskFragment There may be a delay between when an activity is marked to finish and when the WM hierarchy actually removes the activity from the TaskFragment. In between this delay, the TaskFragmentInfo will change because the runningActivityCount will change, triggering an onTaskFragmentInfoChanged. This callback is unncessary because there will be another callback soon once the activity is removed from the hierarchy. Bug: b/205901017 Test: atest CtsWindowManagerJetpackTestCases:ActivityEmbeddingLaunchTests Change-Id: I64e08acc2a745f6f242996e99240fe4a8f0dea97 --- .../extensions/embedding/TaskFragmentContainer.java | 2 +- .../java/com/android/server/wm/TaskFragment.java | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentContainer.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentContainer.java index a1a53bc937811..4d2d0551d8284 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentContainer.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentContainer.java @@ -103,7 +103,7 @@ class TaskFragmentContainer { ActivityThread activityThread = ActivityThread.currentActivityThread(); for (IBinder token : mInfo.getActivities()) { Activity activity = activityThread.getActivity(token); - if (activity != null && !allActivities.contains(activity)) { + if (activity != null && !activity.isFinishing() && !allActivities.contains(activity)) { allActivities.add(activity); } } diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java index 0eaa25be30944..0a49a2c235666 100644 --- a/services/core/java/com/android/server/wm/TaskFragment.java +++ b/services/core/java/com/android/server/wm/TaskFragment.java @@ -2173,14 +2173,13 @@ class TaskFragment extends WindowContainer { TaskFragmentInfo getTaskFragmentInfo() { List childActivities = new ArrayList<>(); for (int i = 0; i < getChildCount(); i++) { - WindowContainer wc = getChildAt(i); - if (mTaskFragmentOrganizerUid != INVALID_UID - && wc.asActivityRecord() != null - && wc.asActivityRecord().info.processName.equals( - mTaskFragmentOrganizerProcessName) - && wc.asActivityRecord().getUid() == mTaskFragmentOrganizerUid) { + final WindowContainer wc = getChildAt(i); + final ActivityRecord ar = wc.asActivityRecord(); + if (mTaskFragmentOrganizerUid != INVALID_UID && ar != null + && ar.info.processName.equals(mTaskFragmentOrganizerProcessName) + && ar.getUid() == mTaskFragmentOrganizerUid && !ar.finishing) { // Only includes Activities that belong to the organizer process for security. - childActivities.add(wc.asActivityRecord().token); + childActivities.add(ar.token); } } final Point positionInParent = new Point();