DoggyZhang 17 hours ago
parent
commit
fe759ea0df

+ 0 - 1
app/src/main/java/com/adealink/weparty/commonui/imageview/AvatarView.kt

@@ -12,7 +12,6 @@ class AvatarView @JvmOverloads constructor(
         setIsAsCircle(true)
         setBackgroundResource(R.drawable.common_avatar_bg)
         setDefaultImageResId(R.drawable.common_default_avatar_ic)
-        hierarchy.setPlaceholderImage(R.drawable.common_fail_img_ic, ScalingUtils.ScaleType.CENTER_CROP)
         hierarchy.setFailureImage(R.drawable.common_fail_img_ic, ScalingUtils.ScaleType.CENTER_CROP)
         hierarchy.actualImageScaleType = ScalingUtils.ScaleType.CENTER_CROP
     }

+ 3 - 4
app/src/main/java/com/adealink/weparty/module/gift/data/GiftInfo.kt

@@ -4,7 +4,6 @@ import com.adealink.frame.locale.language.data.Language
 import com.adealink.weparty.App
 import com.google.gson.annotations.GsonNullable
 import com.google.gson.annotations.SerializedName
-import kotlin.text.ifEmpty
 
 //data class GiftCategory(
 //    @SerializedName("id") val id: String,
@@ -32,15 +31,15 @@ data class GiftResource(
     fun getDisplayName(language: Language = App.instance.languageManager.getLanguage()): String? {
         return when (language) {
             Language.EN -> {
-                names?.en?.ifEmpty { name }
+                names?.en?.ifEmpty { name } ?: name
             }
 
             Language.ZH -> {
-                names?.zh?.ifEmpty { name }
+                names?.zh?.ifEmpty { name } ?: name
             }
 
             else -> {
-                names?.id?.ifEmpty { name }
+                names?.id?.ifEmpty { name } ?: name
             }
         }
     }

+ 3 - 1
app/src/main/res/layout/layout_common_dialog.xml

@@ -4,8 +4,9 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/root_view"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
+    android:layout_height="match_parent"
     android:layout_gravity="center"
+    tools:background="@color/black"
     tools:ignore="HardcodedText">
 
     <com.adealink.frame.image.view.NetworkImageView
@@ -13,6 +14,7 @@
         style="@style/CommonNetworkImage"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
+        android:visibility="gone"
         app:actualImageScaleType="fitXY"
         app:layout_constraintTop_toTopOf="parent"
         tools:visibility="visible" />

+ 2 - 2
app/src/main/res/values/styles.xml

@@ -220,7 +220,7 @@
     <style name="CommonNetworkImage">
         <item name="failureImage">@drawable/common_fail_img_ic</item>
         <item name="failureImageScaleType">centerCrop</item>
-        <item name="placeholderImage">@drawable/common_fail_img_ic</item>
-        <item name="placeholderImageScaleType">centerCrop</item>
+<!--        <item name="placeholderImage">@drawable/common_fail_img_ic</item>-->
+<!--        <item name="placeholderImageScaleType">centerCrop</item>-->
     </style>
 </resources>

+ 1 - 0
module/profile/src/main/java/com/adealink/weparty/profile/UserProfileActivity.kt

@@ -87,6 +87,7 @@ class UserProfileActivity : BaseActivity() {
             this,
             userUid,
             binding.profileHeaderLayout,
+            binding.profileHeaderLayout.vRoomOnlineBlurBar,
             binding.profileHeaderLayout.vRoomOnline
         ).attach()
     }

+ 5 - 4
module/profile/src/main/java/com/adealink/weparty/profile/comp/ProfileRoomStatusComp.kt

