Explorar el Código

在房呼叫场景

DoggyZhang hace 20 horas
padre
commit
3c510a90a3

+ 2 - 0
app/src/main/java/com/adealink/weparty/module/room/IRoomService.kt

@@ -18,4 +18,6 @@ interface IRoomService : IService<IRoomService>, IMediaOperatorGet {
 
     fun getJoinedRoomId(): String?
 
+    fun isInRoom(): Boolean
+
 }

+ 8 - 0
app/src/main/java/com/adealink/weparty/module/room/RoomModule.kt

@@ -79,6 +79,10 @@ object RoomModule : BaseDynamicModule<IRoomService>(IRoomService::class), IRoomS
                 return null
             }
 
+            override fun isInRoom(): Boolean {
+                return false
+            }
+
             override fun onLogout() {
             }
 
@@ -109,6 +113,10 @@ object RoomModule : BaseDynamicModule<IRoomService>(IRoomService::class), IRoomS
         return getService().getJoinedRoomId()
     }
 
+    override fun isInRoom(): Boolean {
+        return getService().isInRoom()
+    }
+
     override fun onLogout() {
         getService().onLogout()
     }

+ 33 - 7
module/call/src/main/java/com/tencent/qcloud/tuikit/tuicallkit/TUICallKitImpl.kt

@@ -72,9 +72,18 @@ class TUICallKitImpl private constructor(context: Context) : TUICallKit() {
             }
             Log.i(TAG_CALL_FLOW, "onCallReceived($mediaType), callId:$callId")
 
