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

Commit bf3ba3d1 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Update the donut view to handle new string."

parents bc27c06c 5959c927
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -8339,8 +8339,9 @@
    <string name="storage_size_large_alternate"><xliff:g id="number" example="128">^1</xliff:g><small> <xliff:g id="unit" example="KB">^2</xliff:g></small></string>
    <!-- Summary of a single storage volume total space. [CHAR LIMIT=48]-->
    <string name="storage_volume_total">Used of <xliff:g id="total" example="32GB">%1$s</xliff:g></string>
    <!-- The percent of storage used by a storage volume. Exposed inside of a donut graph. [CHAR LIMIT=4]-->
    <string name="storage_percent_used"><xliff:g id="percent" example="50%">%1$s</xliff:g>%%</string>
    <!-- Follows the percent of storage used by a storage volume. Exposed inside of a donut graph. [CHAR LIMIT=7]-->
    <string name="storage_percent_full">full</string>
    <!-- Title of games app storage screen [CHAR LIMIT=30] -->
    <string name="game_storage_settings">Games</string>
+34 −12
Original line number Diff line number Diff line
@@ -22,20 +22,25 @@ import android.text.TextPaint;
import android.util.AttributeSet;
import android.view.View;

import com.android.internal.util.Preconditions;
import com.android.settings.R;
import com.android.settings.Utils;

/**
 * DonutView represents a donut graph. It visualizes a certain percentage of fullness with a
 * corresponding label with the fullness on the inside (i.e. "50%" inside of the donut.
 * corresponding label with the fullness on the inside (i.e. "50%" inside of the donut).
 */
public class DonutView extends View {
    private static final int TOP = -90;
    private float mStrokeWidth;
    private float mDeviceDensity;
    private int mPercent;
    private Paint mBackgroundCircle;
    private Paint mFilledArc;
    private TextPaint mTextPaint;
    private TextPaint mBigNumberPaint;
    private String mPercentString;
    private String mFullString;

    public DonutView(Context context) {
        super(context);
@@ -43,8 +48,8 @@ public class DonutView extends View {

    public DonutView(Context context, AttributeSet attrs) {
        super(context, attrs);
        float density = getResources().getDisplayMetrics().density;
        mStrokeWidth = 6f * density;
        mDeviceDensity = getResources().getDisplayMetrics().density;
        mStrokeWidth = 6f * mDeviceDensity;

        mBackgroundCircle = new Paint();
        mBackgroundCircle.setAntiAlias(true);
@@ -63,28 +68,43 @@ public class DonutView extends View {
        mTextPaint = new TextPaint();
        mTextPaint.setColor(Utils.getColorAccent(getContext()));
        mTextPaint.setAntiAlias(true);
        mTextPaint.setTextSize(18f * density);
        mTextPaint.setTextSize(14f * mDeviceDensity);
        mTextPaint.setTextAlign(Paint.Align.CENTER);

        mBigNumberPaint = new TextPaint();
        mBigNumberPaint.setColor(Utils.getColorAccent(getContext()));
        mBigNumberPaint.setAntiAlias(true);
        mBigNumberPaint.setTextSize(30f * mDeviceDensity);
        mBigNumberPaint.setTextAlign(Paint.Align.CENTER);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        drawDonut(canvas);
        drawInnerText(canvas);
    }

    private void drawDonut(Canvas canvas) {
        canvas.drawArc(0 + mStrokeWidth, 0 + mStrokeWidth, getWidth() - mStrokeWidth,
                getHeight() - mStrokeWidth, TOP, 360, false, mBackgroundCircle);

        canvas.drawArc(0 + mStrokeWidth, 0 + mStrokeWidth, getWidth() - mStrokeWidth,
                getHeight() - mStrokeWidth, TOP, (360 * mPercent / 100), false, mFilledArc);
    }

        int centerX = getWidth() / 2;
        int centerY = getHeight() / 2;
    private void drawInnerText(Canvas canvas) {
        final float centerX = getWidth() / 2;
        final float centerY = getHeight() / 2;
        final float totalHeight = getTextHeight(mTextPaint) + getTextHeight(mBigNumberPaint);
        final float startY = centerY + totalHeight / 2;

        String percentString =
                String.format(getContext().getString(R.string.storage_percent_used), mPercent);
        // drawText uses the Y dimension as the floor of the text, so we do this to center.
        canvas.drawText(percentString, centerX,
                centerY + getTextHeight(mTextPaint) / 2 - mTextPaint.descent(),
                mTextPaint);
        // The first line is the height of the bottom text + its descender above the bottom line.
        canvas.drawText(mPercentString, centerX,
                startY - getTextHeight(mTextPaint) - mBigNumberPaint.descent(),
                mBigNumberPaint);
        // The second line starts at the bottom + room for the descender.
        canvas.drawText(mFullString, centerX, startY - mTextPaint.descent(), mTextPaint);
    }

    /**
@@ -92,6 +112,8 @@ public class DonutView extends View {
     */
    public void setPercentage(int percent) {
        mPercent = percent;
        mPercentString = Utils.formatPercentage(mPercent);
        mFullString = getContext().getString(R.string.storage_percent_full);
        invalidate();
    }