Updater should save tree state on change

pull/14/head
Sam Bosley 13 years ago
parent 9a5a6afd3e
commit df36dcc808

@ -121,14 +121,13 @@ public class NewOrderedListFragmentHelper<LIST> {
try { try {
if(to >= getListView().getCount()) if(to >= getListView().getCount())
updater.moveTo(targetTaskId, -1); updater.moveTo(list, getFilter(), targetTaskId, -1);
else else
updater.moveTo(targetTaskId, destinationTaskId); updater.moveTo(list, getFilter(), targetTaskId, destinationTaskId);
} catch (Exception e) { } catch (Exception e) {
Log.e("drag", "Drag Error", e); //$NON-NLS-1$ //$NON-NLS-2$ Log.e("drag", "Drag Error", e); //$NON-NLS-1$ //$NON-NLS-2$
} }
updater.writeSerialization(list, updater.serializeTree());
updater.applyToFilter(getFilter());
fragment.reconstructCursor(); fragment.reconstructCursor();
fragment.loadTaskListContent(true); fragment.loadTaskListContent(true);
} }
@ -149,12 +148,11 @@ public class NewOrderedListFragmentHelper<LIST> {
long targetTaskId = taskAdapter.getItemId(which); long targetTaskId = taskAdapter.getItemId(which);
if (targetTaskId <= 0) return; // This can happen with gestures on empty parts of the list (e.g. extra space below tasks) if (targetTaskId <= 0) return; // This can happen with gestures on empty parts of the list (e.g. extra space below tasks)
try { try {
updater.indent(targetTaskId, delta); updater.indent(list, getFilter(), targetTaskId, delta);
} catch (Exception e) { } catch (Exception e) {
Log.e("drag", "Indent Error", e); //$NON-NLS-1$ //$NON-NLS-2$ Log.e("drag", "Indent Error", e); //$NON-NLS-1$ //$NON-NLS-2$
} }
updater.writeSerialization(list, updater.serializeTree());
updater.applyToFilter(getFilter());
fragment.reconstructCursor(); fragment.reconstructCursor();
fragment.loadTaskListContent(true); fragment.loadTaskListContent(true);
} }
@ -308,8 +306,12 @@ public class NewOrderedListFragmentHelper<LIST> {
this.list = list; this.list = list;
} }
public void onAddTask(long taskId) {
updater.onAddTask(list, getFilter(), taskId);
}
public void onDeleteTask(Task task) { public void onDeleteTask(Task task) {
updater.onDeleteTask(task.getId()); updater.onDeleteTask(list, getFilter(), task.getId());
taskAdapter.notifyDataSetInvalidated(); taskAdapter.notifyDataSetInvalidated();
} }

@ -31,7 +31,7 @@ public abstract class NewOrderedListUpdater<LIST> {
public void visitNode(Node node); public void visitNode(Node node);
} }
protected static class Node { public static class Node {
public final long taskId; public final long taskId;
public Node parent; public Node parent;
public int indent; public int indent;
@ -127,12 +127,12 @@ public abstract class NewOrderedListUpdater<LIST> {
applyToDescendantsHelper(treeRoot, visitor); applyToDescendantsHelper(treeRoot, visitor);
} }
public void indent(long targetTaskId, int delta) { public void indent(LIST list, Filter filter, long targetTaskId, int delta) {
Node node = idToNode.get(targetTaskId); Node node = idToNode.get(targetTaskId);
indentHelper(node, delta); indentHelper(list, filter, node, delta);
} }
private void indentHelper(Node node, int delta) { private void indentHelper(LIST list, Filter filter, Node node, int delta) {
if (node == null) if (node == null)
return; return;
if (delta == 0) if (delta == 0)
@ -168,6 +168,9 @@ public abstract class NewOrderedListUpdater<LIST> {
setNodeIndent(node, newParent.indent + 1); setNodeIndent(node, newParent.indent + 1);
newSiblings.add(insertAfter + 1, node); newSiblings.add(insertAfter + 1, node);
} }
writeSerialization(list, serializeTree());
applyToFilter(filter);
} }
private void setNodeIndent(Node node, int indent) { private void setNodeIndent(Node node, int indent) {
@ -182,13 +185,14 @@ public abstract class NewOrderedListUpdater<LIST> {
} }
} }
public void moveTo(long targetTaskId, long beforeTaskId) { public void moveTo(LIST list, Filter filter, long targetTaskId, long beforeTaskId) {
Node target = idToNode.get(targetTaskId); Node target = idToNode.get(targetTaskId);
if (target == null) if (target == null)
return; return;
if (beforeTaskId == -1) { if (beforeTaskId == -1) {
moveToEndOfList(target); moveToEndOfList(list, filter, target);
return;
} }
Node before = idToNode.get(beforeTaskId); Node before = idToNode.get(beforeTaskId);
@ -196,10 +200,10 @@ public abstract class NewOrderedListUpdater<LIST> {
if (before == null) if (before == null)
return; return;
moveHelper(target, before); moveHelper(list, filter, target, before);
} }
private void moveHelper(Node moveThis, Node beforeThis) { private void moveHelper(LIST list, Filter filter, Node moveThis, Node beforeThis) {
Node oldParent = moveThis.parent; Node oldParent = moveThis.parent;
ArrayList<Node> oldSiblings = oldParent.children; ArrayList<Node> oldSiblings = oldParent.children;
@ -222,16 +226,27 @@ public abstract class NewOrderedListUpdater<LIST> {
beforeIndex--; beforeIndex--;
} }
newSiblings.add(beforeIndex, moveThis); newSiblings.add(beforeIndex, moveThis);
writeSerialization(list, serializeTree());
applyToFilter(filter);
} }
private void moveToEndOfList(Node moveThis) { private void moveToEndOfList(LIST list, Filter filter, Node moveThis) {
Node parent = moveThis.parent; Node parent = moveThis.parent;
parent.children.remove(moveThis); parent.children.remove(moveThis);
treeRoot.children.add(moveThis); treeRoot.children.add(moveThis);
moveThis.parent = treeRoot; moveThis.parent = treeRoot;
writeSerialization(list, serializeTree());
applyToFilter(filter);
} }
public void onDeleteTask(long taskId) { public void onAddTask(LIST list, Filter filter, long taskId) {
Node newNode = new Node(taskId, treeRoot, 0);
treeRoot.children.add(newNode);
writeSerialization(list, serializeTree());
applyToFilter(filter);
}
public void onDeleteTask(LIST list, Filter filter, long taskId) {
Node task = idToNode.get(taskId); Node task = idToNode.get(taskId);
if (task == null) if (task == null)
return; return;
@ -248,6 +263,9 @@ public abstract class NewOrderedListUpdater<LIST> {
index++; index++;
} }
idToNode.remove(taskId); idToNode.remove(taskId);
writeSerialization(list, serializeTree());
applyToFilter(filter);
} }
private Node buildTreeModel(String serializedTree) { private Node buildTreeModel(String serializedTree) {

Loading…
Cancel
Save