diff --git a/api/src/com/todoroo/astrid/api/Filter.java b/api/src/com/todoroo/astrid/api/Filter.java index 6d7af4959..8d082b4c2 100644 --- a/api/src/com/todoroo/astrid/api/Filter.java +++ b/api/src/com/todoroo/astrid/api/Filter.java @@ -54,7 +54,13 @@ public class Filter extends FilterListItem { * metadata.value = 'b' GROUP BY tasks.id ORDER BY tasks.title" * */ - public String sqlQuery; + protected String sqlQuery; + + /** + * Field for holding a modified sqlQuery based on sqlQuery. Useful for adjusting + * query for sort/subtasks without breaking the equality checking based on sqlQuery. + */ + protected String adjustedSqlQuery; /** * Values to apply to a task when quick-adding a task from this filter. @@ -99,10 +105,23 @@ public class Filter extends FilterListItem { this.listingTitle = listingTitle; this.title = title; this.sqlQuery = sqlQuery; + this.adjustedSqlQuery = null; this.valuesForNewTasks = valuesForNewTasks; } + public String getSqlQuery() { + if (adjustedSqlQuery != null) + return adjustedSqlQuery; + return sqlQuery; + } + + public void setSqlQuery(String sqlQuery) { + this.sqlQuery = sqlQuery; + } + public void setAdjustedSqlQuery(String adjustedSqlQuery) { + this.adjustedSqlQuery = adjustedSqlQuery; + } /** * Utility constructor diff --git a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListFragment.java b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListFragment.java index 6e7c39c29..0e13f2a94 100644 --- a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListFragment.java @@ -106,7 +106,7 @@ public class GtasksListFragment extends SubtasksListFragment { private void clearCompletedTasks() { final ProgressDialog pd = new ProgressDialog(getActivity()); - final TodorooCursor tasks = taskService.fetchFiltered(filter.sqlQuery, + final TodorooCursor tasks = taskService.fetchFiltered(filter.getSqlQuery(), null, Task.ID, Task.COMPLETION_DATE); pd.setMessage(this.getString(R.string.gtasks_GTA_clearing)); pd.show(); diff --git a/astrid/plugin-src/com/todoroo/astrid/locale/LocaleEditAlerts.java b/astrid/plugin-src/com/todoroo/astrid/locale/LocaleEditAlerts.java index ee38c277e..b7a7ed55b 100644 --- a/astrid/plugin-src/com/todoroo/astrid/locale/LocaleEditAlerts.java +++ b/astrid/plugin-src/com/todoroo/astrid/locale/LocaleEditAlerts.java @@ -162,14 +162,14 @@ public final class LocaleEditAlerts extends ListActivity { if(adapter.getSelection() != null || finalSelection == null) return; if(item instanceof Filter) { - if(finalSelection.equals(((Filter)item).sqlQuery)) + if(finalSelection.equals(((Filter)item).getSqlQuery())) adapter.setSelection(item); } else if(item instanceof FilterCategory) { Filter[] filters = ((FilterCategory)item).children; if(filters == null) return; for(Filter filter : filters) - if(finalSelection.equals(filter.sqlQuery)) { + if(finalSelection.equals(filter.getSqlQuery())) { adapter.setSelection(filter); break; } @@ -242,7 +242,7 @@ public final class LocaleEditAlerts extends ListActivity { Filter filterItem = (Filter) selected; storeAndForwardExtras.putString(KEY_FILTER_TITLE, filterItem.title); - storeAndForwardExtras.putString(KEY_SQL, filterItem.sqlQuery); + storeAndForwardExtras.putString(KEY_SQL, filterItem.getSqlQuery()); if(filterItem.valuesForNewTasks != null) storeAndForwardExtras.putString(KEY_VALUES, AndroidUtilities.contentValuesToSerializedString(filterItem.valuesForNewTasks)); storeAndForwardExtras.putInt(KEY_INTERVAL, INTERVALS[intervalIndex]); diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksUpdater.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksUpdater.java index 2d1f3cbb8..22b06ba8c 100644 --- a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksUpdater.java +++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksUpdater.java @@ -74,7 +74,7 @@ public class SubtasksUpdater extends OrderedListUpdater { protected void iterateThroughList(Filter filter, String list, OrderedListIterator iterator) { TodorooCursor cursor = taskService.query(Query.select(Task.ID, Metadata.ID.as(METADATA_ID), Metadata.TASK, Metadata.KEY, SubtasksMetadata.INDENT, - SubtasksMetadata.ORDER).withQueryTemplate(filter.sqlQuery)); + SubtasksMetadata.ORDER).withQueryTemplate(filter.getSqlQuery())); TodorooCursor metadataCursor = new TodorooCursor(cursor.getCursor(), cursor.getProperties()); Metadata metadata = new Metadata(); @@ -91,7 +91,7 @@ public class SubtasksUpdater extends OrderedListUpdater { @SuppressWarnings("nls") public void applySubtasksToFilter(Filter filter, String tagName) { - String query = filter.sqlQuery; + String query = filter.getSqlQuery(); if(tagName == null) tagName = SubtasksMetadata.LIST_ACTIVE_TASKS; @@ -109,7 +109,7 @@ public class SubtasksUpdater extends OrderedListUpdater { query = query.replace(TaskCriteria.isVisible().toString(), Criterion.all.toString()); - filter.sqlQuery = query; + filter.setAdjustedSqlQuery(query); } } diff --git a/astrid/src/com/todoroo/astrid/activity/ShortcutActivity.java b/astrid/src/com/todoroo/astrid/activity/ShortcutActivity.java index 690904818..422060ebb 100644 --- a/astrid/src/com/todoroo/astrid/activity/ShortcutActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/ShortcutActivity.java @@ -161,7 +161,7 @@ public class ShortcutActivity extends Activity { shortcutIntent.putExtra(ShortcutActivity.TOKEN_FILTER_TITLE, filter.title); shortcutIntent.putExtra(ShortcutActivity.TOKEN_FILTER_SQL, - filter.sqlQuery); + filter.getSqlQuery()); if (filter.valuesForNewTasks != null) { for (Entry item : filter.valuesForNewTasks.valueSet()) { String key = TOKEN_FILTER_VALUES_ITEM + item.getKey(); diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java index 47d4cf0cf..b71375aee 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java @@ -208,6 +208,7 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener public void setupTasklistFragmentWithFilterAndCustomTaskList(Filter filter, Bundle extras, Class customTaskList) { if (fragmentLayout == LAYOUT_SINGLE) { tlfPager.showFilterWithCustomTaskList(filter, customTaskList); + tlfPager.setAdapter(tlfPagerAdapter); // Hack to force reload of current page } else { super.setupTasklistFragmentWithFilterAndCustomTaskList(filter, extras, customTaskList); } @@ -640,7 +641,7 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener Filter currentlyShowing = getIntent().getParcelableExtra(TaskListFragment.TOKEN_FILTER); if (currentlyShowing != null) { boolean titlesMatch = currentlyShowing.title != null && currentlyShowing.title.equals(deletedTag); - boolean sqlMatches = currentlyShowing.sqlQuery != null && currentlyShowing.sqlQuery.equals(deletedTagSql); + boolean sqlMatches = currentlyShowing.getSqlQuery() != null && currentlyShowing.getSqlQuery().equals(deletedTagSql); if (titlesMatch && sqlMatches) fl.switchToActiveTasks(); } diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java b/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java index 724d8fd71..91b5e836e 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java @@ -855,7 +855,7 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, return; sqlQueryTemplate.set(SortHelper.adjustQueryForFlagsAndSort( - filter.sqlQuery, sortFlags, sortSort)); + filter.getSqlQuery(), sortFlags, sortSort)); // perform query TodorooCursor currentCursor; diff --git a/astrid/src/com/todoroo/astrid/service/TaskService.java b/astrid/src/com/todoroo/astrid/service/TaskService.java index e2708298a..ae00dedc9 100644 --- a/astrid/src/com/todoroo/astrid/service/TaskService.java +++ b/astrid/src/com/todoroo/astrid/service/TaskService.java @@ -328,7 +328,7 @@ public class TaskService { /** count tasks in a given filter */ public int countTasks(Filter filter) { - String queryTemplate = PermaSql.replacePlaceholders(filter.sqlQuery); + String queryTemplate = PermaSql.replacePlaceholders(filter.getSqlQuery()); TodorooCursor cursor = query(Query.select(Task.ID).withQueryTemplate( queryTemplate)); try { diff --git a/astrid/src/com/todoroo/astrid/widget/TasksWidget.java b/astrid/src/com/todoroo/astrid/widget/TasksWidget.java index cdefa00a2..e49280295 100644 --- a/astrid/src/com/todoroo/astrid/widget/TasksWidget.java +++ b/astrid/src/com/todoroo/astrid/widget/TasksWidget.java @@ -160,7 +160,7 @@ public class TasksWidget extends AppWidgetProvider { int flags = publicPrefs.getInt(SortHelper.PREF_SORT_FLAGS, 0); int sort = publicPrefs.getInt(SortHelper.PREF_SORT_SORT, 0); String query = SortHelper.adjustQueryForFlagsAndSort( - filter.sqlQuery, flags, sort).replaceAll("LIMIT \\d+", "") + " LIMIT " + numberOfTasks; + filter.getSqlQuery(), flags, sort).replaceAll("LIMIT \\d+", "") + " LIMIT " + numberOfTasks; database.openForReading(); cursor = taskService.fetchFiltered(query, null, Task.ID, Task.TITLE, Task.DUE_DATE, Task.COMPLETION_DATE); @@ -223,7 +223,7 @@ public class TasksWidget extends AppWidgetProvider { listIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); if(filter != null) { listIntent.putExtra(TaskListFragment.TOKEN_FILTER, filter); - listIntent.setAction("L" + widgetId + filter.sqlQuery); + listIntent.setAction("L" + widgetId + filter.getSqlQuery()); } else { listIntent.setAction("L" + widgetId); } @@ -332,7 +332,7 @@ public class TasksWidget extends AppWidgetProvider { Filter filter = CoreFilterExposer.buildInboxFilter(getResources()); String sql = Preferences.getStringValue(WidgetConfigActivity.PREF_SQL + widgetId); if(sql != null) - filter.sqlQuery = sql; + filter.setSqlQuery(sql); String title = Preferences.getStringValue(WidgetConfigActivity.PREF_TITLE + widgetId); if(title != null) filter.title = title; @@ -344,7 +344,7 @@ public class TasksWidget extends AppWidgetProvider { + widgetId); if (customComponent != null) { ComponentName component = ComponentName.unflattenFromString(customComponent); - filter = new FilterWithCustomIntent(filter.title, filter.title, filter.sqlQuery, filter.valuesForNewTasks); + filter = new FilterWithCustomIntent(filter.title, filter.title, filter.getSqlQuery(), filter.valuesForNewTasks); ((FilterWithCustomIntent) filter).customTaskList = component; } diff --git a/astrid/src/com/todoroo/astrid/widget/WidgetConfigActivity.java b/astrid/src/com/todoroo/astrid/widget/WidgetConfigActivity.java index eb98f38b9..424574ee2 100644 --- a/astrid/src/com/todoroo/astrid/widget/WidgetConfigActivity.java +++ b/astrid/src/com/todoroo/astrid/widget/WidgetConfigActivity.java @@ -136,7 +136,7 @@ abstract public class WidgetConfigActivity extends ListActivity { String sql = null, contentValuesString = null, title = null; if(filterListItem != null && filterListItem instanceof Filter) { - sql = ((Filter)filterListItem).sqlQuery; + sql = ((Filter)filterListItem).getSqlQuery(); ContentValues values = ((Filter)filterListItem).valuesForNewTasks; if(values != null) contentValuesString = AndroidUtilities.contentValuesToSerializedString(values);