public class ClockView extends View {
protected Document clockXML;
public ClockView(Context context) {
super(context);
this.setBackgroundDrawable(getResources().getDrawable(R.drawable.clockbackgroundwithoutnames));
}
@Override
protected void onDraw(Canvas canvas) {
// Clock-size rectangle to draw compliance windows
RectF clockRect = new RectF(86, 6, 394, 314);
// Create a node list containing each reminder
NodeList reminderNodes = this.clockXML.getElementsByTagName("Reminder");
int reminderLength = reminderNodes.getLength();
// Loop through each reminder drawing compliance windows
for (int i=0; i < reminderLength; i++) {
String timeScheduledString = reminderNodes.item(i).getFirstChild().getFirstChild().getNodeValue();
float timeScheduled = Float.valueOf(timeScheduledString.trim());
String complianceWindowString = reminderNodes.item(i).getFirstChild().getNextSibling().getFirstChild().getNodeValue();
float complianceWindow = Float.valueOf(complianceWindowString.trim());
String administered = reminderNodes.item(i).getFirstChild().getNextSibling().getNextSibling().getFirstChild().getNodeValue().trim();
float compStartAngle = -90 + ((timeScheduled*360)/24) - (complianceWindow*15);
float complianceSweepAngle = (complianceWindow*2)*15;
// If we are in the daytime.
if (compStartAngle < 90 && compStartAngle >= -90) {
// If a reminder is scheduled in the daytime, but window overlaps into the night.
if ((compStartAngle + complianceSweepAngle) > 90) {
// Compute new angles and sweeps
float startAngle1 = compStartAngle;
float sweepAngle1 = 90 - startAngle1;
// Draw for daytime
canvas.drawArc(clockRect, startAngle1, sweepAngle1, true, this.amColor);
float sweepAngle2 = complianceSweepAngle - sweepAngle1;
// Draw for nighttime
canvas.drawArc(clockRect, 90, sweepAngle2, true, this.pmColor);
// Else, just draw normally.
} else {
canvas.drawArc(clockRect, compStartAngle, complianceSweepAngle, true, this.amColor);
}
// If we are in the nighttime
} else if (compStartAngle >= 90) {
// If a reminder is scheduled in the nighttime, but window overlaps into the day.
if ((compStartAngle + complianceSweepAngle) > 270) {
// Compute new angles and sweeps
float startAngle2 = compStartAngle;
float sweepAngle3 = 270 - compStartAngle;
// Draw for nighttime
canvas.drawArc(clockRect, startAngle2, sweepAngle3, true, this.pmColor);
float sweepAngle4 = complianceSweepAngle - sweepAngle3;
// Draw for daytime
canvas.drawArc(clockRect, 270, sweepAngle4, true, this.amColor);
// Else, just draw normally.
} else {
canvas.drawArc(clockRect, compStartAngle, complianceSweepAngle, true, this.pmColor);
}
// If a reminder is scheduled in the early daytime, but window overlaps into the nighttime (backwards)
} else {
// Compute new angles and sweeps
float startAngle3 = compStartAngle;
float sweepAngle5 = -90 - compStartAngle;
// Draw for nighttime
canvas.drawArc(clockRect, startAngle3, sweepAngle5, true, this.pmColor);
float sweepAngle6 = complianceSweepAngle - sweepAngle5;
// Draw for daytime
canvas.drawArc(clockRect, -90, sweepAngle6, true, this.amColor);
}
// I want to create the buttons here for each reminder
}
}
}