Add TaskDeleter, TaskDuplicator, GCalHelper

pull/189/head
Alex Baker 12 years ago
parent c461531194
commit 66452a64e6

@ -30,6 +30,7 @@ import com.todoroo.astrid.api.FilterWithCustomIntent;
import com.todoroo.astrid.core.CoreFilterExposer; import com.todoroo.astrid.core.CoreFilterExposer;
import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gcal.GCalHelper;
import com.todoroo.astrid.service.StartupService; import com.todoroo.astrid.service.StartupService;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.subtasks.SubtasksHelper; import com.todoroo.astrid.subtasks.SubtasksHelper;
@ -90,6 +91,7 @@ public class AstridActivity extends InjectingActionBarActivity
@Inject TaskService taskService; @Inject TaskService taskService;
@Inject StartupService startupService; @Inject StartupService startupService;
@Inject GCalHelper gcalHelper;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -376,7 +378,7 @@ public class AstridActivity extends InjectingActionBarActivity
try { try {
boolean lastTime = AstridApiConstants.BROADCAST_EVENT_TASK_REPEAT_FINISHED.equals(intent.getAction()); boolean lastTime = AstridApiConstants.BROADCAST_EVENT_TASK_REPEAT_FINISHED.equals(intent.getAction());
DateChangedAlerts.showRepeatTaskRescheduledDialog( 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 } catch (BadTokenException e) { // Activity not running when tried to show dialog--rebroadcast
new Thread() { new Thread() {

@ -7,6 +7,7 @@ import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gcal.GCalHelper;
import com.todoroo.astrid.service.MetadataService; import com.todoroo.astrid.service.MetadataService;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.tags.TagService; import com.todoroo.astrid.tags.TagService;
@ -24,6 +25,7 @@ public final class ShareLinkActivity extends TaskListActivity {
@Inject TaskService taskService; @Inject TaskService taskService;
@Inject TagService tagService; @Inject TagService tagService;
@Inject MetadataService metadataService; @Inject MetadataService metadataService;
@Inject GCalHelper gcalHelper;
private String subject; private String subject;
private boolean handled; private boolean handled;
@ -48,7 +50,7 @@ public final class ShareLinkActivity extends TaskListActivity {
if (!handled) { if (!handled) {
Intent callerIntent = getIntent(); Intent callerIntent = getIntent();
Task task = QuickAddBar.basicQuickAddTask(taskService, metadataService, tagService, subject); Task task = QuickAddBar.basicQuickAddTask(gcalHelper, taskService, metadataService, tagService, subject);
if (task != null) { if (task != null) {
task.setNotes(callerIntent.getStringExtra(Intent.EXTRA_TEXT)); task.setNotes(callerIntent.getStringExtra(Intent.EXTRA_TEXT));
taskService.save(task); taskService.save(task);

@ -62,6 +62,7 @@ import com.todoroo.astrid.notes.EditNoteActivity;
import com.todoroo.astrid.reminders.Notifications; import com.todoroo.astrid.reminders.Notifications;
import com.todoroo.astrid.repeats.RepeatControlSet; import com.todoroo.astrid.repeats.RepeatControlSet;
import com.todoroo.astrid.service.MetadataService; import com.todoroo.astrid.service.MetadataService;
import com.todoroo.astrid.service.TaskDeleter;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.service.ThemeService; import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.tags.TagService; import com.todoroo.astrid.tags.TagService;
@ -175,6 +176,7 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener {
@Inject TagService tagService; @Inject TagService tagService;
@Inject MetadataService metadataService; @Inject MetadataService metadataService;
@Inject UserActivityDao userActivityDao; @Inject UserActivityDao userActivityDao;
@Inject TaskDeleter taskDeleter;
// --- UI components // --- UI components
@ -748,11 +750,11 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener {
if (activity instanceof TaskListActivity) { if (activity instanceof TaskListActivity) {
if (title.getText().length() == 0 && isNewTask && model != null && model.isSaved()) { if (title.getText().length() == 0 && isNewTask && model != null && model.isSaved()) {
taskService.delete(model); taskDeleter.delete(model);
} }
} else if (activity instanceof TaskEditActivity) { } else if (activity instanceof TaskEditActivity) {
if (title.getText().length() == 0 && isNewTask && model != null && model.isSaved()) { 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 (title.getText().length() == 0 || TextUtils.isEmpty(model.getTitle())) {
if (isNewTask) { if (isNewTask) {
TimerPlugin.updateTimer(taskService, getActivity(), model, false); TimerPlugin.updateTimer(taskService, getActivity(), model, false);
taskService.delete(model); taskDeleter.delete(model);
if (getActivity() instanceof TaskListActivity) { if (getActivity() instanceof TaskListActivity) {
TaskListActivity tla = (TaskListActivity) getActivity(); TaskListActivity tla = (TaskListActivity) getActivity();
tla.refreshTaskList(); tla.refreshTaskList();
@ -805,7 +807,7 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
TimerPlugin.updateTimer(taskService, getActivity(), model, false); TimerPlugin.updateTimer(taskService, getActivity(), model, false);
taskService.delete(model); taskDeleter.delete(model);
shouldSaveState = false; shouldSaveState = false;
Activity a = getActivity(); Activity a = getActivity();

@ -67,6 +67,8 @@ import com.todoroo.astrid.data.TaskAttachment;
import com.todoroo.astrid.data.TaskListMetadata; import com.todoroo.astrid.data.TaskListMetadata;
import com.todoroo.astrid.helper.SyncActionHelper; import com.todoroo.astrid.helper.SyncActionHelper;
import com.todoroo.astrid.service.SyncV2Service; 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.TaskService;
import com.todoroo.astrid.service.UpgradeService; import com.todoroo.astrid.service.UpgradeService;
import com.todoroo.astrid.subtasks.SubtasksHelper; import com.todoroo.astrid.subtasks.SubtasksHelper;
@ -140,6 +142,8 @@ public class TaskListFragment extends InjectingListFragment implements OnSortSel
@Inject UpgradeService upgradeService; @Inject UpgradeService upgradeService;
@Inject TaskListMetadataDao taskListMetadataDao; @Inject TaskListMetadataDao taskListMetadataDao;
@Inject SyncV2Service syncService; @Inject SyncV2Service syncService;
@Inject TaskDeleter taskDeleter;
@Inject TaskDuplicator taskDuplicator;
@Inject @ForActivity Context context; @Inject @ForActivity Context context;
protected Resources resources; protected Resources resources;
@ -900,7 +904,7 @@ public class TaskListFragment extends InjectingListFragment implements OnSortSel
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
onTaskDelete(task); onTaskDelete(task);
taskService.delete(task); taskDeleter.delete(task);
loadTaskListContent(true); loadTaskListContent(true);
} }
}).setNegativeButton(android.R.string.cancel, null).show(); }).setNegativeButton(android.R.string.cancel, null).show();
@ -1011,7 +1015,7 @@ public class TaskListFragment extends InjectingListFragment implements OnSortSel
} }
protected void duplicateTask(long itemId) { protected void duplicateTask(long itemId) {
long cloneId = taskService.duplicateTask(itemId); long cloneId = taskDuplicator.duplicateTask(itemId);
Intent intent = new Intent(getActivity(), TaskEditActivity.class); Intent intent = new Intent(getActivity(), TaskEditActivity.class);
intent.putExtra(TaskEditFragment.TOKEN_ID, cloneId); intent.putExtra(TaskEditFragment.TOKEN_ID, cloneId);

@ -43,6 +43,7 @@ public class OldTaskPreferences extends InjectingTodorooPreferenceActivity {
@Inject TaskService taskService; @Inject TaskService taskService;
@Inject MetadataService metadataService; @Inject MetadataService metadataService;
@Inject Database database; @Inject Database database;
@Inject GCalHelper gcalHelper;
ProgressDialog pd; ProgressDialog pd;
@ -155,7 +156,7 @@ public class OldTaskPreferences extends InjectingTodorooPreferenceActivity {
for(int i = 0; i < length; i++) { for(int i = 0; i < length; i++) {
cursor.moveToNext(); cursor.moveToNext();
task.readFromCursor(cursor); task.readFromCursor(cursor);
GCalHelper.deleteTaskEvent(taskService, task); gcalHelper.deleteTaskEvent(task);
} }
} finally { } finally {
cursor.close(); cursor.close();
@ -194,7 +195,7 @@ public class OldTaskPreferences extends InjectingTodorooPreferenceActivity {
for(int i = 0; i < length; i++) { for(int i = 0; i < length; i++) {
cursor.moveToNext(); cursor.moveToNext();
task.readFromCursor(cursor); task.readFromCursor(cursor);
GCalHelper.deleteTaskEvent(taskService, task); gcalHelper.deleteTaskEvent(task);
} }
} finally { } finally {
cursor.close(); cursor.close();
@ -231,7 +232,7 @@ public class OldTaskPreferences extends InjectingTodorooPreferenceActivity {
for(int i = 0; i < length; i++) { for(int i = 0; i < length; i++) {
cursor.moveToNext(); cursor.moveToNext();
task.readFromCursor(cursor); task.readFromCursor(cursor);
if (GCalHelper.deleteTaskEvent(taskService, task)) { if (gcalHelper.deleteTaskEvent(task)) {
deletedEventCount++; deletedEventCount++;
} }
} }
@ -273,7 +274,7 @@ public class OldTaskPreferences extends InjectingTodorooPreferenceActivity {
for(int i = 0; i < length; i++) { for(int i = 0; i < length; i++) {
cursor.moveToNext(); cursor.moveToNext();
task.readFromCursor(cursor); task.readFromCursor(cursor);
if (GCalHelper.deleteTaskEvent(taskService, task)) { if (gcalHelper.deleteTaskEvent(task)) {
deletedEventCount++; deletedEventCount++;
} }
} }

@ -27,7 +27,6 @@ import android.widget.Toast;
import com.todoroo.andlib.utility.Preferences; import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gcal.Calendars.CalendarResult; import com.todoroo.astrid.gcal.Calendars.CalendarResult;
import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.service.ThemeService; import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.ui.PopupControlSet; import com.todoroo.astrid.ui.PopupControlSet;
@ -53,7 +52,7 @@ public class GCalControlSet extends PopupControlSet {
// --- instance variables // --- instance variables
@Inject TaskService taskService; @Inject GCalHelper gcal;
private Uri calendarUri = null; private Uri calendarUri = null;
@ -106,7 +105,7 @@ public class GCalControlSet extends PopupControlSet {
@Override @Override
protected void readFromTaskOnInitialize() { protected void readFromTaskOnInitialize() {
String uri = GCalHelper.getTaskEventUri(taskService, model); String uri = gcal.getTaskEventUri(model);
if(!TextUtils.isEmpty(uri)) { if(!TextUtils.isEmpty(uri)) {
try { try {
calendarUri = Uri.parse(uri); calendarUri = Uri.parse(uri);
@ -160,7 +159,7 @@ public class GCalControlSet extends PopupControlSet {
String calendarId = calendars.calendarIds[calendarSelector.getSelectedItemPosition() - 1]; String calendarId = calendars.calendarIds[calendarSelector.getSelectedItemPosition() - 1];
values.put("calendar_id", calendarId); values.put("calendar_id", calendarId);
calendarUri = GCalHelper.createTaskEvent(taskService, task, cr, values); calendarUri = gcal.createTaskEvent(task, cr, values);
if(calendarUri != null) { if(calendarUri != null) {
task.setCalendarUri(calendarUri.toString()); task.setCalendarUri(calendarUri.toString());

@ -25,13 +25,21 @@ import org.tasks.R;
import java.util.TimeZone; import java.util.TimeZone;
import javax.inject.Inject;
public class GCalHelper { public class GCalHelper {
/** If task has no estimated time, how early to set a task in calendar (seconds)*/ /** 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; private static final long DEFAULT_CAL_TIME = DateUtilities.ONE_HOUR;
public static final String CALENDAR_ID_COLUMN = "calendar_id"; //$NON-NLS-1$ 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; String uri;
if (!TextUtils.isEmpty(task.getCalendarURI())) { if (!TextUtils.isEmpty(task.getCalendarURI())) {
uri = task.getCalendarURI(); uri = task.getCalendarURI();
@ -46,34 +54,34 @@ public class GCalHelper {
return uri; return uri;
} }
public static void createTaskEventIfEnabled(TaskService taskService, Task t) { public void createTaskEventIfEnabled(Task t) {
if (!t.hasDueDate()) { if (!t.hasDueDate()) {
return; 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 boolean gcalCreateEventEnabled = Preferences.getStringValue(R.string.gcal_p_default) != null
&& !Preferences.getStringValue(R.string.gcal_p_default).equals("-1"); //$NON-NLS-1$ && !Preferences.getStringValue(R.string.gcal_p_default).equals("-1"); //$NON-NLS-1$
if (gcalCreateEventEnabled) { if (gcalCreateEventEnabled) {
ContentResolver cr = ContextManager.getContext().getContentResolver(); 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) { if (calendarUri != null) {
t.setCalendarUri(calendarUri.toString()); t.setCalendarUri(calendarUri.toString());
} }
} }
} }
public static Uri createTaskEvent(TaskService taskService, Task task, ContentResolver cr, ContentValues values) { public Uri createTaskEvent(Task task, ContentResolver cr, ContentValues values) {
return createTaskEvent(taskService, task, cr, values, true); return createTaskEvent(task, cr, values, true);
} }
public static Uri createTaskEvent(TaskService taskService, Task task, ContentResolver cr, ContentValues values, boolean deleteEventIfExists) { public Uri createTaskEvent(Task task, ContentResolver cr, ContentValues values, boolean deleteEventIfExists) {
String eventuri = getTaskEventUri(taskService, task); String eventuri = getTaskEventUri(task);
if(!TextUtils.isEmpty(eventuri) && deleteEventIfExists) { if(!TextUtils.isEmpty(eventuri) && deleteEventIfExists) {
deleteTaskEvent(taskService, task); deleteTaskEvent(task);
} }
try{ try{
@ -110,8 +118,8 @@ public class GCalHelper {
return null; return null;
} }
public static void rescheduleRepeatingTask(TaskService taskService, Task task, ContentResolver cr) { public void rescheduleRepeatingTask(Task task, ContentResolver cr) {
String taskUri = getTaskEventUri(taskService, task); String taskUri = getTaskEventUri(task);
if (TextUtils.isEmpty(taskUri)) { if (TextUtils.isEmpty(taskUri)) {
return; return;
} }
@ -125,7 +133,7 @@ public class GCalHelper {
ContentValues cv = new ContentValues(); ContentValues cv = new ContentValues();
cv.put(CALENDAR_ID_COLUMN, calendarId); 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()); 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; boolean eventDeleted = false;
String uri; String uri;
if(task.containsNonNullValue(Task.CALENDAR_URI)) { if(task.containsNonNullValue(Task.CALENDAR_URI)) {

@ -46,6 +46,7 @@ public class RepeatTaskCompleteListener extends InjectingBroadcastReceiver {
private static final String TAG = "RepeatTaskCompleteListener"; private static final String TAG = "RepeatTaskCompleteListener";
@Inject TaskService taskService; @Inject TaskService taskService;
@Inject GCalHelper gcalHelper;
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
@ -90,7 +91,7 @@ public class RepeatTaskCompleteListener extends InjectingBroadcastReceiver {
return; return;
} }
rescheduleTask(taskService, task, newDueDate); rescheduleTask(gcalHelper, taskService, task, newDueDate);
// send a broadcast // send a broadcast
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_EVENT_TASK_REPEATED); 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(); long hideUntil = task.getHideUntil();
if(hideUntil > 0 && task.getDueDate() > 0) { if(hideUntil > 0 && task.getDueDate() > 0) {
hideUntil += newDueDate - task.getDueDate(); hideUntil += newDueDate - task.getDueDate();
@ -114,7 +115,7 @@ public class RepeatTaskCompleteListener extends InjectingBroadcastReceiver {
task.putTransitory(TaskService.TRANS_REPEAT_COMPLETE, true); task.putTransitory(TaskService.TRANS_REPEAT_COMPLETE, true);
ContentResolver cr = ContextManager.getContext().getContentResolver(); ContentResolver cr = ContextManager.getContext().getContentResolver();
GCalHelper.rescheduleRepeatingTask(taskService, task, cr); gcalHelper.rescheduleRepeatingTask(task, cr);
taskService.save(task); taskService.save(task);
} }

@ -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);
}
}
}

@ -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<Metadata> 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;
}
}

@ -17,22 +17,16 @@ import com.todoroo.andlib.sql.Order;
import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
import com.todoroo.astrid.adapter.UpdateAdapter; import com.todoroo.astrid.adapter.UpdateAdapter;
import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.PermaSql; 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;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.dao.UserActivityDao; import com.todoroo.astrid.dao.UserActivityDao;
import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.SyncFlags;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.UserActivity; 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.TagService;
import com.todoroo.astrid.tags.TaskToTagMetadata; import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.utility.TitleParser; 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$ public static final String TRANS_REPEAT_COMPLETE = "repeat-complete"; //$NON-NLS-1$
private final TaskDao taskDao; private final TaskDao taskDao;
private final MetadataDao metadataDao;
private final UserActivityDao userActivityDao; private final UserActivityDao userActivityDao;
private final Broadcaster broadcaster; private final Broadcaster broadcaster;
private final FilterCounter filterCounter; private final FilterCounter filterCounter;
@ -81,11 +74,10 @@ public class TaskService {
private final TagService tagService; private final TagService tagService;
@Inject @Inject
public TaskService(TaskDao taskDao, MetadataDao metadataDao, UserActivityDao userActivityDao, public TaskService(TaskDao taskDao, UserActivityDao userActivityDao,
Broadcaster broadcaster, FilterCounter filterCounter, Broadcaster broadcaster, FilterCounter filterCounter,
RefreshScheduler refreshScheduler, TagService tagService) { RefreshScheduler refreshScheduler, TagService tagService) {
this.taskDao = taskDao; this.taskDao = taskDao;
this.metadataDao = metadataDao;
this.userActivityDao = userActivityDao; this.userActivityDao = userActivityDao;
this.broadcaster = broadcaster; this.broadcaster = broadcaster;
this.filterCounter = filterCounter; this.filterCounter = filterCounter;
@ -135,70 +127,6 @@ public class TaskService {
taskDao.save(item); 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<Metadata> 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. * Permanently delete the given task.
*/ */
@ -364,28 +292,6 @@ public class TaskService {
return TitleParser.parse(tagService, task, tags); 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 * Create task from the given content values, saving it. This version
* doesn't need to start with a base task model. * doesn't need to start with a base task model.

@ -29,6 +29,7 @@ import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences; import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.activity.AstridActivity; import com.todoroo.astrid.activity.AstridActivity;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gcal.GCalHelper;
import com.todoroo.astrid.repeats.RepeatTaskCompleteListener; import com.todoroo.astrid.repeats.RepeatTaskCompleteListener;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.ui.DateAndTimeDialog.DateAndTimeDialogListener; import com.todoroo.astrid.ui.DateAndTimeDialog.DateAndTimeDialogListener;
@ -129,7 +130,7 @@ public class DateChangedAlerts {
Task.REPEAT_UNTIL 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) { final long oldDueDate, final long newDueDate, final boolean lastTime) {
if (!Preferences.getBoolean(PREF_SHOW_HELPERS, true)) { if (!Preferences.getBoolean(PREF_SHOW_HELPERS, true)) {
return; return;
@ -157,7 +158,7 @@ public class DateChangedAlerts {
public void onDateAndTimeSelected(long date) { public void onDateAndTimeSelected(long date) {
d.dismiss(); d.dismiss();
task.setRepeatUntil(date); task.setRepeatUntil(date);
RepeatTaskCompleteListener.rescheduleTask(taskService, task, newDueDate); RepeatTaskCompleteListener.rescheduleTask(gcalHelper, taskService, task, newDueDate);
Flags.set(Flags.REFRESH); Flags.set(Flags.REFRESH);
} }

@ -76,6 +76,7 @@ public class QuickAddBar extends LinearLayout {
@Inject TagService tagService; @Inject TagService tagService;
@Inject MetadataService metadataService; @Inject MetadataService metadataService;
@Inject TaskService taskService; @Inject TaskService taskService;
@Inject GCalHelper gcalHelper;
private VoiceRecognizer voiceRecognizer; private VoiceRecognizer voiceRecognizer;
@ -280,7 +281,7 @@ public class QuickAddBar extends LinearLayout {
resetControlSets(); resetControlSets();
addToCalendar(taskService, task, title); addToCalendar(gcalHelper, taskService, task, title);
TextView quickAdd = (TextView) findViewById(R.id.quickAddText); TextView quickAdd = (TextView) findViewById(R.id.quickAddText);
quickAdd.setText(""); //$NON-NLS-1$ 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 boolean gcalCreateEventEnabled = Preferences.getStringValue(R.string.gcal_p_default) != null
&& !Preferences.getStringValue(R.string.gcal_p_default).equals("-1") && task.hasDueDate(); //$NON-NLS-1$ && !Preferences.getStringValue(R.string.gcal_p_default).equals("-1") && task.hasDueDate(); //$NON-NLS-1$
if (!TextUtils.isEmpty(title) && gcalCreateEventEnabled && TextUtils.isEmpty(task.getCalendarURI())) { 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()); ContextManager.getContext().getContentResolver(), new ContentValues());
task.setCalendarUri(calendarUri.toString()); task.setCalendarUri(calendarUri.toString());
task.putTransitory(SyncFlags.GTASKS_SUPPRESS_SYNC, true); 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. * Static method to quickly add tasks without all the control set nonsense.
* Used from the share link activity. * 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)) { if (TextUtils.isEmpty(title)) {
return null; return null;
} }
@ -329,7 +330,7 @@ public class QuickAddBar extends LinearLayout {
title = title.trim(); title = title.trim();
Task task = TaskService.createWithValues(taskService, metadataService, tagService, null, title); Task task = TaskService.createWithValues(taskService, metadataService, tagService, null, title);
addToCalendar(taskService, task, title); addToCalendar(gcalHelper, taskService, task, title);
return task; return task;
} }

Loading…
Cancel
Save