From 509c6992513e42ad4904902982a91634262d1e80 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Wed, 11 Aug 2010 23:30:55 -0700 Subject: [PATCH] Custom filter activity prototype --- astrid/AndroidManifest.xml | 10 +- .../astrid/core/CoreFilterExposer.java | 92 ++----------------- .../todoroo/astrid/tags/TagFilterExposer.java | 44 +++------ astrid/res/values/strings-filters.xml | 30 ++++-- astrid/res/values/strings-tags.xml | 11 +-- .../astrid/activity/FilterListActivity.java | 2 +- .../com/todoroo/astrid/api/SearchFilter.java | 83 ----------------- 7 files changed, 53 insertions(+), 219 deletions(-) delete mode 100644 astrid/src/com/todoroo/astrid/api/SearchFilter.java diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml index e9aa1d671..6ab4063a1 100644 --- a/astrid/AndroidManifest.xml +++ b/astrid/AndroidManifest.xml @@ -164,15 +164,19 @@ - + + + + + + - - + diff --git a/astrid/plugin-src/com/todoroo/astrid/core/CoreFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/core/CoreFilterExposer.java index 0dfb33002..0232418f2 100644 --- a/astrid/plugin-src/com/todoroo/astrid/core/CoreFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/core/CoreFilterExposer.java @@ -3,8 +3,8 @@ */ package com.todoroo.astrid.core; +import android.app.PendingIntent; import android.content.BroadcastReceiver; -import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.content.res.Resources; @@ -12,17 +12,12 @@ import android.graphics.drawable.BitmapDrawable; import com.timsu.astrid.R; 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.andlib.utility.DateUtilities; import com.todoroo.astrid.activity.FilterListActivity; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.Filter; -import com.todoroo.astrid.api.FilterCategory; import com.todoroo.astrid.api.FilterListItem; -import com.todoroo.astrid.api.SearchFilter; import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.model.Metadata; @@ -44,89 +39,20 @@ public final class CoreFilterExposer extends BroadcastReceiver { // core filters Filter inbox = buildInboxFilter(r); - SearchFilter searchFilter = new SearchFilter(CorePlugin.IDENTIFIER, - r.getString(R.string.BFE_Search)); + SearchFilter searchFilter = new SearchFilter(r.getString(R.string.BFE_Search)); searchFilter.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.tango_search)).getBitmap(); - // extended - - FilterCategory extended = new FilterCategory(r.getString(R.string.BFE_Extended), - new Filter[7]); - - Filter recent = new Filter(r.getString(R.string.BFE_Recent), - r.getString(R.string.BFE_Recent), - new QueryTemplate().orderBy(Order.desc(Task.MODIFICATION_DATE)).limit(15), - null); - recent.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.tango_new)).getBitmap(); - - ContentValues hiddenValues = new ContentValues(); - hiddenValues.put(Task.HIDE_UNTIL.name, DateUtilities.now() + DateUtilities.ONE_DAY); - Filter hidden = new Filter(r.getString(R.string.BFE_Hidden), - r.getString(R.string.BFE_Hidden), - new QueryTemplate().where(Criterion.and(TaskCriteria.isActive(), - Criterion.not(TaskCriteria.isVisible()))). - orderBy(Order.asc(Task.HIDE_UNTIL)), - hiddenValues); - hidden.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.tango_clouds)).getBitmap(); - - ContentValues completedValues = new ContentValues(); - hiddenValues.put(Task.COMPLETION_DATE.name, DateUtilities.now()); - Filter completed = new Filter(r.getString(R.string.BFE_Completed), r.getString(R.string.BFE_Completed), - new QueryTemplate().where(Criterion.and(TaskCriteria.completed(), - Criterion.not(TaskCriteria.isDeleted()))). orderBy(Order.desc(Task.COMPLETION_DATE)), - completedValues); - completed.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.tango_check)).getBitmap(); - - Filter deleted = new Filter(r.getString(R.string.BFE_Deleted), - r.getString(R.string.BFE_Deleted), - new QueryTemplate().where(TaskCriteria.isDeleted()). - orderBy(Order.desc(Task.DELETION_DATE)), - null); - deleted.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.tango_trash)).getBitmap(); - - // sorting filters - - Filter alphabetical = new Filter(r.getString(R.string.BFE_Alphabetical), - r.getString(R.string.BFE_Alphabetical), - new QueryTemplate().where(Criterion.and(TaskCriteria.isActive(), - TaskCriteria.isVisible())). - orderBy(Order.asc(Functions.upper(Task.TITLE))), - null); - alphabetical.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.tango_alpha)).getBitmap(); - - Filter dueDate = new Filter(r.getString(R.string.BFE_DueDate), - r.getString(R.string.BFE_DueDate), - new QueryTemplate().where(Criterion.and(TaskCriteria.isActive(), - TaskCriteria.isVisible())). - orderBy(Order.asc(Functions.caseStatement(Task.DUE_DATE.eq(0), - DateUtilities.now()*2, Task.DUE_DATE) + "+" + Task.IMPORTANCE)), //$NON-NLS-1$ - null); - dueDate.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.tango_calendar)).getBitmap(); - - Filter importance = new Filter(r.getString(R.string.BFE_Importance), - r.getString(R.string.BFE_Importance), - new QueryTemplate().where(Criterion.and(TaskCriteria.isActive(), - TaskCriteria.isVisible())). - orderBy(Order.asc(Task.IMPORTANCE + "*" + (2*DateUtilities.now()) + //$NON-NLS-1$ - "+" + Functions.caseStatement(Task.DUE_DATE.eq(0), //$NON-NLS-1$ - Functions.now() + "+" + DateUtilities.ONE_WEEK, //$NON-NLS-1$ - Task.DUE_DATE))), - null); - importance.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.tango_warning)).getBitmap(); - - extended.children[0] = recent; - extended.children[1] = hidden; - extended.children[2] = completed; - extended.children[3] = deleted; - extended.children[4] = alphabetical; - extended.children[5] = dueDate; - extended.children[6] = importance; + PendingIntent customFilterIntent = PendingIntent.getActivity(context, 0, + new Intent(context, CustomFilterActivity.class), 0); + IntentFilter customFilter = new IntentFilter(r.getString(R.string.BFE_Custom), + customFilterIntent); + customFilter.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.gnome_filter)).getBitmap(); // transmit filter list FilterListItem[] list = new FilterListItem[3]; list[0] = inbox; list[1] = searchFilter; - list[2] = extended; + list[2] = customFilter; Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_FILTERS); broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, list); context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); @@ -137,7 +63,7 @@ public final class CoreFilterExposer extends BroadcastReceiver { * @return */ 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), new QueryTemplate().where( Criterion.and(TaskCriteria.isActive(), TaskCriteria.isVisible(), Criterion.not(Task.ID.in(Query.select(Metadata.TASK).from(Metadata.TABLE).where( diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java index 7d2276fcc..4710a7e8b 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java @@ -32,10 +32,8 @@ public class TagFilterExposer extends BroadcastReceiver { private TagService tagService; - @SuppressWarnings("nls") private Filter filterFromTag(Context context, Tag tag, Criterion criterion) { - String listTitle = context.getString(R.string.tag_FEx_tag_w_size). - replace("$T", tag.tag).replace("$C", Integer.toString(tag.count)); + String listTitle = tag.tag; String title = context.getString(R.string.tag_FEx_name, tag.tag); QueryTemplate tagTemplate = tag.queryTemplate(criterion); ContentValues contentValues = new ContentValues(); @@ -61,55 +59,35 @@ public class TagFilterExposer extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { tagService = TagService.getInstance(); - Tag[] tagsByAlpha = tagService.getGroupedTags(TagService.GROUPED_TAGS_BY_ALPHA, TaskCriteria.notDeleted()); + Tag[] tags = tagService.getGroupedTags(TagService.GROUPED_TAGS_BY_SIZE, TaskCriteria.notDeleted()); // If user does not have any tags, don't show this section at all - if(tagsByAlpha.length == 0) + if(tags.length == 0) return; Resources r = context.getResources(); - Filter[] filtersByAlpha = new Filter[tagsByAlpha.length]; - for(int i = 0; i < tagsByAlpha.length; i++) - 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]; - for(int i = 0; i < tagsBySize.length; i++) - filtersBySize[i] = filterFromTag(context, tagsBySize[i], TaskCriteria.isActive()); - - Tag[] completed = tagService.getGroupedTags(TagService.GROUPED_TAGS_BY_SIZE, TaskCriteria.completed()); - Filter[] filtersCompleted = new Filter[completed.length]; - for(int i = 0; i < completed.length; i++) - filtersCompleted[i] = filterFromTag(context, completed[i], TaskCriteria.completed()); + FilterListItem[] list = new FilterListItem[3]; FilterListHeader tagsHeader = new FilterListHeader(context.getString(R.string.tag_FEx_header)); + list[0] = tagsHeader; 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(); + list[1] = untagged; - FilterCategory tagsCategoryBySize = new FilterCategory(context.getString(R.string.tag_FEx_by_size), - filtersBySize); - tagsCategoryBySize.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.filter_tags1)).getBitmap(); - FilterCategory tagsCategoryAllByAlpha = new FilterCategory(context.getString(R.string.tag_FEx_alpha), - filtersByAlpha); - tagsCategoryAllByAlpha.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.filter_tags1)).getBitmap(); + Filter[] filters = new Filter[tags.length]; + for(int i = 0; i < tags.length; i++) + filters[i] = filterFromTag(context, tags[i], TaskCriteria.isActive()); + FilterCategory tagsFilter = new FilterCategory(context.getString(R.string.tag_FEx_by_size), filters); + list[2] = tagsFilter; - 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[5]; - list[0] = tagsHeader; - list[1] = untagged; - list[2] = tagsCategoryBySize; - list[3] = tagsCategoryCompleted; - list[4] = tagsCategoryAllByAlpha; Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_FILTERS); broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, list); context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); diff --git a/astrid/res/values/strings-filters.xml b/astrid/res/values/strings-filters.xml index 1261dbcdc..c60a0b8e4 100644 --- a/astrid/res/values/strings-filters.xml +++ b/astrid/res/values/strings-filters.xml @@ -4,17 +4,35 @@ + + Active Tasks - - Active Tasks - - Search + Search... + + + Custom Filter... + + + + + Custom Filter + + + Filter Name + + + New Filter + + + Copy of %s + + + All Tasks - - More... + Recently Modified diff --git a/astrid/res/values/strings-tags.xml b/astrid/res/values/strings-tags.xml index 5bb965056..2712e57e4 100644 --- a/astrid/res/values/strings-tags.xml +++ b/astrid/res/values/strings-tags.xml @@ -23,20 +23,11 @@ Tags - Active - - - Completed - - - All Tags + Sorted By Size Untagged - - $T ($C) - Tagged \'%s\' diff --git a/astrid/src/com/todoroo/astrid/activity/FilterListActivity.java b/astrid/src/com/todoroo/astrid/activity/FilterListActivity.java index 4d9f5c47e..3318b64d0 100644 --- a/astrid/src/com/todoroo/astrid/activity/FilterListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/FilterListActivity.java @@ -42,7 +42,7 @@ import com.todoroo.astrid.adapter.FilterAdapter; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.FilterCategory; import com.todoroo.astrid.api.FilterListItem; -import com.todoroo.astrid.api.SearchFilter; +import com.todoroo.astrid.core.SearchFilter; import com.todoroo.astrid.model.Task; import com.todoroo.astrid.service.StartupService; import com.todoroo.astrid.utility.Constants; diff --git a/astrid/src/com/todoroo/astrid/api/SearchFilter.java b/astrid/src/com/todoroo/astrid/api/SearchFilter.java deleted file mode 100644 index 3a2081d35..000000000 --- a/astrid/src/com/todoroo/astrid/api/SearchFilter.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.todoroo.astrid.api; - -import android.os.Parcel; -import android.os.Parcelable; - -/** - * Special filter that triggers the search functionality when accessed. - * - * @author Tim Su - * - */ -public class SearchFilter extends FilterListItem { - - /** - * Plug-in Identifier - */ - public final String plugin; - - /** - * Constructor for creating a new SearchFilter - * - * @param plugin - * {@link Addon} identifier that encompasses object - * @param listingTitle - * Title of this item as displayed on the lists page, e.g. Inbox - */ - public SearchFilter(String plugin, String listingTitle) { - this.plugin = plugin; - this.listingTitle = listingTitle; - } - - /** - * Constructor for creating a new SearchFilter - * - * @param plugin - * {@link Addon} identifier that encompasses object - */ - protected SearchFilter(String plugin) { - this.plugin = plugin; - } - - // --- parcelable - - /** - * {@inheritDoc} - */ - public int describeContents() { - return 0; - } - - /** - * {@inheritDoc} - */ - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeString(plugin); - super.writeToParcel(dest, flags); - } - - /** - * Parcelable creator - */ - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { - - /** - * {@inheritDoc} - */ - public SearchFilter createFromParcel(Parcel source) { - SearchFilter item = new SearchFilter(source.readString()); - item.readFromParcel(source); - return item; - } - - /** - * {@inheritDoc} - */ - public SearchFilter[] newArray(int size) { - return new SearchFilter[size]; - } - - }; - -}