fix for creating tasks with large checkllists

This commit is contained in:
Phillip Thelen 2017-07-11 14:21:51 +02:00
parent ec415a8557
commit dd5c750c33
8 changed files with 29 additions and 41 deletions

View file

@ -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<Throwable>, 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())

View file

@ -146,6 +146,10 @@ public class TaskRepositoryImpl extends BaseRepositoryImpl<TaskLocalRepository>
RealmList<Tag> tags = new RealmList<>(localRepository.getUnmanagedCopy(task.getTags()).toArray(new Tag[0]));
task.setTags(tags);
}
if (task.getChecklist() != null && task.getChecklist().size() > 0) {
RealmList<ChecklistItem> checklist = new RealmList<>(localRepository.getUnmanagedCopy(task.getChecklist()).toArray(new ChecklistItem[0]));
task.setChecklist(checklist);
}
return apiClient.createTask(task)
.map(task1 -> {
task1.dateCreated = new Date();

View file

@ -64,7 +64,7 @@ public class SoundManager {
}
public void loadAndPlayAudio(String type) {
if (soundTheme.equals("off")) {
if ("off".equals(soundTheme) || soundTheme == null) {
return;
}

View file

@ -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);

View file

@ -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) {

View file

@ -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 {

View file

@ -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<ChecklistItem> {
@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;
}
}

View file

@ -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<Task> {
@Override
@ -39,7 +41,9 @@ public class TaskSerializer implements JsonSerializer<Task> {
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<Task> {
} 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<Task> {
return obj;
}
private JsonArray serializeChecklist(List<ChecklistItem> 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;
}
}