1 | package net.sabi.pester;
|
---|
2 |
|
---|
3 | import danger.app.Application;
|
---|
4 | import danger.app.Event;
|
---|
5 | import danger.internal.Date;
|
---|
6 | import danger.system.Hardware;
|
---|
7 | import danger.ui.AlertWindow;
|
---|
8 | import danger.ui.Container;
|
---|
9 | import danger.ui.Control;
|
---|
10 | import danger.ui.Font;
|
---|
11 | import danger.ui.Layout;
|
---|
12 | import danger.ui.RecordingPen;
|
---|
13 | import danger.ui.ScreenWindow;
|
---|
14 | import danger.ui.StaticText;
|
---|
15 | import danger.ui.TextField;
|
---|
16 | import danger.util.DEBUG;
|
---|
17 | import danger.util.TextInputFilter;
|
---|
18 |
|
---|
19 | public class Pester extends Application implements Resources, Commands {
|
---|
20 | private static ScreenWindow sAlarmListWindow;
|
---|
21 | private static danger.app.Alarm sMidnightAlarm;
|
---|
22 |
|
---|
23 | public Pester() {
|
---|
24 | sAlarmListWindow = (ScreenWindow)getResources().getScreen(ID_ALARM_LIST_SCREEN);
|
---|
25 | sAlarmListWindow.show();
|
---|
26 | sMidnightAlarm = new danger.app.Alarm(0, this, null);
|
---|
27 | resetMidnightCheck();
|
---|
28 | }
|
---|
29 |
|
---|
30 | void resetMidnightCheck() {
|
---|
31 | int now = Hardware.getDate();
|
---|
32 | Date midnight = new Date();
|
---|
33 | midnight.addDays(1);
|
---|
34 | midnight.setTime(0);
|
---|
35 | sMidnightAlarm.resetWake(midnight.getDangerTimeGMT() - now);
|
---|
36 | DEBUG.p("Pester.resetMidnightCheck");
|
---|
37 | }
|
---|
38 |
|
---|
39 | private void showAlertForAlarm(Alarm alarm) {
|
---|
40 | AlertWindow alert = (AlertWindow)getAlert(ID_ALARM_ALERT, this);
|
---|
41 | alert.setTitle(alarm.getDateTimeString());
|
---|
42 | alert.setMessage(alarm.getMessage());
|
---|
43 | alert.setShowTone(alarm.getAlert());
|
---|
44 |
|
---|
45 | Font font = Font.findBoldSystemFont();
|
---|
46 | StaticText label = new StaticText(getString(ID_SNOOZE_LABEL_LEFT), font);
|
---|
47 | TextField field = new TextField();
|
---|
48 | field.setAlignment(TextField.JUSTIFY_RIGHT);
|
---|
49 | field.attachInputFilter(TextInputFilter.newLengthFilter(2));
|
---|
50 | field.attachInputFilter(TextInputFilter.newNumericFilter());
|
---|
51 | label.setLeft(35); // XXX alert.getMessageView().getLeft()
|
---|
52 | Layout.positionToRight(field, label, 3);
|
---|
53 | Layout.alignBaseline(label, field);
|
---|
54 | alert.addChildBelowMessageArea(label, label.getLeft(), label.getTop());
|
---|
55 | alert.addChildBelowMessageArea(field, field.getLeft(), field.getTop());
|
---|
56 | label = new StaticText(getString(ID_SNOOZE_LABEL_RIGHT), font);
|
---|
57 | Layout.positionToRight(label, field, 3);
|
---|
58 | Layout.alignBaseline(label, field);
|
---|
59 | alert.addChildBelowMessageArea(label, label.getLeft(), label.getTop());
|
---|
60 |
|
---|
61 | alert.setEventArgForControlWithID(ID_RESCHEDULE_BUTTON, alarm);
|
---|
62 | alert.setEventArgForControlWithID(ID_DISMISS_BUTTON, alarm);
|
---|
63 | alert.setDefaultFocus(field);
|
---|
64 |
|
---|
65 | alert.paint(new RecordingPen()); // force layout
|
---|
66 | int fieldID = alert.incrementMaxChildID();
|
---|
67 | alert.removeChild(field);
|
---|
68 | alert.addChild(field, fieldID);
|
---|
69 | Control snoozeButton = alert.getControlWithID(ID_SNOOZE_BUTTON);
|
---|
70 | Event event = snoozeButton.getEvent();
|
---|
71 | event.argument = alert;
|
---|
72 | event.data = fieldID;
|
---|
73 | snoozeButton.setEvent(event);
|
---|
74 | alert.disableButtonOnEmptyField(ID_SNOOZE_BUTTON, fieldID);
|
---|
75 |
|
---|
76 | alert.show(AlertWindow.SYSTEM_ALERT_TYPE_ALARM);
|
---|
77 | }
|
---|
78 |
|
---|
79 | public boolean receiveEvent(Event e) {
|
---|
80 | switch (e.type) {
|
---|
81 | case Event.EVENT_ALARM:
|
---|
82 | if (e.argument == null) { // midnight
|
---|
83 | updatePreviewScreen();
|
---|
84 | // update alarm list
|
---|
85 | sAlarmListWindow.receiveEvent(event(Event.EVENT_TIME_CHANGED, 0));
|
---|
86 | resetMidnightCheck();
|
---|
87 | return true;
|
---|
88 | }
|
---|
89 | showAlertForAlarm((Alarm)e.argument);
|
---|
90 | return true;
|
---|
91 | case EVENT_SET_ALARM:
|
---|
92 | AlarmSetDialog.getDialog().rescheduleAlarm((Alarm)e.argument);
|
---|
93 | return true;
|
---|
94 | case EVENT_SNOOZE_ALARM:
|
---|
95 | AlertWindow alert = (AlertWindow)e.argument;
|
---|
96 | int snoozeMinutes =
|
---|
97 | Integer.parseInt(alert.getControlWithID(e.data).toString());
|
---|
98 | Control dismissButton = alert.getControlWithID(ID_DISMISS_BUTTON);
|
---|
99 | Alarm alarm = (Alarm)dismissButton.getEvent().argument;
|
---|
100 | alarm.snoozeForMinutes(snoozeMinutes);
|
---|
101 | return true;
|
---|
102 | case EVENT_DISMISS_ALARM:
|
---|
103 | ((Alarm)e.argument).dismiss();
|
---|
104 | return true;
|
---|
105 | }
|
---|
106 | return super.receiveEvent(e);
|
---|
107 | }
|
---|
108 | }
|
---|