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
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 @@
}
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 @@
}
/** @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 @@
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());