honghengqiang 3 năm trước cách đây
mục cha
commit
bf9f6161cd
34 tập tin đã thay đổi với 295 bổ sung188 xóa
  1. 2 0
      .idea/misc.xml
  2. 1 0
      app/src/main/AndroidManifest.xml
  3. 0 2
      app/src/main/java/com/swago/app/SplashVm.kt
  4. 0 1
      app/src/main/java/com/swago/app/SwagoApp.kt
  5. 2 2
      baseswago/build.gradle
  6. 5 0
      baseswago/src/main/java/com/swago/baseswago/agora/AgoraManager.kt
  7. 2 0
      baseswago/src/main/java/com/swago/baseswago/agora/ISwagoIRtcEngineEventHandler.kt
  8. 2 1
      baseswago/src/main/java/com/swago/baseswago/im/GroupMsgParser.kt
  9. 5 0
      baseswago/src/main/java/com/swago/baseswago/im/ImConstant.kt
  10. 1 1
      baseswago/src/main/java/com/swago/baseswago/util/IMUtil.kt
  11. 3 0
      home/src/main/java/com/swago/home/HomeFragment.kt
  12. 12 1
      home/src/main/java/com/swago/home/innerhome/FollowFragment.kt
  13. 12 1
      home/src/main/java/com/swago/home/innerhome/HotFragment.kt
  14. 12 1
      home/src/main/java/com/swago/home/innerhome/NewFragment.kt
  15. 0 1
      login/src/main/java/com/swago/login/LoginVm.kt
  16. 5 0
      room/src/main/java/com/swago/room/anchor/AnchorRoomActivity.kt
  17. 1 12
      room/src/main/java/com/swago/room/anchor/AnchorRoomFragment.kt
  18. 80 34
      room/src/main/java/com/swago/room/base/BaseComFragment.kt
  19. 10 9
      room/src/main/java/com/swago/room/giftdandao/GiftDanDaoView.kt
  20. 21 20
      room/src/main/java/com/swago/room/piaotiao/WaftView.kt
  21. 2 2
      room/src/main/java/com/swago/room/ranklist/RankListAdapter.kt
  22. 56 46
      room/src/main/java/com/swago/room/user/UserRoomActivity.kt
  23. 1 13
      room/src/main/java/com/swago/room/user/UserRoomFragment.kt
  24. 15 3
      room/src/main/java/com/swago/room/vm/MsgVm.kt
  25. 0 1
      room/src/main/java/com/swago/room/widget/UserHeaderView.kt
  26. 7 12
      room/src/main/java/com/swago/room/widget/UserShowAnchorCloseView.kt
  27. 6 4
      room/src/main/res/layout/dialog_user_for_anchor_close.xml
  28. 12 5
      room/src/main/res/layout/fragment_base_com.xml
  29. 1 1
      room/src/main/res/layout/layout_svg_dan_dao_view.xml
  30. 2 0
      room/src/main/res/layout/layout_user_header_view.xml
  31. 4 2
      room/src/main/res/layout/layout_user_room.xml
  32. 9 9
      room/src/main/res/layout/view_item_gift.xml
  33. 3 3
      room/src/main/res/layout/view_waft.xml
  34. 1 1
      tuikit/build.gradle

+ 2 - 0
.idea/misc.xml

@@ -119,6 +119,7 @@
         <entry key="room/src/main/res/layout/layout_user_footer_view.xml" value="0.35688405797101447" />
         <entry key="room/src/main/res/layout/layout_user_header_view.xml" value="0.3776041666666667" />
         <entry key="room/src/main/res/layout/layout_user_room.xml" value="0.3776041666666667" />
+        <entry key="room/src/main/res/layout/layout_view_stub_user_end.xml" value="0.309375" />
         <entry key="room/src/main/res/layout/layout_view_waft.xml" value="0.39166666666666666" />
         <entry key="room/src/main/res/layout/view_item_gift.xml" value="0.67" />
         <entry key="room/src/main/res/layout/view_svga.xml" value="0.3619791666666667" />
@@ -126,6 +127,7 @@
         <entry key="tuikit/src/main/res/drawable/message_send_border.xml" value="0.204" />
         <entry key="tuikit/src/main/res/layout/activity_camera.xml" value="0.303125" />
         <entry key="tuikit/src/main/res/layout/chat_input_layout.xml" value="0.3015625" />
+        <entry key="tuikit/src/main/res/layout/chat_inputmore_layout.xml" value="0.2296875" />
         <entry key="tuikit/src/main/res/layout/chat_layout.xml" value="0.303125" />
         <entry key="tuikit/src/main/res/layout/conversation_adapter.xml" value="0.20833333333333334" />
         <entry key="tuikit/src/main/res/layout/conversation_layout.xml" value="0.3776041666666667" />

+ 1 - 0
app/src/main/AndroidManifest.xml

@@ -12,6 +12,7 @@
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.CAMERA"/>
     <uses-permission android:name="android.permission.RECORD_AUDIO"/>
+    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

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

