source: trunk/hiptop/pester/net/sabi/pester/Pester.java@ 299

Last change on this file since 299 was 299, checked in by Nicholas Riley, 18 years ago

Midnight check - changes "Tomorrow" to "Today" etc. at midnight.

File size: 3.6 KB
Line 
1package net.sabi.pester;
2
3import danger.app.Application;
4import danger.app.Event;
5import danger.internal.Date;
6import danger.system.Hardware;
7import danger.ui.AlertWindow;
8import danger.ui.Container;
9import danger.ui.Control;
10import danger.ui.Font;
11import danger.ui.Layout;
12import danger.ui.RecordingPen;
13import danger.ui.ScreenWindow;
14import danger.ui.StaticText;
15import danger.ui.TextField;
16import danger.util.DEBUG;
17import danger.util.TextInputFilter;
18
19public 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}
Note: See TracBrowser for help on using the repository browser.