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)) {