Răsfoiți Sursa

feat: 麦克风动画调整 (#8)

* feat: 麦克风动画

* feat: emotion动画播放问题

* feat: 麦克风动画联调

* feat: 背包场景

* feat: 麦克风动画预览

* fix: 用户充值到vip3之后,重新进入充值页面,没有走H5充值页面逻辑

* fix: 个人资料页,在房状态显示

* fix: 个人资料页,在房状态显示

* fix: 默认声纹
LXD312569496 8 luni în urmă
părinte
comite
d9434dd92c
34 a modificat fișierele cu 231 adăugiri și 88 ștergeri
  1. 3 2
      app/src/main/java/com/adealink/weparty/module/backpack/BackpackData.kt
  2. 15 1
      app/src/main/java/com/adealink/weparty/module/profile/decorate/data/UserDecorateData.kt
  3. 25 23
      app/src/main/java/com/adealink/weparty/module/profile/view/UserOnlineStatusView.kt
  4. 1 0
      app/src/main/java/com/adealink/weparty/module/store/data/StoreData.kt
  5. 1 0
      app/src/main/res/values-ar/strings.xml
  6. 1 0
      app/src/main/res/values-zh/strings.xml
  7. 1 0
      app/src/main/res/values/strings.xml
  8. 3 4
      module/backpack/src/main/java/com/adealink/weparty/backpack/fragment/BackpackFragment.kt
  9. 4 4
      module/backpack/src/main/java/com/adealink/weparty/backpack/fragment/BackpackUsingTabFragment.kt
  10. 2 5
      module/backpack/src/main/java/com/adealink/weparty/backpack/fragment/TypeBackpackFragment.kt
  11. 2 2
      module/backpack/src/main/java/com/adealink/weparty/backpack/viewmodel/BackpackViewModel.kt
  12. 10 0
      module/message/src/main/java/com/adealink/weparty/message/conversation/comp/ConversationTargetInfoComp.kt
  13. 59 40
      module/message/src/main/res/layout/layout_conversation_top_bar_center_new.xml
  14. BIN
      module/profile/src/main/assets/profile_icon_live_wh.svga
  15. 18 0
      module/profile/src/main/java/com/adealink/weparty/profile/decorate/manager/UserDecorManager.kt
  16. 1 0
      module/profile/src/main/java/com/adealink/weparty/profile/me/MeFragment.kt
  17. 14 3
      module/profile/src/main/java/com/adealink/weparty/profile/userprofile/component/ProfileUserBasisInfoComp.kt
  18. 2 1
      module/profile/src/main/res/layout/activity_user_profile_new.xml
  19. 27 1
      module/room/src/main/java/com/adealink/weparty/room/micseat/BaseSeatsTemplate.kt
  20. 6 0
      module/room/src/main/java/com/adealink/weparty/room/micseat/decor/EmotionDecorView.kt
  21. 3 1
      module/room/src/main/java/com/adealink/weparty/room/micseat/decor/IEmotionDecorApi.kt
  22. 9 0
      module/room/src/main/java/com/adealink/weparty/room/micseat/defaults/BaseDefaultSeatView.kt
  23. 1 0
      module/room/src/main/java/com/adealink/weparty/room/micseat/defaults/DecorDynamicLayer.kt
  24. 2 0
      module/room/src/main/java/com/adealink/weparty/room/micseat/defaults/DefaultSeatView.kt
  25. 1 0
      module/room/src/main/java/com/adealink/weparty/room/micseat/game/GameDecorDynamicLayer.kt
  26. 1 0
      module/room/src/main/java/com/adealink/weparty/room/micseat/micgrab/MicGrabDecorDynamicLayer.kt
  27. 1 0
      module/room/src/main/java/com/adealink/weparty/room/micseat/pk/PKDecorDynamicLayer.kt
  28. 2 0
      module/room/src/main/java/com/adealink/weparty/room/micseat/pk/PKSeatsView.kt
  29. 1 0
      module/room/src/main/java/com/adealink/weparty/room/micseat/simple/SimpleDecorDynamicLayer.kt
  30. 2 0
      module/room/src/main/java/com/adealink/weparty/room/micseat/simple/SimpleSeatView.kt
  31. 2 0
      module/room/src/main/java/com/adealink/weparty/room/micseat/video/BaseVideoRoomSeatView.kt
  32. 1 0
      module/room/src/main/java/com/adealink/weparty/room/micseat/video/VideoDecorDynamicLayer.kt
  33. 1 0
      module/room/src/main/java/com/adealink/weparty/room/micseat/wedding/WeddingDecorDynamicLayer.kt
  34. 9 1
      module/store/src/main/java/com/adealink/weparty/store/othergoods/OtherGoodsReviewDialog.kt

+ 3 - 2
app/src/main/java/com/adealink/weparty/module/backpack/BackpackData.kt

@@ -29,7 +29,7 @@ const val STORE_TAB_INDEX_BUBBLE = 5 //聊天气泡
 const val STORE_TAB_INDEX_HOME_DYNAMIC = 6 //主页动效
 const val STORE_TAB_INDEX_ID = 7 //靓号id
 const val STORE_TAB_INDEX_RING = 8 //戒指
-const val STORE_TAB_INDEX_MIC_VOICE = 9 //麦位声纹
+const val STORE_TAB_INDEX_MIC_ANIMATION = 9 //麦克风动画
 const val STORE_TAB_INDEX_MOMENT_BACKGROUND = 10 //MOMENT背景卡
 const val STORE_TAB_INDEX_ROOM_NUMBER_CARD = 11 //房间资料卡
 const val STORE_TAB_INDEX_OTHER = 12 //其他
@@ -52,7 +52,7 @@ fun getGoodsTabName(pos: Int): String {
         STORE_TAB_INDEX_RING -> getCompatString(R.string.commonui_ring)
         STORE_TAB_INDEX_ENTER_EFFECT -> getCompatString(R.string.commonui_enter_effect)
         STORE_TAB_INDEX_HOME_DYNAMIC -> getCompatString(R.string.commonui_home_dynamic)
-        STORE_TAB_INDEX_MIC_VOICE -> getCompatString(R.string.commonui_mic_voice)
+        STORE_TAB_INDEX_MIC_ANIMATION -> getCompatString(R.string.commonui_mic_anim)
         STORE_TAB_INDEX_MOMENT_BACKGROUND -> getCompatString(R.string.commonui_moment_card)
         STORE_TAB_INDEX_OTHER -> getCompatString(R.string.common_other)
         STORE_TAB_INDEX_ROOM_NUMBER_CARD -> getCompatString(R.string.commonui_profile_card)
@@ -262,6 +262,7 @@ data class GetUserBackpackGoodsListRes(
     @SerializedName("homeDynamicList") val homeDynamicList: List<UserGoodInfo>,
     @SerializedName("redPacketCoverList") val redPacketCoverList: List<UserGoodInfo>,
     @SerializedName("micVoiceprintList") val micVoiceprintList: List<UserGoodInfo>,
+    @SerializedName("micVoiceDynamicList") val micVoiceDynamicList: List<UserGoodInfo>, //麦克风动画
     @SerializedName("roomGiftFrameEffectList") val roomGiftFrameEffectList: List<UserGoodInfo>, //房间送礼条
     @SerializedName("globalGiftFrameEffectList") val globalGiftFrameEffectList: List<UserGoodInfo>, //全服送礼通知
     @SerializedName("experienceCardList") val experienceCardList: List<UserGoodInfo>, //道具体验卡

+ 15 - 1
app/src/main/java/com/adealink/weparty/module/profile/decorate/data/UserDecorateData.kt

@@ -50,6 +50,7 @@ enum class DecorType(val value: Int) {
     HOME_DYNAMIC(124), //主页动效
     MIC_VOICEPRINT(125), //麦位波纹
     RED_PACKET_COVER(126), //红包封面
+    SPECIAL_MIC_ANIMATION(172), //麦位动画
 
     ROOM_SEND_GIFT_NOTICE(138),//房间送礼条
     SEND_GIFT_GLOBAL_HEADLINE(139),//送礼全服横幅
@@ -351,4 +352,17 @@ data class InviteActivityDiamondThresholdDecor(val config: InviteActivityDiamond
         val newDecorInfo = newItem as? InviteActivityDiamondThresholdDecor ?: return false
         return config == newDecorInfo.config
     }
-}
+}
+
+data class SpecialMicAnimConfig(
+    @SerializedName("resourceId") val resourceId: Int,
+    @SerializedName("url") val url: String,
+)
+
+data class SpecialMicAnimDecor(val config: SpecialMicAnimConfig) :
+    DecorInfo(DecorType.SPECIAL_MIC_ANIMATION) {
+    override fun areContentsTheSame(newItem: DecorInfo): Boolean {
+        val newDecorInfo = newItem as? SpecialMicAnimDecor ?: return false
+        return config == newDecorInfo.config
+    }
+}

+ 25 - 23
app/src/main/java/com/adealink/weparty/module/profile/view/UserOnlineStatusView.kt

@@ -15,6 +15,7 @@ import com.adealink.weparty.commonui.ext.show
 import com.adealink.weparty.databinding.LayoutUserOnlineStatusBinding
 import com.adealink.weparty.module.profile.ProfileModule
 import com.adealink.weparty.module.profile.data.UserOnlineInfo
+import com.adealink.weparty.module.profile.view.IUserOnlineStatusView.Companion.formatLastOnlineTime
 
 
 interface IUserOnlineStatusView {
@@ -22,6 +23,30 @@ interface IUserOnlineStatusView {
      * 设置在线状态
      */
     fun setOnlineStatus(userId: Long, info: UserOnlineInfo)
+
+    companion object{
+        fun formatLastOnlineTime(
+            lastOnlineTime: Long? = null,
+            now: Long = System.currentTimeMillis()
+        ): String {
+            if (lastOnlineTime == null) {
+                return ""
+            }
+
+            val diffMillis = now - lastOnlineTime
+            val diffMinutes = diffMillis / (ONE_MINUTE)
+            val diffHours = diffMillis / (ONE_HOUR)
+            val diffDays = diffMillis / (ONE_DAY)
+
+            return when {
+                diffDays >= 30 -> getCompatString(R.string.time_month_ago)
+                diffDays >= 1 -> getCompatString(R.string.time_days_ago, diffDays)
+                diffHours >= 1 -> getCompatString(R.string.time_hours_ago, diffHours)
+                diffMinutes >= 10 -> getCompatString(R.string.time_minutes_ago, diffMinutes)
+                else -> getCompatString(R.string.time_just_online)
+            }
+        }
+    }
 }
 
 /**
@@ -66,27 +91,4 @@ class UserOnlineStatusView @JvmOverloads constructor(
             binding.root.gone()
         }
     }
-
-    private fun formatLastOnlineTime(
-        lastOnlineTime: Long? = null,
-        now: Long = System.currentTimeMillis()
-    ): String {
-        if (lastOnlineTime == null) {
-            return ""
-        }
-
-        val diffMillis = now - lastOnlineTime
-        val diffMinutes = diffMillis / (ONE_MINUTE)
-        val diffHours = diffMillis / (ONE_HOUR)
-        val diffDays = diffMillis / (ONE_DAY)
-
-        return when {
-            diffDays >= 30 -> getCompatString(R.string.time_month_ago)
-            diffDays >= 1 -> getCompatString(R.string.time_days_ago, diffDays)
-            diffHours >= 1 -> getCompatString(R.string.time_hours_ago, diffHours)
-            diffMinutes >= 10 -> getCompatString(R.string.time_minutes_ago, diffMinutes)
-            else -> getCompatString(R.string.time_just_online)
-        }
-    }
-
 }

+ 1 - 0
app/src/main/java/com/adealink/weparty/module/store/data/StoreData.kt

@@ -41,6 +41,7 @@ enum class StoreGoodType(val type: Int) {
 
     EXPERIENCE_CARD(27), //试用卡
     CHAT_BACKGROUND(28), //聊天背景
+    MIC_ANIMATION(29), //麦位动画
 
     OTHER_GOODS(9999); //其他商品展示
 

+ 1 - 0
app/src/main/res/values-ar/strings.xml

@@ -690,4 +690,5 @@
     <string name="rank_wealth">ثراء</string>
     <string name="rank_charm">جاذبية</string>
     <string name="rank_room">غرفة</string>
+    <string name="commonui_mic_anim">رسوم متحركة للميكروفون</string>
 </resources>

+ 1 - 0
app/src/main/res/values-zh/strings.xml

@@ -688,4 +688,5 @@
    <string name="rank_wealth">财富</string>
    <string name="rank_charm">魅力</string>
    <string name="rank_room">房间</string>
+   <string name="commonui_mic_anim">麦克风动画</string>
 </resources>

+ 1 - 0
app/src/main/res/values/strings.xml

@@ -803,4 +803,5 @@
    <string name="common_lucky_coins">Lucky coins</string>
    <string name="common_coin_value">%1$s Coin Value</string>
    <string name="common_no_records">No records</string>
+   <string name="commonui_mic_anim">Mic Animation</string>
 </resources>

+ 3 - 4
module/backpack/src/main/java/com/adealink/weparty/backpack/fragment/BackpackFragment.kt

@@ -40,13 +40,12 @@ import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_CARS
 import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_ENTER_EFFECT
 import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_HOME_DYNAMIC
 import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_ID
-import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_MIC_VOICE
+import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_MIC_ANIMATION
 import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_MOMENT_BACKGROUND
 import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_OTHER
 import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_RING
 import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_ROOM_NUMBER_CARD
 import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_THEME
-import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_EXPERIENCE_CARD
 import com.adealink.weparty.module.backpack.UserPackageInfo
 import com.adealink.weparty.module.couple.Couple
 import com.adealink.weparty.module.couple.CoupleModule
@@ -320,8 +319,8 @@ class BackpackFragment : BaseFragment(R.layout.fragment_backpack), IBackpackItem
                 return goodsList.filter { it.goodsType == StoreGoodType.RING.type }
             }
 
-            STORE_TAB_INDEX_MIC_VOICE -> {
-                return allGoodsList.filter { it.goodsType == StoreGoodType.MIC_VOICEPRINT.type }
+            STORE_TAB_INDEX_MIC_ANIMATION -> {
+                return allGoodsList.filter { it.goodsType == StoreGoodType.MIC_ANIMATION.type }
             }
 
             STORE_TAB_INDEX_MOMENT_BACKGROUND -> {

+ 4 - 4
module/backpack/src/main/java/com/adealink/weparty/backpack/fragment/BackpackUsingTabFragment.kt

@@ -35,7 +35,7 @@ import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_CARS
 import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_ENTER_EFFECT
 import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_EXPERIENCE_CARD
 import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_HOME_DYNAMIC
-import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_MIC_VOICE
+import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_MIC_ANIMATION
 import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_MOMENT_BACKGROUND
 import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_OTHER
 import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_RING
@@ -234,8 +234,8 @@ class BackpackUsingTabFragment : BaseFragment(R.layout.fragment_backpack), IBack
                 return allGoodsList.filter { it.packageInfo.goodsType == StoreGoodType.RING.type }
             }
 
-            STORE_TAB_INDEX_MIC_VOICE -> {
-                return allGoodsList.filter { it.packageInfo.goodsType == StoreGoodType.MIC_VOICEPRINT.type }
+            STORE_TAB_INDEX_MIC_ANIMATION -> {
+                return allGoodsList.filter { it.packageInfo.goodsType == StoreGoodType.MIC_ANIMATION.type }
             }
 
             STORE_TAB_INDEX_MOMENT_BACKGROUND -> {
@@ -255,7 +255,7 @@ class BackpackUsingTabFragment : BaseFragment(R.layout.fragment_backpack), IBack
                             && it.packageInfo.goodsType != StoreGoodType.ENTRY_EFFECTS.type
                             && it.packageInfo.goodsType != StoreGoodType.CHAT_BUBBLE.type
                             && it.packageInfo.goodsType != StoreGoodType.HOME_DYNAMIC.type
-                            && it.packageInfo.goodsType != StoreGoodType.MIC_VOICEPRINT.type
+                            && it.packageInfo.goodsType != StoreGoodType.MIC_ANIMATION.type
                             && it.packageInfo.goodsType != StoreGoodType.INFORMATION_CARD.type
                             && it.packageInfo.goodsType != StoreGoodType.RING.type
                             && it.packageInfo.goodsType != StoreGoodType.MOMENT_BACKGROUND.type

+ 2 - 5
module/backpack/src/main/java/com/adealink/weparty/backpack/fragment/TypeBackpackFragment.kt

@@ -1,6 +1,5 @@
 package com.adealink.weparty.backpack.fragment
 
-import android.graphics.Typeface
 import android.os.Bundle
 import androidx.fragment.app.Fragment
 import androidx.recyclerview.widget.RecyclerView
@@ -32,10 +31,8 @@ import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_ENTER_EFFECT
 import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_EXPERIENCE_CARD
 import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_HOME_DYNAMIC
 import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_ID
-import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_MIC_VOICE
-import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_MOMENT_BACKGROUND
+import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_MIC_ANIMATION
 import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_OTHER
-import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_RING
 import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_ROOM_NUMBER_CARD
 import com.adealink.weparty.module.backpack.STORE_TAB_INDEX_THEME
 import com.adealink.weparty.module.backpack.getGoodsTabName
@@ -81,7 +78,7 @@ class TypeStoreFragment : BaseFragment(R.layout.fragment_type_backpack) {
         STORE_TAB_INDEX_ENTER_EFFECT,
         STORE_TAB_INDEX_BUBBLE,
         STORE_TAB_INDEX_HOME_DYNAMIC,
-        STORE_TAB_INDEX_MIC_VOICE,
+        STORE_TAB_INDEX_MIC_ANIMATION,
 //        STORE_TAB_INDEX_MOMENT_BACKGROUND,
         STORE_TAB_INDEX_ROOM_NUMBER_CARD,
         STORE_TAB_INDEX_OTHER,

+ 2 - 2
module/backpack/src/main/java/com/adealink/weparty/backpack/viewmodel/BackpackViewModel.kt

@@ -65,7 +65,7 @@ class BackpackViewModel() : BaseViewModel(), IBackpackViewModel {
                     usingGoodsDataList.addAll(allGoodsList.informationCardList.map { BackPackListUsingItemData(it) })
                     usingGoodsDataList.addAll(allGoodsList.homeDynamicList.map { BackPackListUsingItemData(it) })
 //                    usingGoodsDataList.addAll(allGoodsList.redPacketCoverList.map { BackPackListUsingItemData(it) })
-                    usingGoodsDataList.addAll(allGoodsList.micVoiceprintList.map { BackPackListUsingItemData(it) })
+                    usingGoodsDataList.addAll(allGoodsList.micVoiceDynamicList.map { BackPackListUsingItemData(it) })
                     usingGoodsDataList.addAll(allGoodsList.roomGiftFrameEffectList.map { BackPackListUsingItemData(it) })
                     usingGoodsDataList.addAll(allGoodsList.globalGiftFrameEffectList.map { BackPackListUsingItemData(it) })
                     usingGoodsDataList.addAll(allGoodsList.experienceCardList.map { BackPackListUsingItemData(it) })
@@ -89,7 +89,7 @@ class BackpackViewModel() : BaseViewModel(), IBackpackViewModel {
                     usingGoodsDataList.addAll(allGoodsList.informationCardList.map { BackPackListUsingItemData(it, true) })
                     usingGoodsDataList.addAll(allGoodsList.homeDynamicList.map { BackPackListUsingItemData(it, true) })
 //                    usingGoodsDataList.addAll(allGoodsList.redPacketCoverList.map { BackPackListUsingItemData(it, true) })
-                    usingGoodsDataList.addAll(allGoodsList.micVoiceprintList.map { BackPackListUsingItemData(it, true) })
+                    usingGoodsDataList.addAll(allGoodsList.micVoiceDynamicList.map { BackPackListUsingItemData(it, true) })
                     usingGoodsDataList.addAll(allGoodsList.roomGiftFrameEffectList.map { BackPackListUsingItemData(it, true) })
                     usingGoodsDataList.addAll(allGoodsList.globalGiftFrameEffectList.map { BackPackListUsingItemData(it, true) })
                     usingGoodsDataList.addAll(allGoodsList.experienceCardList.map { BackPackListUsingItemData(it, true) })

+ 10 - 0
module/message/src/main/java/com/adealink/weparty/message/conversation/comp/ConversationTargetInfoComp.kt

@@ -40,6 +40,7 @@ import com.adealink.weparty.module.message.data.OFFICIAL_TARGET_ID
 import com.adealink.weparty.module.message.data.isSystemTarget
 import com.adealink.weparty.module.profile.ProfileModule
 import com.adealink.weparty.module.profile.data.UserInfo
+import com.adealink.weparty.module.profile.view.IUserOnlineStatusView.Companion.formatLastOnlineTime
 import kotlinx.coroutines.launch
 
 class ConversationTargetInfoComp(
@@ -296,6 +297,15 @@ class ConversationTargetInfoComp(
                 } else {
                     binding.svgaInRoom.hide()
                 }
+                if (onlineInfo.onlineStatus==0){
+                    binding.tvOfflineText.show()
+                    val formatText = formatLastOnlineTime(onlineInfo.lastOnlineTs)
+                    binding.tvOfflineText.text = formatText
+                }else{
+                    binding.tvOfflineText.gone()
+                }
+
+
             }
     }
 

+ 59 - 40
module/message/src/main/res/layout/layout_conversation_top_bar_center_new.xml

@@ -79,7 +79,7 @@
 
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/intimacy_cl"
-        android:layout_width="wrap_content"
+        android:layout_width="0dp"
         android:layout_height="match_parent"
         android:visibility="gone"
         tools:visibility="gone"
@@ -88,38 +88,71 @@
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent">
 
+        <com.opensource.svgaplayer.WenextSvgaView
+            android:id="@+id/intimacy_heart_iv"
+            android:layout_width="28dp"
+            android:layout_height="28dp"
+            android:layout_marginTop="5dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/intimacy_value_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="12dp"
+            android:gravity="center"
+            android:paddingHorizontal="6dp"
+            android:textColor="@color/white"
+            android:textSize="11dp"
+            android:includeFontPadding="false"
+            android:layout_marginBottom="1dp"
+            app:layout_constraintEnd_toEndOf="@id/intimacy_heart_iv"
+            app:layout_constraintStart_toStartOf="@id/intimacy_heart_iv"
+            app:layout_constraintBottom_toBottomOf="parent"
+            tools:text="100" />
+
+
         <androidx.appcompat.widget.AppCompatImageView
             android:id="@+id/link_left_ic"
             android:layout_width="25dp"
             android:layout_height="11dp"
-            android:layout_marginStart="-6dp"
+            android:layout_marginEnd="-6dp"
             android:src="@drawable/message_intimacy_link_left"
             app:layout_constraintBottom_toBottomOf="@id/intimacy_heart_iv"
-            app:layout_constraintStart_toEndOf="@id/target_avatar"
+            app:layout_constraintEnd_toStartOf="@id/intimacy_heart_iv"
             app:layout_constraintTop_toTopOf="@id/intimacy_heart_iv" />
 
         <androidx.appcompat.widget.AppCompatImageView
             android:id="@+id/link_right_ic"
             android:layout_width="25dp"
             android:layout_height="11dp"
-            android:layout_marginEnd="-6dp"
+            android:layout_marginStart="-6dp"
             android:rotationY="180"
             android:src="@drawable/message_intimacy_link_left"
             app:layout_constraintBottom_toBottomOf="@id/intimacy_heart_iv"
-            app:layout_constraintEnd_toStartOf="@id/self_avatar"
-            app:layout_constraintHorizontal_bias="1"
-            app:layout_constraintStart_toEndOf="@id/link_left_ic"
+            app:layout_constraintStart_toEndOf="@id/intimacy_heart_iv"
             app:layout_constraintTop_toTopOf="@id/intimacy_heart_iv" />
 
+
         <com.adealink.weparty.commonui.imageview.AvatarView
             android:id="@+id/target_avatar"
             android:layout_width="28dp"
             android:layout_height="28dp"
             android:layout_marginTop="5.5dp"
             android:layout_marginStart="2dp"
-            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toStartOf="@+id/link_left_ic"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <com.adealink.weparty.commonui.imageview.AvatarView
+            android:id="@+id/self_avatar"
+            android:layout_width="28dp"
+            android:layout_height="28dp"
+            android:layout_marginTop="5.5dp"
+            app:layout_constraintStart_toEndOf="@id/link_right_ic"
             app:layout_constraintTop_toTopOf="parent" />
 
+
         <com.opensource.svgaplayer.WenextSvgaView
             android:id="@+id/svga_in_room"
             android:layout_width="32dp"
@@ -144,39 +177,25 @@
             app:layout_constraintTop_toTopOf="@id/target_avatar"
             tools:visibility="visible" />
 
-        <com.adealink.weparty.commonui.imageview.AvatarView
-            android:id="@+id/self_avatar"
-            android:layout_width="28dp"
-            android:layout_height="28dp"
-            android:layout_marginStart="67.5dp"
-            android:layout_marginTop="5.5dp"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toEndOf="@id/target_avatar"
-            app:layout_constraintTop_toTopOf="parent" />
-
-        <com.opensource.svgaplayer.WenextSvgaView
-            android:id="@+id/intimacy_heart_iv"
-            android:layout_width="28dp"
-            android:layout_height="28dp"
-            android:layout_marginTop="5dp"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent" />
+        <com.adealink.weparty.commonui.widget.AutoMarqueeTextView
+            android:id="@+id/tv_offline_text"
+            android:layout_width="71dp"
+            android:layout_height="wrap_content"
+            android:paddingHorizontal="4dp"
+            android:paddingVertical="2dp"
+            android:layout_marginStart="2dp"
+            android:background="@drawable/profile_user_offline_bg"
+            android:ellipsize="marquee"
+            android:singleLine="true"
+            android:textColor="@color/color_777777"
+            android:textSize="10sp"
+            android:visibility="gone"
+            app:layout_constraintBottom_toBottomOf="@id/target_avatar"
+            app:layout_constraintEnd_toEndOf="@+id/target_avatar"
+            app:layout_constraintStart_toStartOf="@+id/target_avatar"
+            app:layout_constraintTop_toBottomOf="@id/target_avatar"
+            tools:text="@string/profile_user_online" />
 
-        <androidx.appcompat.widget.AppCompatTextView
-            android:id="@+id/intimacy_value_tv"
-            android:layout_width="wrap_content"
-            android:layout_height="12dp"
-            android:gravity="center"
-            android:paddingHorizontal="6dp"
-            android:textColor="@color/white"
-            android:textSize="11dp"
-            android:includeFontPadding="false"
-            android:layout_marginBottom="1dp"
-            app:layout_constraintEnd_toEndOf="@id/intimacy_heart_iv"
-            app:layout_constraintStart_toStartOf="@id/intimacy_heart_iv"
-            app:layout_constraintBottom_toBottomOf="parent"
-            tools:text="100" />
 
     </androidx.constraintlayout.widget.ConstraintLayout>
 

BIN
module/profile/src/main/assets/profile_icon_live_wh.svga


+ 18 - 0
module/profile/src/main/java/com/adealink/weparty/profile/decorate/manager/UserDecorManager.kt

@@ -35,6 +35,8 @@ import com.adealink.weparty.module.profile.decorate.data.RoomGiftLevelUpSpeedUp
 import com.adealink.weparty.module.profile.decorate.data.RoomGiftLevelUpSpeedUpDecor
 import com.adealink.weparty.module.profile.decorate.data.RoomMemberInfoCardConfig
 import com.adealink.weparty.module.profile.decorate.data.RoomMemberInfoCardDecor
+import com.adealink.weparty.module.profile.decorate.data.SpecialMicAnimConfig
+import com.adealink.weparty.module.profile.decorate.data.SpecialMicAnimDecor
 import com.adealink.weparty.module.profile.decorate.data.TeenPattiDecor
 import com.adealink.weparty.module.profile.decorate.data.UploadCoverDecor
 import com.adealink.weparty.module.profile.decorate.data.UserRippleConfig
@@ -44,6 +46,7 @@ import com.adealink.weparty.profile.datasource.ProfileHttpService
 import com.adealink.weparty.profile.decorate.data.UserBatchCommonConfigReq
 import com.adealink.weparty.profile.decorate.data.UserConfigUpdateReq
 import com.adealink.weparty.profile.decorate.listener.IUserDecorListener
+import com.google.gson.reflect.TypeToken
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
 import java.util.EnumMap
@@ -427,6 +430,21 @@ internal class UserDecorManager : BaseFrame<IUserDecorListener>(), IUserDecorMan
                         InviteActivityDiamondThresholdDecor(thresholdConfig)
                     }
                 }
+                DecorType.SPECIAL_MIC_ANIMATION->{
+                    if (config.isEmpty()) {
+                        EmptyDecor
+                    } else {
+                        val specialMicAnimConfigType =
+                            object : TypeToken<SpecialMicAnimConfig>() {}.type
+                        val specialMicAnimConfig =
+                            froJsonErrorNull<SpecialMicAnimConfig>(config, specialMicAnimConfigType)
+                        if (specialMicAnimConfig == null) {
+                            EmptyDecor
+                        } else {
+                            SpecialMicAnimDecor(specialMicAnimConfig)
+                        }
+                    }
+                }
 
                 else -> {
                     EmptyDecor

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

@@ -455,6 +455,7 @@ class MeFragment : BaseFragment(R.layout.fragment_me), IScrollManager {
         }
 
         walletViewModel?.getMyCoinCount()
+        walletViewModel?.checkThirdPayOpen()
 
         profileViewModel.getChatAchieveActivityInfo()
 

+ 14 - 3
module/profile/src/main/java/com/adealink/weparty/profile/userprofile/component/ProfileUserBasisInfoComp.kt

@@ -4,7 +4,9 @@ import android.view.View
 import android.view.ViewGroup.MarginLayoutParams
 import androidx.core.view.updateLayoutParams
 import androidx.lifecycle.LifecycleOwner
+import com.adealink.frame.router.Router
 import com.adealink.frame.util.DisplayUtil
+import com.adealink.frame.util.onClick
 import com.adealink.weparty.commonui.ext.dp
 import com.adealink.weparty.commonui.ext.mediumText
 import com.adealink.weparty.commonui.ext.setVisible
@@ -12,7 +14,10 @@ import com.adealink.weparty.commonui.ext.show
 import com.adealink.weparty.module.profile.data.UserInfo
 import com.adealink.weparty.module.profile.util.updateCharmLevelLabel
 import com.adealink.weparty.module.profile.util.updateChatAchievementLabel
+import com.adealink.weparty.module.room.Room
 import com.adealink.weparty.profile.databinding.LayoutProfileBasicInfoBinding
+import com.adealink.weparty.room.data.EnterRoomInfo
+import com.adealink.weparty.room.data.JoinRoomFrom
 
 /**
  * Created by XiaoDongLin.
@@ -30,8 +35,6 @@ class ProfileUserBasisInfoComp(
         inRoomLayout.updateLayoutParams<MarginLayoutParams> {
             topMargin = DisplayUtil.getStatusBarHeight(requireActivity()) + 44.dp()
         }
-        //写死gone,其他需求来做
-        inRoomLayout.show(isShow = false)
     }
 
     override fun observeViewModel() {
@@ -39,7 +42,15 @@ class ProfileUserBasisInfoComp(
             ?.observe(viewLifecycleOwner) { map ->
                 val onlineInfo = map[userUid] ?: return@observe
                 binding.userOnlineStatusView.setOnlineStatus(userUid, onlineInfo)
-//                inRoomLayout.show(isShow = onlineInfo.chatRoom != 0L)
+                inRoomLayout.show(isShow = onlineInfo.chatRoom != 0L)
+                inRoomLayout.onClick {
+                    Router.build(binding.root.context, Room.Room.PATH)
+                        .putExtra(
+                            Room.Room.EXTRA_ENTER_ROOM_INFO,
+                            EnterRoomInfo(onlineInfo.chatRoom, JoinRoomFrom.PROFILE.from)
+                        )
+                        .start()
+                }
             }
     }
 

+ 2 - 1
module/profile/src/main/res/layout/activity_user_profile_new.xml

@@ -184,10 +184,11 @@
             app:layout_constraintTop_toTopOf="parent"
             tools:visibility="visible" />
 
-        <com.adealink.frame.image.view.NetworkImageView
+        <com.opensource.svgaplayer.WenextSvgaView
             android:id="@+id/iv_in_room_wave"
             android:layout_width="14dp"
             android:layout_height="14dp"
+            app:source="profile_icon_live_wh.svga"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />

+ 27 - 1
module/room/src/main/java/com/adealink/weparty/room/micseat/BaseSeatsTemplate.kt

@@ -37,6 +37,7 @@ import com.adealink.weparty.module.profile.ProfileModule
 import com.adealink.weparty.module.profile.data.UserInfo
 import com.adealink.weparty.module.profile.decorate.data.DecorInfo
 import com.adealink.weparty.module.profile.decorate.data.DecorType
+import com.adealink.weparty.module.profile.decorate.data.SpecialMicAnimDecor
 import com.adealink.weparty.module.room.Room
 import com.adealink.weparty.module.room.chat.data.EmotionResultMsgContent
 import com.adealink.weparty.module.room.chat.data.Message
@@ -72,6 +73,7 @@ import com.adealink.weparty.room.game.viewmodel.RoomGameViewModel
 import com.adealink.weparty.room.member.RoomMemberInfoDialog
 import com.adealink.weparty.room.member.viewmodel.RoomMemberViewModel
 import com.adealink.weparty.room.micseat.defaults.BaseDefaultSeatView
+import com.adealink.weparty.room.micseat.listener.IMicAnimationListener
 import com.adealink.weparty.room.micseat.listener.IMicSeatLayoutListener
 import com.adealink.weparty.room.micseat.onmic.OnMicApplicationFragment
 import com.adealink.weparty.room.micseat.operate.AdminEmptySeatOperationFragment
@@ -82,6 +84,7 @@ import com.adealink.weparty.room.util.getOperateString
 import com.adealink.weparty.room.viewmodel.RoomViewModelFactory
 import com.adealink.weparty.stat.MicOnStatEvent
 import com.adealink.weparty.viewmodel.parentFragmentViewModels
+import kotlinx.coroutines.launch
 import com.adealink.weparty.R as APP_R
 import com.adealink.weparty.cocosgame.data.Game as CocosGame
 
@@ -94,7 +97,7 @@ import com.adealink.weparty.cocosgame.data.Game as CocosGame
  */
 abstract class BaseSeatsTemplate<SV : BaseDefaultSeatView, VM : BaseSeatsTemplateViewModel> : BaseFragment,
     IMemberInfoListener,
-    IMicSeatLayoutListener {
+    IMicSeatLayoutListener, IMicAnimationListener {
 
     constructor() : super()
 
@@ -147,6 +150,7 @@ abstract class BaseSeatsTemplate<SV : BaseDefaultSeatView, VM : BaseSeatsTemplat
     open fun setSeatView(index: MicIndex, seatView: SV) {
         seatView.index = index
         seatView.memberInfoListener = this
+        seatView.micAnimationListener = this
         micSeatViews[index.index] = seatView
     }
 
@@ -705,4 +709,26 @@ abstract class BaseSeatsTemplate<SV : BaseDefaultSeatView, VM : BaseSeatsTemplat
     }
 
     abstract fun findFirstUnlockEmptyMicSeat(): Pair<MicIndex, SV>?
+
+    override fun getMicAnimationResByUid(uid: Long, callBack: (String) -> Unit) {
+        viewModel.viewModelScope.launch {
+            val decorRlt =
+                ProfileModule.getDecor(
+                    uid = uid,
+                    decorTypeSet = setOf(DecorType.SPECIAL_MIC_ANIMATION),
+                    cache = false
+                )
+            if (decorRlt is Rlt.Success) {
+                val config =
+                    decorRlt.data.get(DecorType.SPECIAL_MIC_ANIMATION) as? SpecialMicAnimDecor
+                if (config != null && config.config.url.isNotEmpty()) {
+                    callBack(config.config.url)
+                } else {
+                    callBack("")
+                }
+            }
+//            callBack("https://wenext-lama.oss-ap-southeast-1.aliyuncs.com/activity/wealth_level/wealth_level_mic_voice_effect5_1.svga")
+        }
+    }
+
 }

+ 6 - 0
module/room/src/main/java/com/adealink/weparty/room/micseat/decor/EmotionDecorView.kt

@@ -41,4 +41,10 @@ class EmotionDecorView(
             )
         }
     }
+
+    override fun clearEmotion() {
+        view {
+            it.clear()
+        }
+    }
 }

