diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml index f440b65c2..a32d58212 100644 --- a/astrid/AndroidManifest.xml +++ b/astrid/AndroidManifest.xml @@ -227,8 +227,6 @@ - - @@ -293,14 +291,6 @@ - - - - - - @@ -512,6 +502,27 @@ + + + + + + + + + + + + + + + + + + + ? AND " + Calendars.EVENTS_DTSTART_COL + " < ?", @@ -50,7 +51,6 @@ public class CalendarAlarmScheduler { PendingIntent pendingIntent = PendingIntent.getBroadcast(context, CalendarAlarmReceiver.REQUEST_CODE_CAL_REMINDER, eventAlarm, 0); - AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); am.cancel(pendingIntent); long alarmTime = start - DateUtilities.ONE_MINUTE * 15; @@ -61,6 +61,13 @@ public class CalendarAlarmScheduler { } } + + // Schedule alarm to recheck and reschedule calendar alarms in 12 hours + Intent rescheduleAlarm = new Intent(CalendarStartupReceiver.BROADCAST_RESCHEDULE_CAL_ALARMS); + PendingIntent pendingReschedule = PendingIntent.getBroadcast(context, 0, + rescheduleAlarm, 0); + am.cancel(pendingReschedule); + am.set(AlarmManager.RTC, DateUtilities.now() + DateUtilities.ONE_HOUR * 12, pendingReschedule); } finally { events.close(); } diff --git a/astrid/plugin-src/com/todoroo/astrid/gcal/CalendarStartupReceiver.java b/astrid/plugin-src/com/todoroo/astrid/gcal/CalendarStartupReceiver.java new file mode 100644 index 000000000..3cad18fa8 --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/gcal/CalendarStartupReceiver.java @@ -0,0 +1,33 @@ +package com.todoroo.astrid.gcal; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +import com.timsu.astrid.R; +import com.todoroo.andlib.service.ContextManager; +import com.todoroo.andlib.utility.Preferences; +import com.todoroo.astrid.api.AstridApiConstants; + +public class CalendarStartupReceiver extends BroadcastReceiver { + + public static final String BROADCAST_RESCHEDULE_CAL_ALARMS = AstridApiConstants.PACKAGE + ".SCHEDULE_CAL_REMINDERS"; //$NON-NLS-1$ + + @Override + public void onReceive(Context context, Intent intent) { + ContextManager.setContext(context); + scheduleCalendarAlarms(context); + } + + public static void scheduleCalendarAlarms(final Context context) { + if (!Preferences.getBoolean(R.string.p_calendar_reminders, true)) + return; + new Thread(new Runnable() { + @Override + public void run() { + CalendarAlarmScheduler.scheduleAllCalendarAlarms(context); + } + }).start(); + } + +} diff --git a/astrid/src/com/todoroo/astrid/service/StartupService.java b/astrid/src/com/todoroo/astrid/service/StartupService.java index 78e743203..e01ea0f79 100644 --- a/astrid/src/com/todoroo/astrid/service/StartupService.java +++ b/astrid/src/com/todoroo/astrid/service/StartupService.java @@ -46,7 +46,7 @@ import com.todoroo.astrid.backup.BackupService; import com.todoroo.astrid.backup.TasksXmlImporter; import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.data.Task; -import com.todoroo.astrid.gcal.CalendarAlarmScheduler; +import com.todoroo.astrid.gcal.CalendarStartupReceiver; import com.todoroo.astrid.gtasks.GtasksPreferenceService; import com.todoroo.astrid.gtasks.sync.GtasksSyncService; import com.todoroo.astrid.opencrx.OpencrxCoreUtils; @@ -120,7 +120,6 @@ public class StartupService { if(hasStartedUp || context == null) return; - // sets up context manager ContextManager.setContext(context); @@ -192,8 +191,6 @@ public class StartupService { AstridPreferences.setCurrentVersionName(versionName); } - CalendarAlarmScheduler.scheduleAllCalendarAlarms(context); - upgradeService.performSecondaryUpgrade(context); final int finalLatestVersion = latestSetVersion; @@ -225,6 +222,7 @@ public class StartupService { // perform initialization ReminderStartupReceiver.startReminderSchedulingService(context); + CalendarStartupReceiver.scheduleCalendarAlarms(context); BackupService.scheduleService(context); actFmSyncService.initialize();