瀏覽代碼

不支持房间类型

DoggyZhang 1 周之前
父節點
當前提交
4bc60aa78f

+ 17 - 0
app/src/main/java/com/adealink/weparty/module/room/data/RoomData.kt

@@ -3,3 +3,20 @@ package com.adealink.weparty.module.room.data
 import com.adealink.frame.mvvm.livedata.ExtMutableLiveData
 
 val createRoomPermissionLD = ExtMutableLiveData<Boolean>()
+
+
+enum class RoomType(val type: Int) {
+    DISPATCH_CENTER(1); //派单厅
+
+    companion object {
+        @JvmStatic
+        fun isSupportRoomType(type: Int): Boolean {
+            return RoomType.entries.find { it.type == type } != null
+        }
+
+        @JvmStatic
+        fun map(type: Int?): RoomType? {
+            return RoomType.entries.find { it.type == type }
+        }
+    }
+}

+ 11 - 0
app/src/main/java/com/adealink/weparty/module/room/data/RoomFlowData.kt

@@ -25,16 +25,27 @@ data class RoomInfo(
     @SerializedName("roomId") val roomId: String,
     @SerializedName("roomTitle") val roomTitle: String,
     @SerializedName("roomCover") val roomCover: String,
+    @SerializedName("roomType") val roomType: Int,
     @SerializedName("user") val owner: UserInfo,
 ) : Parcelable {
 
+    fun isSupportedRoomType(): Boolean {
+        return RoomType.isSupportRoomType(roomType)
+    }
+
 }
 
 infix fun RoomInfo.contentsTheSame(other: RoomInfo): Boolean =
     roomId == other.roomId
 
+
+fun RoomInfo.toEnterRoomInfo(password: String? = null): EnterRoomInfo {
+    return EnterRoomInfo(roomId, this, password)
+}
+
 @Parcelize
 data class EnterRoomInfo(
     val roomId: String,
+    val roomInfo: RoomInfo? = null,
     var password: String? = null,
 ) : Parcelable

+ 3 - 1
frame/room/src/main/java/com/adealink/frame/room/data/RoomFlowData.kt

@@ -51,7 +51,9 @@ enum class LeaveRoomReason(val reason: String) {
     INITIATIVE("initiative"),
     ENTER_OTHER_MEDIA("enter_other_room"),
 
-    LIVE_END("live_end")
+    LIVE_END("live_end"),
+
+    UNSUPPORTED_ROOM_TYPE("un_support_room_type")
 }
 
 enum class JoinChannelReason(val reason: String) {

+ 2 - 1
module/playmate/src/main/java/com/adealink/weparty/playmate/list/comp/PlaymateDispatchRoomComp.kt

@@ -9,6 +9,7 @@ import com.adealink.weparty.commonui.BaseViewComponent
 import com.adealink.weparty.commonui.ext.show
 import com.adealink.weparty.commonui.toast.util.showToast
 import com.adealink.weparty.module.room.Room
+import com.adealink.weparty.module.room.data.toEnterRoomInfo
 import com.adealink.weparty.playmate.databinding.LayoutPlaymateDispatchRoomBinding
 import com.adealink.weparty.playmate.list.viewmodel.PlaymateRoomViewModel
 
@@ -50,7 +51,7 @@ class PlaymateDispatchRoomComp(
                 is Rlt.Success -> {
                     val act = activity ?: return@observe
                     Router.build(act, Room.Room.PATH)
-                        .putExtra(Room.Room.EXTRA_ENTER_ROOM_ID, rlt.data.roomId)
+                        .putExtra(Room.Room.EXTRA_ENTER_ROOM_INFO, rlt.data.toEnterRoomInfo())
                         .start()
                 }
             }

+ 3 - 2
module/profile/src/main/java/com/adealink/weparty/profile/search/adapter/SearchRoomItemViewBinder.kt

@@ -6,6 +6,7 @@ import android.view.ViewGroup
 import com.adealink.frame.util.onClick
 import com.adealink.weparty.commonui.recycleview.adapter.BindingViewHolder
 import com.adealink.weparty.commonui.recycleview.adapter.multitype.ItemViewBinder
+import com.adealink.weparty.module.room.data.RoomInfo
 import com.adealink.weparty.profile.databinding.LayoutProfileSearchRoomItemBinding
 import com.adealink.weparty.profile.search.data.SearchRoomResultItemData
 
@@ -18,7 +19,7 @@ class SearchRoomItemViewBinder(val listener: OnRoomResultClickListener) :
         item: SearchRoomResultItemData,
     ) {
         holder.binding.root.onClick {
-            listener.goRoom(item.data.roomId)
+            listener.goRoom(item.data)
         }
         holder.binding.ivCover.setImageUrl(item.data.roomCover)
         holder.binding.tvRoomId.text = "ID ${item.data.roomId}"
@@ -35,7 +36,7 @@ class SearchRoomItemViewBinder(val listener: OnRoomResultClickListener) :
     }
 
     interface OnRoomResultClickListener {
-        fun goRoom(roomId: String)
+        fun goRoom(roomInfo: RoomInfo)
     }
 
 }

