Merge "Add rotation to folder pagination for delightful pagination" into tm-qpr-dev

This commit is contained in:
Federico Baron
2022-09-23 21:40:48 +00:00
committed by Android (Google) Code Review
@@ -59,10 +59,13 @@ public class PageIndicatorDots extends View implements PageIndicator {
private static final int DOT_ACTIVE_ALPHA = 255;
private static final int DOT_INACTIVE_ALPHA = 128;
private static final int DOT_GAP_FACTOR = 3;
private static final float DOT_GAP_FACTOR_FLOAT = 3.8f;
// This value approximately overshoots to 1.5 times the original size.
private static final float ENTER_ANIMATION_OVERSHOOT_TENSION = 4.9f;
private static final float INDICATOR_ROTATION = 180f;
private static final RectF sTempRect = new RectF();
private static final Property<PageIndicatorDots, Float> CURRENT_POSITION
@@ -121,7 +124,12 @@ public class PageIndicatorDots extends View implements PageIndicator {
mPaginationPaint.setStyle(Style.FILL);
mPaginationPaint.setColor(Themes.getAttrColor(context, R.attr.folderPaginationColor));
mDotRadius = getResources().getDimension(R.dimen.page_indicator_dot_size) / 2;
mCircleGap = DOT_GAP_FACTOR * mDotRadius;
if (SHOW_DELIGHTFUL_PAGINATION_FOLDER.get()) {
mCircleGap = DOT_GAP_FACTOR_FLOAT * mDotRadius;
} else {
mCircleGap = DOT_GAP_FACTOR * mDotRadius;
}
mPageIndicatorSize = getResources().getDimension(
R.dimen.page_indicator_current_page_indicator_size);
if (!SHOW_DELIGHTFUL_PAGINATION_FOLDER.get()) {
@@ -298,7 +306,17 @@ public class PageIndicatorDots extends View implements PageIndicator {
mPaginationPaint.setAlpha(DOT_ACTIVE_ALPHA);
if (SHOW_DELIGHTFUL_PAGINATION_FOLDER.get()) {
canvas.drawRect(getActiveRect(), mPaginationPaint);
RectF currRect = getActiveRect();
int scrollPerPage = getScrollPerPage();
// This IF is to avoid division by 0
if (scrollPerPage != 0) {
int delta = mCurrentScroll % scrollPerPage;
canvas.rotate((INDICATOR_ROTATION * delta) / scrollPerPage,
currRect.centerX(), currRect.centerY());
}
canvas.drawRect(currRect, mPaginationPaint);
} else {
canvas.drawRoundRect(getActiveRect(), mDotRadius, mDotRadius, mPaginationPaint);
}
@@ -375,11 +393,18 @@ public class PageIndicatorDots extends View implements PageIndicator {
return (mPageIndicatorSize / 2) - mDotRadius;
}
/**
* Returns an int that is the amount we need to scroll per page
*/
private int getScrollPerPage() {
return mNumPages > 1 ? mTotalScroll / (mNumPages - 1) : 0;
}
/**
* The current scroll adjusted for the distance the indicator needs to travel on the screen
*/
private float getIndicatorScrollDistance() {
float scrollPerPage = mNumPages > 1 ? mTotalScroll / (mNumPages - 1) : 0;
int scrollPerPage = getScrollPerPage();
return scrollPerPage != 0 ? ((float) mCurrentScroll / scrollPerPage) * mCircleGap : 0;
}