admin 1 рік тому
батько
коміт
89f9135702
64 змінених файлів з 857 додано та 403 видалено
  1. 1 0
      .idea/.name
  2. 1 1
      .idea/gradle.xml
  3. 1 1
      .idea/misc.xml
  4. 2 2
      app/src/main/java/com/swago/app/SplashVm.kt
  5. 2 0
      baseswago/src/main/java/com/swago/baseswago/baseroom/IRoomInfo.kt
  6. 3 3
      baseswago/src/main/java/com/swago/baseswago/constant/UrlConstant.kt
  7. 9 1
      baseswago/src/main/java/com/swago/baseswago/inter/RoomApi.kt
  8. 10 0
      baseswago/src/main/java/com/swago/baseswago/model/live/RoomModel.java
  9. 10 0
      baseswago/src/main/java/com/swago/baseswago/model/live/audio/AudioBgModel.kt
  10. 4 4
      baseswago/src/main/java/com/swago/baseswago/util/DpPxUtil.kt
  11. 7 0
      baseswago/src/main/java/com/swago/glide.kt
  12. BIN
      baseswago/src/main/res/mipmap-xxhdpi/icon_audioing.png
  13. BIN
      baseswago/src/main/res/mipmap-xxhdpi/icon_audioing.webp
  14. BIN
      baseswago/src/main/res/mipmap-xxhdpi/icon_living.png
  15. BIN
      baseswago/src/main/res/mipmap-xxhdpi/icon_living.webp
  16. BIN
      baseswago/src/main/res/mipmap-xxhdpi/live_icon_report.png
  17. BIN
      baseswago/src/main/res/mipmap-xxhdpi/win_100_prize.webp
  18. BIN
      baseswago/src/main/res/mipmap-xxhdpi/win_499_prize.webp
  19. BIN
      baseswago/src/main/res/mipmap-xxhdpi/win_500_prize.webp
  20. 8 11
      home/src/main/java/com/swago/home/MineFragment.kt
  21. 4 6
      home/src/main/java/com/swago/home/innerhome/HomeAdapter.kt
  22. 5 26
      home/src/main/res/layout/item_home.xml
  23. BIN
      room/src/main/assets/join_five.svga
  24. BIN
      room/src/main/assets/join_four.svga
  25. BIN
      room/src/main/assets/join_one.svga
  26. BIN
      room/src/main/assets/join_three.svga
  27. BIN
      room/src/main/assets/join_two.svga
  28. BIN
      room/src/main/assets/win_1001_prize.svga
  29. BIN
      room/src/main/assets/win_101_500_prize.svga
  30. BIN
      room/src/main/assets/win_501_1000_prize.svga
  31. 53 0
      room/src/main/java/com/swago/room/anchor/AnchorRoomActivity.kt
  32. 4 0
      room/src/main/java/com/swago/room/anchor/AnchorRoomFragment.kt
  33. 88 17
      room/src/main/java/com/swago/room/audio/widget/AudioContainGiftView.kt
  34. 11 0
      room/src/main/java/com/swago/room/audio/widget/AudioGiftAnimManager.kt
  35. 51 33
      room/src/main/java/com/swago/room/base/BaseComFragment.kt
  36. 6 0
      room/src/main/java/com/swago/room/bean/UserRoomModel.kt
  37. 14 19
      room/src/main/java/com/swago/room/game/GamePlayDialog.kt
  38. 40 18
      room/src/main/java/com/swago/room/gift/GiftDialog.kt
  39. 89 12
      room/src/main/java/com/swago/room/giftdandao/GiftDanDaoView.kt
  40. 110 97
      room/src/main/java/com/swago/room/manager/JoinRoomManager.kt
  41. 5 0
      room/src/main/java/com/swago/room/user/UserRoomActivity.kt
  42. 0 14
      room/src/main/java/com/swago/room/user/UserRoomFragment.kt
  43. 12 0
      room/src/main/java/com/swago/room/vm/RoomOtherVm.kt
  44. 1 1
      room/src/main/java/com/swago/room/vm/RoomVm.kt
  45. 10 1
      room/src/main/java/com/swago/room/widget/AnchorFooterView.kt
  46. 8 0
      room/src/main/java/com/swago/room/widget/ComHeaderView.kt
  47. 3 0
      room/src/main/java/com/swago/room/widget/UserFooterView.kt
  48. 114 70
      room/src/main/res/layout/activity_anchor_room.xml
  49. 1 15
      room/src/main/res/layout/fragment_base_com.xml
  50. 15 0
      room/src/main/res/layout/layout_anchor_footer_view.xml
  51. 10 10
      room/src/main/res/layout/layout_user_footer_view.xml
  52. 12 0
      room/src/main/res/layout/layout_user_header_view.xml
  53. 5 2
      room/src/main/res/layout/layout_user_room.xml
  54. 27 5
      room/src/main/res/layout/view_item_gift.xml
  55. 101 34
      room/src/main/res/layout/view_user_join_room.xml
  56. BIN
      room/src/main/res/mipmap-xxhdpi/audio_default_bg.webp
  57. BIN
      room/src/main/res/mipmap-xxhdpi/ic_left_change.png
  58. BIN
      room/src/main/res/mipmap-xxhdpi/ic_right_change.png
  59. BIN
      room/src/main/res/mipmap-xxhdpi/join_fifteen_logo.webp
  60. BIN
      room/src/main/res/mipmap-xxhdpi/join_fifteen_nineteen.webp
  61. BIN
      room/src/main/res/mipmap-xxhdpi/join_ten_fourteen.webp
  62. BIN
      room/src/main/res/mipmap-xxhdpi/join_ten_logo.webp
  63. BIN
      room/src/main/res/mipmap-xxhdpi/win_1_50_prize.webp
  64. BIN
      room/src/main/res/mipmap-xxhdpi/win_51_100_prize.webp

+ 1 - 0
.idea/.name

@@ -0,0 +1 @@
+Swago

+ 1 - 1
.idea/gradle.xml

@@ -7,7 +7,7 @@
         <option name="testRunner" value="GRADLE" />
         <option name="distributionType" value="DEFAULT_WRAPPED" />
         <option name="externalProjectPath" value="$PROJECT_DIR$" />
-        <option name="gradleJvm" value="Embedded JDK" />
+        <option name="gradleJvm" value="jbr-17" />
         <option name="modules">
           <set>
             <option value="$PROJECT_DIR$" />

+ 1 - 1
.idea/misc.xml

@@ -304,7 +304,7 @@
     <option name="priority" value="Medium" />
     <option name="excludeFilter" value="" />
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>
   <component name="ProjectType">

+ 2 - 2
app/src/main/java/com/swago/app/SplashVm.kt