-            if (!RoomModule.getJoinedRoomId().isNullOrEmpty()) {
+            if (RoomModule.isInRoom()) {
                 //用户在房,在线忙
-                CallStore.shared.reject(null)
+                Log.i(TAG_CALL_FLOW, "onCallReceived($mediaType), user is room, ignore ~")
+                TUICallEngine.createInstance(context).ignore(object : TUICommonDefine.Callback {
+                    override fun onSuccess() {
+                        Log.i(TAG_CALL_FLOW, "onCallReceived($mediaType), user is room, ignore success")
+                    }
+
+                    override fun onError(errCode: Int, errMsg: String?) {
+                        Log.i(TAG_CALL_FLOW, "onCallReceived($mediaType), user is room, ignore fail, $errCode, $errMsg")
+                    }
+                })
                 return
             }
 
@@ -84,6 +93,14 @@ class TUICallKitImpl private constructor(context: Context) : TUICallKit() {
             CallManager.instance.selectAudioPlaybackDevice(TUICommonDefine.AudioPlaybackDevice.Speakerphone)
         }
 
+        override fun onUserLineBusy(userId: String?) {
+            super.onUserLineBusy(userId)
+            if (CallUtils.getCallee() == userId) {
+                //呼叫在线忙
+                showToast(R.string.callkit_toast_other_party_busy)
+            }
+        }
+
         override fun onCallBegin(
             callId: String?,
             mediaType: TUICallDefine.MediaType?,
@@ -270,10 +287,12 @@ class TUICallKitImpl private constructor(context: Context) : TUICallKit() {
     }
 
     fun queryOfflineCall() {
-//        if (FloatWindowManager.sharedInstance().isShowing) {
-//            Log.w(TAG_CALL_KIT, "queryOfflineCall, float window is showing")
-//            return
-//        }
+        if (RoomModule.isInRoom()) {
+            //用户在房,在线忙
+            Log.w(TAG_CALL_KIT, "handleNewCall, return, for in room")
+            CallStore.shared.reject(null)
+            return
+        }
 
         Log.i(TAG_CALL_KIT, "queryOfflineCall start")
         val selfUser = CallStore.shared.observerState.selfInfo.value
@@ -358,7 +377,7 @@ class TUICallKitImpl private constructor(context: Context) : TUICallKit() {
         CallStore.shared.observerState.selfInfo.collect { selfInfo ->
             Log.i(TAG_CALL_KIT, "selfInfo id=${selfInfo.id} status=${selfInfo.status}")
             notifyInternalEvent()
-            if (selfInfo.status == CallParticipantStatus.None) {
+            if (selfInfo.status == CallParticipantStatus.None || RoomModule.isInRoom()) {
                 CallManager.instance.reset()
                 CallManager.instance.dismissCallingFloatWindow()
                 return@collect
@@ -379,6 +398,13 @@ class TUICallKitImpl private constructor(context: Context) : TUICallKit() {
     }
 
     private fun handleNewCall() {
+        if (RoomModule.isInRoom()) {
+            //用户在房,在线忙
+            Log.w(TAG_CALL_KIT, "handleNewCall, return, for in room")
+            CallStore.shared.reject(null)
+            return
+        }
+
         val floatPermission =
             PermissionRequester.newInstance(PermissionRequester.FLOAT_PERMISSION).has()
         val isAppInBackground = !DeviceUtils.isAppRunningForeground(context)

+ 8 - 0
module/call/src/main/java/com/tencent/qcloud/tuikit/tuicallkit/manager/CallManager.kt

@@ -6,6 +6,7 @@ import com.adealink.frame.log.Log
 import com.adealink.weparty.call.R
 import com.adealink.weparty.call.constant.TAG_CALL_ENGINE
 import com.adealink.weparty.call.constant.TAG_CALL_FLOW
+import com.adealink.weparty.call.constant.TAG_CALL_KIT
 import com.adealink.weparty.call.datasource.local.CallLocalService
 import com.adealink.weparty.call.util.PermissionRequest
 import com.adealink.weparty.call.widget.float.calling.CallingFloatData
@@ -15,6 +16,7 @@ import com.adealink.weparty.commonui.widget.floatview.WindowManagerProxy
 import com.adealink.weparty.commonui.widget.floatview.data.FloatWindowType
 import com.adealink.weparty.commonui.widget.floatview.data.MODE_APPLICATION
 import com.adealink.weparty.commonui.widget.floatview.data.MODE_SYSTEM
+import com.adealink.weparty.module.room.RoomModule
 import com.tencent.cloud.tuikit.engine.call.TUICallDefine
 import com.tencent.cloud.tuikit.engine.call.TUICallEngine
 import com.tencent.cloud.tuikit.engine.common.TUICommonDefine
@@ -385,6 +387,12 @@ class CallManager private constructor(context: Context) {
 
     fun showCallingFloatWindow(finishActivity: (() -> Unit)? = null) {
         Log.d(TAG_CALL_ENGINE, "showCallingFloatWindow")
+        if (RoomModule.isInRoom()) {
+            //用户在房,在线忙
+            Log.w(TAG_CALL_KIT, "showCallingFloatWindow return, for in room")
+            dismissCallingFloatWindow()
+            return
+        }
         if (CallUtils.getSelfCallStatus() == CallParticipantStatus.None) {
             Log.d(TAG_CALL_ENGINE, "showCallingFloatWindow return, for callStatus is none")
             dismissCallingFloatWindow()

+ 2 - 1
module/call/src/main/java/com/tencent/qcloud/tuikit/tuicallkit/manager/feature/CallingBellFeature.kt

@@ -13,6 +13,7 @@ import androidx.core.content.ContextCompat
 import com.adealink.frame.log.Log
 import com.adealink.weparty.call.constant.TAG_CALL_KIT
 import com.adealink.weparty.call.util.PermissionRequest
+import com.adealink.weparty.module.room.RoomModule
 import com.tencent.cloud.tuikit.engine.call.TUICallEngine
 import com.tencent.liteav.audio.TXAudioEffectManager.AudioMusicParam
 import com.tencent.qcloud.tuicore.TUIConfig
@@ -51,7 +52,7 @@ class CallingBellFeature(context: Context) {
         scope.launch {
             CallStore.shared.observerState.selfInfo.collect { selfInfo ->
                 Log.i(TAG_CALL_KIT, "CallingBellFeature id=${selfInfo.id} status=${selfInfo.status}")
-                if (selfInfo.status != CallParticipantStatus.Waiting) {
+                if (selfInfo.status != CallParticipantStatus.Waiting || RoomModule.isInRoom()) {
                     stopMusic()
                     return@collect
                 }

+ 4 - 0
module/call/src/main/java/com/tencent/qcloud/tuikit/tuicallkit/manager/feature/CallingVibratorFeature.kt

@@ -5,6 +5,7 @@ import android.os.Build
 import android.os.VibrationEffect
 import android.os.Vibrator
 import android.os.VibratorManager
+import com.adealink.weparty.module.room.RoomModule
 import com.tencent.qcloud.tuicore.util.TUIBuild
 import io.trtc.tuikit.atomicxcore.api.call.CallParticipantStatus
 import io.trtc.tuikit.atomicxcore.api.call.CallStore
@@ -31,6 +32,9 @@ class CallingVibratorFeature(context: Context) {
     private fun registerObserver() {
         scope.launch {
             CallStore.shared.observerState.selfInfo.collect { selfInfo ->
+                if (RoomModule.isInRoom()) {
+                    return@collect
+                }
                 if (isCaller(selfInfo.id)) {
                     return@collect
                 }

+ 4 - 0
module/room/src/main/java/com/adealink/weparty/room/RoomServiceImpl.kt

@@ -110,6 +110,10 @@ class RoomServiceImpl : IRoomService {
         return roomService.joinController.getJoinedRoomId()
     }
 
+    override fun isInRoom(): Boolean {
+        return !roomService.joinController.getJoinedRoomId().isNullOrEmpty()
+    }
+
     override fun getService(): IRoomService {
         return this
     }

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

@@ -31,9 +31,11 @@
 
         <androidx.recyclerview.widget.RecyclerView
             android:id="@+id/rv_users"
+            style="@style/CommonHorizontalFade"
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_marginStart="6dp"
+            android:layout_marginEnd="10dp"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toEndOf="@+id/tv_send_to"