diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt index bf3f061d6..ffc67f48c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt @@ -1,9 +1,11 @@ package com.habitrpg.android.habitica.ui.fragments.inventory.shops +import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.runtime.mutableStateOf @@ -21,6 +23,7 @@ import com.habitrpg.android.habitica.models.shops.Shop import com.habitrpg.android.habitica.models.shops.ShopCategory import com.habitrpg.android.habitica.models.shops.ShopItem import com.habitrpg.android.habitica.models.social.Group +import com.habitrpg.android.habitica.ui.activities.ClassSelectionActivity import com.habitrpg.android.habitica.ui.adapter.inventory.ShopRecyclerAdapter import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator @@ -28,6 +31,7 @@ import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel import com.habitrpg.android.habitica.ui.views.CurrencyText import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.getTranslatedClassName +import com.habitrpg.android.habitica.ui.views.insufficientCurrency.InsufficientGemsDialog import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.common.habitica.helpers.RecyclerViewState @@ -65,6 +69,13 @@ open class ShopFragment : BaseMainFragment() override var binding: FragmentRefreshRecyclerviewBinding? = null + private val classSelectionResult = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { + lifecycleScope.launch(ExceptionHandler.coroutine()) { + userRepository.retrieveUser(true, true) + } + } + override fun createBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentRefreshRecyclerviewBinding { return FragmentRefreshRecyclerviewBinding.inflate(inflater, container, false) } @@ -215,17 +226,33 @@ open class ShopFragment : BaseMainFragment() } private fun showClassChangeDialog(classIdentifier: String) { - context?.let { context -> - val alert = HabiticaAlertDialog(context) - alert.setTitle(getString(R.string.class_confirmation_price, getTranslatedClassName(requireContext().resources, classIdentifier), 3)) - alert.addButton(R.string.choose_class, true) { _, _ -> - lifecycleScope.launch(ExceptionHandler.coroutine()) { - userRepository.changeClass(classIdentifier) - loadMarketGear() + lifecycleScope.launch(ExceptionHandler.coroutine()) { + val user = userViewModel.user.value ?: return@launch + val bundle = Bundle() + bundle.putBoolean("isInitialSelection", user.flags?.classSelected == false) + val intent = Intent(activity, ClassSelectionActivity::class.java) + intent.putExtras(bundle) + if (user.flags?.classSelected == true && user.preferences?.disableClasses == false) { + if ((user.gemCount ?: 0) >= 3) { + context?.let { context -> + val dialog = HabiticaAlertDialog(context) + dialog.setTitle(R.string.change_class_confirmation) + dialog.addButton(R.string.change_class, true, true) { _, _ -> + classSelectionResult.launch( + intent + ) + } + dialog.addButton(R.string.dialog_go_back, false) + dialog.enqueue() + } + } else { + val dialog = context?.let { InsufficientGemsDialog(it, 3) } + dialog?.show() } + } else { + classSelectionResult.launch(intent) } - alert.addButton(R.string.dialog_go_back, false) - alert.show() + loadMarketGear() } }