From fffc9f4a46cc87668a325a6376a7de687e441436 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Tue, 29 Jun 2010 17:46:55 -0700 Subject: [PATCH] Fot filters working, with icons even. sweet action. --- astrid/AndroidManifest.xml | 369 +++++++++--------- .../com/todoroo/andlib/sql/Query.java | 28 +- .../com/todoroo/astrid/alarms/Alarm.java | 4 +- .../astrid/filters/CoreFilterExposer.java | 30 +- .../todoroo/astrid/filters/CorePlugin.java | 1 - .../astrid/filters/ExtendedFilterExposer.java | 38 +- .../astrid/filters/ExtendedPlugin.java | 1 - .../todoroo/astrid/tags/DetailExposer.java | 50 +++ .../todoroo/astrid/tags/FilterExposer.java | 38 +- .../com/todoroo/astrid/tags/TagService.java | 28 +- .../com/todoroo/astrid/tags/TagsPlugin.java | 24 ++ astrid/res/drawable/filter_all.png | Bin 0 -> 390 bytes astrid/res/drawable/filter_alpha.png | Bin 0 -> 567 bytes astrid/res/drawable/filter_deleted.png | Bin 0 -> 655 bytes astrid/res/drawable/filter_hidden.png | Bin 0 -> 853 bytes astrid/res/drawable/filter_inbox.png | Bin 0 -> 806 bytes astrid/res/drawable/filter_recent.png | Bin 0 -> 378 bytes astrid/res/drawable/filter_tags1.png | Bin 0 -> 586 bytes astrid/res/drawable/filter_tags2.png | Bin 0 -> 599 bytes astrid/res/drawable/filter_untagged.png | Bin 0 -> 701 bytes astrid/res/values/styles-3.0.xml | 2 +- .../astrid/activity/FilterListActivity.java | 4 +- .../astrid/activity/TaskListActivity.java | 8 - .../todoroo/astrid/adapter/FilterAdapter.java | 57 ++- .../todoroo/astrid/adapter/TaskAdapter.java | 8 +- .../src/com/todoroo/astrid/dao/TaskDao.java | 5 + astrid/src/com/todoroo/astrid/model/Task.java | 2 +- .../service/Astrid2To3UpgradeHelper.java | 27 +- .../todoroo/astrid/service/TaskService.java | 7 +- 29 files changed, 446 insertions(+), 285 deletions(-) create mode 100644 astrid/plugin-src/com/todoroo/astrid/tags/DetailExposer.java create mode 100644 astrid/plugin-src/com/todoroo/astrid/tags/TagsPlugin.java create mode 100644 astrid/res/drawable/filter_all.png create mode 100644 astrid/res/drawable/filter_alpha.png create mode 100644 astrid/res/drawable/filter_deleted.png create mode 100644 astrid/res/drawable/filter_hidden.png create mode 100644 astrid/res/drawable/filter_inbox.png create mode 100644 astrid/res/drawable/filter_recent.png create mode 100644 astrid/res/drawable/filter_tags1.png create mode 100644 astrid/res/drawable/filter_tags2.png create mode 100644 astrid/res/drawable/filter_untagged.png diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml index f153b4607..386dcf36e 100644 --- a/astrid/AndroidManifest.xml +++ b/astrid/AndroidManifest.xml @@ -1,192 +1,203 @@ + package="com.timsu.astrid" + android:versionName="2.14.4" android:versionCode="135"> - + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + diff --git a/astrid/common-src/com/todoroo/andlib/sql/Query.java b/astrid/common-src/com/todoroo/andlib/sql/Query.java index 91bb608f4..9d4398911 100644 --- a/astrid/common-src/com/todoroo/andlib/sql/Query.java +++ b/astrid/common-src/com/todoroo/andlib/sql/Query.java @@ -20,6 +20,7 @@ import com.todoroo.andlib.data.Property; public final class Query { private SqlTable table; + private String queryTemplate = null; private final ArrayList criterions = new ArrayList(); private final ArrayList fields = new ArrayList(); private final ArrayList joins = new ArrayList(); @@ -80,10 +81,19 @@ public final class Query { StringBuilder sql = new StringBuilder(); visitSelectClause(sql); visitFromClause(sql); - visitJoinClause(sql); - visitWhereClause(sql); - visitGroupByClause(sql); - visitOrderByClause(sql); + + if(queryTemplate == null) { + visitJoinClause(sql); + visitWhereClause(sql); + visitGroupByClause(sql); + visitOrderByClause(sql); + } else { + if(joins.size() > 0 || groupBies.size() > 0 || orders.size() > 0 || + havings.size() > 0) + throw new IllegalStateException("Can't have extras AND query template"); //$NON-NLS-1$ + sql.append(queryTemplate); + } + return sql.toString(); } @@ -169,4 +179,14 @@ public final class Query { public Property[] getFields() { return fields.toArray(new Property[fields.size()]); } + + /** + * Add the SQL query template (comes after the "from") + * @param sqlQuery + * @return + */ + public Query withQueryTemplate(String template) { + queryTemplate = template; + return this; + } } diff --git a/astrid/plugin-src/com/todoroo/astrid/alarms/Alarm.java b/astrid/plugin-src/com/todoroo/astrid/alarms/Alarm.java index e9a39ab33..77f732acc 100644 --- a/astrid/plugin-src/com/todoroo/astrid/alarms/Alarm.java +++ b/astrid/plugin-src/com/todoroo/astrid/alarms/Alarm.java @@ -38,8 +38,8 @@ public class Alarm extends AbstractModel { public static final LongProperty TASK = new LongProperty( TABLE, "task"); - /** Alarm Time (seconds since epoch) */ - public static final IntegerProperty TIME = new IntegerProperty( + /** Alarm Time */ + public static final LongProperty TIME = new LongProperty( TABLE, "time"); /** Alarm Type (see constants) */ diff --git a/astrid/plugin-src/com/todoroo/astrid/filters/CoreFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/filters/CoreFilterExposer.java index 17504eba0..24c009b32 100644 --- a/astrid/plugin-src/com/todoroo/astrid/filters/CoreFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/filters/CoreFilterExposer.java @@ -7,6 +7,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.res.Resources; +import android.graphics.drawable.BitmapDrawable; import com.timsu.astrid.R; import com.todoroo.andlib.sql.Criterion; @@ -29,25 +30,18 @@ import com.todoroo.astrid.model.Task; */ public final class CoreFilterExposer extends BroadcastReceiver { - @SuppressWarnings("nls") @Override public void onReceive(Context context, Intent intent) { Resources r = context.getResources(); // build filters - Filter inbox = new Filter(CorePlugin.pluginIdentifier, r.getString(R.string.BFE_Inbox), - r.getString(R.string.BFE_Inbox), - new QueryTemplate().where(Criterion.and(TaskCriteria.isActive(), - TaskCriteria.isVisible(DateUtilities.now()))).orderBy( - Order.asc(Functions.caseStatement(Task.DUE_DATE.eq(0), - String.format("(%d + 1000 * %s)", DateUtilities.now(), Task.IMPORTANCE), - String.format("(%s + 1000 * %s)", Task.DUE_DATE, Task.IMPORTANCE)))), - null); + Filter inbox = buildInboxFilter(r); Filter all = new Filter(CorePlugin.pluginIdentifier, r.getString(R.string.BFE_All), r.getString(R.string.BFE_All), new QueryTemplate().orderBy(Order.desc(Task.MODIFICATION_DATE)), null); + all.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.filter_all)).getBitmap(); // transmit filter list FilterListItem[] list = new FilterListItem[2]; @@ -58,4 +52,22 @@ public final class CoreFilterExposer extends BroadcastReceiver { context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); } + /** + * Build inbox filter + * @return + */ + @SuppressWarnings("nls") + public static Filter buildInboxFilter(Resources r) { + Filter inbox = new Filter(CorePlugin.pluginIdentifier, r.getString(R.string.BFE_Inbox), + r.getString(R.string.BFE_Inbox), + new QueryTemplate().where(Criterion.and(TaskCriteria.isActive(), + TaskCriteria.isVisible(DateUtilities.now()))).orderBy( + Order.asc(Functions.caseStatement(Task.DUE_DATE.eq(0), + String.format("(%d + 1000 * %s)", DateUtilities.now(), Task.IMPORTANCE), + String.format("(%s + 1000 * %s)", Task.DUE_DATE, Task.IMPORTANCE)))), + null); + inbox.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.filter_inbox)).getBitmap(); + return inbox; + } + } diff --git a/astrid/plugin-src/com/todoroo/astrid/filters/CorePlugin.java b/astrid/plugin-src/com/todoroo/astrid/filters/CorePlugin.java index e009f863b..f11031b08 100644 --- a/astrid/plugin-src/com/todoroo/astrid/filters/CorePlugin.java +++ b/astrid/plugin-src/com/todoroo/astrid/filters/CorePlugin.java @@ -7,7 +7,6 @@ import android.content.Intent; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.Plugin; -@SuppressWarnings("nls") public class CorePlugin extends BroadcastReceiver { static final String pluginIdentifier = "core"; diff --git a/astrid/plugin-src/com/todoroo/astrid/filters/ExtendedFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/filters/ExtendedFilterExposer.java index 024e605f1..f496fc9b1 100644 --- a/astrid/plugin-src/com/todoroo/astrid/filters/ExtendedFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/filters/ExtendedFilterExposer.java @@ -7,7 +7,6 @@ import android.content.BroadcastReceiver; import android.content.ContentValues; import android.content.Context; import android.content.Intent; -import android.content.res.Resources; import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Order; @@ -16,6 +15,7 @@ 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.FilterListHeader; import com.todoroo.astrid.api.FilterListItem; import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.model.Task; @@ -28,31 +28,43 @@ import com.todoroo.astrid.model.Task; */ public final class ExtendedFilterExposer extends BroadcastReceiver { - @SuppressWarnings("nls") @Override public void onReceive(Context context, Intent intent) { - Resources r = context.getResources(); - // build filters + FilterListHeader header = new FilterListHeader(ExtendedPlugin.pluginIdentifier, + "Extended"); + + Filter alphabetical = new Filter(ExtendedPlugin.pluginIdentifier, + "Inbox (sorted by name)", + "Inbox (sorted by name)", + new QueryTemplate().where(Criterion.and(TaskCriteria.isActive(), + TaskCriteria.isVisible(DateUtilities.now()))). + orderBy(Order.asc(Task.TITLE)), + null); + ContentValues hiddenValues = new ContentValues(); - hiddenValues.put(Task.HIDE_UNTIL, DateUtilities.now() + DateUtilities.ONE_DAY); - Filter hidden = new Filter(ExtendedPlugin.pluginIdentifier, "Hidden Tasks", + hiddenValues.put(Task.HIDE_UNTIL.name, DateUtilities.now() + DateUtilities.ONE_DAY); + Filter hidden = new Filter(ExtendedPlugin.pluginIdentifier, + "Hidden Tasks", "Hidden Tasks", new QueryTemplate().where(Criterion.and(TaskCriteria.isActive(), Criterion.not(TaskCriteria.isVisible(DateUtilities.now())))). orderBy(Order.asc(Task.HIDE_UNTIL)), hiddenValues); - Filter alphabetical = new Filter(ExtendedPlugin.pluginIdentifier, - "Inbox (sorted by name)", - "Inbox (sorted by name)", - new QueryTemplate().orderBy(Order.asc(Task.TITLE)), + Filter deleted = new Filter(ExtendedPlugin.pluginIdentifier, + "Deleted Tasks", + "Deleted Tasks", + new QueryTemplate().where(TaskCriteria.isDeleted()). + orderBy(Order.desc(Task.DELETION_DATE)), null); // transmit filter list - FilterListItem[] list = new FilterListItem[2]; - list[0] = inbox; - list[1] = all; + FilterListItem[] list = new FilterListItem[4]; + list[0] = header; + list[1] = alphabetical; + list[2] = hidden; + list[3] = deleted; Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_FILTERS); broadcastIntent.putExtra(AstridApiConstants.EXTRAS_ITEMS, list); context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); diff --git a/astrid/plugin-src/com/todoroo/astrid/filters/ExtendedPlugin.java b/astrid/plugin-src/com/todoroo/astrid/filters/ExtendedPlugin.java index f6b5e6a82..36703531b 100644 --- a/astrid/plugin-src/com/todoroo/astrid/filters/ExtendedPlugin.java +++ b/astrid/plugin-src/com/todoroo/astrid/filters/ExtendedPlugin.java @@ -7,7 +7,6 @@ import android.content.Intent; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.Plugin; -@SuppressWarnings("nls") public class ExtendedPlugin extends BroadcastReceiver { static final String pluginIdentifier = "extended"; diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/DetailExposer.java b/astrid/plugin-src/com/todoroo/astrid/tags/DetailExposer.java new file mode 100644 index 000000000..88b374435 --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/tags/DetailExposer.java @@ -0,0 +1,50 @@ +/** + * See the file "LICENSE" for the full license governing this code. + */ +package com.todoroo.astrid.tags; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +import com.timsu.astrid.R; +import com.todoroo.astrid.api.AstridApiConstants; +import com.todoroo.astrid.api.TaskDetail; + +/** + * Exposes {@link TaskDetail} for tags, i.e. "Tags: frogs, animals" + * + * @author Tim Su + * + */ +public class DetailExposer extends BroadcastReceiver { + + private static TagService tagService = null; + + @Override + public void onReceive(Context context, Intent intent) { + // get tags associated with this task + long taskId = intent.getLongExtra(AstridApiConstants.EXTRAS_TASK_ID, -1); + if(taskId == -1) + return; + + if(tagService == null) + tagService = new TagService(context); + String tagList = tagService.getTagsAsString(taskId); + + if(tagList.length() == 0) + return; + + TaskDetail taskDetail = new TaskDetail(TagsPlugin.IDENTIFIER, + context.getString(R.string.tag_TLA_detail, tagList)); + + // transmit + TaskDetail[] details = new TaskDetail[1]; + details[0] = taskDetail; + Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_DETAILS); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_ITEMS, details); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, taskId); + context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); + } + +} diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/FilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/tags/FilterExposer.java index 204c33bda..3ef39c1e1 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/FilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/FilterExposer.java @@ -4,16 +4,18 @@ package com.todoroo.astrid.tags; import android.content.BroadcastReceiver; +import android.content.ContentValues; import android.content.Context; import android.content.Intent; -import com.todoroo.astrid.R; +import com.timsu.astrid.R; +import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.FilterCategory; import com.todoroo.astrid.api.FilterListHeader; import com.todoroo.astrid.api.FilterListItem; -import com.todoroo.astrid.tags.DataService.Tag; +import com.todoroo.astrid.tags.TagService.Tag; /** * Exposes filters based on tags @@ -23,15 +25,21 @@ import com.todoroo.astrid.tags.DataService.Tag; */ public class FilterExposer extends BroadcastReceiver { + private TagService tagService; @SuppressWarnings("nls") - private Filter filterFromTag(Context context, Tag tag, DataService tagService) { + private Filter filterFromTag(Context context, Tag tag) { 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); - Filter filter = new Filter(listTitle, title, - tagService.getQuery(tag.tag), - tagService.getNewTaskSql(tag.tag)); + QueryTemplate tagTemplate = tag.queryTemplate(); + ContentValues contentValues = new ContentValues(); + contentValues.put(TagService.KEY, tag.tag); + + Filter filter = new Filter(TagsPlugin.IDENTIFIER, + listTitle, title, + tagTemplate, + contentValues); // filters[0].contextMenuLabels = new String[] { // "Rename Tag", @@ -47,26 +55,28 @@ public class FilterExposer extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - DataService tagService = new DataService(context); - Tag[] tagsByAlpha = tagService.getGroupedTags(DataService.GROUPED_TAGS_BY_ALPHA); + tagService = new TagService(context); + Tag[] tagsByAlpha = tagService.getGroupedTags(TagService.GROUPED_TAGS_BY_ALPHA); // If user does not have any tags, don't show this section at all if(tagsByAlpha.length == 0) return; - Tag[] tagsBySize = tagService.getGroupedTags(DataService.GROUPED_TAGS_BY_SIZE); + 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], tagService); + filtersByAlpha[i] = filterFromTag(context, tagsByAlpha[i]); Filter[] filtersBySize = new Filter[tagsBySize.length]; for(int i = 0; i < tagsBySize.length; i++) - filtersBySize[i] = filterFromTag(context, tagsBySize[i], tagService); + filtersBySize[i] = filterFromTag(context, tagsBySize[i]); - FilterListHeader tagsHeader = new FilterListHeader(context.getString(R.string.tag_FEx_header)); - FilterCategory tagsCategoryBySize = new FilterCategory( + FilterListHeader tagsHeader = new FilterListHeader(TagsPlugin.IDENTIFIER, + context.getString(R.string.tag_FEx_header)); + FilterCategory tagsCategoryBySize = new FilterCategory(TagsPlugin.IDENTIFIER, context.getString(R.string.tag_FEx_by_size), filtersBySize); - FilterCategory tagsCategoryByAlpha = new FilterCategory(context.getString(R.string.tag_FEx_alpha), filtersByAlpha); + FilterCategory tagsCategoryByAlpha = new FilterCategory(TagsPlugin.IDENTIFIER, + context.getString(R.string.tag_FEx_alpha), filtersByAlpha); // transmit filter list FilterListItem[] list = new FilterListItem[3]; diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java index bb8c113fa..2b3066835 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java @@ -4,7 +4,6 @@ import java.util.ArrayList; import android.content.Context; -import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.data.Property.CountProperty; import com.todoroo.andlib.service.Autowired; @@ -13,6 +12,7 @@ import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Join; import com.todoroo.andlib.sql.Order; import com.todoroo.andlib.sql.Query; +import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.astrid.dao.MetadataDao; import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; import com.todoroo.astrid.model.Metadata; @@ -57,7 +57,7 @@ public class TagService { * @author Tim Su * */ - public class Tag { + public final class Tag { public String tag; int count; @@ -65,6 +65,18 @@ public class TagService { public String toString() { return tag; } + + /** + * Return SQL selector query for getting tasks with a given tag + * + * @param tag + * @return + */ + public QueryTemplate queryTemplate() { + return new QueryTemplate().join(Join.inner(Metadata.TABLE, + Task.ID.eq(Metadata.TASK))).where(Criterion.and( + MetadataCriteria.withKey(KEY), Metadata.VALUE.eq(tag))); + } } /** @@ -123,18 +135,6 @@ public class TagService { return tagBuilder.toString(); } - /** - * Return SQL selector query for getting tasks with a given tag - * - * @param tag - * @return - */ - public Query tasksWithTag(String tag, Property... properties) { - return Query.select(properties).join(Join.inner(Metadata.TABLE, - Task.ID.eq(Metadata.TASK))).where(Criterion.and( - MetadataCriteria.withKey(KEY), Metadata.VALUE.eq(tag))); - } - /** * Save the given array of tags into the database * @param taskId diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagsPlugin.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagsPlugin.java new file mode 100644 index 000000000..b29a045c1 --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagsPlugin.java @@ -0,0 +1,24 @@ +package com.todoroo.astrid.tags; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +import com.todoroo.astrid.api.AstridApiConstants; +import com.todoroo.astrid.api.Plugin; + +public class TagsPlugin extends BroadcastReceiver { + + static final String IDENTIFIER = "tags"; + + @Override + public void onReceive(Context context, Intent intent) { + Plugin plugin = new Plugin(IDENTIFIER, "Tags", "Todoroo", + "Provides tagging support for tasks."); + + Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_PLUGINS); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_PLUGIN, plugin); + context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); + } + +} diff --git a/astrid/res/drawable/filter_all.png b/astrid/res/drawable/filter_all.png new file mode 100644 index 0000000000000000000000000000000000000000..3d09261a26eb97c6dedc1d3504cbc2cf915eb642 GIT binary patch literal 390 zcmV;10eSw3P);1k*-!zk~CMF9Bv_3(^PCOq;(R5;6H z`2YVu10|S&W(GL4-*9m5zR~L0cWa7s=goeHmKzfsTW-vJJns=rXO>fi=YdvYp=OyIuL^83ysEIf(LtP34vHf@P1syLa4L>s)tjLDRY?|E+S*&m<}gEDA3wCC|S1 zC~n%F`=*)aLx8xUX62**Ryh}!5;VXx>jJY=!}V2J^Y4E*NjsaSAA6F^IPpwJ<+6wW zU8=5LQujKb`Z+F#fckUgU8t^YpU|s(=Orx83-p>b9R3rvXOE zXGG&B-+ooO{Lz1}<{Ou-vd(X^%s98zwd(4P#ubnMhqc}OsqDB<8mj>Yv8NgBOD@j_ z`PDq_3`$^`C!g6^zTp1k={a?|3Z-|`5HYOAUEHcimi|xPlFJZ#%{{hX{-)aXO=~Z^xE1+b* zM@!rH@FJ(e3$Fs}uKo9|x%%HQ^w?fm%Wa0V&kJ-j001RVucl)dd}jav002ovPDHLk FV1mw881w)D literal 0 HcmV?d00001 diff --git a/astrid/res/drawable/filter_deleted.png b/astrid/res/drawable/filter_deleted.png new file mode 100644 index 0000000000000000000000000000000000000000..1514d51a3cf1b67e1c5b9ada36f1fd474e2d214a GIT binary patch literal 655 zcmV;A0&x9_P)uEoyT++I zn$b9r%cFfhHe2K68PkBu*@^<$y+7xQ$wJ~;c5aBx$R=xq*41Wo zhwQus_VOgm0hughj}MhOvs#{>Vg09Y8WxjWUJY5YW zJ?&8eG!59Cz=|E%Ns@013KLWOLV)CObIIj_5{>{#k%TEAMs_GbdDV`x-iYsGH z#=Z{USAQA>NY(}X7=3{K8#LI8ef}kKQAC1Vu3=||mNqz7>Z<*DWS(X}8({x^D&e^=6 z>88%hn5MS5Hq)H$;+)OP=KODSbNf%kRfIoX_w44(Ip*@cSPfat!hc zgGXB)iRGP)^{>KgTHcjKOPiBcMAb>{?eDTK{}mwNv&vMxjBTTO3~S3;*lbo%lm$x* zDyXD92;awUHor;8{UczA$1Ksv%3(Ddpf*_XaX^nU!8A(w-_X#b!Q|Wu^y*P`SH*$D zj7d8H5H%EBk#(lhmQ_6@3KLof_0Sk?u-F_h+cu$Iw4tF_gSKHEW)(f)KE3CxVm-Xz z1N7HrbkCE(_l0%v#X5M+N>P~mv5YNp_sZb`D!Md~Dh=r4rl2AxqQM6ks83ur8K%G$ z&0~hV?A-Cd;dFvs!@(*6+1+jkL<5k_QFz&;#MDGHs1KIqEP)v;U&v3%|^C`Ga3?LtY&4dQB4Oz;1v;J%z!D&%WRH@BZ?x; z3)8@IUIv@hG|@IwyHLC`l{1<4BK>wam95g|i|?Cfzt876&-Zx_0f5*l-9`IJI&mHu zE6$@xB)6N}7VeR;!X8D!TAw;;&0Bsj?A071cO>X3K0wl7WZ1;Tg!4LHyNcnzoeQ7t zNW`aSlm8WXYkek&ir$13=ngczvf zV0vnjNpCF&K8px}dunv+`LIb-sOC$_jD(;IBI$xC|7`(+9cA>Vir_V#z{?k7SX^Ah z^71m~W@q439Ycqfhi7+gp#A14n1n1!e>$EdeATG|f798Y=ggzwEKH2Q!qU2QA(Se?dwqG69%>n$6rtE z%F(845Az8c{w(XgimJg96!jLMz?zS6I1HUm2baqQx7&@nx;lhHA!r6vs2|fqJETOu zLxeu2OQ(3(au%dg>AcZsWI(zXn9XJg1cLe8k~0h0wOL=&HK}7X k{AKr*U4z7Szv)i%9gTgghwgU$Q~&?~07*qoM6N<$g31kYk^lez literal 0 HcmV?d00001 diff --git a/astrid/res/drawable/filter_recent.png b/astrid/res/drawable/filter_recent.png new file mode 100644 index 0000000000000000000000000000000000000000..6a9bf0370708a165d3e49047c09e110e02074a53 GIT binary patch literal 378 zcmV-=0fqjFP)Q51$RwCw?WgWe;0fi^vY%UagXRhyB(O=1wVPFJlYqlK$kNFcaSBrLFKHcpU( zVj5rP+%se7wuRup#~J3_|C@8?jsx6(aN8gV+_?~^wID=7QAmWo&=P9GzK~Bj7P?xU z4^LybJ-~;P$nL)ri2Lx-f?f?uyKtX3G(76UWeycgm{0H$eX9nWr+ASHH8>r~vom;o zFz$}vYpDI9TZYLgxm?Z}9nS!RQHI8Y*b~3AE}I>k|Ynq_|_kL0z^} zg`YWG?`i*VRiHt=)+fle*{;CjiLD9r5bPAPFRr!h8&+rODTKm>mjte|vSwTU#7zr+ Y0SIdSJYsEaB>(^b07*qoM6N<$g6XKB5dZ)H literal 0 HcmV?d00001 diff --git a/astrid/res/drawable/filter_tags1.png b/astrid/res/drawable/filter_tags1.png new file mode 100644 index 0000000000000000000000000000000000000000..454a59f30ca04916c30b5da70821b236df7dd934 GIT binary patch literal 586 zcmV-Q0=4~#P)YYm{!ci%zG5cDs#MtA%E>iAJM=dcBTXt#$=Kxm1c}S>T)> z)oeDCkaD?v5u%VY38vGjbe>Em9)x-#1qy}2S%^ZB=`y)dqgt)jH=7L{$B}&kmP#dL zv)PjngPi@y?F z?msb!MgKs27C;q`$Nl1^87)}9-#;n72%w5aqyBI>%t#yv1bin~`G3EwaPGWQRM3$+Tx>2G~D3qqtDdzLJ$P+M| z%_5OV?1V_vbzR8Cf4JqIVHo)K^%pXcv3TotyGW%{h{xkw5Q#dkEiV=ekof!9z?%~d z=g(E7!z)Oq(;*j#L?RmyiObN>-n-ERY$OQs{fC-WE z`TR3JBO8xbMN0KSbiO^m!^f-pEr_bBgH6ZV(+;jrKl87%5H3QY5S&iu(~XVt z`Q%tE#s-6d3Aucs;QCb?w-;^voEneC7ITEh5sgOWa5&8962;=`54d^#1;35CDRwv< z7ITTajw2Wh%6`9}(Iu`wF^PG8L%bJ2;q&>deAA2$Oi`4b;)4JRkH=$mxm=9IcDvoO l^OXPhyYjA9E`GA_{V$1@FaBct0}KEF002ovPDHLkV1kGx8r%Q? literal 0 HcmV?d00001 diff --git a/astrid/res/drawable/filter_untagged.png b/astrid/res/drawable/filter_untagged.png new file mode 100644 index 0000000000000000000000000000000000000000..9fbae67250babae698555c899907179c139932f0 GIT binary patch literal 701 zcmV;u0z&OtcA_q_1U#pC~GN zxfc`_zq*cJS5eFyM^neBh0V3}>eD$_#z~y93x^BudEejjyyv`!5k(Q1Oa`e`3dv*= zi9`bNcpQQtAQp?w0$`>sCY?^B-|tVXYPG6B!r|~#2t$==L8Verl*{Gv2ts4T1p-Cg41%^T)c)i|3Aq-XBPb9^Eh~-MB(?O%%1HUtLQYw|; z_xr)~`~-xd%KMgOSq3fM-RomxYk()80j@IKD;A5?1w0eX zO8_7BFTq~F0B&Ih{IyeXKfVEz$#iz?L`i>Ij^m_Stu}(_2;{@7O(gElqvL#zLDr4E zPj?Wzbx~#))VC+@m1SA2+wGRu@+EI*AlQZ4U$s{{4PFIsxvodT`{7+wFD@IcbRw7dsPL` zqN+OerCF_3joECLc-<-@E9d2JYjfCrFoQ2E$G|VCW%r`$A@jfIYBU-(27}>DVEOcY jqWG2CCjT8;O!xl+&v_qytO7mD00000NkvXXu0mjfWRW`K literal 0 HcmV?d00001 diff --git a/astrid/res/values/styles-3.0.xml b/astrid/res/values/styles-3.0.xml index f450eecf0..815405ffd 100644 --- a/astrid/res/values/styles-3.0.xml +++ b/astrid/res/values/styles-3.0.xml @@ -55,7 +55,7 @@