Fix manually sorted google task widget

pull/493/head
Alex Baker 9 years ago
parent 2da3a6a3ff
commit 1d8411915a

@ -10,8 +10,8 @@ import com.todoroo.andlib.sql.Functions;
import com.todoroo.andlib.sql.Order; import com.todoroo.andlib.sql.Order;
import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.sql.Query;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.dao.MetadataDao; import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gtasks.sync.GtasksSyncService; import com.todoroo.astrid.gtasks.sync.GtasksSyncService;
@ -50,12 +50,7 @@ public class GtasksTaskListUpdater {
} }
public void initialize(Filter filter) { public void initialize(Filter filter) {
String query = filter.getSqlQuery(); String query = GtasksFilter.toManualOrder(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());
filter.setFilterQueryOverride(query); filter.setFilterQueryOverride(query);
} }

@ -200,7 +200,7 @@ public class Filter extends FilterListItem {
} }
}; };
public boolean isTagFilter() { public boolean supportsSubtasks() {
return false; return false;
} }

@ -6,7 +6,9 @@ import android.os.Parcelable;
import com.todoroo.andlib.data.AbstractModel; import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Functions;
import com.todoroo.andlib.sql.Join; import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.Order;
import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.astrid.dao.MetadataDao; import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
@ -34,6 +36,14 @@ public class GtasksFilter extends Filter {
icon = CLOUD; 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() { public long getStoreId() {
return storeId; return storeId;
} }
@ -56,6 +66,11 @@ public class GtasksFilter extends Filter {
return values; return values;
} }
@Override
public boolean supportsSubtasks() {
return true;
}
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */

@ -96,7 +96,7 @@ public class TagFilter extends Filter {
}; };
@Override @Override
public boolean isTagFilter() { public boolean supportsSubtasks() {
return true; return true;
} }
} }

@ -8,10 +8,10 @@ import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.sql.Query;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.core.BuiltInFilterExposer; import com.todoroo.astrid.core.BuiltInFilterExposer;
import com.todoroo.astrid.dao.TagDataDao; import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.dao.TaskListMetadataDao; import com.todoroo.astrid.dao.TaskListMetadataDao;
import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.TagData;
@ -52,30 +52,31 @@ public class SubtasksHelper {
public boolean shouldUseSubtasksFragmentForFilter(Filter filter) { public boolean shouldUseSubtasksFragmentForFilter(Filter filter) {
return preferences.getBoolean(R.string.p_manual_sort, false) && return preferences.getBoolean(R.string.p_manual_sort, false) &&
filter != null && 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)) { 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 .*", ""); if (filter instanceof GtasksFilter) {
query = query + String.format(" ORDER BY %s, %s, %s", query = GtasksFilter.toManualOrder(query);
Task.DELETION_DATE, getOrderString(tagData, tlm), Task.CREATION_DATE); } else {
if (limit > 0) { TagData tagData = tagDataDao.getTagByName(filter.listingTitle, TagData.UUID, TagData.TAG_ORDERING);
query = query + " LIMIT " + limit; 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); filter.setFilterQueryOverride(query);
} }

@ -227,7 +227,7 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
} }
appWidgetManager.partiallyUpdateAppWidget(widgetId, rv); appWidgetManager.partiallyUpdateAppWidget(widgetId, rv);
String query = SortHelper.adjustQueryForFlagsAndSort(preferences, filter.getSqlQuery(), sort).replaceAll("LIMIT \\d+", ""); 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) { private void formatDueDate(RemoteViews row, Task task, int textColor) {

Loading…
Cancel
Save