On completed, complete all subtasks

pull/14/head
Tim Su 14 years ago
parent 9cff87724e
commit d586f0d3e4

@ -2,6 +2,8 @@ package com.todoroo.astrid.subtasks;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import android.database.Cursor;
@ -16,9 +18,13 @@ import com.commonsware.cwac.tlv.TouchListView.SwipeListener;
import com.timsu.astrid.R;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.adapter.TaskAdapter;
import com.todoroo.astrid.adapter.TaskAdapter.OnCompletedTaskListener;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.subtasks.OrderedListUpdater.OrderedListIterator;
import com.todoroo.astrid.ui.DraggableListView;
public class SubtasksListFragment extends TaskListFragment {
@ -118,8 +124,17 @@ public class SubtasksListFragment extends TaskListFragment {
@Override
protected TaskAdapter createTaskAdapter(TodorooCursor<Task> cursor) {
return new DraggableTaskAdapter(this, R.layout.task_adapter_row,
taskAdapter = new DraggableTaskAdapter(this, R.layout.task_adapter_row,
cursor, sqlQueryTemplate, false, null);
taskAdapter.addOnCompletedTaskListener(new OnCompletedTaskListener() {
@Override
public void onCompletedTask(Task item, boolean newState) {
setCompletedForItemAndSubtasks(item, newState);
}
});
return taskAdapter;
}
private final class DraggableTaskAdapter extends TaskAdapter {
@ -159,4 +174,46 @@ public class SubtasksListFragment extends TaskListFragment {
}
private void setCompletedForItemAndSubtasks(Task item, boolean completedState) {
final long itemId = item.getId();
final boolean completed = completedState;
new Thread() {
@Override
public void run() {
final AtomicInteger startIndent = new AtomicInteger(-1);
final AtomicBoolean finished = new AtomicBoolean(false);
final Task task = new Task();
task.setValue(Task.COMPLETION_DATE, completed ? DateUtilities.now() : 0);
updater.iterateThroughList(filter, SubtasksMetadata.LIST_ACTIVE_TASKS, new OrderedListIterator() {
@Override
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) {
startIndent.set(indent);
return;
} else if(indent == startIndent.get()) {
finished.set(true);
return;
}
task.setId(taskId);
taskService.save(task);
}
});
getActivity().runOnUiThread(new Runnable() {
public void run() {
loadTaskListContent(true);
}
});
}
}.start();
}
}

@ -1182,6 +1182,7 @@ public class TaskListFragment extends ListFragment implements OnScrollListener,
TasksWidget.WidgetUpdateService.class));
}
((AstridActivity)getActivity()).onFilterItemClicked(getFilter());
Filter newFilter = isInbox ? null : filter;
((AstridActivity)getActivity()).onFilterItemClicked(newFilter);
}
}

Loading…
Cancel
Save