From 98d0c7ad974f781c6c7b310f3207e19e5c5a8050 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Thu, 30 Sep 2010 15:11:23 -0700 Subject: [PATCH] Now all order action tests pass! --- .../astrid/gtasks/GtasksOrderAction.java | 1 - .../astrid/gtasks/GtasksTaskListUpdater.java | 71 +++++++++---------- 2 files changed, 32 insertions(+), 40 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksOrderAction.java b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksOrderAction.java index 86775c250..bae7742f7 100644 --- a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksOrderAction.java +++ b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksOrderAction.java @@ -39,7 +39,6 @@ abstract public class GtasksOrderAction extends BroadcastReceiver { String listId = metadata.getValue(GtasksMetadata.LIST_ID); gtasksTaskListUpdater.move(listId, taskId, getDelta()); - gtasksTaskListUpdater.debugPrint(listId); Flags.set(Flags.REFRESH); } diff --git a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java index 82406a529..2a5623730 100644 --- a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java +++ b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java @@ -10,7 +10,6 @@ import android.text.TextUtils; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.DependencyInjectionService; -import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.core.PluginServices; @@ -120,59 +119,53 @@ public class GtasksTaskListUpdater { if(list == GtasksListService.LIST_NOT_FOUND_OBJECT) return; - siblings.clear(); - updateParentSiblingMapsFor(list); - + long taskToSwap = -1; if(delta == -1) { - final long priorTaskId; + // use sibling / parent map to figure out prior task + updateParentSiblingMapsFor(list); if(siblings.containsKey(targetTaskId) && siblings.get(targetTaskId) != -1L) - priorTaskId = siblings.get(targetTaskId); + taskToSwap = siblings.get(targetTaskId); else if(parents.containsKey(targetTaskId) && parents.get(targetTaskId) != -1L) - priorTaskId = parents.get(targetTaskId); - else - return; - - moveUp(list, targetTaskId, priorTaskId); + taskToSwap = parents.get(targetTaskId); } else { - // if we have a sibling reverse mapping, that is the next task - // else, it is the next task in order - - long nextTaskId = -1L; - Long nextSibling = AndroidUtilities.findKeyInMap(siblings, targetTaskId); - if(nextSibling != null) - nextTaskId = nextSibling; - else { - Filter filter = GtasksFilterExposer.filterFromList(list); - TodorooCursor cursor = PluginServices.getTaskService().fetchFiltered(filter.sqlQuery, null, Task.ID); - try { - for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { - long taskId = cursor.getLong(0); - if(taskId == targetTaskId) { - cursor.moveToNext(); - if(!cursor.isAfterLast()) { - nextTaskId = cursor.getLong(0); - break; - } + // walk through to find the next task + Filter filter = GtasksFilterExposer.filterFromList(list); + TodorooCursor cursor = PluginServices.getTaskService().fetchFiltered(filter.sqlQuery, null, Task.ID); + try { + int targetIndent = -1; + for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { + long taskId = cursor.getLong(0); + + if(targetIndent != -1) { + Metadata metadata = gtasksMetadataService.getTaskMetadata(taskId); + if(metadata.getValue(GtasksMetadata.INDENT) <= targetIndent) { + taskToSwap = taskId; + break; } + } else if(taskId == targetTaskId) { + Metadata metadata = gtasksMetadataService.getTaskMetadata(taskId); + targetIndent = metadata.getValue(GtasksMetadata.INDENT); } - } finally { - cursor.close(); } + } finally { + cursor.close(); } + } - if(nextTaskId == -1L) - return; + if(taskToSwap == -1L) + return; + if(delta == -1) { + moveUp(list, targetTaskId, taskToSwap); + } else { + // adjust indent of target task to task to swap Metadata targetTask = gtasksMetadataService.getTaskMetadata(targetTaskId); - Metadata nextTask = gtasksMetadataService.getTaskMetadata(nextTaskId); - + Metadata nextTask = gtasksMetadataService.getTaskMetadata(taskToSwap); int targetIndent = targetTask.getValue(GtasksMetadata.INDENT); int nextIndent = nextTask.getValue(GtasksMetadata.INDENT); - if(targetIndent != nextIndent) indent(listId, targetTaskId, nextIndent - targetIndent); - - moveUp(list, nextTaskId, targetTaskId); + moveUp(list, taskToSwap, targetTaskId); } }