@@ -112,9 +112,9 @@ class SplashVm(application: Application) : BaseViewModel(application) {
 
     private fun setBaseUrl(baseUrl: String) {
         if (BuildConfig.DEBUG) {
-//            UrlConstant.BASE_URL =   "http:test-api.swago.cn"
+            UrlConstant.BASE_URL =   "http:test-api.swago.cn"
 //            UrlConstant.BASE_URL =   "http:huawei.swago.cn"
-            UrlConstant.BASE_URL =   "https://pro-api.swago.cn"
+//            UrlConstant.BASE_URL =   "https://pro-api.swago.cn"
         } else {
             UrlConstant.BASE_URL = baseUrl
         }

+ 2 - 0
baseswago/src/main/java/com/swago/baseswago/baseroom/IRoomInfo.kt

@@ -42,4 +42,6 @@ interface IRoomInfo {
     fun getFanClubLevel():Int//粉丝团等级
 
     fun getLikeNum():String //获取点赞数
+
+    fun getRoomBg():String //获取房间背景图
 }

+ 3 - 3
baseswago/src/main/java/com/swago/baseswago/constant/UrlConstant.kt

@@ -14,9 +14,9 @@ import java.io.File
 object UrlConstant {
 
     var BASE_URL = if (BuildConfig.DEBUG) {
-//            "http:test-api.swago.cn"
+            "http:test-api.swago.cn"
 //            "http:huawei.swago.cn"
-        "https://pro-api.swago.cn"
+//        "https://pro-api.swago.cn"
     } else {
             "https://pro-api.swago.cn"
         }
@@ -82,7 +82,7 @@ object UrlConstant {
     //家族长后台
     val FAMILY_MANAGEMENT = "${BASE_WEB_URL}/agent/guildIncome"
     val WITHDRAW = "${BASE_WEB_URL}/withdrawal" //主播家族长跳这个
-    val WITHDRAW_CUSTOMER = "${BASE_WEB_URL}/withdrawal/customer"//普通用户跳这个
+    val WITHDRAW_CUSTOMER = "${BASE_WEB_URL}/withdrawal/customer"//所有用户都跳跳这个 1.2.0版本改的
 
     var appGameRootPath =
         AppContext.getContext().getExternalFilesDir("")?.absolutePath + File.separator + "gameFile"

+ 9 - 1
baseswago/src/main/java/com/swago/baseswago/inter/RoomApi.kt

@@ -36,7 +36,7 @@ interface RoomApi {
      */
     @FormUrlEncoded
     @POST("/v3/rtc/start/broadcast")
-    suspend fun startLive(@Field("broadcast_type")broadcast_type:Int): RoomModel
+    suspend fun startLive(@Field("broadcast_type")broadcast_type:Int,@Field("broadcast_bg_url")broadcast_bg_url:String): RoomModel
 
 
     /**
@@ -544,4 +544,12 @@ interface RoomApi {
     @POST("/v4/rtc/broadcast/fans/join")
     suspend fun joinFanClub(@Field("room_id") room_id:String):Any
 
+    /**
+     * 开播背景图
+     */
+    @FormUrlEncoded
+    @POST("/v4/rtc/yuying/bg/list")
+    suspend fun getAudioBg(@Field("broadcast_type")broadcast_type:Int):AudioBgModel
+
+
 }

+ 10 - 0
baseswago/src/main/java/com/swago/baseswago/model/live/RoomModel.java

@@ -49,6 +49,8 @@ public class RoomModel {
 
     private String give_val;
 
+    private String broadcast_bg_url;
+
     public String getRtc_token() {
         return rtc_token;
     }
@@ -256,4 +258,12 @@ public class RoomModel {
     public void setGive_val(String give_val) {
         this.give_val = give_val;
     }
+
+    public String getBroadcast_bg_url() {
+        return broadcast_bg_url;
+    }
+
+    public void setBroadcast_bg_url(String broadcast_bg_url) {
+        this.broadcast_bg_url = broadcast_bg_url;
+    }
 }

+ 10 - 0
baseswago/src/main/java/com/swago/baseswago/model/live/audio/AudioBgModel.kt

@@ -0,0 +1,10 @@
+package com.swago.baseswago.model.live.audio
+
+data class AudioBgModel(
+    val list:List<AudioBg>
+)
+
+data class AudioBg(
+    val id:Int,
+    val broadcast_bg_url:String
+)

+ 4 - 4
baseswago/src/main/java/com/swago/baseswago/util/DpPxUtil.kt

@@ -12,7 +12,7 @@ object DpPxUtil {
      */
     fun dip2px(dipValue: Float): Int {
         val scale =
-            Resources.getSystem().displayMetrics.density
+            AppContext.getContext().resources.displayMetrics.density
         return (dipValue * scale + 0.5f).toInt()
     }
 
@@ -21,17 +21,17 @@ object DpPxUtil {
      */
     fun px2dip(pxValue: Float): Int {
         val scale =
-            Resources.getSystem().displayMetrics.density
+            AppContext.getContext().resources.displayMetrics.density
         return (pxValue / scale + 0.5f).toInt()
     }
 
     fun getScreenWidth():Int{
-        val display = Resources.getSystem().displayMetrics
+        val display = AppContext.getContext().resources.displayMetrics
         return display?.widthPixels ?: 0
     }
 
     fun getScreenHeight():Int{
-        val display = Resources.getSystem().displayMetrics
+        val display = AppContext.getContext().resources.displayMetrics
         return display?.heightPixels ?: 0
     }
 }

+ 7 - 0
baseswago/src/main/java/com/swago/glide.kt

@@ -35,6 +35,13 @@ fun ImageView.loadUrl(context: Context,url:String){
         .into(this)
 }
 
+fun ImageView.loadUrlNoPlaceHolder(context: Context,url:String){
+    Glide.with(context)
+        .load(url)
+        .centerCrop()
+        .into(this)
+}
+
 fun ImageView.loadUrl(context: Context,@DrawableRes resourceId: Int){
     Glide.with(context)
         .load(resourceId)

BIN
baseswago/src/main/res/mipmap-xxhdpi/icon_audioing.png


BIN
baseswago/src/main/res/mipmap-xxhdpi/icon_audioing.webp


BIN
baseswago/src/main/res/mipmap-xxhdpi/icon_living.png


BIN
baseswago/src/main/res/mipmap-xxhdpi/icon_living.webp


BIN
baseswago/src/main/res/mipmap-xxhdpi/live_icon_report.png


BIN
baseswago/src/main/res/mipmap-xxhdpi/win_100_prize.webp


BIN
baseswago/src/main/res/mipmap-xxhdpi/win_499_prize.webp


BIN
baseswago/src/main/res/mipmap-xxhdpi/win_500_prize.webp


+ 8 - 11
home/src/main/java/com/swago/home/MineFragment.kt

@@ -31,10 +31,13 @@ class MineFragment : BaseXFragment<FragmentMineBinding>() {
         if (SwagoInfo.isGooglePackage()){
             binding.tvXWithdrawal.visibility = View.GONE
         }else{
-            binding.tvXWithdrawal.visibility = View.VISIBLE
+            if (SwagoInfo.getLanguageCode() == "id"){
+                binding.tvXWithdrawal.visibility = View.VISIBLE
+            }else{
+                binding.tvXWithdrawal.visibility = View.GONE
+            }
         }
 
-
         binding.llFans.setOnClickListener(object: NoDoubleClickListener(){
             override fun onClick() {
                 ARouter.getInstance()
@@ -128,15 +131,9 @@ class MineFragment : BaseXFragment<FragmentMineBinding>() {
         binding.tvXWithdrawal.setOnClickListener(object:NoDoubleClickListener(){
             override fun onClick() {
                 UserInfo.getUserInfo()?.let {
-                    if (it.user_type == 0){
-                        ARouter.getInstance().build(ARouteConstant.Base.webView)
-                            .withString("url", UrlConstant.WITHDRAW_CUSTOMER)
-                            .navigation()
-                    }else{
-                        ARouter.getInstance().build(ARouteConstant.Base.webView)
-                            .withString("url", UrlConstant.WITHDRAW)
-                            .navigation()
-                    }
+                    ARouter.getInstance().build(ARouteConstant.Base.webView)
+                        .withString("url", UrlConstant.WITHDRAW_CUSTOMER)
+                        .navigation()
                 }
             }
         })

+ 4 - 6
home/src/main/java/com/swago/home/innerhome/HomeAdapter.kt

@@ -34,15 +34,13 @@ class HomeAdapter  : BaseQuickAdapter<MomentModel, BaseViewHolder>(R.layout.item
             imageView.loadUrl(itemView.context,item.user_head_img_url)
             if (item.user_broadcast_status == 1){
                 if (item.user_broadcast_type==1){
-                    itemView.findViewById<ImageView>(R.id.ivLive).loadWebp(mContext,R.mipmap.icon_living)
-                    setText(R.id.tvType,"Live")
+                    setImageResource(R.id.ivLive,R.mipmap.icon_living)
                 }else if(item.user_broadcast_type==2){
-                    itemView.findViewById<ImageView>(R.id.ivLive).loadWebp(mContext,R.mipmap.icon_audioing)
-                    setText(R.id.tvType,"Audio")
+                    setImageResource(R.id.ivLive,R.mipmap.icon_audioing)
                 }
-                setVisible(R.id.llLive,true)
+                setVisible(R.id.ivLive,true)
             }else{
-                setVisible(R.id.llLive,false)
+                setVisible(R.id.ivLive,false)
             }
 //            setImageResource(R.id.ivCountry,R.drawable.flag_ac)
         }

+ 5 - 26
home/src/main/res/layout/item_home.xml

@@ -13,36 +13,15 @@
         app:layout_constraintTop_toTopOf="parent"
         app:shapeAppearanceOverlay="@style/fourCornerImageStyle" />
 
-    <LinearLayout
-        android:id="@+id/llLive"
-        android:visibility="gone"
-        android:layout_marginTop="10dp"
+    <ImageView
+        android:id="@+id/ivLive"
         android:layout_marginEnd="8dp"
-        android:gravity="center_vertical"
-        android:paddingStart="5dp"
-        android:paddingEnd="5dp"
-        android:background="@drawable/shape_20000000_41"
+        android:layout_marginTop="8dp"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
-        android:orientation="horizontal"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content">
-
-        <ImageView
-            android:id="@+id/ivLive"
-            android:layout_width="wrap_content"
-            android:layout_height="15dp"/>
-
-        <TextView
-            android:id="@+id/tvType"
-            android:textSize="10dp"
-            android:textColor="#fff"
-            android:text="Live"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"/>
-
+        android:layout_width="18dp"
+        android:layout_height="18dp"/>
 
-    </LinearLayout>
 
     <com.swago.baseswago.cusview.BoldTextView
         android:id="@+id/tvName"

BIN
room/src/main/assets/join_five.svga


BIN
room/src/main/assets/join_four.svga


BIN
room/src/main/assets/join_one.svga


BIN
room/src/main/assets/join_three.svga


BIN
room/src/main/assets/join_two.svga


BIN
room/src/main/assets/win_1001_prize.svga


BIN
room/src/main/assets/win_101_500_prize.svga


BIN
room/src/main/assets/win_501_1000_prize.svga


+ 53 - 0
room/src/main/java/com/swago/room/anchor/AnchorRoomActivity.kt

@@ -29,6 +29,8 @@ import com.swago.baseswago.util.UserInfo
 import com.swago.lib_beauty.FuBeautyManager
 import com.swago.lib_beautyui.BeautyDialogFragment
 import com.swago.baseswago.dialog.ChoiceDialogFragment
+import com.swago.baseswago.model.live.audio.AudioBg
+import com.swago.baseswago.model.live.audio.AudioBgModel
 import com.swago.baseswago.model.live.audio.AudioSeatModel
 import com.swago.baseswago.model.live.audio.IMAudioModel
 import com.swago.baseswago.model.live.pk.ProcessPKModel
@@ -36,6 +38,7 @@ import com.swago.baseswago.model.live.pk.PunishPKModel
 import com.swago.baseswago.model.live.pk.StartPKModel
 import com.swago.baseswago.model.live.pk.StopPKModel
 import com.swago.baseswago.util.DpPxUtil
+import com.swago.loadUrlNoPlaceHolder
 import com.swago.room.R
 import com.swago.room.adapter.GameAdapter
 import com.swago.room.audio.AudioRoomManager
@@ -139,12 +142,21 @@ class AnchorRoomActivity : AbsAnchorActivity<ActivityAnchorRoomBinding, IRoomInf
     //开播类型  0视频房 1语音房
     private var roomType = RoomType.VIDEO
 
+    private val bgList by lazy {
+        ArrayList<AudioBg>()
+    }
+
+    //语音房背景选中第几张
+    private var selectedBgIndex = 0
+    private var selectedBgUrl = ""
+
     override fun initLiveData() {
         PKStateManager.resetData()
         roomVm.init()
         msgVm.init()
         pkVm.init()
         lianMaiVm.init()
+        roomOtherVm.getAudioBg()
         PKStateManager.addPKListener(this)
         AudioRoomManager.addListener(this)
         initPeerAnchorLayoutParams()
@@ -202,6 +214,9 @@ class AnchorRoomActivity : AbsAnchorActivity<ActivityAnchorRoomBinding, IRoomInf
                 mVideoManager.startCapture()
                 binding.viewPager.currentItem = 0
                 binding.ivPrepareCamera.visibility = View.VISIBLE
+                binding.llChangeBg.visibility = View.GONE
+                binding.ivBg.setImageResource(android.R.color.transparent)
+                binding.ivBg.visibility = View.GONE
             }
         })
 
@@ -220,6 +235,8 @@ class AnchorRoomActivity : AbsAnchorActivity<ActivityAnchorRoomBinding, IRoomInf
                 anchorRoomFragment?.setAudioRvState(true)
                 binding.viewPager.currentItem = 1
                 binding.ivPrepareCamera.visibility = View.GONE
+                binding.llChangeBg.visibility = View.VISIBLE
+                binding.ivBg.visibility = View.VISIBLE
             }
         })
 
@@ -228,6 +245,7 @@ class AnchorRoomActivity : AbsAnchorActivity<ActivityAnchorRoomBinding, IRoomInf
                 binding.tvStartLive.isEnabled = false
                 val userModel = UserRoomModel()
                 userModel.roomType = roomType
+                userModel.selectedBgUrl = selectedBgUrl
                 SwagoRoomManager.changeRoom(userModel)
                 if (roomType == RoomType.VIDEO){
                     anchorRoomFragment?.setAudioRvState(false)
@@ -280,6 +298,38 @@ class AnchorRoomActivity : AbsAnchorActivity<ActivityAnchorRoomBinding, IRoomInf
             anchorCloseDialog = AnchorCloseDialog.newInstance(it)
             anchorCloseDialog?.show(supportFragmentManager, "AnchorCloseDialog")
         }
+
+        roomOtherVm.bgDataLiveData.observe(this){
+            bgList.clear()
+            bgList.addAll(it)
+            if (bgList.isNotEmpty()){
+                binding.ivBg.loadUrlNoPlaceHolder(this,bgList[0].broadcast_bg_url)
+                selectedBgUrl = bgList[0].broadcast_bg_url
+            }
+        }
+
+        binding.ivLeftChange.setOnClickListener(object:NoDoubleClickListener(){
+            override fun onClick() {
+                if (selectedBgIndex!=0){
+                    selectedBgIndex-=1
+                    binding.ivBg.loadUrlNoPlaceHolder(this@AnchorRoomActivity,bgList[selectedBgIndex].broadcast_bg_url)
+                    selectedBgUrl = bgList[selectedBgIndex].broadcast_bg_url
+                }
+            }
+        })
+
+        binding.ivRightChange.setOnClickListener(object:NoDoubleClickListener(){
+            override fun onClick() {
+                if (selectedBgIndex!=bgList.size-1){
+                    selectedBgIndex+=1
+                    if (bgList.size>= selectedBgIndex){
+                        binding.ivBg.loadUrlNoPlaceHolder(this@AnchorRoomActivity,bgList[selectedBgIndex].broadcast_bg_url)
+                        selectedBgUrl = bgList[selectedBgIndex].broadcast_bg_url
+                    }
+                }
+            }
+        })
+
     }
 
     fun switchCamera() {
@@ -488,4 +538,7 @@ class AnchorRoomActivity : AbsAnchorActivity<ActivityAnchorRoomBinding, IRoomInf
 
     }
 
+    override fun moveTaskToBack(nonRoot: Boolean): Boolean {
+        return super.moveTaskToBack(true)
+    }
 }

+ 4 - 0
room/src/main/java/com/swago/room/anchor/AnchorRoomFragment.kt

@@ -120,6 +120,10 @@ class AnchorRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
             }
         }
 
+        footerView?.openShareFun = {
+            openShareDialog()
+        }
+
         (iHeader as ComHeaderView).showUserInfo = {
             PersonDataDFragment.newInstance(it, isAnchor = true, inRoom = true,SwagoRoomManager.iRoomInfo?.getRoomId()?:"")
                 .apply {

+ 88 - 17
room/src/main/java/com/swago/room/audio/widget/AudioContainGiftView.kt

@@ -10,6 +10,7 @@ import com.swago.baseswago.baseroom.IRoomActiveListener
 import com.swago.baseswago.baseroom.IRoomInfo
 import com.swago.baseswago.baseroom.SwagoRoomManager
 import com.swago.baseswago.model.live.audio.AudioSendGiftModel
+import com.swago.baseswago.util.DpPxUtil
 import com.swago.room.R
 import com.swago.room.databinding.ViewAudioContainGiftBinding
 
@@ -73,42 +74,42 @@ class AudioContainGiftView : ConstraintLayout, IRoomActiveListener {
                 }
             }
 
-            audioSendGiftModel.receivers.forEachIndexed {position, positionBean ->
-                //创建从屏幕中心弹出的动画view
-                allAudioGiftViewList[position].setViewData(audioSendGiftModel.giftIcon, audioSendGiftModel.giftNum)
-                clMultiAudio.addView(allAudioGiftViewList[position])
+            //如果receivers的size为0  那么就是送给用户的
+            if (audioSendGiftModel.receivers.isEmpty()){
+                allAudioGiftViewList[0].setViewData(audioSendGiftModel.giftIcon, audioSendGiftModel.giftNum)
+                clMultiAudio.addView(allAudioGiftViewList[0])
 
                 //从中间缩放出来
-                val alphaAnim = ObjectAnimator.ofFloat(allAudioGiftViewList[position], "alpha", 1f, 1f)
-                val scaleX = ObjectAnimator.ofFloat(allAudioGiftViewList[position], "scaleX", 0f, 1f)
-                val scaleY = ObjectAnimator.ofFloat(allAudioGiftViewList[position], "scaleY", 0f, 1f)
+                val alphaAnim = ObjectAnimator.ofFloat(allAudioGiftViewList[0], "alpha", 1f, 1f)
+                val scaleX = ObjectAnimator.ofFloat(allAudioGiftViewList[0], "scaleX", 0f, 1f)
+                val scaleY = ObjectAnimator.ofFloat(allAudioGiftViewList[0], "scaleY", 0f, 1f)
                 val scaleFromCenter = AnimatorSet()
                 scaleFromCenter.playTogether(scaleX,scaleY,alphaAnim)
-                scaleFromCenter.setTarget(allAudioGiftViewList[position])
+                scaleFromCenter.setTarget(allAudioGiftViewList[0])
                 scaleX.duration = 300
                 scaleY.duration = 300
 
                 //从中间向其他地方位移缩放
-                val moveX = ObjectAnimator.ofFloat(allAudioGiftViewList[position],"translationX", positionBean.dx)
-                val moveY = ObjectAnimator.ofFloat(allAudioGiftViewList[position],"translationY", positionBean.dy)
-                val scaleXX = ObjectAnimator.ofFloat(allAudioGiftViewList[position],"scaleX",1f,0.2f)
-                val scaleYY = ObjectAnimator.ofFloat(allAudioGiftViewList[position],"scaleY",1f,0.2f)
+                val moveX = ObjectAnimator.ofFloat(allAudioGiftViewList[0],"translationX", DpPxUtil.getScreenWidth()/2f - DpPxUtil.dip2px(100f))
+                val moveY = ObjectAnimator.ofFloat(allAudioGiftViewList[0],"translationY", -DpPxUtil.getScreenHeight()/2f + DpPxUtil.dip2px(40f))
+                val scaleXX = ObjectAnimator.ofFloat(allAudioGiftViewList[0],"scaleX",1f,0.2f)
+                val scaleYY = ObjectAnimator.ofFloat(allAudioGiftViewList[0],"scaleY",1f,0.2f)
                 val moveAndScale = AnimatorSet()
                 moveAndScale.playTogether(moveX,moveY,scaleXX,scaleYY)
                 moveAndScale.duration = 700
 
-                val alphaAnimX = ObjectAnimator.ofFloat(allAudioGiftViewList[position], "alpha", 1f, 0f)
+                val alphaAnimX = ObjectAnimator.ofFloat(allAudioGiftViewList[0], "alpha", 1f, 0f)
                 alphaAnimX.duration = 200
 
                 val moveAnimatorPlus = AnimatorSet()
                 moveAnimatorPlus.play(alphaAnimX).after(moveAndScale)
 
                 //在头像上方消失
-                val alphaAnimEnd = ObjectAnimator.ofFloat(allAudioGiftViewList[position],"alpha",1f,0f)
+                val alphaAnimEnd = ObjectAnimator.ofFloat(allAudioGiftViewList[0],"alpha",1f,0f)
                 alphaAnimEnd.duration = 800
                 //向头像上方移动
-                val upYAnima = ObjectAnimator.ofFloat(allAudioGiftViewList[position],"translationY",positionBean.offSetY)
-                val alphaAnimUp = ObjectAnimator.ofFloat(allAudioGiftViewList[position], "alpha", 0f, 1f)
+                val upYAnima = ObjectAnimator.ofFloat(allAudioGiftViewList[0],"translationY",-DpPxUtil.getScreenHeight()/2f + DpPxUtil.dip2px(40f))
+                val alphaAnimUp = ObjectAnimator.ofFloat(allAudioGiftViewList[0], "alpha", 1f, 1f)
                 val upAnimatorSet = AnimatorSet()
                 upAnimatorSet.playTogether(upYAnima,alphaAnimUp)
                 upAnimatorSet.duration = 200
@@ -122,7 +123,7 @@ class AudioContainGiftView : ConstraintLayout, IRoomActiveListener {
                 animatorSet.play(upAnimatorSet)
                     .after(animationScaleAndMoveSet)
                     .before(alphaAnimEnd)
-                animatorSet.setTarget(allAudioGiftViewList[position])
+                animatorSet.setTarget(allAudioGiftViewList[0])
                 allAnimationSetList.add(animatorSet)
 
                 animatorSet.addListener(object: Animator.AnimatorListener{
@@ -141,6 +142,76 @@ class AudioContainGiftView : ConstraintLayout, IRoomActiveListener {
                     override fun onAnimationRepeat(animation: Animator?) {}
 
                 })
+            }else{
+                audioSendGiftModel.receivers.forEachIndexed {position, positionBean ->
+                    //创建从屏幕中心弹出的动画view
+                    allAudioGiftViewList[position].setViewData(audioSendGiftModel.giftIcon, audioSendGiftModel.giftNum)
+                    clMultiAudio.addView(allAudioGiftViewList[position])
+
+                    //从中间缩放出来
+                    val alphaAnim = ObjectAnimator.ofFloat(allAudioGiftViewList[position], "alpha", 1f, 1f)
+                    val scaleX = ObjectAnimator.ofFloat(allAudioGiftViewList[position], "scaleX", 0f, 1f)
+                    val scaleY = ObjectAnimator.ofFloat(allAudioGiftViewList[position], "scaleY", 0f, 1f)
+                    val scaleFromCenter = AnimatorSet()
+                    scaleFromCenter.playTogether(scaleX,scaleY,alphaAnim)
+                    scaleFromCenter.setTarget(allAudioGiftViewList[position])
+                    scaleX.duration = 300
+                    scaleY.duration = 300
+
+                    //从中间向其他地方位移缩放
+                    val moveX = ObjectAnimator.ofFloat(allAudioGiftViewList[position],"translationX", positionBean.dx)
+                    val moveY = ObjectAnimator.ofFloat(allAudioGiftViewList[position],"translationY", positionBean.dy)
+                    val scaleXX = ObjectAnimator.ofFloat(allAudioGiftViewList[position],"scaleX",1f,0.2f)
+                    val scaleYY = ObjectAnimator.ofFloat(allAudioGiftViewList[position],"scaleY",1f,0.2f)
+                    val moveAndScale = AnimatorSet()
+                    moveAndScale.playTogether(moveX,moveY,scaleXX,scaleYY)
+                    moveAndScale.duration = 700
+
+                    val alphaAnimX = ObjectAnimator.ofFloat(allAudioGiftViewList[position], "alpha", 1f, 0f)
+                    alphaAnimX.duration = 200
+
+                    val moveAnimatorPlus = AnimatorSet()
+                    moveAnimatorPlus.play(alphaAnimX).after(moveAndScale)
+
+                    //在头像上方消失
+                    val alphaAnimEnd = ObjectAnimator.ofFloat(allAudioGiftViewList[position],"alpha",1f,0f)
+                    alphaAnimEnd.duration = 800
+                    //向头像上方移动
+                    val upYAnima = ObjectAnimator.ofFloat(allAudioGiftViewList[position],"translationY",positionBean.offSetY)
+                    val alphaAnimUp = ObjectAnimator.ofFloat(allAudioGiftViewList[position], "alpha", 0f, 1f)
+                    val upAnimatorSet = AnimatorSet()
+                    upAnimatorSet.playTogether(upYAnima,alphaAnimUp)
+                    upAnimatorSet.duration = 200
+
+                    val animationScaleAndMoveSet = AnimatorSet()
+                    animationScaleAndMoveSet.play(moveAnimatorPlus)
+                        .after(scaleFromCenter)
+                        .after(2300)
+
+                    val animatorSet = AnimatorSet()
+                    animatorSet.play(upAnimatorSet)
+                        .after(animationScaleAndMoveSet)
+                        .before(alphaAnimEnd)
+                    animatorSet.setTarget(allAudioGiftViewList[position])
+                    allAnimationSetList.add(animatorSet)
+
+                    animatorSet.addListener(object: Animator.AnimatorListener{
+                        override fun onAnimationStart(animation: Animator?) {
+                        }
+
+                        override fun onAnimationEnd(animation: Animator?) {
+                            currentModel = null
+                            isBusy = false
+                        }
+
+                        override fun onAnimationCancel(animation: Animator?) {
+
+                        }
+
+                        override fun onAnimationRepeat(animation: Animator?) {}
+
+                    })
+                }
             }
             allAnimationSetList.forEach {
                 it.start()

+ 11 - 0
room/src/main/java/com/swago/room/audio/widget/AudioGiftAnimManager.kt

@@ -61,6 +61,7 @@ class AudioGiftAnimManager : IRoomActiveListener {
 
     }
 
+    private var senderId = ""
     private fun initQueue(){
         loopJob = GlobalScope.launch(Dispatchers.Main,start = CoroutineStart.LAZY) {
             var isLoop = true
@@ -74,10 +75,19 @@ class AudioGiftAnimManager : IRoomActiveListener {
                         for (index in 0 until audioGiftViewList.size){
                             if (!audioGiftViewList[index].isBusy){
                                 //有空闲轨道
+                                senderId = imGiftModel.senderId
                                 LogUtil.d("giftDanDaoViewList","ddddd-$index")
                                 audioGiftViewList[index].playGiftAnim((imGiftModel))
                                 isSetData = true
                                 break
+                            }else{
+                                //如果没有空闲轨道但是呢下一个数据跟正在播放的又是同一个
+                                if (imGiftModel.senderId == senderId){
+                                    LogUtil.d("giftDanDaoViewList","ddddd-$index")
+                                    audioGiftViewList[index].playGiftAnim((imGiftModel))
+                                    isSetData = true
+                                    break
+                                }
                             }
                         }
                     }
@@ -94,6 +104,7 @@ class AudioGiftAnimManager : IRoomActiveListener {
                 }else{
                     isLoop = false
                     loopJob= null
+                    senderId = ""
                 }
             }
         }

+ 51 - 33
room/src/main/java/com/swago/room/base/BaseComFragment.kt

@@ -32,6 +32,7 @@ import com.swago.baseswago.constant.UrlConstant
 import com.swago.baseswago.cusview.MediumTextView
 import com.swago.baseswago.cusview.SwagoImageView
 import com.swago.baseswago.dialog.ChoiceDialogFragment
+import com.swago.baseswago.dialog.ReportDialog
 import com.swago.baseswago.fragment.BaseXFragment
 import com.swago.baseswago.im.IRoomChat
 import com.swago.baseswago.model.im.GamePrize
@@ -60,6 +61,7 @@ import com.swago.room.dialog.JoinFanClubDialog
 import com.swago.room.dialog.LevelUpDialog
 import com.swago.room.dialog.MessageListDialog
 import com.swago.room.dialog.SendMsgDialog
+import com.swago.room.dialog.ShareDialog
 import com.swago.room.enum.RoomType
 import com.swago.room.game.GamePlayDialog
 import com.swago.room.gift.GiftDialog
@@ -320,12 +322,12 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
         }
     }
 
-    var listener = KeyboardUtils.OnSoftInputChangedListener {
-        if (it == 0) {
-            setChatRvPop(false, it)
-        } else {
-            setChatRvPop(true, it)
-        }
+    private var isPopUp = false
+    private var keyboardHeight = 0
+    private var listener = KeyboardUtils.OnSoftInputChangedListener {
+        isPopUp = it != 0
+        keyboardHeight = it
+        setChatRvPop()
     }
 
     private fun setHeaderViewPosition() {
@@ -420,6 +422,13 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
             }
         }
 
+        (iHeader as ComHeaderView).reportAnchorFun = {
+            SwagoRoomManager.iRoomInfo?.let {
+                ReportDialog.newInstance(it.getAnchorCode())
+                    .show(childFragmentManager, "ReportDialog")
+            }
+        }
+
         (iHeader as ComHeaderView).openAudienceListDialog = {
             AudienceListDialog.newInstance().show(childFragmentManager, "AudienceListDialog")
         }
@@ -567,6 +576,10 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
         }
     }
 
+    fun openShareDialog() {
+        ShareDialog.newInstance().show(childFragmentManager,"ShareDialog")
+    }
+
     private fun initMaiPosition() {
         allPositionXYList.clear()
         val centerX = DpPxUtil.getScreenWidth() / 2
@@ -625,37 +638,32 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
     }
 
 
-    private var keyboardUpRvLayoutParams: ViewGroup.LayoutParams? = null
-    private var keyboardCloseRvLayoutParams: ViewGroup.LayoutParams? = null
-    private fun setChatRvPop(isPopUp: Boolean, height: Int) {
-        if (isPopUp) {
-            if (keyboardUpRvLayoutParams == null) {
-                keyboardUpRvLayoutParams =
-                    ConstraintLayout.LayoutParams(0, DpPxUtil.dip2px(170f)).apply {
-                        bottomToBottom = R.id.cl
-                        startToStart = R.id.cl
-                        endToEnd = R.id.cl
-                        marginStart = DpPxUtil.dip2px(10f)
-                        marginEnd = DpPxUtil.dip2px(10f)
-                        bottomMargin = height + DpPxUtil.dip2px(55f)
-                    }
-            }
+    private val keyboardUpRvLayoutParams by lazy {
+        ConstraintLayout.LayoutParams(0, DpPxUtil.dip2px(170f)).apply {
+            bottomToBottom = R.id.cl
+            startToStart = R.id.cl
+            endToEnd = R.id.cl
+            marginStart = DpPxUtil.dip2px(10f)
+            marginEnd = DpPxUtil.dip2px(10f)
+            bottomMargin = DpPxUtil.dip2px(290f) + DpPxUtil.dip2px(55f)
+        }
+    }
+    private val keyboardCloseRvLayoutParams by lazy {
+        ConstraintLayout.LayoutParams(0, DpPxUtil.dip2px(170f)).apply {
+            bottomToBottom = R.id.cl
+            startToStart = R.id.cl
+            endToEnd = R.id.cl
+            marginStart = DpPxUtil.dip2px(10f)
+            marginEnd = DpPxUtil.dip2px(10f)
+            bottomMargin = DpPxUtil.dip2px(70f)
+        }
+    }
+    private fun setChatRvPop() {
+        if (isPopUp || gameIsOpen) {
             binding.rv.layoutParams = keyboardUpRvLayoutParams
         } else {
-            if (keyboardCloseRvLayoutParams == null) {
-                keyboardCloseRvLayoutParams =
-                    ConstraintLayout.LayoutParams(0, DpPxUtil.dip2px(170f)).apply {
-                        bottomToBottom = R.id.cl
-                        startToStart = R.id.cl
-                        endToEnd = R.id.cl
-                        marginStart = DpPxUtil.dip2px(10f)
-                        marginEnd = DpPxUtil.dip2px(10f)
-                        bottomMargin = DpPxUtil.dip2px(70f)
-                    }
-            }
             binding.rv.layoutParams = keyboardCloseRvLayoutParams
         }
-
     }
 
 
@@ -685,8 +693,10 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
         msgListDialog?.show(childFragmentManager, "MessageListDialog")
     }
 
+    private var gameIsOpen = false
     fun openGameDialog() {
         SwagoRoomManager.iRoomInfo?.let {
+            gameIsOpen = true
             val download = checkGameVersion(
                 it.getGameType().toString(),
                 it.getGameDownLoadUrl(),
@@ -698,7 +708,15 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
             } else {
                 gameDialog = GamePlayDialog.newInstance(it.getGameUrl(),it.getIsFullGame())
             }
+            gameDialog?.dialogDisFun = {
+                gameIsOpen = false
+                setChatRvPop()
+            }
+            gameDialog?.openMessageFun = {
+                openSendMessageDialog()
+            }
             gameDialog?.show(childFragmentManager, "GamePlayDialog")
+            setChatRvPop()
         }
     }
 

+ 6 - 0
room/src/main/java/com/swago/room/bean/UserRoomModel.kt

@@ -21,6 +21,8 @@ class UserRoomModel :  IRoomInfo{
 
     var roomType = RoomType.VIDEO
 
+    var selectedBgUrl = ""
+
     override fun getAnchorName(): String {
         return roomModel?.user_name?:""
     }
@@ -165,4 +167,8 @@ class UserRoomModel :  IRoomInfo{
     override fun getLikeNum(): String {
         return roomModel?.give_val?:"0"
     }
+
+    override fun getRoomBg(): String {
+        return roomModel?.broadcast_bg_url?:""
+    }
 }

+ 14 - 19
room/src/main/java/com/swago/room/game/GamePlayDialog.kt

@@ -59,6 +59,8 @@ class GamePlayDialog : BaseXDFragment<DialogGamePlayBinding>(), IRoomActiveListe
 
     private var isFullScreen = false
 
+    var dialogDisFun: (() -> Unit)? = null
+    var openMessageFun:(()->Unit)? = null
     companion object {
         private const val URL = "url"
         private const val FULL_GAME = "fullGame"
@@ -91,11 +93,19 @@ class GamePlayDialog : BaseXDFragment<DialogGamePlayBinding>(), IRoomActiveListe
 
                 webView = WebView(activity)
 
+                val imageViewLayoutParams = ConstraintLayout.LayoutParams(DpPxUtil.dip2px(40f),DpPxUtil.dip2px(40f))
+                imageViewLayoutParams.bottomToBottom = R.id.cl
+                imageViewLayoutParams.startToStart = R.id.cl
+                imageViewLayoutParams.marginStart = DpPxUtil.dip2px(10f)
+                imageViewLayoutParams.bottomMargin = DpPxUtil.dip2px(310f)
                 val imageView = ImageView(activity)
-                imageView.setImageResource(R.mipmap.icon_game_close)
+                imageView.setBackgroundResource(R.drawable.shape_80000000_20)
+                imageView.setImageResource(R.mipmap.live_chat)
+                imageView.layoutParams = imageViewLayoutParams
+
                 imageView.setOnClickListener(object:NoDoubleClickListener(){
                     override fun onClick() {
-                        dismissAllowingStateLoss()
+                        openMessageFun?.invoke()
                     }
                 })
 
@@ -151,36 +161,20 @@ class GamePlayDialog : BaseXDFragment<DialogGamePlayBinding>(), IRoomActiveListe
                     params.width = DpPxUtil.getScreenWidth()
                     params.bottomToBottom = R.id.cl
 
-
-
                     if (isFullScreen){
                         params.height = DpPxUtil.getScreenHeight()
-                        val gameCloseParams = ConstraintLayout.LayoutParams(WRAP_CONTENT,WRAP_CONTENT)
-                        gameCloseParams.endToEnd = R.id.cl
-                        gameCloseParams.topToTop = R.id.cl
-                        gameCloseParams.marginEnd = DpPxUtil.dip2px(8f)
-                        gameCloseParams.topMargin = DpPxUtil.dip2px(45f)
-                        imageView.layoutParams = gameCloseParams
                     }else{
                         params.height = (params.width * 276 / 360f).toInt()
-
-                        val gameCloseParams = ConstraintLayout.LayoutParams(WRAP_CONTENT,WRAP_CONTENT)
-                        gameCloseParams.endToEnd = R.id.cl
-                        gameCloseParams.bottomToBottom = R.id.cl
-                        gameCloseParams.marginEnd = DpPxUtil.dip2px(8f)
-                        gameCloseParams.bottomMargin = params.height + DpPxUtil.dip2px(8f)
-                        imageView.layoutParams = gameCloseParams
                     }
                     this.layoutParams = params
                     binding.cl.addView(this)
-//                    binding.cl.addView(imageView)
+                    binding.cl.addView(imageView)
                 }
 
                 webView?.loadUrl(url)
             }
         }
 
-
         imGroupNewMsgListener.handleMsgType<CusNewMsgBean<GameData>>(
             ImConstant.fruit_game
         ) {
@@ -329,6 +323,7 @@ class GamePlayDialog : BaseXDFragment<DialogGamePlayBinding>(), IRoomActiveListe
         } catch (e: Exception) {
             e.printStackTrace()
         }
+        dialogDisFun?.invoke()
         super.onDestroyView()
     }
 

+ 40 - 18
room/src/main/java/com/swago/room/gift/GiftDialog.kt

@@ -113,6 +113,8 @@ class GiftDialog : BaseXDFragment<DialogGiftBinding>() {
     override fun initOther() {
         arguments?.let {
             payVm.getCoins()
+            receiveId = it.getString("receiveId", "")
+            receiveName = it.getString("receiveName", "")
             SwagoRoomManager.iRoomInfo?.let { iRoomInfo ->
                 if (iRoomInfo.getRoomType() == 1) {
                     binding.tvSender.visibility = View.VISIBLE
@@ -122,7 +124,6 @@ class GiftDialog : BaseXDFragment<DialogGiftBinding>() {
                 } else if (iRoomInfo.getRoomType() == 2) {
                     //获取语音房麦位用户列表
                     binding.tvSender.visibility = View.GONE
-                    binding.rvAudioUser.visibility = View.VISIBLE
                     binding.rvAudioUser.layoutManager = LinearLayoutManager(activity,RecyclerView.HORIZONTAL,false)
                     binding.rvAudioUser.adapter = adapter
                     adapter.setOnItemClickListener { _, view, position ->
@@ -138,9 +139,6 @@ class GiftDialog : BaseXDFragment<DialogGiftBinding>() {
                     json = SpUtil.readString("audioGiftList")
                 }
             }
-            receiveId = it.getString("receiveId", "")
-            receiveName = it.getString("receiveName", "")
-
             if (json.isNullOrEmpty()) {
 
             } else {
@@ -553,20 +551,40 @@ class GiftDialog : BaseXDFragment<DialogGiftBinding>() {
                 }
             } else if (iRoomInfo.getRoomType() == 2) {
                 //语音房送礼
-                if (selectedUserList.isNotEmpty()) {
-                    giftVm.sendAudioGift(
-                        iRoomInfo.getRoomId(),
-                        giftModel.id,
-                        giftBatch,
-                        selectedUserList,
-                        giftNum
-                    )
+                if (binding.rvAudioUser.visibility == View.VISIBLE){
+                    if (selectedUserList.isNotEmpty()) {
+                        giftVm.sendAudioGift(
+                            iRoomInfo.getRoomId(),
+                            giftModel.id,
+                            giftBatch,
+                            selectedUserList,
+                            giftNum
+                        )
+                    }else{
+                        Toast.makeText(
+                            AppContext.getContext(),
+                            AppContext.getContext().resources.getString(R.string.no_send_people),
+                            Toast.LENGTH_SHORT
+                        ).show()
+                    }
                 }else{
-                    Toast.makeText(
-                        AppContext.getContext(),
-                        AppContext.getContext().resources.getString(R.string.no_send_people),
-                        Toast.LENGTH_SHORT
-                    ).show()
+                    UserInfo.getUserInfo()?.let {
+                        if (it.id != receiveId && receiveId.isNotEmpty()){
+                            giftVm.sendAudioGift(
+                                iRoomInfo.getRoomId(),
+                                giftModel.id,
+                                giftBatch,
+                                listOf(receiveId),
+                                giftNum
+                            )
+                        }else{
+                            Toast.makeText(
+                                AppContext.getContext(),
+                                AppContext.getContext().resources.getString(R.string.no_send_people),
+                                Toast.LENGTH_SHORT
+                            ).show()
+                        }
+                    }
                 }
             }
         }
@@ -673,7 +691,11 @@ class GiftDialog : BaseXDFragment<DialogGiftBinding>() {
         }
 
         giftVm.maiUserListLiveData.observe(this) { data ->
-            if(data.isNotEmpty()){
+            //如果麦位列表上没有数据 那么语音房的送礼弹窗肯定是送给用户的
+            if(data.isEmpty()){
+               binding.rvAudioUser.visibility = View.GONE
+            }else{
+                binding.rvAudioUser.visibility = View.VISIBLE
                 data[0].selected = true
                 selectedUserList.add(data[0].user_id)
             }

+ 89 - 12
room/src/main/java/com/swago/room/giftdandao/GiftDanDaoView.kt

@@ -15,12 +15,14 @@ import android.view.animation.DecelerateInterpolator
 import android.widget.FrameLayout
 import android.widget.ImageView
 import android.widget.Toast
+import androidx.constraintlayout.widget.ConstraintLayout
 import com.bumptech.glide.Glide
 import com.opensource.svgaplayer.SVGADrawable
 import com.opensource.svgaplayer.SVGAParser
 import com.opensource.svgaplayer.SVGAVideoEntity
 import com.swago.baseswago.model.live.gift.IMGiftModel
 import com.swago.baseswago.util.AppContext
+import com.swago.baseswago.util.DpPxUtil
 import com.swago.baseswago.util.LogUtil
 import com.swago.baseswago.util.UserInfo
 import com.swago.room.R
@@ -36,6 +38,7 @@ class GiftDanDaoView : FrameLayout {
     var isBusy = false
     private var binding: ViewItemGiftBinding? = null
     private var svgParser: SVGAParser? = null
+    private var svgParser2: SVGAParser? = null
 
     private var giftCount = 0
 
@@ -61,6 +64,7 @@ class GiftDanDaoView : FrameLayout {
         vibrator = context.getSystemService(Service.VIBRATOR_SERVICE) as Vibrator
         binding = ViewItemGiftBinding.inflate(LayoutInflater.from(context), this, true)
         svgParser = SVGAParser(context)
+        svgParser2 = SVGAParser(context)
         for (i in 0..5){
             val imageView = ImageView(context)
             imageViewData.add(imageView)
@@ -164,31 +168,77 @@ class GiftDanDaoView : FrameLayout {
 
             clItemGift.removeCallbacks(showRunnable)
             clItemGift.postDelayed(showRunnable, 3000)
-
             if (imGiftModel.multiple != 0) {
                 when (imGiftModel.multiple) {
-                    in 1..100 -> {
-                        iv.setImageResource(R.mipmap.win_100_prize)
+                    in 1..50 -> {
+                        iv.visibility = View.VISIBLE
+                        tvWinPrize2.visibility = View.GONE
+                        svgaWinPrize.visibility = View.GONE
+                        val layoutParams = tvWinPrize.layoutParams as ConstraintLayout.LayoutParams
+                        layoutParams.marginStart = DpPxUtil.dip2px(10f)
+                        tvWinPrize.layoutParams = layoutParams
+                        iv.setImageResource(R.mipmap.win_1_50_prize)
+                        clWinPrize.visibility = View.VISIBLE
+                        tvWinPrize.text =
+                            AppContext.getContext().resources.getString(R.string.win_num_prize)
+                                .format(imGiftModel.multiple)
+                    }
+
+                    in 51..100 -> {
+                        iv.visibility = View.VISIBLE
+                        tvWinPrize2.visibility = View.GONE
+                        svgaWinPrize.visibility = View.GONE
+                        val layoutParams = tvWinPrize.layoutParams as ConstraintLayout.LayoutParams
+                        layoutParams.marginStart = DpPxUtil.dip2px(26f)
+                        tvWinPrize.layoutParams = layoutParams
+                        iv.setImageResource(R.mipmap.win_51_100_prize)
+                        clWinPrize.visibility = View.VISIBLE
+                        tvWinPrize.text =
+                            AppContext.getContext().resources.getString(R.string.win_num_prize)
+                                .format(imGiftModel.multiple)
                     }
 
-                    in 100..499 -> {
-                        iv.setImageResource(R.mipmap.win_499_prize)
+                    in 100..500 -> {
+                        iv.visibility = View.GONE
+                        svgaWinPrize.visibility = View.VISIBLE
+                        playSvg2("win_101_500_prize.svga")
+                        clWinPrize.visibility = View.GONE
+                        tvWinPrize2.visibility = View.VISIBLE
+                        tvWinPrize2.text =
+                            AppContext.getContext().resources.getString(R.string.win_num_prize)
+                                .format(imGiftModel.multiple)
                     }
 
-                    in 500..10000 -> {
+                    in 501..1000 -> {
+                        iv.visibility = View.GONE
+                        svgaWinPrize.visibility = View.VISIBLE
                         UserInfo.getUserInfo()?.let {  userInfoModel ->
                             if (userInfoModel.id == imGiftModel.senderId){
                                 vibrator?.vibrate(2500)
                             }
                         }
-                        iv.setImageResource(R.mipmap.win_500_prize)
-
+                        playSvg2("win_501_1000_prize.svga")
+                        tvWinPrize2.visibility = View.VISIBLE
+                        tvWinPrize2.text =
+                            AppContext.getContext().resources.getString(R.string.win_num_prize)
+                                .format(imGiftModel.multiple)
+                    }
+                    else -> {
+                        iv.visibility = View.GONE
+                        svgaWinPrize.visibility = View.VISIBLE
+                        UserInfo.getUserInfo()?.let {  userInfoModel ->
+                            if (userInfoModel.id == imGiftModel.senderId){
+                                vibrator?.vibrate(2500)
+                            }
+                        }
+                        playSvg2("win_1001_prize.svga")
+                        tvWinPrize2.visibility = View.VISIBLE
+                        tvWinPrize2.text =
+                            AppContext.getContext().resources.getString(R.string.win_num_prize)
+                                .format(imGiftModel.multiple)
                     }
                 }
-                clWinPrize.visibility = View.VISIBLE
-                tvWinPrize.text =
-                    AppContext.getContext().resources.getString(R.string.win_num_prize)
-                        .format(imGiftModel.multiple)
+
                 clWinPrize.removeCallbacks(winPrizeRunnable)
                 clWinPrize.postDelayed(winPrizeRunnable, 1500)
             }
@@ -355,6 +405,30 @@ class GiftDanDaoView : FrameLayout {
         }
     }
 
+    private fun playSvg2(path:String){
+        svgParser2?.let {
+            it.decodeFromAssets(path,object:SVGAParser.ParseCompletion{
+                override fun onComplete(videoItem: SVGAVideoEntity) {
+                    binding?.apply {
+                        val drawable = SVGADrawable(videoItem)
+                        svgaWinPrize.setImageDrawable(drawable)
+                        svgaWinPrize.loops = 99999
+                        svgaWinPrize.startAnimation()
+                    }
+                }
+
+                override fun onError() {
+                    Toast.makeText(AppContext.getContext(), "播放异常", Toast.LENGTH_SHORT).show()
+                }
+            },object:SVGAParser.PlayCallback{
+                override fun onPlay(file: List<File>) {
+                }
+
+            })
+
+        }
+    }
+
 
     fun clear() {
         vibrator?.cancel()
@@ -365,6 +439,9 @@ class GiftDanDaoView : FrameLayout {
             if (svgaImageView.isAnimating){
                 svgaImageView.stopAnimation()
             }
+            if (svgaWinPrize.isAnimating){
+                svgaWinPrize.stopAnimation()
+            }
             clWinPrize.visibility = View.INVISIBLE
             clItemGift.visibility = View.INVISIBLE
             clWinPrize.removeCallbacks(winPrizeRunnable)

+ 110 - 97
room/src/main/java/com/swago/room/manager/JoinRoomManager.kt

@@ -4,62 +4,72 @@ import android.animation.Animator
 import android.view.ViewStub
 import android.animation.AnimatorSet
 import android.animation.ObjectAnimator
-import android.util.Log
 import android.view.View
 import android.view.animation.AccelerateInterpolator
 import android.view.animation.DecelerateInterpolator
+import android.widget.ImageView
+import android.widget.LinearLayout
 import android.widget.TextView
+import android.widget.Toast
 import androidx.constraintlayout.widget.ConstraintLayout
 import androidx.fragment.app.FragmentActivity
-import com.airbnb.lottie.LottieAnimationView
-import com.airbnb.lottie.LottieComposition
-import com.airbnb.lottie.LottieCompositionFactory
+import com.opensource.svgaplayer.SVGADrawable
+import com.opensource.svgaplayer.SVGAImageView
+import com.opensource.svgaplayer.SVGAParser
+import com.opensource.svgaplayer.SVGAVideoEntity
 import com.swago.baseswago.baseroom.IRoomActiveListener
 import com.swago.baseswago.baseroom.IRoomInfo
 import com.swago.baseswago.baseroom.SwagoRoomManager
-import com.swago.baseswago.constant.UrlConstant
+import com.swago.baseswago.cusview.SwagoLevelView
 import com.swago.baseswago.model.im.UserJoinRoomBean
+import com.swago.baseswago.util.AppContext
 import com.swago.baseswago.util.DpPxUtil
-import com.swago.baseswago.util.FileUtil
 import com.swago.baseswago.util.SwagoInfo
 import com.swago.loadUrl
 import com.swago.room.R
 import de.hdodenhof.circleimageview.CircleImageView
 import java.io.File
-import java.io.FileInputStream
-import java.io.FileNotFoundException
 import java.util.LinkedList
-import java.util.zip.ZipInputStream
 
 class JoinRoomManager : IRoomActiveListener {
 
     private var mActivity: FragmentActivity? = null
     private var isRunning = false
-    private var lottieView: LottieAnimationView? = null
+    private var svgaImageView: SVGAImageView? = null
     private var tvName: TextView? = null
+    private var tvNameOne: TextView? = null
+    private var ivLevelLogo: ImageView? = null
+    private var swagoLevel: SwagoLevelView? = null
+    private var swagoLevelOne: SwagoLevelView? = null
     private var ivAvatar: CircleImageView? = null
     private var joinRoomRootView: ConstraintLayout? = null
     private var clBg: ConstraintLayout? = null
+    private var clTwo: ConstraintLayout? = null
+    private var clOne: LinearLayout? = null
     private var animationSet: AnimatorSet? = null
-    private var lottieMoto: LottieComposition? = null
-    private var lottieCar: LottieComposition? = null
-    private var lottieBoat: LottieComposition? = null
-    private var lottieRider: LottieComposition? = null
     private val waitingTime = 1000L
 
+    private var svgParser: SVGAParser? = null
+
     private var joinRoomList = LinkedList<UserJoinRoomBean>()
     private var canAddData = true
 
     fun initViewStub(viewStub: ViewStub?, activity: FragmentActivity?) {
         mActivity = activity
+        svgParser = SVGAParser(mActivity)
         viewStub?.apply {
             val view = this.inflate()
-            lottieView = view.findViewById(R.id.lottieView)
+            svgaImageView = view.findViewById(R.id.svgaImageView)
             clBg = view.findViewById(R.id.clBg)
+            clTwo = view.findViewById(R.id.clTwo)
+            clOne = view.findViewById(R.id.clOne)
             tvName = view.findViewById(R.id.tvName)
+            tvNameOne = view.findViewById(R.id.tvNameOne)
             ivAvatar = view.findViewById(R.id.ivAvatar)
+            ivLevelLogo = view.findViewById(R.id.ivLevelLogo)
+            swagoLevel = view.findViewById(R.id.swagoLevel)
+            swagoLevelOne = view.findViewById(R.id.swagoLevelOne)
             joinRoomRootView = view.findViewById(R.id.rootView)
-            initLottieComposition()
             initViewAnimation()
             loopStart()
             SwagoRoomManager.addListener(this@JoinRoomManager)
@@ -88,56 +98,85 @@ class JoinRoomManager : IRoomActiveListener {
 
     private fun playJoinRoomAnimation(userJoinRoomBean: UserJoinRoomBean) {
         isRunning = true
-        joinRoomRootView?.visibility = View.VISIBLE
-        mActivity?.let { ivAvatar?.loadUrl(it, userJoinRoomBean.userAvatar) }
-        tvName?.text = userJoinRoomBean.senderName
-        if (userJoinRoomBean.isBenefit == 1) {
-            if (lottieRider == null) {
-                isRunning = false
-            } else {
-                lottieRider?.let {
-                    clBg?.setBackgroundResource(R.drawable.shape_e87230_ddb558_all_20)
-                    lottieView?.setComposition(it)
-                    lottieView?.playAnimation()
-                    animationSet?.start()
-                }
+        ivLevelLogo?.visibility = View.GONE
+        clBg?.setBackgroundResource(android.R.color.transparent)
+        when(userJoinRoomBean.senderLevel){
+            in 0..9 ->{
+                clOne?.visibility = View.VISIBLE
+                clTwo?.visibility = View.GONE
+                tvNameOne?.text = userJoinRoomBean.senderName
+                swagoLevelOne?.setUserLevel(userJoinRoomBean.senderLevel)
+                animationSet?.start()
+                joinRoomRootView?.visibility = View.VISIBLE
             }
-        } else {
-            if (userJoinRoomBean.senderLevel in 20..39) {
-                if (lottieMoto == null) {
-                    isRunning = false
-                } else {
-                    lottieMoto?.let {
-                        clBg?.setBackgroundResource(R.drawable.shape_6720d1_180c72_20)
-                        lottieView?.setComposition(it)
-                        lottieView?.playAnimation()
-                        animationSet?.start()
-                    }
-                }
+            in 10..14 -> {
+                clOne?.visibility = View.GONE
+                clTwo?.visibility = View.VISIBLE
+                ivLevelLogo?.visibility = View.VISIBLE
+                ivLevelLogo?.setImageResource(R.mipmap.join_ten_logo)
+                mActivity?.let { ivAvatar?.loadUrl(it, userJoinRoomBean.userAvatar) }
+                tvName?.text = userJoinRoomBean.senderName
+                swagoLevel?.setUserLevel(userJoinRoomBean.senderLevel)
+                clBg?.setBackgroundResource(R.mipmap.join_ten_fourteen)
+                animationSet?.start()
+                joinRoomRootView?.visibility = View.VISIBLE
             }
-            if (userJoinRoomBean.senderLevel in 40..59) {
-                if (lottieCar == null) {
-                    isRunning = false
-                } else {
-                    lottieCar?.let {
-                        clBg?.setBackgroundResource(R.drawable.shape_f8614b_8c2922_20)
-                        lottieView?.setComposition(it)
-                        lottieView?.playAnimation()
-                        animationSet?.start()
-                    }
-                }
+            in 15..19 -> {
+                clOne?.visibility = View.GONE
+                clTwo?.visibility = View.VISIBLE
+                ivLevelLogo?.visibility = View.VISIBLE
+                ivLevelLogo?.setImageResource(R.mipmap.join_fifteen_logo)
+                mActivity?.let { ivAvatar?.loadUrl(it, userJoinRoomBean.userAvatar) }
+                tvName?.text = userJoinRoomBean.senderName
+                swagoLevel?.setUserLevel(userJoinRoomBean.senderLevel)
+                clBg?.setBackgroundResource(R.mipmap.join_fifteen_nineteen)
+                animationSet?.start()
+                joinRoomRootView?.visibility = View.VISIBLE
             }
+            else -> {
+                clOne?.visibility = View.GONE
+                clTwo?.visibility = View.VISIBLE
+                mActivity?.let { ivAvatar?.loadUrl(it, userJoinRoomBean.userAvatar) }
+                tvName?.text = userJoinRoomBean.senderName
+                swagoLevel?.setUserLevel(userJoinRoomBean.senderLevel)
 
-            if (userJoinRoomBean.senderLevel >= 60) {
-                if (lottieBoat == null) {
-                    isRunning = false
-                } else {
-                    lottieBoat?.let {
-                        clBg?.setBackgroundResource(R.drawable.shape_434343_000000_20)
-                        lottieView?.setComposition(it)
-                        lottieView?.playAnimation()
-                        animationSet?.start()
+                var path = ""
+                svgParser?.let {
+                    if (userJoinRoomBean.isBenefit == 1) {
+                        path = "join_four.svga"
+                    } else {
+                        if (userJoinRoomBean.senderLevel in 20..39) {
+                            path = "join_five.svga"
+                        }
+                        if (userJoinRoomBean.senderLevel in 40..59) {
+                            path = "join_three.svga"
+                        }
+                        if (userJoinRoomBean.senderLevel in 60..79) {
+                            path = "join_two.svga"
+                        }
+                        if (userJoinRoomBean.senderLevel >= 80) {
+                            path = "join_one.svga"
+                        }
                     }
+                    it.decodeFromAssets(path, object : SVGAParser.ParseCompletion {
+                        override fun onComplete(videoItem: SVGAVideoEntity) {
+                            val drawable = SVGADrawable(videoItem)
+                            svgaImageView?.setImageDrawable(drawable)
+                            svgaImageView?.loops = 99999
+                            animationSet?.start()
+                            svgaImageView?.startAnimation()
+                            joinRoomRootView?.visibility = View.VISIBLE
+                        }
+
+                        override fun onError() {
+                            Toast.makeText(AppContext.getContext(), "播放异常", Toast.LENGTH_SHORT).show()
+                        }
+                    }, object : SVGAParser.PlayCallback {
+                        override fun onPlay(file: List<File>) {
+                        }
+
+                    })
+
                 }
             }
         }
@@ -175,6 +214,11 @@ class JoinRoomManager : IRoomActiveListener {
                     }
 
                     override fun onAnimationEnd(p0: Animator?) {
+                        svgaImageView?.apply {
+                            if (isAnimating){
+                                stopAnimation()
+                            }
+                        }
                         joinRoomRootView?.visibility = View.INVISIBLE
                         isRunning = false
                     }
@@ -189,42 +233,6 @@ class JoinRoomManager : IRoomActiveListener {
         }
     }
 
-    private fun initLottieComposition() {
-        try {
-            LottieCompositionFactory.fromZipStream(
-                ZipInputStream(FileInputStream(UrlConstant.lottieResourcePath + File.separator + "lottiemoto.zip")),
-                "lottiemoto"
-            ).addListener {
-                lottieMoto = it
-            }
-
-            LottieCompositionFactory.fromZipStream(
-                ZipInputStream(FileInputStream(UrlConstant.lottieResourcePath + File.separator + "lottiecar.zip")),
-                "lottiecar"
-            ).addListener {
-                lottieCar = it
-            }
-
-            LottieCompositionFactory.fromZipStream(
-                ZipInputStream(FileInputStream(UrlConstant.lottieResourcePath + File.separator + "lottieboat.zip")),
-                "lottieboat"
-            ).addListener {
-                lottieBoat = it
-            }
-
-            LottieCompositionFactory.fromZipStream(
-                ZipInputStream(FileInputStream(UrlConstant.lottieResourcePath + File.separator + "lottierider.zip")),
-                "lottierider"
-            ).addListener {
-                lottieRider = it
-            }
-        } catch (e: FileNotFoundException) {
-            FileUtil.deleteFile(File(UrlConstant.lottieResourcePath))
-            e.printStackTrace()
-        }
-    }
-
-
     fun addJoinRoomData(joinRoomBean: UserJoinRoomBean) {
         joinRoomList.add(joinRoomBean)
     }
@@ -236,6 +244,11 @@ class JoinRoomManager : IRoomActiveListener {
     }
 
     private fun clearJoinRoomAnimation() {
+        svgaImageView?.apply {
+            if (isAnimating){
+                stopAnimation()
+            }
+        }
         animationSet?.cancel()
         joinRoomList.clear()
         joinRoomRootView?.visibility = View.INVISIBLE

+ 5 - 0
room/src/main/java/com/swago/room/user/UserRoomActivity.kt

@@ -35,6 +35,7 @@ import com.swago.baseswago.model.live.pk.PunishPKModel
 import com.swago.baseswago.model.live.pk.StartPKModel
 import com.swago.baseswago.model.live.pk.StopPKModel
 import com.swago.baseswago.util.*
+import com.swago.loadUrlNoPlaceHolder
 import com.swago.room.R
 import com.swago.room.audio.AudioRoomManager
 import com.swago.room.audio.IAudioRoomListener
@@ -316,6 +317,7 @@ class UserRoomActivity : AbsUserActivity<ActivityAbsRoomUserBinding, UserRoomMod
             }
             RoomType.AUDIO.type -> {
                 ivAudioBg?.visibility = View.VISIBLE
+                ivAudioBg?.loadUrlNoPlaceHolder(this@UserRoomActivity,iRoomInfo.getRoomBg())
                 UserInfo.getUserInfo()?.let { userInfoModel ->
                     lifecycleScope.launch(Dispatchers.Main) {
                         AgoraManager.joinChannel(
@@ -527,4 +529,7 @@ class UserRoomActivity : AbsUserActivity<ActivityAbsRoomUserBinding, UserRoomMod
 
     }
 
+    override fun moveTaskToBack(nonRoot: Boolean): Boolean {
+        return super.moveTaskToBack(true)
+    }
 }

+ 0 - 14
room/src/main/java/com/swago/room/user/UserRoomFragment.kt

@@ -62,16 +62,6 @@ class UserRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
                 dialog.show(childFragmentManager, "BenefitBagDialog")
             }
         })
-
-        binding.ivReport.visibility = ConstraintLayout.VISIBLE
-        binding.ivReport.setOnClickListener(object : NoDoubleClickListener() {
-            override fun onClick() {
-                SwagoRoomManager.iRoomInfo?.let {
-                    ReportDialog.newInstance(it.getAnchorCode())
-                        .show(childFragmentManager, "ReportDialog")
-                }
-            }
-        })
     }
 
 
@@ -225,10 +215,6 @@ class UserRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
         UserLianMaiDialog.newInstance().show(childFragmentManager,"UserLianMaiDialog")
     }
 
-    private fun openShareDialog() {
-        ShareDialog.newInstance().show(childFragmentManager,"ShareDialog")
-    }
-
     fun dismissDialog() {
         childFragmentManager.findFragmentByTag("GiftDialog")?.let {
             if (it is GiftDialog) it.dismissAllowingStateLoss()

+ 12 - 0
room/src/main/java/com/swago/room/vm/RoomOtherVm.kt

@@ -18,6 +18,8 @@ import com.swago.baseswago.model.live.ShareConfig
 import com.swago.baseswago.model.live.UserWishGiftModel
 import com.swago.baseswago.model.live.WishGift
 import com.swago.baseswago.model.live.WishGiftModel
+import com.swago.baseswago.model.live.audio.AudioBg
+import com.swago.baseswago.model.live.audio.AudioBgModel
 import com.swago.baseswago.model.live.audio.AudioSendGiftModel
 import com.swago.baseswago.model.live.game.GameListModel
 import com.swago.baseswago.model.live.gift.GiftSendModel
@@ -443,4 +445,14 @@ class RoomOtherVm(application: Application) : BaseViewModel(application) {
     }
 
 
+    val bgDataLiveData by lazy {
+        MutableLiveData<List<AudioBg>>()
+    }
+
+    fun getAudioBg(){
+        requestData {
+            bgDataLiveData.value = ApiManager.roomApi.getAudioBg(2).list
+        }
+    }
+
 }

+ 1 - 1
room/src/main/java/com/swago/room/vm/RoomVm.kt

@@ -105,7 +105,7 @@ class RoomVm(application: Application) : AbsRoomVm(application) {
             requestData {
                 SwagoLoading.showLoadingDialog(ActivityManagerUtil.get().currentActivity())
                 val roomInfo = iRoomInfo as UserRoomModel
-                val roomModel = ApiManager.roomApi.startLive(roomInfo.roomType.type)
+                val roomModel = ApiManager.roomApi.startLive(roomInfo.roomType.type,roomInfo.selectedBgUrl)
                 roomInfo.roomModel = roomModel
                 callback.invoke(true)
                 SwagoLoading.cancelLoadingDialog()

+ 10 - 1
room/src/main/java/com/swago/room/widget/AnchorFooterView.kt

@@ -38,7 +38,7 @@ class AnchorFooterView : ConstraintLayout, IFooter, IRoomActiveListener {
     var clearJiFen:(()->Unit)? = null
     var openAudioNoticeDialogFun:(()->Unit)? = null
     var openGiftPanelFun:(()->Unit)? = null
-
+    var openShareFun:(()->Unit)? = null
     var isMute = false
 
     constructor(context: Context) : this(context, null)
@@ -143,6 +143,12 @@ class AnchorFooterView : ConstraintLayout, IFooter, IRoomActiveListener {
                 clearJiFen?.invoke()
             }
         })
+
+        binding.ivShare.setOnClickListener(object : NoDoubleClickListener() {
+            override fun onClick() {
+                openShareFun?.invoke()
+            }
+        })
     }
 
     override fun getFooterView(): View {
@@ -170,6 +176,9 @@ class AnchorFooterView : ConstraintLayout, IFooter, IRoomActiveListener {
             binding.ivClearJifen.visibility = View.VISIBLE
             binding.ivNotice.visibility = View.VISIBLE
             binding.ivGift.visibility = View.VISIBLE
+            binding.ivShare.visibility = View.GONE
+        }else if(iRoomInfo.getRoomType() == RoomType.VIDEO.type){
+            binding.ivShare.visibility = View.VISIBLE
         }
         visibility = View.VISIBLE
     }

+ 8 - 0
room/src/main/java/com/swago/room/widget/ComHeaderView.kt

@@ -39,6 +39,7 @@ class ComHeaderView  : ConstraintLayout, IRoomActiveListener, IHeader, RoomTimer
     var openAudienceListDialog:(()->Unit)? = null
     var showAudioUserNoticeFun:(()->Unit)? = null
     var showFanClubFun:(()->Unit)? = null
+    var reportAnchorFun:(()->Unit)? = null
 
     //钻石收入
     private var localIncome = 0L
@@ -116,6 +117,12 @@ class ComHeaderView  : ConstraintLayout, IRoomActiveListener, IHeader, RoomTimer
                 showFanClubFun?.invoke()
             }
         })
+
+        binding.ivReport.setOnClickListener(object:NoDoubleClickListener() {
+            override fun onClick() {
+                reportAnchorFun?.invoke()
+            }
+        })
     }
 
 
@@ -155,6 +162,7 @@ class ComHeaderView  : ConstraintLayout, IRoomActiveListener, IHeader, RoomTimer
             binding.ivFans.visibility = View.VISIBLE
             binding.tvTime.visibility = View.VISIBLE
         }else{
+            binding.ivReport.visibility = View.VISIBLE
             if (iRoomInfo.getIsFollow()==1){
                 binding.tvFollow.visibility = View.GONE
                 binding.ivFans.visibility = View.VISIBLE

+ 3 - 0
room/src/main/java/com/swago/room/widget/UserFooterView.kt

@@ -111,6 +111,9 @@ class UserFooterView : ConstraintLayout, IFooter,IRoomActiveListener {
         if (iRoomInfo.getRoomType() == RoomType.AUDIO.type){
             binding.ivLianMai.visibility = View.GONE
             binding.ivShare.visibility = View.GONE
+        }else if(iRoomInfo.getRoomType() == RoomType.VIDEO.type){
+            binding.ivLianMai.visibility = View.VISIBLE
+            binding.ivShare.visibility = View.VISIBLE
         }
     }
 

+ 114 - 70
room/src/main/res/layout/activity_anchor_room.xml

@@ -1,19 +1,26 @@
 <?xml version="1.0" encoding="utf-8"?>
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/rootAnchorView"
-    android:background="@mipmap/bg_room"
-    xmlns:app="http://schemas.android.com/apk/res-auto">
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@mipmap/bg_room">
+
+    <ImageView
+        android:id="@+id/ivBg"
+        android:visibility="gone"
+        tools:visibility="visible"
+        android:scaleType="fitXY"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
 
     <!--自己-->
     <FrameLayout
         android:id="@+id/flLocal"
-        android:layoutDirection="ltr"
         android:layout_width="match_parent"
+        android:layoutDirection="ltr"
         android:layout_height="match_parent">
-
     </FrameLayout>
 
 
@@ -29,31 +36,30 @@
     <com.duolingo.open.rtlviewpager.RtlViewPager
         android:id="@+id/viewPager"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"/>
+        android:layout_height="match_parent" />
 
 
     <com.swago.room.lianmai.LianMaiView
         android:id="@+id/lianMaiView"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintBottom_toBottomOf="parent"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
         android:layout_marginBottom="150dp"
         android:visibility="gone"
-        tools:visibility="visible"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"/>
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        tools:visibility="visible" />
 
 
     <ImageView
         android:id="@+id/ivStopLive"
+        android:layout_width="40dp"
+        android:layout_height="40dp"
         android:layout_marginTop="40dp"
         android:layout_marginEnd="10dp"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        android:visibility="gone"
         android:src="@mipmap/close"
-        android:layout_width="40dp"
-        android:layout_height="40dp"/>
-
+        android:visibility="gone"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
 
 
     <androidx.constraintlayout.widget.ConstraintLayout
@@ -63,13 +69,13 @@
 
         <ImageView
             android:id="@+id/ivPrepareClose"
+            android:layout_width="40dp"
+            android:layout_height="40dp"
             android:layout_marginTop="40dp"
             android:layout_marginEnd="10dp"
-            app:layout_constraintTop_toTopOf="parent"
-            app:layout_constraintEnd_toEndOf="parent"
             android:src="@mipmap/close"
-            android:layout_width="40dp"
-            android:layout_height="40dp"/>
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
 
         <ImageView
             android:id="@+id/ivPrepareCamera"
@@ -86,33 +92,69 @@
 
         <TextView
             android:id="@+id/tvWishGift"
-            android:textSize="14dp"
-            android:textColor="#ffffff"
-            android:text="Wish Gift"
-            android:drawablePadding="4dp"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintEnd_toEndOf="parent"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
             android:layout_marginBottom="24dp"
-            app:layout_constraintBottom_toTopOf="@+id/tvStartLive"
             android:drawableTop="@mipmap/wish_gift"
+            android:drawablePadding="4dp"
+            android:text="Wish Gift"
+            android:textColor="#ffffff"
+            android:textSize="14dp"
+            app:layout_constraintBottom_toTopOf="@+id/tvStartLive"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent" />
+
+        <LinearLayout
+            android:id="@+id/llChangeBg"
             android:layout_width="wrap_content"
-            android:layout_height="wrap_content"/>
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            android:visibility="gone"
+            tools:visibility="visible"
+            android:layout_marginBottom="10dp"
+            app:layout_constraintBottom_toTopOf="@+id/tvWishGift"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent">
+
+            <ImageView
+                android:id="@+id/ivLeftChange"
+                android:src="@mipmap/ic_left_change"
+                android:padding="15dp"
+                android:layout_width="50dp"
+                android:layout_height="50dp" />
+
+            <TextView
+                android:textSize="14dp"
+                android:text="Switch theme"
+                android:textColor="#ffffff"
+                android:layout_gravity="center_vertical"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"/>
+
+            <ImageView
+                android:id="@+id/ivRightChange"
+                android:src="@mipmap/ic_right_change"
+                android:padding="15dp"
+                android:layout_width="50dp"
+                android:layout_height="50dp" />
+
+        </LinearLayout>
 
         <TextView
             android:id="@+id/tvNew"
-            android:textSize="10dp"
-            android:textColor="#ffffff"
-            android:text="New"
-            android:paddingStart="3dp"
-            android:paddingEnd="3dp"
-            android:gravity="center"
-            android:layout_marginEnd="-5dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
             android:layout_marginTop="-5dp"
+            android:layout_marginEnd="-5dp"
             android:background="@drawable/shape_ff56b7_14"
+            android:gravity="center"
+            android:paddingStart="3dp"
+            android:paddingEnd="3dp"
+            android:text="New"
+            android:textColor="#ffffff"
+            android:textSize="10dp"
             app:layout_constraintEnd_toEndOf="@+id/tvWishGift"
-            app:layout_constraintTop_toTopOf="@+id/tvWishGift"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"/>
+            app:layout_constraintTop_toTopOf="@+id/tvWishGift" />
 
 
         <com.swago.baseswago.cusview.BoldTextView
@@ -148,58 +190,60 @@
 
         <LinearLayout
             android:id="@+id/llVideo"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="20dp"
             android:orientation="vertical"
             app:layout_constraintBottom_toBottomOf="parent"
-            android:layout_marginBottom="20dp"
-            app:layout_constraintHorizontal_chainStyle="packed"
-            app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintEnd_toStartOf="@+id/llAudio"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content">
+            app:layout_constraintHorizontal_chainStyle="packed"
+            app:layout_constraintStart_toStartOf="parent">
 
             <com.swago.baseswago.cusview.BoldTextView
                 android:id="@+id/tvVideo"
-                android:textSize="16dp"
-                android:textColor="#fff"
-                android:text="Live"
                 android:layout_width="wrap_content"
-                android:layout_height="wrap_content"/>
+                android:layout_height="wrap_content"
+                android:text="Live"
+                android:textColor="#fff"
+                android:textSize="16dp" />
+
             <View
                 android:id="@+id/viewVideo"
-                android:layout_marginTop="3dp"
-                android:layout_gravity="center"
-                android:background="@drawable/shape_white_5"
                 android:layout_width="10dp"
-                android:layout_height="2dp"/>
+                android:layout_height="2dp"
+                android:layout_gravity="center"
+                android:layout_marginTop="3dp"
+                android:background="@drawable/shape_white_5" />
 
         </LinearLayout>
 
         <LinearLayout
             android:id="@+id/llAudio"
-            android:orientation="vertical"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
             android:layout_marginStart="40dp"
-            app:layout_constraintBottom_toBottomOf="parent"
             android:layout_marginBottom="20dp"
-            app:layout_constraintStart_toEndOf="@+id/llVideo"
+            android:orientation="vertical"
+            app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content">
+            app:layout_constraintStart_toEndOf="@+id/llVideo">
 
             <com.swago.baseswago.cusview.BoldTextView
                 android:id="@+id/tvAudio"
-                android:textSize="16dp"
-                android:textColor="@color/_d4ffffff"
-                android:text="Audio"
                 android:layout_width="wrap_content"
-                android:layout_height="wrap_content"/>
+                android:layout_height="wrap_content"
+                android:text="Audio"
+                android:textColor="@color/_d4ffffff"
+                android:textSize="16dp" />
+
             <View
                 android:id="@+id/viewAudio"
-                android:layout_marginTop="3dp"
+                android:layout_width="10dp"
+                android:layout_height="2dp"
                 android:layout_gravity="center"
-                android:visibility="invisible"
+                android:layout_marginTop="3dp"
                 android:background="@drawable/shape_white_5"
-                android:layout_width="10dp"
-                android:layout_height="2dp"/>
+                android:visibility="invisible" />
 
         </LinearLayout>
 
@@ -208,13 +252,13 @@
 
     <ImageView
         android:id="@+id/ivClose"
+        android:layout_width="40dp"
+        android:layout_height="40dp"
         android:layout_marginTop="40dp"
         android:layout_marginEnd="10dp"
+        android:src="@mipmap/close"
         android:visibility="gone"
-        app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
-        android:src="@mipmap/close"
-        android:layout_width="40dp"
-        android:layout_height="40dp"/>
+        app:layout_constraintTop_toTopOf="parent" />
 
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 1 - 15
room/src/main/res/layout/fragment_base_com.xml

@@ -59,7 +59,6 @@
 
     <com.swago.room.hongbao.RedEnvelopeView
         android:id="@+id/ivRedEnvelopeView"
-        android:layout_marginBottom="120dp"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
@@ -72,7 +71,6 @@
 
     <com.swago.room.hongbao.RedEnvelopeBroadcastView
         android:id="@+id/ivRedEnvelopeBroadcastView"
-        android:layout_marginBottom="120dp"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
@@ -87,6 +85,7 @@
     <ImageView
         android:id="@+id/ivBenefit"
         app:layout_constraintTop_toTopOf="parent"
+        android:layout_marginTop="150dp"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         android:layout_marginEnd="10dp"
@@ -117,19 +116,6 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"/>
 
-
-    <ImageView
-        android:id="@+id/ivReport"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintBottom_toBottomOf="@+id/rv"
-        android:padding="5dp"
-        android:visibility="gone"
-        tools:visibility="visible"
-        android:layout_marginEnd="10dp"
-        android:src="@mipmap/icon_report"
-        android:layout_width="40dp"
-        android:layout_height="40dp"/>
-
     <com.swago.room.giftdandao.GiftDanDaoView
         android:id="@+id/danDaoView"
         app:layout_constraintBottom_toBottomOf="parent"

+ 15 - 0
room/src/main/res/layout/layout_anchor_footer_view.xml

@@ -86,6 +86,21 @@
         android:layout_width="10dp"
         android:layout_height="10dp"/>
 
+
+    <ImageView
+        android:id="@+id/ivShare"
+        android:layout_marginStart="10dp"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintStart_toEndOf="@+id/ivLianMai"
+        android:background="@drawable/shape_80000000_20"
+        android:src="@mipmap/live_share"
+        android:padding="7dp"
+        android:visibility="gone"
+        tools:visibility="visible"
+        android:layout_width="40dp"
+        android:layout_height="40dp"/>
+
+
     <ImageView
         android:id="@+id/ivGift"
         android:layout_marginStart="10dp"

+ 10 - 10
room/src/main/res/layout/layout_user_footer_view.xml

@@ -18,10 +18,10 @@
 
     <ImageView
         android:id="@+id/ivGift"
-        android:layout_marginStart="10dp"
+        android:layout_marginEnd="10dp"
         android:background="@drawable/shape_80000000_20"
         app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintStart_toEndOf="@+id/ivGame"
+        app:layout_constraintEnd_toEndOf="parent"
         android:src="@mipmap/live_gift"
         android:visibility="visible"
         android:padding="7dp"
@@ -30,10 +30,10 @@
 
     <ImageView
         android:id="@+id/ivGame"
-        android:layout_marginStart="10dp"
+        android:layout_marginEnd="10dp"
         android:background="@drawable/shape_80000000_20"
         app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintStart_toEndOf="@+id/ivChat"
+        app:layout_constraintEnd_toStartOf="@+id/ivGift"
         android:src="@mipmap/live_game"
         android:padding="7dp"
         android:visibility="gone"
@@ -43,9 +43,9 @@
 
     <ImageView
         android:id="@+id/ivLianMai"
-        android:layout_marginEnd="10dp"
+        android:layout_marginStart="10dp"
         app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintEnd_toStartOf="@+id/ivShare"
+        app:layout_constraintStart_toEndOf="@+id/ivChat"
         android:background="@drawable/shape_80000000_20"
         android:src="@mipmap/live_lianmai_user"
         android:padding="7dp"
@@ -54,9 +54,9 @@
 
     <ImageView
         android:id="@+id/ivShare"
-        android:layout_marginEnd="10dp"
+        android:layout_marginStart="10dp"
         app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintEnd_toStartOf="@+id/ivMessage"
+        app:layout_constraintStart_toEndOf="@+id/ivLianMai"
         android:background="@drawable/shape_80000000_20"
         android:src="@mipmap/live_share"
         android:padding="7dp"
@@ -67,8 +67,8 @@
         android:id="@+id/ivMessage"
         android:background="@drawable/shape_80000000_20"
         app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        android:layout_marginEnd="10dp"
+        app:layout_constraintStart_toEndOf="@+id/ivShare"
+        android:layout_marginStart="10dp"
         android:src="@mipmap/live_message"
         android:layout_width="40dp"
         android:layout_height="40dp"/>

+ 12 - 0
room/src/main/res/layout/layout_user_header_view.xml

@@ -247,5 +247,17 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"/>
 
+    <ImageView
+        android:id="@+id/ivReport"
+        app:layout_constraintStart_toEndOf="@+id/tvAnnouncement"
+        app:layout_constraintTop_toBottomOf="@+id/cl"
+        android:layout_marginTop="12dp"
+        android:visibility="gone"
+        tools:visibility="visible"
+        android:layout_marginStart="10dp"
+        android:src="@mipmap/live_icon_report"
+        android:layout_width="20dp"
+        android:layout_height="20dp"/>
+
 
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 5 - 2
room/src/main/res/layout/layout_user_room.xml

@@ -9,10 +9,13 @@
     <ImageView
         android:id="@+id/ivAudioBg"
         android:visibility="gone"
-        android:background="@mipmap/bg_room"
+        android:scaleType="fitXY"
+        android:background="@mipmap/audio_default_bg"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
-        android:layout_width="match_parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        android:layout_width="0dp"
         android:layout_height="0dp"/>
 
     <FrameLayout

+ 27 - 5
room/src/main/res/layout/view_item_gift.xml

@@ -11,7 +11,8 @@
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/clContainer"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/clWinPrize"
+        app:layout_constraintTop_toTopOf="parent"
+        android:layout_marginTop="50dp"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content">
 
@@ -126,7 +127,7 @@
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/clWinPrize"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toTopOf="@+id/clContainer"
         tools:visibility="visible"
         android:visibility="invisible"
         android:layout_width="wrap_content"
@@ -138,7 +139,7 @@
             android:layout_marginTop="5dp"
             app:layout_constraintStart_toStartOf="parent"
             android:layout_marginStart="68dp"
-            android:src="@mipmap/win_500_prize"
+            android:src="@mipmap/win_1_50_prize"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"/>
 
@@ -149,8 +150,6 @@
             app:layout_constraintTop_toTopOf="@+id/iv"
             app:layout_constraintBottom_toBottomOf="@+id/iv"
             android:text="Win 500x coins"
-            android:layout_marginTop="3dp"
-            android:layout_marginStart="26dp"
             android:textColor="#fff"
             android:textSize="11dp"
             android:layout_width="0dp"
@@ -159,4 +158,27 @@
 
     </androidx.constraintlayout.widget.ConstraintLayout>
 
+    <com.opensource.svgaplayer.SVGAImageView
+        android:id="@+id/svgaWinPrize"
+        android:visibility="gone"
+        tools:visibility="visible"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        android:layout_width="220dp"
+        android:layout_height="100dp"/>
+
+    <TextView
+        android:id="@+id/tvWinPrize2"
+        app:layout_constraintStart_toStartOf="@+id/svgaWinPrize"
+        app:layout_constraintTop_toTopOf="@+id/svgaWinPrize"
+        android:layout_marginStart="75dp"
+        android:layout_marginTop="60dp"
+        android:text="Win 500x coins"
+        android:textColor="#fff"
+        android:textSize="11dp"
+        android:layout_width="0dp"
+        android:maxLines="1"
+        android:layout_height="wrap_content"/>
+
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 101 - 34
room/src/main/res/layout/view_user_join_room.xml

@@ -9,63 +9,130 @@
     android:layout_height="wrap_content">
 
 
-    <com.airbnb.lottie.LottieAnimationView
-        android:id="@+id/lottieView"
-        app:lottie_autoPlay="false"
-        app:lottie_loop="false"
+    <LinearLayout
+        android:id="@+id/clOne"
+        android:orientation="horizontal"
+        android:padding="5dp"
+        android:visibility="gone"
+        android:background="@drawable/shape_ff56b7_12"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"/>
-
-    <androidx.constraintlayout.widget.ConstraintLayout
-        android:id="@+id/clBg"
-        android:layoutDirection="ltr"
-        android:background="@drawable/shape_6c55ff_20"
-        android:layout_marginStart="20dp"
-        android:layout_marginBottom="250dp"
-        app:layout_constraintStart_toStartOf="@+id/lottieView"
-        app:layout_constraintBottom_toBottomOf="@+id/lottieView"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content">
 
-        <de.hdodenhof.circleimageview.CircleImageView
-            android:id="@+id/ivAvatar"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent"
-             app:layout_constraintBottom_toBottomOf="parent"
-            android:layout_margin="5dp"
-            android:layout_width="30dp"
-            android:layout_height="30dp"/>
+        <com.swago.baseswago.cusview.SwagoLevelView
+            android:id="@+id/swagoLevelOne"
+            android:layout_marginStart="5dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"/>
 
         <TextView
-            android:id="@+id/tvName"
-            app:layout_constraintStart_toEndOf="@+id/ivAvatar"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintTop_toTopOf="@+id/ivAvatar"
+            android:id="@+id/tvNameOne"
             android:layout_marginStart="5dp"
-            android:layout_marginEnd="20dp"
             android:textSize="12dp"
             android:textStyle="bold"
-            tools:text="swago"
+            tools:text="swagodfdfdsfsdfdfdfsfdsf"
+            android:maxLines="1"
+            android:ellipsize="end"
+            android:maxWidth="100dp"
             android:textColor="@color/white"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"/>
 
         <TextView
-            android:id="@+id/tvJoin"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toEndOf="@+id/ivAvatar"
-            app:layout_constraintBottom_toBottomOf="@+id/ivAvatar"
             android:layout_marginEnd="20dp"
             android:layout_marginStart="5dp"
-            android:textSize="10dp"
+            android:textSize="12dp"
             android:textStyle="bold"
             android:text="@string/join_room"
             android:textColor="@color/white"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"/>
+    </LinearLayout>
+
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/clTwo"
+        android:visibility="visible"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content">
+
+        <com.opensource.svgaplayer.SVGAImageView
+            android:id="@+id/svgaImageView"
+            app:lottie_autoPlay="false"
+            app:lottie_loop="false"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            android:layout_width="260dp"
+            android:layout_height="60dp"/>
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/clBg"
+            android:layoutDirection="ltr"
+            app:layout_constraintStart_toStartOf="@+id/svgaImageView"
+            app:layout_constraintBottom_toBottomOf="@+id/svgaImageView"
+            android:layout_width="260dp"
+            android:layout_height="60dp">
+
+            <de.hdodenhof.circleimageview.CircleImageView
+                android:id="@+id/ivAvatar"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintBottom_toBottomOf="parent"
+                android:layout_marginStart="12dp"
+                android:layout_width="36dp"
+                android:layout_height="36dp"/>
+
+
+            <com.swago.baseswago.cusview.SwagoLevelView
+                android:id="@+id/swagoLevel"
+                android:layout_marginStart="5dp"
+                app:layout_constraintStart_toEndOf="@+id/ivAvatar"
+                app:layout_constraintTop_toTopOf="@+id/ivAvatar"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"/>
+
+            <TextView
+                android:id="@+id/tvName"
+                app:layout_constraintStart_toEndOf="@+id/swagoLevel"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintTop_toTopOf="@+id/ivAvatar"
+                android:layout_marginStart="5dp"
+                android:layout_marginEnd="20dp"
+                android:textSize="12dp"
+                android:textStyle="bold"
+                tools:text="swago"
+                android:textColor="@color/white"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"/>
+
+            <TextView
+                android:id="@+id/tvJoin"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toEndOf="@+id/ivAvatar"
+                app:layout_constraintBottom_toBottomOf="@+id/ivAvatar"
+                android:layout_marginEnd="20dp"
+                android:layout_marginStart="5dp"
+                android:textSize="10dp"
+                android:textStyle="bold"
+                android:text="@string/join_room"
+                android:textColor="@color/white"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"/>
+
+            <ImageView
+                android:id="@+id/ivLevelLogo"
+                app:layout_constraintEnd_toEndOf="parent"
+                android:layout_width="60dp"
+                android:layout_height="match_parent"/>
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
 
     </androidx.constraintlayout.widget.ConstraintLayout>
 
+
+
+
 </androidx.constraintlayout.widget.ConstraintLayout>

BIN
room/src/main/res/mipmap-xxhdpi/audio_default_bg.webp


BIN
room/src/main/res/mipmap-xxhdpi/ic_left_change.png


BIN
room/src/main/res/mipmap-xxhdpi/ic_right_change.png


BIN
room/src/main/res/mipmap-xxhdpi/join_fifteen_logo.webp


BIN
room/src/main/res/mipmap-xxhdpi/join_fifteen_nineteen.webp


BIN
room/src/main/res/mipmap-xxhdpi/join_ten_fourteen.webp


BIN
room/src/main/res/mipmap-xxhdpi/join_ten_logo.webp


BIN
room/src/main/res/mipmap-xxhdpi/win_1_50_prize.webp


BIN
room/src/main/res/mipmap-xxhdpi/win_51_100_prize.webp