From 8b5be54b479ea3c6ae234f76d27e60aabf6306e9 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Fri, 13 May 2022 11:36:58 -0700 Subject: [PATCH] Fix crash if AM returns empty task list Bug: 231630259 Test: Verified on device Change-Id: I15a48def7f7a7715adbbff94e29e889da100551e --- .../com/android/quickstep/TopTaskTracker.java | 18 ++++++++++++------ .../fallback/FallbackRecentsView.java | 3 ++- .../android/quickstep/views/RecentsView.java | 3 +++ 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/quickstep/src/com/android/quickstep/TopTaskTracker.java b/quickstep/src/com/android/quickstep/TopTaskTracker.java index 80bc329620..39c5f2ad98 100644 --- a/quickstep/src/com/android/quickstep/TopTaskTracker.java +++ b/quickstep/src/com/android/quickstep/TopTaskTracker.java @@ -25,6 +25,7 @@ import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.ACT 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 class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta */ public static class CachedTaskInfo { + @Nullable private final RunningTaskInfo mTopTask; private final List mAllCachedTasks; CachedTaskInfo(List 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 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta * 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 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta * 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 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta * 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 3e68c7f304..ab3201a27e 100644 --- a/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java +++ b/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java @@ -56,6 +56,7 @@ import java.util.ArrayList; public class FallbackRecentsView extends RecentsView implements StateListener { + @Nullable private Task mHomeTask; public FallbackRecentsView(Context context, AttributeSet attrs) { @@ -89,7 +90,7 @@ public class FallbackRecentsView extends RecentsView 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 b6345180a3..2360396cf7 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -2257,6 +2257,9 @@ public abstract class RecentsView 1; if (shouldAddStubTaskView(runningTasks)) {