honghengqiang 3 years ago
parent
commit
737ff56bd0

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

@@ -23,5 +23,6 @@ interface IRoomInfo {
     fun getGameType():Int
     fun getGameVersion():Int
     fun getGameDownLoadUrl():String
+    fun getRoomSystemMsg():String
 
 }

+ 1 - 0
baseswago/src/main/java/com/swago/baseswago/im/RoomMsgType.kt

@@ -8,5 +8,6 @@ object RoomMsgType {
 
     const val ROOM_CHAT_TEXT = 1
     const val USER_ENTER_ROOM = 2
+    const val SYSTEM_MESSAGE = 3
 
 }

+ 50 - 0
baseswago/src/main/java/com/swago/baseswago/model/im/RoomSystemMsgBean.java

@@ -0,0 +1,50 @@
+package com.swago.baseswago.model.im;
+
+import androidx.annotation.NonNull;
+
+import com.swago.baseswago.im.IRoomChat;
+import com.swago.baseswago.im.RoomMsgType;
+
+/**
+ * @date 2022/2/14 22:12
+ * description:
+ */
+public class RoomSystemMsgBean implements IRoomChat {
+
+   private String broadcast_notice_content;
+
+   @NonNull
+   @Override
+   public String getSenderName() {
+      return "";
+   }
+
+   @NonNull
+   @Override
+   public String getMsgContent() {
+      return broadcast_notice_content;
+   }
+
+   @Override
+   public int getMsgType() {
+      return RoomMsgType.SYSTEM_MESSAGE;
+   }
+
+   @Override
+   public int getUserLevel() {
+      return 0;
+   }
+
+   @Override
+   public int getIsBenefit() {
+      return 0;
+   }
+
+   public String getBroadcast_notice_content() {
+      return broadcast_notice_content;
+   }
+
+   public void setBroadcast_notice_content(String broadcast_notice_content) {
+      this.broadcast_notice_content = broadcast_notice_content;
+   }
+}

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

