diff options
author | Gaurav Bhola <gauravbhola@google.com> | 2023-11-02 16:21:40 -0700 |
---|---|---|
committer | Gaurav Bhola <gauravbhola@google.com> | 2023-11-16 21:20:09 +0000 |
commit | 4f273cda1c1fe20cdead01b1de31653254dbdafb (patch) | |
tree | e8aab3b76a280bde5b93ac68f0aece375156e4b2 | |
parent | 48837535a0fc6ccd7c5e56f24de4cd477068727c (diff) | |
download | services-4f273cda1c1fe20cdead01b1de31653254dbdafb.tar.gz |
Handle the case where root task could be null.
- If a root task is quickly destroyed, conerting its token to task
object will return null.
- Handle that case as it happens in a few Activity related tests.
Bug: 297060765
Bug: 299972488
Test: atest AssistantStackTests
Test: atest StartActivityTests
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:f384fa30fbf13ec5b1721bc0e52e1065be4cbed2)
Merged-In: I179055fd434656c8116661b9f39adfdcef249ce7
Change-Id: I179055fd434656c8116661b9f39adfdcef249ce7
3 files changed, 8 insertions, 2 deletions
diff --git a/builtInServices/api/module-lib-current.txt b/builtInServices/api/module-lib-current.txt index f72c56d..b6e285f 100644 --- a/builtInServices/api/module-lib-current.txt +++ b/builtInServices/api/module-lib-current.txt @@ -142,7 +142,7 @@ package com.android.server.wm { } public final class TaskWrapper { - method public static com.android.server.wm.TaskWrapper createFromToken(@NonNull android.os.IBinder); + method @Nullable public static com.android.server.wm.TaskWrapper createFromToken(@NonNull android.os.IBinder); method public com.android.server.wm.TaskWrapper getRootTask(); method public com.android.server.wm.TaskDisplayAreaWrapper getTaskDisplayArea(); method public int getUserId(); diff --git a/builtInServices/src/com/android/server/wm/TaskWrapper.java b/builtInServices/src/com/android/server/wm/TaskWrapper.java index 448ab62..0d4125c 100644 --- a/builtInServices/src/com/android/server/wm/TaskWrapper.java +++ b/builtInServices/src/com/android/server/wm/TaskWrapper.java @@ -35,14 +35,16 @@ public final class TaskWrapper { } /** @hide */ + @Nullable public static TaskWrapper create(@Nullable Task task) { if (task == null) return null; return new TaskWrapper(task); } /** Creates an instance of {@link TaskWrapper} based on the task's remote {@code token}. */ + @Nullable public static TaskWrapper createFromToken(@NonNull IBinder token) { - return new TaskWrapper((Task) WindowContainer.fromBinder(token)); + return create((Task) WindowContainer.fromBinder(token)); } /** diff --git a/updatableServices/src/com/android/server/wm/CarActivityInterceptorUpdatableImpl.java b/updatableServices/src/com/android/server/wm/CarActivityInterceptorUpdatableImpl.java index c5beffb..21a92e9 100644 --- a/updatableServices/src/com/android/server/wm/CarActivityInterceptorUpdatableImpl.java +++ b/updatableServices/src/com/android/server/wm/CarActivityInterceptorUpdatableImpl.java @@ -124,6 +124,10 @@ public final class CarActivityInterceptorUpdatableImpl implements CarActivityInt private boolean isRootTaskUserSameAsActivityUser(IBinder rootTaskToken, ActivityInterceptorInfoWrapper activityInterceptorInfoWrapper) { TaskWrapper rootTask = TaskWrapper.createFromToken(rootTaskToken); + if (rootTask == null) { + Slogf.w(TAG, "Root task not found."); + return false; + } int userIdFromActivity = activityInterceptorInfoWrapper.getUserId(); int userIdFromRootTask = mBuiltIn.getUserAssignedToDisplay(rootTask .getTaskDisplayArea().getDisplay().getDisplayId()); |