Update the storage summary header.
This changes it to now have a donut graph and reflects the new UI. Finalized redlines are still pending, so there will be a follow up patch to get everything aligned as per the mocks. Bug: 33199077 Test: Settings Robo Tests Change-Id: Ic12a77bd9be335af14f80886d1ecc24c82940e9b
This commit is contained in:
102
src/com/android/settings/widget/DonutView.java
Normal file
102
src/com/android/settings/widget/DonutView.java
Normal file
@@ -0,0 +1,102 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License
|
||||
*/
|
||||
package com.android.settings.widget;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.text.TextPaint;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
|
||||
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.
|
||||
*/
|
||||
public class DonutView extends View {
|
||||
private static final int TOP = -90;
|
||||
private float mStrokeWidth;
|
||||
private int mPercent;
|
||||
private Paint mBackgroundCircle;
|
||||
private Paint mFilledArc;
|
||||
private TextPaint mTextPaint;
|
||||
|
||||
public DonutView(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public DonutView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
float density = getResources().getDisplayMetrics().density;
|
||||
mStrokeWidth = 10f * density;
|
||||
|
||||
mBackgroundCircle = new Paint();
|
||||
mBackgroundCircle.setAntiAlias(true);
|
||||
mBackgroundCircle.setStrokeCap(Paint.Cap.BUTT);
|
||||
mBackgroundCircle.setStyle(Paint.Style.STROKE);
|
||||
mBackgroundCircle.setStrokeWidth(mStrokeWidth);
|
||||
mBackgroundCircle.setColor(getResources().getColor(R.color.donut_background_grey));
|
||||
|
||||
mFilledArc = new Paint();
|
||||
mFilledArc.setAntiAlias(true);
|
||||
mFilledArc.setStrokeCap(Paint.Cap.BUTT);
|
||||
mFilledArc.setStyle(Paint.Style.STROKE);
|
||||
mFilledArc.setStrokeWidth(mStrokeWidth);
|
||||
mFilledArc.setColor(Utils.getColorAccent(getContext()));
|
||||
|
||||
mTextPaint = new TextPaint();
|
||||
mTextPaint.setColor(Utils.getColorAccent(getContext()));
|
||||
mTextPaint.setAntiAlias(true);
|
||||
mTextPaint.setTextSize(18f * density);
|
||||
mTextPaint.setTextAlign(Paint.Align.CENTER);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
super.onDraw(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;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a percentage full to have the donut graph.
|
||||
*/
|
||||
public void setPercentage(int percent) {
|
||||
mPercent = percent;
|
||||
invalidate();
|
||||
}
|
||||
|
||||
private float getTextHeight(TextPaint paint) {
|
||||
// Technically, this should be the cap height, but I can live with the descent - ascent.
|
||||
return paint.descent() - paint.ascent();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user