From 9d1474168a338f8ae635189b53f4c4a947ef99b1 Mon Sep 17 00:00:00 2001 From: Hafiz Date: Tue, 9 May 2023 17:53:57 -0400 Subject: [PATCH 1/3] Change class market flow fix --- .../fragments/inventory/shops/ShopFragment.kt | 81 ++++++++++++------- 1 file changed, 51 insertions(+), 30 deletions(-) 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 f588dfada..b3a674395 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,11 +1,9 @@ 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 @@ -23,18 +21,19 @@ 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 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.dialogs.HabiticaProgressDialog 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 import com.habitrpg.common.habitica.helpers.launchCatching +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.map @@ -68,13 +67,6 @@ 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) } @@ -233,31 +225,51 @@ open class ShopFragment : BaseMainFragment() private fun showClassChangeDialog(classIdentifier: String) { 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) { + context?.let { context -> 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 = mainActivity?.let { InsufficientGemsDialog(it, 3) } dialog?.show() + return@launch + } + if (user.flags?.classSelected == true && user.preferences?.disableClasses == false) { + val alert = HabiticaAlertDialog(context) + alert.setTitle(getString(R.string.change_class_selected_confirmation, classIdentifier)) + alert.setMessage(getString(R.string.change_class_equipment_warning)) + alert.addButton(R.string.choose_class, true) { _, _ -> + val dialog = HabiticaProgressDialog.show( + context, + getString(R.string.changing_class_progress), + 300 + ) + lifecycleScope.launch(Dispatchers.Main) { + userRepository.changeClass(classIdentifier) + dialog.dismiss() + displayClassChanged(classIdentifier) + loadMarketGear() + } + } + alert.addButton(R.string.dialog_go_back, false) + alert.show() + } else { + val alert = HabiticaAlertDialog(context) + alert.setTitle(getString(R.string.class_confirmation, classIdentifier)) + alert.addButton(R.string.choose_class, true) { _, _ -> + val dialog = HabiticaProgressDialog.show( + context, + getString(R.string.changing_class_progress), + 300 + ) + lifecycleScope.launch(Dispatchers.Main) { + userRepository.changeClass(classIdentifier) + dialog.dismiss() + displayClassChanged(classIdentifier) + loadMarketGear() + } + } + alert.addButton(R.string.dialog_go_back, false) + alert.show() } - } else { - classSelectionResult.launch(intent) } - loadMarketGear() } } @@ -370,6 +382,15 @@ open class ShopFragment : BaseMainFragment() layoutManager?.requestLayout() } + private fun displayClassChanged(selectedClass: String) { + context?.let { context -> + val alert = HabiticaAlertDialog(context) + alert.setMessage(getString(R.string.class_changed_description, selectedClass)) + alert.addButton(getString(R.string.complete_tutorial), true){ _, _ -> alert.dismiss() } + alert.show() + } + } + companion object { private const val SHOP_IDENTIFIER_KEY = "SHOP_IDENTIFIER_KEY" } From b4c710f87ba1170dbe99631f94fdb2f7307c1221 Mon Sep 17 00:00:00 2001 From: Hafiz Date: Tue, 9 May 2023 18:15:16 -0400 Subject: [PATCH 2/3] Gem count check fix --- .../habitica/ui/fragments/inventory/shops/ShopFragment.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 b3a674395..5d1ff336d 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 @@ -226,11 +226,11 @@ open class ShopFragment : BaseMainFragment() lifecycleScope.launch(ExceptionHandler.coroutine()) { val user = userViewModel.user.value ?: return@launch context?.let { context -> - if ((user.gemCount ?: 0) >= 3) { + if ((user.gemCount ?: 0) <= 2) { val dialog = mainActivity?.let { InsufficientGemsDialog(it, 3) } dialog?.show() return@launch - } + } else if (user.flags?.classSelected == true && user.preferences?.disableClasses == false) { val alert = HabiticaAlertDialog(context) alert.setTitle(getString(R.string.change_class_selected_confirmation, classIdentifier)) From 3c98f21889f7d5d9732aefac397544a7da83322b Mon Sep 17 00:00:00 2001 From: Hafiz Date: Tue, 9 May 2023 18:15:48 -0400 Subject: [PATCH 3/3] >.> --- .../habitica/ui/fragments/inventory/shops/ShopFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 5d1ff336d..5bac30267 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 @@ -230,7 +230,7 @@ open class ShopFragment : BaseMainFragment() val dialog = mainActivity?.let { InsufficientGemsDialog(it, 3) } dialog?.show() return@launch - } else + } if (user.flags?.classSelected == true && user.preferences?.disableClasses == false) { val alert = HabiticaAlertDialog(context) alert.setTitle(getString(R.string.change_class_selected_confirmation, classIdentifier))