From 32e0508252b9fcc79e3271b312b49a80ec59a655 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 Merged-In: Id773ac3f0afea198ad4f8b4594d7a4cf0ad98ea8 --- .../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 f32ab1e53318d..381fa25d183fd 100644 --- a/services/core/java/com/android/server/wm/TaskFragment.java +++ b/services/core/java/com/android/server/wm/TaskFragment.java @@ -2171,14 +2171,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().appToken); + childActivities.add(ar.appToken); } } final Point positionInParent = new Point();