From ce0fb93fc6d1b046f54d94ca1c9fddb23070d600 Mon Sep 17 00:00:00 2001 From: Hafiz Date: Thu, 7 Apr 2022 03:24:20 -0400 Subject: [PATCH] Observe user and set adapter after --- .../inventory/items/ItemDialogFragment.kt | 91 +++++++++++-------- .../inventory/items/ItemRecyclerFragment.kt | 62 ++++++++----- 2 files changed, 89 insertions(+), 64 deletions(-) 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 3216a8bc7..17233908d 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 @@ -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(), 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(), 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(), 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) { 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 f8121ad71..008770076 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 @@ -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(), SwipeRefreshL @Inject lateinit var userViewModel: MainUserViewModel + var user: User? = null var adapter: ItemRecyclerAdapter? = null var itemType: String? = null var transformationItems: MutableList = mutableListOf() @@ -96,15 +99,42 @@ class ItemRecyclerFragment : BaseFragment(), 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(), 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(), 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(), 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(), SwipeRefreshL { MainNavigationController.navigate( R.id.partyFragment, - bundleOf(Pair("partyID", userViewModel.user.value?.party?.id)) + bundleOf(Pair("partyID", user?.party?.id)) ) }, RxErrorHandler.handleEmptyError()