Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4f5e573d authored by Federico Baron's avatar Federico Baron
Browse files

Replace drawRect with drawable for delightful pagination

In order to eventually use the shape referenced in the task (https://docs.google.com/presentation/d/1V9-1C3mJ3zRGsuzzzYExisr9vLYecgADa1FucMoW_aw/edit#slide=id.g14256d0c614_0_311) we need to use a drawable. This CL adds the drawable that will be changed to that shape and uses it in PageIndicatorDots.java instead of using drawRect.

Bug: 247561880
Test: manual
Change-Id: I01e10bd9ddc7e378f2dcfdee0f84ba7443c3b9d3
parent c5b3b75f
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="?attr/folderPaginationColor"/>
    <size android:width="@dimen/page_indicator_size" android:height="@dimen/page_indicator_size"/>
</shape>
 No newline at end of file
+1 −1
Original line number Diff line number Diff line
@@ -248,7 +248,7 @@

    <!-- Folders -->
    <dimen name="page_indicator_dot_size">8dp</dimen>
    <dimen name="page_indicator_current_page_indicator_size">10dp</dimen>
    <dimen name="page_indicator_size">10dp</dimen>


    <dimen name="folder_cell_x_padding">9dp</dimen>
+22 −7
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.graphics.Outline;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.Property;
import android.view.View;
@@ -84,9 +85,11 @@ public class PageIndicatorDots extends View implements PageIndicator {
    };

    private final Paint mPaginationPaint;
    private final Drawable mPageIndicatorDrawable;
    private final float mDotRadius;
    private final float mCircleGap;
    private final float mPageIndicatorSize;
    private final float mPageIndicatorRadius;
    private final boolean mIsRtl;

    private int mNumPages;
@@ -125,13 +128,22 @@ public class PageIndicatorDots extends View implements PageIndicator {
        mPaginationPaint.setColor(Themes.getAttrColor(context, R.attr.folderPaginationColor));
        mDotRadius = getResources().getDimension(R.dimen.page_indicator_dot_size) / 2;


        if (SHOW_DELIGHTFUL_PAGINATION_FOLDER.get()) {
            mPageIndicatorSize = getResources().getDimension(
                    R.dimen.page_indicator_size);
            mPageIndicatorRadius = mPageIndicatorSize / 2;
            mPageIndicatorDrawable = context.getDrawable(R.drawable.page_indicator);
            mPageIndicatorDrawable.setBounds(0, 0, (int) mPageIndicatorSize,
                    (int) mPageIndicatorSize);
            mCircleGap = DOT_GAP_FACTOR_FLOAT * mDotRadius;

        } else {
            mPageIndicatorSize = 0;
            mPageIndicatorRadius = 0;
            mPageIndicatorDrawable = null;
            mCircleGap = DOT_GAP_FACTOR * mDotRadius;
        }
        mPageIndicatorSize = getResources().getDimension(
                R.dimen.page_indicator_current_page_indicator_size);
        if (!SHOW_DELIGHTFUL_PAGINATION_FOLDER.get()) {
            setOutlineProvider(new MyOutlineProver());
        }
@@ -307,16 +319,19 @@ public class PageIndicatorDots extends View implements PageIndicator {

            if (SHOW_DELIGHTFUL_PAGINATION_FOLDER.get()) {
                RectF currRect = getActiveRect();
                int scrollPerPage = getScrollPerPage();

                // 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,
                            currRect.centerX(), currRect.centerY());
                            mPageIndicatorRadius, mPageIndicatorRadius);
                }

                canvas.drawRect(currRect, mPaginationPaint);
                mPageIndicatorDrawable.draw(canvas);
            } else {
                canvas.drawRoundRect(getActiveRect(), mDotRadius, mDotRadius, mPaginationPaint);
            }
@@ -333,7 +348,7 @@ public class PageIndicatorDots extends View implements PageIndicator {
        float startXIndicator =
                ((getWidth() - (mNumPages * mCircleGap) + mDotRadius) / 2) - getOffset();
        float indicatorPosition = startXIndicator + getIndicatorScrollDistance()
                + (mPageIndicatorSize / 2);
                + mPageIndicatorRadius;

        // If the indicator gets close enough to a dot then we change the radius
        // of the dot based on how close the indicator is to it.
@@ -390,7 +405,7 @@ public class PageIndicatorDots extends View implements PageIndicator {
     * the indicator is centered in with the indicator circles
     */
    private float getOffset() {
        return (mPageIndicatorSize / 2) - mDotRadius;
        return mPageIndicatorRadius - mDotRadius;
    }

    /**