package edu.pdx.cecs.orcycle; import java.util.Calendar; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.util.Log; public class UseReminder { private static final String MODULE_TAG = "UseReminder"; public static final int REMINDER_PERIOD = 3; // In months /** * Creates an alarm intent for reminder. * with action: ACTION_USE_REMINDER * @param context * @return */ private static PendingIntent getUseAlarm(Context context) { Intent intent = new Intent(ReminderReceiver.ACTION_USE_REMINDER); // Construct and return the pending intent for broadcasting the alarm return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); } /** * Creates an alarm intent for 1 week from now. * with action: ACTION_ONE_WEEK_REMINDER * @param context * @return */ private static PendingIntent getOneWeekAlarm(Context context) { Intent intent = new Intent(ReminderReceiver.ACTION_ONE_WEEK_USE_REMINDER); // Construct and return the pending intent for broadcasting the alarm return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); } /** * Cancels the current use reminder, and schedules a new one. * @param context */ public static void rescheduleAlarm(Context context) { try { AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); // Cancel all previous alarms for this reminder alarmMgr.cancel(getUseAlarm(context)); // Create a calendar set to the current time Calendar alarmCalendar = Calendar.getInstance(); alarmCalendar.setTimeInMillis(System.currentTimeMillis()); // Add REMINDER_PERIOD months to the calendar alarmCalendar.add(Calendar.MONTH, REMINDER_PERIOD); // alarmCalendar.add(Calendar.MINUTE, 1); // For debugging Log.i(MODULE_TAG, "Alarm set for: " + alarmCalendar.getTime().toString()); PendingIntent alarmIntent = getUseAlarm(context); // Set alarm to go off at the time set by the calendar alarmMgr.set(AlarmManager.RTC, alarmCalendar.getTimeInMillis(), alarmIntent); } catch(Exception ex) { Log.e(MODULE_TAG, ex.getMessage()); } } /** * Cancels the current 1 week reminder, and schedules a new one for 6 months from now * @param context */ public static void scheduleOneWeekAlarm(Context context) { try { AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); // Cancel all previous alarms for this reminder alarmMgr.cancel(getOneWeekAlarm(context)); // Create a calendar set to the current time Calendar alarmCalendar = Calendar.getInstance(); alarmCalendar.setTimeInMillis(System.currentTimeMillis()); // Add six months to the calendar alarmCalendar.add(Calendar.HOUR, 24 * 7); // alarmCalendar.add(Calendar.SECOND, 30); // For debugging Log.i(MODULE_TAG, "Alarm set for: " + alarmCalendar.getTime().toString()); PendingIntent alarmIntent = getOneWeekAlarm(context); // Set alarm to go off at the time set by the calendar alarmMgr.set(AlarmManager.RTC, alarmCalendar.getTimeInMillis(), alarmIntent); } catch(Exception ex) { Log.e(MODULE_TAG, ex.getMessage()); } } /** * Cancels the 1 week alarm. * @param context */ public static void cancelOneWeekAlarm(Context context) { AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); // Cancel all previous alarms for this reminder alarmMgr.cancel(getOneWeekAlarm(context)); } }