Merge "Fix the entry animation for delightful pagination in folders" into tm-qpr-dev am: 1aa91f0f7a

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/20059409

Change-Id: Ic31ef18fb69c57dad45dd8502db896e8aabfffa0
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Federico Baron
2022-10-01 07:42:26 +00:00
committed by Automerger Merge Worker
@@ -153,6 +153,7 @@ public class PageIndicatorDots extends View implements PageIndicator {
@Override
public void setScroll(int currentScroll, int totalScroll) {
if (mNumPages <= 1) {
mCurrentScroll = 0;
return;
}
@@ -296,8 +297,12 @@ public class PageIndicatorDots extends View implements PageIndicator {
for (int i = 0; i < mEntryAnimationRadiusFactors.length; i++) {
mPaginationPaint.setAlpha(i == mActivePage ? PAGE_INDICATOR_ALPHA : DOT_ALPHA);
if (SHOW_DELIGHTFUL_PAGINATION_FOLDER.get()) {
canvas.drawCircle(x, y, getRadius(x) * mEntryAnimationRadiusFactors[i],
mPaginationPaint);
if (i != mActivePage) {
canvas.drawCircle(x, y, mDotRadius * mEntryAnimationRadiusFactors[i],
mPaginationPaint);
} else {
drawPageIndicator(canvas, mEntryAnimationRadiusFactors[i]);
}
} else {
canvas.drawCircle(x, y, mDotRadius * mEntryAnimationRadiusFactors[i],
mPaginationPaint);
@@ -319,26 +324,43 @@ public class PageIndicatorDots extends View implements PageIndicator {
// Here we draw the current page indicator
mPaginationPaint.setAlpha(PAGE_INDICATOR_ALPHA);
if (SHOW_DELIGHTFUL_PAGINATION_FOLDER.get()) {
RectF currRect = getActiveRect();
// Moves the canvas to start at the top left corner of the page indicator
canvas.translate(currRect.left, currRect.top);
int scrollPerPage = getScrollPerPage();
// This IF is to avoid division by 0
if (scrollPerPage != 0) {
int delta = mCurrentScroll % scrollPerPage;
canvas.rotate((INDICATOR_ROTATION * delta) / scrollPerPage,
mPageIndicatorRadius, mPageIndicatorRadius);
}
mPageIndicatorDrawable.draw(canvas);
drawPageIndicator(canvas, 1);
} else {
canvas.drawRoundRect(getActiveRect(), mDotRadius, mDotRadius, mPaginationPaint);
}
}
}
/**
* Draws the page indicator, denoting the currently selected page
*
* @param canvas is used to draw the page indicator and to rotate it as we scroll
* @param scale is used to set the scale of our canvas
*/
private void drawPageIndicator(Canvas canvas, float scale) {
RectF currRect = getActiveRect();
// saves the canvas so we can later restore it to its original scale
canvas.save();
// Moves the canvas to start at the top left corner of the page indicator
canvas.translate(currRect.left, currRect.top);
// Scales the canvas in place to animate the indicator on entry
canvas.scale(scale, scale, mPageIndicatorRadius, mPageIndicatorRadius);
int scrollPerPage = getScrollPerPage();
// This IF is to avoid division by 0
if (scrollPerPage != 0) {
int delta = mCurrentScroll % scrollPerPage;
canvas.rotate((INDICATOR_ROTATION * delta) / scrollPerPage,
mPageIndicatorRadius, mPageIndicatorRadius);
}
mPageIndicatorDrawable.draw(canvas);
canvas.restore();
}
/**
* Returns the radius of the circle based on how close the page indicator is to it
*