From 89ab3fc36095b38c6c777ef5be5ca704a2ca95c0 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 6 Jan 2025 15:50:17 +0100 Subject: [PATCH] show confirmation when selling items --- Habitica/res/values/strings.xml | 1 + .../RealmInventoryLocalRepository.kt | 7 ++++++- .../adapter/inventory/ItemRecyclerAdapter.kt | 3 ++- .../inventory/items/ItemDialogFragment.kt | 21 +++++++++++++++---- .../inventory/items/ItemRecyclerFragment.kt | 19 +++++++++++++---- 5 files changed, 41 insertions(+), 10 deletions(-) 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"