From a7c90bbcd1df297cde1868e690d05bd721dd9ed3 Mon Sep 17 00:00:00 2001 From: Alex Chau Date: Mon, 9 Sep 2024 16:22:35 +0100 Subject: [PATCH] Introduce RecentsView.getTaskViews for easy for-each looping - This vastly simplified the need to call do a indexed loop with getTaskViewCount() and calls requireTaskViewAt() each time, useful for code that needs to loop all TaskViews - removeTasksViewsAndClearAllButton and resetTaskVisuals have no reason to loop reversed, so I just loop them in order Fix: 365534984 Test: presubmit, manual Flag: EXEMPT REFACTOR Change-Id: Ib69f8439f3a7509fc57ec2430affa207c038bf46 --- .../quickstep/util/RecentsViewUtils.kt | 26 ++- .../android/quickstep/views/RecentsView.java | 148 ++++++++---------- 2 files changed, 73 insertions(+), 101 deletions(-) diff --git a/quickstep/src/com/android/quickstep/util/RecentsViewUtils.kt b/quickstep/src/com/android/quickstep/util/RecentsViewUtils.kt index cf083916a9..ffc345fc9b 100644 --- a/quickstep/src/com/android/quickstep/util/RecentsViewUtils.kt +++ b/quickstep/src/com/android/quickstep/util/RecentsViewUtils.kt @@ -50,32 +50,30 @@ class RecentsViewUtils { } /** - * Counts [numChildren] that are [DesktopTaskView] instances. + * Counts [TaskView]s that are [DesktopTaskView] instances. * - * @param numChildren Quantity of children to transverse - * @param getTaskViewAt Function that provides a TaskView given an index + * @param taskViews List of [TaskView]s */ - fun getDesktopTaskViewCount(numChildren: Int, getTaskViewAt: (Int) -> TaskView?): Int = - (0 until numChildren).count { getTaskViewAt(it) is DesktopTaskView } + fun getDesktopTaskViewCount(taskViews: List): Int = + taskViews.count { it is DesktopTaskView } /** * Returns the first TaskView that should be displayed as a large tile. * - * @param numChildren Quantity of children to transverse - * @param getTaskViewAt Function that provides a TaskView given an index + * @param taskViews List of [TaskView]s */ - fun getFirstLargeTaskView(numChildren: Int, getTaskViewAt: (Int) -> TaskView?): TaskView? { - return (0 until numChildren).firstNotNullOfOrNull { index -> - val taskView = getTaskViewAt(index) - if (taskView?.isLargeTile == true) taskView else null - } - } + fun getFirstLargeTaskView(taskViews: List): TaskView? = + taskViews.firstOrNull { it.isLargeTile } fun screenshotTasks( taskView: TaskView, - recentsAnimationController: RecentsAnimationController + recentsAnimationController: RecentsAnimationController, ): Map = taskView.taskContainers.associate { it.task.key.id to recentsAnimationController.screenshotTask(it.task.key.id) } + + /** Returns the current list of [TaskView] children. */ + fun getTaskViews(taskViewCount: Int, requireTaskViewAt: (Int) -> TaskView): List = + (0 until taskViewCount).map(requireTaskViewAt) } diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 709e0aa4d3..f8a0f4535c 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -841,8 +841,7 @@ public abstract class RecentsView< private final RecentsViewModel mRecentsViewModel; private final RecentsViewModelHelper mHelper; - - private final RecentsViewUtils mRecentsViewUtils = new RecentsViewUtils(); + private final RecentsViewUtils mUtils = new RecentsViewUtils(); public RecentsView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, BaseContainerInterface sizeStrategy) { @@ -1103,14 +1102,13 @@ public abstract class RecentsView< @Override public void onTaskIconChanged(@NonNull String pkg, @NonNull UserHandle user) { - for (int i = 0; i < getTaskViewCount(); i++) { - TaskView tv = requireTaskViewAt(i); - Task task = tv.getFirstTask(); + for (TaskView taskView : getTaskViews()) { + Task task = taskView.getFirstTask(); if (pkg.equals(task.key.getPackageName()) && task.key.userId == user.getIdentifier()) { task.icon = null; - if (tv.getTaskContainers().stream().anyMatch( + if (taskView.getTaskContainers().stream().anyMatch( container -> container.getIconView().getDrawable() != null)) { - tv.onTaskListVisibilityChanged(true /* visible */); + taskView.onTaskListVisibilityChanged(true /* visible */); } } } @@ -1499,8 +1497,7 @@ public abstract class RecentsView< return null; } - for (int i = 0; i < getTaskViewCount(); i++) { - TaskView taskView = requireTaskViewAt(i); + for (TaskView taskView : getTaskViews()) { if (taskView.containsTaskId(taskId)) { return taskView; } @@ -1521,8 +1518,7 @@ public abstract class RecentsView< int[] taskIdsCopy = Arrays.copyOf(taskIds, taskIds.length); Arrays.sort(taskIdsCopy); - for (int i = 0; i < getTaskViewCount(); i++) { - TaskView taskView = requireTaskViewAt(i); + for (TaskView taskView : getTaskViews()) { int[] taskViewIdsCopy = taskView.getTaskIds(); Arrays.sort(taskViewIdsCopy); if (Arrays.equals(taskIdsCopy, taskViewIdsCopy)) { @@ -1558,9 +1554,7 @@ public abstract class RecentsView< */ public void setTaskBorderEnabled(boolean enabled) { mBorderEnabled = enabled; - int taskCount = getTaskViewCount(); - for (int i = 0; i < taskCount; i++) { - TaskView taskView = requireTaskViewAt(i); + for (TaskView taskView : getTaskViews()) { taskView.setBorderEnabled(enabled); } mClearAllButton.setBorderEnabled(enabled); @@ -1627,9 +1621,7 @@ public abstract class RecentsView< super.onTouchEvent(ev); if (showAsGrid()) { - int taskCount = getTaskViewCount(); - for (int i = 0; i < taskCount; i++) { - TaskView taskView = requireTaskViewAt(i); + for (TaskView taskView : getTaskViews()) { if (isTaskViewVisible(taskView) && taskView.offerTouchToChildren(ev)) { // Keep consuming events to pass to delegate return true; @@ -1883,7 +1875,7 @@ public abstract class RecentsView< // Move Desktop Tasks to the end of the list if (enableLargeDesktopWindowingTile()) { - taskGroups = mRecentsViewUtils.sortDesktopTasksToFront(taskGroups); + taskGroups = mUtils.sortDesktopTasksToFront(taskGroups); } // Add views as children based on whether it's grouped or single task. Looping through @@ -1939,7 +1931,7 @@ public abstract class RecentsView< // Keep same previous focused task TaskView newFocusedTaskView = getTaskViewByTaskIds(focusedTaskIds); // If the list changed, maybe the focused task doesn't exist anymore - int newFocusedTaskViewIndex = mRecentsViewUtils.getFocusedTaskIndex(taskGroups); + int newFocusedTaskViewIndex = mUtils.getFocusedTaskIndex(taskGroups); if (newFocusedTaskView == null && getTaskViewCount() > newFocusedTaskViewIndex) { newFocusedTaskView = getTaskViewAt(newFocusedTaskViewIndex); } @@ -2030,15 +2022,13 @@ public abstract class RecentsView< } private void removeTasksViewsAndClearAllButton() { - // This handles an edge case where applyLoadPlan happens during a gesture when the - // only Task is one with excludeFromRecents, in which case we should not remove it. - final int stubRunningTaskIndex = isGestureActive() ? getRunningTaskIndex() : -1; - - for (int i = getTaskViewCount() - 1; i >= 0; i--) { - if (i == stubRunningTaskIndex) { + for (TaskView taskView : getTaskViews()) { + if (isGestureActive() && taskView.isRunningTask()) { + // This handles an edge case where applyLoadPlan happens during a gesture when the + // only Task is one with excludeFromRecents, in which case we should not remove it. continue; } - removeView(requireTaskViewAt(i)); + removeView(taskView); } if (getTaskViewCount() == 0 && indexOfChild(mClearAllButton) != -1) { removeView(mClearAllButton); @@ -2059,7 +2049,7 @@ public abstract class RecentsView< * @return Number of children that are instances of DesktopTaskView */ private int getDesktopTaskViewCount() { - return mRecentsViewUtils.getDesktopTaskViewCount(getChildCount(), this::getTaskViewAt); + return mUtils.getDesktopTaskViewCount(getTaskViews()); } /** @@ -2082,8 +2072,7 @@ public abstract class RecentsView< } public void resetTaskVisuals() { - for (int i = getTaskViewCount() - 1; i >= 0; i--) { - TaskView taskView = requireTaskViewAt(i); + for (TaskView taskView : getTaskViews()) { if (Arrays.stream(taskView.getTaskIds()).noneMatch( taskId -> taskId == mIgnoreResetTaskId)) { taskView.resetViewTransforms(); @@ -2126,9 +2115,8 @@ public abstract class RecentsView< if (enableRefactorTaskThumbnail()) { mRecentsViewModel.updateFullscreenProgress(mFullscreenProgress); } - int taskCount = getTaskViewCount(); - for (int i = 0; i < taskCount; i++) { - requireTaskViewAt(i).setFullscreenProgress(mFullscreenProgress); + for (TaskView taskView : getTaskViews()) { + taskView.setFullscreenProgress(mFullscreenProgress); } mClearAllButton.setFullscreenProgress(fullscreenProgress); @@ -2274,8 +2262,7 @@ public abstract class RecentsView< ? mLastComputedCarouselTaskSize.right - mLastComputedTaskSize.right : mLastComputedCarouselTaskSize.left - mLastComputedTaskSize.left; } - for (int i = 0; i < taskCount; i++) { - TaskView taskView = requireTaskViewAt(i); + for (TaskView taskView : getTaskViews()) { taskView.updateTaskSize(mLastComputedTaskSize, mLastComputedGridTaskSize, mLastComputedCarouselTaskSize); taskView.setNonGridTranslationX(accumulatedTranslationX); @@ -2664,7 +2651,7 @@ public abstract class RecentsView< } private @Nullable TaskView getFirstLargeTaskView() { - return mRecentsViewUtils.getFirstLargeTaskView(getChildCount(), this::getTaskViewAt); + return mUtils.getFirstLargeTaskView(getTaskViews()); } @Nullable @@ -2673,8 +2660,7 @@ public abstract class RecentsView< return null; } - for (int i = 0; i < getTaskViewCount(); i++) { - TaskView taskView = requireTaskViewAt(i); + for (TaskView taskView : getTaskViews()) { if (taskView.getTaskViewId() == taskViewId) { return taskView; } @@ -2823,8 +2809,8 @@ public abstract class RecentsView< } private void updateChildTaskOrientations() { - for (int i = 0; i < getTaskViewCount(); i++) { - requireTaskViewAt(i).setOrientationState(mOrientationState); + for (TaskView taskView : getTaskViews()) { + taskView.setOrientationState(mOrientationState); } boolean shouldRotateMenuForFakeRotation = !mOrientationState.isRecentsActivityRotationAllowed(); @@ -3083,9 +3069,8 @@ public abstract class RecentsView< public void setTaskIconScaledDown(boolean isScaledDown) { if (mTaskIconScaledDown != isScaledDown) { mTaskIconScaledDown = isScaledDown; - int taskCount = getTaskViewCount(); - for (int i = 0; i < taskCount; i++) { - requireTaskViewAt(i).setIconScaleAndDim(mTaskIconScaledDown ? 0 : 1); + for (TaskView taskView : getTaskViews()) { + taskView.setIconScaleAndDim(mTaskIconScaledDown ? 0 : 1); } } } @@ -3098,9 +3083,7 @@ public abstract class RecentsView< public void animateUpTaskIconScale() { mTaskIconScaledDown = false; - int taskCount = getTaskViewCount(); - for (int i = 0; i < taskCount; i++) { - TaskView taskView = requireTaskViewAt(i); + for (TaskView taskView : getTaskViews()) { taskView.animateIconScaleAndDimIntoView(); } } @@ -3395,9 +3378,8 @@ public abstract class RecentsView< private void setGridProgress(float gridProgress) { mGridProgress = gridProgress; - int taskCount = getTaskViewCount(); - for (int i = 0; i < taskCount; i++) { - requireTaskViewAt(i).setGridProgress(gridProgress); + for (TaskView taskView : getTaskViews()) { + taskView.setGridProgress(gridProgress); } mClearAllButton.setGridProgress(gridProgress); } @@ -3407,14 +3389,10 @@ public abstract class RecentsView< mRecentsViewModel.updateThumbnailSplashProgress(taskThumbnailSplashAlpha); return; } - int taskCount = getTaskViewCount(); - if (taskCount == 0) { - return; - } mTaskThumbnailSplashAlpha = taskThumbnailSplashAlpha; - for (int i = 0; i < taskCount; i++) { - requireTaskViewAt(i).setTaskThumbnailSplashAlpha(taskThumbnailSplashAlpha); + for (TaskView taskView : getTaskViews()) { + taskView.setTaskThumbnailSplashAlpha(taskThumbnailSplashAlpha); } } @@ -3637,8 +3615,7 @@ public abstract class RecentsView< nextFocusedTaskFromTop = !mTopRowIdSet.isEmpty() && mTopRowIdSet.size() >= (taskCount - 1) / 2f; // Pick the next focused task from the preferred row. - for (int i = 0; i < taskCount; i++) { - TaskView taskView = requireTaskViewAt(i); + for (TaskView taskView : getTaskViews()) { if (taskView == dismissedTaskView || taskView.isLargeTile()) { continue; } @@ -3766,8 +3743,7 @@ public abstract class RecentsView< END_DISMISS_TRANSLATION_INTERPOLATION_OFFSET + (taskCount - 1) * halfAdditionalDismissTranslationOffset, END_DISMISS_TRANSLATION_INTERPOLATION_OFFSET, 1); - for (int i = 0; i < taskCount; i++) { - TaskView taskView = requireTaskViewAt(i); + for (TaskView taskView : getTaskViews()) { anim.setFloat(taskView, TaskView.GRID_END_TRANSLATION_X, longGridRowWidthDiff, clampToProgress(LINEAR, dismissTranslationInterpolationEnd, 1)); dismissTranslationInterpolationEnd = Utilities.boundToRange( @@ -4227,9 +4203,8 @@ public abstract class RecentsView< return new IntArray(0); } IntArray topArray = new IntArray(mTopRowIdSet.size()); - int taskViewCount = getTaskViewCount(); - for (int i = 0; i < taskViewCount; i++) { - int taskViewId = requireTaskViewAt(i).getTaskViewId(); + for (TaskView taskView : getTaskViews()) { + int taskViewId = taskView.getTaskViewId(); if (mTopRowIdSet.contains(taskViewId)) { topArray.add(taskViewId); } @@ -4246,9 +4221,7 @@ public abstract class RecentsView< return new IntArray(0); } IntArray bottomArray = new IntArray(bottomRowIdArraySize); - int taskViewCount = getTaskViewCount(); - for (int i = 0; i < taskViewCount; i++) { - TaskView taskView = requireTaskViewAt(i); + for (TaskView taskView : getTaskViews()) { int taskViewId = taskView.getTaskViewId(); if (!mTopRowIdSet.contains(taskViewId) && !taskView.isLargeTile()) { bottomArray.add(taskViewId); @@ -4308,9 +4281,8 @@ public abstract class RecentsView< } PendingAnimation anim = new PendingAnimation(duration); - int count = getTaskViewCount(); - for (int i = 0; i < count; i++) { - addDismissedTaskAnimations(requireTaskViewAt(i), duration, anim); + for (TaskView taskView : getTaskViews()) { + addDismissedTaskAnimations(taskView, duration, anim); } mPendingAnimation = anim; @@ -4477,12 +4449,11 @@ public abstract class RecentsView< mContentAlpha = alpha; TaskView runningTaskView = getRunningTaskView(); - for (int i = getTaskViewCount() - 1; i >= 0; i--) { - TaskView child = requireTaskViewAt(i); - if (runningTaskView != null && mRunningTaskTileHidden && child == runningTaskView) { + for (TaskView taskView : getTaskViews()) { + if (runningTaskView != null && mRunningTaskTileHidden && taskView == runningTaskView) { continue; } - child.setStableAlpha(alpha); + taskView.setStableAlpha(alpha); } mClearAllButton.setContentAlpha(mContentAlpha); int alphaInt = Math.round(alpha * 255); @@ -4591,6 +4562,13 @@ public abstract class RecentsView< return Objects.requireNonNull(getTaskViewAt(index)); } + /** + * Returns the current list of [TaskView] children. + */ + private List getTaskViews() { + return mUtils.getTaskViews(getTaskViewCount(), this::requireTaskViewAt); + } + public void setOnEmptyMessageUpdatedListener(OnEmptyMessageUpdatedListener listener) { mOnEmptyMessageUpdatedListener = listener; } @@ -4895,9 +4873,9 @@ public abstract class RecentsView< protected void setTaskViewsResistanceTranslation(float translation) { mTaskViewsSecondaryTranslation = translation; - for (int i = 0; i < getTaskViewCount(); i++) { - TaskView task = requireTaskViewAt(i); - task.getTaskResistanceTranslationProperty().set(task, translation / getScaleY()); + for (TaskView taskView : getTaskViews()) { + taskView.getTaskResistanceTranslationProperty().set(taskView, + translation / getScaleY()); } runActionOnRemoteHandles( remoteTargetHandle -> remoteTargetHandle.getTaskViewSimulator() @@ -4905,23 +4883,21 @@ public abstract class RecentsView< } private void updateTaskViewsSnapshotRadius() { - for (int i = 0; i < getTaskViewCount(); i++) { - requireTaskViewAt(i).updateSnapshotRadius(); + for (TaskView taskView : getTaskViews()) { + taskView.updateSnapshotRadius(); } } protected void setTaskViewsPrimarySplitTranslation(float translation) { mTaskViewsPrimarySplitTranslation = translation; - for (int i = 0; i < getTaskViewCount(); i++) { - TaskView task = requireTaskViewAt(i); - task.getPrimarySplitTranslationProperty().set(task, translation); + for (TaskView taskView : getTaskViews()) { + taskView.getPrimarySplitTranslationProperty().set(taskView, translation); } } protected void setTaskViewsSecondarySplitTranslation(float translation) { mTaskViewsSecondarySplitTranslation = translation; - for (int i = 0; i < getTaskViewCount(); i++) { - TaskView taskView = requireTaskViewAt(i); + for (TaskView taskView : getTaskViews()) { if (taskView == mSplitHiddenTaskView && !taskView.containsMultipleTasks()) { continue; } @@ -6088,9 +6064,7 @@ public abstract class RecentsView< private void updateEnabledOverlays() { TaskView focusedTaskView = getFocusedTaskView(); - int taskCount = getTaskViewCount(); - for (int i = 0; i < taskCount; i++) { - TaskView taskView = requireTaskViewAt(i); + for (TaskView taskView : getTaskViews()) { if (taskView == focusedTaskView) { continue; } @@ -6164,7 +6138,7 @@ public abstract class RecentsView< return; } - Map updatedThumbnails = mRecentsViewUtils.screenshotTasks(taskView, + Map updatedThumbnails = mUtils.screenshotTasks(taskView, mRecentsAnimationController); if (enableRefactorTaskThumbnail()) { mHelper.switchToScreenshot(taskView, updatedThumbnails, onFinishRunnable); @@ -6262,8 +6236,8 @@ public abstract class RecentsView< mRecentsViewModel.setTintAmount(tintAmount); } - for (int i = 0; i < getTaskViewCount(); i++) { - requireTaskViewAt(i).setColorTint(mColorTint, mTintingColor); + for (TaskView taskView : getTaskViews()) { + taskView.setColorTint(mColorTint, mTintingColor); } Drawable scrimBg = mContainer.getScrimView().getBackground();