From 66452a64e6294c08872fdb007f0b46b9a96164ea Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Wed, 28 May 2014 14:22:11 -0500 Subject: [PATCH] Add TaskDeleter, TaskDuplicator, GCalHelper --- .../astrid/activity/AstridActivity.java | 4 +- .../astrid/activity/ShareLinkActivity.java | 4 +- .../astrid/activity/TaskEditFragment.java | 10 +- .../astrid/activity/TaskListFragment.java | 8 +- .../astrid/core/OldTaskPreferences.java | 9 +- .../todoroo/astrid/gcal/GCalControlSet.java | 7 +- .../com/todoroo/astrid/gcal/GCalHelper.java | 36 ++++--- .../repeats/RepeatTaskCompleteListener.java | 7 +- .../todoroo/astrid/service/TaskDeleter.java | 40 ++++++++ .../astrid/service/TaskDuplicator.java | 87 +++++++++++++++++ .../todoroo/astrid/service/TaskService.java | 96 +------------------ .../todoroo/astrid/ui/DateChangedAlerts.java | 5 +- .../com/todoroo/astrid/ui/QuickAddBar.java | 11 ++- 13 files changed, 189 insertions(+), 135 deletions(-) create mode 100644 astrid/src/main/java/com/todoroo/astrid/service/TaskDeleter.java create mode 100644 astrid/src/main/java/com/todoroo/astrid/service/TaskDuplicator.java diff --git a/astrid/src/main/java/com/todoroo/astrid/activity/AstridActivity.java b/astrid/src/main/java/com/todoroo/astrid/activity/AstridActivity.java index 9c5b3e1b6..f586eebad 100644 --- a/astrid/src/main/java/com/todoroo/astrid/activity/AstridActivity.java +++ b/astrid/src/main/java/com/todoroo/astrid/activity/AstridActivity.java @@ -30,6 +30,7 @@ import com.todoroo.astrid.api.FilterWithCustomIntent; import com.todoroo.astrid.core.CoreFilterExposer; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.gcal.GCalHelper; import com.todoroo.astrid.service.StartupService; import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.subtasks.SubtasksHelper; @@ -90,6 +91,7 @@ public class AstridActivity extends InjectingActionBarActivity @Inject TaskService taskService; @Inject StartupService startupService; + @Inject GCalHelper gcalHelper; @Override protected void onCreate(Bundle savedInstanceState) { @@ -376,7 +378,7 @@ public class AstridActivity extends InjectingActionBarActivity try { boolean lastTime = AstridApiConstants.BROADCAST_EVENT_TASK_REPEAT_FINISHED.equals(intent.getAction()); DateChangedAlerts.showRepeatTaskRescheduledDialog( - taskService, AstridActivity.this, task, oldDueDate, newDueDate, lastTime); + gcalHelper, taskService, AstridActivity.this, task, oldDueDate, newDueDate, lastTime); } catch (BadTokenException e) { // Activity not running when tried to show dialog--rebroadcast new Thread() { diff --git a/astrid/src/main/java/com/todoroo/astrid/activity/ShareLinkActivity.java b/astrid/src/main/java/com/todoroo/astrid/activity/ShareLinkActivity.java index 4c5928fd8..aa63f9d80 100644 --- a/astrid/src/main/java/com/todoroo/astrid/activity/ShareLinkActivity.java +++ b/astrid/src/main/java/com/todoroo/astrid/activity/ShareLinkActivity.java @@ -7,6 +7,7 @@ import android.content.Intent; import android.os.Bundle; import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.gcal.GCalHelper; import com.todoroo.astrid.service.MetadataService; import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.tags.TagService; @@ -24,6 +25,7 @@ public final class ShareLinkActivity extends TaskListActivity { @Inject TaskService taskService; @Inject TagService tagService; @Inject MetadataService metadataService; + @Inject GCalHelper gcalHelper; private String subject; private boolean handled; @@ -48,7 +50,7 @@ public final class ShareLinkActivity extends TaskListActivity { if (!handled) { Intent callerIntent = getIntent(); - Task task = QuickAddBar.basicQuickAddTask(taskService, metadataService, tagService, subject); + Task task = QuickAddBar.basicQuickAddTask(gcalHelper, taskService, metadataService, tagService, subject); if (task != null) { task.setNotes(callerIntent.getStringExtra(Intent.EXTRA_TEXT)); taskService.save(task); diff --git a/astrid/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java b/astrid/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java index ee496ae3f..f3a99c589 100755 --- a/astrid/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java +++ b/astrid/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java @@ -62,6 +62,7 @@ import com.todoroo.astrid.notes.EditNoteActivity; import com.todoroo.astrid.reminders.Notifications; import com.todoroo.astrid.repeats.RepeatControlSet; import com.todoroo.astrid.service.MetadataService; +import com.todoroo.astrid.service.TaskDeleter; import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.ThemeService; import com.todoroo.astrid.tags.TagService; @@ -175,6 +176,7 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { @Inject TagService tagService; @Inject MetadataService metadataService; @Inject UserActivityDao userActivityDao; + @Inject TaskDeleter taskDeleter; // --- UI components @@ -748,11 +750,11 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { if (activity instanceof TaskListActivity) { if (title.getText().length() == 0 && isNewTask && model != null && model.isSaved()) { - taskService.delete(model); + taskDeleter.delete(model); } } else if (activity instanceof TaskEditActivity) { if (title.getText().length() == 0 && isNewTask && model != null && model.isSaved()) { - taskService.delete(model); + taskDeleter.delete(model); } } } @@ -784,7 +786,7 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { if (title.getText().length() == 0 || TextUtils.isEmpty(model.getTitle())) { if (isNewTask) { TimerPlugin.updateTimer(taskService, getActivity(), model, false); - taskService.delete(model); + taskDeleter.delete(model); if (getActivity() instanceof TaskListActivity) { TaskListActivity tla = (TaskListActivity) getActivity(); tla.refreshTaskList(); @@ -805,7 +807,7 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { @Override public void onClick(DialogInterface dialog, int which) { TimerPlugin.updateTimer(taskService, getActivity(), model, false); - taskService.delete(model); + taskDeleter.delete(model); shouldSaveState = false; Activity a = getActivity(); diff --git a/astrid/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java b/astrid/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java index 2b931fd4d..44172bad3 100644 --- a/astrid/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java +++ b/astrid/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java @@ -67,6 +67,8 @@ import com.todoroo.astrid.data.TaskAttachment; import com.todoroo.astrid.data.TaskListMetadata; import com.todoroo.astrid.helper.SyncActionHelper; import com.todoroo.astrid.service.SyncV2Service; +import com.todoroo.astrid.service.TaskDeleter; +import com.todoroo.astrid.service.TaskDuplicator; import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.UpgradeService; import com.todoroo.astrid.subtasks.SubtasksHelper; @@ -140,6 +142,8 @@ public class TaskListFragment extends InjectingListFragment implements OnSortSel @Inject UpgradeService upgradeService; @Inject TaskListMetadataDao taskListMetadataDao; @Inject SyncV2Service syncService; + @Inject TaskDeleter taskDeleter; + @Inject TaskDuplicator taskDuplicator; @Inject @ForActivity Context context; protected Resources resources; @@ -900,7 +904,7 @@ public class TaskListFragment extends InjectingListFragment implements OnSortSel @Override public void onClick(DialogInterface dialog, int which) { onTaskDelete(task); - taskService.delete(task); + taskDeleter.delete(task); loadTaskListContent(true); } }).setNegativeButton(android.R.string.cancel, null).show(); @@ -1011,7 +1015,7 @@ public class TaskListFragment extends InjectingListFragment implements OnSortSel } protected void duplicateTask(long itemId) { - long cloneId = taskService.duplicateTask(itemId); + long cloneId = taskDuplicator.duplicateTask(itemId); Intent intent = new Intent(getActivity(), TaskEditActivity.class); intent.putExtra(TaskEditFragment.TOKEN_ID, cloneId); diff --git a/astrid/src/main/java/com/todoroo/astrid/core/OldTaskPreferences.java b/astrid/src/main/java/com/todoroo/astrid/core/OldTaskPreferences.java index e05901d37..7835fe060 100644 --- a/astrid/src/main/java/com/todoroo/astrid/core/OldTaskPreferences.java +++ b/astrid/src/main/java/com/todoroo/astrid/core/OldTaskPreferences.java @@ -43,6 +43,7 @@ public class OldTaskPreferences extends InjectingTodorooPreferenceActivity { @Inject TaskService taskService; @Inject MetadataService metadataService; @Inject Database database; + @Inject GCalHelper gcalHelper; ProgressDialog pd; @@ -155,7 +156,7 @@ public class OldTaskPreferences extends InjectingTodorooPreferenceActivity { for(int i = 0; i < length; i++) { cursor.moveToNext(); task.readFromCursor(cursor); - GCalHelper.deleteTaskEvent(taskService, task); + gcalHelper.deleteTaskEvent(task); } } finally { cursor.close(); @@ -194,7 +195,7 @@ public class OldTaskPreferences extends InjectingTodorooPreferenceActivity { for(int i = 0; i < length; i++) { cursor.moveToNext(); task.readFromCursor(cursor); - GCalHelper.deleteTaskEvent(taskService, task); + gcalHelper.deleteTaskEvent(task); } } finally { cursor.close(); @@ -231,7 +232,7 @@ public class OldTaskPreferences extends InjectingTodorooPreferenceActivity { for(int i = 0; i < length; i++) { cursor.moveToNext(); task.readFromCursor(cursor); - if (GCalHelper.deleteTaskEvent(taskService, task)) { + if (gcalHelper.deleteTaskEvent(task)) { deletedEventCount++; } } @@ -273,7 +274,7 @@ public class OldTaskPreferences extends InjectingTodorooPreferenceActivity { for(int i = 0; i < length; i++) { cursor.moveToNext(); task.readFromCursor(cursor); - if (GCalHelper.deleteTaskEvent(taskService, task)) { + if (gcalHelper.deleteTaskEvent(task)) { deletedEventCount++; } } diff --git a/astrid/src/main/java/com/todoroo/astrid/gcal/GCalControlSet.java b/astrid/src/main/java/com/todoroo/astrid/gcal/GCalControlSet.java index b832941c1..a77125b97 100644 --- a/astrid/src/main/java/com/todoroo/astrid/gcal/GCalControlSet.java +++ b/astrid/src/main/java/com/todoroo/astrid/gcal/GCalControlSet.java @@ -27,7 +27,6 @@ import android.widget.Toast; import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.gcal.Calendars.CalendarResult; -import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.ThemeService; import com.todoroo.astrid.ui.PopupControlSet; @@ -53,7 +52,7 @@ public class GCalControlSet extends PopupControlSet { // --- instance variables - @Inject TaskService taskService; + @Inject GCalHelper gcal; private Uri calendarUri = null; @@ -106,7 +105,7 @@ public class GCalControlSet extends PopupControlSet { @Override protected void readFromTaskOnInitialize() { - String uri = GCalHelper.getTaskEventUri(taskService, model); + String uri = gcal.getTaskEventUri(model); if(!TextUtils.isEmpty(uri)) { try { calendarUri = Uri.parse(uri); @@ -160,7 +159,7 @@ public class GCalControlSet extends PopupControlSet { String calendarId = calendars.calendarIds[calendarSelector.getSelectedItemPosition() - 1]; values.put("calendar_id", calendarId); - calendarUri = GCalHelper.createTaskEvent(taskService, task, cr, values); + calendarUri = gcal.createTaskEvent(task, cr, values); if(calendarUri != null) { task.setCalendarUri(calendarUri.toString()); diff --git a/astrid/src/main/java/com/todoroo/astrid/gcal/GCalHelper.java b/astrid/src/main/java/com/todoroo/astrid/gcal/GCalHelper.java index 13ed4ab0b..4c0acebe7 100644 --- a/astrid/src/main/java/com/todoroo/astrid/gcal/GCalHelper.java +++ b/astrid/src/main/java/com/todoroo/astrid/gcal/GCalHelper.java @@ -25,13 +25,21 @@ import org.tasks.R; import java.util.TimeZone; +import javax.inject.Inject; + 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$ + private TaskService taskService; + + @Inject + public GCalHelper(TaskService taskService) { + this.taskService = taskService; + } - public static String getTaskEventUri(TaskService taskService, Task task) { + public String getTaskEventUri(Task task) { String uri; if (!TextUtils.isEmpty(task.getCalendarURI())) { uri = task.getCalendarURI(); @@ -46,34 +54,34 @@ public class GCalHelper { return uri; } - public static void createTaskEventIfEnabled(TaskService taskService, Task t) { + public void createTaskEventIfEnabled(Task t) { if (!t.hasDueDate()) { return; } - createTaskEventIfEnabled(taskService, t, true); + createTaskEventIfEnabled(t, true); } - private static void createTaskEventIfEnabled(TaskService taskService, Task t, boolean deleteEventIfExists) { + private void createTaskEventIfEnabled(Task t, boolean deleteEventIfExists) { boolean gcalCreateEventEnabled = Preferences.getStringValue(R.string.gcal_p_default) != null && !Preferences.getStringValue(R.string.gcal_p_default).equals("-1"); //$NON-NLS-1$ if (gcalCreateEventEnabled) { ContentResolver cr = ContextManager.getContext().getContentResolver(); - Uri calendarUri = GCalHelper.createTaskEvent(taskService, t, cr, new ContentValues(), deleteEventIfExists); + Uri calendarUri = createTaskEvent(t, cr, new ContentValues(), deleteEventIfExists); if (calendarUri != null) { t.setCalendarUri(calendarUri.toString()); } } } - public static Uri createTaskEvent(TaskService taskService, Task task, ContentResolver cr, ContentValues values) { - return createTaskEvent(taskService, task, cr, values, true); + public Uri createTaskEvent(Task task, ContentResolver cr, ContentValues values) { + return createTaskEvent(task, cr, values, true); } - public static Uri createTaskEvent(TaskService taskService, Task task, ContentResolver cr, ContentValues values, boolean deleteEventIfExists) { - String eventuri = getTaskEventUri(taskService, task); + public Uri createTaskEvent(Task task, ContentResolver cr, ContentValues values, boolean deleteEventIfExists) { + String eventuri = getTaskEventUri(task); if(!TextUtils.isEmpty(eventuri) && deleteEventIfExists) { - deleteTaskEvent(taskService, task); + deleteTaskEvent(task); } try{ @@ -110,8 +118,8 @@ public class GCalHelper { return null; } - public static void rescheduleRepeatingTask(TaskService taskService, Task task, ContentResolver cr) { - String taskUri = getTaskEventUri(taskService, task); + public void rescheduleRepeatingTask(Task task, ContentResolver cr) { + String taskUri = getTaskEventUri(task); if (TextUtils.isEmpty(taskUri)) { return; } @@ -125,7 +133,7 @@ public class GCalHelper { ContentValues cv = new ContentValues(); cv.put(CALENDAR_ID_COLUMN, calendarId); - Uri uri = createTaskEvent(taskService, task, cr, cv, false); + Uri uri = createTaskEvent(task, cr, cv, false); task.setCalendarUri(uri.toString()); } @@ -141,7 +149,7 @@ public class GCalHelper { } } - public static boolean deleteTaskEvent(TaskService taskService, Task task) { + public boolean deleteTaskEvent(Task task) { boolean eventDeleted = false; String uri; if(task.containsNonNullValue(Task.CALENDAR_URI)) { diff --git a/astrid/src/main/java/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java b/astrid/src/main/java/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java index f72f773f2..72090267e 100644 --- a/astrid/src/main/java/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java +++ b/astrid/src/main/java/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java @@ -46,6 +46,7 @@ public class RepeatTaskCompleteListener extends InjectingBroadcastReceiver { private static final String TAG = "RepeatTaskCompleteListener"; @Inject TaskService taskService; + @Inject GCalHelper gcalHelper; @Override public void onReceive(Context context, Intent intent) { @@ -90,7 +91,7 @@ public class RepeatTaskCompleteListener extends InjectingBroadcastReceiver { return; } - rescheduleTask(taskService, task, newDueDate); + rescheduleTask(gcalHelper, taskService, task, newDueDate); // send a broadcast Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_EVENT_TASK_REPEATED); @@ -102,7 +103,7 @@ public class RepeatTaskCompleteListener extends InjectingBroadcastReceiver { } } - public static void rescheduleTask(TaskService taskService, Task task, long newDueDate) { + public static void rescheduleTask(GCalHelper gcalHelper, TaskService taskService, Task task, long newDueDate) { long hideUntil = task.getHideUntil(); if(hideUntil > 0 && task.getDueDate() > 0) { hideUntil += newDueDate - task.getDueDate(); @@ -114,7 +115,7 @@ public class RepeatTaskCompleteListener extends InjectingBroadcastReceiver { task.putTransitory(TaskService.TRANS_REPEAT_COMPLETE, true); ContentResolver cr = ContextManager.getContext().getContentResolver(); - GCalHelper.rescheduleRepeatingTask(taskService, task, cr); + gcalHelper.rescheduleRepeatingTask(task, cr); taskService.save(task); } diff --git a/astrid/src/main/java/com/todoroo/astrid/service/TaskDeleter.java b/astrid/src/main/java/com/todoroo/astrid/service/TaskDeleter.java new file mode 100644 index 000000000..9bb40f62f --- /dev/null +++ b/astrid/src/main/java/com/todoroo/astrid/service/TaskDeleter.java @@ -0,0 +1,40 @@ +package com.todoroo.astrid.service; + +import com.todoroo.andlib.utility.DateUtilities; +import com.todoroo.astrid.dao.TaskDao; +import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.gcal.GCalHelper; + +import javax.inject.Inject; + +public class TaskDeleter { + + private final TaskService taskService; + private final GCalHelper gcalHelper; + private final TaskDao taskDao; + + @Inject + public TaskDeleter(TaskService taskService, GCalHelper gcalHelper, TaskDao taskDao) { + this.taskService = taskService; + this.gcalHelper = gcalHelper; + this.taskDao = taskDao; + } + + public void delete(Task item) { + if(!item.isSaved()) { + return; + } + + if(item.containsValue(Task.TITLE) && item.getTitle().length() == 0) { + taskDao.delete(item.getId()); + item.setId(Task.NO_ID); + } else { + long id = item.getId(); + item.clear(); + item.setId(id); + gcalHelper.deleteTaskEvent(item); + item.setDeletionDate(DateUtilities.now()); + taskService.save(item); + } + } +} diff --git a/astrid/src/main/java/com/todoroo/astrid/service/TaskDuplicator.java b/astrid/src/main/java/com/todoroo/astrid/service/TaskDuplicator.java new file mode 100644 index 000000000..17d56ddaa --- /dev/null +++ b/astrid/src/main/java/com/todoroo/astrid/service/TaskDuplicator.java @@ -0,0 +1,87 @@ +package com.todoroo.astrid.service; + +import com.todoroo.andlib.data.TodorooCursor; +import com.todoroo.andlib.sql.Query; +import com.todoroo.andlib.utility.DateUtilities; +import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; +import com.todoroo.astrid.dao.MetadataDao; +import com.todoroo.astrid.data.Metadata; +import com.todoroo.astrid.data.SyncFlags; +import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.gcal.GCalHelper; +import com.todoroo.astrid.gtasks.GtasksMetadata; + +import javax.inject.Inject; + +public class TaskDuplicator { + + private final TaskService taskService; + private final GCalHelper gcalHelper; + private final MetadataDao metadataDao; + + @Inject + public TaskDuplicator(TaskService taskService, GCalHelper gcalHelper, MetadataDao metadataDao) { + this.taskService = taskService; + this.gcalHelper = gcalHelper; + this.metadataDao = metadataDao; + } + + /** + * Create an uncompleted copy of this task and edit it + * @return cloned item id + */ + public long duplicateTask(long itemId) { + Task original = new Task(); + original.setId(itemId); + Task clone = clone(original); + String userId = clone.getUserID(); + if (!Task.USER_ID_SELF.equals(userId) && !ActFmPreferenceService.userId().equals(userId)) { + clone.putTransitory(TaskService.TRANS_ASSIGNED, true); + } + clone.setCreationDate(DateUtilities.now()); + clone.setCompletionDate(0L); + clone.setDeletionDate(0L); + clone.setCalendarUri(""); //$NON-NLS-1$ + gcalHelper.createTaskEventIfEnabled(clone); + + taskService.save(clone); + return clone.getId(); + } + + private Task clone(Task task) { + Task newTask = taskService.fetchById(task.getId(), Task.PROPERTIES); + if(newTask == null) { + return new Task(); + } + newTask.clearValue(Task.ID); + newTask.clearValue(Task.UUID); + TodorooCursor cursor = metadataDao.query( + Query.select(Metadata.PROPERTIES).where(MetadataDao.MetadataCriteria.byTask(task.getId()))); + try { + if(cursor.getCount() > 0) { + Metadata metadata = new Metadata(); + newTask.putTransitory(SyncFlags.GTASKS_SUPPRESS_SYNC, true); + taskService.save(newTask); + long newId = newTask.getId(); + for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { + metadata.readFromCursor(cursor); + + if(!metadata.containsNonNullValue(Metadata.KEY)) { + continue; + } + + if(GtasksMetadata.METADATA_KEY.equals(metadata.getKey())) { + metadata.setValue(GtasksMetadata.ID, ""); //$NON-NLS-1$ + } + + metadata.setTask(newId); + metadata.clearValue(Metadata.ID); + metadataDao.createNew(metadata); + } + } + } finally { + cursor.close(); + } + return newTask; + } +} diff --git a/astrid/src/main/java/com/todoroo/astrid/service/TaskService.java b/astrid/src/main/java/com/todoroo/astrid/service/TaskService.java index 1ba2b6329..2b0e01ac4 100644 --- a/astrid/src/main/java/com/todoroo/astrid/service/TaskService.java +++ b/astrid/src/main/java/com/todoroo/astrid/service/TaskService.java @@ -17,22 +17,16 @@ import com.todoroo.andlib.sql.Order; import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DateUtilities; -import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; import com.todoroo.astrid.adapter.UpdateAdapter; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.PermaSql; -import com.todoroo.astrid.dao.MetadataDao; -import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.dao.UserActivityDao; import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.RemoteModel; -import com.todoroo.astrid.data.SyncFlags; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.UserActivity; -import com.todoroo.astrid.gcal.GCalHelper; -import com.todoroo.astrid.gtasks.GtasksMetadata; import com.todoroo.astrid.tags.TagService; import com.todoroo.astrid.tags.TaskToTagMetadata; import com.todoroo.astrid.utility.TitleParser; @@ -73,7 +67,6 @@ public class TaskService { public static final String TRANS_REPEAT_COMPLETE = "repeat-complete"; //$NON-NLS-1$ private final TaskDao taskDao; - private final MetadataDao metadataDao; private final UserActivityDao userActivityDao; private final Broadcaster broadcaster; private final FilterCounter filterCounter; @@ -81,11 +74,10 @@ public class TaskService { private final TagService tagService; @Inject - public TaskService(TaskDao taskDao, MetadataDao metadataDao, UserActivityDao userActivityDao, + public TaskService(TaskDao taskDao, UserActivityDao userActivityDao, Broadcaster broadcaster, FilterCounter filterCounter, RefreshScheduler refreshScheduler, TagService tagService) { this.taskDao = taskDao; - this.metadataDao = metadataDao; this.userActivityDao = userActivityDao; this.broadcaster = broadcaster; this.filterCounter = filterCounter; @@ -135,70 +127,6 @@ public class TaskService { taskDao.save(item); } - /** - * Clone the given task and all its metadata - * - * @return the new task - */ - public Task clone(Task task) { - Task newTask = fetchById(task.getId(), Task.PROPERTIES); - if(newTask == null) { - return new Task(); - } - newTask.clearValue(Task.ID); - newTask.clearValue(Task.UUID); - TodorooCursor cursor = metadataDao.query( - Query.select(Metadata.PROPERTIES).where(MetadataCriteria.byTask(task.getId()))); - try { - if(cursor.getCount() > 0) { - Metadata metadata = new Metadata(); - newTask.putTransitory(SyncFlags.GTASKS_SUPPRESS_SYNC, true); - save(newTask); - long newId = newTask.getId(); - for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { - metadata.readFromCursor(cursor); - - if(!metadata.containsNonNullValue(Metadata.KEY)) { - continue; - } - - if(GtasksMetadata.METADATA_KEY.equals(metadata.getKey())) { - metadata.setValue(GtasksMetadata.ID, ""); //$NON-NLS-1$ - } - - metadata.setTask(newId); - metadata.clearValue(Metadata.ID); - metadataDao.createNew(metadata); - } - } - } finally { - cursor.close(); - } - return newTask; - } - - /** - * Delete the given task. Instead of deleting from the database, we set - * the deleted flag. - */ - public void delete(Task item) { - if(!item.isSaved()) { - return; - } - - if(item.containsValue(Task.TITLE) && item.getTitle().length() == 0) { - taskDao.delete(item.getId()); - item.setId(Task.NO_ID); - } else { - long id = item.getId(); - item.clear(); - item.setId(id); - GCalHelper.deleteTaskEvent(this, item); - item.setDeletionDate(DateUtilities.now()); - save(item); - } - } - /** * Permanently delete the given task. */ @@ -364,28 +292,6 @@ public class TaskService { return TitleParser.parse(tagService, task, tags); } - /** - * Create an uncompleted copy of this task and edit it - * @return cloned item id - */ - public long duplicateTask(long itemId) { - Task original = new Task(); - original.setId(itemId); - Task clone = clone(original); - String userId = clone.getUserID(); - if (!Task.USER_ID_SELF.equals(userId) && !ActFmPreferenceService.userId().equals(userId)) { - clone.putTransitory(TRANS_ASSIGNED, true); - } - clone.setCreationDate(DateUtilities.now()); - clone.setCompletionDate(0L); - clone.setDeletionDate(0L); - clone.setCalendarUri(""); //$NON-NLS-1$ - GCalHelper.createTaskEventIfEnabled(this, clone); - - save(clone); - return clone.getId(); - } - /** * Create task from the given content values, saving it. This version * doesn't need to start with a base task model. diff --git a/astrid/src/main/java/com/todoroo/astrid/ui/DateChangedAlerts.java b/astrid/src/main/java/com/todoroo/astrid/ui/DateChangedAlerts.java index 14b6954a9..f964217fb 100644 --- a/astrid/src/main/java/com/todoroo/astrid/ui/DateChangedAlerts.java +++ b/astrid/src/main/java/com/todoroo/astrid/ui/DateChangedAlerts.java @@ -29,6 +29,7 @@ import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.activity.AstridActivity; import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.gcal.GCalHelper; import com.todoroo.astrid.repeats.RepeatTaskCompleteListener; import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.ui.DateAndTimeDialog.DateAndTimeDialogListener; @@ -129,7 +130,7 @@ public class DateChangedAlerts { Task.REPEAT_UNTIL }; - public static void showRepeatTaskRescheduledDialog(final TaskService taskService, final AstridActivity activity, final Task task, + public static void showRepeatTaskRescheduledDialog(final GCalHelper gcalHelper, final TaskService taskService, final AstridActivity activity, final Task task, final long oldDueDate, final long newDueDate, final boolean lastTime) { if (!Preferences.getBoolean(PREF_SHOW_HELPERS, true)) { return; @@ -157,7 +158,7 @@ public class DateChangedAlerts { public void onDateAndTimeSelected(long date) { d.dismiss(); task.setRepeatUntil(date); - RepeatTaskCompleteListener.rescheduleTask(taskService, task, newDueDate); + RepeatTaskCompleteListener.rescheduleTask(gcalHelper, taskService, task, newDueDate); Flags.set(Flags.REFRESH); } diff --git a/astrid/src/main/java/com/todoroo/astrid/ui/QuickAddBar.java b/astrid/src/main/java/com/todoroo/astrid/ui/QuickAddBar.java index 1cc92c6c7..aa614dcfa 100644 --- a/astrid/src/main/java/com/todoroo/astrid/ui/QuickAddBar.java +++ b/astrid/src/main/java/com/todoroo/astrid/ui/QuickAddBar.java @@ -76,6 +76,7 @@ public class QuickAddBar extends LinearLayout { @Inject TagService tagService; @Inject MetadataService metadataService; @Inject TaskService taskService; + @Inject GCalHelper gcalHelper; private VoiceRecognizer voiceRecognizer; @@ -280,7 +281,7 @@ public class QuickAddBar extends LinearLayout { resetControlSets(); - addToCalendar(taskService, task, title); + addToCalendar(gcalHelper, taskService, task, title); TextView quickAdd = (TextView) findViewById(R.id.quickAddText); quickAdd.setText(""); //$NON-NLS-1$ @@ -304,12 +305,12 @@ public class QuickAddBar extends LinearLayout { } } - private static void addToCalendar(TaskService taskService, Task task, String title) { + private static void addToCalendar(GCalHelper gcalHelper, TaskService taskService, Task task, String title) { boolean gcalCreateEventEnabled = Preferences.getStringValue(R.string.gcal_p_default) != null && !Preferences.getStringValue(R.string.gcal_p_default).equals("-1") && task.hasDueDate(); //$NON-NLS-1$ if (!TextUtils.isEmpty(title) && gcalCreateEventEnabled && TextUtils.isEmpty(task.getCalendarURI())) { - Uri calendarUri = GCalHelper.createTaskEvent(taskService, task, + Uri calendarUri = gcalHelper.createTaskEvent(task, ContextManager.getContext().getContentResolver(), new ContentValues()); task.setCalendarUri(calendarUri.toString()); task.putTransitory(SyncFlags.GTASKS_SUPPRESS_SYNC, true); @@ -321,7 +322,7 @@ public class QuickAddBar extends LinearLayout { * Static method to quickly add tasks without all the control set nonsense. * Used from the share link activity. */ - public static Task basicQuickAddTask(TaskService taskService, MetadataService metadataService, TagService tagService, String title) { + public static Task basicQuickAddTask(GCalHelper gcalHelper, TaskService taskService, MetadataService metadataService, TagService tagService, String title) { if (TextUtils.isEmpty(title)) { return null; } @@ -329,7 +330,7 @@ public class QuickAddBar extends LinearLayout { title = title.trim(); Task task = TaskService.createWithValues(taskService, metadataService, tagService, null, title); - addToCalendar(taskService, task, title); + addToCalendar(gcalHelper, taskService, task, title); return task; }