+ 4 - 2
module/profile/src/main/java/com/adealink/weparty/profile/search/page/SearchAllFragment.kt

@@ -19,6 +19,8 @@ import com.adealink.weparty.commonui.recycleview.itemdecoration.VerticalSpaceIte
 import com.adealink.weparty.commonui.toast.util.showFailedToast
 import com.adealink.weparty.module.profile.Profile
 import com.adealink.weparty.module.room.Room
+import com.adealink.weparty.module.room.data.RoomInfo
+import com.adealink.weparty.module.room.data.toEnterRoomInfo
 import com.adealink.weparty.network.data.NoMoreDataError
 import com.adealink.weparty.profile.R
 import com.adealink.weparty.profile.databinding.FragmentSearchAllBinding
@@ -134,10 +136,10 @@ class SearchAllFragment : BaseFragment(R.layout.fragment_search_all),
         }
     }
 
-    override fun goRoom(roomId: String) {
+    override fun goRoom(roomInfo: RoomInfo) {
         val act = activity ?: return
         Router.build(act, Room.Room.PATH)
-            .putExtra(Room.Room.EXTRA_ENTER_ROOM_ID, roomId)
+            .putExtra(Room.Room.EXTRA_ENTER_ROOM_INFO, roomInfo.toEnterRoomInfo())
             .start()
     }
 

+ 4 - 2
module/profile/src/main/java/com/adealink/weparty/profile/search/page/SearchRoomFragment.kt

@@ -14,6 +14,8 @@ import com.adealink.weparty.commonui.ext.show
 import com.adealink.weparty.commonui.recycleview.adapter.MultiTypeListAdapter
 import com.adealink.weparty.commonui.recycleview.itemdecoration.GridSpacingItemDecoration
 import com.adealink.weparty.module.room.Room
+import com.adealink.weparty.module.room.data.RoomInfo
+import com.adealink.weparty.module.room.data.toEnterRoomInfo
 import com.adealink.weparty.network.data.NoMoreDataError
 import com.adealink.weparty.profile.R
 import com.adealink.weparty.profile.databinding.FragmentSearchRoomBinding
@@ -95,10 +97,10 @@ class SearchRoomFragment : BaseFragment(R.layout.fragment_search_room),
         }
     }
 
-    override fun goRoom(roomId: String) {
+    override fun goRoom(roomInfo: RoomInfo) {
         val act = activity ?: return
         Router.build(act, Room.Room.PATH)
-            .putExtra(Room.Room.EXTRA_ENTER_ROOM_ID, roomId)
+            .putExtra(Room.Room.EXTRA_ENTER_ROOM_INFO, roomInfo.toEnterRoomInfo())
             .start()
     }
 

+ 17 - 0
module/room/src/main/java/com/adealink/weparty/room/data/Constants.kt

@@ -2,6 +2,7 @@ package com.adealink.weparty.room.data
 
 import com.adealink.frame.data.json.froJsonErrorNull
 import com.adealink.frame.util.safeToInt
+import com.adealink.weparty.module.room.data.RoomType
 import io.trtc.tuikit.atomicxcore.api.live.LiveInfo
 
 //主持人列表(数组)
@@ -29,4 +30,20 @@ const val ROOM_META_AUTO_MIC_MUTE = "state_mic_mute"
 
 fun LiveInfo.isAutoMuteMic(): Boolean {
     return metaData[ROOM_META_AUTO_MIC_MUTE] == "1"
+}
+
+//房间类型
+const val ROOM_META_ROOM_TYPE = "state_room_type"
+
+fun LiveInfo.roomType(): RoomType? {
+    val roomTypeInt = metaData[ROOM_META_ROOM_TYPE]?.safeToInt(-1)
+    return RoomType.map(roomTypeInt)
+}
+
+fun LiveInfo.isSupportRoomType(): Boolean {
+    val roomTypeStr = metaData[ROOM_META_ROOM_TYPE]
+    if (roomTypeStr.isNullOrEmpty()) {
+        return true
+    }
+    return RoomType.isSupportRoomType(roomTypeStr.safeToInt(-1))
 }

+ 11 - 0
module/room/src/main/java/com/adealink/weparty/room/interceptor/EnterRoomUriInterceptor.kt

@@ -15,6 +15,7 @@ import com.adealink.frame.util.AppUtil
 import com.adealink.frame.util.isActivityDestroy
 import com.adealink.weparty.App
 import com.adealink.weparty.commonui.tip.showFailedTip
+import com.adealink.weparty.commonui.toast.util.showToast
 import com.adealink.weparty.commonui.widget.ProgressDialog
 import com.adealink.weparty.media.MediaType
 import com.adealink.weparty.module.gift.GiftModule
@@ -126,6 +127,16 @@ class EnterRoomUriInterceptor : UriInterceptor {
             return
         }
 
+        if (enterRoomInfo.roomInfo?.isSupportedRoomType() == false) {
+            showToast(R.string.room_unsupported_room_type)
+            chain.abort()
+            Log.e(
+                TAG_ROOM_ENTER_ROOM,
+                "EnterRoomUriInterceptor, unsupported room type (${enterRoomInfo.roomInfo?.roomType}), abort()"
+            )
+            return
+        }
+
         //跳转参数补充房间信息
         intent.putExtra(EXTRA_ENTER_ROOM_INFO, enterRoomInfo)
 

+ 2 - 2
module/room/src/main/java/com/adealink/weparty/room/minimize/manager/MinimizeRoomManager.kt

@@ -124,8 +124,8 @@ class MinimizeRoomManager : IMinimizeRoomManager,
                     roomService.joinController.getJoinedRoomId() ?: return@setOnClickListener
                 Router.build(activity, Room.Room.PATH)
                     .putExtra(
-                        Room.Room.EXTRA_ENTER_ROOM_INFO,
-                        EnterRoomInfo(roomId)
+                        Room.Room.EXTRA_ENTER_ROOM_ID,
+                        roomId
                     )
                     .start()
             }

