Fix crash if AM returns empty task list
Bug: 231630259
Test: Verified on device
Change-Id: I15a48def7f7a7715adbbff94e29e889da100551e
diff --git a/quickstep/src/com/android/quickstep/TopTaskTracker.java b/quickstep/src/com/android/quickstep/TopTaskTracker.java
index 80bc329..39c5f2a 100644
--- a/quickstep/src/com/android/quickstep/TopTaskTracker.java
+++ b/quickstep/src/com/android/quickstep/TopTaskTracker.java
@@ -25,6 +25,7 @@
import android.app.ActivityManager.RunningTaskInfo;
import android.content.Context;
+import androidx.annotation.Nullable;
import androidx.annotation.UiThread;
import com.android.launcher3.util.MainThreadInitializedObject;
@@ -183,30 +184,31 @@
*/
public static class CachedTaskInfo {
+ @Nullable
private final RunningTaskInfo mTopTask;
private final List<RunningTaskInfo> mAllCachedTasks;
CachedTaskInfo(List<RunningTaskInfo> allCachedTasks) {
mAllCachedTasks = allCachedTasks;
- mTopTask = allCachedTasks.get(0);
+ mTopTask = allCachedTasks.isEmpty() ? null : allCachedTasks.get(0);
}
public int getTaskId() {
- return mTopTask.taskId;
+ return mTopTask == null ? -1 : mTopTask.taskId;
}
/**
* Returns true if the root of the task chooser activity
*/
public boolean isRootChooseActivity() {
- return ACTION_CHOOSER.equals(mTopTask.baseIntent.getAction());
+ return mTopTask != null && ACTION_CHOOSER.equals(mTopTask.baseIntent.getAction());
}
/**
* Returns true if the given task holds an Assistant activity that is excluded from recents
*/
public boolean isExcludedAssistant() {
- return mTopTask.configuration.windowConfiguration
+ return mTopTask != null && mTopTask.configuration.windowConfiguration
.getActivityType() == ACTIVITY_TYPE_ASSISTANT
&& (mTopTask.baseIntent.getFlags() & FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) != 0;
}
@@ -215,7 +217,7 @@
* Returns true if this represents the HOME task
*/
public boolean isHomeTask() {
- return mTopTask.configuration.windowConfiguration
+ return mTopTask != null && mTopTask.configuration.windowConfiguration
.getActivityType() == ACTIVITY_TYPE_HOME;
}
@@ -224,7 +226,8 @@
* is loaded by the model
*/
public Task[] getPlaceholderTasks() {
- return new Task[] {Task.from(new TaskKey(mTopTask), mTopTask, false)};
+ return mTopTask == null ? new Task[0]
+ : new Task[] {Task.from(new TaskKey(mTopTask), mTopTask, false)};
}
/**
@@ -232,6 +235,9 @@
* placeholder until the true object is loaded by the model
*/
public Task[] getPlaceholderTasks(int[] taskIds) {
+ if (mTopTask == null) {
+ return new Task[0];
+ }
Task[] result = new Task[taskIds.length];
for (int i = 0; i < taskIds.length; i++) {
final int index = i;
diff --git a/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java b/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java
index 3e68c7f..ab3201a 100644
--- a/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java
+++ b/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java
@@ -56,6 +56,7 @@
public class FallbackRecentsView extends RecentsView<RecentsActivity, RecentsState>
implements StateListener<RecentsState> {
+ @Nullable
private Task mHomeTask;
public FallbackRecentsView(Context context, AttributeSet attrs) {
@@ -89,7 +90,7 @@
RotationTouchHelper rotationTouchHelper) {
// TODO(b/195607777) General fallback love, but this might be correct
// Home task should be defined as the front-most task info I think?
- mHomeTask = homeTask[0];
+ mHomeTask = homeTask.length > 0 ? homeTask[0] : null;
onGestureAnimationStart(homeTask, rotationTouchHelper);
}
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index b634518..2360396 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -2257,6 +2257,9 @@
* is called. Also scrolls the view to this task.
*/
private void showCurrentTask(Task[] runningTasks) {
+ if (runningTasks.length == 0) {
+ return;
+ }
int runningTaskViewId = -1;
boolean needGroupTaskView = runningTasks.length > 1;
if (shouldAddStubTaskView(runningTasks)) {