Merge "Update the donut view to handle new string."
diff --git a/res/values/strings.xml b/res/values/strings.xml
index bc3679c..ab7f180 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -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>
diff --git a/src/com/android/settings/widget/DonutView.java b/src/com/android/settings/widget/DonutView.java
index ba7939d..0feaa07 100644
--- a/src/com/android/settings/widget/DonutView.java
+++ b/src/com/android/settings/widget/DonutView.java
@@ -22,20 +22,25 @@
 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 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 @@
         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 void setPercentage(int percent) {
         mPercent = percent;
+        mPercentString = Utils.formatPercentage(mPercent);
+        mFullString = getContext().getString(R.string.storage_percent_full);
         invalidate();
     }