From fcdeb8092b74ba0ce8660b0fece70e75f7f8a743 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Fri, 29 Jul 2016 11:59:56 +0200 Subject: [PATCH] various shop improvements --- Habitica/res/layout/row_shopitem.xml | 11 +++ Habitica/res/values/strings.xml | 11 +++ .../android/habitica/ui/ItemDetailDialog.java | 8 ++- .../habitica/ui/activities/MainActivity.java | 9 ++- .../inventory/ShopRecyclerAdapter.java | 72 ++++++++++++++----- .../habitrpgwrapper/lib/models/ShopItem.java | 9 +++ .../lib/models/ShopItemUnlockCondition.java | 18 +++++ 7 files changed, 117 insertions(+), 21 deletions(-) create mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/ShopItemUnlockCondition.java diff --git a/Habitica/res/layout/row_shopitem.xml b/Habitica/res/layout/row_shopitem.xml index 2310d9358..a23a3f264 100644 --- a/Habitica/res/layout/row_shopitem.xml +++ b/Habitica/res/layout/row_shopitem.xml @@ -48,4 +48,15 @@ android:background="@drawable/rounded_purple_square" android:paddingLeft="6dp" android:paddingStart="6dp" /> + diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index 8777d9893..390d4b3b9 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -352,4 +352,15 @@ To start, which parts of your life do you want to improve? Time Travelers Seasonal Shop You don\'t have any Inbox messages. You can send a user a new message from their public chat messages! + Unlock by inviting friends + Not enough Gold + You don\'t need to buy an health potion + %1$s successfully purchased + Confirm purchase + Purchase %1$s for %2$s %3$s + gem + hourglass + hourglasses + gold + gold diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/ItemDetailDialog.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/ItemDetailDialog.java index 265ebc3cc..2c1deed1c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/ItemDetailDialog.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/ItemDetailDialog.java @@ -8,6 +8,8 @@ import android.content.DialogInterface; import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; import android.support.v7.app.AlertDialog; +import android.text.Spannable; +import android.text.Spanned; import android.view.Gravity; import android.view.View; import android.widget.ImageView; @@ -84,7 +86,7 @@ public class ItemDetailDialog extends AlertDialog { }); } - public void setDescription(String description) { + public void setDescription(CharSequence description) { contentTextView.setText(description); contentTextView.setVisibility(View.VISIBLE); } @@ -97,6 +99,9 @@ public class ItemDetailDialog extends AlertDialog { case "gems": currencyImageView.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.ic_header_gem)); break; + default: + currencyImageView.setImageDrawable(null); + break; } } @@ -117,5 +122,4 @@ public class ItemDetailDialog extends AlertDialog { public void setBuyListener(OnClickListener listener) { this.setButton(BUTTON_POSITIVE, getContext().getText(R.string.reward_dialog_buy), listener); } - } 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 9e7c0736a..7c685e246 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 @@ -880,6 +880,9 @@ public class MainActivity extends BaseActivity implements Action1, Ha } 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()) @@ -892,7 +895,7 @@ public class MainActivity extends BaseActivity implements Action1, Ha final String rewardKey = event.Reward.getId(); if (user.getStats().getGp() < event.Reward.getValue()) { - showSnackbar(this, floatingMenuWrapper, "Not enough Gold", SnackbarDisplayType.FAILURE); + showSnackbar(this, floatingMenuWrapper, getString(R.string.no_gold), SnackbarDisplayType.FAILURE); return; } @@ -901,7 +904,7 @@ public class MainActivity extends BaseActivity implements Action1, Ha int maxHp = user.getStats().getMaxHealth(); if (currentHp == maxHp) { - UiUtils.showSnackbar(this, floatingMenuWrapper, "You don't need to buy an health potion", SnackbarDisplayType.FAILURE_BLUE); + UiUtils.showSnackbar(this, floatingMenuWrapper, getString(R.string.no_potion), SnackbarDisplayType.FAILURE_BLUE); return; } } @@ -910,7 +913,7 @@ public class MainActivity extends BaseActivity implements Action1, Ha apiHelper.apiService.buyItem(event.Reward.getId()) .compose(apiHelper.configureApiCallObserver()) .subscribe(buyResponse -> { - String snackbarMessage = event.Reward.getText() + " successfully purchased!"; + String snackbarMessage = getString(R.string.successful_purchase, event.Reward.getText()); if (event.Reward.getId().equals("armoire")) { if (buyResponse.armoire.get("type").equals("gear")) { 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 445d690fd..559a5e7be 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 @@ -12,6 +12,8 @@ import com.magicmicky.habitrpgwrapper.lib.models.ShopItem; import org.greenrobot.eventbus.EventBus; import android.content.Context; +import android.content.DialogInterface; +import android.support.v7.app.AlertDialog; import android.support.v7.widget.RecyclerView; import android.text.Html; import android.text.method.LinkMovementMethod; @@ -112,6 +114,8 @@ public class ShopRecyclerAdapter extends RecyclerView.Adapter this.buyItem()); + buyButton.setOnClickListener(view -> { + String currencyString = ""; + if (item.getCurrency().equals("gems")) { + if (item.getValue() == 1) { + currencyString = context.getString(R.string.gem); + } else { + currencyString = context.getString(R.string.gems); + } + } else if (item.getCurrency().equals("gold")) { + if (item.getValue() == 1) { + currencyString = context.getString(R.string.gold_singular); + } else { + currencyString = context.getString(R.string.gems_plural); + } + } else if (item.getCurrency().equals("hourglasses")) { + if (item.getValue() == 1) { + currencyString = context.getString(R.string.hourglass); + } else { + currencyString = context.getString(R.string.hourglasses); + } + } + new AlertDialog.Builder(context) + .setTitle(R.string.purchase_confirmation_title) + .setMessage(context.getString(R.string.confirm_purchase_text, item.getText(), item.getValue().toString(), currencyString)) + .setPositiveButton(android.R.string.yes, (dialog, which) -> this.buyItem()) + .setNegativeButton(android.R.string.no, (dialog, which) -> dialog.dismiss()) + .show(); + }); } private void buyItem() { @@ -141,20 +172,27 @@ public class ShopRecyclerAdapter extends RecyclerView.Adapter this.buyItem()); + if (item.getUnlockCondition() == null) { + dialog.setCurrency(item.getCurrency()); + dialog.setValue(item.getValue()); + dialog.setBuyListener((clickedDialog, which) -> this.buyItem()); + } dialog.show(); } } 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 3dbbb01cb..b7c1b47f1 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 @@ -13,6 +13,7 @@ public class ShopItem { public String currency; public String purchaseType; public String categoryIdentifier; + public ShopItemUnlockCondition unlockCondition; public String getKey() { return key; @@ -81,4 +82,12 @@ public class ShopItem { public void setPurchaseType(String purchaseType) { this.purchaseType = purchaseType; } + + public ShopItemUnlockCondition getUnlockCondition() { + return unlockCondition; + } + + public void setUnlockCondition(ShopItemUnlockCondition unlockCondition) { + this.unlockCondition = unlockCondition; + } } diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/ShopItemUnlockCondition.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/ShopItemUnlockCondition.java new file mode 100644 index 000000000..30aa83662 --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/ShopItemUnlockCondition.java @@ -0,0 +1,18 @@ +package com.magicmicky.habitrpgwrapper.lib.models; + +import com.habitrpg.android.habitica.R; + +public class ShopItemUnlockCondition { + + String condition; + + public int readableUnlockConditionId() { + switch (this.condition) { + + case "party invite": + return R.string.party_invite; + default: + return 0; + } + } +}