From 02150305f9303279f5133610307c1b87f494762b Mon Sep 17 00:00:00 2001 From: Alex Chau Date: Fri, 8 Oct 2021 18:15:54 +0100 Subject: [PATCH] Fix split select scroll range when TaskView aren't shifting - There is an edge case that when ClearAllButton is visible, no split translation is applied, the offset adjustment needs to be calculated differently in that case - Also, apply the scrollOffset to the TaskViews / ClearAllButton instead of updating min/max scroll Bug: 200537659 Test: Split right in grid, split left with clear all button, split left without clear all button Change-Id: I869c448bbec6aec8fa070e47193a692be6f75e84 --- .../BaseRecentsViewStateController.java | 13 +++ .../quickstep/views/ClearAllButton.java | 6 ++ .../android/quickstep/views/RecentsView.java | 82 ++++++++++++------- .../com/android/quickstep/views/TaskView.java | 7 ++ 4 files changed, 77 insertions(+), 31 deletions(-) diff --git a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java index d74b6c5f1d..2fa8b0765d 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java @@ -16,6 +16,7 @@ package com.android.launcher3.uioverrides; +import static com.android.launcher3.LauncherState.OVERVIEW_SPLIT_SELECT; import static com.android.launcher3.anim.Interpolators.AGGRESSIVE_EASE_IN_OUT; import static com.android.launcher3.anim.Interpolators.FINAL_FRAME; import static com.android.launcher3.anim.Interpolators.INSTANT; @@ -72,6 +73,8 @@ public abstract class BaseRecentsViewStateController getTaskModalnessProperty().set(mRecentsView, state.getOverviewModalness()); RECENTS_GRID_PROGRESS.set(mRecentsView, state.displayOverviewTasksAsGrid(mLauncher.getDeviceProfile()) ? 1f : 0f); + + applySplitScrollOffset(state); } @Override @@ -117,6 +120,16 @@ public abstract class BaseRecentsViewStateController boolean showAsGrid = toState.displayOverviewTasksAsGrid(mLauncher.getDeviceProfile()); setter.setFloat(mRecentsView, RECENTS_GRID_PROGRESS, showAsGrid ? 1f : 0f, showAsGrid ? INSTANT : FINAL_FRAME); + + applySplitScrollOffset(toState); + } + + private void applySplitScrollOffset(@NonNull final LauncherState state) { + if (state == OVERVIEW_SPLIT_SELECT) { + mRecentsView.applySplitPrimaryScrollOffset(); + } else { + mRecentsView.resetSplitPrimaryScrollOffset(); + } } abstract FloatProperty getTaskModalnessProperty(); diff --git a/quickstep/src/com/android/quickstep/views/ClearAllButton.java b/quickstep/src/com/android/quickstep/views/ClearAllButton.java index 22c87b0919..86be2109ad 100644 --- a/quickstep/src/com/android/quickstep/views/ClearAllButton.java +++ b/quickstep/src/com/android/quickstep/views/ClearAllButton.java @@ -66,6 +66,7 @@ public class ClearAllButton extends Button { private float mGridTranslationPrimary; private float mGridScrollOffset; private float mScrollOffsetPrimary; + private float mSplitSelectScrollOffsetPrimary; private int mSidePadding; @@ -167,6 +168,10 @@ public class ClearAllButton extends Button { mScrollOffsetPrimary = scrollOffsetPrimary; } + public void setSplitSelectScrollOffsetPrimary(float splitSelectScrollOffsetPrimary) { + mSplitSelectScrollOffsetPrimary = splitSelectScrollOffsetPrimary; + } + public float getScrollAdjustment(boolean fullscreenEnabled, boolean gridEnabled) { float scrollAdjustment = 0; if (fullscreenEnabled) { @@ -176,6 +181,7 @@ public class ClearAllButton extends Button { scrollAdjustment += mGridTranslationPrimary + mGridScrollOffset; } scrollAdjustment += mScrollOffsetPrimary; + scrollAdjustment += mSplitSelectScrollOffsetPrimary; return scrollAdjustment; } diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 023a926e10..af78cf6bb6 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -2643,8 +2643,7 @@ public abstract class RecentsView 0) { - int minScroll; - boolean isLandscapeGridSplit = mActivity.getDeviceProfile().isLandscape - && showAsGrid() && isSplitSelectionActive(); if (mIsRtl) { // If we aren't showing the clear all button, use the rightmost task as the min // scroll. - minScroll = getScrollForPage(mDisallowScrollToClearAll ? indexOfChild( + return getScrollForPage(mDisallowScrollToClearAll ? indexOfChild( getTaskViewAt(getTaskViewCount() - 1)) : indexOfChild(mClearAllButton)); - if (isLandscapeGridSplit - && mSplitSelectStateController.getActiveSplitStagePosition() - == SplitConfigurationOptions.STAGE_POSITION_BOTTOM_OR_RIGHT) { - minScroll -= mSplitPlaceholderSize; - } } else { TaskView focusedTaskView = mShowAsGridLastOnLayout ? getFocusedTaskView() : null; - minScroll = getScrollForPage(focusedTaskView != null ? indexOfChild(focusedTaskView) + return getScrollForPage(focusedTaskView != null ? indexOfChild(focusedTaskView) : 0); - // TODO(b/200537659): Adjust according to mSplitPlaceholderSize when - // isLandscapeGridSplit is true. } - return minScroll; } return super.computeMinScroll(); } @@ -4385,27 +4416,16 @@ public abstract class RecentsView 0) { - int maxScroll; - boolean isLandscapeGridSplit = mActivity.getDeviceProfile().isLandscape - && showAsGrid() && isSplitSelectionActive(); if (mIsRtl) { TaskView focusedTaskView = mShowAsGridLastOnLayout ? getFocusedTaskView() : null; - maxScroll = getScrollForPage(focusedTaskView != null ? indexOfChild(focusedTaskView) + return getScrollForPage(focusedTaskView != null ? indexOfChild(focusedTaskView) : 0); - if (isLandscapeGridSplit - && mSplitSelectStateController.getActiveSplitStagePosition() - == SplitConfigurationOptions.STAGE_POSITION_TOP_OR_LEFT) { - maxScroll += mSplitPlaceholderSize; - } } else { // If we aren't showing the clear all button, use the leftmost task as the min // scroll. - maxScroll = getScrollForPage(mDisallowScrollToClearAll ? indexOfChild( + return getScrollForPage(mDisallowScrollToClearAll ? indexOfChild( getTaskViewAt(getTaskViewCount() - 1)) : indexOfChild(mClearAllButton)); - // TODO(b/200537659): Adjust according to mSplitPlaceholderSize when - // isLandscapeGridSplit is true. } - return maxScroll; } return super.computeMaxScroll(); } diff --git a/quickstep/src/com/android/quickstep/views/TaskView.java b/quickstep/src/com/android/quickstep/views/TaskView.java index ea8282fc6e..31a73e9ae3 100644 --- a/quickstep/src/com/android/quickstep/views/TaskView.java +++ b/quickstep/src/com/android/quickstep/views/TaskView.java @@ -389,6 +389,7 @@ public class TaskView extends FrameLayout implements Reusable { // Used when in SplitScreenSelectState private float mSplitSelectTranslationY; private float mSplitSelectTranslationX; + private float mSplitSelectScrollOffsetPrimary; private ObjectAnimator mIconAndDimAnimator; private float mIconScaleAnimStartProgress = 0; @@ -1031,6 +1032,11 @@ public class TaskView extends FrameLayout implements Reusable { mSplitSelectTranslationY = y; applyTranslationY(); } + + public void setSplitScrollOffsetPrimary(float splitSelectScrollOffsetPrimary) { + mSplitSelectScrollOffsetPrimary = splitSelectScrollOffsetPrimary; + } + private void setDismissTranslationX(float x) { mDismissTranslationX = x; applyTranslationX(); @@ -1101,6 +1107,7 @@ public class TaskView extends FrameLayout implements Reusable { } else { scrollAdjustment += getPrimaryNonGridTranslationProperty().get(this); } + scrollAdjustment += mSplitSelectScrollOffsetPrimary; return scrollAdjustment; }