From 0933ba83d86a4859173d2a06570d2d53d02757a5 Mon Sep 17 00:00:00 2001 From: minch Date: Mon, 9 Dec 2024 21:42:49 +0000 Subject: [PATCH] Introduce a function `getFristTaskView()` - Introduce a function `getFirstTaskView()` in RecentsView to get the first TaskView inside RecentsView. - Replace `getTaskViewAt(0)` with this newly introduced function. - Let `RecentsView.isTaskInExpectedScrollPosition()` accept a TaskView instead of index of the TaskView. This can avoid using the index at the callsites of this function. - Change `getTaskViews()` to be a public function, thus it can be used outside of the RecentsView. Flag: EXEMPT as no functionality changes Bug: 379942019 Test: Ensure the TaskViews required are correct in the following scrnarios: 1. Swiping up from home screen to enter overview with empty or multiple tasks 2. Swiping up from a fullscreen app to enter overview with one or multiple tasks 3. Dimissing one or multiple tasks, exit and re-enter overview w/o newly opened tasks 4. Remvoing all the tasks, re-enter overview w/o newly opened tasks Change-Id: If63ad6dc9f5106be08d867090fdaf616117dcd82 --- .../uioverrides/QuickstepLauncher.java | 2 +- .../PortraitOverviewStateTouchHelper.java | 2 +- .../QuickSwitchTouchController.java | 2 +- .../TaskViewTouchController.java | 16 +++++++--------- .../android/quickstep/TaskShortcutFactory.java | 4 ++-- .../com/android/quickstep/TaskViewUtils.java | 5 ++--- .../android/quickstep/util/RecentsViewUtils.kt | 3 +++ .../android/quickstep/views/RecentsView.java | 18 +++++++++++------- 8 files changed, 28 insertions(+), 24 deletions(-) diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java index 5cb6e8643e..eeac16917c 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java +++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java @@ -601,7 +601,7 @@ public class QuickstepLauncher extends Launcher implements RecentsViewContainer, case QUICK_SWITCH_STATE_ORDINAL: { RecentsView rv = getOverviewPanel(); TaskView currentPageTask = rv.getCurrentPageTaskView(); - TaskView fallbackTask = rv.getTaskViewAt(0); + TaskView fallbackTask = rv.getFirstTaskView(); if (currentPageTask != null || fallbackTask != null) { TaskView taskToLaunch = currentPageTask; if (currentPageTask == null) { diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitOverviewStateTouchHelper.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitOverviewStateTouchHelper.java index 4df0f63116..8c440b1955 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitOverviewStateTouchHelper.java +++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitOverviewStateTouchHelper.java @@ -50,7 +50,7 @@ public final class PortraitOverviewStateTouchHelper { boolean canInterceptTouch(MotionEvent ev) { if (mRecentsView.getTaskViewCount() > 0) { // Allow swiping up in the gap between the hotseat and overview. - return ev.getY() >= mRecentsView.getTaskViewAt(0).getBottom(); + return ev.getY() >= mRecentsView.getFirstTaskView().getBottom(); } else { // If there are no tasks, we only intercept if we're below the hotseat height. return isTouchOverHotseat(mLauncher, ev); diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/QuickSwitchTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/QuickSwitchTouchController.java index 31e4e33d89..d673720c2c 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/QuickSwitchTouchController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/QuickSwitchTouchController.java @@ -149,7 +149,7 @@ public class QuickSwitchTouchController extends AbstractStateChangeTouchControll mOverviewPanel.setFullscreenProgress(progress); if (progress > UPDATE_SYSUI_FLAGS_THRESHOLD) { int sysuiFlags = 0; - TaskView tv = mOverviewPanel.getTaskViewAt(0); + TaskView tv = mOverviewPanel.getFirstTaskView(); if (tv != null) { sysuiFlags = tv.getTaskContainers().getFirst().getSysUiStatusNavFlags(); } diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java index 202276e1e9..d62298775b 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java @@ -66,7 +66,7 @@ public abstract class TaskViewTouchController mRecentsView; private final Rect mTempRect = new Rect(); private final boolean mIsRtl; @@ -157,17 +157,15 @@ public abstract class TaskViewTouchController recentsView, View v, RemoteAnimationTarget[] targets) { if (v instanceof TaskView) { TaskView taskView = (TaskView) v; return recentsView.isTaskViewVisible(taskView) ? taskView : null; @@ -121,8 +121,7 @@ public final class TaskViewUtils { ComponentName componentName = itemInfo.getTargetComponent(); int userId = itemInfo.user.getIdentifier(); if (componentName != null) { - for (int i = 0; i < recentsView.getTaskViewCount(); i++) { - TaskView taskView = recentsView.getTaskViewAt(i); + for (TaskView taskView : recentsView.getTaskViews()) { if (recentsView.isTaskViewVisible(taskView)) { Task.TaskKey key = taskView.getFirstTask().key; if (componentName.equals(key.getComponent()) && userId == key.userId) { diff --git a/quickstep/src/com/android/quickstep/util/RecentsViewUtils.kt b/quickstep/src/com/android/quickstep/util/RecentsViewUtils.kt index 908e9f96b7..7393de448d 100644 --- a/quickstep/src/com/android/quickstep/util/RecentsViewUtils.kt +++ b/quickstep/src/com/android/quickstep/util/RecentsViewUtils.kt @@ -95,6 +95,9 @@ class RecentsViewUtils { ?: taskViews.firstOrNull { it !is DesktopTaskView } ?: taskViews.lastOrNull() + /** Returns the first TaskView if it exists, or null otherwise. */ + fun getFirstTaskView(taskViews: Iterable): TaskView? = taskViews.firstOrNull() + /** * Returns the first TaskView that is not large * diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 7097193def..3b463674b4 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -846,6 +846,11 @@ public abstract class RecentsView< private final Matrix mTmpMatrix = new Matrix(); + @Nullable + public TaskView getFirstTaskView() { + return mUtils.getFirstTaskView(getTaskViews()); + } + public RecentsView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setEnableFreeScroll(true); @@ -1493,17 +1498,16 @@ public abstract class RecentsView< } /** - * Returns true if the task is in expected scroll position. - * - * @param taskIndex the index of the task + * Returns true if the given TaskView is in expected scroll position. */ - public boolean isTaskInExpectedScrollPosition(int taskIndex) { - return getScrollForPage(taskIndex) == getPagedOrientationHandler().getPrimaryScroll(this); + public boolean isTaskInExpectedScrollPosition(TaskView taskView) { + return getScrollForPage(indexOfChild(taskView)) + == getPagedOrientationHandler().getPrimaryScroll(this); } private boolean isFocusedTaskInExpectedScrollPosition() { TaskView focusedTask = getFocusedTaskView(); - return focusedTask != null && isTaskInExpectedScrollPosition(indexOfChild(focusedTask)); + return focusedTask != null && isTaskInExpectedScrollPosition(focusedTask); } /** @@ -4717,7 +4721,7 @@ public abstract class RecentsView< /** * Returns the current list of [TaskView] children. */ - private Iterable getTaskViews() { + public Iterable getTaskViews() { return mUtils.getTaskViews(getTaskViewCount(), this::requireTaskViewAt); }