Observe user and set adapter after

This commit is contained in:
Hafiz 2022-04-07 03:24:20 -04:00 committed by Phillip Thelen
parent 59da021387
commit ce0fb93fc6
2 changed files with 89 additions and 64 deletions

View file

@ -13,6 +13,7 @@ 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.addCloseButton
import com.habitrpg.android.habitica.extensions.observeOnce
import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.helpers.RxErrorHandler
@ -33,6 +34,7 @@ import com.habitrpg.android.habitica.ui.fragments.BaseDialogFragment
import com.habitrpg.android.habitica.ui.helpers.EmptyItem
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.android.habitica.ui.views.dialogs.OpenedMysteryitemDialog
import io.reactivex.rxjava3.disposables.CompositeDisposable
import javax.inject.Inject
@ -51,6 +53,8 @@ class ItemDialogFragment : BaseDialogFragment<FragmentItemsBinding>(), SwipeRefr
lateinit var hatchPetUseCase: HatchPetUseCase
@Inject
lateinit var feedPetUseCase: FeedPetUseCase
@Inject
lateinit var userViewModel: MainUserViewModel
var adapter: ItemRecyclerAdapter? = null
var itemType: String? = null
@ -106,10 +110,56 @@ class ItemDialogFragment : BaseDialogFragment<FragmentItemsBinding>(), SwipeRefr
openMarket()
}
val context = activity
layoutManager = androidx.recyclerview.widget.LinearLayoutManager(context)
binding?.recyclerView?.layoutManager = layoutManager
activity?.let {
binding?.recyclerView?.addItemDecoration(androidx.recyclerview.widget.DividerItemDecoration(it, androidx.recyclerview.widget.DividerItemDecoration.VERTICAL))
}
binding?.recyclerView?.itemAnimator = SafeDefaultItemAnimator()
userViewModel.user.observeOnce(this) {
if (it != null){
user = it
setAdapter()
}
}
if (savedInstanceState != null) {
this.itemType = savedInstanceState.getString(ITEM_TYPE_KEY, "")
}
when {
this.isHatching -> {
binding?.titleTextView?.text = getString(R.string.hatch_with, this.hatchingItem?.text)
binding?.titleTextView?.visibility = View.VISIBLE
binding?.footerTextView?.text = getString(R.string.hatching_market_info)
binding?.footerTextView?.visibility = View.VISIBLE
binding?.openMarketButton?.visibility = View.VISIBLE
}
this.isFeeding -> {
binding?.titleTextView?.text = getString(R.string.dialog_feeding, this.feedingPet?.text)
binding?.titleTextView?.visibility = View.VISIBLE
binding?.footerTextView?.text = getString(R.string.feeding_market_info)
binding?.footerTextView?.visibility = View.VISIBLE
binding?.openMarketButton?.visibility = View.VISIBLE
}
else -> {
binding?.titleTextView?.visibility = View.GONE
binding?.footerTextView?.visibility = View.GONE
binding?.openMarketButton?.visibility = View.GONE
}
}
binding?.openMarketButton?.setOnClickListener {
dismiss()
openMarket()
}
this.loadItems()
}
private fun setAdapter(){
val context = activity
adapter = binding?.recyclerView?.adapter as? ItemRecyclerAdapter
if (adapter == null) {
@ -174,43 +224,6 @@ class ItemDialogFragment : BaseDialogFragment<FragmentItemsBinding>(), SwipeRefr
compositeSubscription.add(adapter.feedPetEvents.subscribeWithErrorHandler { feedPet(it) })
}
}
activity?.let {
binding?.recyclerView?.addItemDecoration(androidx.recyclerview.widget.DividerItemDecoration(it, androidx.recyclerview.widget.DividerItemDecoration.VERTICAL))
}
binding?.recyclerView?.itemAnimator = SafeDefaultItemAnimator()
if (savedInstanceState != null) {
this.itemType = savedInstanceState.getString(ITEM_TYPE_KEY, "")
}
when {
this.isHatching -> {
binding?.titleTextView?.text = getString(R.string.hatch_with, this.hatchingItem?.text)
binding?.titleTextView?.visibility = View.VISIBLE
binding?.footerTextView?.text = getString(R.string.hatching_market_info)
binding?.footerTextView?.visibility = View.VISIBLE
binding?.openMarketButton?.visibility = View.VISIBLE
}
this.isFeeding -> {
binding?.titleTextView?.text = getString(R.string.dialog_feeding, this.feedingPet?.text)
binding?.titleTextView?.visibility = View.VISIBLE
binding?.footerTextView?.text = getString(R.string.feeding_market_info)
binding?.footerTextView?.visibility = View.VISIBLE
binding?.openMarketButton?.visibility = View.VISIBLE
}
else -> {
binding?.titleTextView?.visibility = View.GONE
binding?.footerTextView?.visibility = View.GONE
binding?.openMarketButton?.visibility = View.GONE
}
}
binding?.openMarketButton?.setOnClickListener {
dismiss()
openMarket()
}
this.loadItems()
}
private fun feedPet(food: Food) {

View file

@ -16,6 +16,7 @@ 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.addCloseButton
import com.habitrpg.android.habitica.extensions.observeOnce
import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.helpers.RxErrorHandler
@ -29,6 +30,7 @@ import com.habitrpg.android.habitica.models.inventory.SpecialItem
import com.habitrpg.android.habitica.models.responses.SkillResponse
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.BaseActivity
import com.habitrpg.android.habitica.ui.activities.MainActivity
import com.habitrpg.android.habitica.ui.activities.SkillMemberActivity
@ -57,6 +59,7 @@ class ItemRecyclerFragment : BaseFragment<FragmentItemsBinding>(), SwipeRefreshL
@Inject
lateinit var userViewModel: MainUserViewModel
var user: User? = null
var adapter: ItemRecyclerAdapter? = null
var itemType: String? = null
var transformationItems: MutableList<OwnedItem> = mutableListOf()
@ -96,15 +99,42 @@ class ItemRecyclerFragment : BaseFragment<FragmentItemsBinding>(), SwipeRefreshL
}
}
val context = activity
layoutManager = androidx.recyclerview.widget.LinearLayoutManager(context)
binding?.recyclerView?.layoutManager = layoutManager
activity?.let {
binding?.recyclerView?.addItemDecoration(androidx.recyclerview.widget.DividerItemDecoration(it, androidx.recyclerview.widget.DividerItemDecoration.VERTICAL))
}
binding?.recyclerView?.itemAnimator = SafeDefaultItemAnimator()
userViewModel.user.observeOnce(this) {
if (it != null){
user = it
setAdapter()
}
}
if (savedInstanceState != null) {
this.itemType = savedInstanceState.getString(ITEM_TYPE_KEY, "")
}
binding?.titleTextView?.visibility = View.GONE
binding?.footerTextView?.visibility = View.GONE
binding?.openMarketButton?.visibility = View.GONE
binding?.openMarketButton?.setOnClickListener {
openMarket()
}
this.loadItems()
}
private fun setAdapter(){
val context = activity
adapter = binding?.recyclerView?.adapter as? ItemRecyclerAdapter
if (adapter == null) {
context?.let {
adapter = ItemRecyclerAdapter(context, userViewModel.user.value)
adapter = ItemRecyclerAdapter(context, user)
}
binding?.recyclerView?.adapter = adapter
adapter?.useSpecialEvents?.subscribeWithErrorHandler { onSpecialItemSelected(it) }?.let { compositeSubscription.add(it) }
@ -128,7 +158,7 @@ class ItemRecyclerFragment : BaseFragment<FragmentItemsBinding>(), SwipeRefreshL
)
compositeSubscription.add(
adapter.getOpenMysteryItemFlowable()
.flatMap { inventoryRepository.openMysteryItem(userViewModel.user.value) }
.flatMap { inventoryRepository.openMysteryItem(user) }
.doOnNext {
val activity = activity as? MainActivity
if (activity != null) {
@ -152,24 +182,6 @@ class ItemRecyclerFragment : BaseFragment<FragmentItemsBinding>(), SwipeRefreshL
compositeSubscription.addAll(adapter.startNewPartyEvents.subscribeWithErrorHandler { createNewParty(it) })
}
}
activity?.let {
binding?.recyclerView?.addItemDecoration(androidx.recyclerview.widget.DividerItemDecoration(it, androidx.recyclerview.widget.DividerItemDecoration.VERTICAL))
}
binding?.recyclerView?.itemAnimator = SafeDefaultItemAnimator()
if (savedInstanceState != null) {
this.itemType = savedInstanceState.getString(ITEM_TYPE_KEY, "")
}
binding?.titleTextView?.visibility = View.GONE
binding?.footerTextView?.visibility = View.GONE
binding?.openMarketButton?.visibility = View.GONE
binding?.openMarketButton?.setOnClickListener {
openMarket()
}
this.loadItems()
}
private fun showHatchingDialog(item: Item) {
@ -221,9 +233,9 @@ class ItemRecyclerFragment : BaseFragment<FragmentItemsBinding>(), SwipeRefreshL
alert?.setMessage(R.string.quest_party_required_description)
alert?.addButton(R.string.create_new_party, true, false) { _, _ ->
socialRepository.createGroup(
getString(R.string.usernames_party, userViewModel.user.value?.profile?.name),
getString(R.string.usernames_party, user?.profile?.name),
"",
userViewModel.user.value?.id,
user?.id,
"party",
"",
false
@ -243,7 +255,7 @@ class ItemRecyclerFragment : BaseFragment<FragmentItemsBinding>(), SwipeRefreshL
{
MainNavigationController.navigate(
R.id.partyFragment,
bundleOf(Pair("partyID", userViewModel.user.value?.party?.id))
bundleOf(Pair("partyID", user?.party?.id))
)
},
RxErrorHandler.handleEmptyError()