Changeset 253


Ignore:
Timestamp:
07/18/06 06:02:30 (13 years ago)
Author:
Nicholas Riley
Message:

Add timer in alarm set dialog to update alarm time display. Send events on number picker accept (work around probable bug). Fixed cancel not cancelling if you're using a fixed-time alarm.

Location:
trunk/hiptop/pester
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/hiptop/pester/locale/en_US/Pester.rsrc

    r251 r253  
    130130                        alignBaseline = ID_IN_BUTTON
    131131                        positionToRight = ID_IN_BUTTON : 1
     132                        className = "net.sabi.pester.EventfulNumberEditor"
    132133       
    133134                popupMenu
  • trunk/hiptop/pester/net/sabi/pester/Alarm.java

    r250 r253  
    7878            dataStream.writeInt(mDate.getUnixTimeGMT());
    7979            dataStream.writeInt(mType);
     80            dataStream.writeInt(mAlert == null ? 0 : mAlert.getID());
    8081            dataStream.flush();
    8182            return byteStream.toByteArray();
    8283        } catch (Exception e) {
    8384            // XXX do something
     85            DEBUG.p("failed to write alarm:" + e);
    8486        }
    8587        return null;
     
    9799            mMessage = dataStream.readUTF();
    98100            mPeriod = dataStream.readInt();
     101            mDate = new Date(dataStream.readInt());
    99102            mType = dataStream.readInt();
     103            int alertID = dataStream.readInt();
     104            mAlert = (alertID == 0 ? null : new RingToneObject(alertID));
    100105        } catch (Exception e) {
    101106            // XXX do something
     107            DEBUG.p("failed to read alarm:" + e);
    102108        }
    103109    }
     
    116122    }
    117123
     124    // XXX trigger on EVENT_TIME_CHANGED
    118125    void resume() {
    119126        mState = STATE_SCHEDULED;
  • trunk/hiptop/pester/net/sabi/pester/AlarmSetDialog.java

    r251 r253  
    4242    private Alarm mEditingAlarm;
    4343    private boolean mAlarmIsNew;
    44     private boolean haveShownWindow = false;
     44    private boolean mHaveShownWindow = false;
     45
     46    private danger.app.Alarm mValidateAlarm;
    4547
    4648    public static AlarmSetDialog getDialog() {
     
    8284        mStatusBox.setAutoResize(false);
    8385
     86        mValidateAlarm = new danger.app.Alarm(1, this);
     87
    8488        super.onDecoded();
    8589    }
     
    100104        }
    101105
    102         Date date = alarm.getDate();
     106        Date date = new Date(alarm.getDate());
    103107        mTimeEditor.setDate(date);
    104108        mDateEditor.setDate(date);
     
    124128        validate();
    125129        show();
    126         if (!haveShownWindow) {
     130        if (!mHaveShownWindow) {
    127131            Rect alarmRect = mSetAlarmButton.getFrame();
    128132            Rect contentRect = getContentRect();
     
    131135            mStatusBox.show();
    132136            addChild(mStatusBox);
    133             haveShownWindow = true;
     137            mHaveShownWindow = true;
    134138            setAutoSize(false); // don't resize to contain it next time
    135139        }
     
    170174        mDateEditor.min(now);
    171175        mDatePicker.min(now);
    172         if (!isIn() && editingDate().compareTo(now) <= 0) {
    173             mStatusBox.setText("Specify a future date.");
    174             return false;
    175         }
    176         mStatusBox.setText(Alarm.dateTimeString(editingDate(), true));
    177         // XXX invalidate @ alarm date if isIn()
    178         // XXX invalidate in 1 sec if isAt()
     176        Date editingDate = editingDate();
     177        if (isIn()) {
     178            mValidateAlarm.resetWake(60 - now.getSeconds());
     179        } else {
     180            int secondsUntilDate =
     181                editingDate.getDangerTimeGMT() - now.getDangerTimeGMT();
     182            if (secondsUntilDate <= 0) {
     183                mStatusBox.setText("Specify a future date.");
     184                return false;
     185            }
     186            mValidateAlarm.resetWake(secondsUntilDate);
     187        }
     188        mStatusBox.setText(Alarm.dateTimeString(editingDate, true));
    179189        return true;
    180190    }
    181191
     192    // XXX make a timer-only version of this which doesn't try to extract
     193    // XXX the editing date (it can cause odd behavior by forcing the
     194    // XXX NumberEditor to spit out a value)
    182195    protected void validate() {
    183         mSetAlarmButton.setEnabled(isValid());
     196        boolean isValid = isValid();
     197        mSetAlarmButton.setEnabled(isValid);
     198        if (!isValid)
     199            mValidateAlarm.deactivate();
     200    }
     201
     202    protected void stopEditing() {
     203        mEditingAlarm = null;
     204        mValidateAlarm.deactivate();
    184205    }
    185206
     
    200221            mEditingAlarm.schedule();
    201222            if (mAlarmIsNew) Alarms.addAlarm(mEditingAlarm);
    202             mEditingAlarm = null;
     223            stopEditing();
    203224            return true;
    204225        case EVENT_CANCEL_ALARM:
    205226            if (!mAlarmIsNew) mEditingAlarm.resume();
    206             mEditingAlarm = null;
     227            stopEditing();
    207228            return true;
    208229        case EVENT_DISCARD_ALARM:
    209             // XXX confirmation
    210             Alarms.removeAlarm(mEditingAlarm);
    211             mEditingAlarm = null;
    212             return true;
     230            // XXX prompt for confirmation
     231            stopEditing();
     232            return true;
     233        case Event.EVENT_TIME_CHANGED:
     234            // XXX this isn't being delivered on the simulator, why?
     235            DEBUG.p("time changed");
     236            validate();
     237            return true;
     238        case Event.EVENT_ALARM:
    213239        case EVENT_VALIDATE: // something changed
    214240            validate();
Note: See TracChangeset for help on using the changeset viewer.