diff --git a/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksTestCase.java b/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksTestCase.java index aaab3f76b..a300d9a68 100644 --- a/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksTestCase.java +++ b/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksTestCase.java @@ -1,7 +1,7 @@ package com.todoroo.astrid.subtasks; import com.todoroo.astrid.api.Filter; -import com.todoroo.astrid.core.BuiltInFilterExposer; +import com.todoroo.astrid.core.BuiltInFilters; import com.todoroo.astrid.dao.TaskListMetadataDao; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.TaskListMetadata; @@ -23,6 +23,7 @@ public class SubtasksTestCase extends DatabaseTestCase { @Inject TaskListMetadataDao taskListMetadataDao; @Inject TaskService taskService; @Inject Preferences preferences; + @Inject BuiltInFilters builtInFilters; protected SubtasksUpdater updater; protected Filter filter; @@ -41,7 +42,7 @@ public class SubtasksTestCase extends DatabaseTestCase { @Override protected void setUp() { super.setUp(); - filter = BuiltInFilterExposer.getMyTasksFilter(getContext().getResources()); + filter = builtInFilters.getMyTasks(); preferences.clear(SubtasksUpdater.ACTIVE_TASKS_ORDER); updater = new SubtasksFilterUpdater(taskListMetadataDao, taskService); } diff --git a/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java b/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java index 3b0fe42b0..350af35bb 100644 --- a/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java +++ b/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java @@ -35,7 +35,7 @@ import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.CustomFilter; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.FilterListItem; -import com.todoroo.astrid.core.BuiltInFilterExposer; +import com.todoroo.astrid.core.BuiltInFilters; import com.todoroo.astrid.dao.TagDataDao; import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.data.TagData; @@ -70,6 +70,7 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList @Inject ActivityPreferences preferences; @Inject GtasksPreferenceService gtasksPreferenceService; @Inject VoiceInputAssistant voiceInputAssistant; + @Inject BuiltInFilters builtInFilters; private static final int REQUEST_EDIT_TAG = 11543; private static final int REQUEST_EDIT_FILTER = 11544; @@ -249,7 +250,7 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList } protected Filter getDefaultFilter() { - return BuiltInFilterExposer.getMyTasksFilter(getResources()); + return builtInFilters.getMyTasks(); } @Override @@ -486,7 +487,7 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList activeUuid = tagData.getUuid(); } if (activeUuid.equals(uuid)) { - getIntent().putExtra(TOKEN_SWITCH_TO_FILTER, BuiltInFilterExposer.getMyTasksFilter(getResources())); // Handle in onPostResume() + getIntent().putExtra(TOKEN_SWITCH_TO_FILTER, builtInFilters.getMyTasks()); // Handle in onPostResume() navigationDrawer.clear(); // Should auto refresh } else { tlf.refresh(); @@ -503,7 +504,7 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList CustomFilter customFilter = data.getParcelableExtra(FilterSettingsActivity.TOKEN_FILTER); getIntent().putExtra(TOKEN_SWITCH_TO_FILTER, customFilter); } else if(AstridApiConstants.BROADCAST_EVENT_FILTER_DELETED.equals(action)) { - getIntent().putExtra(TOKEN_SWITCH_TO_FILTER, BuiltInFilterExposer.getMyTasksFilter(getResources())); + getIntent().putExtra(TOKEN_SWITCH_TO_FILTER, builtInFilters.getMyTasks()); } navigationDrawer.refresh(); diff --git a/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java b/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java index c023f5c78..7e4a58d9f 100644 --- a/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java +++ b/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java @@ -45,7 +45,7 @@ import com.todoroo.astrid.adapter.TaskAdapter.ViewHolder; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.FilterWithCustomIntent; -import com.todoroo.astrid.core.BuiltInFilterExposer; +import com.todoroo.astrid.core.BuiltInFilters; import com.todoroo.astrid.core.SortHelper; import com.todoroo.astrid.dao.TaskAttachmentDao; import com.todoroo.astrid.dao.TaskListMetadataDao; @@ -136,6 +136,7 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr @Inject Injector injector; @Inject GtasksPreferenceService gtasksPreferenceService; @Inject DialogBuilder dialogBuilder; + @Inject BuiltInFilters builtInFilters; protected Resources resources; protected TaskAdapter taskAdapter = null; @@ -360,13 +361,13 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr filter = extras.getParcelable(TOKEN_FILTER); extras.remove(TOKEN_FILTER); // Otherwise writing this filter to parcel gives infinite recursion } else { - filter = BuiltInFilterExposer.getMyTasksFilter(resources); + filter = builtInFilters.getMyTasks(); } filter.setFilterQueryOverride(null); - isInbox = BuiltInFilterExposer.isInbox(context, filter); + isInbox = builtInFilters.isMyTasksFilter(filter); isTodayFilter = false; if (!isInbox) { - isTodayFilter = BuiltInFilterExposer.isTodayFilter(context, filter); + isTodayFilter = builtInFilters.isTodayFilter(filter); } initializeTaskListMetadata(); diff --git a/src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.java b/src/main/java/com/todoroo/astrid/core/BuiltInFilters.java similarity index 59% rename from src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.java rename to src/main/java/com/todoroo/astrid/core/BuiltInFilters.java index a073339c1..238503857 100644 --- a/src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.java +++ b/src/main/java/com/todoroo/astrid/core/BuiltInFilters.java @@ -31,58 +31,58 @@ import java.util.ArrayList; import java.util.List; import javax.inject.Inject; +import javax.inject.Singleton; -/** - * Exposes Astrid's built in filters to the NavigationDrawerFragment - * - * @author Tim Su - * - */ -public final class BuiltInFilterExposer { +@Singleton +public final class BuiltInFilters { - private final Preferences preferences; - private final Context context; + private final Filter myTasks; + private final Filter today; + private final Filter recentlyModified; + private final Filter uncategorized; @Inject - public BuiltInFilterExposer(@ForApplication Context context, Preferences preferences) { - this.context = context; - this.preferences = preferences; + public BuiltInFilters(@ForApplication Context context) { + Resources resources = context.getResources(); + + myTasks = getMyTasksFilter(resources); + myTasks.icon = R.drawable.ic_inbox_24dp; + + today = getTodayFilter(resources); + today.icon = R.drawable.ic_today_24dp; + + recentlyModified = getRecentlyModifiedFilter(resources); + recentlyModified.icon = R.drawable.ic_history_24dp; + + uncategorized = getUncategorizedFilter(resources); + uncategorized.icon = R.drawable.ic_label_outline_24dp; + } + + public Filter getMyTasks() { + return myTasks; } - public Filter getMyTasksFilter() { - Filter myTasksFilter = getMyTasksFilter(context.getResources()); - myTasksFilter.icon = R.drawable.ic_inbox_24dp; - return myTasksFilter; + public Filter getToday() { + return today; } - public List getFilters() { - Resources r = context.getResources(); - // core filters - List filters = new ArrayList<>(); - - if (preferences.getBoolean(R.string.p_show_today_filter, true)) { - Filter todayFilter = getTodayFilter(r); - todayFilter.icon = R.drawable.ic_today_24dp; - filters.add(todayFilter); - } - if (preferences.getBoolean(R.string.p_show_recently_modified_filter, true)) { - Filter recentlyModifiedFilter = getRecentlyModifiedFilter(r); - recentlyModifiedFilter.icon = R.drawable.ic_history_24dp; - filters.add(recentlyModifiedFilter); - } - if (preferences.getBoolean(R.string.p_show_not_in_list_filter, true)) { - Filter uncategorizedFilter = getUncategorizedFilter(r); - uncategorizedFilter.icon = R.drawable.ic_label_outline_24dp; - filters.add(uncategorizedFilter); - } - // transmit filter list - return filters; + public Filter getRecentlyModified() { + return recentlyModified; } - /** - * Build inbox filter - */ - public static Filter getMyTasksFilter(Resources r) { + public Filter getUncategorized() { + return uncategorized; + } + + public boolean isMyTasksFilter(Filter filter) { + return myTasks.equals(filter); + } + + public boolean isTodayFilter(Filter filter) { + return today.equals(filter); + } + + private static Filter getMyTasksFilter(Resources r) { return new Filter(r.getString(R.string.BFE_Active), new QueryTemplate().where( Criterion.and(TaskCriteria.activeAndVisible(), @@ -121,15 +121,4 @@ public final class BuiltInFilterExposer { TaskCriteria.isVisible())), null); } - - /** - * Is this the inbox? - */ - public static boolean isInbox(Context context, Filter filter) { - return (filter != null && filter.equals(getMyTasksFilter(context.getResources()))); - } - - public static boolean isTodayFilter(Context context, Filter filter) { - return (filter != null && filter.equals(getTodayFilter(context.getResources()))); - } } diff --git a/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java b/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java index 4f0427fc9..66088400a 100644 --- a/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java +++ b/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java @@ -1,6 +1,5 @@ package com.todoroo.astrid.subtasks; -import android.content.Context; import android.text.TextUtils; import com.todoroo.andlib.data.Property; @@ -8,7 +7,7 @@ import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Query; import com.todoroo.astrid.api.Filter; -import com.todoroo.astrid.core.BuiltInFilterExposer; +import com.todoroo.astrid.core.BuiltInFilters; import com.todoroo.astrid.dao.TagDataDao; import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.dao.TaskListMetadataDao; @@ -20,7 +19,6 @@ import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.subtasks.AstridOrderedListUpdater.Node; import org.tasks.R; -import org.tasks.injection.ForApplication; import org.tasks.preferences.Preferences; import java.util.ArrayList; @@ -33,23 +31,24 @@ import timber.log.Timber; public class SubtasksHelper { - private final Context context; private final Preferences preferences; private final TaskService taskService; private final TagDataDao tagDataDao; private final TaskListMetadataDao taskListMetadataDao; + private BuiltInFilters builtInFilters; @Inject - public SubtasksHelper(@ForApplication Context context, Preferences preferences, TaskService taskService, TagDataDao tagDataDao, TaskListMetadataDao taskListMetadataDao) { - this.context = context; + public SubtasksHelper(Preferences preferences, TaskService taskService, TagDataDao tagDataDao, + TaskListMetadataDao taskListMetadataDao, BuiltInFilters builtInFilters) { this.preferences = preferences; this.taskService = taskService; this.tagDataDao = tagDataDao; this.taskListMetadataDao = taskListMetadataDao; + this.builtInFilters = builtInFilters; } public boolean shouldUseSubtasksFragmentForFilter(Filter filter) { - if(filter == null || BuiltInFilterExposer.isInbox(context, filter) || BuiltInFilterExposer.isTodayFilter(context, filter) || filter.isTagFilter()) { + if(filter == null || builtInFilters.isMyTasksFilter(filter) || builtInFilters.isTodayFilter(filter) || filter.isTagFilter()) { if(preferences.getBoolean(R.string.p_manual_sort, false)) { return true; } @@ -71,9 +70,9 @@ public class SubtasksHelper { TaskListMetadata tlm = null; if (tagData != null) { tlm = taskListMetadataDao.fetchByTagId(tagData.getUuid(), TaskListMetadata.TASK_IDS); - } else if (BuiltInFilterExposer.isInbox(context, filter)) { + } else if (builtInFilters.isMyTasksFilter(filter)) { tlm = taskListMetadataDao.fetchByTagId(TaskListMetadata.FILTER_ID_ALL, TaskListMetadata.TASK_IDS); - } else if (BuiltInFilterExposer.isTodayFilter(context, filter)) { + } else if (builtInFilters.isTodayFilter(filter)) { tlm = taskListMetadataDao.fetchByTagId(TaskListMetadata.FILTER_ID_TODAY, TaskListMetadata.TASK_IDS); } diff --git a/src/main/java/org/tasks/Tasks.java b/src/main/java/org/tasks/Tasks.java index fd3748a62..55e7a4c7a 100644 --- a/src/main/java/org/tasks/Tasks.java +++ b/src/main/java/org/tasks/Tasks.java @@ -2,6 +2,7 @@ package org.tasks; import android.util.Log; +import com.todoroo.astrid.core.BuiltInFilters; import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.dao.MetadataDao; import com.todoroo.astrid.dao.StoreObjectDao; @@ -55,6 +56,7 @@ public class Tasks extends InjectingApplication { @Inject SyncThrottle syncThrottle; @Inject Preferences preferences; @Inject Tracker tracker; + @Inject BuiltInFilters builtInFilters; @Override public void onCreate() { diff --git a/src/main/java/org/tasks/filters/FilterProvider.java b/src/main/java/org/tasks/filters/FilterProvider.java index 1d9cd65a0..e235201ec 100644 --- a/src/main/java/org/tasks/filters/FilterProvider.java +++ b/src/main/java/org/tasks/filters/FilterProvider.java @@ -1,43 +1,56 @@ package org.tasks.filters; import com.todoroo.astrid.api.Filter; -import com.todoroo.astrid.core.BuiltInFilterExposer; +import com.todoroo.astrid.core.BuiltInFilters; import com.todoroo.astrid.core.CustomFilterExposer; import com.todoroo.astrid.gtasks.GtasksFilterExposer; import com.todoroo.astrid.tags.TagFilterExposer; import com.todoroo.astrid.timers.TimerFilterExposer; +import org.tasks.R; +import org.tasks.preferences.Preferences; + import java.util.ArrayList; import java.util.List; import javax.inject.Inject; public class FilterProvider { - private final BuiltInFilterExposer builtInFilterExposer; + private final BuiltInFilters builtInFilters; private final TimerFilterExposer timerFilterExposer; private final CustomFilterExposer customFilterExposer; private final TagFilterExposer tagFilterExposer; private final GtasksFilterExposer gtasksFilterExposer; + private final Preferences preferences; @Inject - public FilterProvider(BuiltInFilterExposer builtInFilterExposer, TimerFilterExposer timerFilterExposer, + public FilterProvider(BuiltInFilters builtInFilters, TimerFilterExposer timerFilterExposer, CustomFilterExposer customFilterExposer, TagFilterExposer tagFilterExposer, - GtasksFilterExposer gtasksFilterExposer) { + GtasksFilterExposer gtasksFilterExposer, Preferences preferences) { - this.builtInFilterExposer = builtInFilterExposer; + this.builtInFilters = builtInFilters; this.timerFilterExposer = timerFilterExposer; this.customFilterExposer = customFilterExposer; this.tagFilterExposer = tagFilterExposer; this.gtasksFilterExposer = gtasksFilterExposer; + this.preferences = preferences; } public Filter getMyTasksFilter() { - return builtInFilterExposer.getMyTasksFilter(); + return builtInFilters.getMyTasks(); } public List getFilters() { return new ArrayList() {{ - addAll(builtInFilterExposer.getFilters()); + if (preferences.getBoolean(R.string.p_show_today_filter, true)) { + add(builtInFilters.getToday()); + } + if (preferences.getBoolean(R.string.p_show_recently_modified_filter, true)) { + add(builtInFilters.getRecentlyModified()); + } + if (preferences.getBoolean(R.string.p_show_not_in_list_filter, true)) { + add(builtInFilters.getUncategorized()); + } addAll(timerFilterExposer.getFilters()); addAll(customFilterExposer.getFilters()); }}; diff --git a/src/main/java/org/tasks/widget/WidgetHelper.java b/src/main/java/org/tasks/widget/WidgetHelper.java index c8fcd6a11..2b9034823 100644 --- a/src/main/java/org/tasks/widget/WidgetHelper.java +++ b/src/main/java/org/tasks/widget/WidgetHelper.java @@ -18,7 +18,7 @@ import com.todoroo.astrid.activity.TaskListActivity; import com.todoroo.astrid.activity.TaskListFragment; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.FilterWithCustomIntent; -import com.todoroo.astrid.core.BuiltInFilterExposer; +import com.todoroo.astrid.core.BuiltInFilters; import com.todoroo.astrid.dao.TagDataDao; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.tags.TagFilterExposer; @@ -36,7 +36,6 @@ import javax.inject.Inject; import javax.inject.Singleton; import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; -import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK; import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; @Singleton @@ -47,12 +46,15 @@ public class WidgetHelper { private final TagDataDao tagDataDao; private final Preferences preferences; private AlarmManager alarmManager; + private BuiltInFilters builtInFilters; @Inject - public WidgetHelper(TagDataDao tagDataDao, Preferences preferences, AlarmManager alarmManager) { + public WidgetHelper(TagDataDao tagDataDao, Preferences preferences, AlarmManager alarmManager, + BuiltInFilters builtInFilters) { this.tagDataDao = tagDataDao; this.preferences = preferences; this.alarmManager = alarmManager; + this.builtInFilters = builtInFilters; } @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) @@ -141,7 +143,7 @@ public class WidgetHelper { public Filter getFilter(Context context, int widgetId) { // base our filter off the inbox filter, replace stuff if we have it - Filter filter = BuiltInFilterExposer.getMyTasksFilter(context.getResources()); + Filter filter = builtInFilters.getMyTasks(); String sql = preferences.getStringValue(WidgetConfigActivity.PREF_SQL + widgetId); if (sql != null) { sql = sql.replace("tasks.userId=0", "1"); // TODO: replace dirty hack for missing column