From 9c606e2740d48713eb1a45d477d94d1bbc0e2108 Mon Sep 17 00:00:00 2001 From: Chris Li Date: Sat, 21 Aug 2021 12:25:57 -0700 Subject: [PATCH] getActivityTokenBelow should exclude finishing activity This method was introduced in ag/15302841 to check the new launch activity and the activity below. However, when launching an activity into split, the organizer may also call to finish existing activity in split. We don't want to check the split rule with a finishing activity. Bug: 190433398 Test: test with demo app Change-Id: I7f604ddea7c2f68adc3cee52b8872e653d5dad98 --- core/java/android/app/ActivityClient.java | 3 ++- .../java/com/android/server/wm/ActivityClientController.java | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/core/java/android/app/ActivityClient.java b/core/java/android/app/ActivityClient.java index 2efdf51612c7e..db7ab1a6f3799 100644 --- a/core/java/android/app/ActivityClient.java +++ b/core/java/android/app/ActivityClient.java @@ -207,7 +207,8 @@ public class ActivityClient { } /** - * Returns the activity token below in the same task if it belongs to the same process. + * Returns the non-finishing activity token below in the same task if it belongs to the same + * process. */ @Nullable public IBinder getActivityTokenBelow(IBinder activityToken) { diff --git a/services/core/java/com/android/server/wm/ActivityClientController.java b/services/core/java/com/android/server/wm/ActivityClientController.java index 043e2dd070870..cc0db1d12e7b0 100644 --- a/services/core/java/com/android/server/wm/ActivityClientController.java +++ b/services/core/java/com/android/server/wm/ActivityClientController.java @@ -554,7 +554,9 @@ class ActivityClientController extends IActivityClientController.Stub { if (ar == null) { return null; } - final ActivityRecord below = ar.getTask().getActivityBelow(ar); + // Exclude finishing activity. + final ActivityRecord below = ar.getTask().getActivity((r) -> !r.finishing, + ar, false /*includeBoundary*/, true /*traverseTopToBottom*/); if (below != null && below.getUid() == ar.getUid()) { return below.appToken.asBinder(); }