package com.todoroo.astrid.tags.reusable; import java.util.List; import android.content.ComponentName; import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.os.Bundle; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Functions; import com.todoroo.andlib.sql.Order; import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.astrid.actfm.TagViewFragment; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.FilterListItem; import com.todoroo.astrid.api.FilterWithCustomIntent; import com.todoroo.astrid.api.FilterWithUpdate; import com.todoroo.astrid.core.PluginServices; import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.tags.TagFilterExposer; import com.todoroo.astrid.tags.TagService; import com.todoroo.astrid.tags.TagService.Tag; import com.todoroo.astrid.tags.TaskToTagMetadata; public class FeaturedListFilterExposer extends TagFilterExposer { public static final String PREF_SHOULD_SHOW_FEATURED_LISTS = "show_featured_lists"; //$NON-NLS-1$ @Override public void onReceive(Context context, Intent intent) { addUntaggedFilter = false; FilterListItem[] listAsArray = prepareFilters(context); Intent broadcastIntent = new Intent(FeaturedListFilterAdapter.BROADCAST_SEND_FEATURED_LISTS); broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, listAsArray); context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); } private static FilterWithCustomIntent filterFromFeaturedList(Tag tag, Criterion criterion) { String title = tag.tag; QueryTemplate tagTemplate = tag.queryTemplate(criterion); ContentValues contentValues = new ContentValues(); contentValues.put(Metadata.KEY.name, TaskToTagMetadata.KEY); contentValues.put(TaskToTagMetadata.TAG_NAME.name, tag.tag); contentValues.put(TaskToTagMetadata.TAG_UUID.name, tag.uuid.toString()); FilterWithUpdate filter = new FilterWithUpdate(tag.tag, title, tagTemplate, contentValues); Class<?> fragmentClass = FeaturedTaskListFragment.class; filter.customTaskList = new ComponentName(ContextManager.getContext(), fragmentClass); if(tag.image != null) filter.imageUrl = tag.image; Bundle extras = new Bundle(); extras.putString(TagViewFragment.EXTRA_TAG_NAME, tag.tag); extras.putString(TagViewFragment.EXTRA_TAG_UUID, tag.uuid.toString()); filter.customExtras = extras; return filter; } public static Filter getDefaultFilter() { TodorooCursor<TagData> firstFilter = PluginServices.getTagDataService() .query(Query.select(TagData.PROPERTIES) .where(Criterion.and( Functions.bitwiseAnd(TagData.FLAGS, TagData.FLAG_FEATURED).gt(0), TagData.DELETION_DATE.eq(0), TagData.NAME.isNotNull(), TagData.NAME.neq(""))) //$NON-NLS-1$ .orderBy(Order.asc(TagData.NAME)) .limit(1)); try { if (firstFilter.getCount() > 0) { firstFilter.moveToFirst(); TagData tagData = new TagData(firstFilter); Tag tag = new Tag(tagData); return filterFromFeaturedList(tag, TaskCriteria.activeAndVisible()); } else { return null; } } finally { firstFilter.close(); } } @Override protected Filter constructFilter(Context context, Tag tag) { return filterFromFeaturedList(tag, TaskCriteria.activeAndVisible()); } @Override protected List<Tag> getTagList() { return TagService.getInstance().getFeaturedLists(); } }