From e32615fb8262216469cd48c6ae931c18f90379a0 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Wed, 9 Dec 2015 23:58:47 +0100 Subject: [PATCH] Sort tasks according to website. Fixes #67 --- Habitica/assets/migrations/Habitica/4.sql | 1 + .../habitrpg/android/habitica/APIHelper.java | 4 +++ .../android/habitica/HabitDatabase.java | 2 +- .../adapter/HabitItemRecyclerViewAdapter.java | 2 +- .../lib/models/tasks/Task.java | 3 ++ .../lib/utils/TaskListDeserializer.java | 28 +++++++++++++++++++ 6 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 Habitica/assets/migrations/Habitica/4.sql create mode 100644 Habitica/src/com/magicmicky/habitrpgwrapper/lib/utils/TaskListDeserializer.java diff --git a/Habitica/assets/migrations/Habitica/4.sql b/Habitica/assets/migrations/Habitica/4.sql new file mode 100644 index 000000000..17bea9bb3 --- /dev/null +++ b/Habitica/assets/migrations/Habitica/4.sql @@ -0,0 +1 @@ +ALTER TABLE Task ADD COLUMN 'position' INTEGER DEFAULT 0; \ No newline at end of file diff --git a/Habitica/src/com/habitrpg/android/habitica/APIHelper.java b/Habitica/src/com/habitrpg/android/habitica/APIHelper.java index 2a598c953..5886b047e 100644 --- a/Habitica/src/com/habitrpg/android/habitica/APIHelper.java +++ b/Habitica/src/com/habitrpg/android/habitica/APIHelper.java @@ -35,6 +35,7 @@ import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag; import com.magicmicky.habitrpgwrapper.lib.utils.ChecklistItemSerializer; import com.magicmicky.habitrpgwrapper.lib.utils.SkillDeserializer; +import com.magicmicky.habitrpgwrapper.lib.utils.TaskListDeserializer; import com.raizlabs.android.dbflow.structure.ModelAdapter; import java.io.IOException; @@ -78,6 +79,8 @@ public class APIHelper implements ErrorHandler, Profiler { }.getType(); + Type taskClassListType = new TypeToken>() {}.getType(); + //Exclusion stratety needed for DBFlow https://github.com/Raizlabs/DBFlow/issues/121 Gson gson = new GsonBuilder() .setExclusionStrategies(new CheckListItemExcludeStrategy()) @@ -97,6 +100,7 @@ public class APIHelper implements ErrorHandler, Profiler { .registerTypeAdapter(boolean.class, booleanAsIntAdapter) .registerTypeAdapter(SkillList.class, new SkillDeserializer()) .registerTypeAdapter(ChecklistItem.class, new ChecklistItemSerializer()) + .registerTypeAdapter(taskClassListType, new TaskListDeserializer()) .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") .create(); diff --git a/Habitica/src/com/habitrpg/android/habitica/HabitDatabase.java b/Habitica/src/com/habitrpg/android/habitica/HabitDatabase.java index 659c75708..c4e3dc580 100644 --- a/Habitica/src/com/habitrpg/android/habitica/HabitDatabase.java +++ b/Habitica/src/com/habitrpg/android/habitica/HabitDatabase.java @@ -10,5 +10,5 @@ public class HabitDatabase { public static final String NAME = "Habitica"; - public static final int VERSION = 3; + public static final int VERSION = 4; } diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java b/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java index f72fd692c..c6853e453 100644 --- a/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java +++ b/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java @@ -644,7 +644,7 @@ public class HabitItemRecyclerViewAdapter .begin(Condition.column("completed").eq(false)) .or(Condition.column("type").eq("daily")) ) - .orderBy(OrderBy.columns("dateCreated").descending()) + .orderBy(OrderBy.columns("position", "dateCreated").descending()) .async() .queryList(taskTransactionListener); diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Task.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Task.java index 0c6223cda..dc01bf86d 100644 --- a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Task.java +++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Task.java @@ -57,6 +57,9 @@ public class Task extends BaseModel { @Column public Date dateCreated; + @Column + public int position; + //Habits @Column public Boolean up, down; diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/utils/TaskListDeserializer.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/utils/TaskListDeserializer.java new file mode 100644 index 000000000..0887518b3 --- /dev/null +++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/utils/TaskListDeserializer.java @@ -0,0 +1,28 @@ +package com.magicmicky.habitrpgwrapper.lib.utils; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by viirus on 09/12/15. + */ +public class TaskListDeserializer implements JsonDeserializer> { + + public List deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext ctx) { + List vals = new ArrayList(); + int position = 0; + for (JsonElement e : json.getAsJsonArray()) { + Task task = (Task) ctx.deserialize(e, Task.class); + task.position = position; + vals.add(task); + position++; + } + return vals; + } +}