From ba8a3ff1761ef61b39b49fe81515f6c0008d2a7a Mon Sep 17 00:00:00 2001 From: Will Osborn Date: Thu, 27 Mar 2025 13:35:49 +0000 Subject: [PATCH] Fix launcher immutable list UnsupportedOperationException on swipe up Bug: 406740276 Flag: EXEMPT bugfix Test: locally tested Change-Id: I4dfd0434e9537103144d08fa4db96f43ee5b59a8 --- .../com/android/quickstep/TopTaskTracker.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/quickstep/src/com/android/quickstep/TopTaskTracker.java b/quickstep/src/com/android/quickstep/TopTaskTracker.java index 53344a1408..43ee447699 100644 --- a/quickstep/src/com/android/quickstep/TopTaskTracker.java +++ b/quickstep/src/com/android/quickstep/TopTaskTracker.java @@ -65,12 +65,12 @@ import com.android.wm.shell.shared.GroupedTaskInfo; import com.android.wm.shell.splitscreen.ISplitScreenListener; import java.io.PrintWriter; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.stream.Stream; import javax.inject.Inject; @@ -366,21 +366,22 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta Collections.addAll(mOrderedTaskList, tasks); } - List tasks = new ArrayList<>(mOrderedTaskList); - // Strip the pinned task and recents task. - tasks.removeIf(t -> t.taskId == mPinnedTaskId || isRecentsTask(t)); + Stream taskStream = mOrderedTaskList.stream() + // Strip the pinned task and recents task. + .filter(t -> t.taskId != mPinnedTaskId && !isRecentsTask(t)); if (enableOverviewOnConnectedDisplays()) { - tasks = tasks.stream().filter( - info -> ExternalDisplaysKt.getSafeDisplayId(info) == displayId).toList(); + taskStream = taskStream.filter( + info -> ExternalDisplaysKt.getSafeDisplayId(info) == displayId); } if (enableMultipleDesktops(mContext)) { - tasks = tasks.stream().takeWhile( - taskInfo -> !DesksUtils.isDesktopWallpaperTask(taskInfo)).toList(); + taskStream = taskStream.takeWhile( + taskInfo -> !DesksUtils.isDesktopWallpaperTask(taskInfo)); } else { - tasks.removeIf(taskInfo -> DesksUtils.isDesktopWallpaperTask(taskInfo)); + taskStream = taskStream.filter( + taskInfo -> !DesksUtils.isDesktopWallpaperTask(taskInfo)); } - return new CachedTaskInfo(tasks, mContext, displayId); + return new CachedTaskInfo(taskStream.toList(), mContext, displayId); } }