From 84625149b1e94afed037f792e10c6da70c36ef9e Mon Sep 17 00:00:00 2001 From: Arne Jans Date: Thu, 25 Aug 2011 01:30:44 +0200 Subject: [PATCH] Partial Fix for 13186793 (GCal-default setting, create a new event for new tasks). Also, events are now deleted when you delete a single task or delete completed or purge deleted tasks. --- .../astrid/core/OldTaskPreferences.java | 30 +++++++++++ .../todoroo/astrid/gcal/GCalControlSet.java | 52 ++++++++++++++++--- astrid/res/values-de/strings.xml | 5 +- astrid/res/values/keys.xml | 3 ++ astrid/res/values/strings-core.xml | 5 +- astrid/res/xml/preferences_defaults.xml | 33 ++++++------ .../todoroo/astrid/service/TaskService.java | 3 ++ 7 files changed, 108 insertions(+), 23 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/core/OldTaskPreferences.java b/astrid/plugin-src/com/todoroo/astrid/core/OldTaskPreferences.java index 55315fbbf..48d92c52b 100644 --- a/astrid/plugin-src/com/todoroo/astrid/core/OldTaskPreferences.java +++ b/astrid/plugin-src/com/todoroo/astrid/core/OldTaskPreferences.java @@ -12,12 +12,16 @@ import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceScreen; import com.timsu.astrid.R; +import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.DependencyInjectionService; +import com.todoroo.andlib.sql.Criterion; +import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.andlib.utility.TodorooPreferenceActivity; import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.gcal.GCalControlSet; import com.todoroo.astrid.service.MetadataService; import com.todoroo.astrid.service.TaskService; @@ -73,6 +77,19 @@ public class OldTaskPreferences extends TodorooPreferenceActivity { runWithDialog(new Runnable() { @Override public void run() { + TodorooCursor cursor = taskService.query(Query.select(Task.ID, Task.CALENDAR_URI).where( + Criterion.and(Task.COMPLETION_DATE.gt(0), Task.CALENDAR_URI.isNotNull()))); + try { + Task task = new Task(); + int length = cursor.getCount(); + for(int i = 0; i < length; i++) { + cursor.moveToNext(); + task.readFromCursor(cursor); + GCalControlSet.deleteTaskEvent(task); + } + } finally { + cursor.close(); + } Task template = new Task(); template.setValue(Task.DELETION_DATE, DateUtilities.now()); @@ -99,6 +116,19 @@ public class OldTaskPreferences extends TodorooPreferenceActivity { runWithDialog(new Runnable() { @Override public void run() { + TodorooCursor cursor = taskService.query(Query.select(Task.ID, Task.TITLE, Task.CALENDAR_URI).where( + Criterion.and(Task.DELETION_DATE.gt(0), Task.CALENDAR_URI.isNotNull()))); + try { + Task task = new Task(); + int length = cursor.getCount(); + for(int i = 0; i < length; i++) { + cursor.moveToNext(); + task.readFromCursor(cursor); + GCalControlSet.deleteTaskEvent(task); + } + } finally { + cursor.close(); + } int result = taskService.deleteWhere(Task.DELETION_DATE.gt(0)); metadataService.cleanup(); showResult( diff --git a/astrid/plugin-src/com/todoroo/astrid/gcal/GCalControlSet.java b/astrid/plugin-src/com/todoroo/astrid/gcal/GCalControlSet.java index 855702021..e7cbe0ec3 100644 --- a/astrid/plugin-src/com/todoroo/astrid/gcal/GCalControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/gcal/GCalControlSet.java @@ -22,10 +22,13 @@ import android.widget.Toast; import com.timsu.astrid.R; import com.todoroo.andlib.service.Autowired; +import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.ExceptionService; import com.todoroo.andlib.utility.DateUtilities; +import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.activity.TaskEditActivity.TaskEditControlSet; +import com.todoroo.astrid.core.PluginServices; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.gcal.Calendars.CalendarResult; import com.todoroo.astrid.service.StatisticsService; @@ -115,6 +118,34 @@ public class GCalControlSet implements TaskEditControlSet { }); } + public static void deleteTaskEvent(Task task) { + String uri = task.getValue(Task.CALENDAR_URI); + Uri calendarUri = null; + + if (TextUtils.isEmpty(uri)) { + task = PluginServices.getTaskService().fetchById(task.getId(), Task.ID, Task.CALENDAR_URI); + uri = task.getValue(Task.CALENDAR_URI); + } + + if(!TextUtils.isEmpty(uri)) { + try { + calendarUri = Uri.parse(uri); + + // try to load calendar + ContentResolver cr = ContextManager.getContext().getContentResolver(); + Cursor cursor = cr.query(calendarUri, new String[] { "dtstart" }, null, null, null); //$NON-NLS-1$ + boolean deleted = cursor.getCount() == 0; + cursor.close(); + + if (!deleted) { + cr.delete(calendarUri, null, null); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + @Override public void readFromTask(Task task) { this.myTask = task; @@ -146,7 +177,9 @@ public class GCalControlSet implements TaskEditControlSet { @SuppressWarnings("nls") @Override public String writeToModel(Task task) { - if(addToCalendar.isChecked() && calendarUri == null) { + if (((Preferences.getBoolean(R.string.p_default_addtocalendar_key, false) && !task.isSaved()) + || addToCalendar.isChecked()) && + calendarUri == null) { StatisticsService.reportEvent("create-calendar-event"); try{ @@ -166,13 +199,19 @@ public class GCalControlSet implements TaskEditControlSet { createStartAndEndDate(task, values); calendarUri = cr.insert(uri, values); + cr.notifyChange(uri, null); task.setValue(Task.CALENDAR_URI, calendarUri.toString()); - // pop up the new event - Intent intent = new Intent(Intent.ACTION_EDIT, calendarUri); - intent.putExtra("beginTime", values.getAsLong("dtstart")); - intent.putExtra("endTime", values.getAsLong("dtend")); - activity.startActivity(intent); + // if the default-setting says so, create the gcal-event silently + if (!Preferences.getBoolean(R.string.p_default_addtocalendar_key, false) || + (addToCalendar.isChecked() && addToCalendar.isShown())) { + // pop up the new event + Intent intent = new Intent(Intent.ACTION_EDIT, calendarUri); + intent.putExtra("beginTime", values.getAsLong("dtstart")); + intent.putExtra("endTime", values.getAsLong("dtend")); + activity.startActivity(intent); + } + } catch (Exception e) { exceptionService.displayAndReportError(activity, activity.getString(R.string.gcal_TEA_error), e); @@ -205,6 +244,7 @@ public class GCalControlSet implements TaskEditControlSet { @SuppressWarnings("nls") private void createStartAndEndDate(Task task, ContentValues values) { long dueDate = task.getValue(Task.DUE_DATE); + // FIXME: doesnt respect timezones, see story 17443653 if(task.hasDueDate()) { if(task.hasDueTime()) { long estimatedTime = task.getValue(Task.ESTIMATED_SECONDS); diff --git a/astrid/res/values-de/strings.xml b/astrid/res/values-de/strings.xml index 5331dc2ee..6b1e8cd4c 100644 --- a/astrid/res/values-de/strings.xml +++ b/astrid/res/values-de/strings.xml @@ -693,9 +693,12 @@ Standarderinnerungen - + Momentan: %s + + Standard Kalendereintrag + !!!! (Höchste) diff --git a/astrid/res/values/keys.xml b/astrid/res/values/keys.xml index 74df58964..7cf027a7f 100644 --- a/astrid/res/values/keys.xml +++ b/astrid/res/values/keys.xml @@ -241,6 +241,9 @@ p_def_reminders + + p_def_addtocalendar + diff --git a/astrid/res/values/strings-core.xml b/astrid/res/values/strings-core.xml index 37a4235d6..e7f1384e0 100644 --- a/astrid/res/values/strings-core.xml +++ b/astrid/res/values/strings-core.xml @@ -393,9 +393,12 @@ Default Reminders - + Currently: %s + + Default Add To Calendar + !!!! (Highest) diff --git a/astrid/res/xml/preferences_defaults.xml b/astrid/res/xml/preferences_defaults.xml index 4942f58d4..5cac62141 100644 --- a/astrid/res/xml/preferences_defaults.xml +++ b/astrid/res/xml/preferences_defaults.xml @@ -3,29 +3,32 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:title="@string/EPr_defaults_header"> - - + android:entryValues="@array/EPr_reminder_random_hours" /> + + \ No newline at end of file diff --git a/astrid/src/com/todoroo/astrid/service/TaskService.java b/astrid/src/com/todoroo/astrid/service/TaskService.java index 75e6a3bf1..4ea562124 100644 --- a/astrid/src/com/todoroo/astrid/service/TaskService.java +++ b/astrid/src/com/todoroo/astrid/service/TaskService.java @@ -24,6 +24,7 @@ import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.gcal.GCalControlSet; import com.todoroo.astrid.gtasks.GtasksMetadata; import com.todoroo.astrid.opencrx.OpencrxCoreUtils; import com.todoroo.astrid.producteev.ProducteevUtilities; @@ -150,12 +151,14 @@ public class TaskService { if(!item.isSaved()) return; else if(item.containsValue(Task.TITLE) && item.getValue(Task.TITLE).length() == 0) { + GCalControlSet.deleteTaskEvent(item); taskDao.delete(item.getId()); item.setId(Task.NO_ID); } else { long id = item.getId(); item.clear(); item.setId(id); + GCalControlSet.deleteTaskEvent(item); item.setValue(Task.DELETION_DATE, DateUtilities.now()); taskDao.save(item); }