From df36dcc80835d66d837eb77ec2767dcd6764dc1e Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Wed, 31 Oct 2012 16:52:44 -0700 Subject: [PATCH] Updater should save tree state on change --- .../NewOrderedListFragmentHelper.java | 18 +++++---- .../subtasks/NewOrderedListUpdater.java | 38 ++++++++++++++----- 2 files changed, 38 insertions(+), 18 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/NewOrderedListFragmentHelper.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/NewOrderedListFragmentHelper.java index ab846f74f..7be52bc92 100644 --- a/astrid/plugin-src/com/todoroo/astrid/subtasks/NewOrderedListFragmentHelper.java +++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/NewOrderedListFragmentHelper.java @@ -121,14 +121,13 @@ public class NewOrderedListFragmentHelper { try { if(to >= getListView().getCount()) - updater.moveTo(targetTaskId, -1); + updater.moveTo(list, getFilter(), targetTaskId, -1); else - updater.moveTo(targetTaskId, destinationTaskId); + updater.moveTo(list, getFilter(), targetTaskId, destinationTaskId); } catch (Exception e) { Log.e("drag", "Drag Error", e); //$NON-NLS-1$ //$NON-NLS-2$ } - updater.writeSerialization(list, updater.serializeTree()); - updater.applyToFilter(getFilter()); + fragment.reconstructCursor(); fragment.loadTaskListContent(true); } @@ -149,12 +148,11 @@ public class NewOrderedListFragmentHelper { 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) try { - updater.indent(targetTaskId, delta); + updater.indent(list, getFilter(), targetTaskId, delta); } catch (Exception e) { Log.e("drag", "Indent Error", e); //$NON-NLS-1$ //$NON-NLS-2$ } - updater.writeSerialization(list, updater.serializeTree()); - updater.applyToFilter(getFilter()); + fragment.reconstructCursor(); fragment.loadTaskListContent(true); } @@ -308,8 +306,12 @@ public class NewOrderedListFragmentHelper { this.list = list; } + public void onAddTask(long taskId) { + updater.onAddTask(list, getFilter(), taskId); + } + public void onDeleteTask(Task task) { - updater.onDeleteTask(task.getId()); + updater.onDeleteTask(list, getFilter(), task.getId()); taskAdapter.notifyDataSetInvalidated(); } diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/NewOrderedListUpdater.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/NewOrderedListUpdater.java index a2b0f3d65..083aca54e 100644 --- a/astrid/plugin-src/com/todoroo/astrid/subtasks/NewOrderedListUpdater.java +++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/NewOrderedListUpdater.java @@ -31,7 +31,7 @@ public abstract class NewOrderedListUpdater { public void visitNode(Node node); } - protected static class Node { + public static class Node { public final long taskId; public Node parent; public int indent; @@ -127,12 +127,12 @@ public abstract class NewOrderedListUpdater { 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); - 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) return; if (delta == 0) @@ -168,6 +168,9 @@ public abstract class NewOrderedListUpdater { setNodeIndent(node, newParent.indent + 1); newSiblings.add(insertAfter + 1, node); } + + writeSerialization(list, serializeTree()); + applyToFilter(filter); } private void setNodeIndent(Node node, int indent) { @@ -182,13 +185,14 @@ public abstract class NewOrderedListUpdater { } } - public void moveTo(long targetTaskId, long beforeTaskId) { + public void moveTo(LIST list, Filter filter, long targetTaskId, long beforeTaskId) { Node target = idToNode.get(targetTaskId); if (target == null) return; if (beforeTaskId == -1) { - moveToEndOfList(target); + moveToEndOfList(list, filter, target); + return; } Node before = idToNode.get(beforeTaskId); @@ -196,10 +200,10 @@ public abstract class NewOrderedListUpdater { if (before == null) 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; ArrayList oldSiblings = oldParent.children; @@ -222,16 +226,27 @@ public abstract class NewOrderedListUpdater { beforeIndex--; } 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; parent.children.remove(moveThis); treeRoot.children.add(moveThis); 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); if (task == null) return; @@ -248,6 +263,9 @@ public abstract class NewOrderedListUpdater { index++; } idToNode.remove(taskId); + + writeSerialization(list, serializeTree()); + applyToFilter(filter); } private Node buildTreeModel(String serializedTree) {