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.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);
}

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

@ -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}
*/

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

@ -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,13 +52,18 @@ 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);
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);
@ -69,13 +74,9 @@ public class SubtasksHelper {
}
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;
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);
}

@ -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) {

Loading…
Cancel
Save