Skip to content

Commit 958369f

Browse files
archurtanSundoggyNew
authored andcommitted
TRTC-将App对RTC物模型的解析移至RTC SDK
Change-Id: If38ae7490f9a89cfba9c8949da104afd82cc4755
1 parent b4e24bc commit 958369f

File tree

11 files changed

+254
-149
lines changed

11 files changed

+254
-149
lines changed

app/src/main/java/com/tencent/iot/explorer/link/App.kt

Lines changed: 37 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,9 @@ import com.tencent.iot.explorer.link.kitlink.activity.GuideActivity
2929
import com.tencent.iot.explorer.link.kitlink.consts.CommonField
3030
import com.tencent.iot.explorer.link.kitlink.util.HttpRequest
3131
import com.tencent.iot.explorer.link.kitlink.util.WeatherUtils
32-
import com.tencent.iot.explorer.link.rtc.model.RoomKey
33-
import com.tencent.iot.explorer.link.rtc.model.TRTCCalling
34-
import com.tencent.iot.explorer.link.rtc.model.TRTCUIManager
32+
import com.tencent.iot.explorer.link.rtc.model.*
3533
import com.tencent.iot.explorer.link.rtc.ui.audiocall.TRTCAudioCallActivity
3634
import com.tencent.iot.explorer.link.rtc.ui.videocall.TRTCVideoCallActivity
37-
import com.tencent.iot.explorer.link.rtc.model.TRTCCallStatus
3835
import java.util.*
3936
import kotlin.collections.ArrayList
4037

@@ -314,7 +311,7 @@ class App : Application(), Application.ActivityLifecycleCallbacks, PayloadMessag
314311
calledUserId = calledUserIdJson.getString("Value")
315312
}
316313

