Pārlūkot izejas kodu

fix: 切换礼物类型,礼物说明条没更新

XiaodongLin 7 mēneši atpakaļ
vecāks
revīzija
dfc7429086

+ 2 - 2
app/src/main/java/com/adealink/weparty/module/gift/header/GiftInstructionViewComp.kt

@@ -37,13 +37,13 @@ class GiftInstructionViewComp(
     override fun observeViewModel() {
         super.observeViewModel()
         giftViewModel?.giftSelectLD?.observeWithoutCache(viewLifecycleOwner) {
-            if (it.instruction.isEmpty()) {
+            if (it?.instruction?.isNotEmpty()==true) {
                 giftInstructionRollRv.stopRoll()
                 giftInstructionRollRv.scrollToPosition(0)
                 giftInstructionRollRv.gone()
             } else {
                 giftInstructionRollRv.show()
-                giftInstructionAdapter.items = it.instruction
+                giftInstructionAdapter.items = it?.instruction?: emptyList()
                 giftInstructionAdapter.notifyDataSetChanged()
                 giftInstructionRollRv.startRoll()
             }

+ 13 - 1
app/src/main/java/com/adealink/weparty/module/gift/header/GiftPanelCustomHeaderComp.kt

@@ -11,6 +11,7 @@ import com.adealink.weparty.commonui.recycleview.diffutil.BaseListDiffUtil
 import com.adealink.weparty.module.gift.GiftModule
 import com.adealink.weparty.module.gift.data.CustomGiftConfig
 import com.adealink.weparty.module.gift.data.GiftInfo
+import com.adealink.weparty.module.gift.data.GiftPageType
 import com.adealink.weparty.module.gift.header.viewbinder.CPGiftHeaderViewBinder
 import com.adealink.weparty.module.gift.header.viewbinder.CustomGiftHeaderViewBinder
 import com.adealink.weparty.module.gift.header.viewbinder.LuckyGiftHeaderViewBinder
@@ -58,8 +59,19 @@ class GiftPanelCustomHeaderComp(
     }
 
     private fun updateGiftHeader() {
-        val selectedGift = selectedGift ?: return
+        val selectedGift = selectedGift
         val giftHeaderList = mutableListOf<RoomGiftHeaderData>()
+        if (selectedGift ==null){
+            // 子Tab(如定制礼物Tab)下可能没有选中礼物
+            // 定制Tab下礼物为空时要显示定制Header
+            if (giftViewModel?.selectedGiftPageType?.value == GiftPageType.CUSTOMIZE && customGiftConfig != null) {
+                giftHeaderList.add(RoomGiftHeaderData.CustomGiftHeaderData(customGiftConfig))
+            }
+            listAdapter.submitList(giftHeaderList)
+            fcvGiftHeaderContent.show(isShow = giftHeaderList.isNotEmpty())
+            return
+        }
+
         when {
             selectedGift.isExclusiveGift() -> {
                 giftHeaderList.add(RoomGiftHeaderData.CPGiftHeaderData())

+ 2 - 2
app/src/main/java/com/adealink/weparty/module/gift/viewmodel/IGiftViewModel.kt

@@ -38,7 +38,7 @@ interface IGiftViewModel {
     val giftsLD: LiveData<List<GiftInfo>>
     val pageGiftsLD: ExtLiveData<Pair<GiftPageType, List<GiftInfo>>>
     val sendGiftNotifyLD: ExtLiveData<SendGiftNotify>
-    val giftSelectLD: ExtLiveData<GiftInfo>
+    val giftSelectLD: ExtLiveData<GiftInfo?>
     val newerSendFirstGiftLD: ExtLiveData<NewerSendFirstGiftNotify>
     val customGiftConfigLD: LiveData<CustomGiftConfig>
     val freeGiftInfoUpdatedLD: ExtLiveData<GiftInfo>
@@ -74,7 +74,7 @@ interface IGiftViewModel {
     /**
      * 选择礼物
      */
-    fun selectGift(pageType: GiftPageType, giftInfo: GiftInfo)
+    fun selectGift(pageType: GiftPageType, giftInfo: GiftInfo?)
 
     /**
      * 选择用户

+ 10 - 15
module/gift/src/main/java/com/adealink/weparty/gift/backpack/GiftBackpackFragment.kt

@@ -1,35 +1,28 @@
 package com.adealink.weparty.gift.backpack
 
-import androidx.fragment.app.viewModels
 import androidx.recyclerview.widget.GridLayoutManager
 import com.adealink.frame.base.Rlt
 import com.adealink.frame.base.fastLazy
-import com.adealink.weparty.commonui.BaseFragment
-import com.adealink.weparty.commonui.recycleview.adapter.MultiTypeListAdapter
 import com.adealink.frame.mvvm.view.viewBinding
+import com.adealink.weparty.commonui.recycleview.adapter.MultiTypeListAdapter
 import com.adealink.weparty.commonui.recycleview.diffutil.BaseListDiffUtil
-import com.adealink.weparty.module.backpack.BackpackModule
-import com.adealink.weparty.module.backpack.UserPackageInfo
-import com.adealink.weparty.module.backpack.viewmodel.IBackpackViewModel
 import com.adealink.weparty.gift.R
 import com.adealink.weparty.gift.data.GiftBackpackItemData
-import com.adealink.weparty.module.gift.data.GiftPageType
 import com.adealink.weparty.gift.databinding.FragmentGiftBackpackBinding
 import com.adealink.weparty.gift.listener.IGiftBackpackOperationListener
-import com.adealink.weparty.gift.viewmodel.GiftViewModel
-import com.adealink.weparty.gift.viewmodel.GiftViewModelFactory
+import com.adealink.weparty.gift.panel.BaseGiftPageFragment
+import com.adealink.weparty.module.backpack.BackpackModule
+import com.adealink.weparty.module.backpack.UserPackageInfo
+import com.adealink.weparty.module.backpack.viewmodel.IBackpackViewModel
+import com.adealink.weparty.module.gift.data.GiftPageType
 
-class GiftBackpackFragment : BaseFragment(R.layout.fragment_gift_backpack),
+class GiftBackpackFragment : BaseGiftPageFragment(R.layout.fragment_gift_backpack),
     IGiftBackpackOperationListener {
     private val binding by viewBinding(FragmentGiftBackpackBinding::bind)
     private val backpackViewModel by fastLazy { BackpackModule.getBackpackViewModel(requireActivity()) }
     private val adapter by fastLazy { MultiTypeListAdapter(BaseListDiffUtil()) }
-    private val pageType = GiftPageType.BACKPACK
+    override val pageType = GiftPageType.BACKPACK
     var selectBackpackInfo: UserPackageInfo? = null
-    private val giftViewModel by viewModels<GiftViewModel>(
-        { this.requireActivity() },
-        factoryProducer = { GiftViewModelFactory() }
-    )
 
     override fun initViews() {
         super.initViews()
@@ -66,6 +59,8 @@ class GiftBackpackFragment : BaseFragment(R.layout.fragment_gift_backpack),
     override fun onResume() {
         super.onResume()
         giftViewModel.selectGiftPage(pageType)
+        // 只要进入到背包page即置空选中礼物 -> 无需展示提示横幅
+        giftViewModel.selectGift(pageType, null)
     }
 
     private fun onGetBackpackInfo(packageInfoList: List<UserPackageInfo>) {

+ 1 - 0
module/gift/src/main/java/com/adealink/weparty/gift/components/GiftPanelBottomOperateComp.kt

@@ -70,6 +70,7 @@ class GiftPanelBottomOperateComp(
         }
 
         giftViewModel.giftSelectLD.observeWithoutCache(viewLifecycleOwner) { giftInfo ->
+            giftInfo ?: return@observeWithoutCache
             if (giftInfo.isFreeGift()) {
                 //免费礼物每次只能送一次
                 updateSelectCount(1)

+ 3 - 3
module/gift/src/main/java/com/adealink/weparty/gift/viewmodel/GiftViewModel.kt

@@ -79,7 +79,7 @@ class GiftViewModel : BaseViewModel(), IGiftViewModel, IGiftListener {
     override val giftsLD: LiveData<List<GiftInfo>> = MutableLiveData()
     override val pageGiftsLD: ExtLiveData<Pair<GiftPageType, List<GiftInfo>>> = ExtMutableLiveData()
     override val sendGiftNotifyLD: ExtLiveData<SendGiftNotify> = ExtMutableLiveData()
-    override val giftSelectLD: ExtLiveData<GiftInfo> = ExtMutableLiveData()
+    override val giftSelectLD: ExtLiveData<GiftInfo?> = ExtMutableLiveData()
     override val newerSendFirstGiftLD: ExtLiveData<NewerSendFirstGiftNotify> = ExtMutableLiveData()
     override val customGiftConfigLD: LiveData<CustomGiftConfig> = MutableLiveData()
     override val freeGiftInfoUpdatedLD: ExtLiveData<GiftInfo> = ExtMutableLiveData()
@@ -168,11 +168,11 @@ class GiftViewModel : BaseViewModel(), IGiftViewModel, IGiftListener {
         }
     }
 
-    override fun selectGift(pageType: GiftPageType, giftInfo: GiftInfo) {
+    override fun selectGift(pageType: GiftPageType, giftInfo: GiftInfo?) {
         if (this.currentGiftPage != pageType) {
             return
         }
-        Log.d(TAG_GIFT, "selectGift, id:${giftInfo.id}, name:${giftInfo.name}")
+        Log.d(TAG_GIFT, "selectGift, id:${giftInfo?.id}, name:${giftInfo?.name}")
         giftSelectLD.send(giftInfo)
     }
 

+ 1 - 1
module/room/src/main/java/com/adealink/weparty/room/gift/RoomGiftPanelDialog.kt

@@ -112,7 +112,7 @@ class RoomGiftPanelDialog : BottomDialogFragment(R.layout.fragment_room_gift_pan
                 if (this.giftEffectCloseTipShown) {
                     return@observe
                 }
-                if (it.animType != EffectAnimType.IMAGE.type) {
+                if (it?.animType != EffectAnimType.IMAGE.type) {
                     if (attrViewModel.getRoomConfigSwitch(GlobalConfigType.GLOBAL_ROOM_GIFT_EFFECT.value)
                             .not()
                     ) {

+ 15 - 2
module/webview/src/main/java/com/adealink/weparty/webview/WebViewDialogFragment.kt

@@ -1,5 +1,6 @@
 package com.adealink.weparty.webview
 
+import android.content.Context
 import android.content.DialogInterface
 import android.graphics.Bitmap
 import android.graphics.Outline
@@ -252,13 +253,25 @@ class WebViewDialogFragment : BottomDialogFragment(R.layout.fragment_webview),
         val window = dialog?.window
         if (window != null && heightPx > DisplayUtil.getScreenHeight() - DisplayUtil.getStatusBarHeight(
                 window
-            )
+            ) - getNavigationBarHeight(requireContext())
         ) {
-            finalHeight = DisplayUtil.getScreenHeight() - DisplayUtil.getStatusBarHeight(window)
+            finalHeight =
+                DisplayUtil.getScreenHeight() - DisplayUtil.getStatusBarHeight(window) - getNavigationBarHeight(
+                    requireContext()
+                )
         }
         return if (finalHeight > 0) finalHeight else (DisplayUtil.getScreenHeight() * 0.5).toInt()
     }
 
+    private fun getNavigationBarHeight(context: Context): Int {
+        var result = 0
+        val resourceId = context.resources.getIdentifier("navigation_bar_height", "dimen", "android")
+        if (resourceId > 0) {
+            result = context.resources.getDimensionPixelSize(resourceId)
+        }
+        return result
+    }
+
     override fun showUrl(fragmentManager: FragmentManager, url: String) {
         this.url = url
         if (isAdded) {