+ 3 - 1
module/room/src/main/java/com/adealink/weparty/room/micseat/decor/IEmotionDecorApi.kt

@@ -2,6 +2,8 @@ package com.adealink.weparty.room.micseat.decor
 
 import com.adealink.weparty.module.emotion.data.SendEmotionNotify
 
-interface IEmotionDecorApi: IDecorApi {
+interface IEmotionDecorApi : IDecorApi {
     fun playEmotion(notify: SendEmotionNotify, notifyAnimationPlayComplete: Boolean = true)
+
+    fun clearEmotion()
 }

+ 9 - 0
module/room/src/main/java/com/adealink/weparty/room/micseat/defaults/BaseDefaultSeatView.kt

@@ -178,6 +178,8 @@ abstract class BaseDefaultSeatView @JvmOverloads constructor(
         showDiamonds(0)
         showGiftWishStatus(0, null)
         showRole(null)
+        showSpeakingMicAnimation("")
+        clearEmotion()
     }
 
     /**
@@ -208,6 +210,7 @@ abstract class BaseDefaultSeatView @JvmOverloads constructor(
         showUserDiamonds(onSeatInfo.micUid)
         showUserGiftWishStatus(onSeatInfo.micUid)
         showMemberRole(onSeatInfo.micUid)
+        showSpeakingMicAnimation("")
         getSpecialMicAnim(onSeatInfo.micUid)
     }
 
@@ -384,6 +387,12 @@ abstract class BaseDefaultSeatView @JvmOverloads constructor(
         }
     }
 
+    override fun clearEmotion() {
+        getDecorApi(IEmotionDecorApi::class.java)?.onEach {
+            it.clearEmotion()
+        }
+    }
+
     override fun setDiamondsDecorVisibility(visibility: Int) {
         getDecorApi(IDiamondsDecorApi::class.java)?.onEach {
             it.setDiamondsDecorVisibility(visibility)

+ 1 - 0
module/room/src/main/java/com/adealink/weparty/room/micseat/defaults/DecorDynamicLayer.kt

@@ -23,6 +23,7 @@ val MIC_SEAT_DECOR_HIERARCHY: IntArray = intArrayOf(
     R.id.id_mic_seat_name_decor, //姓名
     R.id.id_mic_seat_diamonds_decor, //收钻数
     R.id.id_mic_seat_mute_decor, //静音
+    R.id.id_mic_seat_mic_anim, //麦克风动画
     R.id.id_mic_seat_emotion, //表情
     R.id.id_mic_seat_game_remove_user_decor, //移除游戏匹配
     R.id.id_mic_seat_game_role_decor, //游戏中房间角色标志

+ 2 - 0
module/room/src/main/java/com/adealink/weparty/room/micseat/defaults/DefaultSeatView.kt

@@ -12,6 +12,7 @@ import com.adealink.weparty.room.micseat.decor.CpEffectDecorView
 import com.adealink.weparty.room.micseat.decor.EmotionDecorView
 import com.adealink.weparty.room.micseat.decor.IAvatarDecorApi
 import com.adealink.weparty.room.micseat.decor.IntimacyEffectDecorView
+import com.adealink.weparty.room.micseat.decor.MicAnimationDecorView
 import com.adealink.weparty.room.micseat.decor.MuteDecorView
 import com.adealink.weparty.room.micseat.decor.SpeakingRippleDecorView
 
@@ -34,6 +35,7 @@ abstract class DefaultSeatView @JvmOverloads constructor(
         addDecorView(SpeakingRippleDecorView(dynamicLayers))
         addDecorView(CpEffectDecorView(dynamicLayers))
         addDecorView(IntimacyEffectDecorView(dynamicLayers))
+        addDecorView(MicAnimationDecorView(dynamicLayers))
     }
 
     /**

+ 1 - 0
module/room/src/main/java/com/adealink/weparty/room/micseat/game/GameDecorDynamicLayer.kt

@@ -14,6 +14,7 @@ val GAME_MIC_SEAT_DECOR_HIERARCHY: IntArray = intArrayOf(
     R.id.id_mic_seat_game_avatar_frame_decor, //
     R.id.id_mic_seat_name_decor, //姓名
     R.id.id_mic_seat_mute_decor, //静音
+    R.id.id_mic_seat_mic_anim, //麦克风动画
     R.id.id_mic_seat_emotion, //表情
     R.id.id_mic_seat_game_remove_user_decor, //移除游戏匹配
     R.id.id_mic_seat_game_role_decor, //游戏中房间角色标志

+ 1 - 0
module/room/src/main/java/com/adealink/weparty/room/micseat/micgrab/MicGrabDecorDynamicLayer.kt

@@ -11,6 +11,7 @@ val MIC_GRAB_MIC_SEAT_DECOR_HIERARCHY: IntArray = intArrayOf(
     R.id.id_mic_seat_avatar_frame_decor, //头像框
     R.id.id_mic_seat_game_avatar_frame_decor,
     R.id.id_mic_seat_name_decor, //姓名
+    R.id.id_mic_seat_mic_anim, //麦克风动画
     R.id.id_mic_seat_emotion, //表情
     R.id.id_mic_seat_index_decor, //麦位序号
     R.id.id_mic_seat_mic_grab_prepare, //嗨歌抢唱状态

+ 1 - 0
module/room/src/main/java/com/adealink/weparty/room/micseat/pk/PKDecorDynamicLayer.kt

@@ -14,6 +14,7 @@ val PK_MIC_SEAT_DECOR_HIERARCHY: IntArray = intArrayOf(
     R.id.id_mic_seat_avatar_frame_decor, //头像框
     R.id.id_mic_seat_name_decor, //姓名
     R.id.id_mic_seat_mute_decor, //静音
+    R.id.id_mic_seat_mic_anim, //麦克风动画
     R.id.id_mic_seat_emotion, //表情
     R.id.id_mic_seat_cp_effect_decor, //CP麦位动效
     R.id.id_mic_seat_intimacy_effect_decor, //CP,好友麦位动效

+ 2 - 0
module/room/src/main/java/com/adealink/weparty/room/micseat/pk/PKSeatsView.kt

@@ -12,6 +12,7 @@ import com.adealink.weparty.room.micseat.decor.CpEffectDecorView
 import com.adealink.weparty.room.micseat.decor.EmotionDecorView
 import com.adealink.weparty.room.micseat.decor.IAvatarFrameDecorApi
 import com.adealink.weparty.room.micseat.decor.IntimacyEffectDecorView
+import com.adealink.weparty.room.micseat.decor.MicAnimationDecorView
 import com.adealink.weparty.room.micseat.decor.MuteDecorView
 import com.adealink.weparty.room.micseat.decor.NameDecorView
 import com.adealink.weparty.room.micseat.decor.SpeakingRippleDecorView
@@ -53,6 +54,7 @@ open class PKSeatsView @JvmOverloads constructor(
         addDecorView(PKMVPLabelDecor(dynamicLayers))
         addDecorView(CpEffectDecorView(dynamicLayers))
         addDecorView(IntimacyEffectDecorView(dynamicLayers))
+        addDecorView(MicAnimationDecorView(dynamicLayers))
     }
 
     override fun showTeamHalo(team: PKTeam) {

+ 1 - 0
module/room/src/main/java/com/adealink/weparty/room/micseat/simple/SimpleDecorDynamicLayer.kt

@@ -11,4 +11,5 @@ val SIMPLE_MIC_SEAT_DECOR_HIERARCHY: IntArray = intArrayOf(
     R.id.id_mic_seat_avatar_frame_decor, //头像框
     R.id.id_mic_seat_name_decor, //姓名
     R.id.id_mic_seat_mute_decor, //静音
+    R.id.id_mic_seat_mic_anim, //麦克风动画
 )

+ 2 - 0
module/room/src/main/java/com/adealink/weparty/room/micseat/simple/SimpleSeatView.kt

@@ -7,6 +7,7 @@ import com.adealink.weparty.room.R
 import com.adealink.weparty.room.micseat.DecorDynamicLayers
 import com.adealink.weparty.room.micseat.decor.AvatarDecorView
 import com.adealink.weparty.room.micseat.decor.AvatarFrameDecorView
+import com.adealink.weparty.room.micseat.decor.MicAnimationDecorView
 import com.adealink.weparty.room.micseat.decor.MuteDecorView
 import com.adealink.weparty.room.micseat.decor.NameDecorView
 import com.adealink.weparty.room.micseat.decor.SpeakingRippleDecorView
@@ -36,6 +37,7 @@ open class SimpleSeatView @JvmOverloads constructor(
         addDecorView(AvatarFrameDecorView(dynamicLayers)) //头像框
         addDecorView(MuteDecorView(dynamicLayers)) //开麦闭麦
         addDecorView(NameDecorView(dynamicLayers)) //昵称
+        addDecorView(MicAnimationDecorView((dynamicLayers))) //麦位动画
     }
 
 }

+ 2 - 0
module/room/src/main/java/com/adealink/weparty/room/micseat/video/BaseVideoRoomSeatView.kt

@@ -10,6 +10,7 @@ import com.adealink.weparty.room.micseat.decor.AvatarFrameDecorView
 import com.adealink.weparty.room.micseat.decor.CpEffectDecorView
 import com.adealink.weparty.room.micseat.decor.EmotionDecorView
 import com.adealink.weparty.room.micseat.decor.IntimacyEffectDecorView
+import com.adealink.weparty.room.micseat.decor.MicAnimationDecorView
 import com.adealink.weparty.room.micseat.decor.MuteDecorView
 import com.adealink.weparty.room.micseat.decor.SpeakingRippleDecorView
 import com.adealink.weparty.room.micseat.defaults.BaseDefaultSeatView
@@ -34,6 +35,7 @@ abstract class BaseVideoRoomSeatView @JvmOverloads constructor(
         addDecorView(SpeakingRippleDecorView(dynamicLayers))
         addDecorView(CpEffectDecorView(dynamicLayers))
         addDecorView(IntimacyEffectDecorView(dynamicLayers))
+        addDecorView(MicAnimationDecorView(dynamicLayers))
     }
 
     override fun onMemberOffMicSeat(oldSeatInfo: MicSeatInfo?, offSeatInfo: MicSeatInfo?) {

+ 1 - 0
module/room/src/main/java/com/adealink/weparty/room/micseat/video/VideoDecorDynamicLayer.kt

@@ -16,6 +16,7 @@ val VIDEO_MIC_SEAT_DECOR_HIERARCHY: IntArray = intArrayOf(
     R.id.id_mic_seat_name_decor, //姓名
     R.id.id_mic_seat_diamonds_decor, //收钻数
     R.id.id_mic_seat_mute_decor, //静音
+    R.id.id_mic_seat_mic_anim, //麦克风动画
     R.id.id_mic_seat_emotion, //表情
     R.id.id_mic_seat_cp_effect_decor, //CP麦位动效
     R.id.id_mic_seat_intimacy_effect_decor, //CP,好友麦位动效

+ 1 - 0
module/room/src/main/java/com/adealink/weparty/room/micseat/wedding/WeddingDecorDynamicLayer.kt

@@ -13,6 +13,7 @@ val WEDDING_MIC_SEAT_DECOR_HIERARCHY: IntArray = intArrayOf(
     R.id.id_mic_seat_wedding_identity_decor, //婚礼房-身份 -- 伴娘/伴郎
     R.id.id_mic_seat_name_decor, //姓名
     R.id.id_mic_seat_mute_decor, //静音
+    R.id.id_mic_seat_mic_anim, //麦克风动画
     R.id.id_mic_seat_emotion, //表情
     R.id.id_mic_seat_cp_effect_decor, //CP麦位动效
     R.id.id_mic_seat_intimacy_effect_decor, //CP,好友麦位动效

+ 9 - 1
module/store/src/main/java/com/adealink/weparty/store/othergoods/OtherGoodsReviewDialog.kt

@@ -5,6 +5,8 @@ import android.graphics.drawable.ColorDrawable
 import android.os.Bundle
 import android.view.Window
 import android.view.WindowManager
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.view.updateLayoutParams
 import androidx.fragment.app.FragmentManager
 import androidx.fragment.app.activityViewModels
 import com.adealink.frame.aab.util.getCompatColor
@@ -17,6 +19,7 @@ import com.adealink.frame.router.Router
 import com.adealink.frame.router.annotation.BindExtra
 import com.adealink.frame.router.annotation.RouterUri
 import com.adealink.weparty.commonui.dialogfragment.BaseDialogFragment
+import com.adealink.weparty.commonui.ext.dp
 import com.adealink.weparty.commonui.ext.gone
 import com.adealink.weparty.commonui.ext.show
 import com.adealink.weparty.commonui.toast.util.showFailedToast
@@ -64,11 +67,16 @@ class OtherGoodsReviewDialog : BaseDialogFragment(R.layout.dialog_other_goods_re
         }
         playMedalReview()
         updateUseBtn()
-        if (goodsInfo?.goodsType == StoreGoodType.MIC_VOICEPRINT.type) {
+        if (goodsInfo?.goodsType == StoreGoodType.MIC_ANIMATION.type) {
             binding.ivAvatar.show()
             binding.ivAvatar.setImageUrl(
                 ProfileModule.getMyUserInfo()?.url
             )
+            binding.ivEffect.elevation = 1f
+            binding.ivEffect.layoutParams=ConstraintLayout.LayoutParams(30.dp(),30.dp()).apply {
+                bottomToBottom = binding.ivAvatar.id
+                endToEnd = binding.ivAvatar.id
+            }
         }
     }