Ignore:
Timestamp:
07/22/06 08:45:34 (18 years ago)
Author:
Nicholas Riley
Message:

First pass at alarm persistence.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/hiptop/pester/net/sabi/pester/Alarms.java

    r259 r276  
    99import danger.internal.Date;
    1010import danger.util.StdActiveList;
     11import danger.util.DEBUG;
    1112
    1213public class Alarms extends StdActiveList {
     
    2223    private Alarms() {
    2324        mDataStore = DataStore.createDataStore("alarms", true /* auto sync */);
     25        byte[][] alarmsData = mDataStore.getRecords();
     26        int i;
     27        for (i = 0 ; i < alarmsData.length ; ++i) {
     28            Alarm alarm = new Alarm();
     29            alarm.fromByteArray(alarmsData[i]);
     30            alarm.setUID(mDataStore.getRecordUID(i));
     31            insertItemSorted(alarm, alarm);
     32            alarm.resume();
     33        }
    2434    }
    2535
    2636    public static Alarms getList() {
    2737        if (sAlarmList == null) {
     38            Application.registerForEvent(sListener, Event.EVENT_TIME_CHANGED);
     39            sSettingsDB = new SettingsDB("settings", true /* auto sync */);
     40            sListener = new Listener();
    2841            sAlarmList = new Alarms();
    29             sListener = new Listener();
    30             sSettingsDB = new SettingsDB("settings", true /* auto sync */);
    31             Application.registerForEvent(sListener, Event.EVENT_TIME_CHANGED);
    3242        }
    3343        return sAlarmList;
     
    3949    public static void removeAlarm(Alarm alarm) {
    4050        sAlarmList.removeItem(alarm);
     51    }
     52
     53    // XXX handle EVENT_DATASTORE_RESTORED: note that in the event of
     54    // a hard reset, items may come back out of order, so we need to
     55    // implement an in-place sort, then insert the current alarm list.
     56    // Aiee.  Also, what on earth happens when UIDs aren't synchronized?
     57   
     58    protected void onItemAdded(Object item, int index) {
     59        if (sAlarmList == null) // restoring from service
     60            return;
     61        Alarm alarm = (Alarm)item;
     62        DEBUG.p("adding: " + alarm +
     63                " next UID: " + mDataStore.getAutoSyncNextUID());
     64        index = mDataStore.addRecord(alarm.toByteArray(), index);
     65        alarm.setUID(mDataStore.getRecordUID(index));
     66        DEBUG.p("added UID " + alarm.getUID() + " @ " + index);
     67    }
     68
     69    protected void onItemRemoved(Object item, int index) {
     70        Alarm alarm = (Alarm)item;
     71        // XXX make sure +/- UIDs are OK
     72        int uid = alarm.getUID();
     73        if (uid == 0)
     74            return;
     75        DEBUG.p("removing; " + alarm + " UID " + uid);
     76        mDataStore.removeRecordByUID(uid);
     77    }
     78
     79    public void onItemUpdated(Object item, int index) {
     80        if (sAlarmList == null) // restoring from service
     81            return;
     82        Alarm alarm = (Alarm)item;
     83        // XXX check that updating a + UID by a - one is OK
     84        mDataStore.setRecordDataByUID(alarm.getUID(), alarm.toByteArray(), true);
     85        DEBUG.p("updated: " + alarm + " UID " + alarm.getUID());
    4186    }
    4287
     
    67112        public boolean receiveEvent(Event e) {
    68113            if (e.type == Event.EVENT_TIME_CHANGED) {
    69                 // XXX do we get this when the time zone changes?
    70114                Alarms.getList().forEach(this);
    71115                return true;
     
    75119    }
    76120}
    77 
Note: See TracChangeset for help on using the changeset viewer.