317-
val myUserId = SharePreferenceUtil.getString(activity, App.CONFIG, CommonField.USER_ID)
314+
val myUserId = SharePreferenceUtil.getString(activity, CONFIG, CommonField.USER_ID)
318315
// 判断设备的video_call_status, audio_call_status字段是否等于1,若等于1并且呼叫的是自己,就调用CallDevice接口
319316
if (calledUserId == myUserId) {
320317
if (videoCallStatus == 1 || audioCallStatus == 1) {
@@ -345,7 +342,7 @@ class App : Application(), Application.ActivityLifecycleCallbacks, PayloadMessag
345342
* 呼叫设备获取trtc参数信息
346343
*/
347344
fun startBeingCall(callingType: Int, deviceId: String) {
348-
if (data.callingDeviceId != "") { //App主动呼叫
345+
if (TRTCUIManager.getInstance().callingDeviceId != "") { //App主动呼叫
349346
trtcCallDevice(callingType)
350347
} else { //App被动
351348
appStartBeingCall(callingType, deviceId)
@@ -356,7 +353,7 @@ class App : Application(), Application.ActivityLifecycleCallbacks, PayloadMessag
356353
* 呼叫设备获取trtc参数信息
357354
*/
358355
private fun trtcCallDevice(callingType: Int) {
359-
HttpRequest.instance.trtcCallDevice(App.data.callingDeviceId, object: MyCallback {
356+
HttpRequest.instance.trtcCallDevice(TRTCUIManager.getInstance().callingDeviceId, object: MyCallback {
360357
override fun fail(msg: String?, reqCode: Int) {
361358
if (msg != null) L.e(msg)
362359
}
@@ -392,151 +389,64 @@ class App : Application(), Application.ActivityLifecycleCallbacks, PayloadMessag
392389
fun enterRoom(room: RoomKey) {
393390
activity?.runOnUiThread {
394391
if (room.callType == TRTCCalling.TYPE_VIDEO_CALL) {
395-
TRTCUIManager.getInstance().joinRoom(TRTCCalling.TYPE_VIDEO_CALL, App.data.callingDeviceId, room)
392+
TRTCUIManager.getInstance().joinRoom(TRTCCalling.TYPE_VIDEO_CALL, TRTCUIManager.getInstance().callingDeviceId, room)
396393
} else if (room.callType == TRTCCalling.TYPE_AUDIO_CALL) {
397-
TRTCUIManager.getInstance().joinRoom(TRTCCalling.TYPE_AUDIO_CALL, App.data.callingDeviceId, room)
394+
TRTCUIManager.getInstance().joinRoom(TRTCCalling.TYPE_AUDIO_CALL, TRTCUIManager.getInstance().callingDeviceId, room)
398395
}
399396
}
400397
}
401398

402399
override fun payloadMessage(payload: Payload) {
403-
404-
var jsonObject = org.json.JSONObject(payload.json)
405-
val action = jsonObject.getString(MessageConst.MODULE_ACTION);
406-
if (action == MessageConst.DEVICE_CHANGE) { //收到了设备属性改变的wss消息
407-
var paramsObject = jsonObject.getJSONObject(MessageConst.PARAM) as org.json.JSONObject
408-
val subType = paramsObject.getString(MessageConst.SUB_TYPE)
409-
if (subType == MessageConst.REPORT) { //收到了设备端上报的属性状态改变的wss消息
410-
411-
var payloadParamsObject = org.json.JSONObject(payload.payload)
412-
val payloadParamsJson = payloadParamsObject.getJSONObject(MessageConst.PARAM)
413-
414-
var method = ""
415-
if (payloadParamsObject.has(MessageConst.METHOD)) {
416-
method = payloadParamsObject.getString(MessageConst.METHOD)
417-
}
418-
if (method != "report") {
419-
return; //过滤掉非report消息
420-
}
421-
var videoCallStatus = -1
422-
if (payloadParamsJson.has(MessageConst.TRTC_VIDEO_CALL_STATUS)) {
423-
videoCallStatus = payloadParamsJson.getInt(MessageConst.TRTC_VIDEO_CALL_STATUS)
424-
}
425-
var audioCallStatus = -1
426-
if (payloadParamsJson.has(MessageConst.TRTC_AUDIO_CALL_STATUS)) {
427-
audioCallStatus = payloadParamsJson.getInt(MessageConst.TRTC_AUDIO_CALL_STATUS)
400+
val userId = SharePreferenceUtil.getString(activity, CONFIG, CommonField.USER_ID)
401+
val trtcPayload = TRTCPayload(payload.json, payload.payload, payload.deviceId)
402+
TRTCUIManager.getInstance().payloadMessage(trtcPayload, userId, object:
403+
TRTCCallback {
404+
override fun busy() {
405+
TRTCUIManager.getInstance().userBusy()
406+
TRTCUIManager.getInstance().exitRoom()
407+
activity?.runOnUiThread {
408+
Toast.makeText(activity, "对方正忙...", Toast.LENGTH_LONG).show()
428409
}
410+
}
429411

430-
var deviceId = ""
431-
if (payloadParamsJson.has(MessageConst.USERID)) {
432-
deviceId = payloadParamsJson.getString(MessageConst.USERID)
433-
}
412+
override fun updateCallStatus(key: String?, value: String?, deviceId: String?) {
413+
controlDevice(key!!, value!!, deviceId!!)
414+
}
434415

435-
var rejectId = ""
436-
if (payloadParamsJson.has(MessageConst.TRTC_EXTRA_INFO)) {
437-
val extraInfo = org.json.JSONObject(payloadParamsJson.getString(MessageConst.TRTC_EXTRA_INFO))
438-
if (extraInfo.has(MessageConst.TRTC_REJECT_USERID)) {
439-
rejectId = extraInfo.getString(MessageConst.TRTC_REJECT_USERID)
440-
}
441-
}
416+
override fun startCall(type: Int, deviceId: String?) {
417+
startBeingCall(type, deviceId!!)
418+
}
442419

443-
if (videoCallStatus == -1 && audioCallStatus == -1 && rejectId.isEmpty()) {
444-
return; //过滤掉非音视频通话的消息
420+
override fun otherUserAnswered() {
421+
activity?.runOnUiThread {
422+
Toast.makeText(activity, "其他用户已接听...", Toast.LENGTH_LONG).show()
445423
}
424+
TRTCUIManager.getInstance().otherUserAccept()
425+
TRTCUIManager.getInstance().exitRoom()
426+
}
446427

447-
val userId = SharePreferenceUtil.getString(activity, App.CONFIG, CommonField.USER_ID)
448-
// 判断主动呼叫的回调中收到_sys_extra_info中的reject_userId为自己的userId,表示设备正和其他设备通话,拒绝了本次呼叫
449-
if (!rejectId.isEmpty()) {
450-
if (data.callingDeviceId != "" && rejectId == userId && TRTCUIManager.getInstance().isCalling) {
451-
TRTCUIManager.getInstance().userBusy()
452-
TRTCUIManager.getInstance().exitRoom()
428+
override fun hungUp() {
429+
if (TRTCUIManager.getInstance().callStatus == TRTCCallStatus.TYPE_CALLING.value) {
430+
if (TRTCUIManager.getInstance().callingDeviceId == "") { //被动呼叫
453431
activity?.runOnUiThread {
454432
Toast.makeText(activity, "对方正忙...", Toast.LENGTH_LONG).show()
455433
}
456-
}
457-
return
458-
}
459-
460-
// 判断主动呼叫的回调中收到的_sys_userid不为自己的userid则被其他用户抢先呼叫设备了,提示用户 对方正忙...
461-
if (data.callingDeviceId != "" && deviceId != userId) {
462-
if (TRTCUIManager.getInstance().isCalling) { //当前正显示音视频通话页面,finish掉
463-
if (data.callingDeviceId == payload.deviceId) {
464-
TRTCUIManager.getInstance().userBusy()
465-
TRTCUIManager.getInstance().exitRoom()
466-
activity?.runOnUiThread {
467-
Toast.makeText(activity, "对方正忙...", Toast.LENGTH_LONG).show()
468-
}
469-
return
470-
} else { //其他的设备又呼叫了该用户
471-
if (videoCallStatus == TRTCCallStatus.TYPE_CALLING.value) {
472-
controlDevice(MessageConst.TRTC_VIDEO_CALL_STATUS, "0", payload.deviceId)
473-
return
474-
} else if (audioCallStatus == TRTCCallStatus.TYPE_CALLING.value) {
475-
controlDevice(MessageConst.TRTC_AUDIO_CALL_STATUS, "0", payload.deviceId)
476-
return
477-
}
478-
}
479-
}
480-
}
481-
482-
// 判断被动呼叫时,已经被一台设备呼叫,又接到其他设备的呼叫请求,则调用AppControldeviceData拒绝其他设备的请求
483-
if (data.callingDeviceId == "" && TRTCUIManager.getInstance().isCalling) {
484-
if (videoCallStatus == TRTCCallStatus.TYPE_CALLING.value) {
485-
controlDevice(MessageConst.TRTC_VIDEO_CALL_STATUS, "0", payload.deviceId)
486-
} else if (audioCallStatus == TRTCCallStatus.TYPE_CALLING.value) {
487-
controlDevice(MessageConst.TRTC_AUDIO_CALL_STATUS, "0", payload.deviceId)
488-
}
489-
}
490-
491-
// 判断payload中是否包含设备的video_call_status, audio_call_status字段以及是否等于1,若等于1,就调用CallDevice接口, 主动拨打
492-
if (videoCallStatus == 1) {
493-
if (data.callingDeviceId == "" && deviceId != "" && !deviceId.contains(userId)) { //App被动呼叫 _sys_userid有值 且不包含当前用户的userid
494-
} else {
495-
startBeingCall(TRTCCalling.TYPE_VIDEO_CALL, payload.deviceId)
496-
}
497-
} else if (audioCallStatus == 1) {
498-
if (data.callingDeviceId == "" && deviceId != "" && !deviceId.contains(userId)) { //App被动呼叫 _sys_userid有值 且不包含当前用户的userid
499-
} else {
500-
startBeingCall(TRTCCalling.TYPE_AUDIO_CALL, payload.deviceId)
501-
}
502-
} else if (videoCallStatus == 0 || audioCallStatus == 0) { //空闲或拒绝了,当前正显示音视频通话页面的话,finish掉
503-
if (TRTCUIManager.getInstance().deviceId == payload.deviceId) {
504-
if (TRTCUIManager.getInstance().callStatus == TRTCCallStatus.TYPE_CALLING.value) {
505-
if (data.callingDeviceId == "") { //被动呼叫
506-
activity?.runOnUiThread {
507-
Toast.makeText(activity, "对方正忙...", Toast.LENGTH_LONG).show()
508-
}
509-
} else { //主动呼叫
510-
activity?.runOnUiThread {
511-
Toast.makeText(activity, "对方正忙...", Toast.LENGTH_LONG).show()
512-
}
513-
}
514-
}
515-
TRTCUIManager.getInstance().exitRoom()
516-
}
517-
} else if (videoCallStatus == 2 || audioCallStatus == 2) {
518-
if (TRTCUIManager.getInstance().callStatus == TRTCCallStatus.TYPE_CALLING.value && data.callingDeviceId == "") {
434+
} else { //主动呼叫
519435
activity?.runOnUiThread {
520-
Toast.makeText(activity, "其他用户已接听...", Toast.LENGTH_LONG).show()
436+
Toast.makeText(activity, "对方正忙...", Toast.LENGTH_LONG).show()
521437
}
522-
TRTCUIManager.getInstance().otherUserAccept()
523-
TRTCUIManager.getInstance().exitRoom()
524438
}
525439
}
526-
} else if (subType == MessageConst.OFFLINE) {
527-
val deviceId = paramsObject.getString(MessageConst.DEVICE_ID)
528-
TRTCUIManager.getInstance().userOffline(deviceId)
440+
TRTCUIManager.getInstance().exitRoom()
529441
}
530-
}
442+
})
531443
}
532444

533445
/**
534446
* 用户控制设备(上报数据)
535447
*/
536448
fun controlDevice(id: String, value: String, deviceId: String) {
537-
538449
val list = deviceId.split("/")
539-
540450
var productId = ""
541451
var deviceName = ""
542452
if (list.size == 2) {
@@ -554,15 +464,11 @@ class App : Application(), Application.ActivityLifecycleCallbacks, PayloadMessag
554464
if (msg != null) L.e(msg)
555465
}
556466

557-
override fun success(response: BaseResponse, reqCode: Int) {
558-
559-
}
560-
467+
override fun success(response: BaseResponse, reqCode: Int) { }
561468
})
562469
}
563470

564-
override fun connected() {
565-
}
471+
override fun connected() { }
566472

567473
override fun disconnected() {
568474
L.e("WebSocket已断开连接")

app/src/main/java/com/tencent/iot/explorer/link/AppData.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ class AppData private constructor() {
4444
var notificationId = 0
4545
@Volatile
4646
var isForeground = false
47-
var callingDeviceId = "" //主动呼叫的设备的id
4847
var rtcNotificationClicked = false
4948
var rtcDeviceIdList: ArrayString? = null
5049

app/src/main/java/com/tencent/iot/explorer/link/TRTCAppSessionManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class TRTCAppSessionManager : TRTCSessionManager() {
3535

3636
override fun resetTRTCStatus() {
3737
super.resetTRTCStatus()
38-
App.data.callingDeviceId = ""
38+
TRTCUIManager.getInstance().callingDeviceId = ""
3939
}
4040

4141
/**

app/src/main/java/com/tencent/iot/explorer/link/kitlink/activity/ControlPanelActivity.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -312,8 +312,8 @@ class ControlPanelActivity : PActivity(), ControlPanelView, CRecyclerView.Recycl
312312
controlDevice(entity.id, "1")
313313
TRTCUIManager.getInstance().setSessionManager(TRTCAppSessionManager())
314314
TRTCUIManager.getInstance().isCalling = true
315-
TRTCUIManager.getInstance().deviceId = App.data.callingDeviceId
316-
TRTCAudioCallActivity.startCallSomeone(this, RoomKey(), App.data.callingDeviceId)
315+
TRTCUIManager.getInstance().deviceId = TRTCUIManager.getInstance().callingDeviceId
316+
TRTCAudioCallActivity.startCallSomeone(this, RoomKey(), TRTCUIManager.getInstance().callingDeviceId)
317317
return
318318
} else if (entity.id == MessageConst.TRTC_VIDEO_CALL_STATUS) {
319319
if (checkTRTCCallStatusIsBusy()) {
@@ -322,8 +322,8 @@ class ControlPanelActivity : PActivity(), ControlPanelView, CRecyclerView.Recycl
322322
controlDevice(entity.id, "1")
323323
TRTCUIManager.getInstance().isCalling = true
324324
TRTCUIManager.getInstance().setSessionManager(TRTCAppSessionManager())
325-
TRTCUIManager.getInstance().deviceId = App.data.callingDeviceId
326-
TRTCVideoCallActivity.startCallSomeone(this, RoomKey(), App.data.callingDeviceId)
325+
TRTCUIManager.getInstance().deviceId = TRTCUIManager.getInstance().callingDeviceId
326+
TRTCVideoCallActivity.startCallSomeone(this, RoomKey(), TRTCUIManager.getInstance().callingDeviceId)
327327
return
328328
}
329329
if (enumPopup == null) {

app/src/main/java/com/tencent/iot/explorer/link/mvp/model/ControlPanelModel.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import com.tencent.iot.explorer.link.kitlink.util.HttpRequest
3030
import com.tencent.iot.explorer.link.kitlink.util.RequestCode
3131
import com.tencent.iot.explorer.link.mvp.ParentModel
3232
import com.tencent.iot.explorer.link.mvp.view.ControlPanelView
33+
import com.tencent.iot.explorer.link.rtc.model.TRTCUIManager
3334
import java.util.*
3435
import kotlin.collections.ArrayList
3536
import kotlin.collections.LinkedHashSet
@@ -159,7 +160,7 @@ class ControlPanelModel(view: ControlPanelView) : ParentModel<ControlPanelView>(
159160
}
160161
if (id == TRTC_VIDEO_CALL_STATUS || id == TRTC_AUDIO_CALL_STATUS) { //如果点击选择的是trtc设备的呼叫状态
161162
if (value == "1") { //并且状态值为1,代表应用正在call设备
162-
App.data.callingDeviceId = "$productId/$deviceName" //保存下设备id(productId/deviceName)
163+
TRTCUIManager.getInstance().callingDeviceId = "$productId/$deviceName" //保存下设备id(productId/deviceName)
163164
val userId = SharePreferenceUtil.getString(App.activity, App.CONFIG, CommonField.USER_ID)
164165
val agent = "android/1.4.0 (Android" + Build.VERSION.SDK_INT + ";" + Build.BRAND + " " + Build.MODEL + ";" + Locale.getDefault().language + "-" + Locale.getDefault().country + ")"
165166
data = "{\"$id\":$value, \"$USERID\":\"$userId\", \"${MessageConst.AGENT}\":\"$agent\"}"
@@ -406,7 +407,7 @@ class ControlPanelModel(view: ControlPanelView) : ParentModel<ControlPanelView>(
406407
override fun onDestroy() {
407408
super.onDestroy()
408409
handler.removeCallbacks(runnable)
409-
App.data.callingDeviceId = "" //暂时打电话的入口只在控制面板内,所以销毁了控制面板,就重置一下callingDeviceId为空字符串,代表没有在打电话了。
410+
TRTCUIManager.getInstance().callingDeviceId = "" //暂时打电话的入口只在控制面板内,所以销毁了控制面板,就重置一下callingDeviceId为空字符串,代表没有在打电话了。
410411
IoTAuth.removeActivePushCallback(ArrayString(deviceId), this)
411412
}
412413

sdk/explorer-link-rtc/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ dependencies {
4343
implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
4444
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
4545
implementation 'com.tencent.liteav:LiteAVSDK_TRTC:8.1.9717'
46-
// implementation 'com.squareup.picasso:picasso:2.5.2'
4746
implementation 'com.squareup.picasso:picasso:2.71828'
4847
implementation 'com.alibaba:fastjson:1.2.73'
4948

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.tencent.iot.explorer.link.rtc.consts;
2+
3+
public class Common {
4+
public static final String TRTC_ACTION = "action";
5+
6+
public static final String TRTC_PARAM = "params";
7+
8+
public static final String TRTC_SUB_TYPE = "SubType";
9+
10+
public static final String TRTC_REPORT = "Report";
11+
12+
public static final String TRTC_REPORT_LOW = "report";
13+
14+
public static final String TRTC_METHOD = "method";
15+
16+
public static final String TRTC_AUDIO_CALL_STATUS = "_sys_audio_call_status";
17+
18+
public static final String TRTC_VIDEO_CALL_STATUS = "_sys_video_call_status";
19+
20+
public static final String TRTC_USERID = "_sys_userid";
21+
22+
public static final String TRTC_AGENT = "_sys_user_agent";
23+
24+
public static final String TRTC_EXTRA_INFO = "_sys_extra_info";
25+
26+
public static final String TRTC_REJECT_USERID = "rejectUserId";
27+
28+
public static final String TRTC_DEVICE_CHANGE = "DeviceChange";
29+
30+
public static final int TRTC_STATUS_NONE = -1;
31+
32+
/**
33+
* 空闲或拒绝
34+
*/
35+
public static final int TRTC_STATUS_FREE_OR_REJECT = 0;
36+
37+
/**
38+
* 呼叫中
39+
*/
40+
public static final int TRTC_STATUS_CALL = 1;
41+
42+
/**
43+
* 通话中
44+
*/
45+
public static final int TRTC_STATUS_CALLING = 2;
46+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.tencent.iot.explorer.link.rtc.model;
2+
3+
public interface TRTCCallback {
4+
void busy();
5+
6+
void updateCallStatus(String k, String v, String deviceId);
7+
8+
void startCall(int type, String deviceId);
9+
10+
void otherUserAnswered();
11+
12+
void hungUp();
13+
}

0 commit comments

Comments
 (0)