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 c234f6370..ca9ccb8b0 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,7 @@ import static com.todoroo.astrid.dao.TaskDao.TaskCriteria.includeHidden; import static com.todoroo.astrid.dao.TaskDao.TaskCriteria.isVisible; import static com.todoroo.astrid.dao.TaskDao.TaskCriteria.notCompleted; import static org.tasks.db.DbUtils.batch; +import static org.tasks.db.DbUtils.collect; import com.google.common.collect.ImmutableList; import com.todoroo.astrid.api.Filter; @@ -68,13 +69,13 @@ public class TaskDeleter { public List markDeleted(List taskIds) { Set ids = new HashSet<>(taskIds); - batch(taskIds, i -> ids.addAll(googleTaskDao.getChildren(i))); - batch(taskIds, i -> ids.addAll(caldavDao.getChildren(i))); + ids.addAll(collect(taskIds, googleTaskDao::getChildren)); + ids.addAll(collect(taskIds, caldavDao::getChildren)); deletionDao.markDeleted(ids); - workManager.cleanup(taskIds); + workManager.cleanup(ids); workManager.sync(false); localBroadcastManager.broadcastRefresh(); - return taskDao.fetch(taskIds); + return collect(ids, taskDao::fetch); } public void delete(Task task) { diff --git a/app/src/main/java/org/tasks/db/DbUtils.java b/app/src/main/java/org/tasks/db/DbUtils.java index e4f05f017..26df62ab0 100644 --- a/app/src/main/java/org/tasks/db/DbUtils.java +++ b/app/src/main/java/org/tasks/db/DbUtils.java @@ -1,10 +1,12 @@ package org.tasks.db; +import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Lists.partition; import com.google.common.base.Function; import com.google.common.collect.Iterables; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import org.tasks.Callback; @@ -12,9 +14,9 @@ public class DbUtils { private static final int MAX_SQLITE_ARGS = 990; - public static List collect(List items, Function, List> func) { + public static List collect(Collection items, Function, List> func) { if (items.size() < MAX_SQLITE_ARGS) { - return func.apply(items); + return func.apply(items instanceof List ? (List) items : newArrayList(items)); } List result = new ArrayList<>(); batch(items, b -> result.addAll(func.apply(b))); diff --git a/app/src/main/java/org/tasks/jobs/WorkManager.java b/app/src/main/java/org/tasks/jobs/WorkManager.java index 601f2833f..113dd2c9b 100644 --- a/app/src/main/java/org/tasks/jobs/WorkManager.java +++ b/app/src/main/java/org/tasks/jobs/WorkManager.java @@ -87,7 +87,7 @@ public class WorkManager { .build()); } - public void cleanup(List ids) { + public void cleanup(Iterable ids) { batch( ids, MAX_CLEANUP_LENGTH,