Fix for chained completion not working when tasks didn't have an order. Now onTaskComplete fires before actual thing is saved into the database.

pull/14/head
Tim Su 14 years ago
parent 984958adcd
commit b9f30c7d61

@ -199,7 +199,7 @@ public class TagUpdatesFragment extends ListFragment {
String fromUpdateClass = (tagData == null) ? UpdateAdapter.FROM_RECENT_ACTIVITY_VIEW : UpdateAdapter.FROM_TAG_VIEW; String fromUpdateClass = (tagData == null) ? UpdateAdapter.FROM_RECENT_ACTIVITY_VIEW : UpdateAdapter.FROM_TAG_VIEW;
updateAdapter = new UpdateAdapter(this, R.layout.update_adapter_row, 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)); ListView listView = ((ListView) getView().findViewById(android.R.id.list));
addHeaderToListView(listView); addHeaderToListView(listView);
listView.setAdapter(updateAdapter); listView.setAdapter(updateAdapter);

@ -180,7 +180,7 @@ abstract public class OrderedListUpdater<LIST> {
} }
} }
traverseTreeAndWriteValues(list, root, new AtomicLong(0), -1); traverseTreeAndWriteValues(list, root, new AtomicLong(1), -1);
} }
private boolean ancestorOf(Node ancestor, Node descendant) { private boolean ancestorOf(Node ancestor, Node descendant) {

@ -6,8 +6,6 @@ import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean; 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 java.util.concurrent.atomic.AtomicReference;
import android.app.Activity; import android.app.Activity;
@ -217,10 +215,10 @@ public class SubtasksFragmentHelper {
} }
} }
private final Map<Long, ArrayList<Long>> chainedCompletions =
Collections.synchronizedMap(new HashMap<Long, ArrayList<Long>>());
private void setCompletedForItemAndSubtasks(final Task item, final boolean completedState) { private void setCompletedForItemAndSubtasks(final Task item, final boolean completedState) {
final Map<Long, ArrayList<Long>> chainedCompletions =
Collections.synchronizedMap(new HashMap<Long, ArrayList<Long>>());
final long itemId = item.getId(); final long itemId = item.getId();
@ -240,13 +238,8 @@ public class SubtasksFragmentHelper {
return; return;
} }
new Thread() { final int startIndent = item.getValue(SubtasksMetadata.INDENT);
@Override final AtomicBoolean started = new AtomicBoolean(false);
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 AtomicBoolean finished = new AtomicBoolean(false);
final ArrayList<Long> chained = new ArrayList<Long>(); final ArrayList<Long> chained = new ArrayList<Long>();
chainedCompletions.put(itemId, chained); chainedCompletions.put(itemId, chained);
@ -257,14 +250,15 @@ public class SubtasksFragmentHelper {
if(finished.get()) if(finished.get())
return; return;
long order = metadata.containsNonNullValue(SubtasksMetadata.ORDER) ?
metadata.getValue(SubtasksMetadata.ORDER) : 0;
int indent = metadata.containsNonNullValue(SubtasksMetadata.INDENT) ? int indent = metadata.containsNonNullValue(SubtasksMetadata.INDENT) ?
metadata.getValue(SubtasksMetadata.INDENT) : 0; metadata.getValue(SubtasksMetadata.INDENT) : 0;
if(order < startOrder.get()) if(taskId == itemId){
started.set(true);
return;
} else if(!started.get())
return; return;
else if(indent == startIndent.get()) { else if(indent <= startIndent) {
finished.set(true); finished.set(true);
return; return;
} }
@ -275,14 +269,8 @@ public class SubtasksFragmentHelper {
chained.add(taskId); chained.add(taskId);
} }
}); });
getActivity().runOnUiThread(new Runnable() {
public void run() {
taskAdapter.notifyDataSetInvalidated(); taskAdapter.notifyDataSetInvalidated();
} }
});
}
}.start();
}
public void setList(String list) { public void setList(String list) {
this.list = list; this.list = list;

@ -68,7 +68,7 @@
<item name="asFilterHeaderColor">#ffffff</item> <item name="asFilterHeaderColor">#ffffff</item>
<item name="asFilterHeaderBackground">@drawable/edit_titlebar_white</item> <item name="asFilterHeaderBackground">@drawable/edit_titlebar_white</item>
<item name="asMembersHeaderBackground">#d0d0d0</item> <item name="asMembersHeaderBackground">#d0d0d0</item>
<item name="asListDividerColor">#bbbbbb</item> <item name="asListDividerColor">#cccccc</item>
<item name="asAddButtonImg">@drawable/plus_button_red</item> <item name="asAddButtonImg">@drawable/plus_button_red</item>
<item name="asMicButtonImg">@drawable/mic_button_red</item> <item name="asMicButtonImg">@drawable/mic_button_red</item>
<item name="asCommentButtonImg">@drawable/comment_red</item> <item name="asCommentButtonImg">@drawable/comment_red</item>

@ -1082,12 +1082,12 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
return; return;
if (newState != task.isCompleted()) { if (newState != task.isCompleted()) {
completedItems.put(task.getId(), newState);
taskService.setComplete(task, newState);
if(onCompletedTaskListener != null) if(onCompletedTaskListener != null)
onCompletedTaskListener.onCompletedTask(task, newState); onCompletedTaskListener.onCompletedTask(task, newState);
completedItems.put(task.getId(), newState);
taskService.setComplete(task, newState);
if(newState) if(newState)
StatisticsService.reportEvent(StatisticsConstants.TASK_COMPLETED_V2); StatisticsService.reportEvent(StatisticsConstants.TASK_COMPLETED_V2);
} }

@ -32,12 +32,11 @@ import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
import com.todoroo.astrid.adapter.TaskAdapter.OnCompletedTaskListener;
import com.todoroo.astrid.data.Update; import com.todoroo.astrid.data.Update;
import com.todoroo.astrid.helper.ImageDiskCache; 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 <tim@todoroo.com> * @author Tim Su <tim@todoroo.com>
* *
@ -82,7 +81,7 @@ public class UpdateAdapter extends CursorAdapter {
*/ */
public UpdateAdapter(Fragment fragment, int resource, public UpdateAdapter(Fragment fragment, int resource,
Cursor c, boolean autoRequery, Cursor c, boolean autoRequery,
OnCompletedTaskListener onCompletedTaskListener, String fromView) { String fromView) {
super(fragment.getActivity(), c, autoRequery); super(fragment.getActivity(), c, autoRequery);
DependencyInjectionService.getInstance().inject(this); DependencyInjectionService.getInstance().inject(this);

Loading…
Cancel
Save