From 52624c7e7cd949ef9bc28b602728527fd2469119 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Wed, 3 Aug 2016 15:42:15 +0200 Subject: [PATCH] Improvements to shops --- .../habitica/ui/activities/MainActivity.java | 47 ++++++++++++------- .../inventory/ShopRecyclerAdapter.java | 24 ++++++---- .../inventory/shops/ShopFragment.java | 10 ++-- .../habitrpgwrapper/lib/api/ApiService.java | 3 ++ .../habitrpgwrapper/lib/models/ShopItem.java | 13 +++++ 5 files changed, 64 insertions(+), 33 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java index 7c685e246..9cfdbde55 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java @@ -138,6 +138,7 @@ import java.util.concurrent.TimeUnit; import javax.inject.Inject; import butterknife.BindView; +import retrofit2.adapter.rxjava.HttpException; import rx.Observable; import rx.functions.Action1; @@ -868,26 +869,38 @@ public class MainActivity extends BaseActivity implements Action1, Ha @Subscribe public void onEvent(final BuyGemItemCommand event) { - Observable observable; - if (event.shopIdentifier.equals(Shop.TIME_TRAVELERS_SHOP)) { - if (event.item.purchaseType.equals("gear")) { - observable = apiHelper.apiService.purchaseMysterySet(event.item.categoryIdentifier); + if (event.item.canBuy(user) || !event.item.getCurrency().equals("gems")) { + Observable observable; + if (event.shopIdentifier.equals(Shop.TIME_TRAVELERS_SHOP)) { + if (event.item.purchaseType.equals("gear")) { + observable = apiHelper.apiService.purchaseMysterySet(event.item.categoryIdentifier); + } else { + observable = apiHelper.apiService.purchaseHourglassItem(event.item.purchaseType, event.item.key); + } + } else if (event.item.purchaseType.equals("quests")) { + observable = apiHelper.apiService.purchaseQuest(event.item.key); } else { - observable = apiHelper.apiService.purchaseHourglassItem(event.item.purchaseType, event.item.key); + observable = apiHelper.apiService.purchaseItem(event.item.purchaseType, event.item.key); } + observable + .compose(apiHelper.configureApiCallObserver()) + .doOnNext(aVoid -> { + showSnackbar(this, floatingMenuWrapper, getString(R.string.successful_purchase, event.item.text), SnackbarDisplayType.NORMAL); + }) + .subscribe(buyResponse -> { + apiHelper.retrieveUser(false) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(new HabitRPGUserCallback(this), throwable -> { + }); + }, throwable -> { + HttpException error = (HttpException) throwable; + if (error.code() == 401 && event.item.getCurrency().equals("gems")) { + openGemPurchaseFragment(null); + } + }); } else { - observable = apiHelper.apiService.purchaseItem(event.item.purchaseType, event.item.key); + openGemPurchaseFragment(null); } - observable - .compose(apiHelper.configureApiCallObserver()) - .doOnNext(aVoid -> { - showSnackbar(this, floatingMenuWrapper, getString(R.string.successful_purchase, event.item.text), SnackbarDisplayType.NORMAL); - }) - .subscribe(buyResponse -> { - apiHelper.retrieveUser(false) - .compose(apiHelper.configureApiCallObserver()) - .subscribe(new HabitRPGUserCallback(this), throwable -> {}); - }, throwable -> {}); } @Subscribe @@ -978,7 +991,7 @@ public class MainActivity extends BaseActivity implements Action1, Ha } @Subscribe - public void onEvent(OpenGemPurchaseFragmentCommand cmd) { + public void openGemPurchaseFragment(OpenGemPurchaseFragmentCommand cmd) { drawer.setSelection(MainDrawerBuilder.SIDEBAR_PURCHASE); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.java index 559a5e7be..18431b772 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.java @@ -162,6 +162,10 @@ public class ShopRecyclerAdapter extends RecyclerView.Adapter { this.shop = shop; this.adapter.setShop(shop); diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java index 8a0a5f4ef..df990a3cf 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java @@ -75,6 +75,9 @@ public interface ApiService { @POST("user/buy-mystery-set/{key}") Observable purchaseMysterySet(@Path("key") String itemKey); + @POST("user/buy-quest/{key}") + Observable purchaseQuest(@Path("key") String key); + @POST("user/sell/{type}/{key}") Observable sellItem(@Path("type") String itemType, @Path("key") String itemKey); diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/ShopItem.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/ShopItem.java index b7c1b47f1..efe333218 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/ShopItem.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/ShopItem.java @@ -60,6 +60,9 @@ public class ShopItem { } public Boolean getLocked() { + if (locked == null) { + return false; + } return locked; } @@ -90,4 +93,14 @@ public class ShopItem { public void setUnlockCondition(ShopItemUnlockCondition unlockCondition) { this.unlockCondition = unlockCondition; } + + public boolean canBuy(HabitRPGUser user) { + if (getCurrency().equals("gold")) { + return getValue() < user.getStats().getGp(); + } else if (getCurrency().equals("gems")) { + return getValue() < user.getBalance(); + } else { + return false; + } + } }