diff --git a/app/src/androidTest/java/com/todoroo/astrid/dao/TaskDaoTests.java b/app/src/androidTest/java/com/todoroo/astrid/dao/TaskDaoTests.java index 5146a1e38..be00c29ac 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/dao/TaskDaoTests.java +++ b/app/src/androidTest/java/com/todoroo/astrid/dao/TaskDaoTests.java @@ -133,7 +133,7 @@ public class TaskDaoTests extends InjectingTestCase { // delete long happyId = task.getId(); - assertTrue(taskDao.delete(happyId)); + assertEquals(1, taskDao.deleteById(happyId)); assertEquals(0, taskDao.toList(Query.select(IDS)).size()); } @@ -161,7 +161,7 @@ public class TaskDaoTests extends InjectingTestCase { assertNull(taskDao.fetch(1)); - assertFalse(taskDao.delete(1)); + assertEquals(0, taskDao.deleteById(1)); // make sure db still works assertEquals(0, taskDao.toList(Query.select(IDS)).size()); diff --git a/app/src/androidTest/java/org/tasks/injection/TestModule.java b/app/src/androidTest/java/org/tasks/injection/TestModule.java index 688109caf..d2062c720 100644 --- a/app/src/androidTest/java/org/tasks/injection/TestModule.java +++ b/app/src/androidTest/java/org/tasks/injection/TestModule.java @@ -6,16 +6,14 @@ import android.content.Context; import com.todoroo.astrid.dao.Database; 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.GoogleTaskDao; +import org.tasks.data.GoogleTaskListDao; import org.tasks.data.LocationDao; 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.preferences.PermissionChecker; import org.tasks.preferences.PermissivePermissionChecker; @@ -86,11 +84,9 @@ public class TestModule { } @Provides - public TaskDao getTaskDao(Database database, Preferences preferences, LocalBroadcastManager localBroadcastManager, - AlarmDao alarmDao, TagDao tagDao, LocationDao locationDao, GoogleTaskDao googleTaskDao) { + public TaskDao getTaskDao(Database database, Preferences preferences) { TaskDao taskDao = database.getTaskDao(); - taskDao.initialize(context, preferences, localBroadcastManager, alarmDao, tagDao, - locationDao, googleTaskDao); + taskDao.initialize(context, preferences); return taskDao; } diff --git a/app/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksListService.java b/app/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksListService.java index 5a2bbf7f4..808057c2f 100644 --- a/app/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksListService.java +++ b/app/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksListService.java @@ -105,7 +105,7 @@ public class GtasksListService { .constructCursor(new GtasksFilter(gtasksList), Task.PROPERTIES) .toList(); for (Task task : tasks) { - taskDeleter.delete(task); + taskDeleter.markDeleted(task); } googleTaskDao.deleteList(gtasksList.getRemoteId()); googleTaskListDao.deleteById(gtasksList.getId()); diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java b/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java index 72a3bcbc9..eac1a39bf 100755 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java @@ -275,7 +275,6 @@ public final class TaskEditFragment extends InjectingFragment implements Toolbar public void discard() { if (model != null && model.isNew()) { timerPlugin.stopTimer(model); - taskDeleter.delete(model); } callback.taskEditFinished(); @@ -285,7 +284,7 @@ public final class TaskEditFragment extends InjectingFragment implements Toolbar dialogBuilder.newMessageDialog(R.string.DLG_delete_this_task_question) .setPositiveButton(android.R.string.ok, (dialog, which) -> { timerPlugin.stopTimer(model); - taskDeleter.delete(model); + taskDeleter.markDeleted(model); callback.taskEditFinished(); }) .setNegativeButton(android.R.string.cancel, null) diff --git a/app/src/main/java/com/todoroo/astrid/core/OldTaskPreferences.java b/app/src/main/java/com/todoroo/astrid/core/OldTaskPreferences.java index eb568d7d4..4d8c7e9ae 100644 --- a/app/src/main/java/com/todoroo/astrid/core/OldTaskPreferences.java +++ b/app/src/main/java/com/todoroo/astrid/core/OldTaskPreferences.java @@ -12,6 +12,7 @@ import com.todoroo.andlib.sql.Query; import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.service.TaskDeleter; import org.tasks.R; import org.tasks.calendars.CalendarEventProvider; @@ -32,6 +33,7 @@ public class OldTaskPreferences extends InjectingPreferenceActivity { @Inject Database database; @Inject TaskDao taskDao; @Inject CalendarEventProvider calendarEventProvider; + @Inject TaskDeleter taskDeleter; @Override 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) { @Override protected Integer doInBackground(Void... params) { - List deleted = taskDao.getDeleted(); - for (Task task : deleted) { - calendarEventProvider.deleteEvent(task); - taskDao.delete(task.getId()); - } - return deleted.size(); + return taskDeleter.purgeDeleted(); } @Override diff --git a/app/src/main/java/com/todoroo/astrid/dao/TaskDao.java b/app/src/main/java/com/todoroo/astrid/dao/TaskDao.java index 24a7a22a4..dc57f9200 100644 --- a/app/src/main/java/com/todoroo/astrid/dao/TaskDao.java +++ b/app/src/main/java/com/todoroo/astrid/dao/TaskDao.java @@ -25,12 +25,7 @@ import com.todoroo.astrid.data.TaskApiDao; import com.todoroo.astrid.helper.UUIDHelper; import org.tasks.BuildConfig; -import org.tasks.LocalBroadcastManager; 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.preferences.Preferences; import org.tasks.receivers.PushReceiver; @@ -53,27 +48,16 @@ public abstract class TaskDao { private final Database database; - private LocalBroadcastManager localBroadcastManager; private Preferences preferences; - private AlarmDao alarmDao; - private TagDao tagDao; - private LocationDao locationDao; - private GoogleTaskDao googleTaskDao; private Context context; public TaskDao(Database database) { this.database = database; } - public void initialize(Context context, Preferences preferences, LocalBroadcastManager localBroadcastManager, - AlarmDao alarmDao, TagDao tagDao, LocationDao locationDao, GoogleTaskDao googleTaskDao) { + public void initialize(Context context, Preferences preferences) { this.context = context; this.preferences = preferences; - this.localBroadcastManager = localBroadcastManager; - this.alarmDao = alarmDao; - this.tagDao = tagDao; - this.locationDao = locationDao; - this.googleTaskDao = googleTaskDao; } public List selectActive(Criterion criterion) { @@ -160,31 +144,7 @@ public abstract class TaskDao { public abstract List getDeleted(); @android.arch.persistence.room.Query("DELETE FROM tasks WHERE _id = :id") - 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; - } + public abstract int deleteById(long id); // --- save diff --git a/app/src/main/java/com/todoroo/astrid/service/TaskDeleter.java b/app/src/main/java/com/todoroo/astrid/service/TaskDeleter.java index 25fbf0718..8cbc13777 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskDeleter.java +++ b/app/src/main/java/com/todoroo/astrid/service/TaskDeleter.java @@ -5,6 +5,12 @@ import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.dao.TaskDao; 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.List; @@ -17,35 +23,52 @@ import static com.todoroo.astrid.dao.TaskDao.TaskCriteria.notCompleted; public class TaskDeleter { 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 - public TaskDeleter(TaskDao taskDao) { + public TaskDeleter(TaskDao taskDao, CalendarEventProvider calendarEventProvider, + AlarmDao alarmDao, LocationDao locationDao, TagDao tagDao, + GoogleTaskDao googleTaskDao) { this.taskDao = taskDao; + this.calendarEventProvider = calendarEventProvider; + this.alarmDao = alarmDao; + this.locationDao = locationDao; + this.tagDao = tagDao; + this.googleTaskDao = googleTaskDao; } - public void delete(Task item) { - if(!item.isSaved()) { - return; + public int purgeDeleted() { + List deleted = taskDao.getDeleted(); + 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) { - taskDao.delete(item.getId()); - item.setId(Task.NO_ID); - } else { - Task template = new Task(); - template.setId(item.getId()); - template.setDeletionDate(DateUtilities.now()); - taskDao.save(template); + public void markDeleted(Task item) { + if(!item.isSaved()) { + return; } - } - public int delete(List tasks) { - return markDeleted(tasks); + Task template = new Task(); + template.setId(item.getId()); + template.setDeletionDate(DateUtilities.now()); + taskDao.save(template); } - private int markDeleted(List tasks) { + public int markDeleted(List tasks) { for (Task task : tasks) { - delete(task); + markDeleted(task); } return tasks.size(); } diff --git a/app/src/main/java/org/tasks/injection/ApplicationModule.java b/app/src/main/java/org/tasks/injection/ApplicationModule.java index 76acea58a..7757ab20e 100644 --- a/app/src/main/java/org/tasks/injection/ApplicationModule.java +++ b/app/src/main/java/org/tasks/injection/ApplicationModule.java @@ -4,24 +4,21 @@ import android.arch.persistence.room.Room; import android.content.Context; 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.provider.Astrid2TaskProvider; import org.tasks.ErrorReportingSingleThreadExecutor; import org.tasks.analytics.Tracker; import org.tasks.data.AlarmDao; +import org.tasks.data.FilterDao; import org.tasks.data.GoogleTaskDao; +import org.tasks.data.GoogleTaskListDao; import org.tasks.data.LocationDao; 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.locale.Locale; import org.tasks.notifications.NotificationDao; @@ -30,7 +27,6 @@ import org.tasks.preferences.Preferences; import java.util.concurrent.Executor; import javax.inject.Named; -import javax.inject.Singleton; import dagger.Module; import dagger.Provides; @@ -140,11 +136,9 @@ public class ApplicationModule { @Provides @ApplicationScope - public TaskDao getTaskDao(Database database, Preferences preferences, LocalBroadcastManager localBroadcastManager, - AlarmDao alarmDao, TagDao tagDao, LocationDao locationDao, GoogleTaskDao googleTaskDao) { + public TaskDao getTaskDao(Database database, Preferences preferences) { TaskDao taskDao = database.getTaskDao(); - taskDao.initialize(context, preferences, localBroadcastManager, alarmDao, tagDao, - locationDao, googleTaskDao); + taskDao.initialize(context, preferences); return taskDao; } } diff --git a/app/src/main/java/org/tasks/tasklist/TaskListRecyclerAdapter.java b/app/src/main/java/org/tasks/tasklist/TaskListRecyclerAdapter.java index d2658eff4..07f321c1d 100644 --- a/app/src/main/java/org/tasks/tasklist/TaskListRecyclerAdapter.java +++ b/app/src/main/java/org/tasks/tasklist/TaskListRecyclerAdapter.java @@ -170,7 +170,7 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter im tracker.reportEvent(Tracking.Events.MULTISELECT_DELETE); List tasks = getTasks(); mode.finish(); - int result = taskDeleter.delete(tasks); + int result = taskDeleter.markDeleted(tasks); taskList.onTaskDelete(tasks); taskList.makeSnackbar(activity.getString(R.string.delete_multiple_tasks_confirmation, Integer.toString(result))).show(); }