diff --git a/Habitica/src/com/habitrpg/android/habitica/APIHelper.java b/Habitica/src/com/habitrpg/android/habitica/APIHelper.java index 63adc26fa..f8dc95d9f 100644 --- a/Habitica/src/com/habitrpg/android/habitica/APIHelper.java +++ b/Habitica/src/com/habitrpg/android/habitica/APIHelper.java @@ -19,6 +19,7 @@ import com.google.gson.stream.JsonWriter; import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback; import com.habitrpg.android.habitica.callbacks.TaskDeletionCallback; import com.habitrpg.android.habitica.callbacks.TaskScoringCallback; +import com.habitrpg.android.habitica.database.CheckListItemExcludeStrategy; import com.magicmicky.habitrpgwrapper.lib.api.ApiService; import com.magicmicky.habitrpgwrapper.lib.api.Server; import com.magicmicky.habitrpgwrapper.lib.api.TypeAdapter.TagsAdapter; @@ -28,10 +29,12 @@ import com.magicmicky.habitrpgwrapper.lib.models.UserAuth; import com.magicmicky.habitrpgwrapper.lib.models.UserAuthResponse; import com.magicmicky.habitrpgwrapper.lib.models.UserAuthSocial; import com.magicmicky.habitrpgwrapper.lib.models.UserAuthSocialTokens; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem; import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag; import com.magicmicky.habitrpgwrapper.lib.utils.SkillDeserializer; import com.raizlabs.android.dbflow.structure.ModelAdapter; +import com.raizlabs.android.dbflow.structure.container.ForeignKeyContainer; import java.io.IOException; import java.lang.reflect.Type; @@ -74,6 +77,7 @@ public class APIHelper implements ErrorHandler, Profiler { //Exclusion stratety needed for DBFlow https://github.com/Raizlabs/DBFlow/issues/121 Gson gson = new GsonBuilder() + .setExclusionStrategies(new CheckListItemExcludeStrategy()) .setExclusionStrategies(new ExclusionStrategy() { @Override public boolean shouldSkipField(FieldAttributes f) { diff --git a/Habitica/src/com/habitrpg/android/habitica/database/CheckListItemExcludeStrategy.java b/Habitica/src/com/habitrpg/android/habitica/database/CheckListItemExcludeStrategy.java new file mode 100644 index 000000000..68a6e04cb --- /dev/null +++ b/Habitica/src/com/habitrpg/android/habitica/database/CheckListItemExcludeStrategy.java @@ -0,0 +1,20 @@ +package com.habitrpg.android.habitica.database; + +import com.google.gson.ExclusionStrategy; +import com.google.gson.FieldAttributes; + +/** + * Created by franzejr on 29/11/15. + */ +public class CheckListItemExcludeStrategy implements ExclusionStrategy { + + @Override + public boolean shouldSkipField(FieldAttributes f) { + return f.getAnnotation(ExcludeCheckListItem.class) != null; + } + + @Override + public boolean shouldSkipClass(Class clazz) { + return clazz.getAnnotation(ExcludeCheckListItem.class) != null; + } +} diff --git a/Habitica/src/com/habitrpg/android/habitica/database/ExcludeCheckListItem.java b/Habitica/src/com/habitrpg/android/habitica/database/ExcludeCheckListItem.java new file mode 100644 index 000000000..30f8e29f4 --- /dev/null +++ b/Habitica/src/com/habitrpg/android/habitica/database/ExcludeCheckListItem.java @@ -0,0 +1,8 @@ +package com.habitrpg.android.habitica.database; + +/** + * Created by franzejr on 29/11/15. + */ +public @interface ExcludeCheckListItem { + +} diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/ChecklistItem.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/ChecklistItem.java index f3762c21a..3171f1bf7 100644 --- a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/ChecklistItem.java +++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/ChecklistItem.java @@ -1,6 +1,7 @@ package com.magicmicky.habitrpgwrapper.lib.models.tasks; import com.habitrpg.android.habitica.HabitDatabase; +import com.habitrpg.android.habitica.database.ExcludeCheckListItem; import com.raizlabs.android.dbflow.annotation.Column; import com.raizlabs.android.dbflow.annotation.ForeignKey; import com.raizlabs.android.dbflow.annotation.ForeignKeyReference; @@ -31,13 +32,14 @@ public class ChecklistItem extends BaseModel { columnType = String.class, foreignColumnName = "id")}, saveForeignKeyModel = false) + @ExcludeCheckListItem ForeignKeyContainer task; public ChecklistItem() { this(null,null); } public ChecklistItem(String id, String text) { - this(id,text,false); + this(id, text, false); } public ChecklistItem(String id,String text, boolean completed) { this.setText(text);