diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/AstridOrderedListUpdater.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/AstridOrderedListUpdater.java index c0a4c100a..d8cf84285 100644 --- a/astrid/plugin-src/com/todoroo/astrid/subtasks/AstridOrderedListUpdater.java +++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/AstridOrderedListUpdater.java @@ -6,7 +6,6 @@ import java.util.List; import org.json.JSONArray; import org.json.JSONException; -import org.json.JSONObject; import android.util.Log; @@ -316,21 +315,20 @@ public abstract class AstridOrderedListUpdater { } private void recursivelyBuildChildren(Node node, JSONArray children) throws JSONException { - for (int i = 0; i < children.length(); i++) { - JSONObject childObj = children.getJSONObject(i); - JSONArray keys = childObj.names(); - if (keys == null) - continue; - - Long id = keys.getLong(0); - if (id <= 0) - continue; - - JSONArray childsChildren = childObj.getJSONArray(Long.toString(id)); - Node child = new Node(id, node, node.indent + 1); - recursivelyBuildChildren(child, childsChildren); - node.children.add(child); - idToNode.put(id, child); + for (int i = 1; i < children.length(); i++) { + JSONArray subarray = children.optJSONArray(i); + if (subarray == null) { + Long id = children.getLong(i); + Node child = new Node(id, node, node.indent + 1); + node.children.add(child); + idToNode.put(id, child); + } else { + Long id = subarray.getLong(0); + Node child = new Node(id, node, node.indent + 1); + recursivelyBuildChildren(child, subarray); + node.children.add(child); + idToNode.put(id, child); + } } } @@ -341,21 +339,25 @@ public abstract class AstridOrderedListUpdater { } try { - recursivelySerializeChildren(treeRoot, tree); + tree.put(-1L); + recursivelySerialize(treeRoot, tree); } catch (JSONException e) { Log.e("OrderedListUpdater", "Error serializing tree model", e); //$NON-NLS-1$//$NON-NLS-2$ } return tree.toString(); } - public static void recursivelySerializeChildren(Node node, JSONArray serializeTo) throws JSONException { + public static void recursivelySerialize(Node node, JSONArray serializeTo) throws JSONException { ArrayList children = node.children; + serializeTo.put(node.taskId); for (Node child : children) { - JSONObject childObj = new JSONObject(); - JSONArray childsChildren = new JSONArray(); - recursivelySerializeChildren(child, childsChildren); - childObj.put(Long.toString(child.taskId), childsChildren); - serializeTo.put(childObj); + if (child.children.size() > 0) { + JSONArray branch = new JSONArray(); + recursivelySerialize(child, branch); + serializeTo.put(branch); + } else { + serializeTo.put(child.taskId); + } } } } diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksMetadataMigration.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksMetadataMigration.java index ef2b91929..ca363f8b4 100644 --- a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksMetadataMigration.java +++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksMetadataMigration.java @@ -102,7 +102,7 @@ public class SubtasksMetadataMigration { try { JSONArray array = new JSONArray(); - AstridOrderedListUpdater.recursivelySerializeChildren(root, array); + AstridOrderedListUpdater.recursivelySerialize(root, array); return array.toString(); } catch (JSONException e) { return "[]"; //$NON-NLS-1$ diff --git a/tests/src/com/todoroo/astrid/subtasks/SubtasksMigrationTest.java b/tests/src/com/todoroo/astrid/subtasks/SubtasksMigrationTest.java index 1476d01f9..79f7554f2 100644 --- a/tests/src/com/todoroo/astrid/subtasks/SubtasksMigrationTest.java +++ b/tests/src/com/todoroo/astrid/subtasks/SubtasksMigrationTest.java @@ -95,8 +95,8 @@ public class SubtasksMigrationTest extends SubtasksTestCase { * A */ - private static final String ACTIVE_TASKS_TREE = "[{\"1\":[{\"2\":[]}]}, {\"3\":[{\"4\":[{\"5\":[]}]}, {\"6\":[]}]}]".replaceAll("\\s", ""); - private static final String TAG_DATA_TREE = "[{\"6\":[]}, {\"5\":[{\"2\":[]}, {\"4\":[{\"3\":[]}]}]}, {\"1\":[]}]".replaceAll("\\s", ""); + private static final String ACTIVE_TASKS_TREE = "[-1, [1, 2], [3, [4, 5], 6]]".replaceAll("\\s", ""); + private static final String TAG_DATA_TREE = "[-1, 6, [5, 2, [4,3]], 1]".replaceAll("\\s", ""); private void createAdvancedMetadata(TagData tagData) { createSubtasksMetadata(tagData, 6, 1, 0); diff --git a/tests/src/com/todoroo/astrid/subtasks/SubtasksTestCase.java b/tests/src/com/todoroo/astrid/subtasks/SubtasksTestCase.java index ac4fa5b6c..bd0112b56 100644 --- a/tests/src/com/todoroo/astrid/subtasks/SubtasksTestCase.java +++ b/tests/src/com/todoroo/astrid/subtasks/SubtasksTestCase.java @@ -26,8 +26,8 @@ public class SubtasksTestCase extends DatabaseTestCase { * E * F */ - public static final String DEFAULT_SERIALIZED_TREE = - "[{\"1\":[{\"2\":[]}, {\"3\":[{\"4\":[]}]}]}, {\"5\":[]}, {\"6\":[]}]".replaceAll("\\s", ""); + public static final String DEFAULT_SERIALIZED_TREE = "[-1, [1, 2, [3, 4]], 5, 6]".replaceAll("\\s", ""); + //"[{\"1\":[{\"2\":[]}, {\"3\":[{\"4\":[]}]}]}, {\"5\":[]}, {\"6\":[]}]".replaceAll("\\s", ""); @Override protected void setUp() throws Exception { diff --git a/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java b/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java index df78d600d..f8b0def93 100644 --- a/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java +++ b/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java @@ -7,6 +7,7 @@ package com.todoroo.astrid.test; import java.io.File; +import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.test.TodorooTestCaseWithInjector; import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.legacy.AlarmDatabase; @@ -38,6 +39,7 @@ public class DatabaseTestCase extends TodorooTestCaseWithInjector { super.setUp(); // empty out test databases + assertNotNull(ContextManager.getContext()); database.clear(); database.openForWriting();