mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-07-13 17:51:57 +00:00
Merge pull request #1971 from Hafizzle/Fiz/change-class-market-flow
Change class market flow fix
This commit is contained in:
commit
9ef7b99d2d
1 changed files with 52 additions and 31 deletions
|
|
@ -1,11 +1,9 @@
|
||||||
package com.habitrpg.android.habitica.ui.fragments.inventory.shops
|
package com.habitrpg.android.habitica.ui.fragments.inventory.shops
|
||||||
|
|
||||||
import android.content.Intent
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.runtime.mutableStateOf
|
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.ShopCategory
|
||||||
import com.habitrpg.android.habitica.models.shops.ShopItem
|
import com.habitrpg.android.habitica.models.shops.ShopItem
|
||||||
import com.habitrpg.android.habitica.models.social.Group
|
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.adapter.inventory.ShopRecyclerAdapter
|
||||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
|
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
|
||||||
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
|
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
|
||||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||||
import com.habitrpg.android.habitica.ui.views.CurrencyText
|
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.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.insufficientCurrency.InsufficientGemsDialog
|
||||||
import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog
|
import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog
|
||||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||||
import com.habitrpg.common.habitica.helpers.RecyclerViewState
|
import com.habitrpg.common.habitica.helpers.RecyclerViewState
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.filter
|
import kotlinx.coroutines.flow.filter
|
||||||
import kotlinx.coroutines.flow.firstOrNull
|
import kotlinx.coroutines.flow.firstOrNull
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
|
|
@ -68,13 +67,6 @@ open class ShopFragment : BaseMainFragment<FragmentRefreshRecyclerviewBinding>()
|
||||||
|
|
||||||
override var binding: FragmentRefreshRecyclerviewBinding? = null
|
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 {
|
override fun createBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentRefreshRecyclerviewBinding {
|
||||||
return FragmentRefreshRecyclerviewBinding.inflate(inflater, container, false)
|
return FragmentRefreshRecyclerviewBinding.inflate(inflater, container, false)
|
||||||
}
|
}
|
||||||
|
|
@ -233,31 +225,51 @@ open class ShopFragment : BaseMainFragment<FragmentRefreshRecyclerviewBinding>()
|
||||||
private fun showClassChangeDialog(classIdentifier: String) {
|
private fun showClassChangeDialog(classIdentifier: String) {
|
||||||
lifecycleScope.launch(ExceptionHandler.coroutine()) {
|
lifecycleScope.launch(ExceptionHandler.coroutine()) {
|
||||||
val user = userViewModel.user.value ?: return@launch
|
val user = userViewModel.user.value ?: return@launch
|
||||||
val bundle = Bundle()
|
context?.let { context ->
|
||||||
bundle.putBoolean("isInitialSelection", user.flags?.classSelected == false)
|
if ((user.gemCount ?: 0) <= 2) {
|
||||||
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 = mainActivity?.let { InsufficientGemsDialog(it, 3) }
|
val dialog = mainActivity?.let { InsufficientGemsDialog(it, 3) }
|
||||||
dialog?.show()
|
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<FragmentRefreshRecyclerviewBinding>()
|
||||||
layoutManager?.requestLayout()
|
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 {
|
companion object {
|
||||||
private const val SHOP_IDENTIFIER_KEY = "SHOP_IDENTIFIER_KEY"
|
private const val SHOP_IDENTIFIER_KEY = "SHOP_IDENTIFIER_KEY"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue