diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagUpdatesFragment.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagUpdatesFragment.java index 9c24c604e..2373f5131 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagUpdatesFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagUpdatesFragment.java @@ -199,7 +199,7 @@ public class TagUpdatesFragment extends ListFragment { String fromUpdateClass = (tagData == null) ? UpdateAdapter.FROM_RECENT_ACTIVITY_VIEW : UpdateAdapter.FROM_TAG_VIEW; updateAdapter = new UpdateAdapter(this, R.layout.update_adapter_row, - currentCursor, false, null, fromUpdateClass); + currentCursor, false, fromUpdateClass); ListView listView = ((ListView) getView().findViewById(android.R.id.list)); addHeaderToListView(listView); listView.setAdapter(updateAdapter); diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/OrderedListUpdater.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/OrderedListUpdater.java index 5af1ac94f..44306e984 100644 --- a/astrid/plugin-src/com/todoroo/astrid/subtasks/OrderedListUpdater.java +++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/OrderedListUpdater.java @@ -180,7 +180,7 @@ abstract public class OrderedListUpdater { } } - traverseTreeAndWriteValues(list, root, new AtomicLong(0), -1); + traverseTreeAndWriteValues(list, root, new AtomicLong(1), -1); } private boolean ancestorOf(Node ancestor, Node descendant) { diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksFragmentHelper.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksFragmentHelper.java index 43ad8eef8..bdd9c4045 100644 --- a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksFragmentHelper.java +++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksFragmentHelper.java @@ -6,8 +6,6 @@ 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; import java.util.concurrent.atomic.AtomicReference; import android.app.Activity; @@ -217,10 +215,10 @@ public class SubtasksFragmentHelper { } } + private final Map> chainedCompletions = + Collections.synchronizedMap(new HashMap>()); private void setCompletedForItemAndSubtasks(final Task item, final boolean completedState) { - final Map> chainedCompletions = - Collections.synchronizedMap(new HashMap>()); final long itemId = item.getId(); @@ -240,48 +238,38 @@ public class SubtasksFragmentHelper { return; } - new Thread() { + final int startIndent = item.getValue(SubtasksMetadata.INDENT); + final AtomicBoolean started = new AtomicBoolean(false); + final AtomicBoolean finished = new AtomicBoolean(false); + final ArrayList chained = new ArrayList(); + chainedCompletions.put(itemId, chained); + + updater.iterateThroughList(getFilter(), list, new OrderedListIterator() { @Override - public void run() { - final AtomicInteger startIndent = new AtomicInteger( - item.getValue(SubtasksMetadata.INDENT)); - final AtomicLong startOrder= new AtomicLong( - item.getValue(SubtasksMetadata.ORDER)); - final AtomicBoolean finished = new AtomicBoolean(false); - final ArrayList chained = new ArrayList(); - chainedCompletions.put(itemId, chained); - - updater.iterateThroughList(getFilter(), list, new OrderedListIterator() { - @Override - public void processTask(long taskId, Metadata metadata) { - if(finished.get()) - return; - - long order = metadata.containsNonNullValue(SubtasksMetadata.ORDER) ? - metadata.getValue(SubtasksMetadata.ORDER) : 0; - int indent = metadata.containsNonNullValue(SubtasksMetadata.INDENT) ? - metadata.getValue(SubtasksMetadata.INDENT) : 0; - - if(order < startOrder.get()) - return; - else if(indent == startIndent.get()) { - finished.set(true); - return; - } - - taskAdapter.getCompletedItems().put(taskId, true); - task.setId(taskId); - taskService.save(task); - chained.add(taskId); - } - }); - getActivity().runOnUiThread(new Runnable() { - public void run() { - taskAdapter.notifyDataSetInvalidated(); - } - }); + public void processTask(long taskId, Metadata metadata) { + if(finished.get()) + return; + + int indent = metadata.containsNonNullValue(SubtasksMetadata.INDENT) ? + metadata.getValue(SubtasksMetadata.INDENT) : 0; + + if(taskId == itemId){ + started.set(true); + return; + } else if(!started.get()) + return; + else if(indent <= startIndent) { + finished.set(true); + return; + } + + taskAdapter.getCompletedItems().put(taskId, true); + task.setId(taskId); + taskService.save(task); + chained.add(taskId); } - }.start(); + }); + taskAdapter.notifyDataSetInvalidated(); } public void setList(String list) { diff --git a/astrid/res/values/styles.xml b/astrid/res/values/styles.xml index 3b7810ef7..49daeb5b5 100644 --- a/astrid/res/values/styles.xml +++ b/astrid/res/values/styles.xml @@ -68,7 +68,7 @@ #ffffff @drawable/edit_titlebar_white #d0d0d0 - #bbbbbb + #cccccc @drawable/plus_button_red @drawable/mic_button_red @drawable/comment_red diff --git a/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java b/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java index fb11a3321..05fb2b961 100644 --- a/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java +++ b/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java @@ -1082,12 +1082,12 @@ public class TaskAdapter extends CursorAdapter implements Filterable { return; if (newState != task.isCompleted()) { - completedItems.put(task.getId(), newState); - taskService.setComplete(task, newState); - if(onCompletedTaskListener != null) onCompletedTaskListener.onCompletedTask(task, newState); + completedItems.put(task.getId(), newState); + taskService.setComplete(task, newState); + if(newState) StatisticsService.reportEvent(StatisticsConstants.TASK_COMPLETED_V2); } diff --git a/astrid/src/com/todoroo/astrid/adapter/UpdateAdapter.java b/astrid/src/com/todoroo/astrid/adapter/UpdateAdapter.java index 1ead3861e..8dde76499 100644 --- a/astrid/src/com/todoroo/astrid/adapter/UpdateAdapter.java +++ b/astrid/src/com/todoroo/astrid/adapter/UpdateAdapter.java @@ -32,12 +32,11 @@ import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; -import com.todoroo.astrid.adapter.TaskAdapter.OnCompletedTaskListener; import com.todoroo.astrid.data.Update; import com.todoroo.astrid.helper.ImageDiskCache; /** - * Adapter for displaying a user's goals as a list + * Adapter for displaying a user's activity * * @author Tim Su * @@ -82,7 +81,7 @@ public class UpdateAdapter extends CursorAdapter { */ public UpdateAdapter(Fragment fragment, int resource, Cursor c, boolean autoRequery, - OnCompletedTaskListener onCompletedTaskListener, String fromView) { + String fromView) { super(fragment.getActivity(), c, autoRequery); DependencyInjectionService.getInstance().inject(this);