diff --git a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java index cba7d1cdd..c46a02443 100644 --- a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java +++ b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java @@ -83,7 +83,7 @@ public class GtasksTaskListUpdater extends OrderedListUpdater { } @Override - protected void onMetadataChanged(Metadata metadata) { + protected void onMovedOrIndented(Metadata metadata) { gtasksSyncService.triggerMoveForMetadata(metadata); } diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/OrderedListUpdater.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/OrderedListUpdater.java index 0c02bc8da..1527c3e4b 100644 --- a/astrid/plugin-src/com/todoroo/astrid/subtasks/OrderedListUpdater.java +++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/OrderedListUpdater.java @@ -55,9 +55,9 @@ abstract public class OrderedListUpdater { } /** - * @param targetTaskId + * @param metadata */ - protected void onMetadataChanged(Metadata metadata) { + protected void onMovedOrIndented(Metadata metadata) { // } @@ -133,6 +133,7 @@ abstract public class OrderedListUpdater { } }); + onMovedOrIndented(getTaskMetadata(list, targetTaskId)); } /** @@ -205,6 +206,7 @@ abstract public class OrderedListUpdater { } traverseTreeAndWriteValues(list, root, new AtomicLong(0), -1); + onMovedOrIndented(getTaskMetadata(list, targetTaskId)); } private boolean ancestorOf(Node ancestor, Node descendant) { @@ -233,9 +235,15 @@ abstract public class OrderedListUpdater { metadata = createEmptyMetadata(list, node.taskId); metadata.setValue(orderProperty(), order.getAndIncrement()); metadata.setValue(indentProperty(), indent); - if(parentProperty() != null) + boolean parentChanged = false; + if(parentProperty() != null && metadata.getValue(parentProperty()) != + node.parent.taskId) { + parentChanged = true; metadata.setValue(parentProperty(), node.parent.taskId); + } saveAndUpdateModifiedDate(metadata, node.taskId); + if(parentChanged) + onMovedOrIndented(metadata); } for(Node child : node.children) { @@ -303,7 +311,6 @@ abstract public class OrderedListUpdater { taskContainer.setValue(Task.DETAILS_DATE, DateUtilities.now()); PluginServices.getTaskService().save(taskContainer); taskContainer.clear(); - onMetadataChanged(metadata); } // --- task cascading operations @@ -348,8 +355,10 @@ abstract public class OrderedListUpdater { if(target != null && target.parent != null) { int targetIndex = target.parent.children.indexOf(target); target.parent.children.remove(targetIndex); - for(Node node : target.children) + for(Node node : target.children) { + node.parent = target.parent; target.parent.children.add(targetIndex++, node); + } } traverseTreeAndWriteValues(list, root, new AtomicLong(0), -1);