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

pull/14/head
Sam Bosley 13 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>
* </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.
@ -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

@ -106,7 +106,7 @@ public class GtasksListFragment extends SubtasksListFragment {
private void clearCompletedTasks() {
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);
pd.setMessage(this.getString(R.string.gtasks_GTA_clearing));
pd.show();

@ -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]);

@ -74,7 +74,7 @@ public class SubtasksUpdater extends OrderedListUpdater<String> {
protected void iterateThroughList(Filter filter, String list, OrderedListIterator iterator) {
TodorooCursor<Task> 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<Metadata> metadataCursor = new TodorooCursor<Metadata>(cursor.getCursor(),
cursor.getProperties());
Metadata metadata = new Metadata();
@ -91,7 +91,7 @@ public class SubtasksUpdater extends OrderedListUpdater<String> {
@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<String> {
query = query.replace(TaskCriteria.isVisible().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,
filter.title);
shortcutIntent.putExtra(ShortcutActivity.TOKEN_FILTER_SQL,
filter.sqlQuery);
filter.getSqlQuery());
if (filter.valuesForNewTasks != null) {
for (Entry<String, Object> item : filter.valuesForNewTasks.valueSet()) {
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) {
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();
}

@ -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<Task> currentCursor;

@ -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<Task> cursor = query(Query.select(Task.ID).withQueryTemplate(
queryTemplate));
try {

@ -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;
}

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

Loading…
Cancel
Save