AudioImServiceImp.kt 4.2 KB
Newer Older
1 2 3 4 5 6 7
package com.ydl.audioim.modular

import android.app.Activity
import android.content.Context
import android.content.Intent
import android.net.Uri
import com.alibaba.android.arouter.facade.annotation.Route
万齐军 committed
8
import com.google.gson.Gson
万齐军 committed
9
import com.ydl.audioim.BuildConfig
万齐军 committed
10
import com.ydl.audioim.NetQuality
11 12
import com.ydl.audioim.YDLavManager
import com.ydl.audioim.api.IAudioImService
万齐军 committed
13 14
import com.ydl.audioim.http.AudioApiRequestUtil
import com.ydl.audioim.http.REPORT_LEVEL_INFO
万齐军 committed
15
import com.ydl.audioim.utils.CallCheck
16
import com.ydl.audioim.widget.AxbConfirmDialog
万齐军 committed
17 18
import com.ydl.ydl_av.voice.listener.RtcGlobalNet
import com.ydl.ydl_av.voice.manager.YDLVoiceManager
万齐军 committed
19
import com.ydl.ydlcommon.modular.findRouteService
万齐军 committed
20
import com.ydl.ydlcommon.utils.log.XLog
万齐军 committed
21
import com.yidianling.im.api.service.IImService
万齐军 committed
22
import io.reactivex.schedulers.Schedulers
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

/**
 * Created by Ykai on 2022/7/26.
 */

@Route(path = "/audioim/AudioImService")
class AudioImServiceImp : IAudioImService {

    override fun yDLAvManagerInit(context: Context, appId: String) {
        YDLavManager.instances.init(context, appId)
    }


    override fun getIsOnlineRtm(): Boolean {
        return YDLavManager.isOnlineRtm
    }

    override fun loginRtm(userId: String?, event: (isSuccess: Boolean, msg: String?) -> Unit) {
41
        YDLavManager.instances.login(userId, event)
42 43 44 45 46 47
    }

    override fun loginRtm(userId: String?) {
        YDLavManager.instances.login(userId)
    }

刘鹏 committed
48 49 50 51
    override fun logoutRtm() {
        YDLavManager.instances.logout()
    }

52
    override fun openAxbDialog(activity: Activity?, type: Int, phoneNumber: String?) {
刘鹏 committed
53 54
        val dialog =
            AxbConfirmDialog(activity, type, object : AxbConfirmDialog.OnClickEnsureListener {
55 56 57 58 59 60 61 62 63 64
                override fun onClickEnsure() {
                    phoneNumber?.let {
                        val phoneIntent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:$phoneNumber"))
                        activity?.startActivity(phoneIntent)
                    }
                }

                override fun onClose() {

                }
万齐军 committed
65
        })
66 67 68
        dialog.show()
    }

万齐军 committed
69 70 71 72 73 74 75 76 77 78
    override fun openPermissionRejectDialog(activity: Activity?, callback: () -> Unit) {
        val dialog = AxbConfirmDialog(activity, 3, object : AxbConfirmDialog.OnClickEnsureListener {
            override fun onClickEnsure() {
                callback.invoke()
            }

            override fun onClose() {
                callback.invoke()
            }
        })
79 80 81 82 83 84 85
        dialog.show()
    }

    override fun callEventSave(status: String, res: String, session: String?, line: String) {
        YDLavManager.instances.callEventSave(status, res, session, line)
    }

万齐军 committed
86 87 88 89 90 91 92
    override fun initRtcNetQuality() {
        YDLVoiceManager.enableLastmileTest(true)
        YDLVoiceManager.attachGlobalNetListener(RtcGlobalNetQuality(30))
    }

    override fun initAgoraRtc(context: Context) {
        YDLVoiceManager.init(context.applicationContext, BuildConfig.AGORA_APPID)
万齐军 committed
93
        findRouteService(IImService::class.java).getSystemConfig("network_quality_config")
万齐军 committed
94 95
    }

万齐军 committed
96 97 98 99 100 101 102 103 104 105
    override fun reportCallEvent(type: String, name: String, desc: String, retCode: Int?) {
        val resp = hashMapOf<String, Any>(
            "name" to name,
            "desc" to desc,
            "reportLevel" to REPORT_LEVEL_INFO
        )
        if (retCode != null) {
            resp["retCode"] = retCode
        }
        val toJson = Gson().toJson(resp)
万齐军 committed
106
        if (YDLVoiceManager.currentChannel.isNullOrEmpty()) return
万齐军 committed
107
        AudioApiRequestUtil.callEventSave(YDLVoiceManager.currentChannel, "7", "20", toJson, eventType = type)
万齐军 committed
108 109
            .subscribeOn(Schedulers.io())
            .subscribe()
万齐军 committed
110 111
    }

万齐军 committed
112 113 114 115
    override fun callCheck(context: Context, calleeUid: String?, delay: Long) {
        CallCheck.checkCall(context, calleeUid, delay)
    }

116
    override fun init(context: Context?) {
万齐军 committed
117
        NetQuality.copySoundFile(context)
118
    }
万齐军 committed
119
}
120

万齐军 committed
121 122 123
internal class RtcGlobalNetQuality(private val threshold: Int) : RtcGlobalNet {
    private var count = 0
    override fun onLastmileQuality(quality: Int) {
万齐军 committed
124
        if (quality in 4..6) {
万齐军 committed
125
            count++
万齐军 committed
126
            if (quality > 3 && count % 10 == 0) {
万齐军 committed
127 128 129
                XLog.i("RtcGlobalNetQuality", quality.toString())
            }
        }
130 131
    }
}