source: trunk/hiptop/pester/net/sabi/pester/Alarms.java@ 259

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

Sortable alarm list.

File size: 2.1 KB
Line 
1package net.sabi.pester;
2
3import java.util.Comparator;
4import danger.app.Application;
5import danger.app.DataStore;
6import danger.app.Event;
7import danger.app.SettingsDB;
8import danger.app.SettingsDBException;
9import danger.internal.Date;
10import danger.util.StdActiveList;
11
12public class Alarms extends StdActiveList {
13 // max # records in a datastore
14 private static final int MAX_ALARM_COUNT = 50;
15
16 private static Alarms sAlarmList = null;
17 private static Listener sListener;
18 private static SettingsDB sSettingsDB;
19
20 private DataStore mDataStore;
21
22 private Alarms() {
23 mDataStore = DataStore.createDataStore("alarms", true /* auto sync */);
24 }
25
26 public static Alarms getList() {
27 if (sAlarmList == null) {
28 sAlarmList = new Alarms();
29 sListener = new Listener();
30 sSettingsDB = new SettingsDB("settings", true /* auto sync */);
31 Application.registerForEvent(sListener, Event.EVENT_TIME_CHANGED);
32 }
33 return sAlarmList;
34 }
35
36 public static void addAlarm(Alarm alarm) {
37 sAlarmList.insertItemSorted(alarm, alarm);
38 }
39 public static void removeAlarm(Alarm alarm) {
40 sAlarmList.removeItem(alarm);
41 }
42
43 private static String KEY_DEFAULT_ALARM = "default alarm";
44
45 public static Alarm getDefaultAlarm() {
46 Alarm defaultAlarm = new Alarm();
47 try {
48 defaultAlarm.fromByteArray(sSettingsDB.getBytes(KEY_DEFAULT_ALARM));
49 } catch (SettingsDBException e) {
50 defaultAlarm = new Alarm();
51 defaultAlarm.setDate(new Date());
52 defaultAlarm.setPeriod(600, false);
53 }
54 return defaultAlarm;
55 }
56 public static void setDefaultAlarm(Alarm alarm) {
57 sSettingsDB.setBytes(KEY_DEFAULT_ALARM, alarm.toByteArray());
58 }
59
60 static class Listener extends danger.app.Listener
61 implements danger.util.ActiveList.ForEach {
62
63 public void receive(Object item) {
64 ((Alarm)item).timeChanged();
65 }
66
67 public boolean receiveEvent(Event e) {
68 if (e.type == Event.EVENT_TIME_CHANGED) {
69 // XXX do we get this when the time zone changes?
70 Alarms.getList().forEach(this);
71 return true;
72 }
73 return super.receiveEvent(e);
74 }
75 }
76}
77
Note: See TracBrowser for help on using the repository browser.