From ddf9ccdf5dc979d7bfcc351ab3417d68355e9acf Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Wed, 11 Dec 2019 12:47:33 -0600 Subject: [PATCH] Replace hidden and completed eq with lte --- .../java/org/tasks/db/QueryUtilsTest.java | 42 +++++++++++++++++++ .../astrid/core/BuiltInFilterExposer.java | 5 +-- .../com/todoroo/astrid/core/SortHelper.java | 20 +++------ .../java/com/todoroo/astrid/dao/TaskDao.java | 31 +------------- .../todoroo/astrid/service/TaskDeleter.java | 12 +----- .../subtasks/SubtasksFilterUpdater.java | 12 ++---- .../astrid/subtasks/SubtasksHelper.java | 7 ++-- .../main/java/org/tasks/db/QueryUtils.java | 36 ++++++++++++++++ 8 files changed, 97 insertions(+), 68 deletions(-) create mode 100644 app/src/androidTest/java/org/tasks/db/QueryUtilsTest.java create mode 100644 app/src/main/java/org/tasks/db/QueryUtils.java diff --git a/app/src/androidTest/java/org/tasks/db/QueryUtilsTest.java b/app/src/androidTest/java/org/tasks/db/QueryUtilsTest.java new file mode 100644 index 000000000..f972ad0a1 --- /dev/null +++ b/app/src/androidTest/java/org/tasks/db/QueryUtilsTest.java @@ -0,0 +1,42 @@ +package org.tasks.db; + +import static org.junit.Assert.assertEquals; +import static org.tasks.db.QueryUtils.showCompleted; +import static org.tasks.db.QueryUtils.showHidden; + +import androidx.test.ext.junit.runners.AndroidJUnit4; +import com.todoroo.andlib.sql.Functions; +import com.todoroo.astrid.data.Task; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(AndroidJUnit4.class) +public class QueryUtilsTest { + @Test + public void replaceHiddenLT() { + assertEquals( + "(1)", + showHidden(Task.HIDE_UNTIL.lt(Functions.now()).toString())); + } + + @Test + public void replaceHiddenLTE() { + assertEquals( + "(1)", + showHidden(Task.HIDE_UNTIL.lte(Functions.now()).toString())); + } + + @Test + public void replaceUncompletedEQ() { + assertEquals( + "(1)", + showCompleted(Task.COMPLETION_DATE.eq(0).toString())); + } + + @Test + public void replaceUncompletedLTE() { + assertEquals( + "(1)", + showCompleted(Task.COMPLETION_DATE.lte(0).toString())); + } +} diff --git a/app/src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.java b/app/src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.java index 1f17dfce5..9b925c149 100644 --- a/app/src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.java +++ b/app/src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.java @@ -73,7 +73,7 @@ public final class BuiltInFilterExposer { return new NoSubtasksFilter( r.getString(R.string.BFE_Recent), new QueryTemplate() - .where(TaskCriteria.notDeleted()) + .where(Task.DELETION_DATE.lte(0)) .orderBy(Order.desc(Task.MODIFICATION_DATE)) .limit(15)); } @@ -86,8 +86,7 @@ public final class BuiltInFilterExposer { Criterion.and( Criterion.not( Task.UUID.in(Query.select(Field.field("task_uid")).from(Tag.TABLE))), - TaskCriteria.isActive(), - TaskCriteria.isVisible()))); + TaskCriteria.activeAndVisible()))); } public static boolean isInbox(Context context, Filter filter) { 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 a731d12c4..35c35ddec 100644 --- a/app/src/main/java/com/todoroo/astrid/core/SortHelper.java +++ b/app/src/main/java/com/todoroo/astrid/core/SortHelper.java @@ -6,9 +6,9 @@ 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 static org.tasks.db.QueryUtils.showCompleted; +import static org.tasks.db.QueryUtils.showHidden; +import static org.tasks.db.QueryUtils.showRecentlyCompleted; import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Functions; @@ -59,20 +59,12 @@ public class SortHelper { // flags if (preferences.getBoolean(R.string.p_show_completed_tasks, false)) { - adjustedSql = - adjustedSql.replace( - Task.COMPLETION_DATE.eq(0).toString(), includeCompleted().toString()); + adjustedSql = showCompleted(adjustedSql); } else if (preferences.getBoolean(R.string.p_temporarily_show_completed_tasks, false)) { - adjustedSql = - adjustedSql.replace( - Task.COMPLETION_DATE.eq(0).toString(), - Criterion.or( - Task.COMPLETION_DATE.lte(0), - Task.COMPLETION_DATE.gt(DateUtilities.now() - 60000)) - .toString()); + adjustedSql = showRecentlyCompleted(adjustedSql); } if (preferences.getBoolean(R.string.p_show_hidden_tasks, false)) { - adjustedSql = adjustedSql.replace(isVisible().toString(), includeHidden().toString()); + adjustedSql = showHidden(adjustedSql); } 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 aa59f2a0c..3b6ca46b2 100644 --- a/app/src/main/java/com/todoroo/astrid/dao/TaskDao.java +++ b/app/src/main/java/com/todoroo/astrid/dao/TaskDao.java @@ -259,40 +259,13 @@ public abstract class TaskDao { /** Generates SQL clauses */ public static class TaskCriteria { - /** @return tasks that were not deleted */ - public static Criterion notDeleted() { - return Task.DELETION_DATE.eq(0); - } - - public static Criterion notCompleted() { - 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( - Task.COMPLETION_DATE.eq(0), - Task.DELETION_DATE.eq(0), + Task.COMPLETION_DATE.lte(0), + Task.DELETION_DATE.lte(0), Task.HIDE_UNTIL.lt(Functions.now())); } - - /** @return tasks that have not yet been completed or deleted */ - public static Criterion isActive() { - return Criterion.and(Task.COMPLETION_DATE.eq(0), Task.DELETION_DATE.eq(0)); - } - - /** @return tasks that are not hidden at current time */ - public static Criterion isVisible() { - return Task.HIDE_UNTIL.lt(Functions.now()); - } - - public static Criterion includeHidden() { - return Task.HIDE_UNTIL.gte(0); - } } public interface QueryCallback { 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 ca9ccb8b0..ae7a6c2cd 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskDeleter.java +++ b/app/src/main/java/com/todoroo/astrid/service/TaskDeleter.java @@ -1,11 +1,7 @@ package com.todoroo.astrid.service; -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; import static org.tasks.db.DbUtils.collect; +import static org.tasks.db.QueryUtils.showHiddenAndCompleted; import com.google.common.collect.ImmutableList; import com.todoroo.astrid.api.Filter; @@ -91,11 +87,7 @@ public class TaskDeleter { public int clearCompleted(Filter filter) { List completed = new ArrayList<>(); Filter deleteFilter = new Filter(null, null); - deleteFilter.setFilterQueryOverride( - filter - .getOriginalSqlQuery() - .replace(isVisible().toString(), includeHidden().toString()) - .replace(notCompleted().toString(), includeCompleted().toString())); + deleteFilter.setFilterQueryOverride(showHiddenAndCompleted(filter.getOriginalSqlQuery())); List tasks = taskDao.fetchTasks( (includeGoogleSubtasks, includeCaldavSubtasks) -> diff --git a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksFilterUpdater.java b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksFilterUpdater.java index 390d16cbc..458aee468 100644 --- a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksFilterUpdater.java +++ b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksFilterUpdater.java @@ -1,5 +1,7 @@ package com.todoroo.astrid.subtasks; +import static org.tasks.db.QueryUtils.showHiddenAndCompleted; + import android.text.TextUtils; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.dao.TaskDao; @@ -133,10 +135,7 @@ public class SubtasksFilterUpdater { query = query.replaceAll("ORDER BY .*", ""); query = query + String.format("ORDER BY %s", getOrderString()); - query = - query.replace( - TaskDao.TaskCriteria.activeAndVisible().toString(), - TaskDao.TaskCriteria.notDeleted().toString()); + query = showHiddenAndCompleted(query); filter.setFilterQueryOverride(query); } @@ -165,10 +164,7 @@ public class SubtasksFilterUpdater { Set idsInQuery = new HashSet<>(); String sql = filter.getSqlQuery().replaceAll("ORDER BY .*", ""); // $NON-NLS-1$//$NON-NLS-2$ sql = sql + " ORDER BY created"; // $NON-NLS-1$ - sql = - sql.replace( - TaskDao.TaskCriteria.activeAndVisible().toString(), - TaskDao.TaskCriteria.notDeleted().toString()); + sql = showHiddenAndCompleted(sql); List tasks = taskDao.fetchFiltered(sql); for (Task task : tasks) { String id = task.getUuid(); 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 1bf6802a0..d11be95fc 100644 --- a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java +++ b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java @@ -1,5 +1,7 @@ package com.todoroo.astrid.subtasks; +import static org.tasks.db.QueryUtils.showHidden; + import android.content.Context; import android.text.TextUtils; import com.todoroo.astrid.api.Filter; @@ -146,10 +148,7 @@ public class SubtasksHelper { query = query.replaceAll("ORDER BY .*", ""); query = query + String.format(" ORDER BY %s", getOrderString(tagData, tlm)); - query = - query.replace( - TaskCriteria.isVisible().toString(), - TaskCriteria.includeHidden().toString()); + query = showHidden(query); } filter.setFilterQueryOverride(query); diff --git a/app/src/main/java/org/tasks/db/QueryUtils.java b/app/src/main/java/org/tasks/db/QueryUtils.java new file mode 100644 index 000000000..34f89bb73 --- /dev/null +++ b/app/src/main/java/org/tasks/db/QueryUtils.java @@ -0,0 +1,36 @@ +package org.tasks.db; + +import com.todoroo.andlib.sql.Criterion; +import com.todoroo.andlib.utility.DateUtilities; +import com.todoroo.astrid.data.Task; +import java.util.regex.Pattern; + +public class QueryUtils { + + private static final Pattern HIDDEN = + Pattern.compile("tasks\\.hideUntil<=?\\(strftime\\('%s','now'\\)\\*1000\\)"); + + private static final Pattern UNCOMPLETED = Pattern.compile("tasks\\.completed