diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.java b/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.java index 401d6058e..9d9fb79d7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.java @@ -28,7 +28,6 @@ import com.habitrpg.android.habitica.models.responses.UnlockResponse; import com.habitrpg.android.habitica.models.tasks.ItemData; import com.habitrpg.android.habitica.models.tasks.Task; import com.habitrpg.android.habitica.models.tasks.TaskList; -import com.habitrpg.android.habitica.models.social.PostChallenge; import java.util.ArrayList; import java.util.List; @@ -289,7 +288,7 @@ public interface ApiService { Observable> leaveChallenge(@Path("challengeId") String challengeId, @Body LeaveChallengeBody body); @POST("challenges") - Observable> createChallenge(@Body PostChallenge challenge); + Observable> createChallenge(@Body Challenge challenge); @POST("tasks/challenge/{challengeId}") Observable> createChallengeTask(@Path("challengeId") String challengeId, @Body Task task); @@ -298,7 +297,7 @@ public interface ApiService { Observable>> createChallengeTasks(@Path("challengeId") String challengeId, @Body List tasks); @PUT("challenges/{challengeId}") - Observable> updateChallenge(@Path("challengeId") String challengeId, @Body PostChallenge challenge); + Observable> updateChallenge(@Path("challengeId") String challengeId, @Body Challenge challenge); @DELETE("challenges/{challengeId}") Observable> deleteChallenge(@Path("challengeId") String challengeId); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.java index 060e181af..a3814d417 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.java @@ -8,7 +8,6 @@ import com.habitrpg.android.habitica.models.social.Challenge; import com.habitrpg.android.habitica.models.social.ChatMessage; import com.habitrpg.android.habitica.models.ContentResult; import com.habitrpg.android.habitica.models.social.Group; -import com.habitrpg.android.habitica.models.social.PostChallenge; import com.habitrpg.android.habitica.models.user.HabitRPGUser; import com.habitrpg.android.habitica.models.user.Items; import com.habitrpg.android.habitica.models.LeaveChallengeBody; @@ -201,11 +200,11 @@ public interface ApiClient { Observable leaveChallenge(String challengeId, LeaveChallengeBody body); - Observable createChallenge(PostChallenge challenge); + Observable createChallenge(Challenge challenge); Observable createChallengeTask(String challengeId, Task task); Observable> createChallengeTasks(String challengeId, List tasks); - Observable updateChallenge(PostChallenge challenge); + Observable updateChallenge(Challenge challenge); Observable deleteChallenge(String challengeId); //DEBUG: These calls only work on a local development server diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ChallengeRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ChallengeRepository.java index f37321705..e46148601 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ChallengeRepository.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ChallengeRepository.java @@ -2,7 +2,6 @@ package com.habitrpg.android.habitica.data; import com.habitrpg.android.habitica.models.social.Challenge; import com.habitrpg.android.habitica.models.social.Group; -import com.habitrpg.android.habitica.models.social.PostChallenge; import com.habitrpg.android.habitica.models.tasks.Task; import com.habitrpg.android.habitica.models.tasks.TaskList; @@ -14,7 +13,7 @@ public interface ChallengeRepository extends BaseRepository { Observable getChallenge(String challengeId); Observable getChallengeTasks(String challengeId); - Observable createChallenge(PostChallenge challenge, List taskList); + Observable createChallenge(Challenge challenge, List taskList); /** * @@ -25,7 +24,7 @@ public interface ChallengeRepository extends BaseRepository { * @param removedTaskList tasks that has be to be removed * @return */ - Observable updateChallenge(PostChallenge challenge, List fullTaskList, + Observable updateChallenge(Challenge challenge, List fullTaskList, List addedTaskList, List updatedTaskList, List removedTaskList); Observable deleteChallenge(String challengeId); 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 f8d1a3d05..f5b55a893 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 @@ -18,7 +18,6 @@ import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.data.ApiClient; import com.habitrpg.android.habitica.database.CheckListItemExcludeStrategy; import com.habitrpg.android.habitica.helpers.PopupNotificationsManager; -import com.habitrpg.android.habitica.models.social.PostChallenge; import com.habitrpg.android.habitica.proxy.ifce.CrashlyticsProxy; import com.habitrpg.android.habitica.api.ApiService; import com.habitrpg.android.habitica.api.Server; @@ -66,7 +65,7 @@ import com.habitrpg.android.habitica.models.tasks.Task; import com.habitrpg.android.habitica.models.tasks.TaskList; import com.habitrpg.android.habitica.models.tasks.TaskTag; import com.habitrpg.android.habitica.utils.BooleanAsIntAdapter; -import com.habitrpg.android.habitica.utils.ChallengeDeserializer; +import com.habitrpg.android.habitica.utils.ChallengeSerializer; import com.habitrpg.android.habitica.utils.ChatMessageDeserializer; import com.habitrpg.android.habitica.utils.ChecklistItemSerializer; import com.habitrpg.android.habitica.utils.ContentDeserializer; @@ -268,7 +267,7 @@ public class ApiClientImpl implements Action1, ApiClient { .registerTypeAdapter(Task.class, new TaskSerializer()) .registerTypeAdapter(ContentResult.class, new ContentDeserializer()) .registerTypeAdapter(FeedResponse.class, new FeedResponseDeserializer()) - .registerTypeAdapter(Challenge.class, new ChallengeDeserializer()) + .registerTypeAdapter(Challenge.class, new ChallengeSerializer()) .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") .create(); return GsonConverterFactory.create(gson); @@ -828,7 +827,7 @@ public class ApiClientImpl implements Action1, ApiClient { } @Override - public Observable createChallenge(PostChallenge challenge) { + public Observable createChallenge(Challenge challenge) { return apiService.createChallenge(challenge).compose(configureApiCallObserver()); } @@ -844,7 +843,7 @@ public class ApiClientImpl implements Action1, ApiClient { } @Override - public Observable updateChallenge(PostChallenge challenge) { + public Observable updateChallenge(Challenge challenge) { return apiService.updateChallenge(challenge.id, challenge).compose(configureApiCallObserver()); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ChallengeRepositoryImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ChallengeRepositoryImpl.java index b03606483..83d364c03 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ChallengeRepositoryImpl.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ChallengeRepositoryImpl.java @@ -6,7 +6,6 @@ import com.habitrpg.android.habitica.data.ChallengeRepository; import com.habitrpg.android.habitica.data.local.ChallengeLocalRepository; import com.habitrpg.android.habitica.models.social.Challenge; import com.habitrpg.android.habitica.models.social.Group; -import com.habitrpg.android.habitica.models.social.PostChallenge; import com.habitrpg.android.habitica.models.tasks.Task; import com.habitrpg.android.habitica.models.tasks.TaskList; import com.habitrpg.android.habitica.models.tasks.TasksOrder; @@ -72,7 +71,7 @@ public class ChallengeRepositoryImpl extends BaseRepositoryImpl createChallenge(PostChallenge challenge, List taskList) { + public Observable createChallenge(Challenge challenge, List taskList) { challenge.tasksOrder = getTaskOrders(taskList); return Observable.create(subscriber -> { @@ -87,7 +86,7 @@ public class ChallengeRepositoryImpl extends BaseRepositoryImpl updateChallenge(PostChallenge challenge, List fullTaskList, + public Observable updateChallenge(Challenge challenge, List fullTaskList, List addedTaskList, List updatedTaskList, List removedTaskList) { ArrayList observablesToWait = new ArrayList<>($.map(updatedTaskList, t -> apiClient.updateTask(t.getId(), t))); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/Challenge.java b/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/Challenge.java index 71f373348..0ce22ce2a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/Challenge.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/Challenge.java @@ -1,7 +1,7 @@ package com.habitrpg.android.habitica.models.social; import com.habitrpg.android.habitica.HabitDatabase; -import com.habitrpg.android.habitica.models.social.Group; +import com.habitrpg.android.habitica.models.tasks.TasksOrder; import com.habitrpg.android.habitica.models.user.HabitRPGUser; import com.raizlabs.android.dbflow.annotation.Column; import com.raizlabs.android.dbflow.annotation.NotNull; @@ -9,8 +9,6 @@ import com.raizlabs.android.dbflow.annotation.PrimaryKey; import com.raizlabs.android.dbflow.annotation.Table; import com.raizlabs.android.dbflow.structure.BaseModel; -import java.util.HashMap; - @Table(databaseName = HabitDatabase.NAME) public class Challenge extends BaseModel { @@ -73,25 +71,5 @@ public class Challenge extends BaseModel { public HabitRPGUser leader; - public HashMap getTasksOrder() { - HashMap map = new HashMap(); - - if (!dailyList.isEmpty()) { - map.put(TASK_ORDER_DAILYS, dailyList.split(",")); - } - - if (!habitList.isEmpty()) { - map.put(TASK_ORDER_HABITS, habitList.split(",")); - } - - if (!rewardList.isEmpty()) { - map.put(TASK_ORDER_REWARDS, rewardList.split(",")); - } - - if (!todoList.isEmpty()) { - map.put(TASK_ORDER_TODOS, todoList.split(",")); - } - - return map; - } + public TasksOrder tasksOrder; } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/PostChallenge.java b/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/PostChallenge.java deleted file mode 100644 index b8245008c..000000000 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/PostChallenge.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.habitrpg.android.habitica.models.social; - -import com.habitrpg.android.habitica.models.tasks.TasksOrder; - -/** - * Needs to be a separate Class, the normal Challenge has the group as Object - * The Challenge for adding/updating just has the group as id - */ -public class PostChallenge { - public String id; - - public String name; - - public String shortName; - - public String description; - - public String group; - - public int prize; - - public TasksOrder tasksOrder; -} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.java index 82eafb530..34fd278d1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.java @@ -33,10 +33,10 @@ import com.habitrpg.android.habitica.data.ChallengeRepository; import com.habitrpg.android.habitica.events.TaskSaveEvent; import com.habitrpg.android.habitica.events.TaskTappedEvent; import com.habitrpg.android.habitica.events.commands.DeleteTaskCommand; +import com.habitrpg.android.habitica.models.social.Challenge; import com.habitrpg.android.habitica.models.social.Group; import com.habitrpg.android.habitica.models.tasks.Task; import com.habitrpg.android.habitica.ui.adapter.social.challenges.ChallengeTasksRecyclerViewAdapter; -import com.habitrpg.android.habitica.models.social.PostChallenge; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -436,8 +436,8 @@ public class CreateChallengeActivity extends BaseActivity { startActivityForResult(intent, 1); } - private PostChallenge getChallengeData() { - PostChallenge c = new PostChallenge(); + private Challenge getChallengeData() { + Challenge c = new Challenge(); int locationPos = challengeLocationSpinner.getSelectedItemPosition(); Group locationGroup = locationAdapter.getItem(locationPos); @@ -446,7 +446,7 @@ public class CreateChallengeActivity extends BaseActivity { c.id = challengeId; } - c.group = locationGroup.id; + c.groupId = locationGroup.id; c.name = createChallengeTitle.getText().toString(); c.description = createChallengeDescription.getText().toString(); c.shortName = createChallengeTag.getText().toString(); @@ -456,7 +456,7 @@ public class CreateChallengeActivity extends BaseActivity { } private void createChallenge() { - PostChallenge c = getChallengeData(); + Challenge c = getChallengeData(); List taskList = challengeTasks.getTaskList(); taskList.remove(addHabit); @@ -472,7 +472,7 @@ public class CreateChallengeActivity extends BaseActivity { } private void updateChallenge() { - PostChallenge c = getChallengeData(); + Challenge c = getChallengeData(); List taskList = challengeTasks.getTaskList(); taskList.remove(addHabit); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ChallengeDeserializer.java b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ChallengeSerializer.java similarity index 80% rename from Habitica/src/main/java/com/habitrpg/android/habitica/utils/ChallengeDeserializer.java rename to Habitica/src/main/java/com/habitrpg/android/habitica/utils/ChallengeSerializer.java index 3d73ca1d1..ff61a97e1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ChallengeDeserializer.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ChallengeSerializer.java @@ -6,13 +6,15 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; import com.habitrpg.android.habitica.models.social.Challenge; import android.text.TextUtils; import java.lang.reflect.Type; -public class ChallengeDeserializer implements JsonDeserializer { +public class ChallengeSerializer implements JsonDeserializer, JsonSerializer { @Override public Challenge deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { @@ -93,4 +95,22 @@ public class ChallengeDeserializer implements JsonDeserializer { return ""; } + + @Override + public JsonElement serialize(Challenge src, Type typeOfSrc, JsonSerializationContext context) { + JsonObject object = new JsonObject(); + object.addProperty("id", src.id); + object.addProperty("name", src.name); + object.addProperty("shortName", src.shortName); + object.addProperty("description", src.description); + object.addProperty("memberCount", src.memberCount); + object.addProperty("prize", src.prize); + object.addProperty("official", src.official); + + object.addProperty("group", src.groupId); + object.add("tasksOrder", context.serialize(src.tasksOrder)); + + + return object; + } }