Add a method to sanity check task list

pull/14/head
Tim Su 14 years ago
parent c844b8967a
commit ab101c15d0

@ -54,10 +54,12 @@ public class SubtasksListFragment extends TaskListFragment {
protected void setUpTaskList() { protected void setUpTaskList() {
updater.applySubtasksToFilter(filter, null); updater.applySubtasksToFilter(filter, null);
updater.sanitizeTaskList(filter, SubtasksMetadata.LIST_ACTIVE_TASKS);
super.setUpTaskList(); super.setUpTaskList();
unregisterForContextMenu(getListView()); unregisterForContextMenu(getListView());
} }
@Override @Override

@ -1,5 +1,8 @@
package com.todoroo.astrid.subtasks; package com.todoroo.astrid.subtasks;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import com.todoroo.andlib.data.Property.IntegerProperty; import com.todoroo.andlib.data.Property.IntegerProperty;
import com.todoroo.andlib.data.Property.LongProperty; import com.todoroo.andlib.data.Property.LongProperty;
import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.data.TodorooCursor;
@ -98,4 +101,32 @@ public class SubtasksUpdater extends OrderedListUpdater<String> {
filter.sqlQuery = query; filter.sqlQuery = query;
} }
} }
public void sanitizeTaskList(Filter filter, String list) {
final AtomicInteger previousIndent = new AtomicInteger(-1);
final AtomicLong previousOrder = new AtomicLong(-1);
iterateThroughList(filter, list, new OrderedListIterator() {
@Override
public void processTask(long taskId, Metadata metadata) {
if(!metadata.isSaved())
return;
long order = metadata.getValue(SubtasksMetadata.ORDER);
if(order <= previousOrder.get()) // bad
order = previousOrder.get() + 1;
int indent = metadata.getValue(SubtasksMetadata.INDENT);
if(indent > previousIndent.get() + 1) // bad
indent = previousIndent.get();
metadata.setValue(SubtasksMetadata.ORDER, order);
metadata.setValue(SubtasksMetadata.INDENT, indent);
saveAndUpdateModifiedDate(metadata, taskId);
previousIndent.set(indent);
previousOrder.set(order);
}
});
}
} }

Loading…
Cancel
Save