@@ -38,6 +38,7 @@ public class RoomModel {
     private String game_icon_url; //游戏图标
     private String game_url;//游戏页面地址
     private String game_api_url;//游戏API请求地址
+    private String broadcast_notice_content;
 
     public String getRtc_token() {
         return rtc_token;
@@ -190,4 +191,12 @@ public class RoomModel {
     public void setGame_api_url(String game_api_url) {
         this.game_api_url = game_api_url;
     }
+
+    public String getBroadcast_notice_content() {
+        return broadcast_notice_content;
+    }
+
+    public void setBroadcast_notice_content(String broadcast_notice_content) {
+        this.broadcast_notice_content = broadcast_notice_content;
+    }
 }

+ 16 - 5
home/src/main/java/com/swago/home/innerhome/FollowFragment.kt

@@ -6,6 +6,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
 import com.alibaba.android.arouter.launcher.ARouter
 import com.chad.library.adapter.base.BaseQuickAdapter
+import com.swago.baseswago.PersonDataDFragment
 import com.swago.baseswago.constant.ARouteConstant
 import com.swago.baseswago.cusview.SwagoRecyclerView
 import com.swago.baseswago.fragment.BaseListFragment
@@ -39,11 +40,21 @@ class FollowFragment : BaseListFragment<FragmentHotBinding, MomentModel>(){
     override fun initViewData() {
         smartRecyclerView.recyclerView?.addItemDecoration(HomeGridItemDecoration())
         adapter.setOnItemClickListener { _, _, position ->
-            ARouter.getInstance()
-                .build(ARouteConstant.Room.user)
-                .withInt("position",position)
-                .withParcelableArrayList("data",adapter.data as ArrayList<MomentModel>)
-                .navigation()
+            if (adapter.data.size>position){
+                if (adapter.data[position].user_broadcast_status == 1){
+                    ARouter.getInstance()
+                        .build(ARouteConstant.Room.user)
+                        .withInt("position",position)
+                        .withParcelableArrayList("data",adapter.data as ArrayList<MomentModel>)
+                        .navigation()
+                }else{
+                    PersonDataDFragment.newInstance(adapter.data[position].id,
+                        isAnchor = true,
+                        inRoom = false
+                    ).show(childFragmentManager,"PersonDataDFragment")
+                }
+            }
+
         }
     }
 

+ 16 - 1
home/src/main/java/com/swago/home/search/SearchActivity.kt

@@ -6,10 +6,12 @@ import androidx.activity.viewModels
 import androidx.recyclerview.widget.GridLayoutManager
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
+import com.alibaba.android.arouter.launcher.ARouter
 import com.chad.library.adapter.base.BaseQuickAdapter
 import com.swago.baseswago.PersonDataDFragment
 import com.swago.baseswago.UserVm
 import com.swago.baseswago.activity.BaseListActivity
+import com.swago.baseswago.constant.ARouteConstant
 import com.swago.baseswago.cusview.SwagoRecyclerView
 import com.swago.baseswago.model.MomentModel
 import com.swago.baseswago.model.home.HomeModel
@@ -68,7 +70,20 @@ class SearchActivity : BaseListActivity<ActivitySearchBinding, MomentModel>() {
         }
 
         adapter.setOnItemClickListener { _, _, position ->
-            PersonDataDFragment.newInstance(adapter.data[position].id).show(supportFragmentManager,"PersonDataDFragment")
+            if (adapter.data.size>position){
+                if (adapter.data[position].user_broadcast_status == 1){
+                    ARouter.getInstance()
+                        .build(ARouteConstant.Room.user)
+                        .withInt("position",position)
+                        .withParcelableArrayList("data",adapter.data as ArrayList<MomentModel>)
+                        .navigation()
+                }else{
+                    PersonDataDFragment.newInstance(adapter.data[position].id,
+                        isAnchor = true,
+                        inRoom = false
+                    ).show(supportFragmentManager,"PersonDataDFragment")
+                }
+            }
         }
     }
 

+ 0 - 1
home/src/main/res/layout/activity_search.xml

@@ -57,7 +57,6 @@
 
         <com.swago.baseswago.cusview.SwagoRecyclerView
             android:id="@+id/swagoRv"
-            android:layout_marginTop="20dp"
             android:layout_width="match_parent"
             android:background="@drawable/shape_white_top_20"
             android:layout_height="match_parent"/>

+ 1 - 1
home/src/main/res/layout/fragment_home.xml

@@ -43,7 +43,7 @@
         android:layout_marginEnd="10dp"
         android:background="@drawable/shape_9ffd88_6ef2df_10"
         android:text="@string/live"
-        android:layout_width="65dp"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"/>
 
     <androidx.viewpager.widget.ViewPager

+ 4 - 0
room/src/main/java/com/swago/room/adapter/RoomChatAdapter.kt

@@ -75,6 +75,10 @@ class RoomChatAdapter :
                     tvContent.text = span
                 }
 
+                RoomMsgType.SYSTEM_MESSAGE -> {
+                    setText(R.id.tvContent, item.getMsgContent())
+                    setBackgroundRes(R.id.tvContent, R.drawable.shape_4bce98_20)
+                }
                 RoomMsgType.USER_ENTER_ROOM -> {
                     setText(R.id.tvContent, "${item.getSenderName()} ${item.getMsgContent()}")
                     when (item.getUserLevel()) {

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

@@ -70,6 +70,7 @@ class AnchorRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
     }
 
     override fun joinedRoom(iRoomInfo: IRoomInfo) {
+        super.joinedRoom(iRoomInfo)
     }
 
     override fun endRoom(iRoomInfo: IRoomInfo?) {

+ 13 - 0
room/src/main/java/com/swago/room/base/BaseComFragment.kt

@@ -16,11 +16,13 @@ import com.liulishuo.okdownload.core.breakpoint.BreakpointInfo
 import com.liulishuo.okdownload.core.cause.EndCause
 import com.liulishuo.okdownload.core.cause.ResumeFailedCause
 import com.swago.baseswago.baseroom.IRoomActiveListener
+import com.swago.baseswago.baseroom.IRoomInfo
 import com.swago.baseswago.baseroom.RoomTimer
 import com.swago.baseswago.baseroom.SwagoRoomManager
 import com.swago.baseswago.constant.UrlConstant
 import com.swago.baseswago.fragment.BaseXFragment
 import com.swago.baseswago.im.IRoomChat
+import com.swago.baseswago.model.im.RoomSystemMsgBean
 import com.swago.baseswago.util.*
 import com.swago.room.R
 import com.swago.room.adapter.RoomChatAdapter
@@ -227,6 +229,17 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
         }
     }
 
+    override fun joinedRoom(iRoomInfo: IRoomInfo) {
+        if (iRoomInfo.getRoomSystemMsg().isNotEmpty()){
+            val roomSystemMsgBean = RoomSystemMsgBean()
+            roomSystemMsgBean.broadcast_notice_content = iRoomInfo.getRoomSystemMsg()
+            dataChatList.add(roomSystemMsgBean)
+            chatAdapter.notifyDataSetChanged()
+        }
+
+
+    }
+
     override fun closeRoomed() {
         RoomTimer.timeTickList.remove(this)
     }

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

@@ -99,4 +99,8 @@ class UserRoomModel :  IRoomInfo{
     override fun getGameDownLoadUrl(): String {
         return roomModel?.game_down_url?:""
     }
+
+    override fun getRoomSystemMsg(): String {
+        return roomModel?.broadcast_notice_content?:""
+    }
 }

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

@@ -3,6 +3,7 @@ package com.swago.room.ranklist
 import com.bumptech.glide.Glide
 import com.chad.library.adapter.base.BaseQuickAdapter
 import com.chad.library.adapter.base.BaseViewHolder
+import com.swago.baseswago.cusview.SwagoLevelView
 import com.swago.baseswago.model.live.RankListModel
 import com.swago.baseswago.util.AppContext
 import com.swago.baseswago.util.UserInfo
@@ -17,12 +18,14 @@ class RankListAdapter  : BaseQuickAdapter<RankListModel.ListBean, BaseViewHolder
 
     override fun convert(helper: BaseViewHolder, item: RankListModel.ListBean) {
         helper.apply {
-            val ivAvatar = itemView.findViewById<CircleImageView>(R.id.ivAvatar)
+            val ivAvatar = itemView.findViewById<CircleImageView>(R.id.tvLevel)
             Glide.with(itemView.context).load(item.user_head_img_url).centerCrop().into(ivAvatar)
 
+            val tvLevel = itemView.findViewById<SwagoLevelView>(R.id.ivAvatar)
+            tvLevel.setUserLevel(item.user_wealth_level.toInt())
+
             setText(R.id.tvName,item.user_name)
             setText(R.id.tvIncomeValue,item.total_coins)
-            setText(R.id.tvLevel,AppContext.getContext().resources.getString(R.string.level).format(item.user_wealth_level))
 
             UserInfo.getUserInfo()?.let {
                 when(it.user_type){

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

@@ -188,6 +188,7 @@ class UserRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
     }
 
     override fun joinedRoom(iRoomInfo: IRoomInfo) {
+        super.joinedRoom(iRoomInfo)
         UserInfo.getUserInfo()?.let {
             if (it.id.isNotEmpty()) {
                 SwagoRoomManager.iRoomInfo?.let { iRoomInfo ->

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

@@ -67,18 +67,19 @@ class RoomVm(application: Application) : AbsRoomVm(application) {
             requestError {
                 if (it is SwagoException) {
                     if (it.code == 504) {
-
-                        SwagoRoomManager.iRoomInfo?.let { iRoomInfo ->
-                            if (iRoomInfo is UserRoomModel){
-                                val anchorRoomClosedBean = AnchorRoomClosedBean()
-                                anchorRoomClosedBean.senderName = iRoomInfo.momentModel?.user_name
-                                anchorRoomClosedBean.userAvatar = iRoomInfo.momentModel?.user_head_img_url
-                                anchorRoomClosedBean.userCode = iRoomInfo.momentModel?.user_account
-                                roomClosedLiveData.value = anchorRoomClosedBean
+                        if (SwagoRoomManager.iRoomInfo == null){
+                            SwagoRoomManager.closeRoom()
+                        }else{
+                            SwagoRoomManager.iRoomInfo?.let { iRoomInfo ->
+                                if (iRoomInfo is UserRoomModel){
+                                    val anchorRoomClosedBean = AnchorRoomClosedBean()
+                                    anchorRoomClosedBean.senderName = iRoomInfo.momentModel?.user_name
+                                    anchorRoomClosedBean.userAvatar = iRoomInfo.momentModel?.user_head_img_url
+                                    anchorRoomClosedBean.userCode = iRoomInfo.momentModel?.user_account
+                                    roomClosedLiveData.value = anchorRoomClosedBean
+                                }
                             }
                         }
-
-
                     } else {
                         Toast.makeText(AppContext.getContext(), it.message, Toast.LENGTH_SHORT)
                             .show()
@@ -133,9 +134,7 @@ class RoomVm(application: Application) : AbsRoomVm(application) {
         leaveCurrentRoom(iRoomInfo)
     }
 
-    override fun joinedRoom(iRoomInfo: IRoomInfo) {
-        loadRoomData(iRoomInfo.getRoomId())
-    }
+    override fun joinedRoom(iRoomInfo: IRoomInfo) {}
 
     override fun endRoom(iRoomInfo: IRoomInfo?) {
 

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

@@ -6,6 +6,9 @@ import android.view.LayoutInflater
 import android.view.View
 import androidx.constraintlayout.widget.ConstraintLayout
 import com.swago.baseswago.agora.AgoraManager
+import com.swago.baseswago.baseroom.IRoomActiveListener
+import com.swago.baseswago.baseroom.IRoomInfo
+import com.swago.baseswago.baseroom.SwagoRoomManager
 import com.swago.baseswago.util.NoDoubleClickListener
 import com.swago.room.databinding.LayoutAnchorFooterViewBinding
 import com.swago.room.databinding.LayoutAnchorHeaderViewBinding
@@ -15,7 +18,7 @@ import com.swago.room.inter.IFooter
  *@date 2021/10/9 10:55
  *description:
  */
-class AnchorFooterView : ConstraintLayout, IFooter {
+class AnchorFooterView : ConstraintLayout, IFooter, IRoomActiveListener {
 
     lateinit var binding: LayoutAnchorFooterViewBinding
 
@@ -34,6 +37,8 @@ class AnchorFooterView : ConstraintLayout, IFooter {
     }
 
     private fun initView() {
+        visibility = View.GONE
+        SwagoRoomManager.addListener(this)
         binding = LayoutAnchorFooterViewBinding.inflate(LayoutInflater.from(context), this, true)
         binding.ivSwitchCamera.setOnClickListener(object : NoDoubleClickListener() {
             override fun onClick() {
@@ -67,5 +72,23 @@ class AnchorFooterView : ConstraintLayout, IFooter {
         binding.ivGame.visibility = if (b) View.VISIBLE else View.GONE
     }
 
+    override fun changeRoom(iRoomInfo: IRoomInfo) {
+        visibility = View.GONE
+    }
+
+    override fun leaveRoom(iRoomInfo: IRoomInfo) {
+    }
+
+    override fun joinedRoom(iRoomInfo: IRoomInfo) {
+        visibility = View.VISIBLE
+    }
+
+    override fun endRoom(iRoomInfo: IRoomInfo?) {
+    }
+
+    override fun closeRoomed() {
+        SwagoRoomManager.removeListener(this)
+    }
+
 
 }

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

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

+ 25 - 1
room/src/main/java/com/swago/room/widget/UserFooterView.kt

@@ -5,6 +5,9 @@ import android.util.AttributeSet
 import android.view.LayoutInflater
 import android.view.View
 import androidx.constraintlayout.widget.ConstraintLayout
+import com.swago.baseswago.baseroom.IRoomActiveListener
+import com.swago.baseswago.baseroom.IRoomInfo
+import com.swago.baseswago.baseroom.SwagoRoomManager
 import com.swago.baseswago.dialog.ReportDialog
 import com.swago.baseswago.util.NoDoubleClickListener
 import com.swago.baseswago.util.UserInfo
@@ -16,7 +19,7 @@ import com.swago.room.inter.IFooter
  *@date 2021/10/9 10:55
  *description:
  */
-class UserFooterView : ConstraintLayout, IFooter {
+class UserFooterView : ConstraintLayout, IFooter,IRoomActiveListener {
 
     lateinit var binding: LayoutUserFooterViewBinding
 
@@ -38,6 +41,8 @@ class UserFooterView : ConstraintLayout, IFooter {
     }
 
     private fun initView() {
+        visibility = View.GONE
+        SwagoRoomManager.addListener(this)
         binding = LayoutUserFooterViewBinding.inflate(LayoutInflater.from(context), this, true)
         setBenefit()
 
@@ -95,4 +100,23 @@ class UserFooterView : ConstraintLayout, IFooter {
     override fun getFooterView(): View {
         return this
     }
+
+
+    override fun changeRoom(iRoomInfo: IRoomInfo) {
+        visibility = View.GONE
+    }
+
+    override fun leaveRoom(iRoomInfo: IRoomInfo) {
+    }
+
+    override fun joinedRoom(iRoomInfo: IRoomInfo) {
+        visibility = View.VISIBLE
+    }
+
+    override fun endRoom(iRoomInfo: IRoomInfo?) {
+    }
+
+    override fun closeRoomed() {
+        SwagoRoomManager.removeListener(this)
+    }
 }

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

@@ -48,6 +48,7 @@ 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)

+ 3 - 12
room/src/main/res/layout/item_rank_list.xml

@@ -62,21 +62,12 @@
         android:layout_height="wrap_content"/>
 
 
-    <TextView
+    <com.swago.baseswago.cusview.SwagoLevelView
         android:id="@+id/tvLevel"
-        tools:text="Lv.3"
-        android:textSize="8dp"
-        android:textColor="#000000"
-        android:paddingStart="5dp"
-        android:paddingEnd="5dp"
-        android:paddingTop="1dp"
-        android:gravity="center"
-        android:textStyle="bold"
         android:layout_marginTop="4dp"
-        android:layout_marginEnd="20dp"
-        app:layout_constraintEnd_toEndOf="parent"
+        android:layout_marginStart="5dp"
+        app:layout_constraintStart_toEndOf="@+id/tvName"
         app:layout_constraintTop_toTopOf="@+id/ivAvatar"
-        android:background="@drawable/shape_9ffd88_6ef2df_5"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"/>