@@ -22,6 +22,7 @@ class ProfileRoomStatusComp(
     lifecycleOwner: LifecycleOwner,
     private val userUid: String,
     private val headerBinding: LayoutUserProfileHeaderBinding,
+    private val onlineViewContainer: View,
     private val binding: LayoutUserProfileRoomOnlineBinding,
 ) : BaseProfileViewComp(lifecycleOwner, userUid) {
     private var config = SpeakingRippleConfig()
@@ -33,8 +34,8 @@ class ProfileRoomStatusComp(
     override fun initView() {
         initBlur()
         initRipple()
-        binding.root.gone()
-        binding.root.onClick {
+        onlineViewContainer.gone()
+        onlineViewContainer.onClick {
             goRoom()
         }
     }
@@ -84,10 +85,10 @@ class ProfileRoomStatusComp(
         this.roomInfo = roomInfo
         if (roomInfo == null || roomInfo.roomId.isNullOrEmpty()) {
             binding.vRipple.stopRipple()
-            binding.root.gone()
+            onlineViewContainer.gone()
             return
         }
-        binding.root.show()
+        onlineViewContainer.show()
         binding.vRipple.startRipple()
         binding.ivAvatar.setImageUrl(roomInfo.roomCover)
     }

+ 12 - 1
module/room/src/main/java/com/adealink/weparty/room/applymic/ApplyMicListDialog.kt

@@ -1,12 +1,16 @@
 package com.adealink.weparty.room.applymic
 
 import android.graphics.Color
+import android.text.SpannableStringBuilder
+import android.text.style.ForegroundColorSpan
 import androidx.fragment.app.activityViewModels
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
+import com.adealink.frame.aab.util.getCompatColor
 import com.adealink.frame.aab.util.getCompatString
 import com.adealink.frame.base.Rlt
 import com.adealink.frame.base.fastLazy
+import com.adealink.frame.ext.findAndSetSpan
 import com.adealink.frame.mvvm.view.viewBinding
 import com.adealink.frame.util.onClick
 import com.adealink.weparty.commonui.ext.gone
@@ -65,7 +69,14 @@ class ApplyMicListDialog : BottomDialogFragment(R.layout.dialog_room_apply_mic_l
     override fun observeViewModel() {
         super.observeViewModel()
         listViewModel.totalLD.observe(viewLifecycleOwner) {
-            binding.tvTitle.text = getCompatString(R.string.room_apply_mic_count_in_room, it.toString())
+            val totalStr = it.toString()
+            val text = getCompatString(R.string.room_apply_mic_count_in_room, it.toString())
+            binding.tvTitle.text = SpannableStringBuilder(text).apply {
+                findAndSetSpan(
+                    ForegroundColorSpan(getCompatColor(APP_R.color.color_FF3FBFBD)),
+                    totalStr
+                )
+            }
         }
         listViewModel.applyListRltLD.observe(viewLifecycleOwner) { rlt ->
             binding.vRefresh.finishRefresh()

+ 1 - 5
module/room/src/main/java/com/adealink/weparty/room/chat/adapter/EnterRoomMessageViewBinder.kt

@@ -2,13 +2,9 @@ package com.adealink.weparty.room.chat.adapter
 
 import android.os.Build
 import android.text.SpannableStringBuilder
-import android.text.TextPaint
-import android.text.method.LinkMovementMethod
-import android.text.style.ClickableSpan
 import android.text.style.ForegroundColorSpan
 import android.text.style.TypefaceSpan
 import android.view.LayoutInflater
-import android.view.View
 import android.view.ViewGroup
 import androidx.fragment.app.Fragment
 import com.adealink.frame.aab.util.getCompatColor
@@ -49,7 +45,7 @@ class EnterRoomMessageViewBinder(
             //消息内容
             val userName = message.barrage.sender.userName
             val text = getCompatString(R.string.room_enter_room_message, userName)
-            binding.root.onClick {
+            binding.clBg.onClick {
                 val uid = message.barrage.sender.userID
                 if (uid.isNotEmpty()) {
                     listener.onAvatarClick(message.barrage.sender.userID)

+ 64 - 8
module/room/src/main/java/com/adealink/weparty/room/chat/adapter/SendGiftMessageViewBinder.kt

@@ -1,15 +1,22 @@
 package com.adealink.weparty.room.chat.adapter
 
+import android.graphics.Bitmap
 import android.text.SpannableStringBuilder
 import android.text.method.LinkMovementMethod
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import androidx.core.graphics.drawable.toDrawable
 import androidx.fragment.app.Fragment
+import com.adealink.frame.aab.util.getCompatDrawable
 import com.adealink.frame.aab.util.getCompatString
 import com.adealink.frame.ext.findAndSetSpan
+import com.adealink.frame.image.imageService
+import com.adealink.frame.image.listener.IImageLoadResultListener
+import com.adealink.weparty.commonui.ext.dp
 import com.adealink.weparty.commonui.recycleview.adapter.BindingViewHolder
 import com.adealink.weparty.commonui.recycleview.adapter.multitype.ItemViewBinder
+import com.adealink.weparty.commonui.widget.CenterImageSpan
 import com.adealink.weparty.commonui.widget.ColorClickSpan
 import com.adealink.weparty.module.gift.GiftModule
 import com.adealink.weparty.module.room.chat.data.SendGiftMessage
@@ -26,6 +33,11 @@ class SendGiftMessageViewBinder(
     val fragment: Fragment,
 ) : ItemViewBinder<SendGiftMessage, SendGiftMessageViewBinder.ViewHolder>() {
 
+    companion object {
+        @JvmStatic
+        private val GIFT_ICON_SIZE = 20.dp()
+    }
+
     override fun onBindViewHolder(holder: ViewHolder, item: SendGiftMessage) {
         holder.update(item)
     }
@@ -42,12 +54,36 @@ class SendGiftMessageViewBinder(
         fun update(message: SendGiftMessage) {
             this.message = message
             //消息内容
+            val sendGiftContent = message.content
+            val giftIconUrl = sendGiftContent?.resId?.let {
+                GiftModule.getGiftResource(it)?.icon
+            }
+            if (giftIconUrl.isNullOrEmpty()) {
+                return
+            }
+            imageService.fetchImage(imageService.getResizeUrl(giftIconUrl, GIFT_ICON_SIZE, GIFT_ICON_SIZE), object : IImageLoadResultListener {
+                override fun onSuccess(bitmap: Bitmap) {
+                    super.onSuccess(bitmap)
+                    setSendGiftMsg(message, bitmap)
+                }
+
+                override fun onFailed() {
+                    super.onFailed()
+                    setSendGiftMsg(message, null)
+                }
+            })
+        }
+
+        private fun setSendGiftMsg(message: SendGiftMessage, giftIcon: Bitmap?) {
+            binding.msg.movementMethod = LinkMovementMethod.getInstance()
+
             val sendGiftContent = message.content
             val senderName = sendGiftContent?.getSenderName() ?: ""
             val receiverName = sendGiftContent?.getReceiverName() ?: ""
-            val text = getCompatString(R.string.room_send_gift_message, senderName, receiverName)
-            binding.tvMsg.movementMethod = LinkMovementMethod.getInstance()
-            binding.tvMsg.text = SpannableStringBuilder(text).apply {
+            val countStr = getCompatString(APP_R.string.common_count, formatNumberStr(sendGiftContent?.quantity ?: 0))
+
+            val text = getCompatString(R.string.room_send_gift_message, senderName, receiverName, countStr)
+            binding.msg.text = SpannableStringBuilder(text).apply {
                 findAndSetSpan(
                     object : ColorClickSpan(APP_R.color.color_FF35F3F0) {
                         override fun onClick(widget: View) {
@@ -68,12 +104,32 @@ class SendGiftMessageViewBinder(
                     },
                     receiverName
                 )
+                if (giftIcon != null) {
+                    findAndSetSpan(
+                        CenterImageSpan(giftIcon.toDrawable(binding.root.resources).apply {
+                            setBounds(0, 0, GIFT_ICON_SIZE, GIFT_ICON_SIZE)
+                        }),
+                        "[gift]"
+                    )
+                } else {
+                    findAndSetSpan(
+                        CenterImageSpan(getCompatDrawable(APP_R.drawable.common_fail_img_ic).apply {
+                            setBounds(0, 0, GIFT_ICON_SIZE, GIFT_ICON_SIZE)
+                        }),
+                        "[gift]"
+                    )
+                }
+                findAndSetSpan(
+                    object : ColorClickSpan(APP_R.color.color_FF35F3F0) {
+                        override fun onClick(widget: View) {
+                            sendGiftContent?.receiver?.let { uid ->
+                                listener.onAvatarClick(uid)
+                            }
+                        }
+                    },
+                    countStr
+                )
             }
-            val giftIconUrl = sendGiftContent?.resId?.let {
-                GiftModule.getGiftResource(it)?.icon
-            }
-            binding.ivGift.setImageUrl(giftIconUrl)
-            binding.tvCount.text = getCompatString(APP_R.string.common_count, formatNumberStr(sendGiftContent?.quantity ?: 0))
         }
 
     }

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

@@ -1,5 +1,6 @@
 package com.adealink.weparty.room.gift
 
+import androidx.fragment.app.viewModels
 import androidx.lifecycle.lifecycleScope
 import androidx.recyclerview.widget.GridLayoutManager
 import androidx.recyclerview.widget.LinearLayoutManager
@@ -16,6 +17,7 @@ import com.adealink.weparty.commonui.ext.show
 import com.adealink.weparty.commonui.recycleview.adapter.MultiTypeListAdapter
 import com.adealink.weparty.commonui.recycleview.diffutil.BaseListDiffUtil
 import com.adealink.weparty.commonui.recycleview.itemdecoration.GridSpacingItemDecoration
+import com.adealink.weparty.commonui.recycleview.itemdecoration.HorizontalItemDecoration
 import com.adealink.weparty.commonui.toast.util.showFailedToast
 import com.adealink.weparty.commonui.toast.util.showToast
 import com.adealink.weparty.commonui.widget.BottomDialogFragment
@@ -35,10 +37,9 @@ import com.adealink.weparty.room.gift.adapter.RoomGiftItemViewBinder
 import com.adealink.weparty.room.gift.adapter.RoomGiftTargetUserItemViewBinder
 import com.adealink.weparty.room.gift.adapter.RoomGiftUserItemViewBinder
 import com.adealink.weparty.room.gift.data.RoomGiftItemData
-import com.adealink.weparty.room.gift.data.RoomGiftTargetUserItemData
 import com.adealink.weparty.room.gift.data.RoomGiftUserItemData
 import com.adealink.weparty.room.gift.dialog.DiamondRechargeDialog
-import com.adealink.weparty.room.micseat.dispatcenter.getMicIndexName
+import com.adealink.weparty.room.gift.viewmodel.RoomGiftPanelViewModel
 import com.adealink.weparty.room.sdk.service.roomService
 import com.adealink.weparty.util.formatNumberStr
 import kotlinx.coroutines.launch
@@ -47,6 +48,8 @@ class RoomGiftPanelDialog : BottomDialogFragment(R.layout.dialog_room_gift_panel
 
     private val binding by viewBinding(DialogRoomGiftPanelBinding::bind)
     private val roomGiftViewModel by fastLazy { GiftModule.getGiftViewModel(requireActivity()) }
+
+    private val giftPanelViewModel by viewModels<RoomGiftPanelViewModel>()
     private val walletViewModel by fastLazy { WalletModule.getWalletViewModel(requireActivity()) }
     private val userAdapter by fastLazy { MultiTypeListAdapter(BaseListDiffUtil()) }
     private var userItemList = mutableListOf<RoomGiftUserItemData>()
@@ -77,25 +80,34 @@ class RoomGiftPanelDialog : BottomDialogFragment(R.layout.dialog_room_gift_panel
             if (sendOnlyOne()) {
                 return@RoomGiftUserItemViewBinder
             }
-            userItemList.forEach {
+            userAdapter.notifyItemChanged<RoomGiftUserItemData> {
                 if (it.userInfo?.uid == clickedItem.userInfo?.uid) {
                     it.isSelected = !it.isSelected
+                    true
+                } else {
+                    false
                 }
             }
-            userAdapter.submitList(userItemList)
             updateBottomPanel()
         })
         binding.rvUsers.layoutManager = LinearLayoutManager(context, RecyclerView.HORIZONTAL, false)
+        binding.rvUsers.addItemDecoration(HorizontalItemDecoration(6.dp(), 0, 0))
         binding.rvUsers.adapter = userAdapter
         //礼物
         giftAdapter.register(RoomGiftItemViewBinder { clickedItem ->
-            giftItemList.forEach { itemData ->
-                itemData.isSelected = itemData.giftInfo.id == clickedItem.giftInfo.id
-                if (itemData.isSelected) {
-                    this@RoomGiftPanelDialog.selectGift = itemData.giftInfo
+            giftAdapter.notifyItemChanged<RoomGiftItemData> {
+                val oldSelected = it.isSelected
+                val nextSelected = it.giftInfo.id == clickedItem.giftInfo.id
+                if (nextSelected) {
+                    this@RoomGiftPanelDialog.selectGift = it.giftInfo
+                }
+                if (oldSelected == nextSelected) {
+                    false
+                } else {
+                    it.isSelected = nextSelected
+                    true
                 }
             }
-            giftAdapter.submitList(giftItemList)
             binding.vNumber.setNumber(1)
             updateBottomPanel()
         })
@@ -166,29 +178,23 @@ class RoomGiftPanelDialog : BottomDialogFragment(R.layout.dialog_room_gift_panel
         walletViewModel?.diamondLD?.observe(viewLifecycleOwner) {
             binding.tvBalance.text = formatNumberStr(it)
         }
-        val tagetUid = targetUid
-        if (tagetUid.isNullOrEmpty()) {
-            lifecycleScope.launch {
-                roomService.seatController.micSeatsFlow.collect { seatInfos ->
-                    val seatInfoList = seatInfos.entries.filter {
-                        !it.value.isSeatEmpty() && it.value.userInfo.userID != ProfileModule.getMyUid()
-                    }.sortedBy { it.key }
-                    val itemList = seatInfoList.map { seatInfo ->
-                        RoomGiftUserItemData(
-                            ProfileModule.getCacheUserInfo(seatInfo.value.userInfo.userID),
-                            getMicIndexName(seatInfo.key),
-                            isSelected = userItemList.find { it.userInfo?.uid == seatInfo.value.userInfo.userID }?.isSelected ?: false
-                        )
-                    }
-                    userItemList.clear()
-                    userItemList.addAll(itemList)
-                    userAdapter.submitList(userItemList)
+
+        giftPanelViewModel.userInfoListLD.observe(viewLifecycleOwner) { itemLIst ->
+            if (sendOnlyOne()) {
+                val userItem = itemLIst?.firstOrNull()
+                if (userItem == null) {
+                    userAdapter.submitList(emptyList())
+                } else {
+                    userAdapter.submitList(listOf(userItem))
+                }
+            } else {
+                val itemList = itemLIst.mapNotNull { it as? RoomGiftUserItemData }.onEach { item ->
+                    item.isSelected = userItemList.find { it.userInfo?.uid == item.userInfo?.uid }?.isSelected ?: false
                 }
+                userItemList.clear()
+                userItemList.addAll(itemList)
+                userAdapter.submitList(userItemList)
             }
-        } else {
-            userAdapter.submitList(
-                listOf(RoomGiftTargetUserItemData(ProfileModule.getCacheUserInfo(tagetUid)))
-            )
         }
     }
 
@@ -200,6 +206,20 @@ class RoomGiftPanelDialog : BottomDialogFragment(R.layout.dialog_room_gift_panel
         }
         roomGiftViewModel?.getGifts(roomId)
         walletViewModel?.refreshWalletData()
+
+        val tagetUid = targetUid
+        if (tagetUid.isNullOrEmpty()) {
+            lifecycleScope.launch {
+                roomService.seatController.micSeatsFlow.collect { seatInfos ->
+                    val seatInfoList = seatInfos.entries.filter {
+                        !it.value.isSeatEmpty() && it.value.userInfo.userID != ProfileModule.getMyUid()
+                    }.sortedBy { it.key }
+                    giftPanelViewModel.updateSeatUser(seatInfoList)
+                }
+            }
+        } else {
+            giftPanelViewModel.setTargetUser(tagetUid)
+        }
     }
 
     private fun updateBottomPanel() {
@@ -234,6 +254,7 @@ class RoomGiftPanelDialog : BottomDialogFragment(R.layout.dialog_room_gift_panel
         CommonDialog.Builder()
             .title(getCompatString(R.string.room_send_gift_balance_not_enough))
             .setShowDefaultCancel(true)
+            .showTopClosetButton(true)
             .onPositive {
                 WalletModule.showRechargeDialog(childFragmentManager, Currency.DIAMOND)
             }

+ 11 - 5
module/room/src/main/java/com/adealink/weparty/room/gift/adapter/RoomGiftItemViewBinder.kt

@@ -7,6 +7,7 @@ import android.view.View
 import android.view.ViewGroup
 import com.adealink.frame.aab.util.getCompatDrawable
 import com.adealink.frame.util.onClick
+import com.adealink.weparty.commonui.ext.dpf
 import com.adealink.weparty.commonui.recycleview.adapter.BindingViewHolder
 import com.adealink.weparty.commonui.recycleview.adapter.multitype.ItemViewBinder
 import com.adealink.weparty.room.R
@@ -42,7 +43,9 @@ class RoomGiftItemViewBinder(private val listener: (RoomGiftItemData) -> Unit) :
 
         fun initView() {
             binding.root.onClick {
-                playClickAnim(binding.ivIcon)
+                if (item?.isSelected == true) {
+                    playClickAnim(binding.ivIcon)
+                }
                 item?.let {
                     listener.invoke(it)
                 }
@@ -59,6 +62,9 @@ class RoomGiftItemViewBinder(private val listener: (RoomGiftItemData) -> Unit) :
             } else {
                 binding.root.background = null
             }
+            if (item.isSelected) {
+                playClickAnim(binding.ivIcon)
+            }
         }
     }
 
@@ -77,10 +83,10 @@ class RoomGiftItemViewBinder(private val listener: (RoomGiftItemData) -> Unit) :
 
         init {
             view?.let {
-                val scaleX = ObjectAnimator.ofFloat(it, View.SCALE_X, 1F, 0.8F, 1F)
-                val scaleY = ObjectAnimator.ofFloat(it, View.SCALE_Y, 1F, 0.8F, 1F)
-                animatorSet.play(scaleX)?.with(scaleY)
-                animatorSet.duration = 200
+                val translationY = ObjectAnimator.ofFloat(it, View.TRANSLATION_Y, (-4f).dpf(), 0f, (-2.5f).dpf(), 0f).apply {
+                    duration = 800
+                }
+                animatorSet.play(translationY)
             }
         }
 

+ 77 - 0
module/room/src/main/java/com/adealink/weparty/room/gift/viewmodel/RoomGiftPanelViewModel.kt

@@ -0,0 +1,77 @@
+package com.adealink.weparty.room.gift.viewmodel
+
+import androidx.lifecycle.MutableLiveData
+import com.adealink.frame.base.Rlt
+import com.adealink.frame.mvvm.viewmodel.BaseViewModel
+import com.adealink.weparty.commonui.recycleview.diffutil.BaseListItemData
+import com.adealink.weparty.module.profile.ProfileModule
+import com.adealink.weparty.module.profile.data.UserInfo
+import com.adealink.weparty.room.gift.data.RoomGiftTargetUserItemData
+import com.adealink.weparty.room.gift.data.RoomGiftUserItemData
+import com.adealink.weparty.room.micseat.dispatcenter.getMicIndexName
+import io.trtc.tuikit.atomicxcore.api.live.SeatInfo
+import kotlinx.coroutines.launch
+
+class RoomGiftPanelViewModel : BaseViewModel() {
+
+    val userInfoListLD = MutableLiveData<List<BaseListItemData>>()
+
+    fun setTargetUser(uid: String) {
+        viewModelScope.launch {
+            when (val rlt = ProfileModule.getUserInfoByUid(uid)) {
+                is Rlt.Failed -> {
+                    userInfoListLD.send(
+                        listOf(
+                            RoomGiftTargetUserItemData(UserInfo.emptyUserInfo(uid, ""))
+                        )
+                    )
+                }
+
+                is Rlt.Success -> {
+                    userInfoListLD.send(
+                        listOf(
+                            RoomGiftTargetUserItemData(rlt.data)
+                        )
+                    )
+                }
+            }
+
+        }
+    }
+
+    fun updateSeatUser(seatInfoList: List<Map.Entry<Int, SeatInfo>>) {
+        viewModelScope.launch {
+            val uids = seatInfoList.map { it.value.userInfo.userID }.toList()
+            when (val rlt = ProfileModule.getUsersInfoByUid(uids.toSet())) {
+                is Rlt.Failed -> {
+                    val userInfos = mutableListOf<RoomGiftUserItemData>()
+                    for (entry in seatInfoList) {
+                        userInfos.add(
+                            RoomGiftUserItemData(
+                                UserInfo.emptyUserInfo(entry.value.userInfo.userID, ""),
+                                getMicIndexName(entry.key)
+                            )
+                        )
+                    }
+                    userInfoListLD.send(userInfos)
+                }
+
+                is Rlt.Success -> {
+                    val userInfos = mutableListOf<RoomGiftUserItemData>()
+                    for (entry in seatInfoList) {
+                        val uid = entry.value.userInfo.userID
+                        userInfos.add(
+                            RoomGiftUserItemData(
+                                rlt.data[uid] ?: UserInfo.emptyUserInfo(uid, ""),
+                                getMicIndexName(entry.key)
+                            )
+                        )
+                    }
+                    userInfoListLD.send(userInfos)
+                }
+            }
+
+        }
+    }
+
+}

+ 9 - 3
module/room/src/main/java/com/adealink/weparty/room/minimize/view/MinimizedRoomFloatView.kt

@@ -49,9 +49,15 @@ class MinimizedRoomFloatView(floatData: MinimizedRoomFloatData) : BaseDragFloatV
         return 90.dp()
     }
 
-    override fun getClickableViews(): List<View>? {
-        val clickBtn = binding?.btnClose ?: return null
-        return listOf(clickBtn)
+    override fun getClickableViews(): List<View> {
+        val clickViews = mutableListOf<View>()
+        binding?.clBg?.let {
+            clickViews.add(it)
+        }
+        binding?.btnClose?.let {
+            clickViews.add(it)
+        }
+        return clickViews
     }
 
     override fun getLayoutParamX(): Int {

+ 3 - 26
module/room/src/main/res/layout/item_message_send_gift.xml

@@ -25,7 +25,7 @@
         app:layout_constraintTop_toTopOf="parent">
 
         <androidx.appcompat.widget.AppCompatTextView
-            android:id="@+id/tv_msg"
+            android:id="@+id/msg"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:gravity="start|center_vertical"
@@ -34,35 +34,12 @@
             android:textSize="12sp"
             app:fontFamily="@font/poppins_semibold"
             app:layout_constrainedWidth="true"
-            app:layout_constraintEnd_toStartOf="@id/iv_gift"
+            app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintHorizontal_bias="0"
             app:layout_constraintHorizontal_chainStyle="packed"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent"
-            tools:text="AAA Send BBB" />
-
-        <com.adealink.frame.image.view.NetworkImageView
-            android:id="@+id/iv_gift"
-            android:layout_width="22dp"
-            android:layout_height="22dp"
-            android:layout_marginHorizontal="2dp"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toStartOf="@id/tv_count"
-            app:layout_constraintStart_toEndOf="@id/tv_msg"
-            app:layout_constraintTop_toTopOf="parent" />
-
-        <androidx.appcompat.widget.AppCompatTextView
-            android:id="@+id/tv_count"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:gravity="start|center_vertical"
-            android:textColor="@color/color_FF35F3F0"
-            android:textSize="12sp"
-            app:fontFamily="@font/poppins_semibold"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toEndOf="@id/iv_gift"
-            app:layout_constraintTop_toTopOf="parent"
-            tools:text="x33" />
+            tools:text="Don’t make me laugh!You bad guy a and make me laugh!!! Don’t make me laugh!You bad guy a and make me laugh!!!" />
 
     </androidx.constraintlayout.widget.ConstraintLayout>
 

+ 1 - 1
module/room/src/main/res/values-in/strings.xml

@@ -72,7 +72,7 @@
     <string name="room_gift_coin_available">Koin Tersedia: [coin]%s</string>
     <string name="room_gift_exchange_rate">Nilai Tukar: [coin]1=[diamond]1000</string>
     <string name="room_gift_exchange_never_remind_today">Jangan ingatkan saya lagi hari ini</string>
-    <string name="room_send_gift_message">%1$s Kirim %2$s</string>
+    <string name="room_send_gift_message">%1$s Kirim %2$s [gift] %3$s</string>
     <string name="room_send_gift_to_uids_empty">Silakan pilih kepada siapa akan dikirim</string>
     <string name="room_send_gift_gift_no_select">Silakan pilih hadiah yang akan dikirim</string>
     <string name="room_send_gift_count_empty">Setidaknya ada satu hadiah untuk dikirim</string>

+ 1 - 1
module/room/src/main/res/values-zh/strings.xml

@@ -72,7 +72,7 @@
     <string name="room_gift_coin_available">可用金币:[coin]%s</string>
     <string name="room_gift_exchange_rate">兑换比例: [coin]1=[diamond]1000</string>
     <string name="room_gift_exchange_never_remind_today">今日不再提醒</string>
-    <string name="room_send_gift_message">%1$s送给%2$s</string>
+    <string name="room_send_gift_message">%1$s送给%2$s[gift]%3$s</string>
     <string name="room_send_gift_to_uids_empty">请选择要送给谁</string>
     <string name="room_send_gift_gift_no_select">请选择要赠送的礼物</string>
     <string name="room_send_gift_count_empty">至少赠送一个礼物</string>

+ 2 - 2
module/room/src/main/res/values/strings.xml

@@ -73,11 +73,11 @@
     <string name="room_gift_coin_available">Available Coins: [coin]%s</string>
     <string name="room_gift_exchange_rate">Exchange Rate: [coin]1=[diamond]1000</string>
     <string name="room_gift_exchange_never_remind_today">Don\'t remind me again today</string>
-    <string name="room_send_gift_message">%1$s Send %2$s</string>
+    <string name="room_send_gift_message">%1$s Send %2$s [gift] %3$s</string>
     <string name="room_send_gift_to_uids_empty">Please select who to send to</string>
     <string name="room_send_gift_gift_no_select">Please select the gift to send</string>
     <string name="room_send_gift_count_empty">At least one gift to send</string>
-    <string name="room_send_gift_balance_not_enough"> Insufficient diamonds, wish to top up?</string>
+    <string name="room_send_gift_balance_not_enough">Insufficient diamonds, wish to top up?</string>
     <string name="room_trtc_error_100004">Room does not exist or is closed</string>
     <string name="room_trtc_error_100005">Not a room member</string>
     <string name="room_trtc_error_100006">Permission denied</string>