From 1d8411915ae67537df0a9f414469b16932e9e66b Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 8 Nov 2016 15:38:13 -0600 Subject: [PATCH] Fix manually sorted google task widget --- .../astrid/gtasks/GtasksTaskListUpdater.java | 9 +--- .../java/com/todoroo/astrid/api/Filter.java | 2 +- .../com/todoroo/astrid/api/GtasksFilter.java | 15 +++++++ .../com/todoroo/astrid/api/TagFilter.java | 2 +- .../astrid/subtasks/SubtasksHelper.java | 41 ++++++++++--------- .../tasks/widget/ScrollableViewsFactory.java | 2 +- 6 files changed, 41 insertions(+), 30 deletions(-) diff --git a/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java b/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java index 7e03e79a5..50d9edf0b 100644 --- a/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java +++ b/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java @@ -10,8 +10,8 @@ import com.todoroo.andlib.sql.Functions; import com.todoroo.andlib.sql.Order; import com.todoroo.andlib.sql.Query; import com.todoroo.astrid.api.Filter; +import com.todoroo.astrid.api.GtasksFilter; import com.todoroo.astrid.dao.MetadataDao; -import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.gtasks.sync.GtasksSyncService; @@ -50,12 +50,7 @@ public class GtasksTaskListUpdater { } public void initialize(Filter filter) { - String query = filter.getSqlQuery(); - query = query.replaceAll("ORDER BY .*", ""); - query = query + String.format(" ORDER BY %s", Order.asc(Functions.cast(GtasksMetadata.ORDER, "LONG"))); - query = query.replace( - TaskDao.TaskCriteria.activeAndVisible().toString(), - TaskDao.TaskCriteria.notDeleted().toString()); + String query = GtasksFilter.toManualOrder(filter.getSqlQuery()); filter.setFilterQueryOverride(query); } diff --git a/src/main/java/com/todoroo/astrid/api/Filter.java b/src/main/java/com/todoroo/astrid/api/Filter.java index 943c27f27..29a848c64 100644 --- a/src/main/java/com/todoroo/astrid/api/Filter.java +++ b/src/main/java/com/todoroo/astrid/api/Filter.java @@ -200,7 +200,7 @@ public class Filter extends FilterListItem { } }; - public boolean isTagFilter() { + public boolean supportsSubtasks() { return false; } diff --git a/src/main/java/com/todoroo/astrid/api/GtasksFilter.java b/src/main/java/com/todoroo/astrid/api/GtasksFilter.java index d082fabf6..df5752f2b 100644 --- a/src/main/java/com/todoroo/astrid/api/GtasksFilter.java +++ b/src/main/java/com/todoroo/astrid/api/GtasksFilter.java @@ -6,7 +6,9 @@ import android.os.Parcelable; import com.todoroo.andlib.data.AbstractModel; import com.todoroo.andlib.sql.Criterion; +import com.todoroo.andlib.sql.Functions; import com.todoroo.andlib.sql.Join; +import com.todoroo.andlib.sql.Order; import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.astrid.dao.MetadataDao; import com.todoroo.astrid.dao.TaskDao; @@ -34,6 +36,14 @@ public class GtasksFilter extends Filter { icon = CLOUD; } + public static String toManualOrder(String query) { + query = query.replaceAll("ORDER BY .*", ""); + query = query + String.format(" ORDER BY %s", Order.asc(Functions.cast(GtasksMetadata.ORDER, "LONG"))); + return query.replace( + TaskDao.TaskCriteria.activeAndVisible().toString(), + TaskDao.TaskCriteria.notDeleted().toString()); + } + public long getStoreId() { return storeId; } @@ -56,6 +66,11 @@ public class GtasksFilter extends Filter { return values; } + @Override + public boolean supportsSubtasks() { + return true; + } + /** * {@inheritDoc} */ diff --git a/src/main/java/com/todoroo/astrid/api/TagFilter.java b/src/main/java/com/todoroo/astrid/api/TagFilter.java index 1b083c4a9..8fb2da752 100644 --- a/src/main/java/com/todoroo/astrid/api/TagFilter.java +++ b/src/main/java/com/todoroo/astrid/api/TagFilter.java @@ -96,7 +96,7 @@ public class TagFilter extends Filter { }; @Override - public boolean isTagFilter() { + public boolean supportsSubtasks() { return true; } } diff --git a/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java b/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java index b3f65abf3..0ec138bf7 100644 --- a/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java +++ b/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java @@ -8,10 +8,10 @@ import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Query; import com.todoroo.astrid.api.Filter; +import com.todoroo.astrid.api.GtasksFilter; import com.todoroo.astrid.core.BuiltInFilterExposer; import com.todoroo.astrid.dao.TagDataDao; import com.todoroo.astrid.dao.TaskDao; -import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.dao.TaskListMetadataDao; import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.data.TagData; @@ -52,30 +52,31 @@ public class SubtasksHelper { public boolean shouldUseSubtasksFragmentForFilter(Filter filter) { return preferences.getBoolean(R.string.p_manual_sort, false) && filter != null && - (BuiltInFilterExposer.isInbox(context, filter) || BuiltInFilterExposer.isTodayFilter(context, filter) || filter.isTagFilter()); + (filter.supportsSubtasks() || + BuiltInFilterExposer.isInbox(context, filter) || + BuiltInFilterExposer.isTodayFilter(context, filter)); } - public String applySubtasksToWidgetFilter(Filter filter, String query, String tagName, int limit) { + public String applySubtasksToWidgetFilter(Filter filter, String query) { if (shouldUseSubtasksFragmentForFilter(filter)) { - // care for manual ordering - TagData tagData = tagDataDao.getTagByName(tagName, TagData.UUID, TagData.TAG_ORDERING); - TaskListMetadata tlm = null; - if (tagData != null) { - tlm = taskListMetadataDao.fetchByTagId(tagData.getUuid(), TaskListMetadata.TASK_IDS); - } else if (BuiltInFilterExposer.isInbox(context, filter)) { - tlm = taskListMetadataDao.fetchByTagId(TaskListMetadata.FILTER_ID_ALL, TaskListMetadata.TASK_IDS); - } else if (BuiltInFilterExposer.isTodayFilter(context, filter)) { - tlm = taskListMetadataDao.fetchByTagId(TaskListMetadata.FILTER_ID_TODAY, TaskListMetadata.TASK_IDS); - } - query = query.replaceAll("ORDER BY .*", ""); - query = query + String.format(" ORDER BY %s, %s, %s", - Task.DELETION_DATE, getOrderString(tagData, tlm), Task.CREATION_DATE); - if (limit > 0) { - query = query + " LIMIT " + limit; + if (filter instanceof GtasksFilter) { + query = GtasksFilter.toManualOrder(query); + } else { + TagData tagData = tagDataDao.getTagByName(filter.listingTitle, TagData.UUID, TagData.TAG_ORDERING); + TaskListMetadata tlm = null; + if (tagData != null) { + tlm = taskListMetadataDao.fetchByTagId(tagData.getUuid(), TaskListMetadata.TASK_IDS); + } else if (BuiltInFilterExposer.isInbox(context, filter)) { + tlm = taskListMetadataDao.fetchByTagId(TaskListMetadata.FILTER_ID_ALL, TaskListMetadata.TASK_IDS); + } else if (BuiltInFilterExposer.isTodayFilter(context, filter)) { + tlm = taskListMetadataDao.fetchByTagId(TaskListMetadata.FILTER_ID_TODAY, TaskListMetadata.TASK_IDS); + } + + 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 = query.replace(TaskCriteria.isVisible().toString(), - Criterion.all.toString()); filter.setFilterQueryOverride(query); } diff --git a/src/main/java/org/tasks/widget/ScrollableViewsFactory.java b/src/main/java/org/tasks/widget/ScrollableViewsFactory.java index 93145f9f3..8b089113d 100644 --- a/src/main/java/org/tasks/widget/ScrollableViewsFactory.java +++ b/src/main/java/org/tasks/widget/ScrollableViewsFactory.java @@ -227,7 +227,7 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory { } appWidgetManager.partiallyUpdateAppWidget(widgetId, rv); String query = SortHelper.adjustQueryForFlagsAndSort(preferences, filter.getSqlQuery(), sort).replaceAll("LIMIT \\d+", ""); - return subtasksHelper.applySubtasksToWidgetFilter(filter, query, filter.listingTitle, 0); + return subtasksHelper.applySubtasksToWidgetFilter(filter, query); } private void formatDueDate(RemoteViews row, Task task, int textColor) {