Added a category for completed tasks

pull/14/head
Tim Su 14 years ago
parent db599d81f8
commit feb6b828a5

@ -31,11 +31,11 @@ public class TagFilterExposer extends BroadcastReceiver {
private TagService tagService;
@SuppressWarnings("nls")
private Filter filterFromTag(Context context, Tag tag) {
private Filter filterFromTag(Context context, Tag tag, boolean completed) {
String listTitle = context.getString(R.string.tag_FEx_tag_w_size).
replace("$T", tag.tag).replace("$C", Integer.toString(tag.count));
String title = context.getString(R.string.tag_FEx_name, tag.tag);
QueryTemplate tagTemplate = tag.queryTemplate();
QueryTemplate tagTemplate = tag.queryTemplate(completed);
ContentValues contentValues = new ContentValues();
contentValues.put(Metadata.KEY.name, TagService.KEY);
contentValues.put(TagService.TAG.name, tag.tag);
@ -70,31 +70,44 @@ public class TagFilterExposer extends BroadcastReceiver {
Tag[] tagsBySize = tagService.getGroupedTags(TagService.GROUPED_TAGS_BY_SIZE);
Filter[] filtersByAlpha = new Filter[tagsByAlpha.length];
for(int i = 0; i < tagsByAlpha.length; i++)
filtersByAlpha[i] = filterFromTag(context, tagsByAlpha[i]);
filtersByAlpha[i] = filterFromTag(context, tagsByAlpha[i], false);
Filter[] filtersBySize = new Filter[tagsBySize.length];
for(int i = 0; i < tagsBySize.length; i++)
filtersBySize[i] = filterFromTag(context, tagsBySize[i]);
filtersBySize[i] = filterFromTag(context, tagsBySize[i], false);
Tag[] completed = tagService.getGroupedTags(TagService.GROUPED_TAGS_COMPLETED);
Filter[] filtersCompleted = new Filter[completed.length];
for(int i = 0; i < completed.length; i++)
filtersCompleted[i] = filterFromTag(context, completed[i], true);
FilterListHeader tagsHeader = new FilterListHeader(context.getString(R.string.tag_FEx_header));
Filter untagged = new Filter(r.getString(R.string.tag_FEx_untagged),
r.getString(R.string.tag_FEx_untagged),
tagService.untaggedTemplate(),
null);
untagged.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.filter_untagged)).getBitmap();
FilterCategory tagsCategoryBySize = new FilterCategory(context.getString(R.string.tag_FEx_by_size),
filtersBySize);
tagsCategoryBySize.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.filter_tags1)).getBitmap();
FilterCategory tagsCategoryByAlpha = new FilterCategory(context.getString(R.string.tag_FEx_alpha),
filtersByAlpha);
tagsCategoryByAlpha.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.filter_tags2)).getBitmap();
tagsCategoryByAlpha.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.filter_tags1)).getBitmap();
FilterCategory tagsCategoryCompleted = new FilterCategory(context.getString(R.string.tag_FEx_completed),
filtersCompleted);
tagsCategoryCompleted.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.filter_tags2)).getBitmap();
// transmit filter list
FilterListItem[] list = new FilterListItem[4];
FilterListItem[] list = new FilterListItem[5];
list[0] = tagsHeader;
list[1] = untagged;
list[2] = tagsCategoryBySize;
list[3] = tagsCategoryByAlpha;
list[4] = tagsCategoryCompleted;
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_FILTERS);
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, list);
context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);

@ -2,9 +2,9 @@ package com.todoroo.astrid.tags;
import java.util.ArrayList;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.data.Property.CountProperty;
import com.todoroo.andlib.data.Property.StringProperty;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.sql.Criterion;
@ -58,8 +58,12 @@ public final class TagService {
* Property for retrieving count of aggregated rows
*/
private static final CountProperty COUNT = new CountProperty();
public static final Order GROUPED_TAGS_BY_ALPHA = Order.asc(TAG);
public static final Order GROUPED_TAGS_BY_SIZE = Order.desc(COUNT);
public static final QueryTemplate GROUPED_TAGS_BY_ALPHA = new QueryTemplate().where(Criterion.and(TaskCriteria.isActive(), MetadataCriteria.withKey(KEY))).
orderBy(Order.asc(TAG));
public static final QueryTemplate GROUPED_TAGS_BY_SIZE = new QueryTemplate().where(Criterion.and(TaskCriteria.isActive(), MetadataCriteria.withKey(KEY))).
orderBy(Order.desc(COUNT));
public static final QueryTemplate GROUPED_TAGS_COMPLETED = new QueryTemplate().where(Criterion.and(TaskCriteria.completed(), MetadataCriteria.withKey(KEY))).
orderBy(Order.desc(COUNT));
/**
* Helper class for returning a tag/task count pair
@ -82,11 +86,12 @@ public final class TagService {
* @param tag
* @return
*/
public QueryTemplate queryTemplate() {
public QueryTemplate queryTemplate(boolean completed) {
Criterion activeStatus = completed ? TaskCriteria.completed() : TaskCriteria.isActive();
return new QueryTemplate().join(Join.inner(Metadata.TABLE,
Task.ID.eq(Metadata.TASK))).where(Criterion.and(
MetadataCriteria.withKey(KEY), TAG.eq(tag),
TaskCriteria.isActive()));
activeStatus));
}
}
@ -103,11 +108,10 @@ public final class TagService {
* @param taskId
* @return empty array if no tags, otherwise array
*/
public Tag[] getGroupedTags(Order order) {
public Tag[] getGroupedTags(QueryTemplate template) {
Query query = Query.select(TAG.as(TAG.name), COUNT).
join(Join.inner(Task.TABLE, Metadata.TASK.eq(Task.ID))).
where(Criterion.and(TaskCriteria.isActive(), MetadataCriteria.withKey(KEY))).
orderBy(order).groupBy(TAG);
withQueryTemplate(template.toString()).groupBy(TAG);
TodorooCursor<Metadata> cursor = metadataDao.query(query);
try {
Tag[] array = new Tag[cursor.getCount()];

@ -28,6 +28,9 @@
<!-- filter header for tags, sorted by name -->
<string name="tag_FEx_alpha">Alphabetical</string>
<!-- filter header for tags of completed tasks -->
<string name="tag_FEx_completed">Completed</string>
<!-- filter for untagged tasks -->
<string name="tag_FEx_untagged">Untagged</string>

Loading…
Cancel
Save