Interim fix for AST-135 - tags with underscore in the beginning are hidden again.

pull/14/head
Tim Su 14 years ago
parent 5bb82d518f
commit e01e417611

@ -61,6 +61,11 @@ public class Field extends DBObject<Field> {
return UnaryCriterion.like(this, value); return UnaryCriterion.like(this, value);
} }
public Criterion like(String value, String escape) {
return UnaryCriterion.like(this, value, escape);
}
public <T> Criterion in(final T... value) { public <T> Criterion in(final T... value) {
final Field field = this; final Field field = this;
return new Criterion(Operator.in) { return new Criterion(Operator.in) {

@ -89,4 +89,19 @@ public class UnaryCriterion extends Criterion {
} }
}; };
} }
public static Criterion like(Field field, String value, final String escape) {
return new UnaryCriterion(field, Operator.like, value) {
@Override
protected void populateOperator(StringBuilder sb) {
sb.append(SPACE).append(operator).append(SPACE);
}
@SuppressWarnings("nls")
@Override
protected void afterPopulateOperator(StringBuilder sb) {
super.afterPopulateOperator(sb);
sb.append(SPACE).append("ESCAPE").append(" '").append(sanitize(escape)).append("'");
}
};
}
} }

@ -14,6 +14,7 @@ import com.timsu.astrid.R;
import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Functions; import com.todoroo.andlib.sql.Functions;
import com.todoroo.andlib.sql.Order; import com.todoroo.andlib.sql.Order;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.activity.FilterListActivity; import com.todoroo.astrid.activity.FilterListActivity;
@ -22,8 +23,11 @@ import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterCategory; import com.todoroo.astrid.api.FilterCategory;
import com.todoroo.astrid.api.FilterListItem; import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.api.SearchFilter; import com.todoroo.astrid.api.SearchFilter;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.model.Metadata;
import com.todoroo.astrid.model.Task; import com.todoroo.astrid.model.Task;
import com.todoroo.astrid.tags.TagService;
/** /**
* Exposes Astrid's built in filters to the {@link FilterListActivity} * Exposes Astrid's built in filters to the {@link FilterListActivity}
@ -134,8 +138,11 @@ public final class CoreFilterExposer extends BroadcastReceiver {
*/ */
public static Filter buildInboxFilter(Resources r) { public static Filter buildInboxFilter(Resources r) {
Filter inbox = new Filter(r.getString(R.string.BFE_Active), r.getString(R.string.BFE_Active_title), Filter inbox = new Filter(r.getString(R.string.BFE_Active), r.getString(R.string.BFE_Active_title),
new QueryTemplate().where(Criterion.and(TaskCriteria.isActive(), new QueryTemplate().where(
TaskCriteria.isVisible())), Criterion.and(TaskCriteria.isActive(), TaskCriteria.isVisible(),
Criterion.not(Task.ID.in(Query.select(Metadata.TASK).from(Metadata.TABLE).where(
Criterion.and(MetadataCriteria.withKey(TagService.KEY),
TagService.TAG.like("x_%", "x"))))))), //$NON-NLS-1$ //$NON-NLS-2$
null); null);
inbox.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.tango_home)).getBitmap(); inbox.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.tango_home)).getBitmap();
return inbox; return inbox;

