package com.pedrocarrillo.expensetracker.entities; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import com.pedrocarrillo.expensetracker.ExpenseTrackerApp; import com.pedrocarrillo.expensetracker.receivers.AlarmReceiver; import com.pedrocarrillo.expensetracker.ui.reminders.NewReminderFragment; import com.pedrocarrillo.expensetracker.utils.DateUtils; import com.pedrocarrillo.expensetracker.utils.RealmManager; import java.util.Calendar; import java.util.Date; import java.util.List; import io.realm.RealmObject; import io.realm.annotations.PrimaryKey; /** * Created by Pedro on 9/25/2015. */ public class Reminder extends RealmObject { @PrimaryKey private String id; private String name; private boolean state; private int day; private Date date; private Date createdAt; public Reminder() {} public Reminder(String name, int day, boolean state, Date date) { this.name = name; this.day = day; this.state = state; this.date = date; this.createdAt = new Date(); } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isState() { return state; } public void setState(boolean state) { this.state = state; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public int getDay() { return day; } public void setDay(int day) { this.day = day; } public Date getCreatedAt() { return createdAt; } public void setCreatedAt(Date createdAt) { this.createdAt = createdAt; } public static List<Reminder> getReminders() { return RealmManager.getInstance().getRealmInstance().where(Reminder.class).findAll(); } public static void saveNewReminder(String name, int daySelected, boolean state, Date timeSelected) { Reminder reminder = new Reminder(name, daySelected, true, timeSelected); RealmManager.getInstance().save(reminder, Reminder.class); setReminder(reminder); } public static void setReminder(Reminder reminder) { Calendar alarmCalendar = Calendar.getInstance(); Calendar reminderDate = Calendar.getInstance(); reminderDate.setTime(reminder.getDate()); if (reminder.getDay() <= alarmCalendar.get(Calendar.DAY_OF_MONTH) || !DateUtils.isToday(reminder.getCreatedAt())) { alarmCalendar.setTime(DateUtils.getLastDateOfCurrentMonth()); } alarmCalendar.set(Calendar.DATE, reminder.getDay()); alarmCalendar.set(Calendar.HOUR_OF_DAY, reminderDate.get(Calendar.HOUR_OF_DAY)); alarmCalendar.set(Calendar.MINUTE, reminderDate.get(Calendar.MINUTE)); AlarmManager alarmMgr = (AlarmManager) ExpenseTrackerApp.getContext().getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(ExpenseTrackerApp.getContext(), AlarmReceiver.class); intent.putExtra(NewReminderFragment.REMINDER_ID_KEY, reminder.getId()); PendingIntent alarmIntent = PendingIntent.getBroadcast(ExpenseTrackerApp.getContext(), (int) reminder.getCreatedAt().getTime(), intent, 0); alarmMgr.set(AlarmManager.RTC_WAKEUP, alarmCalendar.getTimeInMillis(), alarmIntent); } public static void cancelReminder(Reminder reminder) { AlarmManager alarmMgr = (AlarmManager) ExpenseTrackerApp.getContext().getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(ExpenseTrackerApp.getContext(), AlarmReceiver.class); intent.putExtra(NewReminderFragment.REMINDER_ID_KEY, reminder.getId()); PendingIntent alarmIntent = PendingIntent.getBroadcast(ExpenseTrackerApp.getContext(), (int) reminder.getCreatedAt().getTime(), intent, 0); alarmMgr.cancel(alarmIntent); } public static void updateReminder(Reminder reminder, boolean checked) { Reminder reminderToUpdate = new Reminder(reminder.getName(), reminder.getDay(), checked, reminder.getDate()); reminderToUpdate.setCreatedAt(reminder.getCreatedAt()); reminderToUpdate.setId(reminder.getId()); RealmManager.getInstance().update(reminderToUpdate); if (checked) { setReminder(reminder); } else { cancelReminder(reminder); } } public static void eraseReminder(Reminder reminder) { if (reminder.isState()) { cancelReminder(reminder); } RealmManager.getInstance().delete(reminder); } public static void eraseReminders(List<Reminder> reminderList) { for (Reminder reminder : reminderList) { if (reminder.isState()) { cancelReminder(reminder); } } RealmManager.getInstance().delete(reminderList); } }