/** Recalculate all sizes */ void updateList() { int max = 0, last = -1; StringBuilder sql = new StringBuilder(Query.select(new CountProperty()).from(Task.TABLE).toString()) .append(" WHERE "); for (int i = 0; i < adapter.getCount(); i++) { CriterionInstance instance = adapter.getItem(i); String value = instance.getValueFromCriterion(); if (value == null && instance.criterion.sql != null && instance.criterion.sql.contains("?")) { value = ""; } switch (instance.type) { case CriterionInstance.TYPE_ADD: sql.append("OR "); break; case CriterionInstance.TYPE_SUBTRACT: sql.append("AND NOT "); break; case CriterionInstance.TYPE_INTERSECT: sql.append("AND "); break; case CriterionInstance.TYPE_UNIVERSE: } // special code for all tasks universe if (instance.criterion.sql == null) { sql.append(TaskCriteria.activeAndVisible()).append(' '); } else { String subSql = instance.criterion.sql.replace("?", UnaryCriterion.sanitize(value)); subSql = PermaSql.replacePlaceholders(subSql); sql.append(Task.ID).append(" IN (").append(subSql).append(") "); } Cursor cursor = database.rawQuery(sql.toString()); try { cursor.moveToNext(); instance.start = last == -1 ? cursor.getInt(0) : last; instance.end = cursor.getInt(0); last = instance.end; max = Math.max(max, last); } finally { cursor.close(); } } for (int i = 0; i < adapter.getCount(); i++) { CriterionInstance instance = adapter.getItem(i); instance.max = max; } adapter.notifyDataSetInvalidated(); }
void saveAndView() { String title = filterName.getText().toString().trim(); if (isEmpty(title)) { return; } StringBuilder sql = new StringBuilder(" WHERE "); ContentValues values = new ContentValues(); for (int i = 0; i < adapter.getCount(); i++) { CriterionInstance instance = adapter.getItem(i); String value = instance.getValueFromCriterion(); if (value == null && instance.criterion.sql != null && instance.criterion.sql.contains("?")) { value = ""; } switch (instance.type) { case CriterionInstance.TYPE_ADD: sql.append("OR "); break; case CriterionInstance.TYPE_SUBTRACT: sql.append("AND NOT "); break; case CriterionInstance.TYPE_INTERSECT: sql.append("AND "); break; case CriterionInstance.TYPE_UNIVERSE: } // special code for all tasks universe if (instance.criterion.sql == null) { sql.append(TaskCriteria.activeAndVisible()).append(' '); } else { String subSql = instance.criterion.sql.replace("?", UnaryCriterion.sanitize(value)); sql.append(Task.ID).append(" IN (").append(subSql).append(") "); } if (instance.criterion.valuesForNewTasks != null && instance.type == CriterionInstance.TYPE_INTERSECT) { for (Entry<String, Object> entry : instance.criterion.valuesForNewTasks.valueSet()) { values.put( entry.getKey().replace("?", value), entry.getValue().toString().replace("?", value)); } } } StoreObject storeObject = SavedFilter.persist(storeObjectDao, adapter, title, sql.toString(), values); Filter filter = new CustomFilter(title, sql.toString(), values, storeObject.getId()); setResult(RESULT_OK, new Intent().putExtra(TagSettingsActivity.TOKEN_NEW_FILTER, filter)); finish(); }