Introduced an adjustedSqlQuery field to Filter objects so that subtasks won't break equality checking

pull/14/head
Sam Bosley 14 years ago
parent af9345c057
commit 056cbe5497

@ -54,7 +54,13 @@ public class Filter extends FilterListItem {
* metadata.value = 'b' GROUP BY tasks.id ORDER BY tasks.title"</code> * metadata.value = 'b' GROUP BY tasks.id ORDER BY tasks.title"</code>
* </ul> * </ul>
*/ */
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. * 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.listingTitle = listingTitle;
this.title = title; this.title = title;
this.sqlQuery = sqlQuery; this.sqlQuery = sqlQuery;
this.adjustedSqlQuery = null;
this.valuesForNewTasks = valuesForNewTasks; 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 * Utility constructor

@ -106,7 +106,7 @@ public class GtasksListFragment extends SubtasksListFragment {
private void clearCompletedTasks() { private void clearCompletedTasks() {
final ProgressDialog pd = new ProgressDialog(getActivity()); final ProgressDialog pd = new ProgressDialog(getActivity());
final TodorooCursor<Task> tasks = taskService.fetchFiltered(filter.sqlQuery, final TodorooCursor<Task> tasks = taskService.fetchFiltered(filter.getSqlQuery(),
null, Task.ID, Task.COMPLETION_DATE); null, Task.ID, Task.COMPLETION_DATE);
pd.setMessage(this.getString(R.string.gtasks_GTA_clearing)); pd.setMessage(this.getString(R.string.gtasks_GTA_clearing));
pd.show(); pd.show();

@ -162,14 +162,14 @@ public final class LocaleEditAlerts extends ListActivity {
if(adapter.getSelection() != null || finalSelection == null) if(adapter.getSelection() != null || finalSelection == null)
return; return;
if(item instanceof Filter) { if(item instanceof Filter) {
if(finalSelection.equals(((Filter)item).sqlQuery)) if(finalSelection.equals(((Filter)item).getSqlQuery()))
adapter.setSelection(item); adapter.setSelection(item);
} else if(item instanceof FilterCategory) { } else if(item instanceof FilterCategory) {
Filter[] filters = ((FilterCategory)item).children; Filter[] filters = ((FilterCategory)item).children;
if(filters == null) if(filters == null)
return; return;
for(Filter filter : filters) for(Filter filter : filters)
if(finalSelection.equals(filter.sqlQuery)) { if(finalSelection.equals(filter.getSqlQuery())) {
adapter.setSelection(filter); adapter.setSelection(filter);
break; break;
} }
@ -242,7 +242,7 @@ public final class LocaleEditAlerts extends ListActivity {
Filter filterItem = (Filter) selected; Filter filterItem = (Filter) selected;
storeAndForwardExtras.putString(KEY_FILTER_TITLE, filterItem.title); storeAndForwardExtras.putString(KEY_FILTER_TITLE, filterItem.title);
storeAndForwardExtras.putString(KEY_SQL, filterItem.sqlQuery); storeAndForwardExtras.putString(KEY_SQL, filterItem.getSqlQuery());
if(filterItem.valuesForNewTasks != null) if(filterItem.valuesForNewTasks != null)
storeAndForwardExtras.putString(KEY_VALUES, AndroidUtilities.contentValuesToSerializedString(filterItem.valuesForNewTasks)); storeAndForwardExtras.putString(KEY_VALUES, AndroidUtilities.contentValuesToSerializedString(filterItem.valuesForNewTasks));
storeAndForwardExtras.putInt(KEY_INTERVAL, INTERVALS[intervalIndex]); storeAndForwardExtras.putInt(KEY_INTERVAL, INTERVALS[intervalIndex]);

@ -74,7 +74,7 @@ public class SubtasksUpdater extends OrderedListUpdater<String> {
protected void iterateThroughList(Filter filter, String list, OrderedListIterator iterator) { protected void iterateThroughList(Filter filter, String list, OrderedListIterator iterator) {
TodorooCursor<Task> cursor = taskService.query(Query.select(Task.ID, TodorooCursor<Task> cursor = taskService.query(Query.select(Task.ID,
Metadata.ID.as(METADATA_ID), Metadata.TASK, Metadata.KEY, SubtasksMetadata.INDENT, Metadata.ID.as(METADATA_ID), Metadata.TASK, Metadata.KEY, SubtasksMetadata.INDENT,
SubtasksMetadata.ORDER).withQueryTemplate(filter.sqlQuery)); SubtasksMetadata.ORDER).withQueryTemplate(filter.getSqlQuery()));
TodorooCursor<Metadata> metadataCursor = new TodorooCursor<Metadata>(cursor.getCursor(), TodorooCursor<Metadata> metadataCursor = new TodorooCursor<Metadata>(cursor.getCursor(),
cursor.getProperties()); cursor.getProperties());
Metadata metadata = new Metadata(); Metadata metadata = new Metadata();
@ -91,7 +91,7 @@ public class SubtasksUpdater extends OrderedListUpdater<String> {
@SuppressWarnings("nls") @SuppressWarnings("nls")
public void applySubtasksToFilter(Filter filter, String tagName) { public void applySubtasksToFilter(Filter filter, String tagName) {
String query = filter.sqlQuery; String query = filter.getSqlQuery();
if(tagName == null) if(tagName == null)
tagName = SubtasksMetadata.LIST_ACTIVE_TASKS; tagName = SubtasksMetadata.LIST_ACTIVE_TASKS;
@ -109,7 +109,7 @@ public class SubtasksUpdater extends OrderedListUpdater<String> {
query = query.replace(TaskCriteria.isVisible().toString(), query = query.replace(TaskCriteria.isVisible().toString(),
Criterion.all.toString()); Criterion.all.toString());
filter.sqlQuery = query; filter.setAdjustedSqlQuery(query);
} }
} }

@ -161,7 +161,7 @@ public class ShortcutActivity extends Activity {
shortcutIntent.putExtra(ShortcutActivity.TOKEN_FILTER_TITLE, shortcutIntent.putExtra(ShortcutActivity.TOKEN_FILTER_TITLE,
filter.title); filter.title);
shortcutIntent.putExtra(ShortcutActivity.TOKEN_FILTER_SQL, shortcutIntent.putExtra(ShortcutActivity.TOKEN_FILTER_SQL,
filter.sqlQuery); filter.getSqlQuery());
if (filter.valuesForNewTasks != null) { if (filter.valuesForNewTasks != null) {
for (Entry<String, Object> item : filter.valuesForNewTasks.valueSet()) { for (Entry<String, Object> item : filter.valuesForNewTasks.valueSet()) {
String key = TOKEN_FILTER_VALUES_ITEM + item.getKey(); String key = TOKEN_FILTER_VALUES_ITEM + item.getKey();

@ -208,6 +208,7 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
public void setupTasklistFragmentWithFilterAndCustomTaskList(Filter filter, Bundle extras, Class<?> customTaskList) { public void setupTasklistFragmentWithFilterAndCustomTaskList(Filter filter, Bundle extras, Class<?> customTaskList) {
if (fragmentLayout == LAYOUT_SINGLE) { if (fragmentLayout == LAYOUT_SINGLE) {
tlfPager.showFilterWithCustomTaskList(filter, customTaskList); tlfPager.showFilterWithCustomTaskList(filter, customTaskList);
tlfPager.setAdapter(tlfPagerAdapter); // Hack to force reload of current page
} else { } else {
super.setupTasklistFragmentWithFilterAndCustomTaskList(filter, extras, customTaskList); super.setupTasklistFragmentWithFilterAndCustomTaskList(filter, extras, customTaskList);
} }
@ -640,7 +641,7 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
Filter currentlyShowing = getIntent().getParcelableExtra(TaskListFragment.TOKEN_FILTER); Filter currentlyShowing = getIntent().getParcelableExtra(TaskListFragment.TOKEN_FILTER);
if (currentlyShowing != null) { if (currentlyShowing != null) {
boolean titlesMatch = currentlyShowing.title != null && currentlyShowing.title.equals(deletedTag); 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) if (titlesMatch && sqlMatches)
fl.switchToActiveTasks(); fl.switchToActiveTasks();
} }

@ -855,7 +855,7 @@ public class TaskListFragment extends ListFragment implements OnScrollListener,
return; return;
sqlQueryTemplate.set(SortHelper.adjustQueryForFlagsAndSort( sqlQueryTemplate.set(SortHelper.adjustQueryForFlagsAndSort(
filter.sqlQuery, sortFlags, sortSort)); filter.getSqlQuery(), sortFlags, sortSort));
// perform query // perform query
TodorooCursor<Task> currentCursor; TodorooCursor<Task> currentCursor;

@ -328,7 +328,7 @@ public class TaskService {
/** count tasks in a given filter */ /** count tasks in a given filter */
public int countTasks(Filter filter) { public int countTasks(Filter filter) {
String queryTemplate = PermaSql.replacePlaceholders(filter.sqlQuery); String queryTemplate = PermaSql.replacePlaceholders(filter.getSqlQuery());
TodorooCursor<Task> cursor = query(Query.select(Task.ID).withQueryTemplate( TodorooCursor<Task> cursor = query(Query.select(Task.ID).withQueryTemplate(
queryTemplate)); queryTemplate));
try { try {

@ -160,7 +160,7 @@ public class TasksWidget extends AppWidgetProvider {
int flags = publicPrefs.getInt(SortHelper.PREF_SORT_FLAGS, 0); int flags = publicPrefs.getInt(SortHelper.PREF_SORT_FLAGS, 0);
int sort = publicPrefs.getInt(SortHelper.PREF_SORT_SORT, 0); int sort = publicPrefs.getInt(SortHelper.PREF_SORT_SORT, 0);
String query = SortHelper.adjustQueryForFlagsAndSort( String query = SortHelper.adjustQueryForFlagsAndSort(
filter.sqlQuery, flags, sort).replaceAll("LIMIT \\d+", "") + " LIMIT " + numberOfTasks; filter.getSqlQuery(), flags, sort).replaceAll("LIMIT \\d+", "") + " LIMIT " + numberOfTasks;
database.openForReading(); database.openForReading();
cursor = taskService.fetchFiltered(query, null, Task.ID, Task.TITLE, Task.DUE_DATE, Task.COMPLETION_DATE); 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); listIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
if(filter != null) { if(filter != null) {
listIntent.putExtra(TaskListFragment.TOKEN_FILTER, filter); listIntent.putExtra(TaskListFragment.TOKEN_FILTER, filter);
listIntent.setAction("L" + widgetId + filter.sqlQuery); listIntent.setAction("L" + widgetId + filter.getSqlQuery());
} else { } else {
listIntent.setAction("L" + widgetId); listIntent.setAction("L" + widgetId);
} }
@ -332,7 +332,7 @@ public class TasksWidget extends AppWidgetProvider {
Filter filter = CoreFilterExposer.buildInboxFilter(getResources()); Filter filter = CoreFilterExposer.buildInboxFilter(getResources());
String sql = Preferences.getStringValue(WidgetConfigActivity.PREF_SQL + widgetId); String sql = Preferences.getStringValue(WidgetConfigActivity.PREF_SQL + widgetId);
if(sql != null) if(sql != null)
filter.sqlQuery = sql; filter.setSqlQuery(sql);
String title = Preferences.getStringValue(WidgetConfigActivity.PREF_TITLE + widgetId); String title = Preferences.getStringValue(WidgetConfigActivity.PREF_TITLE + widgetId);
if(title != null) if(title != null)
filter.title = title; filter.title = title;
@ -344,7 +344,7 @@ public class TasksWidget extends AppWidgetProvider {
+ widgetId); + widgetId);
if (customComponent != null) { if (customComponent != null) {
ComponentName component = ComponentName.unflattenFromString(customComponent); 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; ((FilterWithCustomIntent) filter).customTaskList = component;
} }

@ -136,7 +136,7 @@ abstract public class WidgetConfigActivity extends ListActivity {
String sql = null, contentValuesString = null, title = null; String sql = null, contentValuesString = null, title = null;
if(filterListItem != null && filterListItem instanceof Filter) { if(filterListItem != null && filterListItem instanceof Filter) {
sql = ((Filter)filterListItem).sqlQuery; sql = ((Filter)filterListItem).getSqlQuery();
ContentValues values = ((Filter)filterListItem).valuesForNewTasks; ContentValues values = ((Filter)filterListItem).valuesForNewTasks;
if(values != null) if(values != null)
contentValuesString = AndroidUtilities.contentValuesToSerializedString(values); contentValuesString = AndroidUtilities.contentValuesToSerializedString(values);

Loading…
Cancel
Save