package net.jessechen.models; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import android.os.Parcel; import android.os.Parcelable; public class AlarmModel implements Parcelable { boolean enabled; int hour, minute; // 24-hr military style. 0 <= hour < 24, 0 <= minute < 60 Set<Integer> repeat = new HashSet<Integer>(); // a set of {1,2,...,7} String ringtone; boolean vibrate; String label; long pid; public AlarmModel() { } public AlarmModel(boolean enabled, int hour, int minute, Set<Integer> repeat, String ringtone, boolean vibrate, String label) { super(); this.enabled = enabled; this.hour = hour; this.minute = minute; if (repeat != null) this.repeat = repeat; this.ringtone = ringtone; this.vibrate = vibrate; this.label = label; } public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public int getHour() { return hour; } public void setHour(int hour) { this.hour = hour; } public int getMinute() { return minute; } public void setMinute(int minute) { this.minute = minute; } public Set<Integer> getRepeat() { return repeat; } public void setRepeat(Set<Integer> repeat) { if (repeat != null) this.repeat = repeat; } public String getRingtone() { return ringtone; } public void setRingtone(String ringtone) { this.ringtone = ringtone; } public boolean isVibrate() { return vibrate; } public void setVibrate(boolean vibrate) { this.vibrate = vibrate; } public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } public long getPid() { return pid; } public void setPid(long pid) { this.pid = pid; } public String getTimeText() { return getTimeText(hour, minute); } public static String getTimeText(int hour, int minute) { if (hour < 0 || hour >= 24 || minute < 0 || minute >= 60) return "Bad Input"; return String.format("%d:%02d %s", hour > 12 ? hour - 12 : (hour == 0 ? 12 : hour), minute, hour >= 12 ? "PM" : "AM"); } public String getDaysText() { if (repeat == null) return ""; Integer[] days = new Integer[repeat.size()]; days = repeat.toArray(days); Arrays.sort(days); String ret = ""; for (int day : days) { if (!ret.equals("")) ret += ", "; switch (day) { case 1: ret += "Mo"; break; case 2: ret += "Tu"; break; case 3: ret += "We"; break; case 4: ret += "Th"; break; case 5: ret += "Fr"; break; case 6: ret += "Sa"; break; case 7: ret += "Su"; break; default: ret += "?"; break; } } return ret; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(enabled ? 1 : 0); dest.writeInt(hour); dest.writeInt(minute); int[] repeatArray = new int[repeat.size()]; for (int i = 0; i < repeat.size(); i++) { repeatArray[i] = repeat.toArray(new Integer[0])[i]; } dest.writeIntArray(repeatArray); dest.writeString(ringtone); dest.writeInt(vibrate ? 1 : 0); dest.writeString(label); } public static final Parcelable.Creator<AlarmModel> CREATOR = new Parcelable.Creator<AlarmModel>() { public AlarmModel createFromParcel(Parcel in) { return new AlarmModel(in); } public AlarmModel[] newArray(int size) { return new AlarmModel[size]; } }; private AlarmModel(Parcel in) { enabled = in.readInt() == 1; hour = in.readInt(); minute = in.readInt(); int[] repeatArray = in.createIntArray(); repeat = new HashSet<Integer>(); for (int i = 0; i < repeatArray.length; i++) { repeat.add(repeatArray[i]); } ringtone = in.readString(); vibrate = in.readInt() == 1; label = in.readString(); } }