From bb44afbb7d0aabf6f2de7d3d4f9580ebb46dda5c Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Wed, 28 Mar 2018 14:06:34 -0500 Subject: [PATCH] New tasks in custom filter use noon instead of eod --- .../java/com/todoroo/astrid/api/PermaSql.java | 38 ++++++++++------ .../astrid/core/CustomFilterActivity.java | 2 +- .../java/com/todoroo/astrid/dao/TaskDao.java | 4 +- .../todoroo/astrid/service/TaskCreator.java | 45 +++++++++++-------- .../main/java/org/tasks/time/DateTime.java | 18 ++++++++ 5 files changed, 73 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/com/todoroo/astrid/api/PermaSql.java b/app/src/main/java/com/todoroo/astrid/api/PermaSql.java index 64f645d2e..733011d57 100644 --- a/app/src/main/java/com/todoroo/astrid/api/PermaSql.java +++ b/app/src/main/java/com/todoroo/astrid/api/PermaSql.java @@ -9,6 +9,7 @@ package com.todoroo.astrid.api; import static org.tasks.date.DateTimeUtils.newDateTime; import com.todoroo.andlib.utility.DateUtilities; +import org.tasks.time.DateTime; /** * PermaSql allows for creating SQL statements that can be saved and used @@ -80,7 +81,7 @@ public final class PermaSql { /** * Replace placeholder strings with actual */ - public static String replacePlaceholders(String value) { + public static String replacePlaceholdersForQuery(String value) { if (value.contains(VALUE_NOW)) { value = value.replace(VALUE_NOW, Long.toString(DateUtilities.now())); } @@ -97,13 +98,29 @@ public final class PermaSql { return value; } + public static String replacePlaceholdersForNewTask(String value) { + if (value.contains(VALUE_NOW)) { + value = value.replace(VALUE_NOW, Long.toString(DateUtilities.now())); + } + if (value.contains(VALUE_EOD) || value.contains(VALUE_EOD_DAY_AFTER) || + value.contains(VALUE_EOD_NEXT_WEEK) || value.contains(VALUE_EOD_TOMORROW) || + value.contains(VALUE_EOD_YESTERDAY) || value.contains(VALUE_EOD_NEXT_MONTH)) { + value = replaceEodValues(value, newDateTime().noon()); + } + if (value.contains(VALUE_NOON) || value.contains(VALUE_NOON_DAY_AFTER) || + value.contains(VALUE_NOON_NEXT_WEEK) || value.contains(VALUE_NOON_TOMORROW) || + value.contains(VALUE_NOON_YESTERDAY) || value.contains(VALUE_NOON_NEXT_MONTH)) { + value = replaceNoonValues(value); + } + return value; + } + private static String replaceEodValues(String value) { - long time = newDateTime() - .withHourOfDay(23) - .withMinuteOfHour(59) - .withSecondOfMinute(59) - .withMillisOfSecond(0) - .getMillis(); + return replaceEodValues(value, newDateTime().endOfDay()); + } + + private static String replaceEodValues(String value, DateTime dateTime) { + long time = dateTime.getMillis(); value = value.replace(VALUE_EOD_YESTERDAY, Long.toString(time - DateUtilities.ONE_DAY)); value = value.replace(VALUE_EOD, Long.toString(time)); value = value.replace(VALUE_EOD_TOMORROW, Long.toString(time + DateUtilities.ONE_DAY)); @@ -114,12 +131,7 @@ public final class PermaSql { } private static String replaceNoonValues(String value) { - long time = newDateTime() - .withHourOfDay(12) - .withMinuteOfHour(0) - .withSecondOfMinute(0) - .withMillisOfSecond(0) - .getMillis(); + long time = newDateTime().noon().getMillis(); value = value.replace(VALUE_NOON_YESTERDAY, Long.toString(time - DateUtilities.ONE_DAY)); value = value.replace(VALUE_NOON, Long.toString(time)); value = value.replace(VALUE_NOON_TOMORROW, Long.toString(time + DateUtilities.ONE_DAY)); diff --git a/app/src/main/java/com/todoroo/astrid/core/CustomFilterActivity.java b/app/src/main/java/com/todoroo/astrid/core/CustomFilterActivity.java index ef581ab61..3d0f909d4 100644 --- a/app/src/main/java/com/todoroo/astrid/core/CustomFilterActivity.java +++ b/app/src/main/java/com/todoroo/astrid/core/CustomFilterActivity.java @@ -277,7 +277,7 @@ public class CustomFilterActivity extends ThemedInjectingAppCompatActivity imple sql.append(TaskCriteria.activeAndVisible()).append(' '); } else { String subSql = instance.criterion.sql.replace("?", UnaryCriterion.sanitize(value)); - subSql = PermaSql.replacePlaceholders(subSql); + subSql = PermaSql.replacePlaceholdersForQuery(subSql); sql.append(Task.ID).append(" IN (").append(subSql).append(") "); } 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 03e5752c0..77b821746 100644 --- a/app/src/main/java/com/todoroo/astrid/dao/TaskDao.java +++ b/app/src/main/java/com/todoroo/astrid/dao/TaskDao.java @@ -233,7 +233,7 @@ public abstract class TaskDao { public Cursor getCursor(String queryTemplate) { Query query = Query.select(Task.PROPERTIES) - .withQueryTemplate(PermaSql.replacePlaceholders(queryTemplate)); + .withQueryTemplate(PermaSql.replacePlaceholdersForQuery(queryTemplate)); String queryString = query.from(Task.TABLE).toString(); if (BuildConfig.DEBUG) { Timber.v(queryString); @@ -245,7 +245,7 @@ public abstract class TaskDao { Property... properties) { String query = Query .select(properties) - .withQueryTemplate(PermaSql.replacePlaceholders(queryTemplate)) + .withQueryTemplate(PermaSql.replacePlaceholdersForQuery(queryTemplate)) .from(Task.TABLE).toString(); return new LimitOffsetDataSource(database, query); } diff --git a/app/src/main/java/com/todoroo/astrid/service/TaskCreator.java b/app/src/main/java/com/todoroo/astrid/service/TaskCreator.java index 4fe2bbe81..f741dfdc1 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskCreator.java +++ b/app/src/main/java/com/todoroo/astrid/service/TaskCreator.java @@ -132,24 +132,33 @@ public class TaskCreator { for (Map.Entry item : values.entrySet()) { String key = item.getKey(); Object value = item.getValue(); - if (key.equals(Tag.KEY)) { - tags.add((String) value); - } else if (key.equals(GoogleTask.KEY)) { - task.putTransitory(key, value); - } else if (key.equals(CaldavTask.KEY)) { - task.putTransitory(key, value); - } else { - if (value instanceof String) { - value = PermaSql.replacePlaceholders((String) value); - } - - if (key.equals("dueDate")) { - task.setDueDate(Long.valueOf((String) value)); - } else if (key.equals("importance")) { - task.setImportance(Integer.valueOf((String) value)); - } else { - tracker.reportEvent(Tracking.Events.TASK_CREATION_FAILED, "Unhandled key: " + key); - } + switch (key) { + case Tag.KEY: + tags.add((String) value); + break; + case GoogleTask.KEY: + task.putTransitory(key, value); + break; + case CaldavTask.KEY: + task.putTransitory(key, value); + break; + default: + if (value instanceof String) { + value = PermaSql.replacePlaceholdersForNewTask((String) value); + } + + switch (key) { + case "dueDate": + task.setDueDate(Long.valueOf((String) value)); + break; + case "importance": + task.setImportance(Integer.valueOf((String) value)); + break; + default: + tracker.reportEvent(Tracking.Events.TASK_CREATION_FAILED, "Unhandled key: " + key); + break; + } + break; } } } diff --git a/app/src/main/java/org/tasks/time/DateTime.java b/app/src/main/java/org/tasks/time/DateTime.java index fc044b755..0c78198d3 100644 --- a/app/src/main/java/org/tasks/time/DateTime.java +++ b/app/src/main/java/org/tasks/time/DateTime.java @@ -115,6 +115,24 @@ public class DateTime { return new DateTime(calendar); } + public DateTime noon() { + Calendar calendar = getCalendar(); + calendar.set(Calendar.HOUR_OF_DAY, 12); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + return new DateTime(calendar); + } + + public DateTime endOfDay() { + Calendar calendar = getCalendar(); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + calendar.set(Calendar.MILLISECOND, 0); + return new DateTime(calendar); + } + public DateTime withMillisOfDay(int millisOfDay) { if (millisOfDay > MAX_MILLIS_PER_DAY || millisOfDay < 0) { throw new RuntimeException("Illegal millis of day: " + millisOfDay);