diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index ff5af28108..f17f07484b 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -213,6 +213,7 @@ import java.util.HashMap; import java.util.List; import java.util.Objects; import java.util.function.Consumer; +import java.util.stream.Collectors; /** * A list of recent tasks. @@ -1320,6 +1321,29 @@ public abstract class RecentsView 0) { newFocusedTaskView = getTaskViewAt(0); @@ -1716,10 +1740,10 @@ public abstract class RecentsView 0) { TaskView taskView = requireTaskViewAt(0); @@ -2210,8 +2234,8 @@ public abstract class RecentsView tasksToUpdate = Arrays.stream(containers).filter(Objects::nonNull) + .map(TaskIdAttributeContainer::getTask) + .collect(Collectors.toCollection(ArrayList::new)); if (mTmpRunningTasks != null) { for (Task t : mTmpRunningTasks) { - if (task == t) { - // Skip loading if this is the task that we are animating into - skipLoadingTask = true; - break; - } + // Skip loading if this is the task that we are animating into + // TODO(b/280812109) change this equality check to use A.equals(B) + tasksToUpdate.removeIf(task -> task == t); } } - if (skipLoadingTask) { + if (tasksToUpdate.isEmpty()) { continue; } - if (!mHasVisibleTaskData.get(task.key.id)) { - // Ignore thumbnail update if it's current running task during the gesture - // We snapshot at end of gesture, it will update then - int changes = dataChanges; - if (taskView == getRunningTaskView() && mGestureActive) { - changes &= ~TaskView.FLAG_UPDATE_THUMBNAIL; + for (Task task : tasksToUpdate) { + if (!mHasVisibleTaskData.get(task.key.id)) { + // Ignore thumbnail update if it's current running task during the gesture + // We snapshot at end of gesture, it will update then + int changes = dataChanges; + if (taskView == getRunningTaskView() && mGestureActive) { + changes &= ~TaskView.FLAG_UPDATE_THUMBNAIL; + } + taskView.onTaskListVisibilityChanged(true /* visible */, changes); } - taskView.onTaskListVisibilityChanged(true /* visible */, changes); + mHasVisibleTaskData.put(task.key.id, visible); } - mHasVisibleTaskData.put(task.key.id, visible); } else { - if (mHasVisibleTaskData.get(task.key.id)) { - taskView.onTaskListVisibilityChanged(false /* visible */, dataChanges); + for (TaskIdAttributeContainer container : containers) { + if (container == null) { + continue; + } + + if (mHasVisibleTaskData.get(container.getTask().key.id)) { + taskView.onTaskListVisibilityChanged(false /* visible */, dataChanges); + } + mHasVisibleTaskData.delete(container.getTask().key.id); } - mHasVisibleTaskData.delete(task.key.id); } } } diff --git a/quickstep/src/com/android/quickstep/views/TaskView.java b/quickstep/src/com/android/quickstep/views/TaskView.java index 50a1dad4b7..134ef6cce3 100644 --- a/quickstep/src/com/android/quickstep/views/TaskView.java +++ b/quickstep/src/com/android/quickstep/views/TaskView.java @@ -653,7 +653,7 @@ public class TaskView extends FrameLayout implements Reusable { * index 0 will contain the taskId, index 1 will be -1 indicating a null taskID value */ public int[] getTaskIds() { - return mTaskIdContainer; + return Arrays.copyOf(mTaskIdContainer, mTaskIdContainer.length); } public boolean containsMultipleTasks() {