package au.id.teda.broadband.usage.chart;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.view.View;
import au.id.teda.broadband.usage.helper.LayoutHelper;
public class CustomDonughtChart extends View {
// Debug tag pulled from main activity
//private final static String DEBUG_TAG = BaseActivity.DEBUG_TAG;
private int mDaysSoFar;
//private int mDaysToGo;
private int mDaysTotal;
private long mUsed;
//private long mRemaining;
private long mQuota;
private int backgroundWidth;
private int usageWidth;
private int backgroundColor;
private int backgroundColorAlt;
private int usageColor;
//private int usageColorAlt;
private int BACKGROUND_PX = 45;
private int USAGE_PX = 35;
private int PADDING = 4;
private LayoutHelper mLayoutHelper;
private final RectF mRectF;
public CustomDonughtChart(Context context) {
super(context);
//Log.d(DEBUG_TAG, "CustomDonughtChart");
mRectF = new RectF();
// Get chart colors
ChartBuilder mChartBuilder = new ChartBuilder(context);
backgroundColor = mChartBuilder.getBackgroundColor();
backgroundColorAlt = mChartBuilder.getBackgroundAltColor();
usageColor = mChartBuilder.getPeakColor();
//usageColorAlt = mChartBuilder.getBackgroundAltColor();
// get chart widths
mLayoutHelper = new LayoutHelper(context);
backgroundWidth = (int) mLayoutHelper.getPxFromDp(BACKGROUND_PX);
usageWidth = (int) mLayoutHelper.getPxFromDp(USAGE_PX);
}
public void setDays(int daysSoFar, int daysToGo){
mDaysSoFar = daysSoFar;
//mDaysToGo = daysToGo;
mDaysTotal = daysSoFar + daysToGo;
}
public void setUsage(long used, long quota){
mUsed = used;
mQuota = quota;
//mRemaining = quota - used;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// Get view width and height
float width = (float)getWidth();
float height = (float)getHeight();
// Calculate line width based on stroke width
int lineWidth = (backgroundWidth/2);
float left = 0 + lineWidth + mLayoutHelper.getPxFromDp(PADDING);
float top = 0 + lineWidth + mLayoutHelper.getPxFromDp(PADDING);
float right = width - lineWidth - mLayoutHelper.getPxFromDp(PADDING);
float bottom = height - lineWidth - mLayoutHelper.getPxFromDp(PADDING);
// Used to restrain canvas
mRectF.set(left, top, right, bottom);
// Draw days
drawDays(canvas, mRectF);
// Draw dev
drawUsage(canvas, mRectF);
}
private void drawDays(Canvas canvas, RectF rect){
// Calculate percentage ratios
float soFar = ( (float) mDaysSoFar / mDaysTotal );
//float toGo = ( (float) mDaysToGo / mDaysTotal );
// Calculate angle based on percentage ratios
int angleSoFar = (int) (soFar * 360);
int angleTotal = 360;
int angleToGo = (angleTotal - angleSoFar);
// Calculate arc lengths based on angles
int arcStart = -90;
int arcSoFar = arcStart + angleSoFar;
//int arcToGo = arcStart + angleTotal;
//Set the canvas values
Paint paint = new Paint();
paint.setColor(backgroundColor);
paint.setStrokeWidth(backgroundWidth);
paint.setAntiAlias(true);
paint.setStrokeCap(Paint.Cap.BUTT);
paint.setStyle(Paint.Style.STROKE);
canvas.drawArc(rect, arcStart, angleSoFar, false, paint);
Paint paint2 = new Paint();
paint2.setColor(backgroundColorAlt);
paint2.setStrokeWidth(backgroundWidth);
paint2.setAntiAlias(true);
paint2.setStrokeCap(Paint.Cap.BUTT);
paint2.setStyle(Paint.Style.STROKE);
canvas.drawArc(rect, arcSoFar, angleToGo, false, paint2);
}
private void drawUsage(Canvas canvas, RectF rect){
// Calculate percentage ratios
float used = ( (float) mUsed / mQuota );
//float remaining = ( (float) mRemaining / mQuota );
// Calculate angle based on percentage ratios
int angleUsed = (int) (used * 360);
//int angleTotal = 360;
//int angleRemaining = (angleTotal - angleUsed);
// Calculate arc lengths based on angles
int arcStart = -90;
//int arcUsed = arcStart + angleUsed;
//int arcRemaining = arcStart + angleTotal;
//Set the canvas values
Paint paint = new Paint();
paint.setColor(usageColor);
paint.setStrokeWidth(usageWidth);
paint.setAntiAlias(true);
paint.setStrokeCap(Paint.Cap.BUTT);
paint.setStyle(Paint.Style.STROKE);
canvas.drawArc(rect, arcStart, angleUsed, false, paint);
/**
Paint paint2 = new Paint();
paint2.setColor(usageColorAlt);
paint2.setStrokeWidth(usageWidth);
paint2.setAntiAlias(true);
paint2.setStrokeCap(Paint.Cap.BUTT);
paint2.setStyle(Paint.Style.STROKE);
canvas.drawArc(rect, arcUsed, angleRemaining, false, paint2);
**/
}
}