@ -33,11 +33,11 @@ public class TagFilterExposer extends BroadcastReceiver {
private TagService tagService; private TagService tagService;
@SuppressWarnings("nls") @SuppressWarnings("nls")
private Filter filterFromTag(Context context, Tag tag, boolean completed) { private Filter filterFromTag(Context context, Tag tag, Criterion criterion) {
String listTitle = context.getString(R.string.tag_FEx_tag_w_size). String listTitle = context.getString(R.string.tag_FEx_tag_w_size).
replace("$T", tag.tag).replace("$C", Integer.toString(tag.count)); replace("$T", tag.tag).replace("$C", Integer.toString(tag.count));
String title = context.getString(R.string.tag_FEx_name, tag.tag); String title = context.getString(R.string.tag_FEx_name, tag.tag);
QueryTemplate tagTemplate = tag.queryTemplate(completed); QueryTemplate tagTemplate = tag.queryTemplate(criterion);
ContentValues contentValues = new ContentValues(); ContentValues contentValues = new ContentValues();
contentValues.put(Metadata.KEY.name, TagService.KEY); contentValues.put(Metadata.KEY.name, TagService.KEY);
contentValues.put(TagService.TAG.name, tag.tag); contentValues.put(TagService.TAG.name, tag.tag);
@ -61,7 +61,7 @@ public class TagFilterExposer extends BroadcastReceiver {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
tagService = TagService.getInstance(); tagService = TagService.getInstance();
Tag[] tagsByAlpha = tagService.getGroupedTags(TagService.GROUPED_TAGS_BY_ALPHA, Criterion.all); Tag[] tagsByAlpha = tagService.getGroupedTags(TagService.GROUPED_TAGS_BY_ALPHA, TaskCriteria.notDeleted());
// If user does not have any tags, don't show this section at all // If user does not have any tags, don't show this section at all
if(tagsByAlpha.length == 0) if(tagsByAlpha.length == 0)
@ -69,19 +69,19 @@ public class TagFilterExposer extends BroadcastReceiver {
Resources r = context.getResources(); Resources r = context.getResources();
Tag[] tagsBySize = tagService.getGroupedTags(TagService.GROUPED_TAGS_BY_SIZE, TaskCriteria.isActive());
Filter[] filtersByAlpha = new Filter[tagsByAlpha.length]; Filter[] filtersByAlpha = new Filter[tagsByAlpha.length];
for(int i = 0; i < tagsByAlpha.length; i++) for(int i = 0; i < tagsByAlpha.length; i++)
filtersByAlpha[i] = filterFromTag(context, tagsByAlpha[i], false); filtersByAlpha[i] = filterFromTag(context, tagsByAlpha[i], TaskCriteria.notDeleted());
Tag[] tagsBySize = tagService.getGroupedTags(TagService.GROUPED_TAGS_BY_SIZE, TaskCriteria.isActive());
Filter[] filtersBySize = new Filter[tagsBySize.length]; Filter[] filtersBySize = new Filter[tagsBySize.length];
for(int i = 0; i < tagsBySize.length; i++) for(int i = 0; i < tagsBySize.length; i++)
filtersBySize[i] = filterFromTag(context, tagsBySize[i], false); filtersBySize[i] = filterFromTag(context, tagsBySize[i], TaskCriteria.isActive());
Tag[] completed = tagService.getGroupedTags(TagService.GROUPED_TAGS_BY_SIZE, TaskCriteria.completed()); Tag[] completed = tagService.getGroupedTags(TagService.GROUPED_TAGS_BY_SIZE, TaskCriteria.completed());
Filter[] filtersCompleted = new Filter[completed.length]; Filter[] filtersCompleted = new Filter[completed.length];
for(int i = 0; i < completed.length; i++) for(int i = 0; i < completed.length; i++)
filtersCompleted[i] = filterFromTag(context, completed[i], true); filtersCompleted[i] = filterFromTag(context, completed[i], TaskCriteria.completed());
FilterListHeader tagsHeader = new FilterListHeader(context.getString(R.string.tag_FEx_header)); FilterListHeader tagsHeader = new FilterListHeader(context.getString(R.string.tag_FEx_header));

@ -2,9 +2,9 @@ package com.todoroo.astrid.tags;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.data.Property.CountProperty; import com.todoroo.andlib.data.Property.CountProperty;
import com.todoroo.andlib.data.Property.StringProperty; import com.todoroo.andlib.data.Property.StringProperty;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Criterion;
@ -82,12 +82,11 @@ public final class TagService {
* @param tag * @param tag
* @return * @return
*/ */
public QueryTemplate queryTemplate(boolean completed) { public QueryTemplate queryTemplate(Criterion criterion) {
Criterion activeStatus = completed ? TaskCriteria.completed() : TaskCriteria.isActive();
return new QueryTemplate().join(Join.inner(Metadata.TABLE, return new QueryTemplate().join(Join.inner(Metadata.TABLE,
Task.ID.eq(Metadata.TASK))).where(Criterion.and( Task.ID.eq(Metadata.TASK))).where(Criterion.and(
MetadataCriteria.withKey(KEY), TAG.eq(tag), MetadataCriteria.withKey(KEY), TAG.eq(tag),
activeStatus)); criterion));
} }
} }

@ -63,6 +63,11 @@ public class TaskDao extends GenericDao<Task> {
return Task.DELETION_DATE.neq(0); return Task.DELETION_DATE.neq(0);
} }
/** @return tasks that were not deleted */
public static Criterion notDeleted() {
return Task.DELETION_DATE.eq(0);
}
/** @return tasks that have not yet been completed or deleted */ /** @return tasks that have not yet been completed or deleted */
public static Criterion isActive() { public static Criterion isActive() {
return Criterion.and(Task.COMPLETION_DATE.eq(0), return Criterion.and(Task.COMPLETION_DATE.eq(0),

Loading…
Cancel
Save