From dedbc8ac36f674baa47694bc20a93f8ee2fe46cc Mon Sep 17 00:00:00 2001 From: Alex Chau Date: Wed, 17 Mar 2021 16:53:26 +0000 Subject: [PATCH] Remove grid scaling in Overveiw - Grid scaling has problem that scales task icon and menu, which makes it hard to control icon size and text size in the manula - Replaced the whole concept with dedicated Task size calculation in grid layout - Support different icon size in TaskView in grid and removed task_thumbnail_top_margin - Removed grid progress in TaskViewSimulator as well - Refactored how ClearAllButton scroll and translations are calcualted to align clear all properly in grid - Make page center calculation aware of PagedView pivot and scaling Bug: 174464863 Test: Manual on two screens Change-Id: I47b13ef6e55c6e16c52ea04225f5bde02ed82fc2 --- quickstep/res/values/dimens.xml | 1 + .../android/quickstep/AbsSwipeUpHandler.java | 11 +- .../quickstep/BaseActivityInterface.java | 86 ++++++---- .../com/android/quickstep/TaskViewUtils.java | 7 +- .../quickstep/util/TaskViewSimulator.java | 36 ---- .../quickstep/views/ClearAllButton.java | 66 ++++++-- .../android/quickstep/views/RecentsView.java | 158 +++++++++--------- .../com/android/quickstep/views/TaskView.java | 38 ++--- res/values/dimens.xml | 1 + src/com/android/launcher3/DeviceProfile.java | 11 +- src/com/android/launcher3/PagedView.java | 23 ++- .../android/launcher3/anim/Interpolators.java | 3 + .../touch/LandscapePagedViewHandler.java | 2 +- .../touch/PagedOrientationHandler.java | 2 +- .../touch/PortraitPagedViewHandler.java | 2 +- 15 files changed, 233 insertions(+), 214 deletions(-) diff --git a/quickstep/res/values/dimens.xml b/quickstep/res/values/dimens.xml index 0ff11c5f5e..3036341dae 100644 --- a/quickstep/res/values/dimens.xml +++ b/quickstep/res/values/dimens.xml @@ -16,6 +16,7 @@ 48dp + 32dp 2dp diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index b49282544d..f4ef1f7e47 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -923,6 +923,9 @@ public abstract class AbsSwipeUpHandler, float currentShift = mCurrentShift.value; final GestureEndTarget endTarget = calculateEndTarget(velocity, endVelocity, isFling, isCancel); + // Set the state, but don't notify until the animation completes + mGestureState.setEndTarget(endTarget, false /* isAtomic */); + float endShift = endTarget.isLauncher ? 1 : 0; final float startShift; if (!isFling) { @@ -945,7 +948,7 @@ public abstract class AbsSwipeUpHandler, } Interpolator interpolator; S state = mActivityInterface.stateFromGestureEndTarget(endTarget); - if (state.displayOverviewTasksAsGrid(mActivity.getDeviceProfile())) { + if (state.displayOverviewTasksAsGrid(mDp)) { interpolator = ACCEL_DEACCEL; } else if (endTarget == RECENTS) { interpolator = OVERSHOOT_1_2; @@ -1055,8 +1058,6 @@ public abstract class AbsSwipeUpHandler, @UiThread private void animateToProgressInternal(float start, float end, long duration, Interpolator interpolator, GestureEndTarget target, PointF velocityPxPerMs) { - // Set the state, but don't notify until the animation completes - mGestureState.setEndTarget(target, false /* isAtomic */); maybeUpdateRecentsAttachedState(); // If we are transitioning to launcher, then listen for the activity to be restarted while @@ -1147,10 +1148,8 @@ public abstract class AbsSwipeUpHandler, }); animatorSet.play(windowAnim); S state = mActivityInterface.stateFromGestureEndTarget(mGestureState.getEndTarget()); - if (mRecentsView != null && state.displayOverviewTasksAsGrid( - mActivity.getDeviceProfile())) { + if (mRecentsView != null && state.displayOverviewTasksAsGrid(mDp)) { animatorSet.play(ObjectAnimator.ofFloat(mRecentsView, RECENTS_GRID_PROGRESS, 1)); - animatorSet.play(mTaskViewSimulator.gridProgress.animateToValue(0, 1)); } animatorSet.setDuration(duration).setInterpolator(interpolator); animatorSet.start(); diff --git a/quickstep/src/com/android/quickstep/BaseActivityInterface.java b/quickstep/src/com/android/quickstep/BaseActivityInterface.java index 462630cac3..0415009faf 100644 --- a/quickstep/src/com/android/quickstep/BaseActivityInterface.java +++ b/quickstep/src/com/android/quickstep/BaseActivityInterface.java @@ -31,6 +31,7 @@ import android.animation.Animator; import android.annotation.TargetApi; import android.content.Context; import android.content.res.Resources; +import android.graphics.PointF; import android.graphics.Rect; import android.os.Build; import android.view.Gravity; @@ -43,6 +44,7 @@ import com.android.launcher3.DeviceProfile; import com.android.launcher3.R; import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.anim.PendingAnimation; +import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.statehandlers.DepthController; import com.android.launcher3.statemanager.BaseState; import com.android.launcher3.statemanager.StatefulActivity; @@ -195,45 +197,53 @@ public abstract class BaseActivityInterface extends PagedView protected final Rect mTempRect = new Rect(); protected final RectF mTempRectF = new RectF(); private final PointF mTempPointF = new PointF(); + private float mFullscreenScale; private static final int DISMISS_TASK_DURATION = 300; private static final int ADDITION_TASK_DURATION = 200; @@ -741,7 +742,7 @@ public abstract class RecentsView extends PagedView int taskStart = mOrientationHandler.getChildStart(tv) + (int) tv.getOffsetAdjustment( mOverviewFullscreenEnabled, showAsGrid()); int taskSize = (int) (mOrientationHandler.getMeasuredSize(tv) * tv.getSizeAdjustment( - mOverviewFullscreenEnabled, showAsGrid())); + mOverviewFullscreenEnabled)); int taskEnd = taskStart + taskSize; return (taskStart >= start && taskStart <= end) || (taskEnd >= start && taskEnd <= end); @@ -1019,7 +1020,6 @@ public abstract class RecentsView extends PagedView mLiveTileTaskViewSimulator.taskSecondaryTranslation.value = 0; mLiveTileTaskViewSimulator.fullScreenProgress.value = 0; mLiveTileTaskViewSimulator.recentsViewScale.value = 1; - mLiveTileTaskViewSimulator.gridProgress.value = 0; } if (mRunningTaskTileHidden) { setRunningTaskHidden(mRunningTaskTileHidden); @@ -1091,6 +1091,10 @@ public abstract class RecentsView extends PagedView */ private void updateTaskSize() { final int taskCount = getTaskViewCount(); + if (taskCount == 0) { + return; + } + float accumulatedTranslationX = 0; float[] fullscreenTranslations = new float[taskCount]; int firstNonHomeTaskIndex = 0; @@ -1105,8 +1109,11 @@ public abstract class RecentsView extends PagedView taskView.updateTaskSize(); fullscreenTranslations[i] += accumulatedTranslationX; + // Compensate space caused by TaskView scaling. float widthDiff = taskView.getLayoutParams().width * (1 - taskView.getFullscreenScale()); + // Compensate page spacing widening caused by RecentsView scaling. + widthDiff += mPageSpacing * (1 - 1 / mFullscreenScale); float fullscreenTranslationX = mIsRtl ? widthDiff : -widthDiff; fullscreenTranslations[i] += fullscreenTranslationX; accumulatedTranslationX += fullscreenTranslationX; @@ -1180,13 +1187,13 @@ public abstract class RecentsView extends PagedView View page = getPageAt(i); mScrollState.updateInterpolation(mActivity.getDeviceProfile(), mOrientationHandler.getChildStartWithTranslation(page)); - ((PageCallbacks) page).onPageScroll(mScrollState); + ((PageCallbacks) page).onPageScroll(mScrollState, mOverviewGridEnabled); } } @Override protected int getDestinationPage(int scaledScroll) { - if (mGridProgress == 0) { + if (!showAsGrid()) { return super.getDestinationPage(scaledScroll); } @@ -1599,11 +1606,7 @@ public abstract class RecentsView extends PagedView } final int boxLength = Math.max(mTaskWidth, mTaskHeight); - float availableHeight = mLastComputedGridSize.height(); - float rowHeight = (availableHeight - mRowSpacing) / 2; int taskTopMargin = mActivity.getDeviceProfile().overviewTaskThumbnailTopMarginPx; - float gridScale = rowHeight / (boxLength + taskTopMargin); - int topRowWidth = 0; int bottomRowWidth = 0; float topAccumulatedTranslationX = 0; @@ -1621,43 +1624,17 @@ public abstract class RecentsView extends PagedView continue; } - taskView.setGridScale(gridScale); - - float scaledWidth = taskView.getLayoutParams().width * gridScale; - float taskGridHorizontalDiff; - if (mIsRtl) { - float taskRight = mLastComputedTaskSize.left + scaledWidth; - taskGridHorizontalDiff = mLastComputedGridSize.right - taskRight; - } else { - float taskLeft = mLastComputedTaskSize.right - scaledWidth; - taskGridHorizontalDiff = mLastComputedGridSize.left - taskLeft; - } - gridTranslations[i] -= taskGridHorizontalDiff; - taskView.setGridOffsetTranslationX(taskGridHorizontalDiff); - - float taskGridVerticalDiff = mLastComputedGridSize.top + taskTopMargin * gridScale - - mLastComputedTaskSize.top; - - // Off-set gap due to task scaling. - float widthDiff = taskView.getLayoutParams().width * (1 - gridScale); - float gridScaleTranslationX = mIsRtl ? widthDiff : -widthDiff; - gridTranslations[i] += gridScaleTranslationX; - - // Visible offset caused by having scaling pivot on top-right. - taskView.setNonRtlVisibleOffset(mIsRtl ? 0 : widthDiff); - if (topRowWidth <= bottomRowWidth) { gridTranslations[i] += topAccumulatedTranslationX; - topRowWidth += taskView.getLayoutParams().width * gridScale + mPageSpacing; + topRowWidth += taskView.getLayoutParams().width + mPageSpacing; topSet.add(i); - taskView.setGridTranslationY(taskGridVerticalDiff); + taskView.setGridTranslationY(0); // Move horizontally into empty space. float widthOffset = 0; for (int j = i - 1; bottomSet.contains(j); j--) { - widthOffset += getTaskViewAt(j).getLayoutParams().width * gridScale - + mPageSpacing; + widthOffset += getTaskViewAt(j).getLayoutParams().width + mPageSpacing; } float gridTranslationX = mIsRtl ? widthOffset : -widthOffset; @@ -1665,26 +1642,39 @@ public abstract class RecentsView extends PagedView topAccumulatedTranslationX += gridTranslationX; } else { gridTranslations[i] += bottomAccumulatedTranslationX; - bottomRowWidth += taskView.getLayoutParams().width * gridScale + mPageSpacing; + bottomRowWidth += taskView.getLayoutParams().width + mPageSpacing; bottomSet.add(i); // Move into bottom row. - float heightOffset = (boxLength + taskTopMargin) * gridScale + mRowSpacing; - taskView.setGridTranslationY(heightOffset + taskGridVerticalDiff); + float heightOffset = (boxLength + taskTopMargin) + mRowSpacing; + taskView.setGridTranslationY(heightOffset); // Move horizontally into empty space. float widthOffset = 0; for (int j = i - 1; topSet.contains(j); j--) { - widthOffset += getTaskViewAt(j).getLayoutParams().width * gridScale - + mPageSpacing; + widthOffset += getTaskViewAt(j).getLayoutParams().width + mPageSpacing; } float gridTranslationX = mIsRtl ? widthOffset : -widthOffset; gridTranslations[i] += gridTranslationX; bottomAccumulatedTranslationX += gridTranslationX; } - topAccumulatedTranslationX += gridScaleTranslationX; - bottomAccumulatedTranslationX += gridScaleTranslationX; + } + + // If the first non-home task does not take full width of task Rect, shift all tasks + // accordingly without affecting scrolls. + int firstTaskWidth = getTaskViewAt(firstNonHomeTaskIndex).getLayoutParams().width; + float firstNonHomeTaskOffset = firstTaskWidth == ViewGroup.LayoutParams.MATCH_PARENT ? 0 + : mTaskWidth - firstTaskWidth; + float offsetTranslation = mIsRtl ? firstNonHomeTaskOffset : -firstNonHomeTaskOffset; + + // We need to maintain first non-home task's grid translation at 0, now shift translation + // of all the TaskViews to achieve that. + for (int i = firstNonHomeTaskIndex; i < taskCount; i++) { + TaskView taskView = getTaskViewAt(i); + taskView.setGridTranslationX( + gridTranslations[i] - gridTranslations[firstNonHomeTaskIndex]); + taskView.setGridOffsetTranslationX(offsetTranslation); } // Use the accumulated translation of the longer row. @@ -1700,7 +1690,7 @@ public abstract class RecentsView extends PagedView shorterRowCompensation = bottomRowWidth - topRowWidth; } } else { - if (!topSet.contains(taskCount - 1)) { + if (bottomSet.contains(taskCount - 1)) { shorterRowCompensation = topRowWidth - bottomRowWidth; } } @@ -1721,14 +1711,14 @@ public abstract class RecentsView extends PagedView clearAllAccumulatedTranslation + clearAllShorterRowCompensation + clearAllShortTotalCompensation; - // We need to maintain first non-home task's grid translation at 0, now shift translation - // of all the TaskViews to achieve that. - for (int i = firstNonHomeTaskIndex; i < taskCount; i++) { - getTaskViewAt(i).setGridTranslationX( - gridTranslations[i] - gridTranslations[firstNonHomeTaskIndex]); - } mClearAllButton.setGridTranslationPrimary( clearAllTotalTranslationX - gridTranslations[firstNonHomeTaskIndex]); + mClearAllButton.setGridTranslationSecondary( + boxLength - mTaskHeight / 2f + mRowSpacing / 2f); + mClearAllButton.setGridScrollOffset( + mIsRtl ? mLastComputedTaskSize.left - mLastComputedGridSize.left + : mLastComputedTaskSize.right - mLastComputedGridSize.right); + mClearAllButton.setOffsetTranslationPrimary(offsetTranslation); setGridProgress(mGridProgress); } @@ -1753,7 +1743,6 @@ public abstract class RecentsView extends PagedView for (int i = 0; i < taskCount; i++) { getTaskViewAt(i).setGridProgress(gridProgress); } - mLiveTileTaskViewSimulator.gridProgress.value = gridProgress; mClearAllButton.setGridProgress(gridProgress); } @@ -1801,8 +1790,10 @@ public abstract class RecentsView extends PagedView /** * Updates the page UI based on scroll params. + * + * @param gridEnabled whether Overveiw is currently showing as 2 rows grid */ - default void onPageScroll(ScrollState scrollState) {} + default void onPageScroll(ScrollState scrollState, boolean gridEnabled) {} } public static class ScrollState extends CurveProperties { @@ -2297,7 +2288,7 @@ public abstract class RecentsView extends PagedView // Update the pivots such that when the task is scaled, it fills the full page getTaskSize(mTempRect); - getPagedViewOrientedState().getFullScreenScaleAndPivot( + mFullscreenScale = getPagedViewOrientedState().getFullScreenScaleAndPivot( mTempRect, mActivity.getDeviceProfile(), mTempPointF); setPivotX(mTempPointF.x); setPivotY(mTempPointF.y); @@ -2858,22 +2849,42 @@ public abstract class RecentsView extends PagedView @Override protected int computeMinScroll() { if (getTaskViewCount() > 0) { - if (mDisallowScrollToClearAll) { + if (mIsRtl && mDisallowScrollToClearAll) { // We aren't showing the clear all button, // so use the leftmost task as the min scroll. - if (mIsRtl) { - return getScrollForPage(indexOfChild(getTaskViewAt(getTaskViewCount() - 1))); - } - return getScrollForPage(mTaskViewStartIndex); + return getScrollForPage(indexOfChild(getTaskViewAt(getTaskViewCount() - 1))); } - if (mIsRtl) { - return getScrollForPage(indexOfChild(getTaskViewAt(getTaskViewCount() - 1)) + 1); - } - return getScrollForPage(mTaskViewStartIndex); + return getLeftMostChildScroll(); } return super.computeMinScroll(); } + /** + * Returns page scroll of the left most child. + */ + public int getLeftMostChildScroll() { + if (mIsRtl) { + return getScrollForPage(indexOfChild(getTaskViewAt(getTaskViewCount() - 1)) + 1); + } + return getScrollForPage(mTaskViewStartIndex); + } + + @Override + protected int computeMaxScroll() { + if (getTaskViewCount() > 0) { + if (!mIsRtl && mDisallowScrollToClearAll) { + // We aren't showing the clear all button, + // so use the rightmost task as the min scroll. + return getScrollForPage(indexOfChild(getTaskViewAt(getTaskViewCount() - 1))); + } + if (mIsRtl) { + return getScrollForPage(mTaskViewStartIndex); + } + return getScrollForPage(indexOfChild(getTaskViewAt(getTaskViewCount() - 1)) + 1); + } + return super.computeMaxScroll(); + } + @Override protected boolean getPageScrolls(int[] outPageScrolls, boolean layoutChildren, ComputePageScrollsLogic scrollLogic) { @@ -2919,26 +2930,7 @@ public abstract class RecentsView extends PagedView return super.getChildVisibleSize(index); } return (int) (super.getChildVisibleSize(index) * taskView.getSizeAdjustment( - mOverviewFullscreenEnabled, showAsGrid())); - } - - @Override - protected int computeMaxScroll() { - if (getTaskViewCount() > 0) { - if (mDisallowScrollToClearAll) { - // We aren't showing the clear all button, - // so use the rightmost task as the min scroll. - if (mIsRtl) { - return getScrollForPage(mTaskViewStartIndex); - } - return getScrollForPage(indexOfChild(getTaskViewAt(getTaskViewCount() - 1))); - } - if (mIsRtl) { - return getScrollForPage(mTaskViewStartIndex); - } - return getScrollForPage(indexOfChild(getTaskViewAt(getTaskViewCount() - 1)) + 1); - } - return super.computeMaxScroll(); + mOverviewFullscreenEnabled)); } public ClearAllButton getClearAllButton() { diff --git a/quickstep/src/com/android/quickstep/views/TaskView.java b/quickstep/src/com/android/quickstep/views/TaskView.java index be044e7c48..d497a96edb 100644 --- a/quickstep/src/com/android/quickstep/views/TaskView.java +++ b/quickstep/src/com/android/quickstep/views/TaskView.java @@ -279,7 +279,6 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { private float mFullscreenProgress; private float mGridProgress; private float mFullscreenScale = 1; - private float mGridScale = 1; private final FullscreenDrawParams mCurrentFullscreenParams; private final StatefulActivity mActivity; @@ -298,7 +297,6 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { private float mGridTranslationY; // Offset translation does not affect scroll calculation. private float mGridOffsetTranslationX; - private float mNonRtlVisibleOffset; private ObjectAnimator mIconAndDimAnimator; private float mIconScaleAnimStartProgress = 0; @@ -678,9 +676,10 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { PagedOrientationHandler orientationHandler = orientationState.getOrientationHandler(); boolean isRtl = getLayoutDirection() == LAYOUT_DIRECTION_RTL; LayoutParams snapshotParams = (LayoutParams) mSnapshotView.getLayoutParams(); - snapshotParams.topMargin = mActivity.getDeviceProfile().overviewTaskThumbnailTopMarginPx; - int taskIconMargin = mActivity.getDeviceProfile().overviewTaskMarginPx; - int taskIconHeight = (int) getResources().getDimension(R.dimen.task_thumbnail_icon_size); + DeviceProfile deviceProfile = mActivity.getDeviceProfile(); + snapshotParams.topMargin = deviceProfile.overviewTaskThumbnailTopMarginPx; + int taskIconMargin = deviceProfile.overviewTaskMarginPx; + int taskIconHeight = deviceProfile.overviewTaskIconSizePx; LayoutParams iconParams = (LayoutParams) mIconView.getLayoutParams(); switch (orientationHandler.getRotation()) { case ROTATION_90: @@ -709,8 +708,11 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { break; } mSnapshotView.setLayoutParams(snapshotParams); + iconParams.width = iconParams.height = taskIconHeight; mIconView.setLayoutParams(iconParams); mIconView.setRotation(orientationHandler.getDegreesRotated()); + snapshotParams.topMargin = deviceProfile.overviewTaskThumbnailTopMarginPx; + mSnapshotView.setLayoutParams(snapshotParams); if (mMenuView != null) { mMenuView.onRotationChanged(); @@ -790,8 +792,8 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { @Override public void onRecycle() { - mFullscreenTranslationX = mGridTranslationX = mGridTranslationY = - mGridOffsetTranslationX = mBoxTranslationY = mNonRtlVisibleOffset = 0f; + mFullscreenTranslationX = mGridTranslationX = + mGridTranslationY = mGridOffsetTranslationX = mBoxTranslationY = 0f; resetViewTransforms(); // Clear any references to the thumbnail (it will be re-read either from the cache or the // system on next bind) @@ -801,7 +803,7 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { } @Override - public void onPageScroll(ScrollState scrollState) { + public void onPageScroll(ScrollState scrollState, boolean gridEnabled) { // Don't do anything if it's modal. if (mModalness > 0) { return; @@ -904,11 +906,6 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { return mFullscreenScale; } - public void setGridScale(float gridScale) { - mGridScale = gridScale; - applyScale(); - } - /** * Moves TaskView between carousel and 2 row grid. * @@ -925,8 +922,6 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { float scale = 1; float fullScreenProgress = EXAGGERATED_EASE.getInterpolation(mFullscreenProgress); scale *= Utilities.mapRange(fullScreenProgress, 1f, mFullscreenScale); - float gridProgress = ACCEL_DEACCEL.getInterpolation(mGridProgress); - scale *= Utilities.mapRange(gridProgress, 1f, mGridScale); setScaleX(scale); setScaleY(scale); } @@ -989,10 +984,6 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { applyTranslationX(); } - public void setNonRtlVisibleOffset(float nonRtlVisibleOffset) { - mNonRtlVisibleOffset = nonRtlVisibleOffset; - } - public float getScrollAdjustment(boolean fullscreenEnabled, boolean gridEnabled) { float scrollAdjustment = 0; if (fullscreenEnabled) { @@ -1004,22 +995,19 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { return scrollAdjustment; } - public float getOffsetAdjustment(boolean fullscreenEnabled, boolean gridEnabled) { + public float getOffsetAdjustment(boolean fullscreenEnabled,boolean gridEnabled) { float offsetAdjustment = getScrollAdjustment(fullscreenEnabled, gridEnabled); if (gridEnabled) { - offsetAdjustment += mGridOffsetTranslationX + mNonRtlVisibleOffset; + offsetAdjustment += mGridOffsetTranslationX; } return offsetAdjustment; } - public float getSizeAdjustment(boolean fullscreenEnabled, boolean gridEnabled) { + public float getSizeAdjustment(boolean fullscreenEnabled) { float sizeAdjustment = 1; if (fullscreenEnabled) { sizeAdjustment *= mFullscreenScale; } - if (gridEnabled) { - sizeAdjustment *= mGridScale; - } return sizeAdjustment; } diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 73af517e98..1fccdf34a6 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -294,6 +294,7 @@ 0dp + 0dp 0dp diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 09f4cde195..58d612d014 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -152,8 +152,9 @@ public class DeviceProfile { public float allAppsIconTextSizePx; // Overview - public int overviewTaskThumbnailTopMarginPx; public int overviewTaskMarginPx; + public int overviewTaskIconSizePx; + public int overviewTaskThumbnailTopMarginPx; // Widgets public final PointF appWidgetScale = new PointF(1.0f, 1.0f); @@ -301,10 +302,12 @@ public class DeviceProfile { : (hotseatBarTopPaddingPx + hotseatBarBottomPaddingPx + (isScalableGrid ? 0 : hotseatExtraVerticalSize))); - overviewTaskMarginPx = res.getDimensionPixelSize(R.dimen.overview_task_margin); - overviewTaskThumbnailTopMarginPx = res.getDimensionPixelSize( - R.dimen.task_thumbnail_icon_size) + 2 * overviewTaskMarginPx; + overviewTaskIconSizePx = + isTablet && FeatureFlags.ENABLE_OVERVIEW_GRID.get() ? res.getDimensionPixelSize( + R.dimen.task_thumbnail_icon_size_grid) : res.getDimensionPixelSize( + R.dimen.task_thumbnail_icon_size); + overviewTaskThumbnailTopMarginPx = overviewTaskIconSizePx + overviewTaskMarginPx * 2; // Calculate all of the remaining variables. extraSpace = updateAvailableDimensions(res); diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 65fde8659a..76885ccbc8 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -1512,17 +1512,16 @@ public abstract class PagedView extends ViewGrou return getDestinationPage(mOrientationHandler.getPrimaryScroll(this)); } - protected int getDestinationPage(int scaledScroll) { - return getPageNearestToCenterOfScreen(scaledScroll); + protected int getDestinationPage(int primaryScroll) { + return getPageNearestToCenterOfScreen(primaryScroll); } public int getPageNearestToCenterOfScreen() { return getPageNearestToCenterOfScreen(mOrientationHandler.getPrimaryScroll(this)); } - private int getPageNearestToCenterOfScreen(int scaledScroll) { - int pageOrientationSize = mOrientationHandler.getMeasuredSize(this); - int screenCenter = scaledScroll + (pageOrientationSize / 2); + private int getPageNearestToCenterOfScreen(int primaryScroll) { + int screenCenter = getScreenCenter(primaryScroll); int minDistanceFromScreenCenter = Integer.MAX_VALUE; int minDistanceFromScreenCenterIndex = -1; final int childCount = getChildCount(); @@ -1538,18 +1537,26 @@ public abstract class PagedView extends ViewGrou } private int getDisplacementFromScreenCenter(int childIndex, int screenCenter) { - int childSize = getChildVisibleSize(childIndex); + int childSize = Math.round(getChildVisibleSize(childIndex)); int halfChildSize = (childSize / 2); int childCenter = getChildOffset(childIndex) + halfChildSize; return childCenter - screenCenter; } protected int getDisplacementFromScreenCenter(int childIndex) { - int pageOrientationSize = mOrientationHandler.getMeasuredSize(this); - int screenCenter = mOrientationHandler.getPrimaryScroll(this) + (pageOrientationSize / 2); + int primaryScroll = mOrientationHandler.getPrimaryScroll(this); + int screenCenter = getScreenCenter(primaryScroll); return getDisplacementFromScreenCenter(childIndex, screenCenter); } + private int getScreenCenter(int primaryScroll) { + float primaryScale = mOrientationHandler.getPrimaryScale(this); + float primaryPivot = mOrientationHandler.getPrimaryValue(getPivotX(), getPivotY()); + int pageOrientationSize = mOrientationHandler.getMeasuredSize(this); + return Math.round(primaryScroll + (pageOrientationSize / 2f - primaryPivot) / primaryScale + + primaryPivot); + } + protected void snapToDestination() { snapToPage(getDestinationPage(), getPageSnapDuration()); } diff --git a/src/com/android/launcher3/anim/Interpolators.java b/src/com/android/launcher3/anim/Interpolators.java index 6b9ed09c77..7980138370 100644 --- a/src/com/android/launcher3/anim/Interpolators.java +++ b/src/com/android/launcher3/anim/Interpolators.java @@ -77,6 +77,9 @@ public class Interpolators { public static final Interpolator TOUCH_RESPONSE_INTERPOLATOR = new PathInterpolator(0.3f, 0f, 0.1f, 1f); + public static final Interpolator TOUCH_RESPONSE_INTERPOLATOR_ACCEL_DEACCEL = + v -> ACCEL_DEACCEL.getInterpolation(TOUCH_RESPONSE_INTERPOLATOR.getInterpolation(v)); + /** * Inversion of ZOOM_OUT, compounded with an ease-out. diff --git a/src/com/android/launcher3/touch/LandscapePagedViewHandler.java b/src/com/android/launcher3/touch/LandscapePagedViewHandler.java index c1cf0c8ec2..19dfe15f62 100644 --- a/src/com/android/launcher3/touch/LandscapePagedViewHandler.java +++ b/src/com/android/launcher3/touch/LandscapePagedViewHandler.java @@ -136,7 +136,7 @@ public class LandscapePagedViewHandler implements PagedOrientationHandler { } @Override - public int getClearAllScrollOffset(View view, boolean isRtl) { + public int getClearAllSidePadding(View view, boolean isRtl) { return (isRtl ? view.getPaddingBottom() : - view.getPaddingTop()) / 2; } diff --git a/src/com/android/launcher3/touch/PagedOrientationHandler.java b/src/com/android/launcher3/touch/PagedOrientationHandler.java index fcfa205ed2..9140a04341 100644 --- a/src/com/android/launcher3/touch/PagedOrientationHandler.java +++ b/src/com/android/launcher3/touch/PagedOrientationHandler.java @@ -66,7 +66,7 @@ public interface PagedOrientationHandler { float getPrimaryVelocity(VelocityTracker velocityTracker, int pointerId); int getMeasuredSize(View view); float getPrimarySize(RectF rect); - int getClearAllScrollOffset(View view, boolean isRtl); + int getClearAllSidePadding(View view, boolean isRtl); int getSecondaryDimension(View view); FloatProperty getPrimaryViewTranslate(); FloatProperty getSecondaryViewTranslate(); diff --git a/src/com/android/launcher3/touch/PortraitPagedViewHandler.java b/src/com/android/launcher3/touch/PortraitPagedViewHandler.java index 2bc2dc7d93..29be62733c 100644 --- a/src/com/android/launcher3/touch/PortraitPagedViewHandler.java +++ b/src/com/android/launcher3/touch/PortraitPagedViewHandler.java @@ -132,7 +132,7 @@ public class PortraitPagedViewHandler implements PagedOrientationHandler { } @Override - public int getClearAllScrollOffset(View view, boolean isRtl) { + public int getClearAllSidePadding(View view, boolean isRtl) { return (isRtl ? view.getPaddingRight() : - view.getPaddingLeft()) / 2; }