Ignore:
Timestamp:
07/19/06 04:38:21 (18 years ago)
Author:
Nicholas Riley
Message:

Handle time changes by rescheduling (if it's time-based) or just updating the fire time (if it's interval-based, since those use real time when active).

File:
1 edited

Legend:

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

    r253 r255  
    88import danger.audio.RingToneObject;
    99import danger.internal.Date;
     10import danger.system.Hardware;
    1011import danger.util.LocaleUtils;
    1112import danger.util.StdActiveList;
     
    2728    // transient
    2829    private int mState;
     30    private int mAbsoluteFireTime; // only valid if periodic
    2931    private danger.app.Alarm mAlarm;
    3032
     
    122124    }
    123125
    124     // XXX trigger on EVENT_TIME_CHANGED
    125126    void resume() {
    126127        mState = STATE_SCHEDULED;
     
    132133    }
    133134
     135    void timeChanged() {
     136        if (mState != STATE_SCHEDULED)
     137            return;
     138        if (getUsesPeriod()) {
     139            int realSecondsLeft = mAbsoluteFireTime - Hardware.getAbsoluteTime();
     140            mDate = new Date();
     141            mDate.addSeconds(realSecondsLeft < 0 ? 0 : realSecondsLeft);
     142            // no need to call resume(): alarm uses absolute time
     143        } else {
     144            resume();
     145        }
     146    }
     147
    134148    void schedule() {
    135149        if (getUsesPeriod()) {
    136150            mDate = new Date();
    137151            mDate.addSeconds(mPeriod);
     152            mAbsoluteFireTime = Hardware.getAbsoluteTime() + mPeriod;
    138153        }
    139154        resume();
Note: See TracChangeset for help on using the changeset viewer.