From dd5c750c3381557fe790d516878fe3fded92f644 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Tue, 11 Jul 2017 14:21:51 +0200 Subject: [PATCH] fix for creating tasks with large checkllists --- .../data/implementation/ApiClientImpl.java | 3 --- .../implementation/TaskRepositoryImpl.java | 4 +++ .../habitica/helpers/SoundManager.java | 2 +- .../habitica/helpers/TaskFilterHelper.java | 2 +- .../habitica/models/tasks/ChecklistItem.java | 9 ------- .../customization/AvatarOverviewFragment.java | 3 +++ .../utils/ChecklistItemSerializer.java | 25 ------------------- .../habitica/utils/TaskSerializer.java | 22 ++++++++++++++-- 8 files changed, 29 insertions(+), 41 deletions(-) delete mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/utils/ChecklistItemSerializer.java diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.java index a706d0f3f..5aba7989c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.java @@ -54,7 +54,6 @@ import com.habitrpg.android.habitica.models.shops.Shop; import com.habitrpg.android.habitica.models.social.Challenge; import com.habitrpg.android.habitica.models.social.ChatMessage; import com.habitrpg.android.habitica.models.social.Group; -import com.habitrpg.android.habitica.models.tasks.ChecklistItem; import com.habitrpg.android.habitica.models.tasks.RemindersItem; import com.habitrpg.android.habitica.models.tasks.Task; import com.habitrpg.android.habitica.models.tasks.TaskList; @@ -67,7 +66,6 @@ import com.habitrpg.android.habitica.utils.ChallengeDeserializer; import com.habitrpg.android.habitica.utils.ChallengeListDeserializer; import com.habitrpg.android.habitica.utils.ChatMessageDeserializer; import com.habitrpg.android.habitica.utils.ChatMessageListDeserializer; -import com.habitrpg.android.habitica.utils.ChecklistItemSerializer; import com.habitrpg.android.habitica.utils.ContentDeserializer; import com.habitrpg.android.habitica.utils.CustomizationDeserializer; import com.habitrpg.android.habitica.utils.DateDeserializer; @@ -233,7 +231,6 @@ public class ApiClientImpl implements Action1, ApiClient { .registerTypeAdapter(Boolean.class, new BooleanAsIntAdapter()) .registerTypeAdapter(boolean.class, new BooleanAsIntAdapter()) .registerTypeAdapter(skillListType, new SkillDeserializer()) - .registerTypeAdapter(ChecklistItem.class, new ChecklistItemSerializer()) .registerTypeAdapter(RemindersItem.class, new RemindersItemSerializer()) .registerTypeAdapter(TaskList.class, new TaskListDeserializer()) .registerTypeAdapter(Purchases.class, new PurchasedDeserializer()) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.java index 26487428e..caf49207d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.java @@ -146,6 +146,10 @@ public class TaskRepositoryImpl extends BaseRepositoryImpl RealmList tags = new RealmList<>(localRepository.getUnmanagedCopy(task.getTags()).toArray(new Tag[0])); task.setTags(tags); } + if (task.getChecklist() != null && task.getChecklist().size() > 0) { + RealmList checklist = new RealmList<>(localRepository.getUnmanagedCopy(task.getChecklist()).toArray(new ChecklistItem[0])); + task.setChecklist(checklist); + } return apiClient.createTask(task) .map(task1 -> { task1.dateCreated = new Date(); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundManager.java index d6de39609..3031eeeb4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundManager.java @@ -64,7 +64,7 @@ public class SoundManager { } public void loadAndPlayAudio(String type) { - if (soundTheme.equals("off")) { + if ("off".equals(soundTheme) || soundTheme == null) { return; } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskFilterHelper.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskFilterHelper.java index 37889bdf4..8b54dbceb 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskFilterHelper.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskFilterHelper.java @@ -131,7 +131,7 @@ public class TaskFilterHelper { } break; case Task.FILTER_GRAY: - query = query.equalTo("completed", true); + query = query.equalTo("completed", true).or().equalTo("isDue", false); break; case Task.FILTER_WEAK: query = query.lessThan("value", 0.0d); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/ChecklistItem.java b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/ChecklistItem.java index 834f1bec9..dc8fdb88a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/ChecklistItem.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/ChecklistItem.java @@ -10,7 +10,6 @@ import io.realm.annotations.PrimaryKey; */ public class ChecklistItem extends RealmObject { - Task task; @PrimaryKey private String id; private String text; @@ -77,14 +76,6 @@ public class ChecklistItem extends RealmObject { this.position = position; } - public Task getTask() { - return task; - } - - public void setTask(Task task) { - this.task = task; - } - @Override public boolean equals(Object obj) { if (obj.getClass().equals(ChecklistItem.class) && this.id != null) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.java index 80d5f5745..7e73528be 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.java @@ -133,6 +133,9 @@ public class AvatarOverviewFragment extends BaseMainFragment implements AdapterV } private void setSize(String size) { + if (avatarSizeSpinner == null) { + return; + } if (size.equals("slim")) { avatarSizeSpinner.setSelection(0, false); } else { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ChecklistItemSerializer.java b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ChecklistItemSerializer.java deleted file mode 100644 index c22c4ad59..000000000 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ChecklistItemSerializer.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.habitrpg.android.habitica.utils; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; -import com.habitrpg.android.habitica.models.tasks.ChecklistItem; - -import java.lang.reflect.Type; - -/** - * Created by viirus on 25/11/15. - */ -public class ChecklistItemSerializer - implements JsonSerializer { - - @Override - public JsonElement serialize(ChecklistItem src, Type typeOfSrc, JsonSerializationContext context) { - JsonObject object = new JsonObject(); - object.addProperty("text", src.getText()); - object.addProperty("id", src.getId()); - object.addProperty("completed", src.getCompleted()); - return object; - } -} \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/TaskSerializer.java b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/TaskSerializer.java index 9989ce6ce..f98d40dad 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/TaskSerializer.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/TaskSerializer.java @@ -6,9 +6,11 @@ import com.google.gson.JsonObject; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import com.habitrpg.android.habitica.models.Tag; +import com.habitrpg.android.habitica.models.tasks.ChecklistItem; import com.habitrpg.android.habitica.models.tasks.Task; import java.lang.reflect.Type; +import java.util.List; public class TaskSerializer implements JsonSerializer { @Override @@ -39,7 +41,9 @@ public class TaskSerializer implements JsonSerializer { obj.add("repeat", context.serialize(task.getRepeat())); obj.add("startDate", context.serialize(task.getStartDate())); obj.addProperty("streak", task.getStreak()); - obj.add("checklist", context.serialize(task.getChecklist())); + if (task.getChecklist() != null) { + obj.add("checklist", serializeChecklist(task.getChecklist(), context)); + } obj.add("reminders", context.serialize(task.getReminders())); obj.add("daysOfMonth", context.serialize(task.getDaysOfMonth())); obj.add("weeksOfMonth", context.serialize(task.getWeeksOfMonth())); @@ -51,7 +55,9 @@ public class TaskSerializer implements JsonSerializer { } else { obj.add("date", context.serialize(task.getDueDate())); } - obj.add("checklist", context.serialize(task.getChecklist())); + if (task.getChecklist() != null) { + obj.add("checklist", serializeChecklist(task.getChecklist(), context)); + } obj.add("reminders", context.serialize(task.getReminders())); obj.addProperty("completed", task.getCompleted()); break; @@ -59,4 +65,16 @@ public class TaskSerializer implements JsonSerializer { return obj; } + + private JsonArray serializeChecklist(List checklist, JsonSerializationContext context) { + JsonArray jsonArray = new JsonArray(); + for (ChecklistItem item : checklist) { + JsonObject object = new JsonObject(); + object.addProperty("text", item.getText()); + object.addProperty("id", item.getId()); + object.addProperty("completed", item.getCompleted()); + jsonArray.add(object); + } + return jsonArray; + } }