package net.sabi.pester; import java.util.Comparator; import danger.app.Application; import danger.app.DataStore; import danger.app.Event; import danger.app.SettingsDB; import danger.app.SettingsDBException; import danger.internal.Date; import danger.util.StdActiveList; public class Alarms extends StdActiveList { // max # records in a datastore private static final int MAX_ALARM_COUNT = 50; private static Alarms sAlarmList = null; private static Listener sListener; private static SettingsDB sSettingsDB; private DataStore mDataStore; private Alarms() { mDataStore = DataStore.createDataStore("alarms", true /* auto sync */); } public static Alarms getList() { if (sAlarmList == null) { sAlarmList = new Alarms(); sListener = new Listener(); sSettingsDB = new SettingsDB("settings", true /* auto sync */); Application.registerForEvent(sListener, Event.EVENT_TIME_CHANGED); } return sAlarmList; } public static void addAlarm(Alarm alarm) { sAlarmList.addItem(alarm); } public static void removeAlarm(Alarm alarm) { sAlarmList.removeItem(alarm); } private static String KEY_DEFAULT_ALARM = "default alarm"; public static Alarm getDefaultAlarm() { Alarm defaultAlarm = new Alarm(); try { defaultAlarm.fromByteArray(sSettingsDB.getBytes(KEY_DEFAULT_ALARM)); } catch (SettingsDBException e) { defaultAlarm = new Alarm(); defaultAlarm.setDate(new Date()); defaultAlarm.setPeriod(600, false); } return defaultAlarm; } public static void setDefaultAlarm(Alarm alarm) { sSettingsDB.setBytes(KEY_DEFAULT_ALARM, alarm.toByteArray()); } /* private static Alarm sAlarm0 = new Alarm(); private static Alarm sAlarm1 = new Alarm(); public int compare(Object arg0, Object arg1) { return Collator.getInstance().compare( } */ static class Listener extends danger.app.Listener implements danger.util.ActiveList.ForEach { public void receive(Object item) { ((Alarm)item).timeChanged(); } public boolean receiveEvent(Event e) { if (e.type == Event.EVENT_TIME_CHANGED) { // XXX do we get this when the time zone changes? Alarms.getList().forEach(this); return true; } return super.receiveEvent(e); } } }