[237] | 1 | package net.sabi.pester;
|
---|
| 2 |
|
---|
| 3 | import danger.app.Application;
|
---|
[242] | 4 | import danger.app.Event;
|
---|
[299] | 5 | import danger.internal.Date;
|
---|
| 6 | import danger.system.Hardware;
|
---|
[296] | 7 | import danger.ui.AlertWindow;
|
---|
| 8 | import danger.ui.Container;
|
---|
| 9 | import danger.ui.Control;
|
---|
| 10 | import danger.ui.Font;
|
---|
[287] | 11 | import danger.ui.Layout;
|
---|
[296] | 12 | import danger.ui.RecordingPen;
|
---|
[237] | 13 | import danger.ui.ScreenWindow;
|
---|
[287] | 14 | import danger.ui.StaticText;
|
---|
[296] | 15 | import danger.ui.TextField;
|
---|
[242] | 16 | import danger.util.DEBUG;
|
---|
[296] | 17 | import danger.util.TextInputFilter;
|
---|
[237] | 18 |
|
---|
| 19 | public class Pester extends Application implements Resources, Commands {
|
---|
[242] | 20 | private static ScreenWindow sAlarmListWindow;
|
---|
[299] | 21 | private static danger.app.Alarm sMidnightAlarm;
|
---|
[242] | 22 |
|
---|
[237] | 23 | public Pester() {
|
---|
[242] | 24 | sAlarmListWindow = (ScreenWindow)getResources().getScreen(ID_ALARM_LIST_SCREEN);
|
---|
| 25 | sAlarmListWindow.show();
|
---|
[299] | 26 | sMidnightAlarm = new danger.app.Alarm(0, this, null);
|
---|
| 27 | resetMidnightCheck();
|
---|
[237] | 28 | }
|
---|
| 29 |
|
---|
[299] | 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 |
|
---|
[296] | 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 |
|
---|
[242] | 79 | public boolean receiveEvent(Event e) {
|
---|
| 80 | switch (e.type) {
|
---|
| 81 | case Event.EVENT_ALARM:
|
---|
[299] | 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 | }
|
---|
[296] | 89 | showAlertForAlarm((Alarm)e.argument);
|
---|
[242] | 90 | return true;
|
---|
[287] | 91 | case EVENT_SET_ALARM:
|
---|
[296] | 92 | AlarmSetDialog.getDialog().rescheduleAlarm((Alarm)e.argument);
|
---|
[287] | 93 | return true;
|
---|
| 94 | case EVENT_SNOOZE_ALARM:
|
---|
[296] | 95 | AlertWindow alert = (AlertWindow)e.argument;
|
---|
[288] | 96 | int snoozeMinutes =
|
---|
[296] | 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);
|
---|
[287] | 101 | return true;
|
---|
[242] | 102 | case EVENT_DISMISS_ALARM:
|
---|
[296] | 103 | ((Alarm)e.argument).dismiss();
|
---|
[242] | 104 | return true;
|
---|
| 105 | }
|
---|
| 106 | return super.receiveEvent(e);
|
---|
| 107 | }
|
---|
| 108 | }
|
---|