Add FilterProvider

pull/253/head
Alex Baker 10 years ago
parent 4a6a776fc9
commit 4695b427ad

@ -44,7 +44,7 @@ android {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard.txt'
signingConfig signingConfigs.release
signingConfig signingConfigs.release
}
}

@ -1,7 +1,7 @@
package com.todoroo.astrid.subtasks;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.core.CoreFilterExposer;
import com.todoroo.astrid.core.BuiltInFilterExposer;
import com.todoroo.astrid.dao.TaskListMetadataDao;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.TaskListMetadata;
@ -41,7 +41,7 @@ public class SubtasksTestCase extends DatabaseTestCase {
@Override
protected void setUp() {
super.setUp();
filter = CoreFilterExposer.buildInboxFilter(getContext().getResources());
filter = BuiltInFilterExposer.getMyTasksFilter(getContext().getResources());
preferences.clear(SubtasksUpdater.ACTIVE_TASKS_ORDER);
updater = new SubtasksFilterUpdater(taskListMetadataDao, taskService);
}

@ -5,8 +5,8 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.tasks"
android:versionName="4.7.4"
android:versionCode="341">
android:versionName="4.7.5"
android:versionCode="342">
<!-- widgets, alarms, and services will break if Astrid is installed on SD card -->
<!-- android:installLocation="internalOnly"> -->

@ -18,8 +18,8 @@ import com.todoroo.astrid.api.Filter;
import org.tasks.R;
import org.tasks.filters.FilterCounter;
import org.tasks.filters.FilterProvider;
import org.tasks.injection.InjectingListActivity;
import org.tasks.injection.Injector;
import org.tasks.preferences.ActivityPreferences;
import org.tasks.ui.NavigationDrawerFragment;
@ -28,8 +28,8 @@ import javax.inject.Inject;
public class FilterShortcutActivity extends InjectingListActivity {
@Inject FilterCounter filterCounter;
@Inject Injector injector;
@Inject ActivityPreferences preferences;
@Inject FilterProvider filterProvider;
private FilterAdapter adapter = null;
@ -45,7 +45,7 @@ public class FilterShortcutActivity extends InjectingListActivity {
setContentView(R.layout.widget_config_activity);
// set up ui
adapter = new FilterAdapter(injector, filterCounter, this, getListView(),
adapter = new FilterAdapter(filterProvider, filterCounter, this, getListView(),
R.layout.filter_adapter_row, true);
adapter.filterStyle = R.style.TextAppearance_FLA_Filter_Widget;
setListAdapter(adapter);

@ -32,7 +32,7 @@ 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.core.CoreFilterExposer;
import com.todoroo.astrid.core.BuiltInFilterExposer;
import com.todoroo.astrid.core.CustomFilterActivity;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.data.RemoteModel;
@ -190,7 +190,7 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList
}
protected Filter getDefaultFilter() {
return CoreFilterExposer.buildInboxFilter(getResources());
return BuiltInFilterExposer.getMyTasksFilter(getResources());
}
protected void initializeFragments() {
@ -391,7 +391,7 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList
}
if (activeUuid.equals(uuid)) {
getIntent().putExtra(TOKEN_SWITCH_TO_FILTER, CoreFilterExposer.buildInboxFilter(getResources())); // Handle in onPostResume()
getIntent().putExtra(TOKEN_SWITCH_TO_FILTER, BuiltInFilterExposer.getMyTasksFilter(getResources())); // Handle in onPostResume()
navigationDrawer.clear(); // Should auto refresh
} else {
tlf.refresh();

@ -48,7 +48,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.CoreFilterExposer;
import com.todoroo.astrid.core.BuiltInFilterExposer;
import com.todoroo.astrid.core.SortHelper;
import com.todoroo.astrid.dao.TaskAttachmentDao;
import com.todoroo.astrid.dao.TaskListMetadataDao;
@ -351,13 +351,13 @@ public class TaskListFragment extends InjectingListFragment implements OnSortSel
filter = extras.getParcelable(TOKEN_FILTER);
extras.remove(TOKEN_FILTER); // Otherwise writing this filter to parcel gives infinite recursion
} else {
filter = CoreFilterExposer.buildInboxFilter(resources);
filter = BuiltInFilterExposer.getMyTasksFilter(resources);
}
filter.setFilterQueryOverride(null);
isInbox = CoreFilterExposer.isInbox(filter);
isInbox = BuiltInFilterExposer.isInbox(filter);
isTodayFilter = false;
if (!isInbox) {
isTodayFilter = CoreFilterExposer.isTodayFilter(filter);
isTodayFilter = BuiltInFilterExposer.isTodayFilter(filter);
}
initializeTaskListMetadata();

@ -11,7 +11,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.os.Parcelable;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
@ -23,20 +22,13 @@ import android.widget.TextView;
import com.todoroo.astrid.activity.AstridActivity;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.AstridFilterExposer;
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.CoreFilterExposer;
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.filters.FilterCounter;
import org.tasks.injection.Injector;
import org.tasks.filters.FilterProvider;
public class FilterAdapter extends ArrayAdapter<Filter> {
@ -46,7 +38,7 @@ public class FilterAdapter extends ArrayAdapter<Filter> {
// --- instance variables
private Injector injector;
private final FilterProvider filterProvider;
private final FilterCounter filterCounter;
/** parent activity */
@ -69,10 +61,10 @@ public class FilterAdapter extends ArrayAdapter<Filter> {
/** whether to skip Filters that launch intents instead of being real filters */
private final boolean skipIntentFilters;
public FilterAdapter(Injector injector, FilterCounter filterCounter, Activity activity, ListView listView,
public FilterAdapter(FilterProvider filterProvider, FilterCounter filterCounter, Activity activity, ListView listView,
int rowLayout, boolean skipIntentFilters) {
super(activity, 0);
this.injector = injector;
this.filterProvider = filterProvider;
this.filterCounter = filterCounter;
this.activity = activity;
this.listView = listView;
@ -221,14 +213,8 @@ public class FilterAdapter extends ArrayAdapter<Filter> {
}
}
private void populateFiltersToAdapter(AstridFilterExposer astridFilterExposer) {
Parcelable[] filters = astridFilterExposer.getFilters(injector);
if (filters == null) {
return;
}
for (Parcelable item : filters) {
FilterListItem filter = (FilterListItem) item;
public void getLists() {
for (FilterListItem filter : filterProvider.getFilters()) {
if(skipIntentFilters && !(filter instanceof Filter)) {
continue;
}
@ -237,15 +223,6 @@ public class FilterAdapter extends ArrayAdapter<Filter> {
addOrLookup((Filter) filter);
}
}
}
public void getLists() {
populateFiltersToAdapter(new CoreFilterExposer());
populateFiltersToAdapter(new TimerFilterExposer());
populateFiltersToAdapter(new CustomFilterExposer());
populateFiltersToAdapter(new TagFilterExposer());
populateFiltersToAdapter(new GtasksFilterExposer());
filterCounter.refreshFilterCounts(new Runnable() {
@Override
public void run() {

@ -1,17 +0,0 @@
/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.api;
import org.tasks.injection.Injector;
/**
* Common interface for Astrids filter-exposers to provide their FilterListitem instances.
*
* @author Arne Jans
*/
public interface AstridFilterExposer {
public FilterListItem[] getFilters(Injector injector);
}

@ -11,13 +11,14 @@ import android.content.res.Resources;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Order;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.api.AstridFilterExposer;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.api.PermaSql;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.data.Metadata;
@ -26,8 +27,6 @@ import com.todoroo.astrid.tags.TaskToTagMetadata;
import org.tasks.R;
import org.tasks.injection.ForApplication;
import org.tasks.injection.InjectingBroadcastReceiver;
import org.tasks.injection.Injector;
import org.tasks.preferences.Preferences;
import java.util.ArrayList;
@ -41,36 +40,47 @@ import javax.inject.Inject;
* @author Tim Su <tim@todoroo.com>
*
*/
public final class CoreFilterExposer extends InjectingBroadcastReceiver implements AstridFilterExposer {
public final class BuiltInFilterExposer {
@Inject Preferences preferences;
@Inject @ForApplication Context context;
private final Preferences preferences;
private final Context context;
private FilterListItem[] prepareFilters() {
@Inject
public BuiltInFilterExposer(@ForApplication Context context, Preferences preferences) {
this.context = context;
this.preferences = preferences;
}
public List<FilterListItem> getFilters() {
Resources r = context.getResources();
// core filters
List<FilterListItem> filters = new ArrayList<>(3);
filters.add(buildInboxFilter(r));
filters.add(getMyTasksFilter(r));
if (preferences.getBoolean(R.string.p_show_today_filter, true)) {
filters.add(getTodayFilter(r));
}
if (preferences.getBoolean(R.string.p_show_recently_modified_filter, true)) {
filters.add(getRecentlyModifiedFilter(r));
}
if (preferences.getBoolean(R.string.p_show_not_in_list_filter, true)) {
filters.add(getUncategorizedFilter(r));
}
// transmit filter list
return filters.toArray(new FilterListItem[filters.size()]);
return filters;
}
/**
* Build inbox filter
*/
public static Filter buildInboxFilter(Resources r) {
public static Filter getMyTasksFilter(Resources r) {
return new Filter(r.getString(R.string.BFE_Active), r.getString(R.string.BFE_Active),
new QueryTemplate().where(
Criterion.and(TaskCriteria.activeAndVisible(),
Criterion.not(Task.ID.in(Query.select(Metadata.TASK).from(Metadata.TABLE).where(
Criterion.and(MetadataCriteria.withKey(TaskToTagMetadata.KEY),
TaskToTagMetadata.TAG_NAME.like("x_%", "x"))))))), //$NON-NLS-1$ //$NON-NLS-2$
null);
null);
}
private static Filter getTodayFilter(Resources r) {
@ -83,25 +93,37 @@ public final class CoreFilterExposer extends InjectingBroadcastReceiver implemen
Criterion.and(TaskCriteria.activeAndVisible(),
Task.DUE_DATE.gt(0),
Task.DUE_DATE.lte(PermaSql.VALUE_EOD))),
todayValues);
todayValues);
}
private static Filter getRecentlyModifiedFilter(Resources r) {
return new Filter(r.getString(R.string.BFE_Recent),
r.getString(R.string.BFE_Recent),
new QueryTemplate().where(
Criterion.all).orderBy(
Order.desc(Task.MODIFICATION_DATE)).limit(15),
null);
}
private static Filter getUncategorizedFilter(Resources r) {
return new Filter(r.getString(R.string.tag_FEx_untagged),
r.getString(R.string.tag_FEx_untagged),
new QueryTemplate().where(Criterion.and(
Criterion.not(Task.UUID.in(Query.select(TaskToTagMetadata.TASK_UUID).from(Metadata.TABLE)
.where(Criterion.and(MetadataDao.MetadataCriteria.withKey(TaskToTagMetadata.KEY), Metadata.DELETION_DATE.eq(0))))),
TaskCriteria.isActive(),
TaskCriteria.isVisible())),
null);
}
/**
* Is this the inbox?
*/
public static boolean isInbox(Filter filter) {
return (filter != null && filter.equals(buildInboxFilter(ContextManager.getContext().getResources())));
return (filter != null && filter.equals(getMyTasksFilter(ContextManager.getContext().getResources())));
}
public static boolean isTodayFilter(Filter filter) {
return (filter != null && filter.equals(getTodayFilter(ContextManager.getContext().getResources())));
}
@Override
public FilterListItem[] getFilters(Injector injector) {
injector.inject(this);
return prepareFilters();
}
}

@ -8,27 +8,17 @@ package com.todoroo.astrid.core;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import com.todoroo.andlib.data.Callback;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Order;
import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.astrid.api.AstridFilterExposer;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.dao.StoreObjectDao;
import com.todoroo.astrid.data.StoreObject;
import com.todoroo.astrid.data.Task;
import org.tasks.R;
import org.tasks.injection.ForApplication;
import org.tasks.injection.InjectingActivity;
import org.tasks.injection.InjectingBroadcastReceiver;
import org.tasks.injection.Injector;
import org.tasks.preferences.Preferences;
import java.util.ArrayList;
import java.util.List;
@ -41,35 +31,23 @@ import javax.inject.Inject;
* @author Tim Su <tim@todoroo.com>
*
*/
public final class CustomFilterExposer extends InjectingBroadcastReceiver implements AstridFilterExposer {
public final class CustomFilterExposer {
private static final String TOKEN_FILTER_ID = "id"; //$NON-NLS-1$
private static final String TOKEN_FILTER_NAME = "name"; //$NON-NLS-1$
@Inject StoreObjectDao storeObjectDao;
@Inject Preferences preferences;
@Inject @ForApplication Context context;
private final StoreObjectDao storeObjectDao;
private final Context context;
private FilterListItem[] prepareFilters() {
Resources r = context.getResources();
return buildSavedFilters(context, r);
@Inject
public CustomFilterExposer(@ForApplication Context context, StoreObjectDao storeObjectDao) {
this.context = context;
this.storeObjectDao = storeObjectDao;
}
private Filter[] buildSavedFilters(final Context context, Resources r) {
public List<Filter> getFilters() {
final List<Filter> list = new ArrayList<>();
// stock filters
if (preferences.getBoolean(R.string.p_show_recently_modified_filter, true)) {
Filter recent = new Filter(r.getString(R.string.BFE_Recent),
r.getString(R.string.BFE_Recent),
new QueryTemplate().where(
Criterion.all).orderBy(
Order.desc(Task.MODIFICATION_DATE)).limit(15),
null);
list.add(recent);
}
storeObjectDao.getSavedFilters(new Callback<StoreObject>() {
@Override
public void apply(StoreObject savedFilter) {
@ -85,7 +63,7 @@ public final class CustomFilterExposer extends InjectingBroadcastReceiver implem
}
});
return list.toArray(new Filter[list.size()]);
return list;
}
/**
@ -130,12 +108,4 @@ public final class CustomFilterExposer extends InjectingBroadcastReceiver implem
});
}
}
@Override
public FilterListItem[] getFilters(Injector injector) {
injector.inject(this);
return prepareFilters();
}
}

@ -16,9 +16,7 @@ import com.todoroo.andlib.sql.Functions;
import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.Order;
import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.astrid.api.AstridFilterExposer;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.api.FilterWithCustomIntent;
import com.todoroo.astrid.api.PermaSql;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
@ -28,27 +26,49 @@ import com.todoroo.astrid.data.Task;
import org.tasks.R;
import org.tasks.injection.ForApplication;
import org.tasks.injection.InjectingBroadcastReceiver;
import org.tasks.injection.Injector;
import java.util.Collections;
import java.util.List;
import javax.inject.Inject;
import static com.google.common.collect.Lists.newArrayList;
import static java.util.Collections.*;
/**
* Exposes filters based on lists
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class GtasksFilterExposer extends InjectingBroadcastReceiver implements AstridFilterExposer {
public class GtasksFilterExposer {
private final GtasksListService gtasksListService;
private final GtasksPreferenceService gtasksPreferenceService;
private final Context context;
private final GtasksMetadata gtasksMetadata;
@Inject
public GtasksFilterExposer(@ForApplication Context context, GtasksListService gtasksListService,
GtasksPreferenceService gtasksPreferenceService, GtasksMetadata gtasksMetadata) {
this.context = context;
this.gtasksListService = gtasksListService;
this.gtasksPreferenceService = gtasksPreferenceService;
this.gtasksMetadata = gtasksMetadata;
}
@Inject GtasksListService gtasksListService;
@Inject GtasksPreferenceService gtasksPreferenceService;
@Inject @ForApplication Context context;
@Inject GtasksMetadata gtasksMetadata;
public List<Filter> getFilters() {
// if we aren't logged in (or we are logged in to astrid.com), don't expose features
if(!gtasksPreferenceService.isLoggedIn()) {
return emptyList();
}
private List<GtasksList> lists;
List<Filter> listFilters = newArrayList();
for (GtasksList list : gtasksListService.getLists()) {
listFilters.add(filterFromList(gtasksMetadata, context, list));
}
return listFilters;
}
public static Filter filterFromList(GtasksMetadata gtasksMetadata, Context context, GtasksList list) {
String listName = list.getName();
@ -72,36 +92,4 @@ public class GtasksFilterExposer extends InjectingBroadcastReceiver implements A
return filter;
}
private FilterListItem[] prepareFilters() {
// if we aren't logged in (or we are logged in to astrid.com), don't expose features
if(!gtasksPreferenceService.isLoggedIn()) {
return null;
}
lists = gtasksListService.getLists();
// If user does not have any lists, don't show this section at all
if(noListsToShow()) {
return null;
}
Filter[] listFilters = new Filter[lists.size()];
for(int i = 0; i < lists.size(); i++) {
listFilters[i] = filterFromList(gtasksMetadata, context, lists.get(i));
}
return listFilters;
}
private boolean noListsToShow() {
return lists.isEmpty();
}
@Override
public FilterListItem[] getFilters(Injector injector) {
injector.inject(this);
return prepareFilters();
}
}

@ -9,7 +9,7 @@ import com.todoroo.andlib.sql.Query;
import com.todoroo.astrid.actfm.TagViewFragment;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterWithCustomIntent;
import com.todoroo.astrid.core.CoreFilterExposer;
import com.todoroo.astrid.core.BuiltInFilterExposer;
import com.todoroo.astrid.core.SortHelper;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
@ -34,7 +34,7 @@ public class SubtasksHelper {
private static final Logger log = LoggerFactory.getLogger(SubtasksHelper.class);
public static boolean shouldUseSubtasksFragmentForFilter(Preferences preferences, Filter filter) {
if(filter == null || CoreFilterExposer.isInbox(filter) || CoreFilterExposer.isTodayFilter(filter) || SubtasksHelper.isTagFilter(filter)) {
if(filter == null || BuiltInFilterExposer.isInbox(filter) || BuiltInFilterExposer.isTodayFilter(filter) || SubtasksHelper.isTagFilter(filter)) {
int sortFlags = preferences.getSortFlags();
if(SortHelper.isManualSort(sortFlags)) {
return true;
@ -69,9 +69,9 @@ public class SubtasksHelper {
TaskListMetadata tlm = null;
if (tagData != null) {
tlm = tlmd.fetchByTagId(tagData.getUuid(), TaskListMetadata.TASK_IDS);
} else if (CoreFilterExposer.isInbox(filter)) {
} else if (BuiltInFilterExposer.isInbox(filter)) {
tlm = tlmd.fetchByTagId(TaskListMetadata.FILTER_ID_ALL, TaskListMetadata.TASK_IDS);
} else if (CoreFilterExposer.isTodayFilter(filter)) {
} else if (BuiltInFilterExposer.isTodayFilter(filter)) {
tlm = tlmd.fetchByTagId(TaskListMetadata.FILTER_ID_TODAY, TaskListMetadata.TASK_IDS);
}

@ -10,7 +10,6 @@ import android.content.ComponentName;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.TextUtils;
@ -18,15 +17,12 @@ import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Field;
import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.astrid.actfm.TagViewFragment;
import com.todoroo.astrid.api.AstridFilterExposer;
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.dao.MetadataDao;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.TagData;
@ -34,9 +30,6 @@ import com.todoroo.astrid.data.Task;
import org.tasks.R;
import org.tasks.injection.ForApplication;
import org.tasks.injection.InjectingBroadcastReceiver;
import org.tasks.injection.Injector;
import org.tasks.preferences.Preferences;
import java.util.ArrayList;
import java.util.List;
@ -49,13 +42,29 @@ import javax.inject.Inject;
* @author Tim Su <tim@todoroo.com>
*
*/
public class TagFilterExposer extends InjectingBroadcastReceiver implements AstridFilterExposer {
public class TagFilterExposer {
public static final String TAG = "tag"; //$NON-NLS-1$
@Inject TagService tagService;
@Inject @ForApplication Context context;
@Inject Preferences preferences;
private final TagService tagService;
private final Context context;
@Inject
public TagFilterExposer(@ForApplication Context context, TagService tagService) {
this.context = context;
this.tagService = tagService;
}
public List<FilterListItem> getFilters() {
ContextManager.setContext(context);
ArrayList<FilterListItem> list = new ArrayList<>();
list.addAll(filterFromTags(tagService.getTagList()));
// transmit filter list
return list;
}
/** Create filter from new tag object */
public static FilterWithCustomIntent filterFromTag(Context context, TagData tag, Criterion criterion) {
@ -103,33 +112,10 @@ public class TagFilterExposer extends InjectingBroadcastReceiver implements Astr
return ret;
}
private FilterListItem[] prepareFilters() {
ContextManager.setContext(context);
ArrayList<FilterListItem> list = new ArrayList<>();
list.addAll(filterFromTags(tagService.getTagList()));
// transmit filter list
return list.toArray(new FilterListItem[list.size()]);
}
private List<Filter> filterFromTags(List<TagData> tags) {
boolean shouldAddUntagged = preferences.getBoolean(R.string.p_show_not_in_list_filter, true);
List<Filter> filters = new ArrayList<>();
Resources r = context.getResources();
// --- untagged
if (shouldAddUntagged) {
Filter untagged = new Filter(r.getString(R.string.tag_FEx_untagged),
r.getString(R.string.tag_FEx_untagged),
untaggedTemplate(),
null);
filters.add(untagged);
}
for (TagData tag : tags) {
Filter f = constructFilter(context, tag);
if (f != null) {
@ -143,21 +129,6 @@ public class TagFilterExposer extends InjectingBroadcastReceiver implements Astr
return filterFromTag(context, tag, TaskCriteria.activeAndVisible());
}
@Override
public FilterListItem[] getFilters(Injector injector) {
injector.inject(this);
return prepareFilters();
}
private QueryTemplate untaggedTemplate() {
return new QueryTemplate().where(Criterion.and(
Criterion.not(Task.UUID.in(Query.select(TaskToTagMetadata.TASK_UUID).from(Metadata.TABLE)
.where(Criterion.and(MetadataDao.MetadataCriteria.withKey(TaskToTagMetadata.KEY), Metadata.DELETION_DATE.eq(0))))),
TaskCriteria.isActive(),
TaskCriteria.isVisible()));
}
private static QueryTemplate queryTemplate(String uuid, Criterion criterion) {
Criterion fullCriterion = Criterion.and(
Field.field("mtags." + Metadata.KEY.name).eq(TaskToTagMetadata.KEY),

@ -11,42 +11,44 @@ import android.content.res.Resources;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.astrid.api.AstridFilterExposer;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.TaskService;
import org.tasks.R;
import org.tasks.injection.ForApplication;
import org.tasks.injection.InjectingBroadcastReceiver;
import org.tasks.injection.Injector;
import java.util.Collections;
import java.util.List;
import javax.inject.Inject;
import static com.google.common.collect.Lists.newArrayList;
import static java.util.Collections.emptyList;
/**
* Exposes "working on" filter to the NavigationDrawerFragment
*
* @author Tim Su <tim@todoroo.com>
*
*/
public final class TimerFilterExposer extends InjectingBroadcastReceiver implements AstridFilterExposer {
public final class TimerFilterExposer {
@Inject TaskService taskService;
@Inject @ForApplication Context context;
private final TaskService taskService;
private final Context context;
private FilterListItem[] prepareFilters() {
if(taskService.count(Query.select(Task.ID).
where(Task.TIMER_START.gt(0))) == 0) {
return null;
}
@Inject
public TimerFilterExposer(@ForApplication Context context, TaskService taskService) {
this.context = context;
this.taskService = taskService;
}
Filter workingOn = createFilter(context);
public List<Filter> getFilters() {
if(taskService.count(Query.select(Task.ID).where(Task.TIMER_START.gt(0))) == 0) {
return emptyList();
}
// transmit filter list
FilterListItem[] list = new FilterListItem[1];
list[0] = workingOn;
return list;
return newArrayList(createFilter(context));
}
public static Filter createFilter(Context context) {
@ -58,11 +60,4 @@ public final class TimerFilterExposer extends InjectingBroadcastReceiver impleme
new QueryTemplate().where(Task.TIMER_START.gt(0)),
values);
}
@Override
public FilterListItem[] getFilters(Injector injector) {
injector.inject(this);
return prepareFilters();
}
}

@ -20,7 +20,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tasks.R;
import org.tasks.injection.Injector;
import org.tasks.preferences.ActivityPreferences;
import javax.inject.Inject;
@ -36,7 +35,6 @@ public class QuickAddBar {
@Inject TaskService taskService;
@Inject TaskCreator taskCreator;
@Inject ActivityPreferences preferences;
@Inject DateChangedAlerts dateChangedAlerts;
private TaskListActivity activity;

@ -8,7 +8,6 @@ package com.todoroo.astrid.widget;
import android.appwidget.AppWidgetManager;
import android.content.ContentValues;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
@ -23,8 +22,8 @@ import com.todoroo.astrid.api.FilterWithCustomIntent;
import org.tasks.R;
import org.tasks.filters.FilterCounter;
import org.tasks.filters.FilterProvider;
import org.tasks.injection.InjectingListActivity;
import org.tasks.injection.Injector;
import org.tasks.preferences.ActivityPreferences;
import org.tasks.widget.WidgetHelper;
@ -47,8 +46,8 @@ public class WidgetConfigActivity extends InjectingListActivity {
@Inject WidgetHelper widgetHelper;
@Inject FilterCounter filterCounter;
@Inject Injector injector;
@Inject ActivityPreferences preferences;
@Inject FilterProvider filterProvider;
private void updateWidget() {
if (preIceCreamSandwich()) {
@ -90,7 +89,7 @@ public class WidgetConfigActivity extends InjectingListActivity {
}
// set up ui
adapter = new FilterAdapter(injector, filterCounter, this, getListView(),
adapter = new FilterAdapter(filterProvider, filterCounter, this, getListView(),
R.layout.filter_adapter_row, true);
adapter.filterStyle = R.style.TextAppearance_FLA_Filter_Widget;
setListAdapter(adapter);

@ -0,0 +1,43 @@
package org.tasks.filters;
import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.core.BuiltInFilterExposer;
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 java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
public class FilterProvider {
private final BuiltInFilterExposer builtInFilterExposer;
private final TimerFilterExposer timerFilterExposer;
private final CustomFilterExposer customFilterExposer;
private final TagFilterExposer tagFilterExposer;
private final GtasksFilterExposer gtasksFilterExposer;
@Inject
public FilterProvider(BuiltInFilterExposer builtInFilterExposer, TimerFilterExposer timerFilterExposer,
CustomFilterExposer customFilterExposer, TagFilterExposer tagFilterExposer,
GtasksFilterExposer gtasksFilterExposer) {
this.builtInFilterExposer = builtInFilterExposer;
this.timerFilterExposer = timerFilterExposer;
this.customFilterExposer = customFilterExposer;
this.tagFilterExposer = tagFilterExposer;
this.gtasksFilterExposer = gtasksFilterExposer;
}
public List<? extends FilterListItem> getFilters() {
return new ArrayList<FilterListItem>() {{
addAll(builtInFilterExposer.getFilters());
addAll(timerFilterExposer.getFilters());
addAll(customFilterExposer.getFilters());
addAll(tagFilterExposer.getFilters());
addAll(gtasksFilterExposer.getFilters());
}};
}
}

@ -12,7 +12,6 @@ import com.todoroo.astrid.activity.TaskEditActivity;
import com.todoroo.astrid.activity.TaskListActivity;
import com.todoroo.astrid.backup.BackupPreferences;
import com.todoroo.astrid.calls.MissedCallActivity;
import com.todoroo.astrid.core.CoreFilterExposer;
import com.todoroo.astrid.core.CustomFilterActivity;
import com.todoroo.astrid.core.CustomFilterExposer;
import com.todoroo.astrid.core.DefaultsPreferences;
@ -20,14 +19,11 @@ import com.todoroo.astrid.core.OldTaskPreferences;
import com.todoroo.astrid.files.AACRecordingActivity;
import com.todoroo.astrid.gcal.CalendarAlarmListCreator;
import com.todoroo.astrid.gcal.CalendarReminderActivity;
import com.todoroo.astrid.gtasks.GtasksFilterExposer;
import com.todoroo.astrid.gtasks.GtasksPreferences;
import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity;
import com.todoroo.astrid.reminders.ReminderPreferences;
import com.todoroo.astrid.tags.DeleteTagActivity;
import com.todoroo.astrid.tags.RenameTagActivity;
import com.todoroo.astrid.tags.TagFilterExposer;
import com.todoroo.astrid.timers.TimerFilterExposer;
import com.todoroo.astrid.widget.WidgetConfigActivity;
import org.tasks.voice.VoiceCommandActivity;
@ -39,50 +35,37 @@ import dagger.Provides;
@Module(addsTo = TasksModule.class,
injects = {
TaskListActivity.class,
TaskEditActivity.class,
ShareLinkActivity.class,
TagSettingsActivity.class,
TagSettingsActivityTablet.class,
CustomFilterActivity.class,
MissedCallActivity.class,
CalendarAlarmListCreator.class,
CustomFilterExposer.DeleteActivity.class,
CalendarReminderActivity.class,
DeleteTagActivity.class,
RenameTagActivity.class,
VoiceCommandActivity.class,
GtasksLoginActivity.class,
WidgetConfigActivity.class,
EditPreferences.class,
GtasksPreferences.class,
OldTaskPreferences.class,
BackupPreferences.class,
FilterShortcutActivity.class,
CoreFilterExposer.class,
TimerFilterExposer.class,
CustomFilterExposer.class,
GtasksFilterExposer.class,
TagFilterExposer.class,
BeastModePreferences.class,
DefaultsPreferences.class,
ReminderPreferences.class,
AACRecordingActivity.class
})
TaskListActivity.class,
TaskEditActivity.class,
ShareLinkActivity.class,
TagSettingsActivity.class,
TagSettingsActivityTablet.class,
CustomFilterActivity.class,
MissedCallActivity.class,
CalendarAlarmListCreator.class,
CustomFilterExposer.DeleteActivity.class,
CalendarReminderActivity.class,
DeleteTagActivity.class,
RenameTagActivity.class,
VoiceCommandActivity.class,
GtasksLoginActivity.class,
WidgetConfigActivity.class,
EditPreferences.class,
GtasksPreferences.class,
OldTaskPreferences.class,
BackupPreferences.class,
FilterShortcutActivity.class,
BeastModePreferences.class,
DefaultsPreferences.class,
ReminderPreferences.class,
AACRecordingActivity.class
})
public class ActivityModule {
private final Activity activity;
private final Injector injector;
public ActivityModule(Activity activity, Injector injector) {
public ActivityModule(Activity activity) {
this.activity = activity;
this.injector = injector;
}
@Singleton
@Provides
public Injector getInjector() {
return injector;
}
@Singleton

@ -2,19 +2,14 @@ package org.tasks.injection;
import com.todoroo.astrid.alarms.AlarmTaskRepeatListener;
import com.todoroo.astrid.calls.PhoneStateChangedReceiver;
import com.todoroo.astrid.core.CoreFilterExposer;
import com.todoroo.astrid.core.CustomFilterExposer;
import com.todoroo.astrid.gcal.CalendarAlarmReceiver;
import com.todoroo.astrid.gcal.CalendarStartupReceiver;
import com.todoroo.astrid.gcal.GCalTaskCompleteListener;
import com.todoroo.astrid.gtasks.GtasksCustomFilterCriteriaExposer;
import com.todoroo.astrid.gtasks.GtasksFilterExposer;
import com.todoroo.astrid.reminders.Notifications;
import com.todoroo.astrid.reminders.ShowNotificationReceiver;
import com.todoroo.astrid.repeats.RepeatTaskCompleteListener;
import com.todoroo.astrid.tags.TagCustomFilterCriteriaExposer;
import com.todoroo.astrid.tags.TagFilterExposer;
import com.todoroo.astrid.timers.TimerFilterExposer;
import com.todoroo.astrid.timers.TimerTaskCompleteListener;
import com.todoroo.astrid.widget.TasksWidget;
@ -38,11 +33,6 @@ import dagger.Module;
AlarmTaskRepeatListener.class,
PhoneStateChangedReceiver.class,
ShowNotificationReceiver.class,
CoreFilterExposer.class,
TimerFilterExposer.class,
CustomFilterExposer.class,
GtasksFilterExposer.class,
TagFilterExposer.class,
CalendarAlarmReceiver.class,
CalendarStartupReceiver.class,
BootCompletedReceiver.class,

@ -7,15 +7,10 @@ import android.support.v4.app.Fragment;
import com.todoroo.astrid.actfm.TagViewFragment;
import com.todoroo.astrid.activity.TaskEditFragment;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.core.CoreFilterExposer;
import com.todoroo.astrid.core.CustomFilterExposer;
import com.todoroo.astrid.gtasks.GtasksFilterExposer;
import com.todoroo.astrid.gtasks.GtasksListFragment;
import com.todoroo.astrid.reminders.NotificationFragment;
import com.todoroo.astrid.subtasks.SubtasksListFragment;
import com.todoroo.astrid.subtasks.SubtasksTagListFragment;
import com.todoroo.astrid.tags.TagFilterExposer;
import com.todoroo.astrid.timers.TimerFilterExposer;
import com.todoroo.astrid.ui.QuickAddBar;
import org.tasks.ui.NavigationDrawerFragment;
@ -27,21 +22,16 @@ import dagger.Provides;
@Module(addsTo = TasksModule.class,
injects = {
TaskListFragment.class,
GtasksListFragment.class,
NotificationFragment.class,
SubtasksListFragment.class,
SubtasksTagListFragment.class,
TagViewFragment.class,
TaskEditFragment.class,
NavigationDrawerFragment.class,
QuickAddBar.class,
CoreFilterExposer.class,
TimerFilterExposer.class,
CustomFilterExposer.class,
GtasksFilterExposer.class,
TagFilterExposer.class
})
TaskListFragment.class,
GtasksListFragment.class,
NotificationFragment.class,
SubtasksListFragment.class,
SubtasksTagListFragment.class,
TagViewFragment.class,
TaskEditFragment.class,
NavigationDrawerFragment.class,
QuickAddBar.class
})
public class FragmentModule {
private final Fragment fragment;

@ -10,7 +10,7 @@ public class InjectingActionBarActivity extends ActionBarActivity implements Inj
@Override
protected void onCreate(Bundle savedInstanceState) {
objectGraph = ((Injector) getApplication()).getObjectGraph().plus(new ActivityModule(this, this));
objectGraph = ((Injector) getApplication()).getObjectGraph().plus(new ActivityModule(this));
inject(this);
super.onCreate(savedInstanceState);

@ -10,7 +10,7 @@ public class InjectingActivity extends Activity implements Injector {
@Override
protected void onCreate(Bundle savedInstanceState) {
objectGraph = ((Injector) getApplication()).getObjectGraph().plus(new ActivityModule(this, this));
objectGraph = ((Injector) getApplication()).getObjectGraph().plus(new ActivityModule(this));
inject(this);
super.onCreate(savedInstanceState);

@ -10,7 +10,7 @@ public class InjectingListActivity extends ListActivity implements Injector {
@Override
protected void onCreate(Bundle savedInstanceState) {
objectGraph = ((Injector) getApplication()).getObjectGraph().plus(new ActivityModule(this, this));
objectGraph = ((Injector) getApplication()).getObjectGraph().plus(new ActivityModule(this));
inject(this);
super.onCreate(savedInstanceState);

@ -10,7 +10,7 @@ public abstract class InjectingPreferenceActivity extends PreferenceActivity imp
@Override
public void onCreate(Bundle savedInstanceState) {
objectGraph = ((Injector) getApplication()).getObjectGraph().plus(new ActivityModule(this, this));
objectGraph = ((Injector) getApplication()).getObjectGraph().plus(new ActivityModule(this));
inject(this);
super.onCreate(savedInstanceState);

@ -11,7 +11,7 @@ public abstract class InjectingSyncProviderPreferences extends TodorooPreference
@Override
public void onCreate(Bundle savedInstanceState) {
objectGraph = ((Injector) getApplication()).getObjectGraph().plus(new ActivityModule(this, this));
objectGraph = ((Injector) getApplication()).getObjectGraph().plus(new ActivityModule(this));
inject(this);
super.onCreate(savedInstanceState);

@ -44,8 +44,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tasks.R;
import org.tasks.filters.FilterCounter;
import org.tasks.filters.FilterProvider;
import org.tasks.injection.InjectingFragment;
import org.tasks.injection.Injector;
import org.tasks.preferences.Preferences;
import javax.inject.Inject;
@ -86,8 +86,8 @@ public class NavigationDrawerFragment extends InjectingFragment {
private int mCurrentSelectedPosition = 0;
@Inject FilterCounter filterCounter;
@Inject Injector injector;
@Inject Preferences preferences;
@Inject FilterProvider filterProvider;
public NavigationDrawerFragment() {
}
@ -241,7 +241,7 @@ public class NavigationDrawerFragment extends InjectingFragment {
public void onAttach(Activity activity) {
super.onAttach(activity);
mCallbacks = (OnFilterItemClickedListener) activity;
adapter = new FilterAdapter(injector, filterCounter, getActivity(), null, R.layout.filter_adapter_row, false);
adapter = new FilterAdapter(filterProvider, filterCounter, getActivity(), null, R.layout.filter_adapter_row, false);
}
@Override

@ -21,14 +21,13 @@ import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterWithCustomIntent;
import com.todoroo.astrid.api.PermaSql;
import com.todoroo.astrid.core.CoreFilterExposer;
import com.todoroo.astrid.core.BuiltInFilterExposer;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.tags.TagFilterExposer;
import com.todoroo.astrid.utility.Constants;
import com.todoroo.astrid.widget.TasksWidget;
import com.todoroo.astrid.widget.WidgetConfigActivity;
import com.todoroo.astrid.widget.WidgetUpdateService;
import org.tasks.R;
import org.tasks.preferences.ActivityPreferences;
@ -175,7 +174,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 = CoreFilterExposer.buildInboxFilter(context.getResources());
Filter filter = BuiltInFilterExposer.getMyTasksFilter(context.getResources());
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

Loading…
Cancel
Save