Remove FilterWithCustomIntent

pull/384/head
Alex Baker 8 years ago
parent 1b348fb9f4
commit da3d2a26e1

@ -1,7 +1,13 @@
package com.todoroo.astrid.gtasks;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.subtasks.SubtasksListFragment;
public class GtasksListFragment extends SubtasksListFragment {
public static final String TOKEN_STORE_ID = "storeId";
public static TaskListFragment newGtasksListFragment(GtasksFilter gtasksFilter, GtasksList list) {
return null;
}
}

@ -15,4 +15,8 @@ public class GtasksListService {
public List<GtasksList> getLists() {
return Collections.emptyList();
}
public GtasksList getList(long storeId) {
return null;
}
}

@ -5,27 +5,8 @@
*/
package com.todoroo.astrid.gtasks;
import android.content.ComponentName;
import android.content.ContentValues;
import android.content.Context;
import android.os.Bundle;
import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.sql.Criterion;
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.Filter;
import com.todoroo.astrid.api.FilterWithCustomIntent;
import com.todoroo.astrid.api.PermaSql;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.Task;
import org.tasks.R;
import org.tasks.injection.ForApplication;
import com.todoroo.astrid.api.GtasksFilter;
import java.util.List;
@ -42,20 +23,13 @@ import static java.util.Collections.emptyList;
*/
public class GtasksFilterExposer {
private static final int CLOUD = R.drawable.ic_cloud_queue_24dp;
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;
public GtasksFilterExposer(GtasksListService gtasksListService, GtasksPreferenceService gtasksPreferenceService) {
this.gtasksListService = gtasksListService;
this.gtasksPreferenceService = gtasksPreferenceService;
this.gtasksMetadata = gtasksMetadata;
}
public List<Filter> getFilters() {
@ -82,25 +56,6 @@ public class GtasksFilterExposer {
}
private Filter filterFromList(GtasksList list) {
String listName = list.getName();
ContentValues values = new ContentValues();
values.putAll(gtasksMetadata.createEmptyMetadata(AbstractModel.NO_ID).getMergedValues());
values.remove(Metadata.TASK.name);
values.put(GtasksMetadata.LIST_ID.name, list.getRemoteId());
values.put(GtasksMetadata.ORDER.name, PermaSql.VALUE_NOW);
FilterWithCustomIntent filter = new FilterWithCustomIntent(listName,
new QueryTemplate().join(
Join.left(Metadata.TABLE, Task.ID.eq(Metadata.TASK))).where(Criterion.and(
MetadataCriteria.withKey(GtasksMetadata.METADATA_KEY),
TaskCriteria.notDeleted(),
GtasksMetadata.LIST_ID.eq(list.getRemoteId()))).orderBy(
Order.asc(Functions.cast(GtasksMetadata.ORDER, "LONG"))), //$NON-NLS-1$
values);
filter.customTaskList = new ComponentName(context, GtasksListFragment.class);
Bundle extras = new Bundle();
extras.putLong(GtasksListFragment.TOKEN_STORE_ID, list.getId());
filter.customExtras = extras;
filter.icon = CLOUD;
return filter;
return new GtasksFilter(list);
}
}

@ -9,9 +9,11 @@ import android.os.Bundle;
import android.view.MenuItem;
import com.todoroo.andlib.data.Property;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.StoreObjectDao;
import com.todoroo.astrid.dao.TaskAttachmentDao;
import com.todoroo.astrid.data.StoreObject;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.SyncV2Service;
import com.todoroo.astrid.service.TaskService;
@ -30,11 +32,17 @@ import javax.inject.Inject;
public class GtasksListFragment extends SubtasksListFragment {
public static final String TOKEN_STORE_ID = "storeId"; //$NON-NLS-1$
public static TaskListFragment newGtasksListFragment(GtasksFilter filter, GtasksList list) {
GtasksListFragment fragment = new GtasksListFragment();
fragment.filter = filter;
fragment.list = list;
return fragment;
}
private static final String EXTRA_STORE_OBJECT = "extra_store_object";
@Inject TaskService taskService;
@Inject MetadataDao metadataDao;
@Inject StoreObjectDao storeObjectDao;
@Inject GtasksTaskListUpdater gtasksTaskListUpdater;
@Inject GtasksPreferenceService gtasksPreferenceService;
@Inject SyncV2Service syncService;
@ -52,14 +60,23 @@ public class GtasksListFragment extends SubtasksListFragment {
}
@Override
public void onActivityCreated(Bundle icicle) {
super.onActivityCreated(icicle);
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
StoreObject storeObject = savedInstanceState.getParcelable(EXTRA_STORE_OBJECT);
list = new GtasksList(storeObject);
}
long storeObjectId = extras.getLong(TOKEN_STORE_ID, 0);
list = storeObjectDao.getGtasksList(storeObjectId);
((OrderedMetadataListFragmentHelper<GtasksList>)helper).setList(list);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(EXTRA_STORE_OBJECT, list.getStoreObject());
}
@Override
protected void initiateAutomaticSyncImpl() {
if (list != null && syncThrottle.canSync(list.getId())) {

@ -45,16 +45,14 @@ public class GtasksTaskListUpdater extends OrderedMetadataListUpdater<GtasksList
private final GtasksMetadataService gtasksMetadataService;
private final GtasksSyncService gtasksSyncService;
private final MetadataDao metadataDao;
private final GtasksMetadata gtasksMetadata;
@Inject
public GtasksTaskListUpdater(GtasksMetadataService gtasksMetadataService, GtasksSyncService gtasksSyncService,
MetadataDao metadataDao, GtasksMetadata gtasksMetadata) {
MetadataDao metadataDao) {
super(metadataDao);
this.gtasksMetadataService = gtasksMetadataService;
this.gtasksSyncService = gtasksSyncService;
this.metadataDao = metadataDao;
this.gtasksMetadata = gtasksMetadata;
}
// --- overrides
@ -80,7 +78,7 @@ public class GtasksTaskListUpdater extends OrderedMetadataListUpdater<GtasksList
}
@Override
protected Metadata createEmptyMetadata(GtasksList list, long taskId) {
Metadata metadata = gtasksMetadata.createEmptyMetadata(taskId);
Metadata metadata = GtasksMetadata.createEmptyMetadataWithoutList(taskId);
metadata.setValue(GtasksMetadata.LIST_ID, list.getRemoteId());
return metadata;
}

@ -81,7 +81,6 @@ public class GtasksSyncV2Provider {
private final GtasksTaskListUpdater gtasksTaskListUpdater;
private final Context context;
private final Preferences preferences;
private final GtasksMetadata gtasksMetadataFactory;
private final SyncExecutor executor;
private final GtasksInvoker gtasksInvoker;
@ -89,7 +88,7 @@ public class GtasksSyncV2Provider {
public GtasksSyncV2Provider(TaskService taskService, StoreObjectDao storeObjectDao, GtasksPreferenceService gtasksPreferenceService,
GtasksSyncService gtasksSyncService, GtasksListService gtasksListService, GtasksMetadataService gtasksMetadataService,
GtasksTaskListUpdater gtasksTaskListUpdater, @ForApplication Context context, Preferences preferences,
GtasksMetadata gtasksMetadata, SyncExecutor executor, GtasksInvoker gtasksInvoker) {
SyncExecutor executor, GtasksInvoker gtasksInvoker) {
this.taskService = taskService;
this.storeObjectDao = storeObjectDao;
this.gtasksPreferenceService = gtasksPreferenceService;
@ -99,7 +98,6 @@ public class GtasksSyncV2Provider {
this.gtasksTaskListUpdater = gtasksTaskListUpdater;
this.context = context;
this.preferences = preferences;
this.gtasksMetadataFactory = gtasksMetadata;
this.executor = executor;
this.gtasksInvoker = gtasksInvoker;
}
@ -270,7 +268,7 @@ public class GtasksSyncV2Provider {
if (!tasks.isEmpty()) {
for (com.google.api.services.tasks.model.Task t : tasks) {
GtasksTaskContainer container = new GtasksTaskContainer(t, listId, gtasksMetadataFactory.createEmptyMetadata(AbstractModel.NO_ID));
GtasksTaskContainer container = new GtasksTaskContainer(t, listId, GtasksMetadata.createEmptyMetadataWithoutList(AbstractModel.NO_ID));
gtasksMetadataService.findLocalMatch(container);
container.gtaskMetadata.setValue(GtasksMetadata.GTASKS_ORDER, Long.parseLong(t.getPosition()));
container.gtaskMetadata.setValue(GtasksMetadata.PARENT_TASK, gtasksMetadataService.localIdForGtasksId(t.getParent()));

@ -51,6 +51,7 @@ public class TagSettingsActivity extends InjectingAppCompatActivity {
public static final String TOKEN_NEW_FILTER = "newFilter"; //$NON-NLS-1$
public static final String TOKEN_AUTOPOPULATE_NAME = "autopopulateName"; //$NON-NLS-1$
public static final String EXTRA_TAG_DATA = "tagData"; //$NON-NLS-1$
public static final String EXTRA_TAG_UUID = "uuid"; //$NON-NLS-1$
private boolean isNewTag;
private TagData tagData;
@ -143,12 +144,12 @@ public class TagSettingsActivity extends InjectingAppCompatActivity {
if (isNewTag) {
tagData.setName(newName);
tagDataDao.persist(tagData);
setResult(RESULT_OK, new Intent().putExtra(TOKEN_NEW_FILTER, TagFilterExposer.filterFromTagData(TagSettingsActivity.this, tagData)));
setResult(RESULT_OK, new Intent().putExtra(TOKEN_NEW_FILTER, TagFilterExposer.filterFromTag(tagData)));
} else if (!oldName.equals(newName)) {
tagData.setName(newName);
tagService.rename(tagData.getUuid(), newName);
tagDataDao.persist(tagData);
setResult(RESULT_OK, new Intent(AstridApiConstants.BROADCAST_EVENT_TAG_RENAMED).putExtra(TagViewFragment.EXTRA_TAG_UUID, tagData.getUuid()));
setResult(RESULT_OK, new Intent(AstridApiConstants.BROADCAST_EVENT_TAG_RENAMED).putExtra(EXTRA_TAG_UUID, tagData.getUuid()));
}
finish();
@ -201,7 +202,7 @@ public class TagSettingsActivity extends InjectingAppCompatActivity {
String uuid = tagData.getUuid();
metadataDao.deleteWhere(Criterion.and(MetadataDao.MetadataCriteria.withKey(TaskToTagMetadata.KEY), TaskToTagMetadata.TAG_UUID.eq(uuid)));
tagDataDao.delete(tagData.getId());
setResult(RESULT_OK, new Intent(AstridApiConstants.BROADCAST_EVENT_TAG_DELETED).putExtra(TagViewFragment.EXTRA_TAG_UUID, uuid));
setResult(RESULT_OK, new Intent(AstridApiConstants.BROADCAST_EVENT_TAG_DELETED).putExtra(EXTRA_TAG_UUID, uuid));
}
finish();
}

@ -9,8 +9,8 @@ import android.os.Bundle;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.api.TagFilter;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.TagData;
import org.tasks.injection.FragmentComponent;
@ -19,44 +19,26 @@ import javax.inject.Inject;
public class TagViewFragment extends TaskListFragment {
public static TaskListFragment newTagViewFragment(TagFilter filter, TagData tagData) {
TagViewFragment fragment = new TagViewFragment();
fragment.filter = filter;
fragment.tagData = tagData;
return fragment;
}
private static final String EXTRA_TAG_DATA = "extra_tag_data";
public static final String EXTRA_TAG_NAME = "tag"; //$NON-NLS-1$
public static final String EXTRA_TAG_UUID = "uuid"; //$NON-NLS-1$
@Inject TagDataDao tagDataDao;
protected TagData tagData;
@Inject TagDataDao tagDataDao;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
tagData = savedInstanceState.getParcelable(EXTRA_TAG_DATA);
} else {
String tag = extras.getString(EXTRA_TAG_NAME);
String uuid = RemoteModel.NO_UUID;
if (extras.containsKey(EXTRA_TAG_UUID)) {
uuid = extras.getString(EXTRA_TAG_UUID);
}
if(tag == null && RemoteModel.NO_UUID.equals(uuid)) {
return;
}
tagData = RemoteModel.isUuidEmpty(uuid)
? tagDataDao.getTagByName(tag, TagData.PROPERTIES)
: tagDataDao.getByUuid(uuid, TagData.PROPERTIES);
if (tagData == null) {
tagData = new TagData();
tagData.setName(tag);
tagData.setUUID(uuid);
tagDataDao.persist(tagData);
}
}
super.onCreate(savedInstanceState);
}
@Override
@ -73,13 +55,10 @@ public class TagViewFragment extends TaskListFragment {
outState.putParcelable(EXTRA_TAG_DATA, tagData);
}
@Override
public TagData getActiveTagData() {
public TagData getTagData() {
return tagData;
}
// --------------------------------------------------------- refresh data
@Override
protected void initiateAutomaticSyncImpl() {
if (tagData != null) {

@ -18,17 +18,26 @@ import android.view.inputmethod.InputMethodManager;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.actfm.TagSettingsActivity;
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.api.FilterWithCustomIntent;
import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.api.PermaSql;
import com.todoroo.astrid.api.TagFilter;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gtasks.GtasksList;
import com.todoroo.astrid.gtasks.GtasksListFragment;
import com.todoroo.astrid.gtasks.GtasksListService;
import com.todoroo.astrid.repeats.RepeatControlSet;
import com.todoroo.astrid.service.StartupService;
import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.service.UpgradeActivity;
import com.todoroo.astrid.subtasks.SubtasksHelper;
import com.todoroo.astrid.subtasks.SubtasksListFragment;
import com.todoroo.astrid.subtasks.SubtasksTagListFragment;
import com.todoroo.astrid.timers.TimerControlSet;
import org.tasks.R;
@ -70,6 +79,8 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
@Inject TaskEditControlSetFragmentManager taskEditControlSetFragmentManager;
@Inject RepeatConfirmationReceiver repeatConfirmationReceiver;
@Inject DefaultFilterProvider defaultFilterProvider;
@Inject GtasksListService gtasksListService;
@Inject TagDataDao tagDataDao;
public static final int REQUEST_UPGRADE = 505;
@ -220,34 +231,21 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
}
private TaskListFragment newTaskListFragment(Filter filter) {
Class<?> customTaskList = null;
if (subtasksHelper.shouldUseSubtasksFragmentForFilter(filter)) {
customTaskList = SubtasksHelper.subtasksClassForFilter(filter);
}
Class<?> component = customTaskList;
if (filter instanceof FilterWithCustomIntent && component == null) {
try {
component = Class.forName(((FilterWithCustomIntent) filter).customTaskList.getClassName());
} catch (Exception e) {
// Invalid
Timber.e(e, e.getMessage());
}
}
if (component == null) {
component = TaskListFragment.class;
}
TaskListFragment newFragment;
try {
newFragment = (TaskListFragment) component.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
Timber.e(e, e.getMessage());
newFragment = new TaskListFragment();
if (filter instanceof TagFilter) {
TagFilter tagFilter = (TagFilter) filter;
TagData tagData = tagDataDao.getByUuid(tagFilter.getUuid());
return preferences.getBoolean(R.string.p_manual_sort, false)
? SubtasksTagListFragment.newSubtasksTagListFragment(tagFilter, tagData)
: TagViewFragment.newTagViewFragment(tagFilter, tagData);
} else if (filter instanceof GtasksFilter) {
GtasksFilter gtasksFilter = (GtasksFilter) filter;
GtasksList list = gtasksListService.getList(gtasksFilter.getStoreId());
return GtasksListFragment.newGtasksListFragment(gtasksFilter, list);
} else {
return subtasksHelper.shouldUseSubtasksFragmentForFilter(filter)
? SubtasksListFragment.newSubtasksListFragment(filter)
: TaskListFragment.newTaskListFragment(filter);
}
newFragment.initialize(filter);
return newFragment;
}
@Override

@ -52,13 +52,11 @@ import com.todoroo.astrid.adapter.TaskAdapter.ViewHolder;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.CustomFilter;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterWithCustomIntent;
import com.todoroo.astrid.core.BuiltInFilterExposer;
import com.todoroo.astrid.core.SortHelper;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TaskAttachmentDao;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.TaskAttachment;
@ -75,7 +73,6 @@ import com.todoroo.astrid.tags.TagFilterExposer;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.timers.TimerPlugin;
import com.todoroo.astrid.voice.VoiceInputAssistant;
import com.todoroo.astrid.widget.TasksWidget;
import org.tasks.Broadcaster;
import org.tasks.R;
@ -109,8 +106,13 @@ import static com.todoroo.astrid.voice.VoiceInputAssistant.voiceInputAvailable;
*/
public class TaskListFragment extends InjectingListFragment implements SwipeRefreshLayout.OnRefreshListener, Toolbar.OnMenuItemClickListener {
public static TaskListFragment newTaskListFragment(Filter filter) {
TaskListFragment fragment = new TaskListFragment();
fragment.filter = filter;
return fragment;
}
private static final String EXTRA_FILTER = "extra_filter";
private static final String EXTRA_EXTRAS = "extra_extras";
public static final String TAG_TASKLIST_FRAGMENT = "tasklist_fragment"; //$NON-NLS-1$
@ -159,7 +161,6 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr
protected final AtomicReference<String> sqlQueryTemplate = new AtomicReference<>();
protected Filter filter;
protected Bundle extras;
/*
* ======================================================================
@ -225,32 +226,20 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr
if (savedInstanceState != null) {
filter = savedInstanceState.getParcelable(EXTRA_FILTER);
extras = savedInstanceState.getBundle(EXTRA_EXTRAS);
}
if (filter == null) {
filter = BuiltInFilterExposer.getMyTasksFilter(getResources());
}
if (extras == null) {
extras = new Bundle(); // Just need an empty one to prevent potential null pointers
}
setTaskAdapter();
}
public void initialize(Filter filter) {
this.filter = filter;
this.extras = filter instanceof FilterWithCustomIntent
? ((FilterWithCustomIntent) filter).getCustomIntent().getExtras()
: new Bundle();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(EXTRA_FILTER, filter);
outState.putBundle(EXTRA_EXTRAS, extras);
}
@Override
@ -361,7 +350,7 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr
return true;
case R.id.menu_tag_settings:
startActivityForResult(new Intent(getActivity(), TagSettingsActivity.class) {{
putExtra(TagSettingsActivity.EXTRA_TAG_DATA, getActiveTagData());
putExtra(TagSettingsActivity.EXTRA_TAG_DATA, ((TagViewFragment) TaskListFragment.this).getTagData());
}}, REQUEST_EDIT_TAG);
return true;
case R.id.menu_show_hidden:
@ -484,13 +473,6 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr
});
}
/**
* @return the current tag you are viewing, or null if you're not viewing a tag
*/
public TagData getActiveTagData() {
return null;
}
/*
* ======================================================================
* ============================================================ lifecycle
@ -624,17 +606,13 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr
}
private TodorooCursor<Task> constructCursor() {
String tagName = null;
if (getActiveTagData() != null) {
tagName = getActiveTagData().getName();
}
Criterion tagsJoinCriterion = Criterion.and(
Field.field(TAGS_METADATA_JOIN + "." + Metadata.KEY.name).eq(TaskToTagMetadata.KEY), //$NON-NLS-1$
Field.field(TAGS_METADATA_JOIN + "." + Metadata.DELETION_DATE.name).eq(0),
Task.ID.eq(Field.field(TAGS_METADATA_JOIN + "." + Metadata.TASK.name)));
if (tagName != null) {
tagsJoinCriterion = Criterion.and(tagsJoinCriterion, Field.field(TAGS_METADATA_JOIN + "." + TaskToTagMetadata.TAG_NAME.name).neq(tagName));
if (this instanceof TagViewFragment) {
tagsJoinCriterion = Criterion.and(tagsJoinCriterion, Field.field(TAGS_METADATA_JOIN + "." + TaskToTagMetadata.TAG_NAME.name).neq(filter.listingTitle));
}
// TODO: For now, we'll modify the query to join and include the things like tag data here.
@ -765,25 +743,23 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr
} else if (requestCode == REQUEST_EDIT_TAG) {
if (resultCode == Activity.RESULT_OK) {
String action = data.getAction();
String uuid = data.getStringExtra(TagViewFragment.EXTRA_TAG_UUID);
if (AstridApiConstants.BROADCAST_EVENT_TAG_RENAMED.equals(action)) {
TagData td = getActiveTagData();
if (td != null && td.getUuid().equals(uuid)) {
td = tagDataDao.fetch(uuid, TagData.PROPERTIES);
if (td != null) {
Filter filter = TagFilterExposer.filterFromTagData(getActivity(), td);
((TaskListActivity) getActivity()).onFilterItemClicked(filter);
String uuid = data.getStringExtra(TagSettingsActivity.EXTRA_TAG_UUID);
if (this instanceof TagViewFragment) {
TagData tagData = ((TagViewFragment) this).getTagData();
if (AstridApiConstants.BROADCAST_EVENT_TAG_RENAMED.equals(action)) {
if (tagData.getUuid().equals(uuid)) {
TagData newTagData = tagDataDao.fetch(uuid, TagData.PROPERTIES);
if (newTagData != null) {
Filter filter = TagFilterExposer.filterFromTag(newTagData);
((TaskListActivity) getActivity()).onFilterItemClicked(filter);
}
}
} else if (AstridApiConstants.BROADCAST_EVENT_TAG_DELETED.equals(action)) {
String activeUuid = tagData.getUuid();
if (activeUuid.equals(uuid)) {
((TaskListActivity) getActivity()).onFilterItemClicked(BuiltInFilterExposer.getMyTasksFilter(getResources()));
((TaskListActivity) getActivity()).clearNavigationDrawer(); // Should auto refresh
}
}
} else if (AstridApiConstants.BROADCAST_EVENT_TAG_DELETED.equals(action)) {
TagData tagData = getActiveTagData();
String activeUuid = RemoteModel.NO_UUID;
if (tagData != null) {
activeUuid = tagData.getUuid();
}
if (activeUuid.equals(uuid)) {
((TaskListActivity) getActivity()).onFilterItemClicked(BuiltInFilterExposer.getMyTasksFilter(getResources()));
((TaskListActivity) getActivity()).clearNavigationDrawer(); // Should auto refresh
}
}

@ -1,99 +0,0 @@
/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.api;
import android.content.ComponentName;
import android.content.ContentValues;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.astrid.actfm.TagViewFragment;
import com.todoroo.astrid.subtasks.SubtasksTagListFragment;
public class FilterWithCustomIntent extends Filter {
/**
* Custom activity name
*/
public ComponentName customTaskList = null;
/**
* Bundle with extras set. Can be null
*/
public Bundle customExtras = null;
protected FilterWithCustomIntent() {
super();
}
public FilterWithCustomIntent(String listingTitle, QueryTemplate sqlQuery, ContentValues valuesForNewTasks) {
super(listingTitle, sqlQuery, valuesForNewTasks);
}
public Intent getCustomIntent() {
Intent intent = new Intent();
if(customExtras != null) {
intent.putExtras(customExtras);
}
return intent;
}
// --- parcelable
/**
* {@inheritDoc}
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeParcelable(customTaskList, 0);
dest.writeParcelable(customExtras, 0);
}
@Override
public void readFromParcel(Parcel source) {
super.readFromParcel(source);
customTaskList = source.readParcelable(ComponentName.class.getClassLoader());
customExtras = source.readParcelable(Bundle.class.getClassLoader());
}
/**
* Parcelable Creator Object
*/
public static final Parcelable.Creator<FilterWithCustomIntent> CREATOR = new Parcelable.Creator<FilterWithCustomIntent>() {
/**
* {@inheritDoc}
*/
@Override
public FilterWithCustomIntent createFromParcel(Parcel source) {
FilterWithCustomIntent item = new FilterWithCustomIntent();
item.readFromParcel(source);
return item;
}
/**
* {@inheritDoc}
*/
@Override
public FilterWithCustomIntent[] newArray(int size) {
return new FilterWithCustomIntent[size];
}
};
@Override
public boolean isTagFilter() {
String className = customTaskList.getClassName();
// Need to check this subclass because some shortcuts/widgets may have been saved with it
return TagViewFragment.class.getName().equals(className)
|| SubtasksTagListFragment.class.getName().equals(className);
}
}

@ -0,0 +1,98 @@
package com.todoroo.astrid.api;
import android.content.ContentValues;
import android.os.Parcel;
import android.os.Parcelable;
import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.sql.Criterion;
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.dao.MetadataDao;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gtasks.GtasksList;
import com.todoroo.astrid.gtasks.GtasksMetadata;
import org.tasks.R;
public class GtasksFilter extends Filter {
private static final int CLOUD = R.drawable.ic_cloud_queue_24dp;
public long storeId;
protected GtasksFilter() {
super();
}
public GtasksFilter(GtasksList list) {
super(list.getName(), getQueryTemplate(list), getValuesForNewTasks(list));
storeId = list.getId();
icon = CLOUD;
}
public long getStoreId() {
return storeId;
}
private static QueryTemplate getQueryTemplate(GtasksList list) {
return new QueryTemplate().join(
Join.left(Metadata.TABLE, Task.ID.eq(Metadata.TASK))).where(Criterion.and(
MetadataDao.MetadataCriteria.withKey(GtasksMetadata.METADATA_KEY),
TaskDao.TaskCriteria.notDeleted(),
GtasksMetadata.LIST_ID.eq(list.getRemoteId()))).orderBy(
Order.asc(Functions.cast(GtasksMetadata.ORDER, "LONG")));
}
private static ContentValues getValuesForNewTasks(GtasksList list) {
ContentValues values = new ContentValues();
values.putAll(GtasksMetadata.createEmptyMetadataWithoutList(AbstractModel.NO_ID).getMergedValues());
values.remove(Metadata.TASK.name);
values.put(GtasksMetadata.LIST_ID.name, list.getRemoteId());
values.put(GtasksMetadata.ORDER.name, PermaSql.VALUE_NOW);
return values;
}
/**
* {@inheritDoc}
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeLong(storeId);
}
@Override
public void readFromParcel(Parcel source) {
super.readFromParcel(source);
storeId = source.readLong();
}
/**
* Parcelable Creator Object
*/
public static final Parcelable.Creator<GtasksFilter> CREATOR = new Parcelable.Creator<GtasksFilter>() {
/**
* {@inheritDoc}
*/
@Override
public GtasksFilter createFromParcel(Parcel source) {
GtasksFilter item = new GtasksFilter();
item.readFromParcel(source);
return item;
}
/**
* {@inheritDoc}
*/
@Override
public GtasksFilter[] newArray(int size) {
return new GtasksFilter[size];
}
};
}

@ -0,0 +1,101 @@
package com.todoroo.astrid.api;
import android.content.ContentValues;
import android.os.Parcel;
import android.os.Parcelable;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Field;
import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import org.tasks.R;
public class TagFilter extends Filter {
private static final int TAG = R.drawable.ic_label_24dp;
private String uuid;
protected TagFilter() {
super();
}
public TagFilter(TagData tagData) {
super(tagData.getName(), queryTemplate(tagData.getUuid()), getValuesForNewTask(tagData));
uuid = tagData.getUuid();
icon = TAG;
}
public String getUuid() {
return uuid;
}
private static QueryTemplate queryTemplate(String uuid) {
Criterion fullCriterion = Criterion.and(
Field.field("mtags." + Metadata.KEY.name).eq(TaskToTagMetadata.KEY),
Field.field("mtags." + TaskToTagMetadata.TAG_UUID.name).eq(uuid),
Field.field("mtags." + Metadata.DELETION_DATE.name).eq(0),
TaskDao.TaskCriteria.activeAndVisible());
return new QueryTemplate().join(Join.inner(Metadata.TABLE.as("mtags"), Task.UUID.eq(Field.field("mtags." + TaskToTagMetadata.TASK_UUID.name))))
.where(fullCriterion);
}
private static ContentValues getValuesForNewTask(TagData tagData) {
ContentValues contentValues = new ContentValues();
contentValues.put(Metadata.KEY.name, TaskToTagMetadata.KEY);
contentValues.put(TaskToTagMetadata.TAG_NAME.name, tagData.getName());
contentValues.put(TaskToTagMetadata.TAG_UUID.name, tagData.getUuid());
return contentValues;
}
/**
* {@inheritDoc}
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeString(uuid);
}
@Override
public void readFromParcel(Parcel source) {
super.readFromParcel(source);
uuid = source.readString();
}
/**
* Parcelable Creator Object
*/
public static final Parcelable.Creator<TagFilter> CREATOR = new Parcelable.Creator<TagFilter>() {
/**
* {@inheritDoc}
*/
@Override
public TagFilter createFromParcel(Parcel source) {
TagFilter item = new TagFilter();
item.readFromParcel(source);
return item;
}
/**
* {@inheritDoc}
*/
@Override
public TagFilter[] newArray(int size) {
return new TagFilter[size];
}
};
@Override
public boolean isTagFilter() {
return true;
}
}

@ -46,7 +46,9 @@ public class StoreObjectDao {
public GtasksList getGtasksList(long id) {
StoreObject result = dao.fetch(id, StoreObject.PROPERTIES);
if (!result.getType().equals(GtasksList.TYPE)) {
if (result == null) {
throw new RuntimeException(String.format("No store object found [id=%s]", id));
} else if (!result.getType().equals(GtasksList.TYPE)) {
throw new RuntimeException("Not a google task list");
}
return new GtasksList(result);

@ -60,16 +60,19 @@ public class GtasksMetadata {
* @param taskId if > 0, will set metadata task field
*/
public Metadata createEmptyMetadata(long taskId) {
Metadata metadata = new Metadata();
metadata.setKey(GtasksMetadata.METADATA_KEY);
metadata.setValue(ID, ""); //$NON-NLS-1$
Metadata metadata = createEmptyMetadataWithoutList(taskId);
String defaultList = gtasksPreferenceService.getDefaultList();
if(defaultList == null) {
defaultList = "@default"; //$NON-NLS-1$
}
metadata.setValue(LIST_ID, defaultList);
return metadata;
}
public static Metadata createEmptyMetadataWithoutList(long taskId) {
Metadata metadata = new Metadata();
metadata.setKey(GtasksMetadata.METADATA_KEY);
metadata.setValue(ID, ""); //$NON-NLS-1$
metadata.setValue(PARENT_TASK, AbstractModel.NO_ID);
metadata.setValue(INDENT, 0);
metadata.setValue(ORDER, DateUtilities.now());

@ -49,19 +49,9 @@ public class SubtasksHelper {
}
public boolean shouldUseSubtasksFragmentForFilter(Filter filter) {
if(filter == null || BuiltInFilterExposer.isInbox(context, filter) || BuiltInFilterExposer.isTodayFilter(context, filter) || filter.isTagFilter()) {
if(preferences.getBoolean(R.string.p_manual_sort, false)) {
return true;
}
}
return false;
}
public static Class<?> subtasksClassForFilter(Filter filter) {
if (filter.isTagFilter()) {
return SubtasksTagListFragment.class;
}
return SubtasksListFragment.class;
return preferences.getBoolean(R.string.p_manual_sort, false) &&
filter != null &&
(BuiltInFilterExposer.isInbox(context, filter) || BuiltInFilterExposer.isTodayFilter(context, filter) || filter.isTagFilter());
}
public String applySubtasksToWidgetFilter(Filter filter, String query, String tagName, int limit) {

@ -9,11 +9,13 @@ import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.ListView;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.adapter.TaskAdapter;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.core.BuiltInFilterExposer;
import com.todoroo.astrid.dao.TaskAttachmentDao;
import com.todoroo.astrid.dao.TaskListMetadataDao;
@ -38,6 +40,12 @@ import javax.inject.Inject;
*/
public class SubtasksListFragment extends TaskListFragment {
public static TaskListFragment newSubtasksListFragment(Filter filter) {
SubtasksListFragment fragment = new SubtasksListFragment();
fragment.filter = filter;
return fragment;
}
protected OrderedListFragmentHelperInterface helper;
private int lastVisibleIndex = -1;
@ -67,8 +75,8 @@ public class SubtasksListFragment extends TaskListFragment {
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
helper.setUpUiComponents();
}

@ -8,10 +8,13 @@ package com.todoroo.astrid.subtasks;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.astrid.actfm.TagViewFragment;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.adapter.TaskAdapter;
import com.todoroo.astrid.api.TagFilter;
import com.todoroo.astrid.dao.TaskAttachmentDao;
import com.todoroo.astrid.dao.TaskListMetadataDao;
import com.todoroo.astrid.data.RemoteModel;
@ -30,6 +33,13 @@ import javax.inject.Inject;
public class SubtasksTagListFragment extends TagViewFragment {
public static TaskListFragment newSubtasksTagListFragment(TagFilter filter, TagData tagData) {
SubtasksTagListFragment fragment = new SubtasksTagListFragment();
fragment.filter = filter;
fragment.tagData = tagData;
return fragment;
}
@Inject TaskService taskService;
@Inject SubtasksFilterUpdater subtasksFilterUpdater;
@Inject TaskAttachmentDao taskAttachmentDao;
@ -55,30 +65,25 @@ public class SubtasksTagListFragment extends TagViewFragment {
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
helper.setUpUiComponents();
}
@Override
public void setTaskAdapter() {
helper.setList(initializeTaskListMetadata());
helper.beforeSetUpTaskList(filter);
super.setTaskAdapter();
}
private TaskListMetadata initializeTaskListMetadata() {
TagData td = getActiveTagData();
String tdId = td.getUuid();
TaskListMetadata taskListMetadata = taskListMetadataDao.fetchByTagId(td.getUuid(), TaskListMetadata.PROPERTIES);
String tdId = tagData.getUuid();
TaskListMetadata taskListMetadata = taskListMetadataDao.fetchByTagId(tagData.getUuid(), TaskListMetadata.PROPERTIES);
if (taskListMetadata == null && !RemoteModel.isUuidEmpty(tdId)) {
taskListMetadata = new TaskListMetadata();
taskListMetadata.setTagUUID(tdId);
taskListMetadataDao.createNew(taskListMetadata);
}
return taskListMetadata;
helper.setList(taskListMetadata);
helper.beforeSetUpTaskList(filter);
super.setTaskAdapter();
}
@Override

@ -5,26 +5,10 @@
*/
package com.todoroo.astrid.tags;
import android.content.ComponentName;
import android.content.ContentValues;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Field;
import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.astrid.actfm.TagViewFragment;
import com.google.common.base.Strings;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterWithCustomIntent;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.api.TagFilter;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
import org.tasks.R;
import org.tasks.injection.ForApplication;
import java.util.ArrayList;
import java.util.List;
@ -40,11 +24,9 @@ import javax.inject.Inject;
public class TagFilterExposer {
private final TagService tagService;
private final Context context;
@Inject
public TagFilterExposer(@ForApplication Context context, TagService tagService) {
this.context = context;
public TagFilterExposer(TagService tagService) {
this.tagService = tagService;
}
@ -58,67 +40,25 @@ public class TagFilterExposer {
}
public Filter getFilterByUuid(String uuid) {
return filterFromTagData(context, tagService.tagFromUUID(uuid));
return filterFromTag(tagService.tagFromUUID(uuid));
}
/** Create filter from new tag object */
public static FilterWithCustomIntent filterFromTag(Context context, TagData tag, Criterion criterion) {
if (tag == null) {
return null;
}
String title = tag.getName();
if (TextUtils.isEmpty(title)) {
public static TagFilter filterFromTag(TagData tag) {
if (tag == null || Strings.isNullOrEmpty(tag.getName())) {
return null;
}
QueryTemplate tagTemplate = queryTemplate(tag.getUuid(), criterion);
ContentValues contentValues = new ContentValues();
contentValues.put(Metadata.KEY.name, TaskToTagMetadata.KEY);
contentValues.put(TaskToTagMetadata.TAG_NAME.name, tag.getName());
contentValues.put(TaskToTagMetadata.TAG_UUID.name, tag.getUuid());
FilterWithCustomIntent filter = new FilterWithCustomIntent(title, tagTemplate, contentValues);
filter.customTaskList = new ComponentName(context, TagViewFragment.class);
Bundle extras = new Bundle();
extras.putString(TagViewFragment.EXTRA_TAG_NAME, tag.getName());
extras.putString(TagViewFragment.EXTRA_TAG_UUID, tag.getUuid());
filter.customExtras = extras;
return filter;
}
/** Create a filter from tag data object */
public static FilterWithCustomIntent filterFromTagData(Context context, TagData tagData) {
return filterFromTag(context, tagData, TaskCriteria.activeAndVisible());
return new TagFilter(tag);
}
private List<Filter> filterFromTags(List<TagData> tags) {
List<Filter> filters = new ArrayList<>();
int label = R.drawable.ic_label_24dp;
for (TagData tag : tags) {
Filter f = constructFilter(context, tag);
Filter f = filterFromTag(tag);
if (f != null) {
f.icon = label;
filters.add(f);
}
}
return filters;
}
private Filter constructFilter(Context context, TagData tag) {
return filterFromTag(context, tag, TaskCriteria.activeAndVisible());
}
private static QueryTemplate queryTemplate(String uuid, Criterion criterion) {
Criterion fullCriterion = Criterion.and(
Field.field("mtags." + Metadata.KEY.name).eq(TaskToTagMetadata.KEY),
Field.field("mtags." + TaskToTagMetadata.TAG_UUID.name).eq(uuid),
Field.field("mtags." + Metadata.DELETION_DATE.name).eq(0),
criterion);
return new QueryTemplate().join(Join.inner(Metadata.TABLE.as("mtags"), Task.UUID.eq(Field.field("mtags." + TaskToTagMetadata.TASK_UUID.name))))
.where(fullCriterion);
}
}

@ -7,7 +7,8 @@ import com.google.common.base.Strings;
import com.todoroo.astrid.actfm.TagViewFragment;
import com.todoroo.astrid.api.CustomFilter;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterWithCustomIntent;
import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.api.TagFilter;
import com.todoroo.astrid.core.BuiltInFilterExposer;
import com.todoroo.astrid.core.CustomFilterExposer;
import com.todoroo.astrid.gtasks.GtasksFilterExposer;
@ -117,9 +118,9 @@ public class DefaultFilterProvider {
case TYPE_CUSTOM_FILTER:
return getFilterPreference(filterType, ((CustomFilter) filter).getId());
case TYPE_TAG:
return getFilterPreference(filterType, ((FilterWithCustomIntent) filter).customExtras.getString(TagViewFragment.EXTRA_TAG_UUID));
return getFilterPreference(filterType, ((TagFilter) filter).getUuid());
case TYPE_GOOGLE_TASKS:
return getFilterPreference(filterType, ((FilterWithCustomIntent) filter).customExtras.getLong(GtasksListFragment.TOKEN_STORE_ID, 0L));
return getFilterPreference(filterType, ((GtasksFilter) filter).getStoreId());
}
return null;
}
@ -129,10 +130,10 @@ public class DefaultFilterProvider {
}
private int getFilterType(Filter filter) {
if (filter instanceof FilterWithCustomIntent) {
return filter.isTagFilter()
? TYPE_TAG
: TYPE_GOOGLE_TASKS;
if (filter instanceof TagFilter) {
return TYPE_TAG;
} else if (filter instanceof GtasksFilter) {
return TYPE_GOOGLE_TASKS;
} else if (filter instanceof CustomFilter) {
return TYPE_CUSTOM_FILTER;
}

Loading…
Cancel
Save