diff --git a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksDecorationExposer.java b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksDecorationExposer.java index 587fe1f5b..74d1ff608 100644 --- a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksDecorationExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksDecorationExposer.java @@ -35,7 +35,7 @@ public class GtasksDecorationExposer implements TaskDecorationExposer { if(!gtasksPreferenceService.isLoggedIn()) return null; - if(Flags.check(Flags.GTASKS)) + if(!Flags.check(Flags.GTASKS)) return null; return createDecoration(task); diff --git a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksFilterExposer.java index 0fddebfa2..54b7655fa 100644 --- a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksFilterExposer.java @@ -16,7 +16,6 @@ import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.sql.Criterion; -import com.todoroo.andlib.sql.Functions; import com.todoroo.andlib.sql.Join; import com.todoroo.andlib.sql.Order; import com.todoroo.andlib.sql.QueryTemplate; @@ -26,9 +25,9 @@ import com.todoroo.astrid.api.FilterCategory; import com.todoroo.astrid.api.FilterListHeader; import com.todoroo.astrid.api.FilterListItem; import com.todoroo.astrid.data.Metadata; +import com.todoroo.astrid.data.MetadataApiDao.MetadataCriteria; import com.todoroo.astrid.data.StoreObject; import com.todoroo.astrid.data.Task; -import com.todoroo.astrid.data.MetadataApiDao.MetadataCriteria; import com.todoroo.astrid.data.TaskApiDao.TaskCriteria; /** @@ -54,9 +53,7 @@ public class GtasksFilterExposer extends BroadcastReceiver { Join.left(Metadata.TABLE, Task.ID.eq(Metadata.TASK))).where(Criterion.and( MetadataCriteria.withKey(GtasksMetadata.METADATA_KEY), TaskCriteria.activeAndVisible(), - GtasksMetadata.LIST_ID.eq(list.getValue(GtasksList.REMOTE_ID)))).orderBy( - Order.asc(Functions.caseStatement(GtasksMetadata.ORDER.eq(0), - Task.CREATION_DATE, GtasksMetadata.ORDER))), + GtasksMetadata.LIST_ID.eq(list.getValue(GtasksList.REMOTE_ID)))).orderBy(Order.asc(GtasksMetadata.ORDER)), values); return filter; diff --git a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksMetadata.java b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksMetadata.java index e34253939..1ba4a76a1 100644 --- a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksMetadata.java +++ b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksMetadata.java @@ -4,6 +4,7 @@ import com.todoroo.andlib.data.AbstractModel; import com.todoroo.andlib.data.Property.IntegerProperty; import com.todoroo.andlib.data.Property.LongProperty; import com.todoroo.andlib.data.Property.StringProperty; +import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.utility.Preferences; @@ -14,7 +15,7 @@ import com.todoroo.astrid.utility.Preferences; */ public class GtasksMetadata { - private static final int VALUE_UNSET = -1; + static final int VALUE_UNSET = -1; /** metadata key */ public static final String METADATA_KEY = "gtasks"; //$NON-NLS-1$ @@ -53,7 +54,7 @@ public class GtasksMetadata { metadata.setValue(LIST_ID, defaultList); metadata.setValue(PARENT_TASK, (long)VALUE_UNSET); metadata.setValue(INDENT, 0); - metadata.setValue(ORDER, VALUE_UNSET); + metadata.setValue(ORDER, (int)(DateUtilities.now() / 1000L)); if(taskId > AbstractModel.NO_ID) metadata.setValue(Metadata.TASK, taskId); return metadata; diff --git a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java index d48b1ccb6..a69faba7e 100644 --- a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java +++ b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java @@ -99,7 +99,7 @@ public class GtasksTaskListUpdater { int indent = metadata.getValue(GtasksMetadata.INDENT); - final long parent, sibling; + long parent, sibling; if(indent > previousIndent.get()) { parent = previousTask.get(); sibling = -1L; @@ -107,7 +107,10 @@ public class GtasksTaskListUpdater { sibling = previousTask.get(); parent = parents.get(sibling); } else { - sibling = parents.get(previousTask.get()); + // move up once for each indent + sibling = previousTask.get(); + for(int i = indent; i < previousIndent.get(); i++) + sibling = parents.get(sibling); parent = parents.get(sibling); } parents.put(taskId, parent); diff --git a/astrid/src/com/todoroo/astrid/utility/Constants.java b/astrid/src/com/todoroo/astrid/utility/Constants.java index 7f5e820a9..810e38189 100644 --- a/astrid/src/com/todoroo/astrid/utility/Constants.java +++ b/astrid/src/com/todoroo/astrid/utility/Constants.java @@ -30,7 +30,7 @@ public final class Constants { /** * Whether to turn on debugging logging and UI */ - public static final boolean DEBUG = true; + public static final boolean DEBUG = false; /** * Upgrade time diff --git a/tests/src/com/todoroo/astrid/gtasks/GtasksTaskListUpdaterTest.java b/tests/src/com/todoroo/astrid/gtasks/GtasksTaskListUpdaterTest.java index 546cc988e..2bf2c1b06 100644 --- a/tests/src/com/todoroo/astrid/gtasks/GtasksTaskListUpdaterTest.java +++ b/tests/src/com/todoroo/astrid/gtasks/GtasksTaskListUpdaterTest.java @@ -65,7 +65,7 @@ public class GtasksTaskListUpdaterTest extends DatabaseTestCase { public void testNewTaskOrder() { givenTasksABCDE(); - Task newTask = createTask("F", -1, 0); + Task newTask = createTask("F", GtasksMetadata.VALUE_UNSET, 0); whenCalculatingOrder(); thenExpectMetadataIndentAndOrder(newTask, 5, 0); @@ -77,7 +77,7 @@ public class GtasksTaskListUpdaterTest extends DatabaseTestCase { private void thenExpectMetadataIndentAndOrder(Task task, int order, int indent) { Metadata metadata = gtasksMetadataService.getTaskMetadata(task.getId()); assertNotNull("metadata was found", metadata); - assertEquals("indentation", order, (int)metadata.getValue(GtasksMetadata.ORDER)); + assertEquals("order", order, (int)metadata.getValue(GtasksMetadata.ORDER)); assertEquals("indentation", indent, (int)metadata.getValue(GtasksMetadata.INDENT)); } @@ -92,21 +92,21 @@ public class GtasksTaskListUpdaterTest extends DatabaseTestCase { } private void thenExpectSibling(Task task, Task expectedSibling) { - Long sibling = gtasksTaskListUpdater.siblings.get(task.getId()); + long sibling = gtasksTaskListUpdater.siblings.get(task.getId()); if(expectedSibling == null) - assertNull("Task " + task.getValue(Task.TITLE) + " sibling null", sibling); + assertEquals("Task " + task.getValue(Task.TITLE) + " sibling null", -1L, sibling); else assertEquals("Task " + task.getValue(Task.TITLE) + " sibling " + - expectedSibling.getValue(Task.TITLE), (Long)expectedSibling.getId(), sibling); + expectedSibling.getValue(Task.TITLE), expectedSibling.getId(), sibling); } private void thenExpectParent(Task task, Task expectedParent) { - Long parent = gtasksTaskListUpdater.parents.get(task.getId()); + long parent = gtasksTaskListUpdater.parents.get(task.getId()); if(expectedParent == null) - assertNull("Task " + task.getValue(Task.TITLE) + " parent null", parent); + assertEquals("Task " + task.getValue(Task.TITLE) + " parent null", -1L, parent); else assertEquals("Task " + task.getValue(Task.TITLE) + " parent " + - expectedParent.getValue(Task.TITLE), Long.valueOf(expectedParent.getId()), parent); + expectedParent.getValue(Task.TITLE), expectedParent.getId(), parent); } @Override @@ -153,8 +153,10 @@ public class GtasksTaskListUpdaterTest extends DatabaseTestCase { PluginServices.getTaskService().save(task); Metadata metadata = GtasksMetadata.createEmptyMetadata(task.getId()); metadata.setValue(GtasksMetadata.LIST_ID, "1"); - metadata.setValue(GtasksMetadata.ORDER, order); - metadata.setValue(GtasksMetadata.INDENT, indent); + if(order != GtasksMetadata.VALUE_UNSET) + metadata.setValue(GtasksMetadata.ORDER, order); + if(indent != GtasksMetadata.VALUE_UNSET) + metadata.setValue(GtasksMetadata.INDENT, indent); PluginServices.getMetadataService().save(metadata); return task; } diff --git a/tests/src/com/todoroo/astrid/provider/ProviderTestUtilities.java b/tests/src/com/todoroo/astrid/provider/ProviderTestUtilities.java new file mode 100644 index 000000000..2e28bcd34 --- /dev/null +++ b/tests/src/com/todoroo/astrid/provider/ProviderTestUtilities.java @@ -0,0 +1,12 @@ +package com.todoroo.astrid.provider; + +import com.todoroo.andlib.data.AbstractDatabase; +import com.todoroo.astrid.test.DatabaseTestCase; + +public class ProviderTestUtilities extends DatabaseTestCase { + + public static final void setDatabaseOverride(AbstractDatabase database) { + Astrid3ContentProvider.setDatabaseOverride(database); + + } +} diff --git a/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java b/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java index b8cd51cf4..989ffb67d 100644 --- a/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java +++ b/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java @@ -5,6 +5,7 @@ import java.io.File; import com.todoroo.andlib.test.TodorooTestCaseWithInjector; import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.legacy.AlarmDatabase; +import com.todoroo.astrid.provider.ProviderTestUtilities; import com.todoroo.astrid.service.AstridDependencyInjector; /** @@ -34,6 +35,8 @@ public class DatabaseTestCase extends TodorooTestCaseWithInjector { // empty out test databases database.clear(); database.openForWriting(); + + ProviderTestUtilities.setDatabaseOverride(database); } /**