From a1b9b9db3e457f5d938dcda113779cd6ca73cd27 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 7 Sep 2017 20:38:17 +0200 Subject: [PATCH] support old reward column --- .../android/habitica/api/ApiService.java | 2 + .../android/habitica/data/ApiClient.java | 1 + .../data/implementation/ApiClientImpl.java | 5 +++ .../InventoryRepositoryImpl.java | 42 +++++++++++++++++-- .../habitica/helpers/RemoteConfigManager.java | 9 +++- .../habitica/models/ContentResult.java | 5 ++- .../habitica/modules/RepositoryModule.java | 5 ++- .../habitica/utils/ContentDeserializer.java | 13 +++--- config-android.json | 4 ++ 9 files changed, 72 insertions(+), 14 deletions(-) create mode 100644 config-android.json 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 77c693e2c..ede1bc177 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 @@ -69,6 +69,8 @@ public interface ApiService { @GET("user/in-app-rewards") Observable>> retrieveInAppRewards(); + @GET("user/inventory/buy") + Observable>> retrieveOldGearRewards(); @POST("user/equip/{type}/{key}") Observable> equipItem(@Path("type") String type, @Path("key") String itemKey); 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 17636af57..a596df004 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 @@ -56,6 +56,7 @@ public interface ApiClient { Observable registrationLanguage(String registrationLanguage); Observable> retrieveInAppRewards(); + Observable> retrieveOldGear(); Observable equipItem(String type, String itemKey); 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 2a950147a..a7e278ac8 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 @@ -442,6 +442,11 @@ public class ApiClientImpl implements Action1, ApiClient { return apiService.retrieveInAppRewards().compose(configureApiCallObserver()); } + @Override + public Observable> retrieveOldGear() { + return apiService.retrieveOldGearRewards().compose(configureApiCallObserver()); + } + @Override public Observable equipItem(String type, String itemKey) { if (itemKey == null) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/InventoryRepositoryImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/InventoryRepositoryImpl.java index 82d83a036..04df9b820 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/InventoryRepositoryImpl.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/InventoryRepositoryImpl.java @@ -3,6 +3,7 @@ package com.habitrpg.android.habitica.data.implementation; import com.habitrpg.android.habitica.data.ApiClient; import com.habitrpg.android.habitica.data.InventoryRepository; import com.habitrpg.android.habitica.data.local.InventoryLocalRepository; +import com.habitrpg.android.habitica.helpers.RemoteConfigManager; import com.habitrpg.android.habitica.models.inventory.Egg; import com.habitrpg.android.habitica.models.inventory.Equipment; import com.habitrpg.android.habitica.models.inventory.Food; @@ -21,6 +22,7 @@ import com.habitrpg.android.habitica.models.user.Outfit; import com.habitrpg.android.habitica.models.user.Stats; import com.habitrpg.android.habitica.models.user.User; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -29,8 +31,11 @@ import rx.Observable; public class InventoryRepositoryImpl extends ContentRepositoryImpl implements InventoryRepository { - public InventoryRepositoryImpl(InventoryLocalRepository localRepository, ApiClient apiClient) { + private final RemoteConfigManager remoteConfigManager; + + public InventoryRepositoryImpl(InventoryLocalRepository localRepository, ApiClient apiClient, RemoteConfigManager remoteConfigManager) { super(localRepository, apiClient); + this.remoteConfigManager = remoteConfigManager; } @Override @@ -55,8 +60,39 @@ public class InventoryRepositoryImpl extends ContentRepositoryImpl> retrieveInAppRewards() { - return apiClient.retrieveInAppRewards() - .doOnNext(localRepository::saveInAppRewards); + if (remoteConfigManager.newShopsEnabled()) { + return apiClient.retrieveInAppRewards() + .doOnNext(localRepository::saveInAppRewards); + } else { + return apiClient.retrieveOldGear() + .map(items -> { + List itemKeys = new ArrayList<>(); + for (ShopItem item : items) { + itemKeys.add(item.key); + } + itemKeys.add("potion"); + itemKeys.add("armoire"); + return itemKeys; + }) + .flatMap(this::getItems) + .map(items -> { + List buyableItems = new ArrayList<>(); + if (items != null) { + for (Equipment item : items) { + ShopItem shopItem = new ShopItem(); + shopItem.key = item.key; + shopItem.text = item.text; + shopItem.notes = item.notes; + shopItem.value = (int)item.value; + shopItem.currency = "gold"; + + buyableItems.add(shopItem); + } + } + return buyableItems; + }) + .doOnNext(localRepository::saveInAppRewards); + } } @Override diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/RemoteConfigManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/RemoteConfigManager.java index e0c2528bc..069136e74 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/RemoteConfigManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/RemoteConfigManager.java @@ -25,6 +25,7 @@ public class RemoteConfigManager { private Context context; private Boolean enableRepeatbles = false; + private Boolean enableNewShops = false; private String REMOTE_STRING_KEY = "remote-string"; public RemoteConfigManager(Context context) { @@ -33,10 +34,14 @@ public class RemoteConfigManager { new DownloadFileFromURL().execute("https://s3.amazonaws.com/habitica-assets/mobileApp/endpoint/config-android.json"); } - public Boolean repeatablesAreEnabled () { + public Boolean repeatablesAreEnabled() { return enableRepeatbles; } + public Boolean newShopsEnabled() { + return enableNewShops; + } + private void loadFromPreferences () { String storedPreferences = PreferenceManager.getDefaultSharedPreferences(context) .getString(REMOTE_STRING_KEY, ""); @@ -48,6 +53,7 @@ public class RemoteConfigManager { try { JSONObject obj = new JSONObject(storedPreferences); enableRepeatbles = obj.getBoolean("enableRepeatables"); + enableNewShops = obj.getBoolean("enableNewShops"); } catch (JSONException e) { e.printStackTrace(); } @@ -122,6 +128,7 @@ public class RemoteConfigManager { try { JSONObject obj = new JSONObject(text.toString()); enableRepeatbles = obj.getBoolean("enableRepeatables"); + enableNewShops = obj.getBoolean("enableNewShops"); } catch (JSONException e) { e.printStackTrace(); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/ContentResult.java b/Habitica/src/main/java/com/habitrpg/android/habitica/models/ContentResult.java index b8857650b..1cd205638 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/ContentResult.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/ContentResult.java @@ -2,6 +2,7 @@ package com.habitrpg.android.habitica.models; import com.habitrpg.android.habitica.models.inventory.Customization; import com.habitrpg.android.habitica.models.inventory.Egg; +import com.habitrpg.android.habitica.models.inventory.Equipment; import com.habitrpg.android.habitica.models.inventory.Food; import com.habitrpg.android.habitica.models.inventory.HatchingPotion; import com.habitrpg.android.habitica.models.inventory.Mount; @@ -18,9 +19,9 @@ import io.realm.RealmList; */ public class ContentResult { - public ShopItem potion; + public Equipment potion; - public ShopItem armoire; + public Equipment armoire; public ContentGear gear; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.java b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.java index 4a4835122..357b846c2 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.java @@ -42,6 +42,7 @@ import com.habitrpg.android.habitica.data.local.implementation.RealmTagLocalRepo import com.habitrpg.android.habitica.data.local.implementation.RealmTaskLocalRepository; import com.habitrpg.android.habitica.data.local.implementation.RealmTutorialLocalRepository; import com.habitrpg.android.habitica.data.local.implementation.RealmUserLocalRepository; +import com.habitrpg.android.habitica.helpers.RemoteConfigManager; import javax.inject.Named; import javax.inject.Singleton; @@ -120,8 +121,8 @@ public class RepositoryModule { } @Provides - InventoryRepository providesInventoryRepository(InventoryLocalRepository localRepository, ApiClient apiClient) { - return new InventoryRepositoryImpl(localRepository, apiClient); + InventoryRepository providesInventoryRepository(InventoryLocalRepository localRepository, ApiClient apiClient, RemoteConfigManager remoteConfigManager) { + return new InventoryRepositoryImpl(localRepository, apiClient, remoteConfigManager); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ContentDeserializer.java b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ContentDeserializer.java index def84ac32..f049e7a5c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ContentDeserializer.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ContentDeserializer.java @@ -13,6 +13,7 @@ import com.habitrpg.android.habitica.models.FAQArticle; import com.habitrpg.android.habitica.models.Skill; import com.habitrpg.android.habitica.models.inventory.Customization; import com.habitrpg.android.habitica.models.inventory.Egg; +import com.habitrpg.android.habitica.models.inventory.Equipment; import com.habitrpg.android.habitica.models.inventory.Food; import com.habitrpg.android.habitica.models.inventory.HatchingPotion; import com.habitrpg.android.habitica.models.inventory.Mount; @@ -39,12 +40,12 @@ public class ContentDeserializer implements JsonDeserializer { ContentResult result = new ContentResult(); JsonObject object = json.getAsJsonObject(); - result.potion = context.deserialize(object.get("potion"), ShopItem.class); - result.potion.imageName = "shop_potion"; - result.potion.currency = "gold"; - result.armoire = context.deserialize(object.get("armoire"), ShopItem.class); - result.armoire.imageName = "shop_armoire"; - result.armoire.currency = "gold"; + result.potion = context.deserialize(object.get("potion"), Equipment.class); + //result.potion.imageName = "shop_potion"; + //result.potion.currency = "gold"; + result.armoire = context.deserialize(object.get("armoire"), Equipment.class); + //result.armoire.imageName = "shop_armoire"; + //result.armoire.currency = "gold"; result.gear = context.deserialize(object.get("gear"), ContentGear.class); result.quests = context.deserialize(object.get("quests"), new TypeToken>() { diff --git a/config-android.json b/config-android.json new file mode 100644 index 000000000..138051260 --- /dev/null +++ b/config-android.json @@ -0,0 +1,4 @@ +{ + "enableRepeatables": true, + "enableNewShops": false +}