diff --git a/app/src/main/java/com/todoroo/andlib/sql/Criterion.java b/app/src/main/java/com/todoroo/andlib/sql/Criterion.java index 5a3ef4a91..9fef13186 100644 --- a/app/src/main/java/com/todoroo/andlib/sql/Criterion.java +++ b/app/src/main/java/com/todoroo/andlib/sql/Criterion.java @@ -15,13 +15,6 @@ import static com.todoroo.andlib.sql.SqlConstants.SPACE; public abstract class Criterion { - public static final Criterion all = - new Criterion(Operator.exists) { - @Override - protected void populate(StringBuilder sb) { - sb.append(1); - } - }; final Operator operator; public Criterion(Operator operator) { diff --git a/app/src/main/java/com/todoroo/andlib/sql/Field.java b/app/src/main/java/com/todoroo/andlib/sql/Field.java index 511e8e63d..c35b4998f 100644 --- a/app/src/main/java/com/todoroo/andlib/sql/Field.java +++ b/app/src/main/java/com/todoroo/andlib/sql/Field.java @@ -39,6 +39,10 @@ public class Field extends DBObject { return UnaryCriterion.gt(this, value); } + public Criterion gte(Object value) { + return UnaryCriterion.gte(this, value); + } + public Criterion lt(final Object value) { return UnaryCriterion.lt(this, value); } diff --git a/app/src/main/java/com/todoroo/andlib/sql/Operator.java b/app/src/main/java/com/todoroo/andlib/sql/Operator.java index 4c6deae3b..ff312e12d 100644 --- a/app/src/main/java/com/todoroo/andlib/sql/Operator.java +++ b/app/src/main/java/com/todoroo/andlib/sql/Operator.java @@ -19,6 +19,7 @@ public final class Operator { static final Operator neq = new Operator("<>"); static final Operator isNotNull = new Operator("IS NOT NULL"); static final Operator gt = new Operator(">"); + static final Operator gte = new Operator(">="); static final Operator lt = new Operator("<"); static final Operator lte = new Operator("<="); private final String operator; diff --git a/app/src/main/java/com/todoroo/andlib/sql/UnaryCriterion.java b/app/src/main/java/com/todoroo/andlib/sql/UnaryCriterion.java index c87b32f5d..118e75013 100644 --- a/app/src/main/java/com/todoroo/andlib/sql/UnaryCriterion.java +++ b/app/src/main/java/com/todoroo/andlib/sql/UnaryCriterion.java @@ -36,6 +36,10 @@ public class UnaryCriterion extends Criterion { return new UnaryCriterion(field, Operator.gt, value); } + static Criterion gte(Field field, Object value) { + return new UnaryCriterion(field, Operator.gte, value); + } + static Criterion lt(Field field, Object value) { return new UnaryCriterion(field, Operator.lt, value); } diff --git a/app/src/main/java/com/todoroo/astrid/core/SortHelper.java b/app/src/main/java/com/todoroo/astrid/core/SortHelper.java index 5afe3c72f..a731d12c4 100644 --- a/app/src/main/java/com/todoroo/astrid/core/SortHelper.java +++ b/app/src/main/java/com/todoroo/astrid/core/SortHelper.java @@ -6,6 +6,8 @@ package com.todoroo.astrid.core; +import static com.todoroo.astrid.dao.TaskDao.TaskCriteria.includeCompleted; +import static com.todoroo.astrid.dao.TaskDao.TaskCriteria.includeHidden; import static com.todoroo.astrid.dao.TaskDao.TaskCriteria.isVisible; import com.todoroo.andlib.sql.Criterion; @@ -58,7 +60,8 @@ public class SortHelper { // flags if (preferences.getBoolean(R.string.p_show_completed_tasks, false)) { adjustedSql = - adjustedSql.replace(Task.COMPLETION_DATE.eq(0).toString(), Criterion.all.toString()); + adjustedSql.replace( + Task.COMPLETION_DATE.eq(0).toString(), includeCompleted().toString()); } else if (preferences.getBoolean(R.string.p_temporarily_show_completed_tasks, false)) { adjustedSql = adjustedSql.replace( @@ -69,7 +72,7 @@ public class SortHelper { .toString()); } if (preferences.getBoolean(R.string.p_show_hidden_tasks, false)) { - adjustedSql = adjustedSql.replace(isVisible().toString(), Criterion.all.toString()); + adjustedSql = adjustedSql.replace(isVisible().toString(), includeHidden().toString()); } return adjustedSql; 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 5fba30da7..dbc1da35a 100644 --- a/app/src/main/java/com/todoroo/astrid/dao/TaskDao.java +++ b/app/src/main/java/com/todoroo/astrid/dao/TaskDao.java @@ -267,6 +267,10 @@ public abstract class TaskDao { return Task.COMPLETION_DATE.eq(0); } + public static Criterion includeCompleted() { + return Task.COMPLETION_DATE.gte(0); + } + /** @return tasks that have not yet been completed or deleted */ public static Criterion activeAndVisible() { return Criterion.and( @@ -284,5 +288,9 @@ public abstract class TaskDao { public static Criterion isVisible() { return Task.HIDE_UNTIL.lt(Functions.now()); } + + public static Criterion includeHidden() { + return Task.HIDE_UNTIL.gte(0); + } } } 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 708910118..93d7bdb86 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskDeleter.java +++ b/app/src/main/java/com/todoroo/astrid/service/TaskDeleter.java @@ -1,6 +1,7 @@ package com.todoroo.astrid.service; -import static com.todoroo.andlib.sql.Criterion.all; +import static com.todoroo.astrid.dao.TaskDao.TaskCriteria.includeCompleted; +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; @@ -92,8 +93,8 @@ public class TaskDeleter { deleteFilter.setFilterQueryOverride( filter .getOriginalSqlQuery() - .replace(isVisible().toString(), all.toString()) - .replace(notCompleted().toString(), all.toString())); + .replace(isVisible().toString(), includeHidden().toString()) + .replace(notCompleted().toString(), includeCompleted().toString())); List tasks = taskDao.fetchTasks( hasSubtasks -> TaskListViewModel.getQuery(preferences, deleteFilter, hasSubtasks)); for (TaskContainer task : tasks) { diff --git a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java index 0e0f8423f..1bf6802a0 100644 --- a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java +++ b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java @@ -2,11 +2,11 @@ package com.todoroo.astrid.subtasks; import android.content.Context; import android.text.TextUtils; -import com.todoroo.andlib.sql.Criterion; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.GtasksFilter; import com.todoroo.astrid.core.BuiltInFilterExposer; import com.todoroo.astrid.dao.TaskDao; +import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.subtasks.SubtasksFilterUpdater.Node; import java.util.ArrayList; @@ -147,7 +147,9 @@ public class SubtasksHelper { query = query.replaceAll("ORDER BY .*", ""); query = query + String.format(" ORDER BY %s", getOrderString(tagData, tlm)); query = - query.replace(TaskDao.TaskCriteria.isVisible().toString(), Criterion.all.toString()); + query.replace( + TaskCriteria.isVisible().toString(), + TaskCriteria.includeHidden().toString()); } filter.setFilterQueryOverride(query);