+ 18 - 2
module/room/src/main/java/com/adealink/weparty/room/sdk/controller/impl/AttrController.kt

@@ -3,21 +3,25 @@ package com.adealink.weparty.room.sdk.controller.impl
 import android.os.Handler
 import com.adealink.frame.base.CommonDataNullError
 import com.adealink.frame.base.Rlt
+import com.adealink.frame.coroutine.dispatcher.Dispatcher
 import com.adealink.frame.log.Log
 import com.adealink.frame.room.data.FlowStateInfo
+import com.adealink.frame.room.data.LeaveRoomReason
 import com.adealink.frame.room.data.RoomInfoSizeError
 import com.adealink.frame.room.data.TAG_ROOM_ATTR
+import com.adealink.weparty.commonui.toast.util.showToast
 import com.adealink.weparty.module.room.data.RoomInfo
-import com.adealink.weparty.room.data.hostList
+import com.adealink.weparty.room.R
 import com.adealink.weparty.room.data.isAutoMuteMic
+import com.adealink.weparty.room.data.isSupportRoomType
 import com.adealink.weparty.room.sdk.context.IRoomContext
 import com.adealink.weparty.room.sdk.controller.BaseController
 import com.adealink.weparty.room.sdk.controller.IAttrController
 import com.adealink.weparty.room.sdk.listener.IAttrListener
 import com.adealink.weparty.room.sdk.listener.ISeatListener
 import com.adealink.weparty.room.sdk.service.roomService
-import io.trtc.tuikit.atomicxcore.api.live.LiveInfo
 import io.trtc.tuikit.atomicxcore.api.live.LiveListStore
+import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Job
 import kotlinx.coroutines.flow.MutableStateFlow
 import kotlinx.coroutines.flow.StateFlow
@@ -56,6 +60,18 @@ class AttrController(override val ctx: IRoomContext, serialHandler: Handler) :
                     _autoForbidAudio.update { it }
                 }
             }
+            launch {
+                LiveListStore.shared().liveState.currentLive.map {
+                    it.isSupportRoomType()
+                }.distinctUntilChanged().collect { support ->
+                    if (!support) {
+                        CoroutineScope(Dispatcher.UI).launch {
+                            showToast(R.string.room_unsupported_room_type)
+                            roomService.joinController.leaveRoom(LeaveRoomReason.UNSUPPORTED_ROOM_TYPE, true)
+                        }
+                    }
+                }
+            }
         }
     }
 

+ 3 - 2
module/room/src/main/java/com/adealink/weparty/room/sdk/controller/impl/JoinController.kt

@@ -13,6 +13,7 @@ import com.adealink.frame.room.data.RoomState
 import com.adealink.frame.room.data.TAG_ROOM_FLOW
 import com.adealink.frame.room.listener.IRoomStateChangeListener
 import com.adealink.weparty.commonui.ext.isSuccess
+import com.adealink.weparty.module.room.data.RoomInfo
 import com.adealink.weparty.room.constant.logRoomTime
 import com.adealink.weparty.room.sdk.context.IRoomContext
 import com.adealink.weparty.room.sdk.controller.BaseController
@@ -111,8 +112,8 @@ open class JoinController(override val ctx: IRoomContext, serialHandler: Handler
             }
 
             joiningRoomId = req.roomId
-            val socketJoinRoomAsync = async { suspendJoinRoom(req) }
-            val joinRoomRes = socketJoinRoomAsync.await()
+            val joinRoomAsync = async { suspendJoinRoom(req) }
+            val joinRoomRes = joinRoomAsync.await()
             logRoomTime("joinRoom res")
             Log.i(
                 TAG_ROOM_FLOW,

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

@@ -64,4 +64,5 @@
     <string name="room_member_count_in_room">%s在房间内</string>
     <string name="room_apply_mic_count_in_room">%s在申请上麦</string>
     <string name="room_close_tips">关闭房间讲清空房间人员哦~</string>
+    <string name="room_unsupported_room_type">不支持的房间类型,无法进入房间,请升级APP</string>
 </resources>