From 8717d6c8b763db1d9f4ab95e568ccdbe7aaacd13 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Wed, 13 Feb 2013 11:32:34 -0800 Subject: [PATCH] Removed several references to tag_ordering and replaced with tasklistmetadata --- .../todoroo/astrid/data/TaskListMetadata.java | 13 ++++++++ .../todoroo/astrid/actfm/TagViewFragment.java | 5 +-- .../astrid/actfm/sync/messages/NameMaps.java | 1 - .../subtasks/SubtasksFilterUpdater.java | 19 +++++++----- .../astrid/subtasks/SubtasksListFragment.java | 5 +-- .../subtasks/SubtasksTagListFragment.java | 8 ++--- .../astrid/subtasks/SubtasksTagUpdater.java | 21 +++++-------- .../astrid/subtasks/SubtasksUpdater.java | 4 +-- .../astrid/activity/TaskListFragment.java | 31 +++++++++++++++++++ .../astrid/dao/TaskListMetadataDao.java | 10 ++++++ 10 files changed, 84 insertions(+), 33 deletions(-) diff --git a/api/src/com/todoroo/astrid/data/TaskListMetadata.java b/api/src/com/todoroo/astrid/data/TaskListMetadata.java index 4e0ecabd5..76d3662b1 100644 --- a/api/src/com/todoroo/astrid/data/TaskListMetadata.java +++ b/api/src/com/todoroo/astrid/data/TaskListMetadata.java @@ -86,6 +86,19 @@ public final class TaskListMetadata extends RemoteModel { /** List of all properties for this model */ public static final Property[] PROPERTIES = generateProperties(TaskListMetadata.class); + public static final String FILTER_ID_ALL = "all"; + public static final String FILTER_ID_TODAY = "today"; + public static final String FILTER_ID_NO_LIST = "nolist"; + public static final String FILTER_ID_ASSIGNED_BY_ME = "assigned"; + + public static final String SORT_AUTO = "auto"; + public static final String SORT_MANUAL = "manual"; + public static final String SORT_DUE = "due"; + public static final String SORT_CREATED = "created"; + public static final String SORT_COMPLETED = "completed"; + public static final String SORT_UPDATED = "updated"; + public static final String SORT_TITLE = "title"; + // --- defaults /** Default values container */ diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java index 80298c2d0..87cf659e2 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java @@ -83,8 +83,6 @@ import com.todoroo.astrid.welcome.HelpInfoPopover; public class TagViewFragment extends TaskListFragment { - private static final String LAST_FETCH_KEY = "tag-fetch-"; //$NON-NLS-1$ - public static final String BROADCAST_TAG_ACTIVITY = AstridApiConstants.API_PACKAGE + ".TAG_ACTIVITY"; //$NON-NLS-1$ public static final String EXTRA_TAG_NAME = "tag"; //$NON-NLS-1$ @@ -649,11 +647,14 @@ public class TagViewFragment extends TaskListFragment { tagData = tagDataService.fetchById(tagData.getId(), TagData.PROPERTIES); // refetch if (tagData == null) { // This can happen if a tag has been deleted as part of a sync + taskListMetadata = null; return; } else if (tagData.isDeleted()) { justDeleted = true; return; } + initializeTaskListMetadata(); + postLoadTagData(); filter = TagFilterExposer.filterFromTagData(getActivity(), tagData); getActivity().getIntent().putExtra(TOKEN_FILTER, filter); extras.putParcelable(TOKEN_FILTER, filter); diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/NameMaps.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/NameMaps.java index fd2ad350e..cc4244a64 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/NameMaps.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/NameMaps.java @@ -174,7 +174,6 @@ public class NameMaps { putTagPropertyToServerName(TagData.CREATION_DATE, "created_at", true); putTagPropertyToServerName(TagData.DELETION_DATE, "deleted_at", true); putTagPropertyToServerName(TagData.UUID, "uuid", false); - putTagPropertyToServerName(TagData.TAG_ORDERING, "tag_ordering", false); putTagPropertyToServerName(TagData.TASK_COUNT, "task_count", false); putTagPropertyToServerName(TagData.TAG_DESCRIPTION, "description", true); putTagPropertyToServerName(TagData.PICTURE, "picture", true); diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksFilterUpdater.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksFilterUpdater.java index 687428e2a..68cb45179 100644 --- a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksFilterUpdater.java +++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksFilterUpdater.java @@ -1,13 +1,15 @@ package com.todoroo.astrid.subtasks; -import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.api.Filter; +import com.todoroo.astrid.data.TaskListMetadata; -public class SubtasksFilterUpdater extends SubtasksUpdater { +public class SubtasksFilterUpdater extends SubtasksUpdater { @Override - protected String getSerializedTree(String list, Filter filter) { - String order = Preferences.getStringValue(list); + protected String getSerializedTree(TaskListMetadata list, Filter filter) { + if (list == null) + return "[]"; //$NON-NLS-1$ + String order = list.getValue(TaskListMetadata.TASK_IDS); if (order == null || "null".equals(order)) //$NON-NLS-1$ order = "[]"; //$NON-NLS-1$ @@ -15,10 +17,11 @@ public class SubtasksFilterUpdater extends SubtasksUpdater { } @Override - protected void writeSerialization(String list, String serialized, boolean shouldQueueSync) { - Preferences.setString(list, serialized); - if (shouldQueueSync) - actFmSyncService.pushFilterOrderingOnSave(list); + protected void writeSerialization(TaskListMetadata list, String serialized, boolean shouldQueueSync) { + if (list != null) { + list.setValue(TaskListMetadata.TASK_IDS, serialized); + taskListMetadataDao.saveExisting(list); + } } } diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksListFragment.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksListFragment.java index 373685f39..99811f691 100644 --- a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksListFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksListFragment.java @@ -14,6 +14,7 @@ import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.astrid.activity.TaskListFragment; import com.todoroo.astrid.adapter.TaskAdapter; import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.data.TaskListMetadata; /** * Fragment for subtasks @@ -32,8 +33,8 @@ public class SubtasksListFragment extends TaskListFragment { } protected OrderedListFragmentHelperInterface createFragmentHelper() { - AstridOrderedListFragmentHelper olfh = - new AstridOrderedListFragmentHelper(this, new SubtasksFilterUpdater()); + AstridOrderedListFragmentHelper olfh = + new AstridOrderedListFragmentHelper(this, new SubtasksFilterUpdater()); return olfh; } diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksTagListFragment.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksTagListFragment.java index 2707bf38f..a3766d965 100644 --- a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksTagListFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksTagListFragment.java @@ -12,21 +12,21 @@ import com.timsu.astrid.R; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.astrid.actfm.TagViewFragment; import com.todoroo.astrid.adapter.TaskAdapter; -import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.data.TaskListMetadata; public class SubtasksTagListFragment extends TagViewFragment { - private final AstridOrderedListFragmentHelper helper; + private final AstridOrderedListFragmentHelper helper; public SubtasksTagListFragment() { super(); - helper = new AstridOrderedListFragmentHelper(this, new SubtasksTagUpdater(isBeingFiltered)); + helper = new AstridOrderedListFragmentHelper(this, new SubtasksTagUpdater(isBeingFiltered)); } @Override protected void postLoadTagData() { - helper.setList(tagData); + helper.setList(taskListMetadata); } @Override diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksTagUpdater.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksTagUpdater.java index 17ad2c080..b995933e2 100644 --- a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksTagUpdater.java +++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksTagUpdater.java @@ -3,9 +3,9 @@ package com.todoroo.astrid.subtasks; import java.util.concurrent.atomic.AtomicBoolean; import com.todoroo.astrid.api.Filter; -import com.todoroo.astrid.data.TagData; +import com.todoroo.astrid.data.TaskListMetadata; -public class SubtasksTagUpdater extends SubtasksUpdater { +public class SubtasksTagUpdater extends SubtasksFilterUpdater { private final AtomicBoolean isBeingFiltered; @@ -14,23 +14,16 @@ public class SubtasksTagUpdater extends SubtasksUpdater { } @Override - protected String getSerializedTree(TagData list, Filter filter) { - if (list == null || isBeingFiltered.get()) + protected String getSerializedTree(TaskListMetadata list, Filter filter) { + if (isBeingFiltered.get()) return "[]"; //$NON-NLS-1$ - String order = list.getValue(TagData.TAG_ORDERING); - if (order == null || "null".equals(order)) //$NON-NLS-1$ - order = "[]"; //$NON-NLS-1$ - - return order; + return super.getSerializedTree(list, filter); } @Override - protected void writeSerialization(TagData list, String serialized, boolean shouldQueueSync) { + protected void writeSerialization(TaskListMetadata list, String serialized, boolean shouldQueueSync) { if (!isBeingFiltered.get()) { - list.setValue(TagData.TAG_ORDERING, serialized); - tagDataService.save(list); - if (shouldQueueSync) - actFmSyncService.pushTagOrderingOnSave(list.getId()); + super.writeSerialization(list, serialized, shouldQueueSync); } } diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksUpdater.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksUpdater.java index 5d8e40035..049271960 100644 --- a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksUpdater.java +++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksUpdater.java @@ -10,13 +10,13 @@ import com.todoroo.andlib.sql.Criterion; import com.todoroo.astrid.actfm.sync.ActFmSyncService; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.dao.TaskDao.TaskCriteria; +import com.todoroo.astrid.dao.TaskListMetadataDao; import com.todoroo.astrid.data.Task; -import com.todoroo.astrid.service.TagDataService; import com.todoroo.astrid.service.TaskService; public abstract class SubtasksUpdater extends AstridOrderedListUpdater { - @Autowired TagDataService tagDataService; + @Autowired TaskListMetadataDao taskListMetadataDao; @Autowired TaskService taskService; @Autowired ActFmSyncService actFmSyncService; diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java b/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java index aef953355..7c89ead02 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java @@ -83,10 +83,13 @@ import com.todoroo.astrid.core.CustomFilterActivity; import com.todoroo.astrid.core.CustomFilterExposer; import com.todoroo.astrid.core.SortHelper; import com.todoroo.astrid.dao.Database; +import com.todoroo.astrid.dao.TaskListMetadataDao; 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; +import com.todoroo.astrid.data.TaskListMetadata; import com.todoroo.astrid.data.User; import com.todoroo.astrid.helper.SyncActionHelper; import com.todoroo.astrid.helper.TaskListContextMenuExtensionLoader; @@ -180,6 +183,8 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, @Autowired TagDataService tagDataService; + @Autowired TaskListMetadataDao taskListMetadataDao; + @Autowired ActFmPreferenceService actFmPreferenceService; private final TaskContextActionExposer[] contextItemExposers = new TaskContextActionExposer[] { @@ -202,6 +207,7 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, protected Bundle extras; protected boolean isInbox; protected boolean isTodayFilter; + protected TaskListMetadata taskListMetadata; private final TaskListContextMenuExtensionLoader contextMenuExtensionLoader = new TaskListContextMenuExtensionLoader(); @@ -379,6 +385,10 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, return null; } + public TaskListMetadata getTaskListMetadata() { + return taskListMetadata; + } + protected void initializeData() { if (extras != null && extras.containsKey(TOKEN_FILTER)) { filter = extras.getParcelable(TOKEN_FILTER); @@ -392,12 +402,33 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, if (!isInbox) isTodayFilter = CustomFilterExposer.isTodayFilter(filter); + initializeTaskListMetadata(); + setUpTaskList(); ((AstridActivity) getActivity()).setupActivityFragment(getActiveTagData()); contextMenuExtensionLoader.loadInNewThread(getActivity()); } + protected void initializeTaskListMetadata() { + TagData td = getActiveTagData(); + String tdId; + if (td == null) { + if (isInbox) + taskListMetadata = taskListMetadataDao.fetchByTagId(TaskListMetadata.FILTER_ID_ALL, TaskListMetadata.PROPERTIES); + else if (isTodayFilter) + taskListMetadata = taskListMetadataDao.fetchByTagId(TaskListMetadata.FILTER_ID_TODAY, TaskListMetadata.PROPERTIES); + } else { + tdId = td.getUuid(); + taskListMetadata = taskListMetadataDao.fetchByTagId(td.getUuid(), TaskListMetadata.PROPERTIES); + if (taskListMetadata == null && !RemoteModel.isUuidEmpty(tdId)) { + taskListMetadata = new TaskListMetadata(); + taskListMetadata.setValue(TaskListMetadata.TAG_UUID, tdId); + taskListMetadataDao.createNew(taskListMetadata); + } + } + } + protected void addSyncRefreshMenuItem(Menu menu, int themeFlags) { addMenuItem(menu, R.string.TLA_menu_sync, ThemeService.getDrawable(R.drawable.icn_menu_refresh, themeFlags), MENU_SYNC_ID, true); diff --git a/astrid/src/com/todoroo/astrid/dao/TaskListMetadataDao.java b/astrid/src/com/todoroo/astrid/dao/TaskListMetadataDao.java index 9e5f7252c..216b64476 100644 --- a/astrid/src/com/todoroo/astrid/dao/TaskListMetadataDao.java +++ b/astrid/src/com/todoroo/astrid/dao/TaskListMetadataDao.java @@ -5,8 +5,12 @@ */ package com.todoroo.astrid.dao; +import com.todoroo.andlib.data.Property; +import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.DependencyInjectionService; +import com.todoroo.andlib.sql.Criterion; +import com.todoroo.andlib.sql.Query; import com.todoroo.astrid.actfm.sync.messages.NameMaps; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.TaskListMetadata; @@ -33,5 +37,11 @@ public class TaskListMetadataDao extends RemoteModelDao { return NameMaps.shouldRecordOutstandingColumnForTable(NameMaps.TABLE_ID_TASK_LIST_METADATA, columnName); } + public TaskListMetadata fetchByTagId(String tagUuid, Property...properties) { + TodorooCursor taskListMetadata = query(Query.select(properties).where(Criterion.or(TaskListMetadata.TAG_UUID.eq(tagUuid), + TaskListMetadata.FILTER.eq(tagUuid)))); + return returnFetchResult(taskListMetadata); + } + }