From 0733ebd3c1d774786183354cdc8c5e3b93c6d74e Mon Sep 17 00:00:00 2001 From: Alex Chau Date: Fri, 7 Oct 2022 15:11:09 +0100 Subject: [PATCH] Run setCurrentPage in applyLoadPlan after scroll initialized - Also combined the 2 setCurrentPage call in applyLoadPlan into 1 - Otherwise setCurrentTask may set to page 1 unexpectedly due to page 0's scroll being invalid and out of range Bug: 246283207 Bug: 238461210 Test: Split screen with 2 apps, click back, go to overview again, should snap to focsued task Change-Id: I3b57655c810668fe244659437fbd4a745ca02d21 --- .../RecentsViewStateController.java | 4 +- .../android/quickstep/views/RecentsView.java | 44 +++++++++---------- src/com/android/launcher3/PagedView.java | 4 +- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java b/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java index 3fe2e59471..0e1120ba05 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java @@ -90,9 +90,9 @@ public final class RecentsViewStateController extends // While animating into recents, update the visible task data as needed builder.addOnFrameCallback(() -> mRecentsView.loadVisibleTaskData(FLAG_UPDATE_ALL)); mRecentsView.updateEmptyMessage(); - // TODO(b/238461210): Remove logging once root cause of flake detected. + // TODO(b/246283207): Remove logging once root cause of flake detected. if (Utilities.IS_RUNNING_IN_TEST_HARNESS) { - Log.d("b/238461210", "RecentsView#setStateWithAnimationInternal getCurrentPage(): " + Log.d("b/246283207", "RecentsView#setStateWithAnimationInternal getCurrentPage(): " + mRecentsView.getCurrentPage() + ", getScrollForPage(getCurrentPage())): " + mRecentsView.getScrollForPage(mRecentsView.getCurrentPage())); diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 0e0acf0173..af577809b8 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -1500,21 +1500,6 @@ public abstract class RecentsView !settlingOnNewTask -> " - + "previousCurrentPage: " + previousCurrentPage - + ", getScrollForPage(previousCurrentPage): " - + getScrollForPage(previousCurrentPage)); - } - setCurrentPage(previousCurrentPage); - } - // Keep same previous focused task TaskView newFocusedTaskView = getTaskViewByTaskId(focusedTaskId); // If the list changed, maybe the focused task doesn't exist anymore @@ -1539,21 +1524,36 @@ public abstract class RecentsView 0) { targetPage = indexOfChild(requireTaskViewAt(0)); } - } else if (currentTaskId != -1) { - currentTaskView = getTaskViewByTaskId(currentTaskId); - if (currentTaskView != null) { - targetPage = indexOfChild(currentTaskView); - } } if (targetPage != -1 && mCurrentPage != targetPage) { - setCurrentPage(targetPage); + int finalTargetPage = targetPage; + runOnPageScrollsInitialized(() -> { + // TODO(b/246283207): Remove logging once root cause of flake detected. + if (Utilities.IS_RUNNING_IN_TEST_HARNESS) { + Log.d("b/246283207", "RecentsView#applyLoadPlan() -> " + + "previousCurrentPage: " + previousCurrentPage + + ", targetPage: " + finalTargetPage + + ", getScrollForPage(targetPage): " + + getScrollForPage(finalTargetPage)); + } + setCurrentPage(finalTargetPage); + }); } if (mIgnoreResetTaskId != -1 && diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 377843cb3b..eb68adb3e8 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -772,9 +772,9 @@ public abstract class PagedView extends ViewGrou } if (mScroller.isFinished() && pageScrollChanged) { - // TODO(b/238461210): Remove logging once root cause of flake detected. + // TODO(b/246283207): Remove logging once root cause of flake detected. if (Utilities.IS_RUNNING_IN_TEST_HARNESS && !(this instanceof Workspace)) { - Log.d("b/238461210", this.getClass().getSimpleName() + "#onLayout() -> " + Log.d("b/246283207", this.getClass().getSimpleName() + "#onLayout() -> " + "if(mScroller.isFinished() && pageScrollChanged) -> getNextPage(): " + getNextPage() + ", getScrollForPage(getNextPage()): " + getScrollForPage(getNextPage()));