Commit 8c3b433e by 严久程

通话结束后增加接口调用

parent 82809e56
ext { ext {
kotlin_version = "1.3.21" kotlin_version = "1.3.21"
dev_mode = true dev_mode = false
ydlPublishVersion = [ ydlPublishVersion = [
// -------------- 业务模块 -------------- // -------------- 业务模块 --------------
//第三步 若干 //第三步 若干
"m-confide" : "0.0.48.23", "m-confide" : "0.0.48.42",
"m-consultant" : "0.0.59.10", "m-consultant" : "0.0.59.10",
"m-fm" : "0.0.29.9", "m-fm" : "0.0.29.9",
"m-user" : "0.0.60.8", "m-user" : "0.0.60.8",
"m-home" : "0.0.22.3", "m-home" : "0.0.22.3",
"m-im" : "0.0.18.4", "m-im" : "0.0.18.5",
"m-dynamic" : "0.0.7.7", "m-dynamic" : "0.0.7.7",
"m-article" : "0.0.0.5", "m-article" : "0.0.0.5",
...@@ -28,7 +28,7 @@ ext { ...@@ -28,7 +28,7 @@ ext {
"m-tests-api" : "0.0.2", "m-tests-api" : "0.0.2",
"m-user-api" : "0.0.10.15", "m-user-api" : "0.0.10.15",
"m-home-api" : "0.0.4.1", "m-home-api" : "0.0.4.1",
"m-im-api" : "0.0.12.19", "m-im-api" : "0.0.12.20",
"m-dynamic-api" : "0.0.3.7", "m-dynamic-api" : "0.0.3.7",
//-------------- 功能组件 -------------- //-------------- 功能组件 --------------
...@@ -39,7 +39,7 @@ ext { ...@@ -39,7 +39,7 @@ ext {
"ydl-webview" : "0.0.38.31", "ydl-webview" : "0.0.38.31",
"ydl-media" : "0.0.21.6", "ydl-media" : "0.0.21.6",
"ydl-pay" : "0.0.18.9", "ydl-pay" : "0.0.18.9",
"m-audioim" : "0.0.49.2", "m-audioim" : "0.0.49.13",
"ydl-flutter-base": "0.0.14.14", "ydl-flutter-base": "0.0.14.14",
//以下 几乎不会动 //以下 几乎不会动
...@@ -111,7 +111,7 @@ ext { ...@@ -111,7 +111,7 @@ ext {
"m-tests-api" : "0.0.2", "m-tests-api" : "0.0.2",
"m-user-api" : "0.0.10.15", "m-user-api" : "0.0.10.15",
"m-home-api" : "0.0.4.1", "m-home-api" : "0.0.4.1",
"m-im-api" : "0.0.12.18", "m-im-api" : "0.0.12.20",
"m-dynamic-api" : "0.0.3.7", "m-dynamic-api" : "0.0.3.7",
//-------------- 功能组件 -------------- //-------------- 功能组件 --------------
...@@ -122,7 +122,7 @@ ext { ...@@ -122,7 +122,7 @@ ext {
"ydl-webview" : "0.0.38.31", "ydl-webview" : "0.0.38.31",
"ydl-media" : "0.0.21.6", "ydl-media" : "0.0.21.6",
"ydl-pay" : "0.0.18.9", "ydl-pay" : "0.0.18.9",
"m-audioim" : "0.0.49.2", "m-audioim" : "0.0.49.13",
"ydl-flutter-base": "0.0.14.14", "ydl-flutter-base": "0.0.14.14",
//以下 几乎不会动 //以下 几乎不会动
......
...@@ -39,8 +39,6 @@ import com.ydl.webview.H5Params ...@@ -39,8 +39,6 @@ import com.ydl.webview.H5Params
import com.ydl.webview.NewH5Activity import com.ydl.webview.NewH5Activity
import com.ydl.webview.RefreshWebEvent import com.ydl.webview.RefreshWebEvent
import com.ydl.ydl_av.chat.bean.AudioMessageBean import com.ydl.ydl_av.chat.bean.AudioMessageBean
import com.ydl.ydl_av.messge_service.YDLRTMClient
import com.ydl.ydl_av.messge_service.callback.CancelCallStatusListener
import com.ydl.ydl_av.voice.listener.IYDLVoiceEventHandler import com.ydl.ydl_av.voice.listener.IYDLVoiceEventHandler
import com.ydl.ydl_av.voice.manager.YDLVoiceManager import com.ydl.ydl_av.voice.manager.YDLVoiceManager
import com.ydl.ydl_image.config.SimpleImageOpConfiger import com.ydl.ydl_image.config.SimpleImageOpConfiger
...@@ -62,10 +60,22 @@ import io.reactivex.Observable ...@@ -62,10 +60,22 @@ import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.audioim_activity_audio_home.* import kotlinx.android.synthetic.main.audioim_activity_audio_home.iv_hands_free
import kotlinx.android.synthetic.main.audioim_activity_audio_home.iv_hang_up
import kotlinx.android.synthetic.main.audioim_activity_audio_home.iv_head
import kotlinx.android.synthetic.main.audioim_activity_audio_home.progress_view
import kotlinx.android.synthetic.main.audioim_activity_audio_home.rl_remain_time
import kotlinx.android.synthetic.main.audioim_activity_audio_home.tv_change_doctor
import kotlinx.android.synthetic.main.audioim_activity_audio_home.tv_change_route
import kotlinx.android.synthetic.main.audioim_activity_audio_home.tv_change_time_counter
import kotlinx.android.synthetic.main.audioim_activity_audio_home.tv_name
import kotlinx.android.synthetic.main.audioim_activity_audio_home.tv_nte_status
import kotlinx.android.synthetic.main.audioim_activity_audio_home.tv_remain_time
import kotlinx.android.synthetic.main.audioim_activity_audio_home.tv_tips
import kotlinx.android.synthetic.main.audioim_activity_audio_home.tv_waiting
import kotlinx.android.synthetic.main.audioim_activity_audio_home.wave_view
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
/** /**
* @author jiucheng * @author jiucheng
* @描述: 倾诉声网通话页面 * @描述: 倾诉声网通话页面
...@@ -74,9 +84,7 @@ import java.util.concurrent.TimeUnit ...@@ -74,9 +84,7 @@ import java.util.concurrent.TimeUnit
* @date 2018/10/30 * @date 2018/10/30
*/ */
@Route(path = "/av/AudioHomeActivity") @Route(path = "/av/AudioHomeActivity")
class AudioHomeActivity : class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudioHomeActivityContract.Presenter>(), IAudioHomeActivityContract.View, SensorEventListener {
BaseMvpActivity<IAudioHomeActivityContract.View, IAudioHomeActivityContract.Presenter>(),
IAudioHomeActivityContract.View, SensorEventListener {
/** /**
* 专家头像地址 * 专家头像地址
...@@ -166,7 +174,7 @@ class AudioHomeActivity : ...@@ -166,7 +174,7 @@ class AudioHomeActivity :
private var voiceManage: YDLVoiceManager? = null private var voiceManage: YDLVoiceManager? = null
//频道管理器 //频道管理器
// private var channelManager: ChannelManager? = null // private var channelManager: ChannelManager? = null
private var isLeavelChannel: Boolean = false private var isLeavelChannel: Boolean = false
private var hasUpLoadLog = false private var hasUpLoadLog = false
...@@ -191,6 +199,8 @@ class AudioHomeActivity : ...@@ -191,6 +199,8 @@ class AudioHomeActivity :
runOnUiThread { runOnUiThread {
when (warn) { when (warn) {
103, 105, 107 -> { 103, 105, 107 -> {
YDLavManager.instances.callEndStatusUpdate(channelId!!, 4, "收到频道回调警告信息$warn")
writeAgoraLog("通话挂断:网络异常(${warn})") writeAgoraLog("通话挂断:网络异常(${warn})")
showToast("当前网络较差,请更换网络!") showToast("当前网络较差,请更换网络!")
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
...@@ -236,28 +246,28 @@ class AudioHomeActivity : ...@@ -236,28 +246,28 @@ class AudioHomeActivity :
leaveChannel() leaveChannel()
} }
123 -> { 123 -> {
// showToast("当前用户不允许接听电话,请联系客服") // showToast("当前用户不允许接听电话,请联系客服")
// leaveChannel() // leaveChannel()
} }
else -> { else -> {
//异常关闭 //异常关闭
leaveChannel() leaveChannel()
} }
} }
YDLavManager.instances.callEndStatusUpdate(channelId!!, 4, "频道的错误回调信息$err")
} }
} }
override fun onApiCallExecuted(error: Int, api: String?, result: String?) { override fun onApiCallExecuted(error: Int, api: String?, result: String?) {
super.onApiCallExecuted(error, api, result) super.onApiCallExecuted(error, api, result)
// LogUtil.e("[agora]$api 已执行回调 $result") // LogUtil.e("[agora]$api 已执行回调 $result")
} }
override fun onJoinChannelSuccess(channel: String?, uid: Int, elapsed: Int) { override fun onJoinChannelSuccess(channel: String?, uid: Int, elapsed: Int) {
super.onJoinChannelSuccess(channel, uid, elapsed) super.onJoinChannelSuccess(channel, uid, elapsed)
LogUtil.e("[agora]$uid 用户声网加入频道成功:channel=$channel") LogUtil.e("[agora]$uid 用户声网加入频道成功:channel=$channel")
//更新ui //更新ui
// onJoinChannelSuccess() // onJoinChannelSuccess()
//更新:现在专家先加入频道,所以不会有等待的过程, //更新:现在专家先加入频道,所以不会有等待的过程,
runOnUiThread { runOnUiThread {
...@@ -265,7 +275,6 @@ class AudioHomeActivity : ...@@ -265,7 +275,6 @@ class AudioHomeActivity :
//自己加入频道成功 //自己加入频道成功
connectSuccess() connectSuccess()
} }
} }
override fun onRejoinChannelSuccess(channel: String?, uid: Int, elapsed: Int) { override fun onRejoinChannelSuccess(channel: String?, uid: Int, elapsed: Int) {
...@@ -280,7 +289,6 @@ class AudioHomeActivity : ...@@ -280,7 +289,6 @@ class AudioHomeActivity :
} }
} }
override fun onRtcStats(stats: IRtcEngineEventHandler.RtcStats?) { override fun onRtcStats(stats: IRtcEngineEventHandler.RtcStats?) {
super.onRtcStats(stats) super.onRtcStats(stats)
//因为用户端直接加入了频道,防止该回调执行时,专家还未加入频道,因此在连接成功之后,才进行频道人数判断 //因为用户端直接加入了频道,防止该回调执行时,专家还未加入频道,因此在连接成功之后,才进行频道人数判断
...@@ -297,6 +305,7 @@ class AudioHomeActivity : ...@@ -297,6 +305,7 @@ class AudioHomeActivity :
super.onConnectionStateChanged(state, reason) super.onConnectionStateChanged(state, reason)
// 3 网络连接被服务器中止 该情况现在是因为后端踢人逻辑 // 3 网络连接被服务器中止 该情况现在是因为后端踢人逻辑
if (reason == 3) { if (reason == 3) {
YDLavManager.instances.callEndStatusUpdate(channelId!!, 4, "服务端踢人触发的回调")
writeAgoraLog("通话结束:原因(${reason})") writeAgoraLog("通话结束:原因(${reason})")
com.yidianling.common.tools.ToastUtil.toastShort("专家已挂断") com.yidianling.common.tools.ToastUtil.toastShort("专家已挂断")
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
...@@ -312,7 +321,6 @@ class AudioHomeActivity : ...@@ -312,7 +321,6 @@ class AudioHomeActivity :
uploadLog() uploadLog()
} }
override fun onUserJoined(uid: Int, elapsed: Int) { override fun onUserJoined(uid: Int, elapsed: Int) {
super.onUserJoined(uid, elapsed) super.onUserJoined(uid, elapsed)
LogUtil.e("[agora]远端用户/主播加入频道回调") LogUtil.e("[agora]远端用户/主播加入频道回调")
...@@ -326,6 +334,8 @@ class AudioHomeActivity : ...@@ -326,6 +334,8 @@ class AudioHomeActivity :
uploadLog() uploadLog()
showToast("专家已挂断") showToast("专家已挂断")
YDLavManager.instances.callEndStatusUpdate(channelId!!, 4, "对方离开频道")
if (totalDisposable != null) { if (totalDisposable != null) {
totalDisposable!!.dispose() totalDisposable!!.dispose()
} }
...@@ -335,7 +345,6 @@ class AudioHomeActivity : ...@@ -335,7 +345,6 @@ class AudioHomeActivity :
}, 500) }, 500)
} }
override fun onNetworkQuality(uid: Int, txQuality: Int, rxQuality: Int) { override fun onNetworkQuality(uid: Int, txQuality: Int, rxQuality: Int) {
super.onNetworkQuality(uid, txQuality, rxQuality) super.onNetworkQuality(uid, txQuality, rxQuality)
var status = -1 var status = -1
...@@ -354,7 +363,7 @@ class AudioHomeActivity : ...@@ -354,7 +363,7 @@ class AudioHomeActivity :
"对方的网络状况不佳" "对方的网络状况不佳"
} }
} }
0-> { 0 -> {
if (txQuality in 1..2 && rxQuality in 1..2) { if (txQuality in 1..2 && rxQuality in 1..2) {
"" ""
} else if (txQuality >= 5 || rxQuality >= 5) { } else if (txQuality >= 5 || rxQuality >= 5) {
...@@ -403,7 +412,6 @@ class AudioHomeActivity : ...@@ -403,7 +412,6 @@ class AudioHomeActivity :
requestPermission() requestPermission()
} }
private fun setWindowStatusBarColor() { private fun setWindowStatusBarColor() {
StatusBarUtils.setWindowStatusBarColor(this, R.color.audioim_color_40353535) StatusBarUtils.setWindowStatusBarColor(this, R.color.audioim_color_40353535)
} }
...@@ -413,10 +421,7 @@ class AudioHomeActivity : ...@@ -413,10 +421,7 @@ class AudioHomeActivity :
sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager? sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager?
localPowerManager = getSystemService(POWER_SERVICE) as PowerManager? localPowerManager = getSystemService(POWER_SERVICE) as PowerManager?
localWakeLock = localPowerManager!!.newWakeLock( localWakeLock = localPowerManager!!.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "yidianling")
PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK,
"yidianling"
)
} }
private fun initIntentData() { private fun initIntentData() {
...@@ -433,16 +438,7 @@ class AudioHomeActivity : ...@@ -433,16 +438,7 @@ class AudioHomeActivity :
listenId = intent.getStringExtra(IntentConstants.INTENT_LISTEN_ID) listenId = intent.getStringExtra(IntentConstants.INTENT_LISTEN_ID)
commentUrl = intent.getStringExtra(IntentConstants.INTENT_COMMENT_URL) commentUrl = intent.getStringExtra(IntentConstants.INTENT_COMMENT_URL)
val logBean = AgoraLogInfoBean( val logBean = AgoraLogInfoBean(expertHeadUrl, expertName, channelId, remainTime, listenerUid, totalDuration, callId, listenId)
expertHeadUrl,
expertName,
channelId,
remainTime,
listenerUid,
totalDuration,
callId,
listenId
)
val content = Gson().toJson(logBean) val content = Gson().toJson(logBean)
writeAgoraLog("主叫方发送的邀请通话消息内容:$content", isAppend = false) writeAgoraLog("主叫方发送的邀请通话消息内容:$content", isAppend = false)
...@@ -461,7 +457,6 @@ class AudioHomeActivity : ...@@ -461,7 +457,6 @@ class AudioHomeActivity :
} }
} }
private fun initView() { private fun initView() {
tv_change_route.isEnabled = false tv_change_route.isEnabled = false
//水波纹view初始化 //水波纹view初始化
...@@ -492,7 +487,8 @@ class AudioHomeActivity : ...@@ -492,7 +487,8 @@ class AudioHomeActivity :
private fun setClickEvent() { private fun setClickEvent() {
//切换线路 //切换线路
tv_change_route.setOnClickListener { showChooseDialog(1) } tv_change_route.setOnClickListener {
showChooseDialog(1) }
//挂断 //挂断
iv_hang_up.setOnClickListener { iv_hang_up.setOnClickListener {
if (Utils.isFastClick()) { if (Utils.isFastClick()) {
...@@ -500,6 +496,7 @@ class AudioHomeActivity : ...@@ -500,6 +496,7 @@ class AudioHomeActivity :
return@setOnClickListener return@setOnClickListener
} }
if (isConnectSuccess) { if (isConnectSuccess) {
YDLavManager.instances.callEndStatusUpdate(channelId!!, 3, "主叫主动挂断")
writeAgoraLog("已接通:主叫主动挂断") writeAgoraLog("已接通:主叫主动挂断")
updateExpertStatus(false, 1) updateExpertStatus(false, 1)
leaveChannel() leaveChannel()
...@@ -508,11 +505,7 @@ class AudioHomeActivity : ...@@ -508,11 +505,7 @@ class AudioHomeActivity :
userCloseCalling() userCloseCalling()
} }
ActionCountUtils.count( ActionCountUtils.count("shengwang_popup_layer_page|shengwang_popup_layer_refuse_click", YdlCommonRouterManager.getYdlCommonRoute().getUid().toString(), uid = YdlCommonRouterManager.getYdlCommonRoute().getUid().toString())
"shengwang_popup_layer_page|shengwang_popup_layer_refuse_click",
YdlCommonRouterManager.getYdlCommonRoute().getUid().toString(),
uid = YdlCommonRouterManager.getYdlCommonRoute().getUid().toString()
)
} }
//免提 //免提
...@@ -544,8 +537,7 @@ class AudioHomeActivity : ...@@ -544,8 +537,7 @@ class AudioHomeActivity :
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
private fun requestPermission() { private fun requestPermission() {
val rxPermissions = RxPermissions(this) val rxPermissions = RxPermissions(this)
rxPermissions.requestEach(Manifest.permission.RECORD_AUDIO) rxPermissions.requestEach(Manifest.permission.RECORD_AUDIO).subscribe { permission ->
.subscribe { permission ->
if (permission.granted) { if (permission.granted) {
init() init()
} else if (permission.shouldShowRequestPermissionRationale) { } else if (permission.shouldShowRequestPermissionRationale) {
...@@ -569,30 +561,14 @@ class AudioHomeActivity : ...@@ -569,30 +561,14 @@ class AudioHomeActivity :
//初始化声网 //初始化声网
initializeAgoraEngine() initializeAgoraEngine()
//发起呼叫 //发起呼叫
var msgBean = AudioMessageBean( var msgBean = AudioMessageBean(1, channelId!!, YdlCommonRouterManager.getYdlCommonRoute().getUid().toString(), YdlCommonRouterManager.getYdlCommonRoute().getUserInfo()!!.headUrl, YdlCommonRouterManager.getYdlCommonRoute().getUserInfo()!!.userName, remainTime!!.toInt(), relationId, callId, null, channelId)
1,
channelId!!,
YdlCommonRouterManager.getYdlCommonRoute().getUid().toString(),
YdlCommonRouterManager.getYdlCommonRoute().getUserInfo()!!.headUrl,
YdlCommonRouterManager.getYdlCommonRoute().getUserInfo()!!.userName,
remainTime!!.toInt(),
relationId,
callId,
null,
channelId
)
sendDoctocrMsg = Gson().toJson(msgBean) sendDoctocrMsg = Gson().toJson(msgBean)
writeAgoraLog("主叫发送通话邀请") writeAgoraLog("主叫发送通话邀请")
rtcCall() rtcCall()
//开始60s等待倒计时 //开始60s等待倒计时
waitDisposable = Observable.interval(0, 100, TimeUnit.MILLISECONDS) waitDisposable = Observable.interval(0, 100, TimeUnit.MILLISECONDS).subscribeOn(Schedulers.computation()).take(600).observeOn(AndroidSchedulers.mainThread()).subscribe({
.subscribeOn(Schedulers.computation())
.take(600)
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
tv_change_time_counter.text = "${60 - it / 10}s" tv_change_time_counter.text = "${60 - it / 10}s"
var result = it.toFloat() / 2.5f var result = it.toFloat() / 2.5f
progress_view.setProgress(result) progress_view.setProgress(result)
...@@ -611,7 +587,7 @@ class AudioHomeActivity : ...@@ -611,7 +587,7 @@ class AudioHomeActivity :
writeAgoraLog("未接通挂断:60s等待倒计时结束挂断") writeAgoraLog("未接通挂断:60s等待倒计时结束挂断")
//提示切换传统线路 //提示切换传统线路
//发送消息通知专家用户已挂断 //发送消息通知专家用户已挂断
YDLavManager.instances.cancelCall( listenerUid!!, channelId!!){msg,code-> YDLavManager.instances.cancelCall(listenerUid!!, channelId!!, sendDoctocrMsg!!) { msg, code ->
writeAgoraLog("未接听时:主叫主动挂断失败,msg=$msg($code),再次挂断") writeAgoraLog("未接听时:主叫主动挂断失败,msg=$msg($code),再次挂断")
} }
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
...@@ -629,7 +605,6 @@ class AudioHomeActivity : ...@@ -629,7 +605,6 @@ class AudioHomeActivity :
YDLavManager.instances.rtcCall(listenerUid, channelId, sendDoctocrMsg) YDLavManager.instances.rtcCall(listenerUid, channelId, sendDoctocrMsg)
} }
/** /**
* 声网初始化 * 声网初始化
*/ */
...@@ -648,12 +623,7 @@ class AudioHomeActivity : ...@@ -648,12 +623,7 @@ class AudioHomeActivity :
*/ */
fun joinChannel() { fun joinChannel() {
writeAgoraLog("对方接受了通话邀请,主叫开始加入频道:$channelId") writeAgoraLog("对方接受了通话邀请,主叫开始加入频道:$channelId")
voiceManage!!.getVoiceApi().joinChannel( voiceManage!!.getVoiceApi().joinChannel(token!!, channelId!!, "Extra Optional Data", YdlCommonRouterManager.getYdlCommonRoute().getUid())
token!!,
channelId!!,
"Extra Optional Data",
YdlCommonRouterManager.getYdlCommonRoute().getUid()
)
} }
/** /**
...@@ -665,7 +635,7 @@ class AudioHomeActivity : ...@@ -665,7 +635,7 @@ class AudioHomeActivity :
writeAgoraLog("未接听时:主叫主动挂断,取消呼叫") writeAgoraLog("未接听时:主叫主动挂断,取消呼叫")
LogUtil.e("未接听挂断") LogUtil.e("未接听挂断")
//发送消息通知专家用户已挂断 //发送消息通知专家用户已挂断
YDLavManager.instances.cancelCall( listenerUid!!, channelId!!){msg,code-> YDLavManager.instances.cancelCall(listenerUid!!, channelId!!, sendDoctocrMsg!!) { msg, code ->
writeAgoraLog("未接听时:主叫主动挂断失败,msg=$msg($code),再次挂断") writeAgoraLog("未接听时:主叫主动挂断失败,msg=$msg($code),再次挂断")
} }
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
...@@ -690,19 +660,19 @@ class AudioHomeActivity : ...@@ -690,19 +660,19 @@ class AudioHomeActivity :
callStartTime = System.currentTimeMillis() callStartTime = System.currentTimeMillis()
} }
// if(finishStatus==1){ // if(finishStatus==1){
// var param = ConnectFinishCommand(listenerUid!!, relationId!!, "0", // var param = ConnectFinishCommand(listenerUid!!, relationId!!, "0",
// remainTime!!.toInt() - localRemainTime!!, callId!!, // remainTime!!.toInt() - localRemainTime!!, callId!!,
// "0","0","$callStartTime", // "0","0","$callStartTime",
// "${System.currentTimeMillis()}",3) // "${System.currentTimeMillis()}",3)
// mPresenter.connectFinish(param) // mPresenter.connectFinish(param)
// }else{ // }else{
// 接通开始回调 // 接通开始回调
// callStartTime = System.currentTimeMillis() // callStartTime = System.currentTimeMillis()
// var param = ConnectStartCommand(listenerUid!!, relationId!!, callId!!, // var param = ConnectStartCommand(listenerUid!!, relationId!!, callId!!,
// "${System.currentTimeMillis()}","3","0","0","0","0") // "${System.currentTimeMillis()}","3","0","0","0","0")
// mPresenter.connectStart(param) // mPresenter.connectStart(param)
// } // }
} }
/** /**
...@@ -710,8 +680,7 @@ class AudioHomeActivity : ...@@ -710,8 +680,7 @@ class AudioHomeActivity :
*/ */
private fun showChooseDialog(type: Int) { private fun showChooseDialog(type: Int) {
val dialog = val dialog = AxbConfirmDialog(mContext, type, object : AxbConfirmDialog.OnClickEnsureListener {
AxbConfirmDialog(mContext, type, object : AxbConfirmDialog.OnClickEnsureListener {
override fun onClickEnsure() { override fun onClickEnsure() {
switchAXB() switchAXB()
} }
...@@ -736,8 +705,9 @@ class AudioHomeActivity : ...@@ -736,8 +705,9 @@ class AudioHomeActivity :
override fun onSuccess() { override fun onSuccess() {
mPresenter.getAXBPhone(ConnectCommand(listenId!!, "1")) mPresenter.getAXBPhone(ConnectCommand(listenId!!, "1"))
} }
}) })
YDLavManager.instances.callEndStatusUpdate(channelId!!, 3, "接通中:主叫主动切换AXB")
} else { } else {
mPresenter.getAXBPhone(ConnectCommand(listenId!!, "1")) mPresenter.getAXBPhone(ConnectCommand(listenId!!, "1"))
} }
...@@ -759,14 +729,13 @@ class AudioHomeActivity : ...@@ -759,14 +729,13 @@ class AudioHomeActivity :
//未连接成功,切换axb时:需发送消息通知专家端用户已挂断 //未连接成功,切换axb时:需发送消息通知专家端用户已挂断
//发送消息通知专家用户已挂断 //发送消息通知专家用户已挂断
//发送消息通知专家用户已挂断 //发送消息通知专家用户已挂断
YDLavManager.instances.cancelCall( listenerUid!!, channelId!!){msg,code-> YDLavManager.instances.cancelCall(listenerUid!!, channelId!!, sendDoctocrMsg!!) { msg, code ->
writeAgoraLog("未接听时:主叫主动挂断失败,msg=$msg($code),再次挂断") writeAgoraLog("未接听时:主叫主动挂断失败,msg=$msg($code),再次挂断")
} }
leaveChannel() leaveChannel()
} }
} }
/** /**
* 跳转拨号界面 * 跳转拨号界面
*/ */
...@@ -776,7 +745,6 @@ class AudioHomeActivity : ...@@ -776,7 +745,6 @@ class AudioHomeActivity :
finish() finish()
} }
/** /**
* 60s等待完成,专家未接听 * 60s等待完成,专家未接听
*/ */
...@@ -859,9 +827,9 @@ class AudioHomeActivity : ...@@ -859,9 +827,9 @@ class AudioHomeActivity :
voiceManage!!.getVoiceApi().setEnableSpeakerphone(false) voiceManage!!.getVoiceApi().setEnableSpeakerphone(false)
iv_hands_free.isSelected = false iv_hands_free.isSelected = false
iv_hands_free.setImageResource(R.drawable.audioim_img_hands_free_unuse) iv_hands_free.setImageResource(R.drawable.audioim_img_hands_free_unuse)
// if (waitDisposable != null) { // if (waitDisposable != null) {
// waitDisposable!!.dispose() // waitDisposable!!.dispose()
// } // }
if (disposable != null) { if (disposable != null) {
disposable!!.dispose() disposable!!.dispose()
} }
...@@ -880,11 +848,7 @@ class AudioHomeActivity : ...@@ -880,11 +848,7 @@ class AudioHomeActivity :
tv_tips.visibility = View.GONE tv_tips.visibility = View.GONE
//剩余倾诉时长倒计时 //剩余倾诉时长倒计时
totalDisposable = Observable.interval(0, 1, TimeUnit.SECONDS) totalDisposable = Observable.interval(0, 1, TimeUnit.SECONDS).subscribeOn(Schedulers.computation()).take(remainTime!!.toLong() + 1).observeOn(AndroidSchedulers.mainThread()).subscribe({
.subscribeOn(Schedulers.computation())
.take(remainTime!!.toLong() + 1)
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
localRemainTime = remainTime!!.toInt() - it.toInt() localRemainTime = remainTime!!.toInt() - it.toInt()
if (localRemainTime == 180) { if (localRemainTime == 180) {
playNoticeMusic(3) playNoticeMusic(3)
...@@ -895,27 +859,15 @@ class AudioHomeActivity : ...@@ -895,27 +859,15 @@ class AudioHomeActivity :
if (localRemainTime!! <= 60) { if (localRemainTime!! <= 60) {
if (tv_change_route.isEnabled) { if (tv_change_route.isEnabled) {
tv_change_route.isEnabled = false tv_change_route.isEnabled = false
tv_change_route.setTextColor( tv_change_route.setTextColor(ContextCompat.getColor(this, R.color.audioim_color_50ffffff))
ContextCompat.getColor( tv_change_route.setCompoundDrawablesWithIntrinsicBounds(null, null, ContextCompat.getDrawable(this, R.drawable.audioim_img_choose_arrow_unuse), null)
this,
R.color.audioim_color_50ffffff
)
)
tv_change_route.setCompoundDrawablesWithIntrinsicBounds(
null,
null,
ContextCompat.getDrawable(
this,
R.drawable.audioim_img_choose_arrow_unuse
),
null
)
} }
} }
tv_remain_time.text = DateUtils.formatTime(localRemainTime.toString()) tv_remain_time.text = DateUtils.formatTime(localRemainTime.toString())
}, { }, {
LogUtil.d(it.message) LogUtil.d(it.message)
}, { }, {
YDLavManager.instances.callEndStatusUpdate(channelId!!, 3, "倾诉时间已用完")
//注意:自动挂断时,如果对方离开频道的回调已经触发,就不要再重复调用接口 //注意:自动挂断时,如果对方离开频道的回调已经触发,就不要再重复调用接口
showToast("通话已结束") showToast("通话已结束")
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
...@@ -951,18 +903,7 @@ class AudioHomeActivity : ...@@ -951,18 +903,7 @@ class AudioHomeActivity :
* @param isCall true 拨打 false 取消拨打 * @param isCall true 拨打 false 取消拨打
*/ */
private fun noticeServerPush(isCall: Boolean) { private fun noticeServerPush(isCall: Boolean) {
var msgBean = AudioMessageBean( var msgBean = AudioMessageBean(1, channelId!!, YdlCommonRouterManager.getYdlCommonRoute().getUid().toString(), YdlCommonRouterManager.getYdlCommonRoute().getUserInfo()!!.headUrl, YdlCommonRouterManager.getYdlCommonRoute().getUserInfo()!!.userName, remainTime!!.toInt(), relationId, callId, null, channelId)
1,
channelId!!,
YdlCommonRouterManager.getYdlCommonRoute().getUid().toString(),
YdlCommonRouterManager.getYdlCommonRoute().getUserInfo()!!.headUrl,
YdlCommonRouterManager.getYdlCommonRoute().getUserInfo()!!.userName,
remainTime!!.toInt(),
relationId,
callId,
null,
channelId
)
var cmd = NoticePushCommand() var cmd = NoticePushCommand()
cmd.data = msgBean cmd.data = msgBean
cmd.pushId = listenerUid cmd.pushId = listenerUid
...@@ -974,7 +915,6 @@ class AudioHomeActivity : ...@@ -974,7 +915,6 @@ class AudioHomeActivity :
mPresenter.noticeServerPush(cmd) mPresenter.noticeServerPush(cmd)
} }
/** /**
* 声网离开频道 * 声网离开频道
*/ */
...@@ -992,22 +932,13 @@ class AudioHomeActivity : ...@@ -992,22 +932,13 @@ class AudioHomeActivity :
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
sensorManager!!.registerListener( sensorManager!!.registerListener(this, sensorManager!!.getDefaultSensor(Sensor.TYPE_PROXIMITY), SensorManager.SENSOR_DELAY_NORMAL)
this,
sensorManager!!.getDefaultSensor(Sensor.TYPE_PROXIMITY),
SensorManager.SENSOR_DELAY_NORMAL
)
ActionCountUtils.count( ActionCountUtils.count("shengwang_popup_layer_page|shengwang_popup_layer_page_visit", "", uid = YdlCommonRouterManager.getYdlCommonRoute().getUid().toString())
"shengwang_popup_layer_page|shengwang_popup_layer_page_visit",
"",
uid = YdlCommonRouterManager.getYdlCommonRoute().getUid().toString()
)
} }
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) { override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
} }
override fun onSensorChanged(event: SensorEvent?) { override fun onSensorChanged(event: SensorEvent?) {
...@@ -1030,7 +961,6 @@ class AudioHomeActivity : ...@@ -1030,7 +961,6 @@ class AudioHomeActivity :
} }
} }
/** /**
* 显示自定义弹窗 * 显示自定义弹窗
*/ */
...@@ -1063,14 +993,12 @@ class AudioHomeActivity : ...@@ -1063,14 +993,12 @@ class AudioHomeActivity :
} }
} }
override fun showProgressView() { override fun showProgressView() {
try { try {
showProgressDialog() showProgressDialog()
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() e.printStackTrace()
} }
} }
override fun dismissProgressView() { override fun dismissProgressView() {
...@@ -1079,7 +1007,6 @@ class AudioHomeActivity : ...@@ -1079,7 +1007,6 @@ class AudioHomeActivity :
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() e.printStackTrace()
} }
} }
fun uploadLog() { fun uploadLog() {
...@@ -1089,26 +1016,18 @@ class AudioHomeActivity : ...@@ -1089,26 +1016,18 @@ class AudioHomeActivity :
} }
} }
/** /**
* 上传错误日志 * 上传错误日志
* zhu 洪平要的,判别是移动端主动调的还是声网返的 * zhu 洪平要的,判别是移动端主动调的还是声网返的
*/ */
private fun uploadException( private fun uploadException(message: String, zhu: String = "", eventType: String = "99", callback: YDLavManager.UploadExceptionCallback?) {
message: String,
zhu: String = "",
eventType: String = "99",
callback: YDLavManager.UploadExceptionCallback?
) {
var time: String = (System.currentTimeMillis() / 1000).toString() var time: String = (System.currentTimeMillis() / 1000).toString()
var uid: String = var uid: String = ModularServiceManager.provide(IUserService::class.java).getUserInfo()?.uid!!
ModularServiceManager.provide(IUserService::class.java).getUserInfo()?.uid!!
var payLoad = PayLoad(channelId ?: "0", time, uid, "1", "999", message) var payLoad = PayLoad(channelId ?: "0", time, uid, "1", "999", message)
var connectException = ConnectExceptionCommand(time + zhu, "2", eventType, payLoad) var connectException = ConnectExceptionCommand(time + zhu, "2", eventType, payLoad)
YDLavManager.instances.uploadException(connectException, callback) YDLavManager.instances.uploadException(connectException, callback)
} }
fun writeAgoraLog(content: String, isAppend: Boolean = true) { fun writeAgoraLog(content: String, isAppend: Boolean = true) {
try { try {
AudioLogUtils.writeAgoraLog(content, "confide", isAppend) AudioLogUtils.writeAgoraLog(content, "confide", isAppend)
...@@ -1116,7 +1035,6 @@ class AudioHomeActivity : ...@@ -1116,7 +1035,6 @@ class AudioHomeActivity :
} }
} }
override fun finishActivity() { override fun finishActivity() {
leaveChannel() leaveChannel()
} }
......
...@@ -5,6 +5,8 @@ import android.content.Context ...@@ -5,6 +5,8 @@ import android.content.Context
import android.os.Handler import android.os.Handler
import android.text.TextUtils import android.text.TextUtils
import com.alibaba.android.arouter.launcher.ARouter import com.alibaba.android.arouter.launcher.ARouter
import com.google.gson.Gson
import com.ydl.audioim.bean.AgoraInvitationBean
import com.ydl.audioim.http.AudioApiRequestUtil import com.ydl.audioim.http.AudioApiRequestUtil
import com.ydl.audioim.http.command.ConnectExceptionCommand import com.ydl.audioim.http.command.ConnectExceptionCommand
import com.ydl.audioim.router.AudioImIn import com.ydl.audioim.router.AudioImIn
...@@ -25,6 +27,7 @@ import com.ydl.ydlcommon.utils.LogUtil ...@@ -25,6 +27,7 @@ import com.ydl.ydlcommon.utils.LogUtil
import com.ydl.ydlcommon.utils.log.LogHelper import com.ydl.ydlcommon.utils.log.LogHelper
import com.yidianling.common.tools.ToastUtil import com.yidianling.common.tools.ToastUtil
import com.yidianling.im.api.bean.IMRegisterObserverCustomNotificationCallBack import com.yidianling.im.api.bean.IMRegisterObserverCustomNotificationCallBack
import com.yidianling.im.api.bean.IMSendCustomNotificationResultCallBack
import com.yidianling.user.api.event.UserLoginEvent import com.yidianling.user.api.event.UserLoginEvent
import com.yidianling.user.api.event.UserLogoutEvent import com.yidianling.user.api.event.UserLogoutEvent
import com.yidianling.user.api.service.IUserService import com.yidianling.user.api.service.IUserService
...@@ -95,7 +98,7 @@ class YDLavManager { ...@@ -95,7 +98,7 @@ class YDLavManager {
//返回给主叫 //返回给主叫
LogUtil.e("[agora]${response?.calleeId}已接收呼叫邀请") LogUtil.e("[agora]${response?.calleeId}已接收呼叫邀请")
//加入声网频道时机修改:用户收到专家接受邀请的回调后再加入声网频道 //加入声网频道时机修改:主叫收到被叫接受邀请的回调后再加入声网频道
val act = ActivityManager.getInstance().getTopTaskActivity() val act = ActivityManager.getInstance().getTopTaskActivity()
if (act is AudioHomeActivity) { if (act is AudioHomeActivity) {
act.runOnUiThread { act.runOnUiThread {
...@@ -111,6 +114,7 @@ class YDLavManager { ...@@ -111,6 +114,7 @@ class YDLavManager {
val act = ActivityManager.getInstance().getTopTaskActivity() val act = ActivityManager.getInstance().getTopTaskActivity()
if (act is AudioHomeActivity) { if (act is AudioHomeActivity) {
act.runOnUiThread { act.runOnUiThread {
callEndStatusUpdate(response?.ChannelId!!, 2, "被叫拒绝")
ToastUtil.toastShort("对方已挂断") ToastUtil.toastShort("对方已挂断")
act.writeAgoraLog("被叫拒绝了通话邀请") act.writeAgoraLog("被叫拒绝了通话邀请")
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
...@@ -148,6 +152,8 @@ class YDLavManager { ...@@ -148,6 +152,8 @@ class YDLavManager {
RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_INVITATION_EXPIRE -> { //呼叫邀请过期。被叫 ACK 响应呼叫邀请后 60 秒呼叫邀请未被取消、接受、拒绝,则呼叫邀请过期。 RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_INVITATION_EXPIRE -> { //呼叫邀请过期。被叫 ACK 响应呼叫邀请后 60 秒呼叫邀请未被取消、接受、拒绝,则呼叫邀请过期。
if (act is AudioHomeActivity) { if (act is AudioHomeActivity) {
act.runOnUiThread { act.runOnUiThread {
sendCustomNotification(response?.calleeId!!, response?.ChannelId!!, "5")
callEndStatusUpdate(response.ChannelId!!, 2, "被叫超时未接听")
act.writeAgoraLog("呼叫失败:${errorCode}") act.writeAgoraLog("呼叫失败:${errorCode}")
} }
} }
...@@ -172,6 +178,7 @@ class YDLavManager { ...@@ -172,6 +178,7 @@ class YDLavManager {
} }
override fun onRemoteInvitationCanceled(response: CallRemoteResponse?) { override fun onRemoteInvitationCanceled(response: CallRemoteResponse?) {
callEndStatusUpdate(response?.ChannelId!!, 1, "主叫取消呼叫")
//返回给被叫 //返回给被叫
LogUtil.e("[agora]主叫${response?.callerId}已取消呼叫邀请") LogUtil.e("[agora]主叫${response?.callerId}已取消呼叫邀请")
AudioLogUtils.writeAgoraLog("呼叫邀请被取消:主叫主动取消", FILE_NAME) AudioLogUtils.writeAgoraLog("呼叫邀请被取消:主叫主动取消", FILE_NAME)
...@@ -186,6 +193,7 @@ class YDLavManager { ...@@ -186,6 +193,7 @@ class YDLavManager {
} else { } else {
AudioLogUtils.writeAgoraLog("呼叫邀请被取消:错误原因(${errorCode})", FILE_NAME) AudioLogUtils.writeAgoraLog("呼叫邀请被取消:错误原因(${errorCode})", FILE_NAME)
} }
callEndStatusUpdate(response?.ChannelId!!, 2, "超时未接听导致的取消呼叫")
//关闭页面 //关闭页面
closePage() closePage()
} }
...@@ -197,18 +205,67 @@ class YDLavManager { ...@@ -197,18 +205,67 @@ class YDLavManager {
AudioImIn.registerObserveCustomNotification(object : AudioImIn.registerObserveCustomNotification(object :
IMRegisterObserverCustomNotificationCallBack { IMRegisterObserverCustomNotificationCallBack {
override fun onObserverCustomNotification(content: String) { override fun onObserverCustomNotification(fromUid: String, toUid: String, content: String) {
LogUtil.e("[agora]收到云信的通知消息:$content")
val agoraInvitationBean = Gson().fromJson(content, AgoraInvitationBean::class.java)
//1发起呼叫 2接受呼叫 3取消呼叫 4拒绝呼叫邀请 5呼叫超时
when (agoraInvitationBean.callType) {
"1" -> {
receivedCall(agoraInvitationBean.data, "来自云信")
}
"2" -> {
val act = ActivityManager.getInstance().getTopTaskActivity()
if (act is AudioHomeActivity) {
act.runOnUiThread {
act.joinChannel()
}
}
}
"3" -> {
AudioLogUtils.writeAgoraLog("呼叫邀请被取消:主叫主动取消", FILE_NAME)
closePage()
}
"4" -> {
val act = ActivityManager.getInstance().getTopTaskActivity()
if (act is AudioHomeActivity) {
act.runOnUiThread {
ToastUtil.toastShort("对方已挂断")
act.writeAgoraLog("被叫拒绝了通话邀请")
//通话结束或挂断时,上传日志文件
act.uploadLog()
act.leaveChannel()
}
}
}
"5" -> {
AudioLogUtils.writeAgoraLog("呼叫邀请被取消:呼叫邀请过期", FILE_NAME)
//关闭页面
closePage()
}
}
} }
}) })
} }
fun rtcCall(listenerUid: String?, channelId: String?, sendDoctocrMsg: String?) { fun rtcCall(listenerUid: String?, channelId: String?, sendDoctocrMsg: String?) {
YDLRTMClient.instances.call(listenerUid, channelId, sendDoctocrMsg) YDLRTMClient.instances.call(listenerUid, channelId, sendDoctocrMsg)
sendCustomNotification(listenerUid!!, sendDoctocrMsg!!, "1")
}
fun acceptCall(toUid: String, channelId: String?, data: String) {
YDLRTMClient.instances.acceptCall(channelId)
sendCustomNotification(toUid, data, "2")
}
fun refuseCall(toUid: String, channelId: String?, data: String) {
YDLRTMClient.instances.refuseCall(channelId)
sendCustomNotification(toUid, data, "4")
} }
fun cancelCall(listenerUid: String, channelId: String, event: (msg: String?, code: Int) -> Unit) { fun cancelCall(listenerUid: String, channelId: String, data: String, event: (msg: String?, code: Int) -> Unit) {
YDLRTMClient.instances.cancelCall(listenerUid, channelId, YDLRTMClient.instances.cancelCall(listenerUid, channelId, object : CancelCallStatusListener {
object : CancelCallStatusListener {
override fun onFailure(errorMsg: String?, errorCode: Int) { override fun onFailure(errorMsg: String?, errorCode: Int) {
event(errorMsg, errorCode) event(errorMsg, errorCode)
YDLRTMClient.instances.cancelCall(listenerUid, channelId, null) YDLRTMClient.instances.cancelCall(listenerUid, channelId, null)
...@@ -217,6 +274,26 @@ class YDLavManager { ...@@ -217,6 +274,26 @@ class YDLavManager {
override fun onSuccess() { override fun onSuccess() {
} }
}) })
callEndStatusUpdate(channelId, 1, "主叫取消呼叫")
sendCustomNotification(listenerUid, data, "3")
}
private fun sendCustomNotification(toUid: String, data: String, callType: String) {
val infoBean = AgoraInvitationBean()
infoBean.data = data
infoBean.callType = callType
AudioImIn.sendCustomNotification(toUid, Gson().toJson(infoBean),
object : IMSendCustomNotificationResultCallBack {
override fun onException(throwable: Throwable) {
}
override fun onFailed(code: Int) {
}
override fun onSuccess() {
}
})
} }
fun login(userId: String?) { fun login(userId: String?) {
...@@ -237,9 +314,7 @@ class YDLavManager { ...@@ -237,9 +314,7 @@ class YDLavManager {
.observeOn(AndroidSchedulers.mainThread()).subscribe({ .observeOn(AndroidSchedulers.mainThread()).subscribe({
if ("200".equals(it.code)) { if ("200".equals(it.code)) {
LogUtil.e("[agora]登录av的login-uid:$userId") LogUtil.e("[agora]登录av的login-uid:$userId")
YDLRTMClient.instances.login( YDLRTMClient.instances.login(LoginParam(userId, it.data.token), object : LoginCallback {
LoginParam(userId, it.data.token),
object : LoginCallback {
override fun onSuccess() { override fun onSuccess() {
//登陆成功,发起呼叫 //登陆成功,发起呼叫
LogUtil.e("[agora]实时消息登录成功") LogUtil.e("[agora]实时消息登录成功")
...@@ -253,8 +328,7 @@ class YDLavManager { ...@@ -253,8 +328,7 @@ class YDLavManager {
}) })
} else { } else {
LogUtil.e("声网token获取失败uid:" + userId + " error:" + it.msg) LogUtil.e("声网token获取失败uid:" + userId + " error:" + it.msg)
LogHelper.getInstance() LogHelper.getInstance().writeLogSync("声网token获取失败uid:" + userId + " error:" + it.msg)
.writeLogSync("声网token获取失败uid:" + userId + " error:" + it.msg)
} }
}, { }, {
LogUtil.e("声网token获取异常uid:" + userId + " error:" + it.message) LogUtil.e("声网token获取异常uid:" + userId + " error:" + it.message)
...@@ -269,9 +343,7 @@ class YDLavManager { ...@@ -269,9 +343,7 @@ class YDLavManager {
if (!TextUtils.isEmpty(content)) { if (!TextUtils.isEmpty(content)) {
//如果已经接听了用户电话 再有电话进来 是不能接听的 //如果已经接听了用户电话 再有电话进来 是不能接听的
if (!activityIsExists(ConsultantAudioHomeActivity::class.java) && !activityIsExists( if (!activityIsExists(ConsultantAudioHomeActivity::class.java) && !activityIsExists(
AudioHomeActivity::class.java AudioHomeActivity::class.java)) {
)
) {
//延时启动通话界面,防止刚打开就被main遮挡 //延时启动通话界面,防止刚打开就被main遮挡
Observable.timer(1000, TimeUnit.MILLISECONDS).subscribeOn(Schedulers.io()) Observable.timer(1000, TimeUnit.MILLISECONDS).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()).subscribe { .observeOn(AndroidSchedulers.mainThread()).subscribe {
...@@ -337,8 +409,7 @@ class YDLavManager { ...@@ -337,8 +409,7 @@ class YDLavManager {
fun uploadException(connectException: ConnectExceptionCommand, fun uploadException(connectException: ConnectExceptionCommand,
callback: UploadExceptionCallback?) { callback: UploadExceptionCallback?) {
AudioApiRequestUtil.connectException(connectException).subscribeOn(Schedulers.io()) AudioApiRequestUtil.connectException(connectException).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread()).subscribe({
.subscribe({
callback?.onSuccess() callback?.onSuccess()
}, { }, {
LogUtil.e("agora", "声网上传异常与错误日志接口调用失败:" + it.message) LogUtil.e("agora", "声网上传异常与错误日志接口调用失败:" + it.message)
...@@ -352,6 +423,16 @@ class YDLavManager { ...@@ -352,6 +423,16 @@ class YDLavManager {
fun onSuccess() fun onSuccess()
} }
@SuppressLint("CheckResult")
fun callEndStatusUpdate(channelId: String, endStatus: Int, msg: String) {
AudioApiRequestUtil.callEndStatusUpdate(channelId, endStatus, msg)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()).subscribe({
}, {
})
}
/** /**
* 实时消息全局监听 * 实时消息全局监听
*/ */
......
package com.ydl.audioim.bean;
/**
* @author jiucheng
* @描述:自定义的Invitation
* @Copyright Copyright (c) 2018
* @Company 壹点灵
* @date 2020/4/23
*/
public class AgoraInvitationBean {
public String data;
public String business="agora";
public String callType;//1发起呼叫 2接受呼叫 3取消呼叫 4拒绝呼叫邀请 5呼叫超时
}
...@@ -3,7 +3,9 @@ package com.ydl.audioim.http ...@@ -3,7 +3,9 @@ package com.ydl.audioim.http
import com.google.gson.Gson import com.google.gson.Gson
import com.ydl.audioim.bean.AgoraTokenResponse import com.ydl.audioim.bean.AgoraTokenResponse
import com.ydl.audioim.bean.ConnectBean import com.ydl.audioim.bean.ConnectBean
import com.ydl.audioim.http.command.* import com.ydl.audioim.http.command.ConnectCommand
import com.ydl.audioim.http.command.ConnectExceptionCommand
import com.ydl.audioim.http.command.NoticePushCommand
import com.ydl.consultantim.bean.ListenTokenBean import com.ydl.consultantim.bean.ListenTokenBean
import com.ydl.consultantim.command.ListenTokenCmd import com.ydl.consultantim.command.ListenTokenCmd
import com.ydl.ydlcommon.data.http.BaseAPIResponse import com.ydl.ydlcommon.data.http.BaseAPIResponse
...@@ -29,8 +31,7 @@ class AudioApiRequestUtil { ...@@ -29,8 +31,7 @@ class AudioApiRequestUtil {
*/ */
fun connectListen(cmd: ConnectCommand): Observable<BaseAPIResponse<ConnectBean>> { fun connectListen(cmd: ConnectCommand): Observable<BaseAPIResponse<ConnectBean>> {
return RxUtils.mapObservable(cmd) return RxUtils.mapObservable(cmd)
.flatMap { .flatMap { it ->
it->
YDLHttpUtils.obtainApi(AudioNetAPi::class.java).connectListen(it) YDLHttpUtils.obtainApi(AudioNetAPi::class.java).connectListen(it)
} }
} }
...@@ -85,15 +86,19 @@ class AudioApiRequestUtil { ...@@ -85,15 +86,19 @@ class AudioApiRequestUtil {
/** /**
* 获取声网登录token * 获取声网登录token
*/ */
fun getAgoraToken(): Observable<BaseAPIResponse<AgoraTokenResponse>>{ fun getAgoraToken(): Observable<BaseAPIResponse<AgoraTokenResponse>> {
return YDLHttpUtils.obtainApi(AudioNetAPi::class.java).getAgoraToken() return YDLHttpUtils.obtainApi(AudioNetAPi::class.java).getAgoraToken()
} }
/** /**
* 获取声网登录token * 获取声网登录token
*/ */
fun listenToken(cmd: ListenTokenCmd): Observable<BaseResponse<ListenTokenBean>>{ fun listenToken(cmd: ListenTokenCmd): Observable<BaseResponse<ListenTokenBean>> {
return YDLHttpUtils.obtainApi(AudioNetAPi::class.java).listenToken(NetworkParamsUtils.getMaps(cmd)) return YDLHttpUtils.obtainApi(AudioNetAPi::class.java).listenToken(NetworkParamsUtils.getMaps(cmd))
} }
fun callEndStatusUpdate(channelId: String, endStatus: Int, msg: String): Observable<BaseResponse<Any>> {
return YDLHttpUtils.obtainApi(AudioNetAPi::class.java).callEndStatusUpdate(channelId, endStatus, msg)
}
} }
} }
\ No newline at end of file
...@@ -69,4 +69,7 @@ interface AudioNetAPi { ...@@ -69,4 +69,7 @@ interface AudioNetAPi {
fun listenToken(@FieldMap map: Map<String, String>): Observable<BaseResponse<ListenTokenBean>> fun listenToken(@FieldMap map: Map<String, String>): Observable<BaseResponse<ListenTokenBean>>
@GET("message/call-end/agora")
fun callEndStatusUpdate(channelId:String,endStatus:Int,msg:String): Observable<BaseResponse<Any>>
} }
\ No newline at end of file
...@@ -35,7 +35,6 @@ import com.ydl.consultantim.presenter.ConsultantAudioHomePresenterImpl ...@@ -35,7 +35,6 @@ import com.ydl.consultantim.presenter.ConsultantAudioHomePresenterImpl
import com.ydl.consultantim.utils.ConsultantAudioUtils import com.ydl.consultantim.utils.ConsultantAudioUtils
import com.ydl.consultantim.utils.VibratorUtil import com.ydl.consultantim.utils.VibratorUtil
import com.ydl.ydl_av.chat.bean.AudioMessageBean import com.ydl.ydl_av.chat.bean.AudioMessageBean
import com.ydl.ydl_av.messge_service.YDLRTMClient
import com.ydl.ydl_av.voice.listener.IYDLVoiceEventHandler import com.ydl.ydl_av.voice.listener.IYDLVoiceEventHandler
import com.ydl.ydl_av.voice.manager.YDLVoiceManager import com.ydl.ydl_av.voice.manager.YDLVoiceManager
import com.ydl.ydl_image.config.SimpleImageOpConfiger import com.ydl.ydl_image.config.SimpleImageOpConfiger
...@@ -58,7 +57,17 @@ import io.reactivex.Observable ...@@ -58,7 +57,17 @@ import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.audioim_cativity_consultant_audio_home.* import kotlinx.android.synthetic.main.audioim_cativity_consultant_audio_home.iv_hands_free
import kotlinx.android.synthetic.main.audioim_cativity_consultant_audio_home.iv_head
import kotlinx.android.synthetic.main.audioim_cativity_consultant_audio_home.rl_call
import kotlinx.android.synthetic.main.audioim_cativity_consultant_audio_home.rl_hands_free
import kotlinx.android.synthetic.main.audioim_cativity_consultant_audio_home.rl_remain_time
import kotlinx.android.synthetic.main.audioim_cativity_consultant_audio_home.tv_name
import kotlinx.android.synthetic.main.audioim_cativity_consultant_audio_home.tv_nte_status
import kotlinx.android.synthetic.main.audioim_cativity_consultant_audio_home.tv_remain_time
import kotlinx.android.synthetic.main.audioim_cativity_consultant_audio_home.tv_tips
import kotlinx.android.synthetic.main.audioim_cativity_consultant_audio_home.tv_toast
import kotlinx.android.synthetic.main.audioim_cativity_consultant_audio_home.wave_view
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
/** /**
...@@ -69,10 +78,7 @@ import java.util.concurrent.TimeUnit ...@@ -69,10 +78,7 @@ import java.util.concurrent.TimeUnit
* @date 2018/10/30 * @date 2018/10/30
*/ */
@Route(path = "/av/ConsultantAudioHomeActivity") @Route(path = "/av/ConsultantAudioHomeActivity")
class ConsultantAudioHomeActivity : class ConsultantAudioHomeActivity : BaseMvpActivity<IConsultantAudioHomeActivityContract.View, IConsultantAudioHomeActivityContract.Presenter>(), IConsultantAudioHomeActivityContract.View, SensorEventListener {
BaseMvpActivity<IConsultantAudioHomeActivityContract.View, IConsultantAudioHomeActivityContract.Presenter>(),
IConsultantAudioHomeActivityContract.View,
SensorEventListener {
//语音管理类 //语音管理类
private var voiceManage: YDLVoiceManager? = null private var voiceManage: YDLVoiceManager? = null
...@@ -99,7 +105,7 @@ class ConsultantAudioHomeActivity : ...@@ -99,7 +105,7 @@ class ConsultantAudioHomeActivity :
private var connectingStatusDisposable: Disposable? = null private var connectingStatusDisposable: Disposable? = null
//频道管理器 //频道管理器
// private var channelManager: ChannelManager? = null // private var channelManager: ChannelManager? = null
//频道token //频道token
private var channelToken: String? = null private var channelToken: String? = null
...@@ -134,7 +140,8 @@ class ConsultantAudioHomeActivity : ...@@ -134,7 +140,8 @@ class ConsultantAudioHomeActivity :
runOnUiThread { runOnUiThread {
// 加入频道后再通知用户已接受 // 加入频道后再通知用户已接受
YDLRTMClient.instances.acceptCall(mAudioMessageBean?.channelId) // YDLRTMClient.instances.acceptCall(mAudioMessageBean?.channelId)
YDLavManager.instances.acceptCall(mAudioMessageBean!!.userId!!, mAudioMessageBean?.channelId, Gson().toJson(mAudioMessageBean))
tv_toast.visibility = View.VISIBLE tv_toast.visibility = View.VISIBLE
tv_toast.text = "连接中..." tv_toast.text = "连接中..."
...@@ -169,7 +176,6 @@ class ConsultantAudioHomeActivity : ...@@ -169,7 +176,6 @@ class ConsultantAudioHomeActivity :
} }
} }
override fun onUserJoined(uid: Int, elapsed: Int) { override fun onUserJoined(uid: Int, elapsed: Int) {
super.onUserJoined(uid, elapsed) super.onUserJoined(uid, elapsed)
LogUtil.e("[agora]远端用户加入频道回调") LogUtil.e("[agora]远端用户加入频道回调")
...@@ -185,7 +191,6 @@ class ConsultantAudioHomeActivity : ...@@ -185,7 +191,6 @@ class ConsultantAudioHomeActivity :
} }
} }
override fun onRtcStats(stats: IRtcEngineEventHandler.RtcStats?) { override fun onRtcStats(stats: IRtcEngineEventHandler.RtcStats?) {
} }
...@@ -194,6 +199,8 @@ class ConsultantAudioHomeActivity : ...@@ -194,6 +199,8 @@ class ConsultantAudioHomeActivity :
// 3 网络连接被服务器中止 该情况现在是因为后端踢人逻辑 // 3 网络连接被服务器中止 该情况现在是因为后端踢人逻辑
if (reason == 3) { if (reason == 3) {
showToast("对方已挂断") showToast("对方已挂断")
YDLavManager.instances.callEndStatusUpdate(mAudioMessageBean?.channelId!!, 4, "服务端踢人触发的回调")
writeAgoraLog("通话挂断:网络连接被服务器中止") writeAgoraLog("通话挂断:网络连接被服务器中止")
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
uploadLog() uploadLog()
...@@ -231,6 +238,7 @@ class ConsultantAudioHomeActivity : ...@@ -231,6 +238,7 @@ class ConsultantAudioHomeActivity :
super.onUserOffline(uid, elapsed) super.onUserOffline(uid, elapsed)
LogUtil.e("[agora]$uid 主播离开频道回调") LogUtil.e("[agora]$uid 主播离开频道回调")
runOnUiThread { runOnUiThread {
YDLavManager.instances.callEndStatusUpdate(mAudioMessageBean?.channelId!!, 4, "对方离开频道")
showToast("对方已挂断") showToast("对方已挂断")
writeAgoraLog("通话接通后挂断:主叫离开频道") writeAgoraLog("通话接通后挂断:主叫离开频道")
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
...@@ -258,6 +266,7 @@ class ConsultantAudioHomeActivity : ...@@ -258,6 +266,7 @@ class ConsultantAudioHomeActivity :
runOnUiThread { runOnUiThread {
when (warn) { when (warn) {
103, 105, 107 -> { 103, 105, 107 -> {
YDLavManager.instances.callEndStatusUpdate(mAudioMessageBean?.channelId!!, 4, "收到频道回调警告信息${warn}")
writeAgoraLog("通话挂断:网络异常($warn)") writeAgoraLog("通话挂断:网络异常($warn)")
showToast("当前网络较差,请更换网络!") showToast("当前网络较差,请更换网络!")
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
...@@ -272,6 +281,7 @@ class ConsultantAudioHomeActivity : ...@@ -272,6 +281,7 @@ class ConsultantAudioHomeActivity :
super.onError(err) super.onError(err)
uploadException("mRtcEventHandler-onError:errorCode--%${err}") uploadException("mRtcEventHandler-onError:errorCode--%${err}")
LogUtil.e("[agora] 发生错误回调 =$err") LogUtil.e("[agora] 发生错误回调 =$err")
//3:SDK 初始化失败。Agora 建议尝试以下处理方法 //3:SDK 初始化失败。Agora 建议尝试以下处理方法
//7:SDK 尚未初始化,就调用其 API。请确认在调用 API 之前已创建 RtcEngine 对象并完成初始化 //7:SDK 尚未初始化,就调用其 API。请确认在调用 API 之前已创建 RtcEngine 对象并完成初始化
//10:API 调用超时。有些 API 调用需要 SDK 返回结果,如果 SDK 处理时间过长,超过 10 秒没有返回,会出现此错误 //10:API 调用超时。有些 API 调用需要 SDK 返回结果,如果 SDK 处理时间过长,超过 10 秒没有返回,会出现此错误
...@@ -302,12 +312,13 @@ class ConsultantAudioHomeActivity : ...@@ -302,12 +312,13 @@ class ConsultantAudioHomeActivity :
close(RESULT_NOT_ANSWERED_CODE, "频道错误,请联系技术") close(RESULT_NOT_ANSWERED_CODE, "频道错误,请联系技术")
} }
123 -> { 123 -> {
// showToast("对方不允许接听电话,请联系客服") // showToast("对方不允许接听电话,请联系客服")
// close(RESULT_NOT_ANSWERED_CODE, "该专家不允许接听电话,请联系客服") // close(RESULT_NOT_ANSWERED_CODE, "该专家不允许接听电话,请联系客服")
} }
else -> { else -> {
} }
} }
YDLavManager.instances.callEndStatusUpdate(mAudioMessageBean?.channelId!!, 4, "频道的错误回调信息${err}")
} }
} }
...@@ -321,7 +332,7 @@ class ConsultantAudioHomeActivity : ...@@ -321,7 +332,7 @@ class ConsultantAudioHomeActivity :
} else if (txQuality >= 5 || rxQuality >= 5) { } else if (txQuality >= 5 || rxQuality >= 5) {
"对方的网络已断开" "对方的网络已断开"
} else { } else {
status = if (txQuality >= 4 ||rxQuality >= 4) { status = if (txQuality >= 4 || rxQuality >= 4) {
0 0
} else { } else {
1 1
...@@ -335,7 +346,7 @@ class ConsultantAudioHomeActivity : ...@@ -335,7 +346,7 @@ class ConsultantAudioHomeActivity :
} else if (txQuality >= 5 || rxQuality >= 5) { } else if (txQuality >= 5 || rxQuality >= 5) {
"您的网络已断开" "您的网络已断开"
} else { } else {
status = if (txQuality >= 4 ||rxQuality >= 4) { status = if (txQuality >= 4 || rxQuality >= 4) {
0 0
} else { } else {
1 1
...@@ -352,7 +363,6 @@ class ConsultantAudioHomeActivity : ...@@ -352,7 +363,6 @@ class ConsultantAudioHomeActivity :
} }
} }
override fun createPresenter(): IConsultantAudioHomeActivityContract.Presenter { override fun createPresenter(): IConsultantAudioHomeActivityContract.Presenter {
return ConsultantAudioHomePresenterImpl() return ConsultantAudioHomePresenterImpl()
} }
...@@ -372,7 +382,6 @@ class ConsultantAudioHomeActivity : ...@@ -372,7 +382,6 @@ class ConsultantAudioHomeActivity :
const val RESULT_USER_CANCEL = 668 const val RESULT_USER_CANCEL = 668
} }
override fun initDataAndEvent() { override fun initDataAndEvent() {
EventBus.getDefault().register(this) EventBus.getDefault().register(this)
//状态栏颜色 //状态栏颜色
...@@ -393,7 +402,6 @@ class ConsultantAudioHomeActivity : ...@@ -393,7 +402,6 @@ class ConsultantAudioHomeActivity :
StatusBarUtils.setWindowStatusBarColor(this, R.color.audioim_color_40353535) StatusBarUtils.setWindowStatusBarColor(this, R.color.audioim_color_40353535)
} }
private fun getParam() { private fun getParam() {
if (null == intent) { if (null == intent) {
close(RESULT_NOT_ANSWERED_CODE, "通话异常") close(RESULT_NOT_ANSWERED_CODE, "通话异常")
...@@ -407,8 +415,7 @@ class ConsultantAudioHomeActivity : ...@@ -407,8 +415,7 @@ class ConsultantAudioHomeActivity :
if (YDLavManager.sdkStatus != Constants.CONNECTION_STATE_CONNECTED) { if (YDLavManager.sdkStatus != Constants.CONNECTION_STATE_CONNECTED) {
writeAgoraLog("RMT状态:${YDLavManager.sdkStatus},重新登录RMT") writeAgoraLog("RMT状态:${YDLavManager.sdkStatus},重新登录RMT")
val uid = val uid = ModularServiceManager.provide(IUserService::class.java).getUserInfo()?.uid
ModularServiceManager.provide(IUserService::class.java).getUserInfo()?.uid
YDLavManager.instances.login(uid) { _isSuccess, _msg -> YDLavManager.instances.login(uid) { _isSuccess, _msg ->
writeAgoraLog("登录RTM的uid=${uid}") writeAgoraLog("登录RTM的uid=${uid}")
val result = if (_isSuccess) "RMT登录成功" else "RMT登录失败:$_msg" val result = if (_isSuccess) "RMT登录成功" else "RMT登录失败:$_msg"
...@@ -429,10 +436,7 @@ class ConsultantAudioHomeActivity : ...@@ -429,10 +436,7 @@ class ConsultantAudioHomeActivity :
sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager? sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager?
localPowerManager = getSystemService(POWER_SERVICE) as PowerManager? localPowerManager = getSystemService(POWER_SERVICE) as PowerManager?
localWakeLock = localPowerManager!!.newWakeLock( localWakeLock = localPowerManager!!.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "yidianling")
PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK,
"yidianling"
)
} }
/** /**
...@@ -475,7 +479,6 @@ class ConsultantAudioHomeActivity : ...@@ -475,7 +479,6 @@ class ConsultantAudioHomeActivity :
//间接性震动手机 //间接性震动手机
VibratorUtil.vibrate(AudioHomeActivity@ this, longArrayOf(1000, 1000, 1000, 1000), true) VibratorUtil.vibrate(AudioHomeActivity@ this, longArrayOf(1000, 1000, 1000, 1000), true)
} }
/** /**
...@@ -487,7 +490,6 @@ class ConsultantAudioHomeActivity : ...@@ -487,7 +490,6 @@ class ConsultantAudioHomeActivity :
mPresenter.getChannelToken(mAudioMessageBean, false) mPresenter.getChannelToken(mAudioMessageBean, false)
} }
override fun channelTokenResponse(token: String?, needJoinChannel: Boolean) { override fun channelTokenResponse(token: String?, needJoinChannel: Boolean) {
if (TextUtils.isEmpty(token)) { if (TextUtils.isEmpty(token)) {
LogUtil.e("[agora]token not null") LogUtil.e("[agora]token not null")
...@@ -514,13 +516,11 @@ class ConsultantAudioHomeActivity : ...@@ -514,13 +516,11 @@ class ConsultantAudioHomeActivity :
rl_hands_free.visibility = View.VISIBLE rl_hands_free.visibility = View.VISIBLE
} }
//申请音频权限 //申请音频权限
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
private fun requestPermission() { private fun requestPermission() {
val rxPermissions = RxPermissions(this) val rxPermissions = RxPermissions(this)
rxPermissions.requestEach(Manifest.permission.RECORD_AUDIO) rxPermissions.requestEach(Manifest.permission.RECORD_AUDIO).subscribe { permission ->
.subscribe { permission ->
when { when {
//权限已申请 进行初始化操作 //权限已申请 进行初始化操作
permission.granted -> init() permission.granted -> init()
...@@ -559,7 +559,6 @@ class ConsultantAudioHomeActivity : ...@@ -559,7 +559,6 @@ class ConsultantAudioHomeActivity :
voiceManage!!.init() voiceManage!!.init()
} }
/** /**
* 加入频道 * 加入频道
*/ */
...@@ -567,14 +566,11 @@ class ConsultantAudioHomeActivity : ...@@ -567,14 +566,11 @@ class ConsultantAudioHomeActivity :
val account = YdlCommonRouterManager.getYdlCommonRoute().getUid() val account = YdlCommonRouterManager.getYdlCommonRoute().getUid()
if (!TextUtils.isEmpty(mAudioMessageBean?.channelId)) { if (!TextUtils.isEmpty(mAudioMessageBean?.channelId)) {
LogUtil.e("[agora] joinChannel:$account") LogUtil.e("[agora] joinChannel:$account")
voiceManage?.getVoiceApi()?.joinChannel( voiceManage?.getVoiceApi()?.joinChannel(channelToken
channelToken ?: "", mAudioMessageBean!!.channelId!!, "Extra Optional Data", account)
?: "", mAudioMessageBean!!.channelId!!, "Extra Optional Data", account
)
} }
} }
override fun executeFinish() { override fun executeFinish() {
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
uploadLog() uploadLog()
...@@ -591,10 +587,7 @@ class ConsultantAudioHomeActivity : ...@@ -591,10 +587,7 @@ class ConsultantAudioHomeActivity :
rl_remain_time.visibility = View.VISIBLE rl_remain_time.visibility = View.VISIBLE
totalDisposable = Observable.interval(0, 1, TimeUnit.SECONDS) totalDisposable = Observable.interval(0, 1, TimeUnit.SECONDS).subscribeOn(Schedulers.computation()).observeOn(AndroidSchedulers.mainThread()).subscribe({
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
tv_remain_time.text = DateUtils.formatTime(it.toString()) tv_remain_time.text = DateUtils.formatTime(it.toString())
}, { }, {
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
...@@ -610,15 +603,16 @@ class ConsultantAudioHomeActivity : ...@@ -610,15 +603,16 @@ class ConsultantAudioHomeActivity :
status = STATUS_NOT_ANSWERED status = STATUS_NOT_ANSWERED
} }
private fun showStopService() { private fun showStopService() {
if (status == STATUS_NOT_ANSWERED) { if (status == STATUS_NOT_ANSWERED) {
YDLavManager.instances.callEndStatusUpdate(mAudioMessageBean?.channelId!!, 2, "被叫主动拒绝")
writeAgoraLog("通话未接通挂断:主动挂断") writeAgoraLog("通话未接通挂断:主动挂断")
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
uploadLog() uploadLog()
//当未接听 直接挂断 要发送给老师一条消息 //当未接听 直接挂断 要发送给老师一条消息
close(RESULT_NOT_ANSWERED_CODE, "用户已挂断") close(RESULT_NOT_ANSWERED_CODE, "用户已挂断")
} else if (status == STATUS_ANSWERED) { } else if (status == STATUS_ANSWERED) {
YDLavManager.instances.callEndStatusUpdate(mAudioMessageBean?.channelId!!, 3, "被叫主动拒绝")
writeAgoraLog("通话接通后挂断:专家主动挂断") writeAgoraLog("通话接通后挂断:专家主动挂断")
//正常接听 挂断电话 需要重置信令管理类状态 //正常接听 挂断电话 需要重置信令管理类状态
close(RESULT_ANSWERED_CODE, "") close(RESULT_ANSWERED_CODE, "")
...@@ -626,7 +620,6 @@ class ConsultantAudioHomeActivity : ...@@ -626,7 +620,6 @@ class ConsultantAudioHomeActivity :
} }
override fun listenStatusPushResponse() { override fun listenStatusPushResponse() {
} }
/** /**
...@@ -639,12 +632,7 @@ class ConsultantAudioHomeActivity : ...@@ -639,12 +632,7 @@ class ConsultantAudioHomeActivity :
} }
showStopService() showStopService()
ActionCountUtils.count( ActionCountUtils.count("shengwang_popup_layer_page|shengwang_popup_layer_refuse_click", YdlCommonRouterManager.getYdlCommonRoute().getUid().toString(), uid = YdlCommonRouterManager.getYdlCommonRoute().getUid().toString())
"shengwang_popup_layer_page|shengwang_popup_layer_refuse_click",
YdlCommonRouterManager.getYdlCommonRoute().getUid().toString(),
uid = YdlCommonRouterManager.getYdlCommonRoute().getUid().toString()
)
} }
/** /**
...@@ -658,17 +646,13 @@ class ConsultantAudioHomeActivity : ...@@ -658,17 +646,13 @@ class ConsultantAudioHomeActivity :
//调用接口判断邀请专家的用户当前是否在频道内,如果在,则专家加入频道,如果不在,则提示用户已挂断 //调用接口判断邀请专家的用户当前是否在频道内,如果在,则专家加入频道,如果不在,则提示用户已挂断
//更改逻辑:现在是专家先进频道,这个接口暂时只作为参考 //更改逻辑:现在是专家先进频道,这个接口暂时只作为参考
// presenter.userIsInChannel(mAudioMessageBean?.channelId ?: "", mAudioMessageBean?.userId // presenter.userIsInChannel(mAudioMessageBean?.channelId ?: "", mAudioMessageBean?.userId
// ?: "") // ?: "")
executeCall(true) executeCall(true)
ActionCountUtils.count( ActionCountUtils.count("shengwang_popup_layer_page|shengwang_popup_layer_answer_click", YdlCommonRouterManager.getYdlCommonRoute().getUid().toString(), uid = YdlCommonRouterManager.getYdlCommonRoute().getUid().toString())
"shengwang_popup_layer_page|shengwang_popup_layer_answer_click",
YdlCommonRouterManager.getYdlCommonRoute().getUid().toString(),
uid = YdlCommonRouterManager.getYdlCommonRoute().getUid().toString()
)
} }
/** /**
...@@ -692,7 +676,6 @@ class ConsultantAudioHomeActivity : ...@@ -692,7 +676,6 @@ class ConsultantAudioHomeActivity :
//获取频道token //获取频道token
mPresenter.getChannelToken(mAudioMessageBean) mPresenter.getChannelToken(mAudioMessageBean)
} }
} }
} }
} }
...@@ -717,25 +700,14 @@ class ConsultantAudioHomeActivity : ...@@ -717,25 +700,14 @@ class ConsultantAudioHomeActivity :
voiceManage!!.getVoiceApi().setEnableSpeakerphone(view.isSelected) voiceManage!!.getVoiceApi().setEnableSpeakerphone(view.isSelected)
} }
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
sensorManager!!.registerListener( sensorManager!!.registerListener(this, sensorManager!!.getDefaultSensor(Sensor.TYPE_PROXIMITY), SensorManager.SENSOR_DELAY_NORMAL)
this,
sensorManager!!.getDefaultSensor(Sensor.TYPE_PROXIMITY),
SensorManager.SENSOR_DELAY_NORMAL
)
ActionCountUtils.count( ActionCountUtils.count("shengwang_popup_layer_page|shengwang_popup_layer_page_visit", "", uid = YdlCommonRouterManager.getYdlCommonRoute().getUid().toString())
"shengwang_popup_layer_page|shengwang_popup_layer_page_visit",
"",
uid = YdlCommonRouterManager.getYdlCommonRoute().getUid().toString()
)
} }
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) { override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
} }
override fun onSensorChanged(event: SensorEvent?) { override fun onSensorChanged(event: SensorEvent?) {
...@@ -758,7 +730,6 @@ class ConsultantAudioHomeActivity : ...@@ -758,7 +730,6 @@ class ConsultantAudioHomeActivity :
} }
} }
/** /**
* 显示自定义弹窗 * 显示自定义弹窗
*/ */
...@@ -785,14 +756,12 @@ class ConsultantAudioHomeActivity : ...@@ -785,14 +756,12 @@ class ConsultantAudioHomeActivity :
} }
if (status == -1) { if (status == -1) {
tv_nte_status.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null) tv_nte_status.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null)
} }
tv_nte_status.visibility = View.VISIBLE tv_nte_status.visibility = View.VISIBLE
} }
} }
} }
//关闭本页面 //关闭本页面
fun close(code: Int, msg: String) { fun close(code: Int, msg: String) {
runOnUiThread { runOnUiThread {
...@@ -808,7 +777,8 @@ class ConsultantAudioHomeActivity : ...@@ -808,7 +777,8 @@ class ConsultantAudioHomeActivity :
callStatus = 2 callStatus = 2
uploadException("被叫拒绝", zhu = "") uploadException("被叫拒绝", zhu = "")
//未接听,直接挂断 发送消息 //未接听,直接挂断 发送消息
YDLRTMClient.instances.refuseCall(mAudioMessageBean?.channelId) // YDLRTMClient.instances.refuseCall(mAudioMessageBean?.channelId)
YDLavManager.instances.refuseCall(mAudioMessageBean!!.userId!!, mAudioMessageBean?.channelId, Gson().toJson(mAudioMessageBean))
} else if (code == RESULT_USER_CANCEL) { } else if (code == RESULT_USER_CANCEL) {
callStatus = 1 callStatus = 1
uploadException("主叫取消", zhu = "") uploadException("主叫取消", zhu = "")
...@@ -842,7 +812,7 @@ class ConsultantAudioHomeActivity : ...@@ -842,7 +812,7 @@ class ConsultantAudioHomeActivity :
mPlayer = AudioPlayer(this) mPlayer = AudioPlayer(this)
} }
mPlayer!!.setDataSource(R.raw.audioim_hand_down_music) mPlayer!!.setDataSource(R.raw.audioim_hand_down_music)
// mPlayer!!.switchPlayType(true) // mPlayer!!.switchPlayType(true)
mPlayer!!.start(isLooping = false, isSetOnCompletionListener = false) mPlayer!!.start(isLooping = false, isSetOnCompletionListener = false)
} }
...@@ -855,12 +825,9 @@ class ConsultantAudioHomeActivity : ...@@ -855,12 +825,9 @@ class ConsultantAudioHomeActivity :
*/ */
private fun connectingStatusWaitingTimeCount() { private fun connectingStatusWaitingTimeCount() {
if (connectingStatusDisposable == null) { if (connectingStatusDisposable == null) {
connectingStatusDisposable = Observable.interval(0, 1, TimeUnit.SECONDS) connectingStatusDisposable = Observable.interval(0, 1, TimeUnit.SECONDS).subscribeOn(Schedulers.computation()).take(6).observeOn(AndroidSchedulers.mainThread()).subscribe({}, {}, {
.subscribeOn(Schedulers.computation())
.take(6)
.observeOn(AndroidSchedulers.mainThread())
.subscribe({}, {}, {
if (!isConnectSuccess) { if (!isConnectSuccess) {
YDLavManager.instances.callEndStatusUpdate(mAudioMessageBean?.channelId!!, 1, "被叫加入频道后主叫未加入超时")
writeAgoraLog("通话未接通挂断:连接中的状态超过5s自动挂断") writeAgoraLog("通话未接通挂断:连接中的状态超过5s自动挂断")
showToast("用户已挂断") showToast("用户已挂断")
close(RESULT_NOT_ANSWERED_CODE, "") close(RESULT_NOT_ANSWERED_CODE, "")
...@@ -869,7 +836,6 @@ class ConsultantAudioHomeActivity : ...@@ -869,7 +836,6 @@ class ConsultantAudioHomeActivity :
} }
} }
/** /**
* 离开频道 * 离开频道
*/ */
...@@ -914,7 +880,6 @@ class ConsultantAudioHomeActivity : ...@@ -914,7 +880,6 @@ class ConsultantAudioHomeActivity :
* 重写返回键逻辑:屏蔽返回键 * 重写返回键逻辑:屏蔽返回键
*/ */
override fun onBackPressed() { override fun onBackPressed() {
} }
private fun writeAgoraLog(content: String) { private fun writeAgoraLog(content: String) {
...@@ -923,24 +888,17 @@ class ConsultantAudioHomeActivity : ...@@ -923,24 +888,17 @@ class ConsultantAudioHomeActivity :
AudioLogUtils.writeAgoraLog(content, "consult") AudioLogUtils.writeAgoraLog(content, "consult")
} catch (e: Exception) { } catch (e: Exception) {
} }
}.subscribeOn(Schedulers.io()) }.subscribeOn(Schedulers.io()).subscribe()
.subscribe()
} }
/** /**
* 上传错误日志 * 上传错误日志
*/ */
private fun uploadException( private fun uploadException(message: String, zhu: String = "", eventType: String = "99") {
message: String,
zhu: String = "",
eventType: String = "99"
) {
var time: String = (System.currentTimeMillis() / 1000).toString() var time: String = (System.currentTimeMillis() / 1000).toString()
var uid: String = var uid: String = ModularServiceManager.provide(IUserService::class.java).getUserInfo()?.uid!!
ModularServiceManager.provide(IUserService::class.java).getUserInfo()?.uid!!
var payLoad = PayLoad(mAudioMessageBean?.channelId ?: "0", time, uid, "1", "999", message) var payLoad = PayLoad(mAudioMessageBean?.channelId ?: "0", time, uid, "1", "999", message)
var connectException = var connectException = ConnectExceptionCommand(time + zhu, "2", eventType, payLoad, callStatus)
ConnectExceptionCommand(time + zhu, "2", eventType, payLoad, callStatus)
YDLavManager.instances.uploadException(connectException, null) YDLavManager.instances.uploadException(connectException, null)
} }
...@@ -961,11 +919,8 @@ class ConsultantAudioHomeActivity : ...@@ -961,11 +919,8 @@ class ConsultantAudioHomeActivity :
EventBus.getDefault().unregister(this) EventBus.getDefault().unregister(this)
if (ActivityManager.getActivitySize() == 1) { if (ActivityManager.getActivitySize() == 1) {
try { try {
// startActivity(MainActivity.newIntent(this, false)) // startActivity(MainActivity.newIntent(this, false))
ARouter.getInstance().build("/main/main") ARouter.getInstance().build("/main/main").addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP).navigation()
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
.navigation()
} catch (e: Exception) { } catch (e: Exception) {
} }
......
...@@ -174,7 +174,7 @@ class ImObserversHelper { ...@@ -174,7 +174,7 @@ class ImObserversHelper {
private var receiveSystemMessageObserver: Observer<CustomNotification> = Observer<CustomNotification> { private var receiveSystemMessageObserver: Observer<CustomNotification> = Observer<CustomNotification> {
LogUtil.e(it.content) LogUtil.e(it.content)
imCustomNotificationCallBack?.onObserverCustomNotification(it.content) imCustomNotificationCallBack?.onObserverCustomNotification(it.fromAccount, it.sessionId, it.content)
} }
private var msgRevokeFilter = MsgRevokeFilter { message -> private var msgRevokeFilter = MsgRevokeFilter { message ->
......
...@@ -9,5 +9,5 @@ package com.yidianling.im.api.bean ...@@ -9,5 +9,5 @@ package com.yidianling.im.api.bean
*/ */
interface IMRegisterObserverCustomNotificationCallBack { interface IMRegisterObserverCustomNotificationCallBack {
fun onObserverCustomNotification(content: String) fun onObserverCustomNotification(fromUid:String,toUid:String,content: String)
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment