diff --git a/Habitica/res/layout/dialog_purchase_content_item.xml b/Habitica/res/layout/dialog_purchase_content_item.xml
index c61f9b15c..568e5b470 100644
--- a/Habitica/res/layout/dialog_purchase_content_item.xml
+++ b/Habitica/res/layout/dialog_purchase_content_item.xml
@@ -1,6 +1,7 @@
+
+
Read More
You are unable to buy that amount.
Still have a question?
- Delete Checklist entry
%1$d/%2$d
Task list display
Onboarding Tasks
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt
index a619c621b..4d96a3b6b 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt
@@ -68,10 +68,13 @@ open class ShopItem : RealmObject() {
val isTypeAnimal: Boolean
get() = "pets" == purchaseType || "mounts" == purchaseType
+ val canPurchaseBulk: Boolean
+ get() = "eggs" == purchaseType || "hatchingPotions" == purchaseType || "food" == purchaseType
+
fun canAfford(user: User?, quantity: Int): Boolean = when(currency) {
"gold" -> (value * quantity) <= user?.stats?.gp ?: 0.0
- "gems" -> true
- "hourglasses" -> true
+ "gems" -> (value * quantity) <= user?.gemCount?.toDouble() ?: 0.0
+ "hourglasses" -> (value * quantity) <= user?.hourglassCount?.toDouble() ?: 0.0
else -> false
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt
index 6dff63929..5ee21ed3e 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt
@@ -93,17 +93,29 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop
val contentView: PurchaseDialogContent
when {
- shopItem.isTypeItem -> contentView = PurchaseDialogItemContent(context)
- shopItem.isTypeQuest -> {
- contentView = PurchaseDialogQuestContent(context)
- inventoryRepository.getQuestContent(shopItem.key).firstElement().subscribe(Consumer { contentView.setQuestContent(it) }, RxErrorHandler.handleEmptyError())
+ shopItem.isTypeItem -> {
+ val itemContent = PurchaseDialogItemContent(context)
+ if (shopItem.canPurchaseBulk) {
+ itemContent.stepperView.visibility = View.VISIBLE
+ itemContent.stepperView.onValueChanged = {
+ purchaseQuantity = it.toInt()
+ updatePurchaseTotal()
+ }
+ } else {
+ itemContent.stepperView.visibility = View.GONE
+ }
+ contentView = itemContent
}
- shopItem.isTypeGear -> {
+ shopItem.isTypeQuest -> {
+ contentView = PurchaseDialogQuestContent(context)
+ inventoryRepository.getQuestContent(shopItem.key).firstElement().subscribe(Consumer { contentView.setQuestContent(it) }, RxErrorHandler.handleEmptyError())
+ }
+ shopItem.isTypeGear -> {
contentView = PurchaseDialogGearContent(context)
- inventoryRepository.getEquipment(shopItem.key).firstElement().subscribe(Consumer { contentView.setEquipment(it) }, RxErrorHandler.handleEmptyError())
+ inventoryRepository.getEquipment(shopItem.key).firstElement().subscribe(Consumer { contentView.setEquipment(it) }, RxErrorHandler.handleEmptyError())
checkGearClass()
}
- "gems" == shopItem.purchaseType -> {
+ "gems" == shopItem.purchaseType -> {
val gemContent = PurchaseDialogGemsContent(context)
gemContent.stepperView.onValueChanged = {
purchaseQuantity = it.toInt()
@@ -111,7 +123,7 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop
}
contentView = gemContent
}
- else -> contentView = PurchaseDialogBaseContent(context)
+ else -> contentView = PurchaseDialogBaseContent(context)
}
amountErrorLabel = contentView.findViewById(R.id.amount_error_label)
@@ -123,7 +135,7 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop
private fun updatePurchaseTotal() {
priceLabel.value = shopItem.value.toDouble() * purchaseQuantity
- if (shopItem.canAfford(user, purchaseQuantity) && !shopItem.locked && purchaseQuantity >= 1) {
+ if ((shopItem.currency != "gold" || shopItem.canAfford(user, purchaseQuantity)) && !shopItem.locked && purchaseQuantity >= 1) {
buyButton.background = context.getDrawable(R.drawable.button_background_primary)
priceLabel.setTextColor(ContextCompat.getColor(context, R.color.white))
buyLabel.setTextColor(ContextCompat.getColor(context, R.color.white))
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogItemContent.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogItemContent.kt
index 68d4e599b..8b53010c7 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogItemContent.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogItemContent.kt
@@ -4,12 +4,16 @@ import android.content.Context
import android.util.AttributeSet
import android.widget.TextView
import com.habitrpg.android.habitica.R
+import com.habitrpg.android.habitica.extensions.asDrawable
import com.habitrpg.android.habitica.ui.helpers.bindView
import com.habitrpg.android.habitica.models.shops.ShopItem
+import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
+import com.habitrpg.android.habitica.ui.views.tasks.form.StepperValueFormView
class PurchaseDialogItemContent : PurchaseDialogContent {
internal val notesTextView: TextView by bindView(R.id.notesTextView)
+ val stepperView: StepperValueFormView by bindView(R.id.stepper_view)
override val viewId: Int
get() = R.layout.dialog_purchase_content_item
@@ -21,5 +25,6 @@ class PurchaseDialogItemContent : PurchaseDialogContent {
override fun setItem(item: ShopItem) {
super.setItem(item)
notesTextView.text = item.notes
+ stepperView.iconDrawable = null
}
}