@@ -27,8 +27,6 @@ class SplashVm (application: Application) : BaseViewModel(application) {
             TUIKit.login(data.user_account,data.user_sig,object:
                 IUIKitCallBack {
                 override fun onSuccess(data: Any?) {
-                    ARouter.getInstance().build(ARouteConstant.Home.home).navigation()
-
                     TUIKit.login(UserInfo.getLoginModel()!!.user_account,UserInfo.getLoginModel()!!.user_sig,object:
                         IUIKitCallBack {
                         override fun onSuccess(data: Any?) {

+ 0 - 1
app/src/main/java/com/swago/app/SwagoApp.kt

@@ -34,7 +34,6 @@ class SwagoApp : Application() {
         if (BuildConfig.DEBUG) {
             ARouter.openLog()
             ARouter.openDebug()
-
         }
         //firebase
         UserInfo.getLoginModel()?.let {

+ 2 - 2
baseswago/build.gradle

@@ -98,14 +98,14 @@ dependencies {
     api "de.hdodenhof:circleimageview:3.1.0"
     api 'top.zibin:Luban:1.1.8'
     api 'com.github.HuanTanSheng:EasyPhotos:3.1.3'
-    //facebook
+    //facebook`
     api 'com.facebook.android:facebook-android-sdk:[8,9)'
     //google
     api 'com.google.android.gms:play-services-auth:19.0.0'
     //im
     api 'com.tencent.imsdk:imsdk-plus:5.9.1872'
     //agora
-    api 'io.agora.rtc:full-sdk:3.5.0'
+    api 'com.github.agorabuilder:native-full-sdk:3.6.0.1'
     //支付
     api 'com.android.billingclient:billing:3.0.3'
     //抓包

+ 5 - 0
baseswago/src/main/java/com/swago/baseswago/agora/AgoraManager.kt

@@ -69,6 +69,11 @@ object AgoraManager {
                         iSwagoIRtcEngineEventHandler?.onFirstRemoteVideoDecoded(uid, width, height, elapsed)
                     }
 
+                    override fun onConnectionStateChanged(state: Int, reason: Int) {
+                        super.onConnectionStateChanged(state, reason)
+                        iSwagoIRtcEngineEventHandler?.onConnectionStateChanged(state, reason)
+                    }
+
                 })
             setChannelProfile()
         } catch (e: Exception) {

+ 2 - 0
baseswago/src/main/java/com/swago/baseswago/agora/ISwagoIRtcEngineEventHandler.kt

@@ -13,4 +13,6 @@ interface ISwagoIRtcEngineEventHandler {
         elapsed: Int
     )
 
+    fun onConnectionStateChanged(state: Int, reason: Int)
+
 }

+ 2 - 1
baseswago/src/main/java/com/swago/baseswago/im/GroupMsgParser.kt

@@ -9,6 +9,7 @@ import com.swago.baseswago.im.ImConstant.lucky_gift
 import com.swago.baseswago.im.ImConstant.remove_room
 import com.swago.baseswago.im.ImConstant.room_chat_text
 import com.swago.baseswago.im.ImConstant.svg_gift
+import com.swago.baseswago.im.ImConstant.user_exit_room
 import com.swago.baseswago.im.ImConstant.user_join_room
 import com.swago.baseswago.model.im.AnchorRoomClosedBean
 import com.swago.baseswago.model.im.CusNewMsgBean
@@ -58,7 +59,7 @@ class GroupMsgParser : IGroupNewMsgParser {
                     parserModel = gson.fromJson(resultString,parameterizedTypeImpl)
                 }
 
-                user_join_room -> {
+                user_join_room, user_exit_room -> {
                     parameterizedTypeImpl = ParameterizedTypeImpl(
                         arrayOf<Type>(UserJoinRoomBean::class.java),
                         CusNewMsgBean::class.java,

+ 5 - 0
baseswago/src/main/java/com/swago/baseswago/im/ImConstant.kt

@@ -16,6 +16,11 @@ object ImConstant {
      */
     const val user_join_room = 1
 
+    /**
+     * 用户退出直播间
+     */
+    const val user_exit_room = 2
+
     /**
      * 主播关播直播间
      */

+ 1 - 1
baseswago/src/main/java/com/swago/baseswago/util/IMUtil.kt

@@ -66,7 +66,7 @@ object IMUtil {
             V2TIMManager.getInstance().quitGroup(UserInfo.getLoginModel()!!.group_id,null)
             V2TIMManager.getInstance().joinGroup(UserInfo.getLoginModel()!!.group_id, "",object:V2TIMCallback{
                 override fun onSuccess() {
-                    LogUtil.d("加入大群成功")
+                    LogUtil.d("加入大群成功---${UserInfo.getLoginModel()!!.group_id}")
                 }
 
                 override fun onError(code: Int, desc: String?) {

+ 3 - 0
home/src/main/java/com/swago/home/HomeFragment.kt

@@ -145,6 +145,9 @@ class HomeFragment : BaseXFragment<FragmentHomeBinding>() {
     override fun initLiveData() {
     }
 
+
+
+
     override fun onResume() {
         super.onResume()
         binding.tvStartLive.isEnabled = true

+ 12 - 1
home/src/main/java/com/swago/home/innerhome/FollowFragment.kt

@@ -34,6 +34,7 @@ class FollowFragment : BaseListFragment<FragmentHotBinding, MomentModel>(){
         GridLayoutManager(context,2)
     }
     override val loadData: (page: Int) -> Unit = {
+        isFirstLoadData = false
         homeVm.getHomeList(3, it+1)
     }
 
@@ -60,7 +61,6 @@ class FollowFragment : BaseListFragment<FragmentHotBinding, MomentModel>(){
 
     override fun initLiveData() {
         homeVm.homeListLiveData.observe(this){
-            isFirstLoadData = false
             if (it == null){
                 smartRecyclerView.onFetchDataError()
             }else {
@@ -75,4 +75,15 @@ class FollowFragment : BaseListFragment<FragmentHotBinding, MomentModel>(){
         }
     }
 
+    override fun loadMoreNeed(): Boolean {
+        return false
+    }
+
+    override fun onResume() {
+        super.onResume()
+        if (!isFirstLoadData){
+            smartRecyclerView.startRefresh()
+        }
+    }
+
 }

+ 12 - 1
home/src/main/java/com/swago/home/innerhome/HotFragment.kt

@@ -46,6 +46,7 @@ class HotFragment : BaseListFragment<FragmentHotBinding, MomentModel>() {
         GridLayoutManager(context, 2)
     }
     override val loadData: (page: Int) -> Unit = {
+        isFirstLoadData = false
         homeVm.getHotList(1, it + 1)
     }
 
@@ -85,7 +86,6 @@ class HotFragment : BaseListFragment<FragmentHotBinding, MomentModel>() {
 
     override fun initLiveData() {
         homeVm.hotListLiveData.observe(this) {
-            isFirstLoadData = false
             if (it == null) {
                 smartRecyclerView.onFetchDataError()
             } else {
@@ -115,4 +115,15 @@ class HotFragment : BaseListFragment<FragmentHotBinding, MomentModel>() {
             smartRecyclerView.startRefresh()
         }
     }
+
+    override fun onResume() {
+        super.onResume()
+        if (!isFirstLoadData){
+            smartRecyclerView.startRefresh()
+        }
+    }
+
+    override fun loadMoreNeed(): Boolean {
+        return false
+    }
 }

+ 12 - 1
home/src/main/java/com/swago/home/innerhome/NewFragment.kt

@@ -35,6 +35,7 @@ class NewFragment  : BaseListFragment<FragmentHotBinding, MomentModel>(){
         GridLayoutManager(context,2)
     }
     override val loadData: (page: Int) -> Unit = {
+        isFirstLoadData = false
         homeVm.getHomeList(2, it+1)
     }
 
@@ -51,7 +52,6 @@ class NewFragment  : BaseListFragment<FragmentHotBinding, MomentModel>(){
 
     override fun initLiveData() {
         homeVm.homeListLiveData.observe(this){
-            isFirstLoadData = false
             if (it == null){
                 smartRecyclerView.onFetchDataError()
             }else {
@@ -65,4 +65,15 @@ class NewFragment  : BaseListFragment<FragmentHotBinding, MomentModel>(){
             smartRecyclerView.startRefresh()
         }
     }
+
+    override fun onResume() {
+        super.onResume()
+        if (!isFirstLoadData){
+            smartRecyclerView.startRefresh()
+        }
+    }
+
+    override fun loadMoreNeed(): Boolean {
+        return false
+    }
 }

+ 0 - 1
login/src/main/java/com/swago/login/LoginVm.kt

@@ -30,7 +30,6 @@ class LoginVm(application: Application) : BaseViewModel(application) {
                 TUIKit.login(data.user_account,data.user_sig,object:
                     IUIKitCallBack {
                     override fun onSuccess(data: Any?) {
-
                         ARouter.getInstance().build(ARouteConstant.Home.home)
                             .withFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP).navigation()
                         IMUtil.joinGroup(loginFun)

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

@@ -192,4 +192,9 @@ class AnchorRoomActivity : AbsAnchorActivity<ActivityAnchorRoomBinding,IRoomInfo
 
     }
 
+    override fun onConnectionStateChanged(state: Int, reason: Int) {
+
+
+    }
+
 }

+ 1 - 12
room/src/main/java/com/swago/room/anchor/AnchorRoomFragment.kt

@@ -28,8 +28,6 @@ class AnchorRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
 
     private var footerView : AnchorFooterView? = null
 
-    private var roomUserList  = CopyOnWriteArrayList<RoomUserModel.ListBean>()
-
     override fun initOther() {
         super.initOther()
     }
@@ -86,6 +84,7 @@ class AnchorRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
     }
 
     override fun leaveRoom(iRoomInfo: IRoomInfo) {
+        super.leaveRoom(iRoomInfo)
     }
 
     override fun joinedRoom(iRoomInfo: IRoomInfo) {
@@ -109,14 +108,4 @@ class AnchorRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
     override val iFooter: IFooter by lazy {
         AnchorFooterView(requireContext())
     }
-
-    override fun updateUserJoinRoom(userJoinRoomBean: UserJoinRoomBean) {
-        val data = RoomUserModel.ListBean()
-        data.user_account = userJoinRoomBean.senderCode
-        data.user_head_img_url = userJoinRoomBean.userAvatar
-        data.user_id = userJoinRoomBean.senderId
-        data.user_name = userJoinRoomBean.senderName
-        roomUserList.add(0,data)
-        iHeader.updateRoomUser(roomUserList)
-    }
 }

+ 80 - 34
room/src/main/java/com/swago/room/base/BaseComFragment.kt

@@ -25,6 +25,7 @@ import com.swago.baseswago.fragment.BaseXFragment
 import com.swago.baseswago.im.IRoomChat
 import com.swago.baseswago.model.im.RoomSystemMsgBean
 import com.swago.baseswago.model.im.UserJoinRoomBean
+import com.swago.baseswago.model.live.RoomUserModel
 import com.swago.baseswago.model.live.gift.GiftModel
 import com.swago.baseswago.util.*
 import com.swago.room.R
@@ -59,6 +60,7 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
     RoomTimer.TimeTickListener {
 
     val giftVm by activityViewModels<GiftVm>()
+
     //热门礼物列表
     val hotList = ArrayList<GiftModel>()
 
@@ -71,6 +73,9 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
     val roomVm by activityViewModels<RoomVm>()
     val msgVm by activityViewModels<MsgVm>()
 
+    //直播间观众列表
+    var roomUserList  = CopyOnWriteArrayList<RoomUserModel.ListBean>()
+
     abstract val iHeader: IHeader
     abstract val iFooter: IFooter
 
@@ -125,7 +130,7 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
         binding.rv.adapter = chatAdapter
         chatAdapter.setNewData(dataChatList)
         context?.let {
-            svgPlayerManager.init(it, binding.xSvgaPlayer,binding.svgDanDaoView)
+            svgPlayerManager.init(it, binding.xSvgaPlayer, binding.svgDanDaoView)
         }
 
         activity?.let {
@@ -149,29 +154,52 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
     }
 
 
-    abstract fun updateUserJoinRoom(userJoinRoomBean: UserJoinRoomBean)
+    private fun updateUserJoinRoom(userJoinRoomBean: UserJoinRoomBean){
+        val data = RoomUserModel.ListBean()
+        data.user_account = userJoinRoomBean.senderCode
+        data.user_head_img_url = userJoinRoomBean.userAvatar
+        data.user_id = userJoinRoomBean.senderId
+        data.user_name = userJoinRoomBean.senderName
+        roomUserList.add(0,data)
+    }
 
     override fun initLiveData() {
-        msgVm.updateUserRoom = {
-            updateUserJoinRoom(it)
+        msgVm.updateUserRoom = { userJoinRoomBean, isJoinOrExit ->
+            var isInit = false
+            roomUserList.forEach {
+                if (it!=null&&it.user_account==userJoinRoomBean.senderCode){
+                    isInit = true
+                    if (!isJoinOrExit){
+                        roomUserList.remove(it)
+                    }
+                    return@forEach
+                }
+            }
+            if (isJoinOrExit){
+                if (!isInit){
+                    updateUserJoinRoom(userJoinRoomBean)
+                }
+            }
+            iHeader.updateRoomUser(roomUserList)
         }
 
         chatAdapter.showUserInfoDialog = {
-            var isAnchor  = false
+            var isAnchor = false
             SwagoRoomManager.iRoomInfo?.let { iRoomInfo ->
                 isAnchor = iRoomInfo.getAnchorId() == it.getSenderId()
             }
-            PersonDataDFragment.newInstance(it.getSenderId(),isAnchor = isAnchor,inRoom = true).apply {
-                this.openGiftDialog = {nickName, userId ->
-                    GiftDialog.newInstance(
-                        nickName,
-                        userId,
-                        hotList,
-                        luxuryList,
-                        luckyData
-                    ).show(childFragmentManager, "GiftDialog")
-                }
-            }.show(childFragmentManager, "PersonDataDFragment")
+            PersonDataDFragment.newInstance(it.getSenderId(), isAnchor = isAnchor, inRoom = true)
+                .apply {
+                    this.openGiftDialog = { nickName, userId ->
+                        GiftDialog.newInstance(
+                            nickName,
+                            userId,
+                            hotList,
+                            luxuryList,
+                            luckyData
+                        ).show(childFragmentManager, "GiftDialog")
+                    }
+                }.show(childFragmentManager, "PersonDataDFragment")
         }
 
         msgVm.newChatMsgFun = {
@@ -222,9 +250,7 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
             dataChatList.add(it)
         }
         chatAdapter.notifyDataSetChanged()
-        binding.rv.post {
-            binding.rv.scrollToPosition(dataChatList.size - 1)
-        }
+        binding.rv.smoothScrollToPosition(dataChatList.size-1)
     }
 
 
@@ -286,10 +312,15 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
     fun openGameDialog() {
 
         SwagoRoomManager.iRoomInfo?.let {
-            val download = checkGameVersion(it.getGameType().toString(),it.getGameDownLoadUrl(),it.getGameVersion().toString())
-            if (download){
-                gameDialog = GamePlayDialog.newInstance("file://" + UrlConstant.appGameRootPath + File.separator + it.getGameType() + File.separator + "index.html")
-            }else{
+            val download = checkGameVersion(
+                it.getGameType().toString(),
+                it.getGameDownLoadUrl(),
+                it.getGameVersion().toString()
+            )
+            if (download) {
+                gameDialog =
+                    GamePlayDialog.newInstance("file://" + UrlConstant.appGameRootPath + File.separator + it.getGameType() + File.separator + "index.html")
+            } else {
                 gameDialog = GamePlayDialog.newInstance(it.getGameUrl())
             }
             gameDialog?.show(childFragmentManager, "GamePlayDialog")
@@ -297,7 +328,7 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
     }
 
     override fun joinedRoom(iRoomInfo: IRoomInfo) {
-        if (iRoomInfo.getRoomSystemMsg().isNotEmpty()){
+        if (iRoomInfo.getRoomSystemMsg().isNotEmpty()) {
             val roomSystemMsgBean = RoomSystemMsgBean()
             roomSystemMsgBean.broadcast_notice_content = iRoomInfo.getRoomSystemMsg()
             dataChatList.add(roomSystemMsgBean)
@@ -307,6 +338,12 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
 
     }
 
+    override fun leaveRoom(iRoomInfo: IRoomInfo) {
+        dataChatList.clear()
+        chatAdapter.notifyDataSetChanged()
+
+    }
+
     override fun closeRoomed() {
         RoomTimer.timeTickList.remove(this)
     }
@@ -335,7 +372,7 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
     }
 
     override fun onTimeCount(time: Int) {
-        if (time % 30 == 0) {
+        if (time!=0 && time % 30 == 0) {
             SwagoRoomManager.iRoomInfo?.let {
                 roomVm.loadRoomData(it.getRoomId())
             }
@@ -344,7 +381,11 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
     }
 
 
-    private fun checkGameVersion(gameId: String, gamePackageUrl: String, gameVersionCode: String): Boolean {
+    private fun checkGameVersion(
+        gameId: String,
+        gamePackageUrl: String,
+        gameVersionCode: String
+    ): Boolean {
         if (gamePackageUrl.isEmpty() || gameVersionCode.isEmpty()) {
             return false
         }
@@ -384,26 +425,29 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
         }
         file.mkdirs()
 
-        val task = DownloadTask.Builder(gamePackageUrl,path,name).build()
-        task.enqueue(object:DownloadListener{
+        val task = DownloadTask.Builder(gamePackageUrl, path, name).build()
+        task.enqueue(object : DownloadListener {
             override fun taskStart(task: DownloadTask) {}
 
             override fun connectTrialStart(
                 task: DownloadTask,
                 requestHeaderFields: MutableMap<String, MutableList<String>>
-            ) {}
+            ) {
+            }
 
             override fun connectTrialEnd(
                 task: DownloadTask,
                 responseCode: Int,
                 responseHeaderFields: MutableMap<String, MutableList<String>>
-            ) {}
+            ) {
+            }
 
             override fun downloadFromBeginning(
                 task: DownloadTask,
                 info: BreakpointInfo,
                 cause: ResumeFailedCause
-            ) {}
+            ) {
+            }
 
             override fun downloadFromBreakpoint(task: DownloadTask, info: BreakpointInfo) {}
 
@@ -411,14 +455,16 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
                 task: DownloadTask,
                 blockIndex: Int,
                 requestHeaderFields: MutableMap<String, MutableList<String>>
-            ) {}
+            ) {
+            }
 
             override fun connectEnd(
                 task: DownloadTask,
                 blockIndex: Int,
                 responseCode: Int,
                 responseHeaderFields: MutableMap<String, MutableList<String>>
-            ) {}
+            ) {
+            }
 
             override fun fetchStart(task: DownloadTask, blockIndex: Int, contentLength: Long) {}
 
@@ -429,7 +475,7 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
             override fun taskEnd(task: DownloadTask, cause: EndCause, realCause: Exception?) {
                 GlobalScope.launch(Dispatchers.IO) {
                     val packagePath = path + File.separator + name
-                    FileUtil.upZipFile(packagePath,path + File.separator)
+                    FileUtil.upZipFile(packagePath, path + File.separator)
                     SpUtil.putInt(gameId, gameVersionCode.toInt())
                 }
             }

+ 10 - 9
room/src/main/java/com/swago/room/giftdandao/GiftDanDaoView.kt

@@ -8,6 +8,7 @@ import android.util.AttributeSet
 import android.view.LayoutInflater
 import android.view.View
 import android.view.animation.BounceInterpolator
+import android.view.animation.DecelerateInterpolator
 import android.widget.FrameLayout
 import com.bumptech.glide.Glide
 import com.swago.baseswago.model.live.gift.IMGiftModel
@@ -56,7 +57,7 @@ class GiftDanDaoView : FrameLayout {
             tvSenderName.text = imGiftModel.senderName
             tvSenderTo.text = AppContext.getContext().resources.getString(R.string.send_to).format(imGiftModel.receiverName)
             tvNum.text = "x${imGiftModel.giftNum}"
-            clRoot.visibility = View.VISIBLE
+            clItemGift.visibility = View.VISIBLE
             if (imCurrentGiftModel!=null&&imGiftModel.isCombo==1){
 
             }else{
@@ -65,8 +66,8 @@ class GiftDanDaoView : FrameLayout {
             }
             imCurrentGiftModel = imGiftModel
 
-            clRoot.removeCallbacks(showRunnable)
-            clRoot.postDelayed(showRunnable, 3000)
+            clItemGift.removeCallbacks(showRunnable)
+            clItemGift.postDelayed(showRunnable, 3000)
             
             if (imGiftModel.multiple>500){
                 clWinPrize.visibility = View.VISIBLE
@@ -81,9 +82,9 @@ class GiftDanDaoView : FrameLayout {
 
 
     private val giftEnterAnimator by lazy {
-        val tx = ObjectAnimator.ofFloat(binding!!.clRoot, "translationX", -binding!!.clRoot.width.toFloat(), 0f)
-        val ap = ObjectAnimator.ofFloat(binding!!.clRoot, "alpha", 0.5f, 1f)
-        tx.interpolator = BounceInterpolator()
+        val tx = ObjectAnimator.ofFloat(binding!!.clItemGift, "translationX", -binding!!.clItemGift.width.toFloat(), 0f)
+        val ap = ObjectAnimator.ofFloat(binding!!.clItemGift, "alpha", 0.5f, 1f)
+        tx.interpolator = DecelerateInterpolator()
         tx.duration = 400
         tx.repeatCount = 0
         ap.duration = 200
@@ -97,7 +98,7 @@ class GiftDanDaoView : FrameLayout {
         Runnable {
             clear()
             binding?.apply {
-                clRoot.translationX = -(clRoot.width).toFloat()
+                clItemGift.translationX = -(clItemGift.width).toFloat()
             }
         }
     }
@@ -115,9 +116,9 @@ class GiftDanDaoView : FrameLayout {
         imCurrentGiftModel=null
         binding?.apply {
             clWinPrize.visibility = View.INVISIBLE
-            clRoot.visibility = View.GONE
+            clItemGift.visibility = View.INVISIBLE
             clWinPrize.removeCallbacks(winPrizeRunnable)
-            clRoot.removeCallbacks(showRunnable)
+            clItemGift.removeCallbacks(showRunnable)
         }
     }
 

+ 21 - 20
room/src/main/java/com/swago/room/piaotiao/WaftView.kt

@@ -15,6 +15,8 @@ import com.swago.baseswago.model.live.gift.IMGiftModel
 import com.swago.baseswago.util.AppContext
 import com.swago.baseswago.util.DpPxUtil
 import com.swago.room.R
+import com.swago.room.databinding.ViewItemGiftBinding
+import com.swago.room.databinding.ViewWaftBinding
 import com.swago.room.widget.MarqueeTextView
 import java.util.*
 
@@ -27,9 +29,16 @@ class WaftView : FrameLayout {
     var isBusy = false
 
     private val imGiftModelList = LinkedList<IMGiftModel>()
+    private var binding : ViewWaftBinding? = null
 
     constructor(context: Context) : super(context)
-    constructor(context: Context, mAttributeSet: AttributeSet?) : super(context, mAttributeSet)
+    constructor(context: Context, mAttributeSet: AttributeSet?) : super(context, mAttributeSet){
+        initView(context)
+    }
+
+    private fun initView(context: Context) {
+        binding = ViewWaftBinding.inflate(LayoutInflater.from(context), this, true)
+    }
 
 
     fun addData(imGiftModel: IMGiftModel) {
@@ -60,8 +69,8 @@ class WaftView : FrameLayout {
             }
 
             override fun onAnimationEnd(animation: Animator?) {
-                removeAllViews()
                 animatorSet = null
+                binding?.ll?.visibility = View.INVISIBLE
                 loopNextWaft()
             }
 
@@ -69,6 +78,7 @@ class WaftView : FrameLayout {
             }
 
             override fun onAnimationStart(animation: Animator?) {
+                binding?.ll?.visibility = View.VISIBLE
             }
         })
 
@@ -81,34 +91,25 @@ class WaftView : FrameLayout {
             return
         }
         val next = imGiftModelList.pop()
-        val tv: MarqueeTextView
-
-        val view: View = LayoutInflater.from(context)
-            .inflate(R.layout.view_waft, this, false)
-        tv = view.findViewById(R.id.marqueeTextView)
-        val linearLayout = view.findViewById<LinearLayout>(R.id.ll)
-        val layoutParams = linearLayout.layoutParams
-        layoutParams.height = DpPxUtil.dip2px(50f)
-        linearLayout.layoutParams = layoutParams
-
         val sendName = "<font color='#FFDB43'>${next.senderName}</font>"
         val giftName = "<font color='#FFDB43'>${next.giftName}</font>"
         val receiverName = "<font color='#FFDB43'>${next.receiverName}</font>"
-        tv.text = Html.fromHtml(AppContext.getContext().resources.getString(R.string.big_gift_msg).format(sendName,giftName,receiverName))
-        addView(view)
-        tv.post {
-            tv.startScroll()
+        binding?.marqueeTextView?.text = Html.fromHtml(AppContext.getContext().resources.getString(R.string.big_gift_msg).format(sendName,giftName,receiverName))
+        binding?.marqueeTextView?.post {
+            binding?.marqueeTextView?.startScroll()
+        }
+        binding?.let {
+            animatorSet = createAnim(it.ll)
+            animatorSet?.start()
         }
-        animatorSet = createAnim(view)
-        animatorSet?.start()
+
     }
 
 
     fun clear() {
         imGiftModelList.clear()
-        removeAllViews()
         animatorSet = null
-
+        binding?.ll?.visibility = View.INVISIBLE
     }
 
 }

+ 2 - 2
room/src/main/java/com/swago/room/ranklist/RankListAdapter.kt

@@ -18,12 +18,12 @@ class RankListAdapter  : BaseQuickAdapter<RankListModel.ListBean, BaseViewHolder
 
     override fun convert(helper: BaseViewHolder, item: RankListModel.ListBean) {
         helper.apply {
-            val ivAvatar = itemView.findViewById<CircleImageView>(R.id.tvLevel)
+            val ivAvatar = itemView.findViewById<CircleImageView>(R.id.ivAvatar)
             Glide.with(itemView.context).load(item.user_head_img_url)
                 .placeholder(R.mipmap.default_avatar)
                 .error(R.mipmap.default_avatar).centerCrop().into(ivAvatar)
 
-            val tvLevel = itemView.findViewById<SwagoLevelView>(R.id.ivAvatar)
+            val tvLevel = itemView.findViewById<SwagoLevelView>(R.id.tvLevel)
             tvLevel.setUserLevel(item.user_wealth_level.toInt())
 
             setText(R.id.tvName,item.user_name)

+ 56 - 46
room/src/main/java/com/swago/room/user/UserRoomActivity.kt

@@ -3,9 +3,13 @@ package com.swago.room.user
 import android.content.Intent
 import android.view.View
 import android.view.ViewGroup
+import android.view.ViewStub
 import android.view.WindowManager
+import android.widget.FrameLayout
+import android.widget.ImageView
 import android.widget.Toast
 import androidx.activity.viewModels
+import androidx.viewpager.widget.ViewPager
 import com.alibaba.android.arouter.facade.annotation.Autowired
 import com.alibaba.android.arouter.facade.annotation.Route
 import com.alibaba.android.arouter.launcher.ARouter
@@ -21,20 +25,20 @@ import com.swago.baseswago.baseroom.SwagoRoomManager
 import com.swago.baseswago.baseroom.ui.AbsUserActivity
 import com.swago.baseswago.constant.ARouteConstant
 import com.swago.baseswago.databinding.ActivityAbsRoomUserBinding
-import com.swago.baseswago.dialog.ReportDialog
 import com.swago.baseswago.model.MomentModel
 import com.swago.baseswago.util.AppContext
+import com.swago.baseswago.util.LogUtil
 import com.swago.baseswago.util.NoDoubleClickListener
 import com.swago.baseswago.util.UserInfo
 import com.swago.room.R
 import com.swago.room.base.NoContentFragment
 import com.swago.room.bean.UserRoomModel
 import com.swago.room.data.RoomDataManager
-import com.swago.room.databinding.LayoutUserRoomBinding
 import com.swago.room.service.AgoraForegroundService
 import com.swago.room.vm.MsgVm
 import com.swago.room.vm.RoomOtherVm
 import com.swago.room.vm.RoomVm
+import com.swago.room.widget.UserShowAnchorCloseView
 import jp.wasabeef.glide.transformations.BlurTransformation
 import java.util.concurrent.CopyOnWriteArrayList
 
@@ -65,15 +69,23 @@ class UserRoomActivity : AbsUserActivity<ActivityAbsRoomUserBinding, UserRoomMod
     @JvmField
     var data: ArrayList<MomentModel>? = null
 
-    private var bindingCoverView: LayoutUserRoomBinding? = null
-
     private var userRoomFragment: UserRoomFragment? = null
 
+    private var ivClose: ImageView? = null
+    private var ivCover: ImageView? = null
+    private var userShowAnchorCloseView: UserShowAnchorCloseView? = null
+    private var flRoot: FrameLayout? = null
+
     override val roomCoverView: ViewGroup by lazy {
-        bindingCoverView = LayoutUserRoomBinding.inflate(layoutInflater)
-        bindingCoverView!!.viewPager.adapter = adapter
-        bindingCoverView!!.viewPager.currentItem = 1
-        bindingCoverView!!.root
+        val userRoomView = layoutInflater.inflate(R.layout.layout_user_room, null) as ViewGroup
+        val viewPager = userRoomView.findViewById<ViewPager>(R.id.viewPager)
+        ivClose = userRoomView.findViewById(R.id.ivClose)
+        userShowAnchorCloseView = userRoomView.findViewById(R.id.userShowAnchorCloseView)
+        ivCover = userRoomView.findViewById(R.id.ivCover)
+        flRoot = userRoomView.findViewById(R.id.flRoot)
+        viewPager.adapter = adapter
+        viewPager.currentItem = 1
+        userRoomView
     }
 
 
@@ -98,13 +110,11 @@ class UserRoomActivity : AbsUserActivity<ActivityAbsRoomUserBinding, UserRoomMod
         AgoraManager.setVideoConfiguration()
         AgoraManager.setClientRole(RoleType.user)
 
-        bindingCoverView?.apply {
-            ivClose.setOnClickListener(object : NoDoubleClickListener() {
-                override fun onClick() {
-                    SwagoRoomManager.closeRoom()
-                }
-            })
-        }
+        ivClose?.setOnClickListener(object : NoDoubleClickListener() {
+            override fun onClick() {
+                SwagoRoomManager.closeRoom()
+            }
+        })
     }
 
     override fun loadData() {
@@ -112,9 +122,8 @@ class UserRoomActivity : AbsUserActivity<ActivityAbsRoomUserBinding, UserRoomMod
 
     override fun initLiveData() {
         msgVm.anchorRoomClosed = {
-            userRoomFragment?.dismissDialog()
-            bindingCoverView?.userShowAnchorCloseView?.visibility = View.VISIBLE
-            it?.let { bindingCoverView?.userShowAnchorCloseView?.setData(it) }
+            userShowAnchorCloseView?.visibility = View.VISIBLE
+            it?.let { userShowAnchorCloseView?.setData(it) }
         }
 
         msgVm.kickFromRoom = {
@@ -127,48 +136,47 @@ class UserRoomActivity : AbsUserActivity<ActivityAbsRoomUserBinding, UserRoomMod
         }
 
         roomVm.roomClosedLiveData.observe(this) {
-            bindingCoverView?.userShowAnchorCloseView?.visibility = View.VISIBLE
-            it?.let { bindingCoverView?.userShowAnchorCloseView?.setData(it) }
+            userShowAnchorCloseView?.visibility = View.VISIBLE
+            it?.let { userShowAnchorCloseView?.setData(it) }
         }
     }
 
     override fun changeRoom(iRoomInfo: IRoomInfo) {
         isRobot = iRoomInfo.getIsRobot()
-        bindingCoverView?.let {
+        ivCover?.let {
             Glide.with(this)
                 .load(iRoomInfo.getRoomCover())
                 .placeholder(R.mipmap.default_avatar)
                 .error(R.mipmap.default_avatar)
                 .dontAnimate()
                 .apply(RequestOptions.bitmapTransform(BlurTransformation(5, 100)))
-                .into(it.ivCover)
-            it.ivCover.visibility = View.VISIBLE
-            it.userShowAnchorCloseView.visibility = View.GONE
+                .into(it)
         }
+        ivCover?.visibility = View.VISIBLE
+        userShowAnchorCloseView?.visibility = View.INVISIBLE
     }
 
     override fun leaveRoom(iRoomInfo: IRoomInfo) {
-        AgoraManager.changeRoom(iRoomInfo.getAnchorId().toInt(), bindingCoverView?.flRoot)
+        AgoraManager.changeRoom(iRoomInfo.getAnchorId().toInt(), flRoot)
     }
 
     override fun joinedRoom(iRoomInfo: IRoomInfo) {
-        bindingCoverView?.let {
-            if (iRoomInfo.getIsRobot()) {
-                it.ivCover.visibility = View.GONE
-            }
-            UserInfo.getUserInfo()?.let { userInfoModel ->
-                AgoraManager.joinChannel(
-                    iRoomInfo.getChannelName(),
-                    userInfoModel.id.toInt(),
-                    iRoomInfo.getAgoraToken()
-                )
-               if (!isRobot){
-                   AgoraManager.setupRemoteVideo(
-                       this@UserRoomActivity,
-                       iRoomInfo.getAnchorId().toInt(),
-                       it.flRoot
-                   )
-               }
+        if (iRoomInfo.getIsRobot()) {
+            ivCover?.visibility = View.GONE
+        }
+        UserInfo.getUserInfo()?.let { userInfoModel ->
+            AgoraManager.joinChannel(
+                iRoomInfo.getChannelName(),
+                userInfoModel.id.toInt(),
+                iRoomInfo.getAgoraToken()
+            )
+            if (!isRobot) {
+                flRoot?.let {
+                    AgoraManager.setupRemoteVideo(
+                        this@UserRoomActivity,
+                        iRoomInfo.getAnchorId().toInt(), it
+                    )
+                }
             }
         }
     }
@@ -207,10 +215,12 @@ class UserRoomActivity : AbsUserActivity<ActivityAbsRoomUserBinding, UserRoomMod
 
     private var isRobot = false
     override fun onFirstRemoteVideoDecoded(uid: Int, width: Int, height: Int, elapsed: Int) {
-        bindingCoverView?.let {
-            if (!isRobot) {
-                it.ivCover.visibility = View.GONE
-            }
+        if (!isRobot) {
+            ivCover?.visibility = View.GONE
         }
     }
+
+    override fun onConnectionStateChanged(state: Int, reason: Int) {
+        LogUtil.d("网络变更", "$state----$reason")
+    }
 }

+ 1 - 13
room/src/main/java/com/swago/room/user/UserRoomFragment.kt

@@ -44,8 +44,6 @@ class UserRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
 
     private var isForbid = false //是否被禁言
 
-    private var roomUserList  = CopyOnWriteArrayList<RoomUserModel.ListBean>()
-
     override fun initOther() {
         super.initOther()
         roomOtherVm.getGameList()
@@ -190,7 +188,7 @@ class UserRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
     }
 
     override fun leaveRoom(iRoomInfo: IRoomInfo) {
-
+        super.leaveRoom(iRoomInfo)
     }
 
     override fun joinedRoom(iRoomInfo: IRoomInfo) {
@@ -217,14 +215,4 @@ class UserRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
     override val iFooter: IFooter by lazy {
         UserFooterView(requireContext())
     }
-
-    override fun updateUserJoinRoom(userJoinRoomBean: UserJoinRoomBean) {
-        val data = RoomUserModel.ListBean()
-        data.user_account = userJoinRoomBean.senderCode
-        data.user_head_img_url = userJoinRoomBean.userAvatar
-        data.user_id = userJoinRoomBean.senderId
-        data.user_name = userJoinRoomBean.senderName
-        roomUserList.add(0,data)
-        iHeader.updateRoomUser(roomUserList)
-    }
 }

+ 15 - 3
room/src/main/java/com/swago/room/vm/MsgVm.kt

@@ -16,6 +16,7 @@ import com.swago.baseswago.model.im.CusNewMsgBean
 import com.swago.baseswago.model.im.RoomChatMsgBean
 import com.swago.baseswago.im.ImConstant.room_chat_text
 import com.swago.baseswago.im.ImConstant.svg_gift
+import com.swago.baseswago.im.ImConstant.user_exit_room
 import com.swago.baseswago.im.ImConstant.user_join_room
 import com.swago.baseswago.inter.ApiManager
 import com.swago.baseswago.model.im.AnchorRoomClosedBean
@@ -45,7 +46,7 @@ class MsgVm (application: Application) : AbsMsgVm(application){
 
     var forbidSpeakOrCancel:((cancel:Boolean)->Unit)? = null
 
-    var updateUserRoom:((userJoinRoomBean:UserJoinRoomBean)->Unit)? = null
+    var updateUserRoom:((userJoinRoomBean:UserJoinRoomBean,isJoinOrExit:Boolean)->Unit)? = null
 
     /**
      * 播放svg动画
@@ -77,7 +78,19 @@ class MsgVm (application: Application) : AbsMsgVm(application){
                     it.data?.let {
                         newChatMsgFun?.invoke(it)
                         updateHotValue?.invoke(it.hotValue)
-                        updateUserRoom?.invoke(it)
+                        updateUserRoom?.invoke(it,true)
+                    }
+
+                }
+            }
+        }
+
+        imGroupNewMsgListener.handleMsgType<CusNewMsgBean<UserJoinRoomBean>>(user_exit_room){
+            if (it.getGroupId() == SwagoRoomManager.iRoomInfo?.getRoomGroupId()?:""){
+                if (SwagoRoomManager.roleType == RoleType.user || it.data?.senderCode != UserInfo.getUserInfo()?.user_account) {
+                    it.data?.let {
+                        updateHotValue?.invoke(it.hotValue)
+                        updateUserRoom?.invoke(it,false)
                     }
 
                 }
@@ -104,7 +117,6 @@ class MsgVm (application: Application) : AbsMsgVm(application){
                 }
             }
         }
-
         imGroupNewMsgListener.handleMsgType<CusNewMsgBean<IMGiftModel>>(lucky_gift){
             SwagoRoomManager.iRoomInfo?.let { iRoomInfo ->
                 if (isReady){

+ 0 - 1
room/src/main/java/com/swago/room/widget/UserHeaderView.kt

@@ -47,7 +47,6 @@ class UserHeaderView : ConstraintLayout, IRoomActiveListener,IHeader {
     }
 
     private fun initView() {
-        visibility = View.GONE
         SwagoRoomManager.addListener(this)
         binding = LayoutUserHeaderViewBinding.inflate(LayoutInflater.from(context), this, true)
         binding.rvUser.layoutManager = LinearLayoutManager(context,RecyclerView.HORIZONTAL,false)

+ 7 - 12
room/src/main/java/com/swago/room/widget/UserShowAnchorCloseView.kt

@@ -23,17 +23,12 @@ class UserShowAnchorCloseView : ConstraintLayout {
 
     private lateinit var binding : DialogUserForAnchorCloseBinding
 
-    constructor(context: Context) : this(context, null)
-    constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
-    constructor(context: Context, attrs: AttributeSet?, defStyle: Int) : super(
-        context,
-        attrs,
-        defStyle
-    ) {
-        initView()
+    constructor(context: Context) : super(context)
+    constructor(context: Context, mAttributeSet: AttributeSet?) : super(context, mAttributeSet){
+        initView(context)
     }
 
-    private fun initView() {
+    private fun initView(context: Context) {
         binding = DialogUserForAnchorCloseBinding.inflate(LayoutInflater.from(context), this, true)
         binding.tvBack.setOnClickListener(object : NoDoubleClickListener() {
             override fun onClick() {
@@ -44,6 +39,9 @@ class UserShowAnchorCloseView : ConstraintLayout {
 
     fun setData(anchorRoomClosedBean: AnchorRoomClosedBean){
         RoomTimer.clear()
+        binding.tvName.text = anchorRoomClosedBean.senderName
+        binding.tvID.text = AppContext.getContext().resources.getString(R.string.id_x)
+            .format(anchorRoomClosedBean.userCode)
         Glide.with(this).load(anchorRoomClosedBean.userAvatar)
             .placeholder(R.mipmap.default_avatar)
             .error(R.mipmap.default_avatar).into(binding.ivAvatar)
@@ -54,9 +52,6 @@ class UserShowAnchorCloseView : ConstraintLayout {
             .dontAnimate()
             .apply(RequestOptions.bitmapTransform(BlurTransformation(5, 100)))
             .into(binding.ivCloseBg)
-        binding.tvName.text = anchorRoomClosedBean.senderName
-        binding.tvID.text = AppContext.getContext().resources.getString(R.string.id_x)
-            .format(anchorRoomClosedBean.userCode)
     }
 
 }

+ 6 - 4
room/src/main/res/layout/dialog_user_for_anchor_close.xml

@@ -41,8 +41,9 @@
         android:layout_marginTop="8dp"
         android:textSize="16dp"
         android:textColor="#fff"
-        tools:text = "Swago"
-        android:layout_width="wrap_content"
+        android:gravity="center"
+        android:layout_width="0dp"
+        tools:text="visible"
         android:layout_height="wrap_content"/>
 
     <TextView
@@ -52,9 +53,10 @@
         app:layout_constraintEnd_toEndOf="parent"
         android:layout_marginTop="8dp"
         android:textSize="12dp"
+        android:gravity="center"
         android:textColor="#fff"
-        tools:text = "Swago"
-        android:layout_width="wrap_content"
+        tools:text="visible"
+        android:layout_width="0dp"
         android:layout_height="wrap_content"/>
 
     <TextView

+ 12 - 5
room/src/main/res/layout/fragment_base_com.xml

@@ -63,21 +63,24 @@
         app:layout_constraintVertical_chainStyle="packed"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toTopOf="@+id/danDaoView2"
-        android:layout_width="match_parent"
+        app:layout_constraintStart_toStartOf="parent"
+        android:layout_width="wrap_content"
         android:layout_height="65dp"/>
 
     <com.swago.room.giftdandao.GiftDanDaoView
         android:id="@+id/danDaoView2"
         app:layout_constraintTop_toBottomOf="@+id/danDaoView"
         app:layout_constraintBottom_toTopOf="@+id/danDaoView3"
-        android:layout_width="match_parent"
+        app:layout_constraintStart_toStartOf="parent"
+        android:layout_width="wrap_content"
         android:layout_height="65dp"/>
 
     <com.swago.room.giftdandao.GiftDanDaoView
         android:id="@+id/danDaoView3"
         app:layout_constraintTop_toBottomOf="@+id/danDaoView2"
         app:layout_constraintBottom_toBottomOf="parent"
-        android:layout_width="match_parent"
+        app:layout_constraintStart_toStartOf="parent"
+        android:layout_width="wrap_content"
         android:layout_height="65dp"/>
 
 
@@ -99,15 +102,19 @@
     <com.swago.room.piaotiao.WaftView
         android:id="@+id/waftView"
         android:layout_marginTop="60dp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintTop_toTopOf="parent"
-        android:layout_width="match_parent"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"/>
 
     <com.swago.room.piaotiao.WaftView
         android:id="@+id/waftView2"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
         android:layout_marginTop="105dp"
         app:layout_constraintTop_toTopOf="parent"
-        android:layout_width="match_parent"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"/>
 
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 1 - 1
room/src/main/res/layout/layout_svg_dan_dao_view.xml

@@ -3,8 +3,8 @@
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/cl"
-    android:visibility="gone"
     tools:visibility="visible"
+    android:visibility="invisible"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools">
 

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

@@ -106,6 +106,7 @@
         app:layout_constraintStart_toStartOf="@+id/cl"
         android:layout_marginTop="10dp"
         android:gravity="center"
+        android:maxLines="1"
         app:layout_constraintTop_toBottomOf="@+id/cl"
         android:drawableStart="@mipmap/icon_diamond"
         android:layout_width="wrap_content"
@@ -119,6 +120,7 @@
         android:paddingStart="10dp"
         android:paddingEnd="10dp"
         android:drawablePadding="4dp"
+        android:maxLines="1"
         android:background="@drawable/shape_80000000_20"
         app:layout_constraintStart_toEndOf="@+id/tvIncome"
         android:layout_marginTop="10dp"

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

@@ -2,6 +2,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:tools="http://schemas.android.com/tools"
+    tools:viewBindingIgnore="true"
     xmlns:app="http://schemas.android.com/apk/res-auto">
 
     <FrameLayout
@@ -23,7 +25,7 @@
     <ImageView
         android:id="@+id/ivClose"
         android:layout_marginEnd="10dp"
-        android:layout_marginTop="40dp"
+        android:layout_marginTop="25dp"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         android:src="@mipmap/close"
@@ -33,11 +35,11 @@
 
     <com.swago.room.widget.UserShowAnchorCloseView
         android:id="@+id/userShowAnchorCloseView"
+        android:visibility="invisible"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
-        android:visibility="gone"
         android:layout_width="0dp"
         android:layout_height="0dp"/>
 

+ 9 - 9
room/src/main/res/layout/view_item_gift.xml

@@ -2,9 +2,9 @@
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:visibility="gone"
+    android:id="@+id/clItemGift"
+    android:visibility="invisible"
     tools:visibility="visible"
-    android:id="@+id/clRoot"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools">
 
@@ -22,7 +22,7 @@
             android:layout_marginStart="2dp"
             android:layout_marginTop="2dp"
             android:layout_marginBottom="2dp"
-            tools:src="@mipmap/default_avatar"
+            android:src="@mipmap/default_avatar"
             app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintStart_toStartOf="parent"
             android:layout_width="36dp"
@@ -32,7 +32,7 @@
             android:id="@+id/tvSenderName"
             android:textSize="14dp"
             android:textColor="#fff"
-            tools:text = "Swago"
+            android:text = "Swago"
             android:maxWidth="80dp"
             android:maxLines="1"
             android:layout_marginStart="5dp"
@@ -47,7 +47,7 @@
             android:id="@+id/tvSenderTo"
             android:textSize="11dp"
             android:textColor="#fff"
-            tools:text = "Swago"
+            android:text = "Swago"
             android:maxWidth="80dp"
             android:maxLines="1"
             android:layout_marginStart="5dp"
@@ -59,7 +59,7 @@
 
         <ImageView
             android:id="@+id/ivGiftIcon"
-            tools:src="@mipmap/default_avatar"
+            android:src="@mipmap/default_avatar"
             app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintStart_toStartOf="parent"
             android:layout_marginStart="128dp"
@@ -75,7 +75,7 @@
         android:id="@+id/tvNum"
         android:textSize="18dp"
         android:textColor="#fff"
-        tools:text="x12"
+        android:text="x12"
         android:layout_marginStart="5dp"
         android:textStyle="bold|italic"
         app:layout_constraintTop_toTopOf="@+id/clContainer"
@@ -90,7 +90,7 @@
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/clContainer"
         tools:visibility="visible"
-        android:visibility="gone"
+        android:visibility="invisible"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content">
 
@@ -110,7 +110,7 @@
             app:layout_constraintEnd_toEndOf="@+id/iv"
             app:layout_constraintTop_toTopOf="@+id/iv"
             app:layout_constraintBottom_toBottomOf="@+id/iv"
-            tools:text="Win 500x coins"
+            android:text="Win 500x coins"
             android:layout_marginStart="32dp"
             android:textColor="#fff"
             android:textSize="11dp"

+ 3 - 3
room/src/main/res/layout/view_waft.xml

@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="350dp"
-    android:layout_height="35dp"
+    android:layout_height="wrap_content"
     xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:translationX="1000dp"
-    tools:translationX="0dp"
     android:id="@+id/ll"
+    android:visibility="invisible"
+    tools:visibility="visible"
     android:layout_gravity="center_horizontal"
     xmlns:tools="http://schemas.android.com/tools"
     android:orientation="horizontal"

+ 1 - 1
tuikit/build.gradle

@@ -45,7 +45,7 @@ dependencies {
     implementation 'com.github.promeg:tinypinyin:1.0.0' // ~80KB
     implementation 'com.google.code.gson:gson:2.8.5'
 
-    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
+    implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
     implementation project(path: ':baseswago')
 }