diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index ecd5411d6..fbf423e32 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -268,6 +268,7 @@
You rummage in the Armoire and find food. What\'s that doing in here?
You wrestle with the Armoire and gain Experience. Take that!
Sell (%d Gold)
+ Are you sure you want to sell this %s?
Sell
Hatch with potion
Hatch with egg
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.kt
index b2f823356..188551ac3 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.kt
@@ -497,7 +497,12 @@ class RealmInventoryLocalRepository(realm: Realm) :
}
val stats = updatedUser.stats
if (stats != null) {
- user.stats = stats
+ user.stats?.apply {
+ hp = stats.hp
+ mp = stats.mp
+ exp = stats.exp
+ gp = stats.gp
+ }
}
}
return user
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt
index 15605d447..bcacfdbc5 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt
@@ -50,7 +50,7 @@ class ItemRecyclerAdapter(val context: Context) :
notifyDataSetChanged()
}
- var onSellItem: ((OwnedItem) -> Unit)? = null
+ var onSellItem: ((Item, OwnedItem) -> Unit)? = null
var onQuestInvitation: ((QuestContent) -> Unit)? = null
var onOpenMysteryItem: ((Item) -> Unit)? = null
var onStartHatching: ((Item) -> Unit)? = null
@@ -276,6 +276,7 @@ class ItemRecyclerAdapter(val context: Context) :
if (!(selectedItem is QuestContent || selectedItem is SpecialItem || ownedItem?.itemType == "special") && index == 0) {
ownedItem?.let { selectedOwnedItem ->
onSellItem?.invoke(
+ selectedItem,
selectedOwnedItem,
)
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemDialogFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemDialogFragment.kt
index ee0900549..c0c586c07 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemDialogFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemDialogFragment.kt
@@ -11,6 +11,7 @@ import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.databinding.FragmentItemsDialogBinding
+import com.habitrpg.android.habitica.extensions.addCancelButton
import com.habitrpg.android.habitica.extensions.addCloseButton
import com.habitrpg.android.habitica.helpers.Analytics
import com.habitrpg.android.habitica.helpers.EventCategory
@@ -24,6 +25,7 @@ import com.habitrpg.android.habitica.models.inventory.Item
import com.habitrpg.android.habitica.models.inventory.Pet
import com.habitrpg.android.habitica.models.inventory.QuestContent
import com.habitrpg.android.habitica.models.inventory.SpecialItem
+import com.habitrpg.android.habitica.models.user.OwnedItem
import com.habitrpg.android.habitica.models.user.OwnedPet
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.activities.MainActivity
@@ -31,6 +33,7 @@ import com.habitrpg.android.habitica.ui.adapter.inventory.ItemRecyclerAdapter
import com.habitrpg.android.habitica.ui.fragments.BaseDialogFragment
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
+import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.dialogs.OpenedMysteryitemDialog
import com.habitrpg.common.habitica.extensions.loadImage
import com.habitrpg.common.habitica.extensions.observeOnce
@@ -214,10 +217,8 @@ class ItemDialogFragment : BaseDialogFragment() {
adapter?.feedingPet = this.feedingPet
}
binding?.recyclerView?.adapter = adapter
- adapter?.onSellItem = {
- lifecycleScope.launchCatching {
- inventoryRepository.sellItem(it)
- }
+ adapter?.onSellItem = { item, ownedItem ->
+ showSellItemConfirmation(item, ownedItem)
}
adapter?.onQuestInvitation = {
lifecycleScope.launchCatching {
@@ -368,6 +369,18 @@ class ItemDialogFragment : BaseDialogFragment() {
MainNavigationController.navigate(R.id.marketFragment)
}
+ private fun showSellItemConfirmation(item: Item, ownedItem: OwnedItem) {
+ val dialog = HabiticaAlertDialog(requireContext())
+ dialog.setTitle(getString(R.string.sell_confirmation_title, item.text))
+ dialog.addButton(getString(R.string.sell, item.value), isPrimary = true, isDestructive = true) { _, _ ->
+ lifecycleScope.launchCatching {
+ inventoryRepository.sellItem(ownedItem)
+ }
+ }
+ dialog.addCancelButton()
+ dialog.show()
+ }
+
companion object {
private const val ITEM_TYPE_KEY = "CLASS_TYPE_KEY"
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt
index bf6c49d8d..0f1655c89 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt
@@ -15,6 +15,7 @@ import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.databinding.FragmentItemsBinding
+import com.habitrpg.android.habitica.extensions.addCancelButton
import com.habitrpg.android.habitica.extensions.addCloseButton
import com.habitrpg.android.habitica.helpers.Analytics
import com.habitrpg.android.habitica.helpers.EventCategory
@@ -171,10 +172,8 @@ class ItemRecyclerFragment :
binding?.recyclerView?.adapter = adapter
}
adapter?.onUseSpecialItem = { onSpecialItemSelected(it) }
- adapter?.onSellItem = {
- lifecycleScope.launchCatching {
- inventoryRepository.sellItem(it)
- }
+ adapter?.onSellItem = { item, ownedItem ->
+ showSellItemConfirmation(item, ownedItem)
}
adapter?.onQuestInvitation = {
lifecycleScope.launchCatching {
@@ -395,6 +394,18 @@ class ItemRecyclerFragment :
loadItems()
}
+ private fun showSellItemConfirmation(item: Item, ownedItem: OwnedItem) {
+ val dialog = HabiticaAlertDialog(requireContext())
+ dialog.setTitle(getString(R.string.sell_confirmation_title, item.text))
+ dialog.addButton(getString(R.string.sell, item.value), isPrimary = true, isDestructive = true) { _, _ ->
+ lifecycleScope.launchCatching {
+ inventoryRepository.sellItem(ownedItem)
+ }
+ }
+ dialog.addCancelButton()
+ dialog.show()
+ }
+
companion object {
private const val ITEM_TYPE_KEY = "CLASS_TYPE_KEY"
private const val ITEM_TYPE_TEXT_KEY = "CLASS_TYPE_TEXT_KEY"