From 44efcfb6c3b5172c0fcbbaf0d65618620653adeb Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Mon, 2 Apr 2012 15:08:37 -0700 Subject: [PATCH] Fixed repeating tasks in gcal bugs --- .../com/todoroo/astrid/gcal/GCalHelper.java | 30 +++++++++++++++++-- .../repeats/RepeatTaskCompleteListener.java | 7 ++++- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/gcal/GCalHelper.java b/astrid/plugin-src/com/todoroo/astrid/gcal/GCalHelper.java index e5a955400..db812001d 100644 --- a/astrid/plugin-src/com/todoroo/astrid/gcal/GCalHelper.java +++ b/astrid/plugin-src/com/todoroo/astrid/gcal/GCalHelper.java @@ -22,6 +22,8 @@ public class GCalHelper { /** If task has no estimated time, how early to set a task in calendar (seconds)*/ private static final long DEFAULT_CAL_TIME = DateUtilities.ONE_HOUR; + public static final String CALENDAR_ID_COLUMN = "calendar_id"; //$NON-NLS-1$ + public static String getTaskEventUri(Task task) { String uri; if (!TextUtils.isEmpty(task.getValue(Task.CALENDAR_URI))) @@ -72,8 +74,8 @@ public class GCalHelper { values.put("transparency", 0); values.put("visibility", 0); } - boolean valuesContainCalendarId = (values.containsKey("calendar_id") && - !TextUtils.isEmpty(values.getAsString("calendar_id"))); + boolean valuesContainCalendarId = (values.containsKey(CALENDAR_ID_COLUMN) && + !TextUtils.isEmpty(values.getAsString(CALENDAR_ID_COLUMN))); if (!valuesContainCalendarId) { String calendarId = Calendars.getDefaultCalendar(); if (!TextUtils.isEmpty(calendarId)) { @@ -97,6 +99,30 @@ public class GCalHelper { return null; } + public static void rescheduleRepeatingTask(Task task, ContentResolver cr) { + String taskUri = getTaskEventUri(task); + if (TextUtils.isEmpty(taskUri)) + return; + + Uri eventUri = Uri.parse(taskUri); + String calendarId = getCalendarId(eventUri, cr); + ContentValues cv = new ContentValues(); + cv.put(CALENDAR_ID_COLUMN, calendarId); + + Uri uri = createTaskEvent(task, cr, cv, false); + task.setValue(Task.CALENDAR_URI, uri.toString()); + } + + private static String getCalendarId(Uri uri, ContentResolver cr) { + Cursor calendar = cr.query(uri, new String[] { CALENDAR_ID_COLUMN }, null, null, null); + calendar.moveToFirst(); + try { + return calendar.getString(0); + } finally { + calendar.close(); + } + } + @SuppressWarnings("nls") public static boolean deleteTaskEvent(Task task) { boolean eventDeleted = false; diff --git a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java index e10f2373b..321f2f44a 100644 --- a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java +++ b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java @@ -9,8 +9,11 @@ import java.util.List; import java.util.TimeZone; import android.content.BroadcastReceiver; +import android.content.ContentResolver; import android.content.Context; import android.content.Intent; +import android.database.Cursor; +import android.net.Uri; import com.google.ical.iter.RecurrenceIterator; import com.google.ical.iter.RecurrenceIteratorFactory; @@ -74,7 +77,9 @@ public class RepeatTaskCompleteListener extends BroadcastReceiver { task.setValue(Task.DUE_DATE, newDueDate); task.setValue(Task.HIDE_UNTIL, hideUntil); task.putTransitory("repeat-complete", true); //$NON-NLS-1$ - GCalHelper.createTaskEventIfEnabled(task, false); + + ContentResolver cr = ContextManager.getContext().getContentResolver(); + GCalHelper.rescheduleRepeatingTask(task, cr); PluginServices.getTaskService().save(task); // send a broadcast