diff --git a/astrid/plugin-src/com/todoroo/astrid/core/CoreFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/core/CoreFilterExposer.java index b4f1e171a..bb5308826 100644 --- a/astrid/plugin-src/com/todoroo/astrid/core/CoreFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/core/CoreFilterExposer.java @@ -61,18 +61,24 @@ public final class CoreFilterExposer extends BroadcastReceiver implements Astrid * Build inbox filter * @return */ + private static Filter inboxInstance = null; + public static Filter buildInboxFilter(Resources r) { - Filter inbox = new Filter(r.getString(R.string.BFE_Active), r.getString(R.string.BFE_Active), + synchronized(CoreFilterExposer.class) { + if (inboxInstance == null) { + inboxInstance = new Filter(r.getString(R.string.BFE_Active), r.getString(R.string.BFE_Active), new QueryTemplate().where( Criterion.and(TaskCriteria.activeVisibleMine(), 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); + } + } int themeFlags = ThemeService.getFilterThemeFlags(); - inbox.listingIcon = ((BitmapDrawable)r.getDrawable( + inboxInstance.listingIcon = ((BitmapDrawable)r.getDrawable( ThemeService.getDrawable(R.drawable.filter_inbox, themeFlags))).getBitmap(); - return inbox; + return inboxInstance; } /** diff --git a/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterExposer.java index 0507e7ac3..50ab3ed8d 100644 --- a/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterExposer.java @@ -76,6 +76,32 @@ public final class CustomFilterExposer extends BroadcastReceiver implements Astr return savedFilters; } + private static Filter todayFilter = null; + public static Filter getTodayFilter(Resources r) { + int themeFlags = ThemeService.getFilterThemeFlags(); + synchronized(CustomFilterExposer.class) { + if (todayFilter == null) { + String todayTitle = AndroidUtilities.capitalize(r.getString(R.string.today)); + ContentValues todayValues = new ContentValues(); + todayValues.put(Task.DUE_DATE.name, PermaSql.VALUE_NOON); + todayFilter = new Filter(todayTitle, + todayTitle, + new QueryTemplate().where( + Criterion.and(TaskCriteria.activeVisibleMine(), + Task.DUE_DATE.gt(0), + Task.DUE_DATE.lte(PermaSql.VALUE_EOD))), + todayValues); + } + } + todayFilter.listingIcon = ((BitmapDrawable)r.getDrawable( + ThemeService.getDrawable(R.drawable.filter_calendar, themeFlags))).getBitmap(); + return todayFilter; + } + + public static boolean isTodayFilter(Filter filter) { + return (filter != null && filter.equals(getTodayFilter(ContextManager.getContext().getResources()))); + } + private Filter[] buildSavedFilters(Context context, Resources r) { int themeFlags = ThemeService.getFilterThemeFlags(); @@ -86,18 +112,7 @@ public final class CustomFilterExposer extends BroadcastReceiver implements Astr Filter[] list = new Filter[cursor.getCount() + 3]; // stock filters - String todayTitle = AndroidUtilities.capitalize(r.getString(R.string.today)); - ContentValues todayValues = new ContentValues(); - todayValues.put(Task.DUE_DATE.name, PermaSql.VALUE_NOON); - list[0] = new Filter(todayTitle, - todayTitle, - new QueryTemplate().where( - Criterion.and(TaskCriteria.activeVisibleMine(), - Task.DUE_DATE.gt(0), - Task.DUE_DATE.lte(PermaSql.VALUE_EOD))), - todayValues); - list[0].listingIcon = ((BitmapDrawable)r.getDrawable( - ThemeService.getDrawable(R.drawable.filter_calendar, themeFlags))).getBitmap(); + list[0] = getTodayFilter(r); list[1] = new Filter(r.getString(R.string.BFE_Recent), r.getString(R.string.BFE_Recent),