package org.glucosio.android.tools;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.util.Log;
import org.glucosio.android.db.DatabaseHandler;
import org.glucosio.android.db.Reminder;
import org.glucosio.android.receivers.GlucosioBroadcastReceiver;
import org.joda.time.DateTime;
import java.util.Calendar;
import java.util.List;
public class GlucosioAlarmManager {
private Context context;
private AlarmManager alarmMgr;
private DatabaseHandler db;
public GlucosioAlarmManager(Context context) {
this.context = context;
this.db = new DatabaseHandler(context);
this.alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
}
public void setAlarms() {
List<Reminder> reminders = db.getReminders();
int activeRemindersCount = 0;
// Set an alarm for each date
for (int i = 0; i < reminders.size(); i++) {
Reminder reminder = reminders.get(i);
Intent intent = new Intent(context, GlucosioBroadcastReceiver.class);
intent.putExtra("metric", reminder.getMetric());
intent.putExtra("glucosio_reminder", true);
intent.putExtra("reminder_label", reminder.getLabel());
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, (int) reminder.getId(), intent, 0);
if (reminder.isActive()) {
activeRemindersCount++;
Calendar calNow = Calendar.getInstance();
Calendar calAlarm = Calendar.getInstance();
calAlarm.setTime(reminder.getAlarmTime());
calAlarm.set(Calendar.SECOND, 0);
DateTime now = new DateTime(calNow.getTime());
DateTime reminderDate = new DateTime(calAlarm);
if (reminderDate.isBefore(now)) {
calAlarm.set(Calendar.DATE, calNow.get(Calendar.DATE));
calAlarm.add(Calendar.DATE, 1);
}
Log.d("Glucosio", "Added reminder on " + calAlarm.get(Calendar.DAY_OF_MONTH) + " at " + calAlarm.get(Calendar.HOUR) + ":" + calAlarm.get(Calendar.MINUTE));
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calAlarm.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, alarmIntent);
} else {
alarmMgr.cancel(alarmIntent);
}
}
enableBootReceiver(activeRemindersCount > 0);
}
private void enableBootReceiver(boolean value) {
ComponentName receiver = new ComponentName(context, GlucosioBroadcastReceiver.class);
PackageManager pm = context.getPackageManager();
int componentState = value ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
pm.setComponentEnabledSetting(receiver,
componentState,
PackageManager.DONT_KILL_APP);
}
}