Move delete logic to task deleter

pull/618/head
Alex Baker 8 years ago
parent ddd7961d35
commit 2cd63f89b2

@ -133,7 +133,7 @@ public class TaskDaoTests extends InjectingTestCase {
// delete // delete
long happyId = task.getId(); long happyId = task.getId();
assertTrue(taskDao.delete(happyId)); assertEquals(1, taskDao.deleteById(happyId));
assertEquals(0, taskDao.toList(Query.select(IDS)).size()); assertEquals(0, taskDao.toList(Query.select(IDS)).size());
} }
@ -161,7 +161,7 @@ public class TaskDaoTests extends InjectingTestCase {
assertNull(taskDao.fetch(1)); assertNull(taskDao.fetch(1));
assertFalse(taskDao.delete(1)); assertEquals(0, taskDao.deleteById(1));
// make sure db still works // make sure db still works
assertEquals(0, taskDao.toList(Query.select(IDS)).size()); assertEquals(0, taskDao.toList(Query.select(IDS)).size());

@ -6,16 +6,14 @@ import android.content.Context;
import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import org.tasks.LocalBroadcastManager;
import org.tasks.data.GoogleTaskListDao;
import org.tasks.data.TagDataDao;
import org.tasks.data.TaskListMetadataDao;
import org.tasks.data.UserActivityDao;
import org.tasks.data.AlarmDao; import org.tasks.data.AlarmDao;
import org.tasks.data.GoogleTaskDao; import org.tasks.data.GoogleTaskDao;
import org.tasks.data.GoogleTaskListDao;
import org.tasks.data.LocationDao; import org.tasks.data.LocationDao;
import org.tasks.data.TagDao; import org.tasks.data.TagDao;
import org.tasks.data.TagDataDao;
import org.tasks.data.TaskListMetadataDao;
import org.tasks.data.UserActivityDao;
import org.tasks.notifications.NotificationDao; import org.tasks.notifications.NotificationDao;
import org.tasks.preferences.PermissionChecker; import org.tasks.preferences.PermissionChecker;
import org.tasks.preferences.PermissivePermissionChecker; import org.tasks.preferences.PermissivePermissionChecker;
@ -86,11 +84,9 @@ public class TestModule {
} }
@Provides @Provides
public TaskDao getTaskDao(Database database, Preferences preferences, LocalBroadcastManager localBroadcastManager, public TaskDao getTaskDao(Database database, Preferences preferences) {
AlarmDao alarmDao, TagDao tagDao, LocationDao locationDao, GoogleTaskDao googleTaskDao) {
TaskDao taskDao = database.getTaskDao(); TaskDao taskDao = database.getTaskDao();
taskDao.initialize(context, preferences, localBroadcastManager, alarmDao, tagDao, taskDao.initialize(context, preferences);
locationDao, googleTaskDao);
return taskDao; return taskDao;
} }

