Commit fda362f2 by 徐健

Merge branch 'dev' into feature/userinfo_collect

# Conflicts:
#	app/src/main/java/com/ydl/component/MainActivity.kt
#	config.gradle
#	m-audioim/src/main/java/com/ydl/audioim/AudioHomeActivity.kt
parents 8514b7b6 71ff661f
......@@ -183,7 +183,7 @@ dependencies {
api project(':m-tests')
api project(':m-consultant')
implementation modularPublication('com.ydl:m-consultant-api')
// implementation project(':m-confide')
implementation project(':m-confide')
api project(':m-home')
......
......@@ -19,6 +19,7 @@ import com.alibaba.android.arouter.facade.annotation.Route
import com.alibaba.android.arouter.launcher.ARouter
import com.tbruyelle.rxpermissions2.RxPermissions
import com.umeng.analytics.MobclickAgent
import com.ydl.audioim.YDLavManager
import com.ydl.component.music.FragmentContainerActivity
import com.ydl.component.mvp.DemoPresenter
import com.ydl.media.audio.PlayService
......
......@@ -42,13 +42,13 @@ ext {
ydlPublishVersion = [
// -------------- 业务模块 --------------
//第三步 若干
"m-confide" : "0.0.48.6",
"m-confide" : "0.0.48.7.5",
"m-consultant" : "0.0.57.4",
"m-fm" : "0.0.29.3",
"m-user" : "0.0.59.28",
"m-home" : "0.0.19.1",
"m-im" : "0.0.16.10",
"m-dynamic" : "0.0.6.1",
"m-im" : "0.0.16.11",
"m-dynamic" : "0.0.7.5",
"m-muse" : "0.0.28.9",
"m-tests" : "0.0.24.0",
......@@ -75,7 +75,7 @@ ext {
"ydl-webview" : "0.0.38.24",
"ydl-media" : "0.0.20",
"ydl-pay" : "0.0.17",
"m-audioim" : "0.0.48.1",
"m-audioim" : "0.0.48.2.5",
"ydl-flutter-base": "0.0.10.9",
//以下 几乎不会动
......@@ -121,7 +121,7 @@ ext {
"ydl-webview" : "0.0.38.24",
"ydl-media" : "0.0.20",
"ydl-pay" : "0.0.17",
"m-audioim" : "0.0.48.1",
"m-audioim" : "0.0.48.2.5",
"ydl-flutter-base": "0.0.10.9",
//以下 几乎不会动
......
......@@ -75,7 +75,7 @@ dependencies {
kapt "com.alibaba:arouter-compiler:$arouter_compiler"
api "com.alibaba:arouter-api:$arouter_api"
api ('com.ydl:ydl-av:1.1.9@aar'){
api ('com.ydl:ydl-av:1.2.1@aar'){
transitive = true
}
......
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ydl.audioim" >
package="com.ydl.audioim">
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.VIBRATE"/>
<application>
<activity
android:name=".AudioHomeActivity"
android:screenOrientation="portrait" />
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
android:screenOrientation="portrait"/>
</application>
</manifest>
......@@ -40,14 +40,10 @@ import com.ydl.webview.H5Params
import com.ydl.webview.NewH5Activity
import com.ydl.webview.RefreshWebEvent
import com.ydl.ydl_av.chat.bean.AudioMessageBean
import com.ydl.ydl_av.messge_service.ChannelManager
import com.ydl.ydl_av.messge_service.YDLRTMClient
import com.ydl.ydl_av.messge_service.bean.RTMMesssage
import com.ydl.ydl_av.messge_service.callback.CallListener
import com.ydl.ydl_av.messge_service.callback.ChannelListener
import com.ydl.ydl_av.messge_service.response.CallLocalResponse
import com.ydl.ydl_av.messge_service.response.CallRemoteResponse
import com.ydl.ydl_av.messge_service.response.ChannelMember
import com.ydl.ydl_av.voice.listener.IYDLVoiceEventHandler
import com.ydl.ydl_av.voice.manager.YDLVoiceManager
import com.ydl.ydl_image.config.SimpleImageOpConfiger
......@@ -57,11 +53,13 @@ import com.ydl.ydlcommon.modular.ModularServiceManager
import com.ydl.ydlcommon.router.YdlCommonRouterManager
import com.ydl.ydlcommon.utils.LogUtil
import com.ydl.ydlcommon.utils.StatusBarUtils
import com.ydl.ydlcommon.utils.Utils
import com.ydl.ydlcommon.utils.log.LogHelper
import com.ydl.ydlcommon.utils.remind.ToastHelper
import com.yidianling.user.api.service.IUserService
import de.greenrobot.event.EventBus
import io.agora.rtc.IRtcEngineEventHandler
import io.agora.rtm.RtmStatusCode
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
......@@ -78,7 +76,8 @@ import java.util.concurrent.TimeUnit
* @date 2018/10/30
*/
@Route(path = "/av/AudioHomeActivity")
class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudioHomeActivityContract.Presenter>(),
class AudioHomeActivity :
BaseMvpActivity<IAudioHomeActivityContract.View, IAudioHomeActivityContract.Presenter>(),
IAudioHomeActivityContract.View, SensorEventListener {
/**
......@@ -158,6 +157,7 @@ class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudi
//电源锁
private var localWakeLock: PowerManager.WakeLock? = null
private var sensorManager: SensorManager? = null
private var sendDoctocrMsg: String? = null
private var axbPhone: String? = null
//是否跳转到拨号页面
private var isJumpDail: Boolean = false
......@@ -168,7 +168,7 @@ class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudi
private var voiceManage: YDLVoiceManager? = null
//频道管理器
private var channelManager: ChannelManager? = null
// private var channelManager: ChannelManager? = null
private var isLeavelChannel: Boolean = false
private var hasUpLoadLog = false
......@@ -249,7 +249,7 @@ class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudi
override fun onApiCallExecuted(error: Int, api: String?, result: String?) {
super.onApiCallExecuted(error, api, result)
LogUtil.e("[agora]$api 已执行回调 $result")
// LogUtil.e("[agora]$api 已执行回调 $result")
}
......@@ -257,7 +257,14 @@ class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudi
super.onJoinChannelSuccess(channel, uid, elapsed)
LogUtil.e("[agora]$uid 用户声网加入频道成功:channel=$channel")
//更新ui
onJoinChannelSuccess()
// onJoinChannelSuccess()
//更新:现在专家先加入频道,所以不会有等待的过程,
runOnUiThread {
//自己加入频道成功
connectSuccess()
}
}
override fun onRtcStats(stats: IRtcEngineEventHandler.RtcStats?) {
......@@ -291,7 +298,7 @@ class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudi
override fun onLastmileQuality(quality: Int) {
super.onLastmileQuality(quality)
LogUtil.e("[agora]网络质量报告回调${quality}")
// LogUtil.e("[agora]网络质量报告回调${quality}")
}
override fun onConnectionInterrupted() {
......@@ -302,11 +309,6 @@ class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudi
override fun onUserJoined(uid: Int, elapsed: Int) {
super.onUserJoined(uid, elapsed)
LogUtil.e("[agora]远端用户/主播加入频道回调")
runOnUiThread {
//另一方加入频道成功
connectSuccess()
}
}
override fun onUserOffline(uid: Int, elapsed: Int) {
......@@ -327,18 +329,6 @@ class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudi
}
//
/**
* 上传错误日志
* zhu 洪平要的,判别是移动端主动调的还是声网返的
*/
private fun uploadException(message: String, zhu: String = "", eventType: String = "99") {
var time: String = (System.currentTimeMillis() / 1000).toString()
var uid: String = ModularServiceManager.provide(IUserService::class.java).getUserInfo()?.uid!!
var payLoad = PayLoad(channelId ?: "0", time, uid, "1", "999", message)
var connectException = ConnectExceptionCommand(time + zhu, "2", eventType, payLoad)
getPresenter().connectException(connectException)
}
override fun createPresenter(): IAudioHomeActivityContract.Presenter {
return AudioHomePresenterImpl()
}
......@@ -373,7 +363,10 @@ class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudi
sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager?
localPowerManager = getSystemService(POWER_SERVICE) as PowerManager?
localWakeLock = localPowerManager!!.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "yidianling")
localWakeLock = localPowerManager!!.newWakeLock(
PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK,
"yidianling"
)
}
private fun initIntentData() {
......@@ -453,9 +446,15 @@ class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudi
tv_change_route.setOnClickListener { showChooseDialog(1) }
//挂断
iv_hang_up.setOnClickListener {
if (Utils.isFastClick()) {
//防止连击
return@setOnClickListener
}
if (isConnectSuccess) {
updateExpertStatus(false, 1)
userCloseCalling()
// userCloseCalling()
leaveChannel()
uploadLog()
} else {
userCloseCalling()
}
......@@ -485,18 +484,22 @@ class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudi
private fun setCallBack() {
//RTC 回调
YDLRTMClient.instances.setCallListener(object : CallListener {
override fun onCallRecivedByPeer(response: CallLocalResponse?) {
playWaitingMusic()
//返回给主叫:被叫已收到呼叫邀请
LogUtil.i("[agora]${response?.calleeId}已收到呼叫邀请,频道号${response?.ChannelId}")
}
override fun onCallAccepted(response: CallLocalResponse?) {
override fun onCallAccepted(response: CallLocalResponse?, msg: String?) {
//返回给主叫
LogUtil.i("[agora]${response?.calleeId}已接收呼叫邀请")
LogUtil.i("[agora]${response?.calleeId}已接受呼叫邀请")
//加入声网频道时机修改:用户收到专家接受邀请的回调后再加入声网频道
joinChannel()
}
override fun onCallRefused(response: CallLocalResponse?) {
override fun onCallRefused(response: CallLocalResponse?, msg: String?) {
//返回给主叫
LogUtil.i("[agora]${response?.calleeId}已拒绝呼叫邀请")
ToastUtil.showToast(applicationContext, "对方已挂断")
......@@ -510,9 +513,20 @@ class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudi
LogUtil.i("[agora]主叫已取消呼叫邀请")
}
override fun onCallFailure(response: CallLocalResponse?) {
override fun onCallFailure(response: CallLocalResponse?, errorCode: Int) {
//返回给主叫
LogUtil.i("[agora]呼叫${response?.calleeId}用户失败:${response?.response}")
//专家离线或者30 秒后仍未收到专家响应,重新再邀请一次
when (errorCode) {
//被叫不在线 呼叫邀请发出 30 秒后被叫仍未 ACK 响应呼叫邀请
RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_PEER_OFFLINE,
RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_PEER_NO_RESPONSE -> {
YDLRTMClient.instances.call(listenerUid!!, channelId, sendDoctocrMsg)
}
RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_INVITATION_EXPIRE -> {//呼叫邀请过期。被叫 ACK 响应呼叫邀请后 60 秒呼叫邀请未被取消、接受、拒绝,则呼叫邀请过期。
}
}
}
override fun onRemoteInvitationReceived(response: CallRemoteResponse?) {
......@@ -535,7 +549,7 @@ class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudi
LogUtil.i("[agora]主叫${response?.callerId}已取消呼叫邀请")
}
override fun onRemoteInvitationFailure(response: CallRemoteResponse?) {
override fun onRemoteInvitationFailure(response: CallRemoteResponse?, errorCode: Int) {
//返回给被叫
LogUtil.i("[agora]来自主叫${response?.callerId}的呼叫邀请进程失败:${response?.response}")
}
......@@ -544,26 +558,27 @@ class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudi
LogUtil.i("[agora]其它消息:${error}")
}
})
channelManager = YDLRTMClient.instances.createChannelManager(channelId, object : ChannelListener {
override fun onMemberCountUpdated(memberCount: Int) {
//频道人数更新
LogUtil.i("[agora]当前频道人数:$memberCount")
}
override fun onMessageReceived(message: RTMMesssage?, member: ChannelMember?) {
//接到频道消息
LogUtil.i("[agora]接到${member?.channelId}频道${member?.userId}的消息:" + message?.text)
}
override fun onMemberJoined(member: ChannelMember?) {
//新用户加入频道
LogUtil.i("[agora]新用户加入${member?.channelId}频道:${member?.userId}")
}
override fun onMemberLeft(member: ChannelMember?) {
LogUtil.i("[agora]有用户离开${member?.channelId}频道:${member?.userId}")
}
})
// channelManager = YDLRTMClient.instances.createChannelManager(channelId, object : ChannelListener {
// override fun onMemberCountUpdated(memberCount: Int) {
// //频道人数更新
// LogUtil.i("[agora]当前频道人数:$memberCount")
// }
//
// override fun onMessageReceived(message: RTMMesssage?, member: ChannelMember?) {
// //接到频道消息
// LogUtil.i("[agora]接到${member?.channelId}频道${member?.userId}的消息:" + message?.text)
// }
//
// override fun onMemberJoined(member: ChannelMember?) {
// //新用户加入频道
// LogUtil.i("[agora]新用户加入${member?.channelId}频道:${member?.userId}")
// }
//
// override fun onMemberLeft(member: ChannelMember?) {
// LogUtil.i("[agora]有用户离开${member?.channelId}频道:${member?.userId}")
// }
// })
}
/**
......@@ -609,20 +624,34 @@ class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudi
null,
channelId
)
YDLRTMClient.instances.call(listenerUid!!, channelId, Gson().toJson(msgBean))
//开始25s等待倒计时
sendDoctocrMsg = Gson().toJson(msgBean)
YDLRTMClient.instances.call(listenerUid!!, channelId, sendDoctocrMsg)
Observable.interval(0, 100, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.computation())
.take(253)
.take(303)
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ var result = it.toFloat() / 2.5f
progress_view.setProgress(result)
if (result >= 100f && !iv_hang_up.isEnabled) {
//挂断按钮可点击
iv_hang_up.isEnabled = true
iv_hang_up.setImageResource(R.drawable.audioim_img_hang_up)
}},{},{})
//开始60s等待倒计时
waitDisposable = Observable.interval(0, 100, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.computation())
.take(603)
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
progress_view.setProgress(it.toFloat() / 2.5f)
}, {
LogUtil.d(it.message)
}, {
waittingStatus()
if (!isConnectSuccess) {
// iv_hang_up.setImageResource(R.mipmap.audioim_ico_close)
//关闭音乐
stopPlaying()
//提示切换传统线路
......@@ -634,8 +663,7 @@ class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudi
showChooseDialog(2)
}
})
//加入频道135
joinChannel()
//双重保险:加入频道成功,通过服务端发推送给专家
noticeServerPush(true)
}
......@@ -717,11 +745,12 @@ class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudi
*/
private fun showChooseDialog(type: Int) {
val dialog = AxbConfirmDialog(mContext, type, object : AxbConfirmDialog.OnClickEnsureListener {
val dialog =
AxbConfirmDialog(mContext, type, object : AxbConfirmDialog.OnClickEnsureListener {
override fun onClickEnsure() {
//是手动切换且连接成功
if (type == 1 && isConnectSuccess) {
uploadException("", "zhu", "108")
uploadException("", "zhu")
}
switchAXB()
}
......@@ -776,7 +805,7 @@ class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudi
/**
* 30s等待完成,专家未接听
* 60s等待完成,专家未接听
*/
private fun waittingStatus() {
//挂断按钮可点击
......@@ -932,11 +961,19 @@ class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudi
if (localRemainTime!! <= 60) {
if (tv_change_route.isEnabled) {
tv_change_route.isEnabled = false
tv_change_route.setTextColor(ContextCompat.getColor(this, R.color.audioim_color_50ffffff))
tv_change_route.setTextColor(
ContextCompat.getColor(
this,
R.color.audioim_color_50ffffff
)
)
tv_change_route.setCompoundDrawablesWithIntrinsicBounds(
null,
null,
ContextCompat.getDrawable(this, R.drawable.audioim_img_choose_arrow_unuse),
ContextCompat.getDrawable(
this,
R.drawable.audioim_img_choose_arrow_unuse
),
null
)
}
......@@ -1091,6 +1128,21 @@ class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudi
}
}
/**
* 上传错误日志
* zhu 洪平要的,判别是移动端主动调的还是声网返的
*/
private fun uploadException(message: String, zhu: String = "") {
var time: String = (System.currentTimeMillis() / 1000).toString()
var uid: String =
ModularServiceManager.provide(IUserService::class.java).getUserInfo()?.uid!!
var payLoad = PayLoad(channelId ?: "0", time, uid, "1", "999", message)
var connectException = ConnectExceptionCommand(time + zhu, "2", "99", payLoad)
getPresenter().connectException(connectException)
}
override fun finishActivity() {
leaveChannel()
}
......
package com.ydl.audioim.presenter
import android.annotation.SuppressLint
import com.ydl.audioim.BuildConfig
import com.ydl.ydl_av.chat.config.YDLChatParam
import com.ydl.audioim.contract.IAudioHomeActivityContract
......@@ -65,6 +66,7 @@ class AudioHomePresenterImpl : BasePresenter<IAudioHomeActivityContract.View, IA
// })
// }
@SuppressLint("CheckResult")
override fun connectException(param: ConnectExceptionCommand) {
mModel.connectException(param)
.subscribeOn(Schedulers.io())
......@@ -106,6 +108,7 @@ class AudioHomePresenterImpl : BasePresenter<IAudioHomeActivityContract.View, IA
/**
* 获取axb电话
*/
@SuppressLint("CheckResult")
override fun getAXBPhone(cmd: ConnectCommand) {
mModel.getAXBPhone(cmd)
.subscribeOn(Schedulers.io())
......@@ -113,7 +116,7 @@ class AudioHomePresenterImpl : BasePresenter<IAudioHomeActivityContract.View, IA
.doOnSubscribe { mView.showProgressView() }
.doAfterTerminate { mView.dismissProgressView() }
.subscribe({
if ("200".equals(it.code)){
if ("200" == it.code){
if(0==it.data?.dialDetail?.dialStatus?:-1){
//连接成功
if(it.data?.dialDetail?.callConnectType?:-1==1){
......
......@@ -212,6 +212,8 @@
android:paddingBottom="4dp"
android:textColor="@color/white"
android:visibility="gone"
tools:text="已接通" />
tools:visibility="visible"
tools:text="已接通"
/>
</RelativeLayout>
......@@ -68,7 +68,7 @@ class DynamicConstants {
open var TOPIC_DETAIL_H5 = HttpConfig.H5_URL+ "active/topic-members/"
open var TRENF_INFO_SHARE_H5 = HttpConfig.H5_URL + "ask/"
open var TRENF_INFO_SHARE_H5 = HttpConfig.MH5_URL + "ask/"
const val PUBLISH_TYPE = "publish_type"
......
......@@ -4,6 +4,7 @@ import android.content.Context
import android.os.Handler
import android.os.Looper
import android.os.Message
import android.text.TextUtils
import android.util.AttributeSet
import android.view.View
import android.view.ViewGroup
......@@ -197,7 +198,8 @@ class ImCommentBannerView : LinearLayout {
}
}
}
else -> {}
else -> {
}
}
}
}
......@@ -206,11 +208,10 @@ class ImCommentBannerView : LinearLayout {
//获取经过加密的名字 : 徐**
private fun getName(name: String?): String {
var nameBuffer = StringBuffer()
name?.let {
if (name != null && !TextUtils.isEmpty(name)) {
nameBuffer.append(name[0])
nameBuffer.append("**:")
}
nameBuffer.append("**:")
return nameBuffer.toString()
}
......
......@@ -56,11 +56,11 @@ interface TestRetrofitApi {
fun fetchTopSearch(): Observable<BaseAPIResponse<MutableList<RecommendSearchItemBean>>>
//获取测试列表 - NEW
@GET("test-item/list-by-newTag")
@GET("test-item/list-by-cate")
@Headers( YDL_DOMAIN+ YDL_DOMAIN_JAVA)
fun fetchTestListByTag(
//测试标签ID
@Query("testTagId") testTagId:String,
@Query("testCateId") testTagId:String,
//筛选条件免费付费 2免费 3付费
@Query("testPrice") testPrice:String = "",
//筛选条件测试人数 条件4
......
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