source: trunk/hiptop/pester/net/sabi/pester/Alarm.java@ 242

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

Basic functionality works.

File size: 3.3 KB
Line 
1package net.sabi.pester;
2
3import java.io.ByteArrayInputStream;
4import java.io.ByteArrayOutputStream;
5import java.io.DataInputStream;
6import java.io.DataOutputStream;
7import danger.app.Application;
8import danger.internal.Date;
9import danger.util.StdActiveList;
10import danger.util.StdActiveObject;
11import danger.util.DEBUG;
12
13public class Alarm extends StdActiveObject {
14 private static final int VERSION_1 = 1;
15
16 // persisted
17 private String mMessage;
18 private int mType;
19 private int mPeriod; // XXX rename to 'interval'
20 private Date mDate;
21
22 // transient
23 private int mState;
24 private danger.app.Alarm mAlarm;
25
26 public Alarm() {
27 mState = STATE_INVALID;
28 mAlarm = new danger.app.Alarm(0, Application.getCurrentApp(), this);
29 }
30
31 public String getMessage() {
32 return mMessage;
33 }
34 public int getPeriod() {
35 return mPeriod;
36 }
37 public boolean getUsesPeriod() {
38 return mType != TYPE_DATE;
39 }
40 public boolean getRepeating() {
41 return mType == TYPE_PERIODIC_REPEATING;
42 }
43 public Date getDate() {
44 return mDate;
45 }
46
47 public void setMessage(String message) {
48 mMessage = message;
49 }
50 public void setPeriod(int period, boolean repeating) {
51 mType = repeating ? TYPE_PERIODIC_REPEATING : TYPE_PERIODIC;
52 mPeriod = period;
53 mDate = new Date();
54 mDate.addSeconds(period);
55 }
56 public void setDate(Date date) {
57 mType = TYPE_DATE;
58 mDate = date;
59 }
60
61 public byte[] toByteArray() {
62 try {
63 ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
64 DataOutputStream dataStream = new DataOutputStream(byteStream);
65
66 dataStream.writeByte(VERSION_1);
67 dataStream.writeUTF(mMessage);
68 dataStream.writeInt(mPeriod);
69 dataStream.writeInt(mDate.getUnixTimeGMT());
70 dataStream.writeInt(mType);
71 dataStream.flush();
72 return byteStream.toByteArray();
73 } catch (Exception e) {
74 // XXX do something
75 }
76 return null;
77 }
78
79 public void fromByteArray(byte[] data) {
80 try {
81 ByteArrayInputStream byteStream = new ByteArrayInputStream(data);
82 DataInputStream dataStream = new DataInputStream(byteStream);
83
84 byte version = dataStream.readByte();
85 if (version != VERSION_1) {
86 // XXX barf
87 }
88 mMessage = dataStream.readUTF();
89 mPeriod = dataStream.readInt();
90 mType = dataStream.readInt();
91 } catch (Exception e) {
92 // XXX do something
93 }
94 }
95
96 void beginEditing() {
97 mState = STATE_EDITING;
98 mAlarm.deactivate();
99 }
100
101 void dismiss() {
102 if (getRepeating())
103 schedule();
104 else
105 ((StdActiveList)getDelegate()).removeItem(this);
106 }
107
108 void cancel() {
109 mState = STATE_INVALID;
110 mAlarm.deactivate();
111 }
112
113 void schedule() {
114 mState = STATE_SCHEDULED;
115 DEBUG.p("schedule alarm: " + mMessage);
116 switch (mType) {
117 case TYPE_PERIODIC:
118 DEBUG.p(" - periodic: " + mPeriod); break;
119 case TYPE_PERIODIC_REPEATING:
120 DEBUG.p(" - periodic repeating: " + mPeriod); break;
121 case TYPE_DATE:
122 DEBUG.p(" - date: " + mDate); break;
123 }
124 mAlarm.resetWake(mPeriod);
125 }
126
127 public String toString() {
128 return mMessage;
129 }
130
131 public static final int TYPE_PERIODIC = 0;
132 public static final int TYPE_PERIODIC_REPEATING = 1;
133 public static final int TYPE_DATE = 2;
134
135 public static final int STATE_INVALID = 0;
136 public static final int STATE_EDITING = 1;
137 public static final int STATE_SCHEDULED = 2;
138}
Note: See TracBrowser for help on using the repository browser.