@ -105,7 +105,7 @@ public class GtasksListService {
.constructCursor(new GtasksFilter(gtasksList), Task.PROPERTIES) .constructCursor(new GtasksFilter(gtasksList), Task.PROPERTIES)
.toList(); .toList();
for (Task task : tasks) { for (Task task : tasks) {
taskDeleter.delete(task); taskDeleter.markDeleted(task);
} }
googleTaskDao.deleteList(gtasksList.getRemoteId()); googleTaskDao.deleteList(gtasksList.getRemoteId());
googleTaskListDao.deleteById(gtasksList.getId()); googleTaskListDao.deleteById(gtasksList.getId());

@ -275,7 +275,6 @@ public final class TaskEditFragment extends InjectingFragment implements Toolbar
public void discard() { public void discard() {
if (model != null && model.isNew()) { if (model != null && model.isNew()) {
timerPlugin.stopTimer(model); timerPlugin.stopTimer(model);
taskDeleter.delete(model);
} }
callback.taskEditFinished(); callback.taskEditFinished();
@ -285,7 +284,7 @@ public final class TaskEditFragment extends InjectingFragment implements Toolbar
dialogBuilder.newMessageDialog(R.string.DLG_delete_this_task_question) dialogBuilder.newMessageDialog(R.string.DLG_delete_this_task_question)
.setPositiveButton(android.R.string.ok, (dialog, which) -> { .setPositiveButton(android.R.string.ok, (dialog, which) -> {
timerPlugin.stopTimer(model); timerPlugin.stopTimer(model);
taskDeleter.delete(model); taskDeleter.markDeleted(model);
callback.taskEditFinished(); callback.taskEditFinished();
}) })
.setNegativeButton(android.R.string.cancel, null) .setNegativeButton(android.R.string.cancel, null)

@ -12,6 +12,7 @@ import com.todoroo.andlib.sql.Query;
import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.TaskDeleter;
import org.tasks.R; import org.tasks.R;
import org.tasks.calendars.CalendarEventProvider; import org.tasks.calendars.CalendarEventProvider;
@ -32,6 +33,7 @@ public class OldTaskPreferences extends InjectingPreferenceActivity {
@Inject Database database; @Inject Database database;
@Inject TaskDao taskDao; @Inject TaskDao taskDao;
@Inject CalendarEventProvider calendarEventProvider; @Inject CalendarEventProvider calendarEventProvider;
@Inject TaskDeleter taskDeleter;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
@ -70,12 +72,7 @@ public class OldTaskPreferences extends InjectingPreferenceActivity {
.setPositiveButton(android.R.string.ok, (dialog, which) -> new ProgressDialogAsyncTask(OldTaskPreferences.this, dialogBuilder) { .setPositiveButton(android.R.string.ok, (dialog, which) -> new ProgressDialogAsyncTask(OldTaskPreferences.this, dialogBuilder) {
@Override @Override
protected Integer doInBackground(Void... params) { protected Integer doInBackground(Void... params) {
List<Task> deleted = taskDao.getDeleted(); return taskDeleter.purgeDeleted();
for (Task task : deleted) {
calendarEventProvider.deleteEvent(task);
taskDao.delete(task.getId());
}
return deleted.size();
} }
@Override @Override

@ -25,12 +25,7 @@ import com.todoroo.astrid.data.TaskApiDao;
import com.todoroo.astrid.helper.UUIDHelper; import com.todoroo.astrid.helper.UUIDHelper;
import org.tasks.BuildConfig; import org.tasks.BuildConfig;
import org.tasks.LocalBroadcastManager;
import org.tasks.R; import org.tasks.R;
import org.tasks.data.AlarmDao;
import org.tasks.data.GoogleTaskDao;
import org.tasks.data.LocationDao;
import org.tasks.data.TagDao;
import org.tasks.jobs.AfterSaveIntentService; import org.tasks.jobs.AfterSaveIntentService;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
import org.tasks.receivers.PushReceiver; import org.tasks.receivers.PushReceiver;
@ -53,27 +48,16 @@ public abstract class TaskDao {
private final Database database; private final Database database;
private LocalBroadcastManager localBroadcastManager;
private Preferences preferences; private Preferences preferences;
private AlarmDao alarmDao;
private TagDao tagDao;
private LocationDao locationDao;
private GoogleTaskDao googleTaskDao;
private Context context; private Context context;
public TaskDao(Database database) { public TaskDao(Database database) {
this.database = database; this.database = database;
} }
public void initialize(Context context, Preferences preferences, LocalBroadcastManager localBroadcastManager, public void initialize(Context context, Preferences preferences) {
AlarmDao alarmDao, TagDao tagDao, LocationDao locationDao, GoogleTaskDao googleTaskDao) {
this.context = context; this.context = context;
this.preferences = preferences; this.preferences = preferences;
this.localBroadcastManager = localBroadcastManager;
this.alarmDao = alarmDao;
this.tagDao = tagDao;
this.locationDao = locationDao;
this.googleTaskDao = googleTaskDao;
} }
public List<Task> selectActive(Criterion criterion) { public List<Task> selectActive(Criterion criterion) {
@ -160,31 +144,7 @@ public abstract class TaskDao {
public abstract List<Task> getDeleted(); public abstract List<Task> getDeleted();
@android.arch.persistence.room.Query("DELETE FROM tasks WHERE _id = :id") @android.arch.persistence.room.Query("DELETE FROM tasks WHERE _id = :id")
abstract int deleteById(long id); public abstract int deleteById(long id);
// --- delete
/**
* Delete the given item
*
* @return true if delete was successful
*/
public boolean delete(long id) {
boolean result = deleteById(id) > 0;
if(!result) {
return false;
}
// delete all metadata
alarmDao.deleteByTaskId(id);
locationDao.deleteByTaskId(id);
tagDao.deleteByTaskId(id);
googleTaskDao.deleteByTaskId(id);
localBroadcastManager.broadcastRefresh();
return true;
}
// --- save // --- save

@ -5,6 +5,12 @@ import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import org.tasks.calendars.CalendarEventProvider;
import org.tasks.data.AlarmDao;
import org.tasks.data.GoogleTaskDao;
import org.tasks.data.LocationDao;
import org.tasks.data.TagDao;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -17,35 +23,52 @@ import static com.todoroo.astrid.dao.TaskDao.TaskCriteria.notCompleted;
public class TaskDeleter { public class TaskDeleter {
private final TaskDao taskDao; private final TaskDao taskDao;
private final CalendarEventProvider calendarEventProvider;
private final AlarmDao alarmDao;
private final LocationDao locationDao;
private final TagDao tagDao;
private final GoogleTaskDao googleTaskDao;
@Inject @Inject
public TaskDeleter(TaskDao taskDao) { public TaskDeleter(TaskDao taskDao, CalendarEventProvider calendarEventProvider,
AlarmDao alarmDao, LocationDao locationDao, TagDao tagDao,
GoogleTaskDao googleTaskDao) {
this.taskDao = taskDao; this.taskDao = taskDao;
this.calendarEventProvider = calendarEventProvider;
this.alarmDao = alarmDao;
this.locationDao = locationDao;
this.tagDao = tagDao;
this.googleTaskDao = googleTaskDao;
} }
public void delete(Task item) { public int purgeDeleted() {
if(!item.isSaved()) { List<Task> deleted = taskDao.getDeleted();
return; for (Task task : deleted) {
calendarEventProvider.deleteEvent(task);
long id = task.getId();
taskDao.deleteById(id);
alarmDao.deleteByTaskId(id);
locationDao.deleteByTaskId(id);
tagDao.deleteByTaskId(id);
googleTaskDao.deleteByTaskId(id);
} }
return deleted.size();
}
if(item.containsValue(Task.TITLE) && item.getTitle().length() == 0) { public void markDeleted(Task item) {
taskDao.delete(item.getId()); if(!item.isSaved()) {
item.setId(Task.NO_ID); return;
} else {
Task template = new Task();
template.setId(item.getId());
template.setDeletionDate(DateUtilities.now());
taskDao.save(template);
} }
}
public int delete(List<Task> tasks) { Task template = new Task();
return markDeleted(tasks); template.setId(item.getId());
template.setDeletionDate(DateUtilities.now());
taskDao.save(template);
} }
private int markDeleted(List<Task> tasks) { public int markDeleted(List<Task> tasks) {
for (Task task : tasks) { for (Task task : tasks) {
delete(task); markDeleted(task);
} }
return tasks.size(); return tasks.size();
} }

@ -4,24 +4,21 @@ import android.arch.persistence.room.Room;
import android.content.Context; import android.content.Context;
import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.dao.Database;
import org.tasks.LocalBroadcastManager;
import org.tasks.data.FilterDao;
import org.tasks.data.GoogleTaskListDao;
import org.tasks.data.TagDataDao;
import org.tasks.data.TaskAttachmentDao;
import org.tasks.data.TaskListMetadataDao;
import org.tasks.data.UserActivityDao;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.provider.Astrid2TaskProvider; import com.todoroo.astrid.provider.Astrid2TaskProvider;
import org.tasks.ErrorReportingSingleThreadExecutor; import org.tasks.ErrorReportingSingleThreadExecutor;
import org.tasks.analytics.Tracker; import org.tasks.analytics.Tracker;
import org.tasks.data.AlarmDao; import org.tasks.data.AlarmDao;
import org.tasks.data.FilterDao;
import org.tasks.data.GoogleTaskDao; import org.tasks.data.GoogleTaskDao;
import org.tasks.data.GoogleTaskListDao;
import org.tasks.data.LocationDao; import org.tasks.data.LocationDao;
import org.tasks.data.TagDao; import org.tasks.data.TagDao;
import org.tasks.data.TagDataDao;
import org.tasks.data.TaskAttachmentDao;
import org.tasks.data.TaskListMetadataDao;
import org.tasks.data.UserActivityDao;
import org.tasks.db.Migrations; import org.tasks.db.Migrations;
import org.tasks.locale.Locale; import org.tasks.locale.Locale;
import org.tasks.notifications.NotificationDao; import org.tasks.notifications.NotificationDao;
@ -30,7 +27,6 @@ import org.tasks.preferences.Preferences;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import javax.inject.Named; import javax.inject.Named;
import javax.inject.Singleton;
import dagger.Module; import dagger.Module;
import dagger.Provides; import dagger.Provides;
@ -140,11 +136,9 @@ public class ApplicationModule {
@Provides @Provides
@ApplicationScope @ApplicationScope
public TaskDao getTaskDao(Database database, Preferences preferences, LocalBroadcastManager localBroadcastManager, public TaskDao getTaskDao(Database database, Preferences preferences) {
AlarmDao alarmDao, TagDao tagDao, LocationDao locationDao, GoogleTaskDao googleTaskDao) {
TaskDao taskDao = database.getTaskDao(); TaskDao taskDao = database.getTaskDao();
taskDao.initialize(context, preferences, localBroadcastManager, alarmDao, tagDao, taskDao.initialize(context, preferences);
locationDao, googleTaskDao);
return taskDao; return taskDao;
} }
} }

@ -170,7 +170,7 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter<ViewHolder> im
tracker.reportEvent(Tracking.Events.MULTISELECT_DELETE); tracker.reportEvent(Tracking.Events.MULTISELECT_DELETE);
List<Task> tasks = getTasks(); List<Task> tasks = getTasks();
mode.finish(); mode.finish();
int result = taskDeleter.delete(tasks); int result = taskDeleter.markDeleted(tasks);
taskList.onTaskDelete(tasks); taskList.onTaskDelete(tasks);
taskList.makeSnackbar(activity.getString(R.string.delete_multiple_tasks_confirmation, Integer.toString(result))).show(); taskList.makeSnackbar(activity.getString(R.string.delete_multiple_tasks_confirmation, Integer.toString(result))).show();
} }

Loading…
Cancel
Save