|
|
@ -10,7 +10,6 @@ import android.text.TextUtils;
|
|
|
|
import com.todoroo.andlib.data.TodorooCursor;
|
|
|
|
import com.todoroo.andlib.data.TodorooCursor;
|
|
|
|
import com.todoroo.andlib.service.Autowired;
|
|
|
|
import com.todoroo.andlib.service.Autowired;
|
|
|
|
import com.todoroo.andlib.service.DependencyInjectionService;
|
|
|
|
import com.todoroo.andlib.service.DependencyInjectionService;
|
|
|
|
import com.todoroo.andlib.utility.AndroidUtilities;
|
|
|
|
|
|
|
|
import com.todoroo.andlib.utility.DateUtilities;
|
|
|
|
import com.todoroo.andlib.utility.DateUtilities;
|
|
|
|
import com.todoroo.astrid.api.Filter;
|
|
|
|
import com.todoroo.astrid.api.Filter;
|
|
|
|
import com.todoroo.astrid.core.PluginServices;
|
|
|
|
import com.todoroo.astrid.core.PluginServices;
|
|
|
@ -120,59 +119,53 @@ public class GtasksTaskListUpdater {
|
|
|
|
if(list == GtasksListService.LIST_NOT_FOUND_OBJECT)
|
|
|
|
if(list == GtasksListService.LIST_NOT_FOUND_OBJECT)
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
siblings.clear();
|
|
|
|
long taskToSwap = -1;
|
|
|
|
updateParentSiblingMapsFor(list);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(delta == -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)
|
|
|
|
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)
|
|
|
|
else if(parents.containsKey(targetTaskId) && parents.get(targetTaskId) != -1L)
|
|
|
|
priorTaskId = parents.get(targetTaskId);
|
|
|
|
taskToSwap = parents.get(targetTaskId);
|
|
|
|
else
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
moveUp(list, targetTaskId, priorTaskId);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
// if we have a sibling reverse mapping, that is the next task
|
|
|
|
// walk through to find the next task
|
|
|
|
// else, it is the next task in order
|
|
|
|
Filter filter = GtasksFilterExposer.filterFromList(list);
|
|
|
|
|
|
|
|
TodorooCursor<Task> cursor = PluginServices.getTaskService().fetchFiltered(filter.sqlQuery, null, Task.ID);
|
|
|
|
long nextTaskId = -1L;
|
|
|
|
try {
|
|
|
|
Long nextSibling = AndroidUtilities.findKeyInMap(siblings, targetTaskId);
|
|
|
|
int targetIndent = -1;
|
|
|
|
if(nextSibling != null)
|
|
|
|
for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
|
|
|
|
nextTaskId = nextSibling;
|
|
|
|
long taskId = cursor.getLong(0);
|
|
|
|
else {
|
|
|
|
|
|
|
|
Filter filter = GtasksFilterExposer.filterFromList(list);
|
|
|
|
if(targetIndent != -1) {
|
|
|
|
TodorooCursor<Task> cursor = PluginServices.getTaskService().fetchFiltered(filter.sqlQuery, null, Task.ID);
|
|
|
|
Metadata metadata = gtasksMetadataService.getTaskMetadata(taskId);
|
|
|
|
try {
|
|
|
|
if(metadata.getValue(GtasksMetadata.INDENT) <= targetIndent) {
|
|
|
|
for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
|
|
|
|
taskToSwap = taskId;
|
|
|
|
long taskId = cursor.getLong(0);
|
|
|
|
break;
|
|
|
|
if(taskId == targetTaskId) {
|
|
|
|
|
|
|
|
cursor.moveToNext();
|
|
|
|
|
|
|
|
if(!cursor.isAfterLast()) {
|
|
|
|
|
|
|
|
nextTaskId = cursor.getLong(0);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
} else if(taskId == targetTaskId) {
|
|
|
|
|
|
|
|
Metadata metadata = gtasksMetadataService.getTaskMetadata(taskId);
|
|
|
|
|
|
|
|
targetIndent = metadata.getValue(GtasksMetadata.INDENT);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} finally {
|
|
|
|
|
|
|
|
cursor.close();
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
|
|
cursor.close();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(nextTaskId == -1L)
|
|
|
|
if(taskToSwap == -1L)
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(delta == -1) {
|
|
|
|
|
|
|
|
moveUp(list, targetTaskId, taskToSwap);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
// adjust indent of target task to task to swap
|
|
|
|
Metadata targetTask = gtasksMetadataService.getTaskMetadata(targetTaskId);
|
|
|
|
Metadata targetTask = gtasksMetadataService.getTaskMetadata(targetTaskId);
|
|
|
|
Metadata nextTask = gtasksMetadataService.getTaskMetadata(nextTaskId);
|
|
|
|
Metadata nextTask = gtasksMetadataService.getTaskMetadata(taskToSwap);
|
|
|
|
|
|
|
|
|
|
|
|
int targetIndent = targetTask.getValue(GtasksMetadata.INDENT);
|
|
|
|
int targetIndent = targetTask.getValue(GtasksMetadata.INDENT);
|
|
|
|
int nextIndent = nextTask.getValue(GtasksMetadata.INDENT);
|
|
|
|
int nextIndent = nextTask.getValue(GtasksMetadata.INDENT);
|
|
|
|
|
|
|
|
|
|
|
|
if(targetIndent != nextIndent)
|
|
|
|
if(targetIndent != nextIndent)
|
|
|
|
indent(listId, targetTaskId, nextIndent - targetIndent);
|
|
|
|
indent(listId, targetTaskId, nextIndent - targetIndent);
|
|
|
|
|
|
|
|
moveUp(list, taskToSwap, targetTaskId);
|
|
|
|
moveUp(list, nextTaskId, targetTaskId);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|