From 5959c9279e172cf6a5950a78c4834dd42c2b1eb1 Mon Sep 17 00:00:00 2001 From: Daniel Nishi Date: Tue, 21 Mar 2017 13:32:13 -0700 Subject: [PATCH] Update the donut view to handle new string. Change-Id: Idb5cec6d8169f3d229375faecc4bf96501481112 Fixes: 36224266 Test: Manually verified --- res/values/strings.xml | 5 +- .../android/settings/widget/DonutView.java | 46 ++++++++++++++----- 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 54d7c59d7c4..6d22b5d6ca0 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -8322,8 +8322,9 @@ ^1 ^2 Used of %1$s - - %1$s%% + + full + Games diff --git a/src/com/android/settings/widget/DonutView.java b/src/com/android/settings/widget/DonutView.java index ba7939dda0c..0feaa07c3d7 100644 --- a/src/com/android/settings/widget/DonutView.java +++ b/src/com/android/settings/widget/DonutView.java @@ -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(); }