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 0021400380..4d488db4cf 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -2646,8 +2646,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(); } @@ -4397,27 +4428,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; }