From 51324c9d2fb6dfe2a8d16b291bd4ca71e9b02e12 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Wed, 22 Feb 2012 00:04:07 -0800 Subject: [PATCH] Better inbox calculation --- .../astrid/core/CoreFilterExposer.java | 14 +++++++ .../astrid/subtasks/SubtasksListFragment.java | 40 ++++++++++++++++--- .../astrid/activity/AstridActivity.java | 3 +- .../astrid/activity/TaskListFragment.java | 10 ++--- 4 files changed, 52 insertions(+), 15 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/core/CoreFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/core/CoreFilterExposer.java index db66710ff..ad23a3286 100644 --- a/astrid/plugin-src/com/todoroo/astrid/core/CoreFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/core/CoreFilterExposer.java @@ -70,6 +70,20 @@ public final class CoreFilterExposer extends BroadcastReceiver implements Astrid return inbox; } + /** + * Is this the inbox? + * @param filter + * @return + */ + public static boolean isInbox(Filter filter) { + String title = ContextManager.getString(R.string.BFE_Active); + if(filter.listingIcon != null && + title.equals(filter.listingTitle) && + title.equals(filter.title)) + return true; + return false; + } + @Override public FilterListItem[] getFilters() { if (ContextManager.getContext() == null || ContextManager.getContext().getResources() == null) diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksListFragment.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksListFragment.java index 94a68a301..5b04e0a28 100644 --- a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksListFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksListFragment.java @@ -2,6 +2,9 @@ package com.todoroo.astrid.subtasks; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; @@ -28,6 +31,12 @@ import com.todoroo.astrid.data.Task; import com.todoroo.astrid.subtasks.OrderedListUpdater.OrderedListIterator; import com.todoroo.astrid.ui.DraggableListView; +/** + * Fragment for subtasks + * + * @author Tim Su + * + */ public class SubtasksListFragment extends TaskListFragment { private final DisplayMetrics metrics = new DisplayMetrics(); @@ -180,11 +189,30 @@ public class SubtasksListFragment extends TaskListFragment { return true; } - private void setCompletedForItemAndSubtasks(final Task item, boolean completedState) { + + + private void setCompletedForItemAndSubtasks(final Task item, final boolean completedState) { + final Map> chainedCompletions = + Collections.synchronizedMap(new HashMap>()); + final long itemId = item.getId(); - final boolean completed = completedState; - System.err.println("SET COMPLETED FOR " + itemId); + final Task task = new Task(); + task.setValue(Task.COMPLETION_DATE, completedState ? DateUtilities.now() : 0); + + if(completedState == false) { + ArrayList chained = chainedCompletions.get(itemId); + if(chained != null) { + for(Long taskId : chained) { + taskAdapter.getCompletedItems().put(taskId, false); + task.setId(taskId); + taskService.save(task); + } + taskAdapter.notifyDataSetInvalidated(); + } + return; + } + new Thread() { @Override public void run() { @@ -193,9 +221,8 @@ public class SubtasksListFragment extends TaskListFragment { final AtomicLong startOrder= new AtomicLong( item.getValue(SubtasksMetadata.ORDER)); final AtomicBoolean finished = new AtomicBoolean(false); - - final Task task = new Task(); - task.setValue(Task.COMPLETION_DATE, completed ? DateUtilities.now() : 0); + final ArrayList chained = new ArrayList(); + chainedCompletions.put(itemId, chained); updater.iterateThroughList(filter, SubtasksMetadata.LIST_ACTIVE_TASKS, new OrderedListIterator() { @Override @@ -218,6 +245,7 @@ public class SubtasksListFragment extends TaskListFragment { taskAdapter.getCompletedItems().put(taskId, true); task.setId(taskId); taskService.save(task); + chained.add(taskId); } }); getActivity().runOnUiThread(new Runnable() { diff --git a/astrid/src/com/todoroo/astrid/activity/AstridActivity.java b/astrid/src/com/todoroo/astrid/activity/AstridActivity.java index 85b365e94..f3a559c6f 100644 --- a/astrid/src/com/todoroo/astrid/activity/AstridActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/AstridActivity.java @@ -206,8 +206,7 @@ public class AstridActivity extends FragmentActivity Class customTaskList = TaskListFragment.class; System.err.println("default time"); //$NON-NLS-1$ - if(filter == null || filter.sqlQuery == - CoreFilterExposer.buildInboxFilter(getResources()).sqlQuery) { + if(filter == null || CoreFilterExposer.isInbox(filter)) { System.err.println("is inbox"); //$NON-NLS-1$ SharedPreferences publicPrefs = AstridPreferences.getPublicPrefs(this); int sortFlags = publicPrefs.getInt(SortHelper.PREF_SORT_FLAGS, 0); diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java b/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java index f39277536..735def5c6 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java @@ -353,14 +353,10 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, return; } else if (extras != null && extras.containsKey(TOKEN_FILTER)) { filter = extras.getParcelable(TOKEN_FILTER); - isInbox = false; - } - - Filter inbox = CoreFilterExposer.buildInboxFilter(getResources()); - if(filter == null || filter.sqlQuery == inbox.sqlQuery) { - filter = inbox; - isInbox = true; + } else { + filter = CoreFilterExposer.buildInboxFilter(getResources()); } + isInbox = CoreFilterExposer.isInbox(filter); setUpTaskList(); ((AstridActivity) getActivity()).setupActivityFragment(getActiveTagData());