package com.kuxhausen.huemore.alarm;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.text.format.DateFormat;
import com.kuxhausen.huemore.R;
import com.kuxhausen.huemore.persistence.Definitions;
import com.kuxhausen.huemore.persistence.Definitions.AlarmColumns;
import java.util.Calendar;
public class AlarmData {
// must be kept in sync with AlarmData constructor
public final static String[] QUERY_COLUMNS = {
AlarmColumns._ID,
AlarmColumns.COL_GROUP_ID,
Definitions.GroupColumns.COL_GROUP_NAME,
AlarmColumns.COL_MOOD_ID,
Definitions.MoodColumns.COL_MOOD_NAME,
AlarmColumns.COL_BRIGHTNESS,
AlarmColumns.COL_IS_ENABLED,
AlarmColumns.COL_REPEAT_DAYS,
AlarmColumns.COL_YEAR,
AlarmColumns.COL_MONTH,
AlarmColumns.COL_DAY_OF_MONTH,
AlarmColumns.COL_HOUR_OF_DAY,
AlarmColumns.COL_MINUTE
};
private long mId = -1; //the immutable database ID, or -1 if not in database
private long mGroupId;
private String mGroupName; // this is only to be read by the UI, and never saved to database
private long mMoodId;
private String mMoodName; // this is only to be read by the UI, and never saved to database
/**
* null or 0 - 255
*/
private Integer mBrightness;
private boolean mIsEnabled;
private DaysOfWeek mRepeatDays;
private int mYear;
private int mMonth;
private int mDayOfMonth; // day of month
private int mHourOfDay; //using 24 hour time
private int mMinute;
public AlarmData() {
mRepeatDays = new DaysOfWeek();
}
/**
* @param cursor already moved to the relevant row, ordered according to AlarmData.QUERY_COLUMNS
*/
public AlarmData(Cursor cursor) {
mId = cursor.getLong(0);
setGroup(cursor.getLong(1), cursor.getString(2));
setMood(cursor.getLong(3), cursor.getString(4));
if (!cursor.isNull(5)) {
setBrightness(cursor.getInt(5));
}
setEnabled(cursor.getInt(6) != 0);
setRepeatDays(new DaysOfWeek((byte) cursor.getInt(7)));
mYear = cursor.getInt(8);
mMonth = cursor.getInt(9);
mDayOfMonth = cursor.getInt(10);
mHourOfDay = cursor.getInt(11);
mMinute = cursor.getInt(12);
}
public ContentValues getValues() {
ContentValues cv = new ContentValues();
cv.put(AlarmColumns.COL_GROUP_ID, mGroupId);
cv.put(AlarmColumns.COL_MOOD_ID, mMoodId);
cv.put(AlarmColumns.COL_BRIGHTNESS, getBrightness());
cv.put(AlarmColumns.COL_IS_ENABLED, isEnabled() ? 1 : 0);
cv.put(AlarmColumns.COL_REPEAT_DAYS, getRepeatDays().getValue());
Calendar calendar = getAlarmTime();
cv.put(AlarmColumns.COL_YEAR, calendar.get(Calendar.YEAR));
cv.put(AlarmColumns.COL_MONTH, calendar.get(Calendar.MONTH));
cv.put(AlarmColumns.COL_DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH));
cv.put(AlarmColumns.COL_HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY));
cv.put(AlarmColumns.COL_MINUTE, calendar.get(Calendar.MINUTE));
return cv;
}
public long getId() {
return mId;
}
public void setId(long id) {
mId = id;
}
public long getGroupId() {
return mGroupId;
}
public String getGroupName() {
return mGroupName;
}
public void setGroup(long id, String name) {
mGroupId = id;
mGroupName = name;
}
public long getMoodId() {
return mMoodId;
}
public String getMoodName() {
return mMoodName;
}
public void setMood(long id, String name) {
mMoodId = id;
mMoodName = name;
}
public Integer getBrightness() {
return mBrightness;
}
public Integer getPercentBrightness() {
if (mBrightness == null) {
return null;
}
return (int) (mBrightness / 2.55);
}
public void setBrightness(Integer brightness) {
mBrightness = brightness;
}
public boolean isEnabled() {
return mIsEnabled;
}
public void setEnabled(boolean enabled) {
mIsEnabled = enabled;
}
public DaysOfWeek getRepeatDays() {
return mRepeatDays;
}
public void setRepeatDays(DaysOfWeek days) {
if (days == null) {
throw new IllegalArgumentException();
}
mRepeatDays = days;
}
public int getHourOfDay() {
return mHourOfDay;
}
public int getMinute() {
return mMinute;
}
public void setAlarmTime(Calendar calendar) {
mYear = calendar.get(Calendar.YEAR);
mMonth = calendar.get(Calendar.MONTH);
mDayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
mHourOfDay = calendar.get(Calendar.HOUR_OF_DAY);
mMinute = calendar.get(Calendar.MINUTE);
}
public Calendar getAlarmTime() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, mYear);
calendar.set(Calendar.MONTH, mMonth);
calendar.set(Calendar.DAY_OF_MONTH, mDayOfMonth);
calendar.set(Calendar.HOUR_OF_DAY, mHourOfDay);
calendar.set(Calendar.MINUTE, mMinute);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar;
}
public String getUserTimeString(Context c) {
return DateFormat.getTimeFormat(c).format(getAlarmTime().getTime());
}
public String getSecondaryDescription(Context c) {
String result = getGroupName() + " \u2192 " + getMoodName();
if (!getRepeatDays().isNoDaysSet()) {
result += " " + repeatsToString(c, getRepeatDays());
}
return result;
}
public static String repeatsToString(Context c, DaysOfWeek repeats) {
String result = "";
String[] days = c.getResources().getStringArray(R.array.cap_short_repeat_days);
if (repeats.isAllDaysSet()) {
result = c.getResources().getString(R.string.cap_short_every_day);
} else if (repeats.isNoDaysSet()) {
result = c.getResources().getString(R.string.cap_short_none);
} else {
for (int i = 0; i < 7; i++) {
if (repeats.isDaySet(i + 1)) {
result += days[i] + " ";
}
}
}
return result;
}
}