Commit 6107ffa1 by 刘鹏

Merge branch '4.1.69_log' into 4.1.69(强绑手机号)

parents c445a1b7 a0681f68
......@@ -19,24 +19,24 @@ import com.umeng.analytics.MobclickAgent
import com.ydl.component.music.FragmentContainerActivity
import com.ydl.component.mvp.DemoContract
import com.ydl.component.mvp.DemoPresenter
import com.ydl.component.route.PlatformTempCommonRouteImpl
import com.ydl.confide.home.ConfideHomeActivity
import com.ydl.media.audio.PlayService
import com.ydl.ydlcommon.modular.ModularServiceManager
import com.ydl.ydlcommon.mvp.lce.BaseLceActivity
import com.ydl.ydlcommon.router.YdlCommonRouterManager
import com.yidianling.common.tools.LogUtil
import com.yidianling.common.tools.ToastUtil
import com.yidianling.consultant.api.IConsultantService
import com.yidianling.fm.api.service.IFMService
import com.yidianling.tests.home.NewTestHomeActivity
import com.yidianling.user.StatusUtils
import com.yidianling.user.ui.collect.CollectSexAndBirthActivity
import com.yidianling.user.ui.login.OneKeyLoginHelp
import com.yidianling.user.widget.SecretDescriptionDialog
import com.yidianling.user.widget.SecretDialog
import com.yidianling.user.widget.SecretDialog.OnSecretDialogListener
import kotlinx.android.synthetic.main.activity_main.*
import com.ydl.component.route.PlatformTempCommonRouteImpl
import com.ydl.confide.home.ConfideHomeActivity
import com.ydl.ydlcommon.router.YdlCommonRouterManager
import com.yidianling.common.tools.LogUtil
import com.yidianling.consultant.api.IConsultantService
import com.yidianling.user.StatusUtils
import com.yidianling.user.ui.login.OneKeyLoginHelp
/**
......
......@@ -5,12 +5,12 @@ ext {
ydlPublishVersion = [
// -------------- 业务模块 --------------
//第三步 若干
"m-confide" : "0.0.49.02",
"m-confide" : "0.0.49.06",
"m-consultant" : "0.0.59.69",
"m-fm" : "0.0.30.01",
"m-user" : "0.0.61.29",
"m-home" : "0.0.22.59",
"m-im" : "0.0.18.41",
"m-im" : "0.0.18.48",
"m-dynamic" : "0.0.7.19",
"m-article" : "0.0.0.6",
......@@ -33,18 +33,18 @@ ext {
//-------------- 功能组件 --------------
//第一步
"ydl-platform" : "0.0.39.98",
"ydl-platform" : "0.0.40.00",
//第二步 若干
"ydl-webview" : "0.0.38.36",
"ydl-webview" : "0.0.38.41",
"ydl-media" : "0.0.21.6",
"ydl-pay" : "0.0.18.13",
"ydl-pay" : "0.0.18.18",
"m-audioim" : "0.0.49.29.36",
"ydl-flutter-base": "0.0.14.23",
//以下 几乎不会动
"router" : "0.0.1",
"ydl-net" : "0.0.3.7",
"ydl-net" : "0.0.3.9",
"ydl-utils" : "0.0.3.1",
]
ydl_app = [
......@@ -88,12 +88,12 @@ ext {
// -------------- 业务模块 --------------
//第三步 若干
"m-confide" : "0.0.49.02",
"m-confide" : "0.0.49.06",
"m-consultant" : "0.0.59.69",
"m-fm" : "0.0.30.01",
"m-user" : "0.0.61.29",
"m-home" : "0.0.22.59",
"m-im" : "0.0.18.40",
"m-im" : "0.0.18.48",
"m-dynamic" : "0.0.7.19",
"m-article" : "0.0.0.6",
......@@ -115,18 +115,18 @@ ext {
//-------------- 功能组件 --------------
//第一步
"ydl-platform" : "0.0.39.98",
"ydl-platform" : "0.0.40.00",
//第二步 若干
"ydl-webview" : "0.0.38.36",
"ydl-webview" : "0.0.38.41",
"ydl-media" : "0.0.21.6",
"ydl-pay" : "0.0.18.11",
"ydl-pay" : "0.0.18.18",
"m-audioim" : "0.0.49.29.36",
"ydl-flutter-base": "0.0.14.23",
//以下 几乎不会动
"router" : "0.0.1",
"ydl-net" : "0.0.3.7",
"ydl-net" : "0.0.3.9",
"ydl-utils" : "0.0.3.1",
]
......@@ -199,6 +199,7 @@ ext {
"androideventbus" : "org.simple:androideventbus:1.0.5.1",
"otto" : "com.squareup:otto:1.3.8",
"gson" : "com.google.code.gson:gson:2.8.5",
"aliyun" : "com.aliyun.openservices:aliyun-log-android-sdk:2.5.13",
"javax.annotation" : "javax.annotation:jsr250-api:1.0",
"arouter" : "com.alibaba:arouter-api:1.4.1",
"progressmanager" : "me.jessyan:progressmanager:1.5.0",
......
......@@ -50,6 +50,8 @@ import com.ydl.ydlcommon.utils.LogUtil
import com.ydl.ydlcommon.utils.StatusBarUtils
import com.ydl.ydlcommon.utils.Utils
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.ydl.ydlcommon.utils.log.AliYunLogConfig
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper
import com.ydl.ydlcommon.utils.log.LogHelper
import com.ydl.ydlcommon.utils.remind.ToastHelper
import com.yidianling.common.tools.ToastUtil
......@@ -212,6 +214,8 @@ class AudioHomeActivity :
uploadException("mRtcEventHandler-onWarning:warnCode--%${warn}", callback = null)
LogUtil.e("[agora]发生警告回调$warn")
writeAgoraLog("声网警告回调($warn)")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "声网警告回调($warn)")
//103:没有可用的频道资源。可能是因为服务端没法分配频道资源
//104:查找频道超时。在加入频道时 SDK 先要查找指定的频道,出现该警告一般是因为网络太差,连接不到服务器
//105:查找频道请求被服务器拒绝。服务器可能没有办法处理这个请求或请求是非法的
......@@ -240,6 +244,8 @@ class AudioHomeActivity :
super.onError(err)
uploadException("mRtcEventHandler-onError:errorCode--%${err}", callback = null)
writeAgoraLog("声网错误回调errorCode--%${err}")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "声网错误回调errorCode--%${err}")
//3:SDK 初始化失败。Agora 建议尝试以下处理方法
//7:SDK 尚未初始化,就调用其 API。请确认在调用 API 之前已创建 RtcEngine 对象并完成初始化
//10:API 调用超时。有些 API 调用需要 SDK 返回结果,如果 SDK 处理时间过长,超过 10 秒没有返回,会出现此错误
......@@ -283,11 +289,16 @@ class AudioHomeActivity :
override fun onApiCallExecuted(error: Int, api: String?, result: String?) {
super.onApiCallExecuted(error, api, result)
// LogUtil.e("[agora]$api 已执行回调 $result")
//注销原因,产生大量无效数据,会被频繁调用
// AliYunRichLogsHelper.getInstance()
// .sendLog(AliYunLogConfig.AGORA, "$api 已执行回调 $result")
}
override fun onJoinChannelSuccess(channel: String?, uid: Int, elapsed: Int) {
super.onJoinChannelSuccess(channel, uid, elapsed)
LogUtil.e("[agora]$uid 用户声网加入频道成功:channel=$channel")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "$uid 用户声网加入频道成功:channel=$channel")
//更新ui
// onJoinChannelSuccess()
......@@ -303,6 +314,8 @@ class AudioHomeActivity :
override fun onRejoinChannelSuccess(channel: String?, uid: Int, elapsed: Int) {
super.onRejoinChannelSuccess(channel, uid, elapsed)
LogUtil.e("[agora]$uid 用户声网重新加入频道成功:channel=$channel")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "$uid 用户声网重新加入频道成功:channel=$channel")
runOnUiThread {
//自己加入频道成功
if (!isConnectSuccess) {
......@@ -316,6 +329,8 @@ class AudioHomeActivity :
override fun onRtcStats(stats: IRtcEngineEventHandler.RtcStats?) {
super.onRtcStats(stats)
writeAgoraLog("声网onRtcStats:users:${stats?.users}")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "声网onRtcStats:users:${stats?.users}")
// 不需要移动端做离开房间逻辑,服务端会判断进行踢人逻辑
//因为用户端直接加入了频道,防止该回调执行时,专家还未加入频道,因此在连接成功之后,才进行频道人数判断
// if (isConnectSuccess && null != stats?.users && stats.users == 1) {
......@@ -332,6 +347,8 @@ class AudioHomeActivity :
// 3 网络连接被服务器中止 该情况现在是因为后端踢人逻辑
if (reason == 3) {
writeAgoraLog("通话结束:网络连接被服务器中止 该情况现在是因为后端踢人逻辑,原因(${reason})")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "通话结束:网络连接被服务器中止 该情况现在是因为后端踢人逻辑,原因(${reason})")
// com.yidianling.common.tools.ToastUtil.toastShort("专家已挂断")
//通话结束或挂断时,上传日志文件
uploadLog()
......@@ -343,6 +360,8 @@ class AudioHomeActivity :
override fun onLeaveChannel(stats: IRtcEngineEventHandler.RtcStats?) {
super.onLeaveChannel(stats)
LogUtil.e("[agora]离开频道回调")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "离开频道回调")
//通话结束或挂断时,上传日志文件
uploadLog()
}
......@@ -351,12 +370,16 @@ class AudioHomeActivity :
override fun onUserJoined(uid: Int, elapsed: Int) {
super.onUserJoined(uid, elapsed)
LogUtil.e("[agora]远端用户/主播加入频道回调")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "远端用户/主播加入频道回调")
}
override fun onUserOffline(uid: Int, elapsed: Int) {
super.onUserOffline(uid, elapsed)
LogUtil.e("[agora]远端用户$uid 离开频道回调")
writeAgoraLog("接通后通话结束:对方已挂断")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "接通后通话结束:对方已挂断")
//通话结束或挂断时,上传日志文件
uploadLog()
showToast("专家已挂断")
......@@ -430,6 +453,8 @@ class AudioHomeActivity :
//页面传递数据初始化
initIntentData()
writeAgoraLog("通话页面打开的时候,RTM登录状态码:${YDLavManager.sdkStatus}")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.RTM, "通话页面打开的时候,RTM登录状态码:${YDLavManager.sdkStatus}")
if (YDLavManager.sdkStatus != Constants.CONNECTION_STATE_CONNECTED) {
//再次登录声网,确保声网登录状态
reLoginRTM()
......@@ -486,6 +511,8 @@ class AudioHomeActivity :
commentUrl = intent.getStringExtra(IntentConstants.INTENT_COMMENT_URL)
dialStatus = intent.getStringExtra(IntentConstants.INTENT_DIALSTATUS)
writeAgoraLog("专家的通话状态dialStatus:$dialStatus", false)
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "专家的通话状态dialStatus:$dialStatus")
isShowAXB = intent.getBooleanExtra(IntentConstants.INTENT_ISSHOWAXB, true)
val logBean = AgoraLogInfoBean(
......@@ -500,7 +527,8 @@ class AudioHomeActivity :
)
val content = Gson().toJson(logBean)
writeAgoraLog("主叫方发送的邀请通话消息内容:$content", true)
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "主叫方发送的邀请通话消息内容:$content")
localRemainTime = remainTime?.toInt()
handler = Handler()
vibrator = getSystemService(Service.VIBRATOR_SERVICE) as Vibrator?
......@@ -508,6 +536,8 @@ class AudioHomeActivity :
private fun reLoginRTM() {
writeAgoraLog("RMT状态:${YDLavManager.sdkStatus},重新登录RMT")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.RTM, "RMT状态:${YDLavManager.sdkStatus},重新登录RMTt")
val uid = YdlCommonRouterManager.getYdlCommonRoute().getUid().toString()
YDLavManager.instances.login(uid) { _isSuccess, _msg ->
// writeAgoraLog("拨打电话界面打开RTM重新登录,uid=${uid}")
......@@ -518,6 +548,8 @@ class AudioHomeActivity :
private fun initView() {
writeAgoraLog("用户拨打电话界面开启")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "用户拨打电话界面开启")
tv_change_route.isEnabled = false
//水波纹view初始化
wave_view.setDuration(6000)
......@@ -563,6 +595,8 @@ class AudioHomeActivity :
}
if (isConnectSuccess) {
writeAgoraLog("已接通:主叫主动挂断")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "已接通:主叫主动挂断")
updateExpertStatus(false, 1)
leaveChannel()
uploadLog()
......@@ -611,6 +645,8 @@ class AudioHomeActivity :
when {
permission.granted -> {
writeAgoraLog("请求音频权限通过")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "请求音频权限通过")
init()
}
permission.shouldShowRequestPermissionRationale -> {
......@@ -620,6 +656,8 @@ class AudioHomeActivity :
// 拒绝权限操作发送给服务端
uploadException("AudioNotAuth","zhu",YDLavManager.AUDIO_NO_AUTH_ERROR_CODE,null)
writeAgoraLog("拒绝请求音频权限")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "拒绝请求音频权限")
uploadLog()
ToastHelper.show(getString(R.string.audioim_need_storage_permission_hint))
......@@ -682,6 +720,8 @@ class AudioHomeActivity :
//关闭音乐
stopPlaying()
writeAgoraLog("未接通挂断:50s等待倒计时结束挂断")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "未接通挂断:50s等待倒计时结束挂断")
//提示切换传统线路
//发送消息通知专家用户已挂断
YDLavManager.instances.cancelCall(
......@@ -690,6 +730,8 @@ class AudioHomeActivity :
sendDoctocrMsg!!
) { msg, code ->
writeAgoraLog("未接听时:主叫(用户)主动挂断失败,msg=$msg($code),再次挂断")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "未接听时:主叫(用户)主动挂断失败,msg=$msg($code),再次挂断")
}
//通话结束或挂断时,上传日志文件
uploadLog()
......@@ -725,6 +767,8 @@ class AudioHomeActivity :
*/
fun joinChannel() {
writeAgoraLog("对方(专家)接受了通话邀请,主叫(用户)开始加入频道:$channelId")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "对方(专家)接受了通话邀请,主叫(用户)开始加入频道:$channelId")
voiceManage!!.getVoiceApi().joinChannel(
token!!,
channelId!!,
......@@ -740,6 +784,8 @@ class AudioHomeActivity :
*/
private fun userCloseCalling() {
writeAgoraLog("未接听时:主叫(用户)主动挂断,取消呼叫")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "未接听时:主叫(用户)主动挂断,取消呼叫")
LogUtil.e("未接听挂断")
//发送消息通知专家用户已挂断
YDLavManager.instances.cancelCall(
......@@ -748,6 +794,8 @@ class AudioHomeActivity :
sendDoctocrMsg!!
) { msg, code ->
writeAgoraLog("未接听时:主叫(用户)主动挂断失败,msg=$msg($code),再次挂断")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "未接听时:主叫(用户)主动挂断失败,msg=$msg($code),再次挂断")
}
//通话结束或挂断时,上传日志文件
uploadLog()
......@@ -793,6 +841,8 @@ class AudioHomeActivity :
val dialog = AxbConfirmDialog(mContext, type, object : AxbConfirmDialog.OnClickEnsureListener {
override fun onClickEnsure() {
writeAgoraLog("主叫点击切换AXB按钮")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "主叫点击切换AXB按钮")
switchAXB()
}
......@@ -815,6 +865,8 @@ class AudioHomeActivity :
uploadException("", "zhu", "108", object : YDLavManager.UploadExceptionCallback {
override fun onSuccess() {
writeAgoraLog("离开房间成功,主叫切换AXB之后")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "离开房间成功,主叫切换AXB之后")
mPresenter.getAXBPhone(ConnectCommand(listenId!!, "1"))
}
......@@ -848,6 +900,8 @@ class AudioHomeActivity :
sendDoctocrMsg!!
) { msg, code ->
writeAgoraLog("未接听时:主叫主动挂断失败,msg=$msg($code),再次挂断")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "未接听时:主叫主动挂断失败,msg=$msg($code),再次挂断")
}
leaveChannel()
}
......
......@@ -22,13 +22,12 @@ import com.ydl.ydl_av.messge_service.callback.LoginCallback
import com.ydl.ydl_av.messge_service.request.LoginParam
import com.ydl.ydl_av.messge_service.response.CallLocalResponse
import com.ydl.ydl_av.messge_service.response.CallRemoteResponse
import com.ydl.ydlcommon.base.BaseApp
import com.ydl.ydlcommon.modular.ModularServiceManager
import com.ydl.ydlcommon.utils.ActivityManager
import com.ydl.ydlcommon.utils.LogUtil
import com.ydl.ydlcommon.utils.SharedPreferencesEditor
import com.ydl.ydlcommon.utils.log.AliYunLogConfig
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper
import com.ydl.ydlcommon.utils.log.LogHelper
import com.yidianling.common.tools.RxSPTool
import com.yidianling.common.tools.ToastUtil
import com.yidianling.im.api.bean.IMRegisterObserverCustomNotificationCallBack
import com.yidianling.im.api.bean.IMSendCustomNotificationResultCallBack
......@@ -93,6 +92,10 @@ class YDLavManager {
override fun onCallRecivedByPeer(response: CallLocalResponse?) {
//返回给主叫:被叫已收到呼叫邀请
LogUtil.e("[agora]${response?.calleeId}已收到呼叫邀请,频道号${response?.ChannelId}")
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.AGORA,
"${response?.calleeId}已收到呼叫邀请,频道号${response?.ChannelId}"
)
val act = ActivityManager.getInstance().getTopTaskActivity()
if (act is AudioHomeActivity) {
......@@ -106,7 +109,10 @@ class YDLavManager {
override fun onCallAccepted(response: CallLocalResponse?, msg: String?) {
//返回给主叫
LogUtil.e("[agora]${response?.calleeId}已接收呼叫邀请")
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.AGORA,
"${response?.calleeId}已接收呼叫邀请"
)
//加入声网频道时机修改:主叫收到被叫接受邀请的回调后再加入声网频道
val act = ActivityManager.getInstance().getTopTaskActivity()
if (act is AudioHomeActivity) {
......@@ -119,7 +125,10 @@ class YDLavManager {
override fun onCallRefused(response: CallLocalResponse?, msg: String?) {
//返回给主叫
LogUtil.e("[agora]${response?.calleeId}已拒绝呼叫邀请")
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.AGORA,
"${response?.calleeId}已拒绝呼叫邀请"
)
val act = ActivityManager.getInstance().getTopTaskActivity()
if (act is AudioHomeActivity) {
act.runOnUiThread {
......@@ -137,6 +146,10 @@ class YDLavManager {
override fun onCallCanceled(response: CallLocalResponse?) {
//返回给主叫
LogUtil.e("[agora]主叫已取消呼叫邀请")
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.AGORA,
"主叫已取消呼叫邀请"
)
val act = ActivityManager.getInstance().getTopTaskActivity()
if (act is AudioHomeActivity) {
act.runOnUiThread {
......@@ -149,6 +162,10 @@ class YDLavManager {
override fun onCallFailure(response: CallLocalResponse?, errorCode: Int) {
//返回给主叫
LogUtil.e("[agora]呼叫${response?.calleeId}用户失败:${response?.response}")
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.AGORA,
"呼叫${response?.calleeId}用户失败:${response?.response}"
)
val act = ActivityManager.getInstance().getTopTaskActivity()
//专家离线或者30 秒后仍未收到专家响应,重新再邀请一次
when (errorCode) {
......@@ -160,26 +177,13 @@ class YDLavManager {
}
}
}
RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_INVITATION_EXPIRE -> { //呼叫邀请过期。被叫 ACK 响应呼叫邀请后 60 秒呼叫邀请未被取消、接受、拒绝,则呼叫邀请过期。
/*
* 和IOS保持一致,当呼叫邀请为3的时候不处理
* */
/* if (act is AudioHomeActivity) {
act.runOnUiThread {
sendCustomNotification(response?.calleeId!!, response?.ChannelId!!, "5")
callEndStatusUpdate(response.ChannelId!!, 2, "被叫超时未接听")
act.uploadExceptionStatus("对方未接听", 3)
// //通话结束或挂断时,上传日志文件
// act.uploadLog()
// act.leaveChannel()
}
}*/
RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_INVITATION_EXPIRE -> {
//呼叫邀请过期。被叫 ACK 响应呼叫邀请后 60 秒呼叫邀请未被取消、接受、拒绝,则呼叫邀请过期。
}
}
//呼叫失败日志输出
if (act is AudioHomeActivity){
act.runOnUiThread{
if (act is AudioHomeActivity) {
act.runOnUiThread {
act.writeAgoraLog("发送通话邀请失败:${errorCode}")
LogHelper.getInstance().uploadLog(false)
}
......@@ -189,17 +193,29 @@ class YDLavManager {
override fun onRemoteInvitationReceived(response: CallRemoteResponse?) {
//返回给被叫
LogUtil.e("[agora]收到来自${response?.callerId}的呼叫邀请")
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.AGORA,
"收到来自${response?.callerId}的呼叫邀请"
)
receivedCall(response?.content, "来自RTM")
}
override fun onRemoteInvitationAccepted(response: CallRemoteResponse?) {
//返回给被叫
LogUtil.e("[agora]接受来自${response?.callerId}的呼叫成功")
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.AGORA,
"接受来自${response?.callerId}的呼叫成功"
)
}
override fun onRemoteInvitationRefused(response: CallRemoteResponse?) {
//返回给被叫
LogUtil.e("[agora]已拒绝来自${response?.callerId}的呼叫")
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.AGORA,
"已拒绝来自${response?.callerId}的呼叫"
)
val act = ActivityManager.getInstance().getTopTaskActivity()
if (act is ConsultantAudioHomeActivity) {
act.uploadExceptionStatus("已拒绝", 2)
......@@ -210,7 +226,14 @@ class YDLavManager {
callEndStatusUpdate(response?.ChannelId!!, 1, "主叫取消呼叫")
//返回给被叫
LogUtil.e("[agora]主叫${response?.callerId}已取消呼叫邀请")
writeAgoraLog("呼叫邀请被取消:主叫(专家)主动取消-------Time:${AudioLogUtils.format.format(Calendar.getInstance().time)}", FILE_NAME)
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.AGORA,
"主叫${response?.callerId}已取消呼叫邀请"
)
writeAgoraLog(
"呼叫邀请被取消:主叫(专家)主动取消-------Time:${AudioLogUtils.format.format(Calendar.getInstance().time)}",
FILE_NAME
)
val act = ActivityManager.getInstance().getTopTaskActivity()
if (act is ConsultantAudioHomeActivity) {
......@@ -224,13 +247,26 @@ class YDLavManager {
//返回给被叫
LogUtil.e("[agora]来自主叫${response?.callerId}的呼叫邀请进程失败:${response?.response}")
if (errorCode == RtmStatusCode.RemoteInvitationError.REMOTE_INVITATION_ERR_INVITATION_EXPIRE) { //呼叫邀请过期
writeAgoraLog("呼叫邀请被取消:用户未接听-------Time:${AudioLogUtils.format.format(Calendar.getInstance().time)}", FILE_NAME)
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.AGORA,
"呼叫邀请被取消:用户未接听"
)
writeAgoraLog(
"呼叫邀请被取消:用户未接听-------Time:${AudioLogUtils.format.format(Calendar.getInstance().time)}",
FILE_NAME
)
val act = ActivityManager.getInstance().getTopTaskActivity()
if (act is ConsultantAudioHomeActivity) {
act.uploadExceptionStatus("未接听", 3)
}
} else {
writeAgoraLog("呼叫邀请被取消:错误原因(${errorCode})-------Time:${AudioLogUtils.format.format(Calendar.getInstance().time)}", FILE_NAME)
writeAgoraLog(
"呼叫邀请被取消:错误原因(${errorCode})", FILE_NAME
)
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.AGORA,
"呼叫邀请被取消:错误原因(${errorCode})"
)
}
callEndStatusUpdate(response?.ChannelId!!, 2, "超时未接听导致的取消呼叫")
//关闭页面
......@@ -239,11 +275,29 @@ class YDLavManager {
override fun onOtherMsg(error: String?) {
LogUtil.e("[agora]其它消息:${error}")
if (error.equals("呼叫发送成功")){
writeAgoraLog("声网发送通话邀请成功-------Time:${AudioLogUtils.format.format(Calendar.getInstance().time)}", "confide.log",true)
}else{
writeAgoraLog("声网发送通话邀请失败${error}-------Time:${AudioLogUtils.format.format(Calendar.getInstance().time)}", "confide.log",true)
if (error.equals("呼叫发送成功")) {
writeAgoraLog(
"声网发送通话邀请成功-------Time:${AudioLogUtils.format.format(Calendar.getInstance().time)}",
"confide.log",
true
)
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.AGORA,
"声网发送通话邀请成功"
)
} else {
writeAgoraLog(
"声网发送通话邀请失败${error}-------Time:${
AudioLogUtils.format.format(
Calendar.getInstance().time
)
}", "confide.log", true
)
LogHelper.getInstance().uploadLog(false)
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.AGORA,
"声网发送通话邀请失败${error}"
)
}
}
})
......@@ -255,6 +309,8 @@ class YDLavManager {
toUid: String,
content: String
) {
// LogUtil.e("[agora]收到云信的通知消息:$content")
// val agoraInvitationBean = Gson().fromJson(content, AgoraInvitationBean::class.java)
......@@ -354,15 +410,31 @@ class YDLavManager {
override fun onException(throwable: Throwable) {
// writeAgoraLog("云信发送通话邀请异常${throwable.message}-------Time:${AudioLogUtils.format.format(Calendar.getInstance().time)}", "confide.log", true)
// LogHelper.getInstance().uploadLog(false)
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.YUNXIN,
"云信发送通话邀请异常${throwable.message}"
)
}
override fun onFailed(code: Int) {
// writeAgoraLog("云信发送通话邀请失败${code}-------Time:${AudioLogUtils.format.format(Calendar.getInstance().time)}", "confide.log", true)
// LogHelper.getInstance().uploadLog(false)
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.YUNXIN,
"云信发送通话邀请失败${code}"
)
}
override fun onSuccess() {
writeAgoraLog("云信发送通话邀请成功-------Time:${AudioLogUtils.format.format(Calendar.getInstance().time)}", "confide.log", true)
writeAgoraLog(
"云信发送通话邀请成功-------Time:${AudioLogUtils.format.format(Calendar.getInstance().time)}",
"confide.log",
true
)
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.YUNXIN,
"云信发送通话邀请成功"
)
}
})
}, 300)
......@@ -379,6 +451,7 @@ class YDLavManager {
if (TextUtils.isEmpty(userId) || userId ?: "0" <= "0") {
//如果uid为空或小于等于0 ,则不进行登录,因为uid为0也会登录成功,会导致后面uid正确时无法登录
LogUtil.e("[agora]login-uid:$userId")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA,"uid为空或小于等于0 ,则不进行登录 login-uid:$userId")
return
}
isOnlineRtm = true
......@@ -394,22 +467,50 @@ class YDLavManager {
override fun onSuccess() {
//登陆成功,发起呼叫
LogUtil.e("[agora]实时消息登录成功")
writeAgoraLog("声网rtm登录成功,uid:$userId-------Time:${AudioLogUtils.format.format(Calendar.getInstance().time)}", "confide.log", true)
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "声网rtm登录成功,uid:$userId")
writeAgoraLog(
"声网rtm登录成功,uid:$userId-------Time:${
AudioLogUtils.format.format(
Calendar.getInstance().time
)
}", "confide.log", true
)
event(true, "")
}
override fun onFailure(msg: String?) {
LogUtil.e("[agora]实时消息登录失败:$msg")
writeAgoraLog("声网rtm登录失败:$msg-------Time:${AudioLogUtils.format.format(Calendar.getInstance().time)}", "confide.log", true)
writeAgoraLog(
"声网rtm登录失败:$msg-------Time:${
AudioLogUtils.format.format(
Calendar.getInstance().time
)
}", "confide.log", true
)
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "声网rtm登录失败:$msg")
event(false, msg)
}
})
} else {
LogUtil.e("声网token获取失败uid:" + userId + " error:" + it.msg)
LogHelper.getInstance().writeLogSync("声网token获取失败uid:" + userId + " error:" + it.msg)
LogHelper.getInstance()
.writeLogSync("声网token获取失败uid:" + userId + " error:" + it.msg)
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.AGORA,
"声网token获取失败uid" + userId + " error:" + it.msg
)
}
}, {
LogUtil.e("声网token获取异常uid:" + userId + " error:" + it.message)
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.AGORA,
"声网token获取异常uid:" + userId + " error:" + it.message
)
})
}
......@@ -428,7 +529,16 @@ class YDLavManager {
Observable.timer(1000, TimeUnit.MILLISECONDS).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()).subscribe {
LogUtil.e("[agora]启动通话界面")
writeAgoraLog("收到主叫方通话邀请($from)-------Time:${AudioLogUtils.format.format(Calendar.getInstance().time)}", FILE_NAME, false)
writeAgoraLog(
"收到主叫方通话邀请($from)-------Time:${
AudioLogUtils.format.format(
Calendar.getInstance().time
)
}", FILE_NAME, false
)
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "收到主叫方通话邀请($from)")
LogHelper.getInstance().uploadLog(false)
//邀请加入频道消息,跳转通话界面
ARouter.getInstance().build("/av/ConsultantAudioHomeActivity")
......@@ -436,12 +546,29 @@ class YDLavManager {
}
} else {
LogUtil.d("[agora]收到声网邀请,但界面实例已存在")
writeAgoraLog("收到主叫方通话邀请,但界面实例已存在($from)-------Time:${AudioLogUtils.format.format(Calendar.getInstance().time)}", FILE_NAME, false)
writeAgoraLog(
"收到主叫方通话邀请,但界面实例已存在($from)-------Time:${
AudioLogUtils.format.format(
Calendar.getInstance().time
)
}", FILE_NAME, false
)
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "收到主叫方通话邀请,但界面实例已存在($from)")
LogHelper.getInstance().uploadLog(false)
}
} else {
LogUtil.d("[agora]收到声网邀请,但response==null")
writeAgoraLog("收到主叫方通话邀请,但response==null($from)-------Time:${AudioLogUtils.format.format(Calendar.getInstance().time)}", FILE_NAME, false)
writeAgoraLog(
"收到主叫方通话邀请,但response==null($from)-------Time:${
AudioLogUtils.format.format(
Calendar.getInstance().time
)
}", FILE_NAME, false
)
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "收到主叫方通话邀请,但response==null($from)")
LogHelper.getInstance().uploadLog(false)
}
}
......@@ -472,19 +599,25 @@ class YDLavManager {
* 退出登录
* @param
*/
private fun logout(isReLogin:Boolean) {
private fun logout(isReLogin: Boolean) {
EventBus.getDefault().unregister(this)
YDLRTMClient.instances.logout(object : LoginCallback {
override fun onSuccess() {
//退出登陆成功
LogUtil.d("[agora]实时消息退出成功")
if (isReLogin){
login(ModularServiceManager.provide(IUserService::class.java).getUserInfo()?.uid)
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "实时消息退出成功")
if (isReLogin) {
login(
ModularServiceManager.provide(IUserService::class.java).getUserInfo()?.uid
)
}
}
override fun onFailure(msg: String?) {
LogUtil.d("[agora]实时消息退出失败:$msg")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "实时消息退出失败:$msg")
}
})
}
......@@ -492,7 +625,7 @@ class YDLavManager {
/**
* 退出登录默认不重新登录
*/
fun logout(){
fun logout() {
logout(false)
}
......@@ -510,6 +643,8 @@ class YDLavManager {
callback?.onSuccess()
}, {
LogUtil.e("agora", "声网上传异常与错误日志接口调用失败:" + it.message)
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "声网上传异常与错误日志接口调用失败: + ${it.message}")
})
}
......@@ -529,6 +664,9 @@ class YDLavManager {
.subscribe({
}, {
LogUtil.d("callEndStatusUpdate error: ${it.message}")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "callEndStatusUpdate error: ${it.message}")
})
}
......@@ -538,6 +676,8 @@ class YDLavManager {
private val listener = object : InitListener {
override fun onTokenExpired() {
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "onTokenExpired")
LogUtil.e("[agora]onTokenExpired")
instances.login(
ModularServiceManager.provide(IUserService::class.java).getUserInfo()?.uid
......@@ -546,22 +686,32 @@ class YDLavManager {
override fun onMessageReceived(message: RTMMesssage, userId: Int) {
LogUtil.i("[agora]onMessageReceived:${message.text} -->uid:$userId")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "onMessageReceived:${message.text} -->uid:$userId")
}
override fun onConnectionStateChanged(state: Int, reason: Int) {
sdkStatus = state
writeAgoraLog("声网rtm登录状态:${state}-------Time:${AudioLogUtils.format.format(Calendar.getInstance().time)}", "confide.log", true)
writeAgoraLog(
"声网rtm登录状态:${state}-------Time:${AudioLogUtils.format.format(Calendar.getInstance().time)}",
"confide.log",
true
)
LogUtil.i("[agora]onConnectionStateChanged:state:${state} -->reason:$reason")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "声网rtm登录状态:${state}")
/*
* 当reason=CONNECTION_CHANGE_REASON_REMOTE_LOGIN的时候,是远端用户以相同UID登录RTM
* 如果正在通话中,则不进行退出操作
* */
if (reason==CONNECTION_CHANGE_REASON_REMOTE_LOGIN){
if (!activityIsExists(ConsultantAudioHomeActivity::class.java)&&!activityIsExists(AudioHomeActivity::class.java)){
if (reason == CONNECTION_CHANGE_REASON_REMOTE_LOGIN) {
if (!activityIsExists(ConsultantAudioHomeActivity::class.java) && !activityIsExists(
AudioHomeActivity::class.java
)
) {
isOnlineRtm = false
logout()
}else{
} else {
logout(true)
}
}
......
......@@ -47,6 +47,8 @@ import com.ydl.ydlcommon.utils.LogUtil
import com.ydl.ydlcommon.utils.StatusBarUtils
import com.ydl.ydlcommon.utils.Utils
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.ydl.ydlcommon.utils.log.AliYunLogConfig
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper
import com.ydl.ydlcommon.utils.log.LogHelper
import com.ydl.ydlcommon.utils.remind.ToastHelper
import com.yidianling.user.api.service.IUserService
......@@ -137,7 +139,7 @@ class ConsultantAudioHomeActivity :
super.onJoinChannelSuccess(channel, uid, elapsed)
LogUtil.e("[agora]$uid 加入频道回调")
writeAgoraLog("被叫(用户)加入声网($channel)频道成功")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "被叫(用户)加入声网($channel)频道成功")
runOnUiThread {
// 加入频道后再通知用户已接受
// YDLRTMClient.instances.acceptCall(mAudioMessageBean?.channelId)
......@@ -165,6 +167,9 @@ class ConsultantAudioHomeActivity :
super.onRejoinChannelSuccess(channel, uid, elapsed)
LogUtil.e("[agora]$uid 重新加入频道回调")
writeAgoraLog("被叫(用户)重新加入声网频道($channel)成功")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "被叫(用户)重新加入声网频道($channel)成功")
runOnUiThread {
if (!isConnectSuccess) {
tv_toast.visibility = View.VISIBLE
......@@ -182,6 +187,8 @@ class ConsultantAudioHomeActivity :
super.onUserJoined(uid, elapsed)
LogUtil.e("[agora]远端用户加入频道回调")
writeAgoraLog("主叫(专家)加入声网频道成功")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "主叫(专家)加入声网频道成功")
//另一方加入频道成功
runOnUiThread {
isConnectSuccess = true
......@@ -223,6 +230,8 @@ class ConsultantAudioHomeActivity :
override fun onLeaveChannel(stats: IRtcEngineEventHandler.RtcStats?) {
super.onLeaveChannel(stats)
LogUtil.e("[agora]自己离开频道回调")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "自己离开频道回调")
//通知php 通话已结束
close(RESULT_ANSWERED_CODE, "")
}
......@@ -249,6 +258,8 @@ class ConsultantAudioHomeActivity :
)
showToast("对方已挂断")
writeAgoraLog("通话接通后挂断:主叫(专家)离开频道")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "通话接通后挂断:主叫(专家)离开频道")
if (null != totalDisposable) {
totalDisposable!!.dispose()
}
......@@ -265,6 +276,8 @@ class ConsultantAudioHomeActivity :
}
LogUtil.e("[agora]发生警告回调=$warn")
writeAgoraLog("声网警告回调码:($warn)")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "声网警告回调码:($warn)")
//103:没有可用的频道资源。可能是因为服务端没法分配频道资源
//104:查找频道超时。在加入频道时 SDK 先要查找指定的频道,出现该警告一般是因为网络太差,连接不到服务器
//105:查找频道请求被服务器拒绝。服务器可能没有办法处理这个请求或请求是非法的
......@@ -290,6 +303,7 @@ class ConsultantAudioHomeActivity :
uploadException("mRtcEventHandler-onError:errorCode--%${err}")
LogUtil.e("[agora] 发生错误回调 =$err")
writeAgoraLog("声网错误回调errorCode--%${err}")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "声网错误回调errorCode--%${err}")
//3:SDK 初始化失败。Agora 建议尝试以下处理方法
//7:SDK 尚未初始化,就调用其 API。请确认在调用 API 之前已创建 RtcEngine 对象并完成初始化
......@@ -510,6 +524,8 @@ class ConsultantAudioHomeActivity :
override fun channelTokenResponse(token: String?, needJoinChannel: Boolean) {
if (TextUtils.isEmpty(token)) {
LogUtil.e("[agora]token not null")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "token isEmpty ")
showToast("通话频道不存在")
finish()
return
......@@ -583,6 +599,8 @@ class ConsultantAudioHomeActivity :
val account = YdlCommonRouterManager.getYdlCommonRoute().getUid()
if (!TextUtils.isEmpty(mAudioMessageBean?.channelId)) {
LogUtil.e("[agora] joinChannel:$account")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "joinChannel:$account")
voiceManage?.getVoiceApi()?.joinChannel(
channelToken
?: "", mAudioMessageBean!!.channelId!!, "Extra Optional Data", account
......@@ -807,6 +825,9 @@ class ConsultantAudioHomeActivity :
fun close(code: Int, msg: String) {
runOnUiThread {
LogUtil.e("[agora]close(code:$code,msg:$msg)")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "close(code:$code,msg:$msg)")
//上传日志文件
uploadLog()
stopMusic()
......@@ -837,6 +858,7 @@ class ConsultantAudioHomeActivity :
}
ActivityManager.getInstance().removeStack(activity = this)
LogUtil.e("[agora]页面移除")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "页面移除")
finish()
}
}
......@@ -945,9 +967,11 @@ class ConsultantAudioHomeActivity :
Observable.create<Any> {
try {
AudioLogUtils.writeAgoraLog(
"$content-------Time:${AudioLogUtils.format.format(
Calendar.getInstance().time
)}", "consult.log"
"$content-------Time:${
AudioLogUtils.format.format(
Calendar.getInstance().time
)
}", "consult.log"
)
} catch (e: Exception) {
}
......
......@@ -10,6 +10,8 @@ import com.netease.nimlib.sdk.avchat.AVChatManager;
import com.netease.nimlib.sdk.avchat.constant.AVChatControlCommand;
import com.netease.nimlib.sdk.avchat.model.AVChatData;
import com.ydl.ydlcommon.base.BaseActivityMgr;
import com.ydl.ydlcommon.utils.log.AliYunLogConfig;
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper;
import com.yidianling.avchatkit.activity.AVChatActivity;
import com.yidianling.avchatkit.common.log.ILogUtil;
import com.yidianling.avchatkit.common.log.LogUtil;
......@@ -149,6 +151,8 @@ public class AVChatKit {
*/
public static void outgoingCall(Context context, String account, String displayName, int callType, int source) {
AVChatActivity.outgoingCall(context, account, displayName, callType, source);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN,"outgoingCall 发起音视频通话呼叫");
}
/**
......@@ -162,7 +166,7 @@ public class AVChatKit {
*/
public static void outgoingTeamCall(Context context, boolean receivedCall, String teamId, String roomId, ArrayList<String> accounts, String teamName) {
TeamAVChatActivity.startActivity(context, receivedCall, teamId, roomId, accounts, teamName);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN,"outgoingTeamCall 发起群组音视频通话呼叫");
}
/**
......
......@@ -26,6 +26,8 @@ import com.netease.nimlib.sdk.avchat.model.AVChatData;
import com.netease.nimlib.sdk.avchat.model.AVChatOnlineAckEvent;
import com.netease.nimlib.sdk.avchat.model.AVChatVideoFrame;
import com.tbruyelle.rxpermissions2.RxPermissions;
import com.ydl.ydlcommon.utils.log.AliYunLogConfig;
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper;
import com.yidianling.avchatkit.AVChatKit;
import com.yidianling.avchatkit.AVChatProfile;
import com.yidianling.avchatkit.common.activity.AVChatBaseUI;
......@@ -325,6 +327,7 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ
ToastUtil.toastShort(AVChatActivity.this, msg);
} else {
ToastUtil.toastShort(AVChatActivity.this, "录制已结束.");
}
if (state == AVChatType.AUDIO.getValue()) {
avChatAudioUI.resetRecordTip();
......@@ -345,12 +348,17 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ
@Override
public void onJoinedChannel(int code, String audioFile, String videoFile, int i) {
LogUtil.d(TAG, "audioFile -> " + audioFile + " videoFile -> " + videoFile);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "audioFile -> " + audioFile + " videoFile -> " + videoFile);
handleWithConnectServerResult(code);
}
@Override
public void onUserJoined(String account) {
LogUtil.d(TAG, "onUserJoin -> " + account);
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "onUserJoin -> " + account);
if (state == AVChatType.VIDEO.getValue()) {
avChatVideoUI.initLargeSurfaceView(account);
}
......@@ -359,6 +367,9 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ
@Override
public void onUserLeave(String account, int event) {
LogUtil.d(TAG, "onUserLeave -> " + account);
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "onUserLeave -> " + account);
manualHangUp(AVChatExitCode.HANGUP);
finish();
}
......@@ -366,11 +377,14 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ
@Override
public void onCallEstablished() {
LogUtil.d(TAG, "onCallEstablished");
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "onCallEstablished");
//移除超时监听
AVChatTimeoutObserver.getInstance().observeTimeoutNotification(timeoutObserver, false, mIsInComingCall);
if (avChatController.getTimeBase() == 0)
if (avChatController.getTimeBase() == 0) {
avChatController.setTimeBase(SystemClock.elapsedRealtime());
}
if (state == AVChatType.AUDIO.getValue()) {
avChatAudioUI.showAudioInitLayout();
} else {
......@@ -400,6 +414,9 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ
public void onEvent(AVChatCommonEvent avChatHangUpInfo) {
avChatData = avChatController.getAvChatData();
if (avChatData != null && avChatData.getChatId() == avChatHangUpInfo.getChatId()) {
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "callHangupObserver 通话过程中,收到对方挂断电话");
hangUpByOther(AVChatExitCode.HANGUP);
cancelCallingNotifier();
// 如果是incoming call主叫方挂断,那么通知栏有通知
......@@ -418,10 +435,16 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ
AVChatData info = avChatController.getAvChatData();
if (info != null && info.getChatId() == ackInfo.getChatId()) {
if (ackInfo.getEvent() == AVChatEventType.CALLEE_ACK_BUSY) {
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "callAckObserver 呼叫时,被叫方正在忙");
hangUpByOther(AVChatExitCode.PEER_BUSY);
} else if (ackInfo.getEvent() == AVChatEventType.CALLEE_ACK_REJECT) {
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "callAckObserver 呼叫时,被叫方拒绝通话");
hangUpByOther(AVChatExitCode.REJECT);
} else if (ackInfo.getEvent() == AVChatEventType.CALLEE_ACK_AGREE) {
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "callAckObserver 呼叫时,被叫方同意通话");
AVChatSoundPlayer.instance().stop();
avChatController.isCallEstablish.set(true);
}
......@@ -436,6 +459,8 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ
// 来电超时,自己未接听
if (mIsInComingCall) {
activeMissCallNotifier();
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "timeoutObserver 来电超时,自己未接听");
}
finish();
}
......@@ -456,27 +481,39 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ
}
switch (notification.getControlCommand()) {
case AVChatControlCommand.SWITCH_AUDIO_TO_VIDEO:
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "handleCallControl 音频切换到视频");
incomingAudioToVideo();
break;
case AVChatControlCommand.SWITCH_AUDIO_TO_VIDEO_AGREE:
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "handleCallControl 同意从音频切换到视频");
// 对方同意切成视频啦
state = AVChatType.VIDEO.getValue();
avChatVideoUI.onAudioToVideoAgree(notification.getAccount());
break;
case AVChatControlCommand.SWITCH_AUDIO_TO_VIDEO_REJECT:
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "handleCallControl 拒绝从音频切换到视频");
rejectAudioToVideo();
ToastUtil.toastShort(AVChatActivity.this, R.string.im_avchat_switch_video_reject);
break;
case AVChatControlCommand.SWITCH_VIDEO_TO_AUDIO:
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "handleCallControl 视频切换到音频");
onVideoToAudio();
break;
case AVChatControlCommand.NOTIFY_VIDEO_OFF:
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "handleCallControl 通知对方自己关闭了视频");
// 收到对方关闭画面通知
if (state == AVChatType.VIDEO.getValue()) {
avChatVideoUI.peerVideoOff();
}
break;
case AVChatControlCommand.NOTIFY_VIDEO_ON:
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "handleCallControl 通知对方自己打开了视频");
// 收到对方打开画面通知
if (state == AVChatType.VIDEO.getValue()) {
avChatVideoUI.peerVideoOn();
......@@ -496,14 +533,24 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ
protected void handleWithConnectServerResult(int auth_result) {
LogUtil.i(TAG, "result code->" + auth_result);
if (auth_result == 200) {
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "handleWithConnectServerResult onConnectServer success");
LogUtil.d(TAG, "onConnectServer success");
} else if (auth_result == 101) { // 连接超时
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "handleWithConnectServerResult 连接超时 101");
avChatController.showQuitToast(AVChatExitCode.PEER_NO_RESPONSE);
} else if (auth_result == 401) { // 验证失败
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "handleWithConnectServerResult 验证失败 401");
avChatController.showQuitToast(AVChatExitCode.CONFIG_ERROR);
} else if (auth_result == 417) { // 无效的channelId
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "handleWithConnectServerResult 无效的channelId 417");
avChatController.showQuitToast(AVChatExitCode.INVALIDE_CHANNELID);
} else { // 连接服务器错误,直接退出
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "handleWithConnectServerResult 连接服务器错误" + auth_result);
avChatController.showQuitToast(AVChatExitCode.CONFIG_ERROR);
}
}
......@@ -545,6 +592,8 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ
if (client != null) {
String option = ackInfo.getEvent() == AVChatEventType.CALLEE_ONLINE_CLIENT_ACK_AGREE ? "接听!" : "拒绝!";
ToastUtil.toastShort(AVChatActivity.this, "通话已在" + client + "端被" + option);
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "onlineAckObserver 通话已在" + client + "端被" + option);
}
finish();
}
......@@ -607,6 +656,8 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ
@Override
public void onReceiveAudioToVideoAgree() {
// 同意切换为视频
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "onReceiveAudioToVideoAgree 同意切换为视频");
state = AVChatType.VIDEO.getValue();
audioRoot.setVisibility(View.GONE);
videoRoot.setVisibility(View.VISIBLE);
......@@ -663,12 +714,16 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ
// 主动挂断
private void manualHangUp(int exitCode) {
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "manualHangUp 主动挂断");
releaseVideo();
avChatController.hangUp(exitCode);
}
// 被对方挂断
private void hangUpByOther(int exitCode) {
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.YUNXIN, "hangUpByOther 被对方挂断 exitCode:"+exitCode);
if (exitCode == AVChatExitCode.PEER_BUSY) {
avChatController.hangUp(AVChatExitCode.HANGUP);
finish();
......
......@@ -35,6 +35,7 @@ public abstract class AVChatBaseUI extends AppCompatActivity {
super.onStart();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......
......@@ -157,6 +157,7 @@ public class CustomAlertDialog extends AlertDialog {
}
}
@Override
public void setTitle(int resId) {
this.title = context.getString(resId);
isTitleVisible = TextUtils.isEmpty(title) ? false : true;
......
......@@ -11,6 +11,8 @@ import android.os.Build;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import com.ydl.ydlcommon.utils.log.AliYunLogConfig;
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper;
import com.yidianling.avchatkit.common.log.LogUtil;
public class NetworkUtil {
......@@ -79,8 +81,9 @@ public class NetworkUtil {
NetworkInfo networkInfo = getActiveNetworkInfo(context);
if (networkInfo == null) {
return -1;
} else
} else {
return networkInfo.getType();
}
}
......@@ -145,7 +148,7 @@ public class NetworkUtil {
}
}
curNetworkType = type;
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.NETSTATUS, "网络类型:" + type);
return type;
}
......@@ -271,8 +274,11 @@ public class NetworkUtil {
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni != null) {
if (ni.getType() == ConnectivityManager.TYPE_WIFI) {
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.NETSTATUS, "网络类型:TYPE_WIFI");
return true;
} else {
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.NETSTATUS, "网络类型:非WIFI环境");
return false;
}
} else {
......
......@@ -15,6 +15,8 @@ import com.netease.nimlib.sdk.avchat.model.AVChatNotifyOption;
import com.netease.nimlib.sdk.avchat.model.AVChatParameters;
import com.netease.nimlib.sdk.avchat.video.AVChatCameraCapturer;
import com.netease.nimlib.sdk.avchat.video.AVChatVideoCapturerFactory;
import com.ydl.ydlcommon.utils.log.AliYunLogConfig;
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper;
import com.yidianling.avchatkit.AVChatKit;
import com.yidianling.avchatkit.common.log.LogUtil;
import com.yidianling.avchatkit.common.widgets.MultiSelectDialog;
......@@ -70,8 +72,11 @@ public class AVChatController {
this.avChatConfigs = new AVChatConfigs(context);
}
//恢复视频和语音发送
/**
* 恢复视频和语音发送
*/
public void resumeVideo() {
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "恢复视频和语音发送");
if (needRestoreLocalVideo) {
AVChatManager.getInstance().muteLocalVideo(false);
needRestoreLocalVideo = false;
......@@ -84,9 +89,11 @@ public class AVChatController {
}
//关闭视频和语音发送.
/**
* 关闭视频和语音发送.
*/
public void pauseVideo() {
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "关闭视频和语音发送");
if (!AVChatManager.getInstance().isLocalVideoMuted()) {
AVChatManager.getInstance().muteLocalVideo(true);
needRestoreLocalVideo = true;
......@@ -137,8 +144,10 @@ public class AVChatController {
if (code == ResponseCode.RES_FORBIDDEN) {
ToastUtil.toastShort(context, R.string.im_avchat_no_permission);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "onFailed 暂无权限,请开通音视频服务 code:" + code);
} else {
ToastUtil.toastShort(context, R.string.im_avchat_call_failed);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "onFailed 发起通话失败 code:" + code);
}
closeRtc(avChatType == AVChatType.VIDEO ? CallStateEnum.VIDEO : CallStateEnum.AUDIO);
callback.onFailed(code, "");
......@@ -147,6 +156,8 @@ public class AVChatController {
@Override
public void onException(Throwable exception) {
LogUtil.d(TAG, "avChat call onException->" + exception);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "onException avChat call onException->" + exception);
closeRtc(avChatType == AVChatType.VIDEO ? CallStateEnum.VIDEO : CallStateEnum.AUDIO);
callback.onFailed(-1, exception.toString());
}
......@@ -184,8 +195,12 @@ public class AVChatController {
public void onFailed(int code) {
if (code == -1) {
ToastUtil.toastShort(context, "本地音视频启动失败");
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "onFailed 本地音视频启动失败 code:" + code);
} else {
ToastUtil.toastShort(context, "建立连接失败");
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "onFailed 建立连接失败 code:" + code);
}
LogUtil.e(TAG, "accept onFailed->" + code);
handleAcceptFailed(avChatType == AVChatType.VIDEO ?
......@@ -196,6 +211,8 @@ public class AVChatController {
@Override
public void onException(Throwable exception) {
LogUtil.d(TAG, "accept exception->" + exception);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "onException accept exception->" + exception);
handleAcceptFailed(avChatType == AVChatType.VIDEO ?
CallStateEnum.VIDEO_CONNECTING : CallStateEnum.AUDIO);
callback.onFailed(-1, exception.toString());
......@@ -208,9 +225,13 @@ public class AVChatController {
if (!AVChatManager.getInstance().isLocalAudioMuted()) { // isMute是否处于静音状态
// 关闭音频
AVChatManager.getInstance().muteLocalAudio(true);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "toggleMute 关闭音频");
} else {
// 打开音频
AVChatManager.getInstance().muteLocalAudio(false);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "toggleMute 打开音频");
}
}
......@@ -224,6 +245,8 @@ public class AVChatController {
@Override
public void onSuccess(Void aVoid) {
LogUtil.d(TAG, "videoSwitchAudio onSuccess");
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "switchVideoToAudio 发送视频切换为音频命令 onSuccess");
//关闭视频
AVChatManager.getInstance().stopVideoPreview();
AVChatManager.getInstance().disableVideo();
......@@ -235,11 +258,15 @@ public class AVChatController {
@Override
public void onFailed(int code) {
LogUtil.d(TAG, "videoSwitchAudio onFailed");
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "switchVideoToAudio 发送视频切换为音频命令 onFailed code:" + code);
}
@Override
public void onException(Throwable exception) {
LogUtil.d(TAG, "videoSwitchAudio onException");
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "switchVideoToAudio 发送视频切换为音频命令 onException exception:" + exception);
}
});
}
......@@ -250,17 +277,23 @@ public class AVChatController {
@Override
public void onSuccess(Void aVoid) {
LogUtil.d(TAG, "requestSwitchToVideo onSuccess");
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "switchVideoToAudio 发送音频切换为视频命令 onSuccess");
avSwitchListener.onAudioToVideo();
}
@Override
public void onFailed(int code) {
LogUtil.d(TAG, "requestSwitchToVideo onFailed" + code);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "switchVideoToAudio 发送音频切换为视频命令 onFailed:" + code);
}
@Override
public void onException(Throwable exception) {
LogUtil.d(TAG, "requestSwitchToVideo onException" + exception);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "switchVideoToAudio 发送音频切换为视频命令 onException:" + exception);
}
});
}
......@@ -271,6 +304,7 @@ public class AVChatController {
@Override
public void onSuccess(Void aVoid) {
LogUtil.d(TAG, "receiveAudioToVideo onSuccess");
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "switchVideoToAudio 发送同意从音频切换为视频的命令 onSuccess");
avSwitchListener.onReceiveAudioToVideoAgree();
}
......@@ -278,11 +312,16 @@ public class AVChatController {
@Override
public void onFailed(int code) {
LogUtil.d(TAG, "receiveAudioToVideo onFailed");
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN,
"switchVideoToAudio 发送同意从音频切换为视频的命令 onFailed:" + code);
}
@Override
public void onException(Throwable exception) {
LogUtil.d(TAG, "receiveAudioToVideo onException");
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "switchVideoToAudio 发送同意从音频切换为视频的命令 exception:" + exception);
}
});
}
......@@ -361,12 +400,16 @@ public class AVChatController {
}
}
// 设置扬声器是否开启
/**
* 设置扬声器是否开启
*/
public void toggleSpeaker() {
AVChatManager.getInstance().setSpeaker(!AVChatManager.getInstance().speakerEnabled());
}
// 切换摄像头(主要用于前置和后置摄像头切换)
/**
* 切换摄像头(主要用于前置和后置摄像头切换)
*/
public void switchCamera() {
mVideoCapturer.switchCamera();
}
......@@ -403,7 +446,7 @@ public class AVChatController {
showQuitToast(type);
}
// 收到挂断通知,自己的处理
/**收到挂断通知,自己的处理*/
public void onHangUp(int exitCode) {
if (destroyRTC) {
return;
......@@ -415,37 +458,49 @@ public class AVChatController {
((Activity) context).finish();
}
// 显示退出toast
/** 显示退出toast*/
public void showQuitToast(int code) {
switch (code) {
case AVChatExitCode.NET_CHANGE: // 网络切换
case AVChatExitCode.NET_ERROR: // 网络异常
case AVChatExitCode.CONFIG_ERROR: // 服务器返回数据错误
// 网络切换
case AVChatExitCode.NET_CHANGE:
// 网络异常
case AVChatExitCode.NET_ERROR:
// 服务器返回数据错误
case AVChatExitCode.CONFIG_ERROR:
ToastUtil.toastShort(context, R.string.im_avchat_net_error_then_quit);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN,
"网络异常,通话结束 网络切换4 网络异常8 服务器返回数据错误10 code:" + code);
break;
case AVChatExitCode.REJECT:
ToastUtil.toastShort(context, R.string.im_avchat_call_reject);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "被对方拒绝");
break;
case AVChatExitCode.PEER_HANGUP:
case AVChatExitCode.HANGUP:
if (isCallEstablish.get()) {
ToastUtil.toastShort(context, R.string.im_avchat_call_finish);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "通话结束");
}
break;
case AVChatExitCode.PEER_BUSY:
ToastUtil.toastShort(context, R.string.im_avchat_peer_busy);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "对方正在通话中,请稍后再拨。");
break;
case AVChatExitCode.PROTOCOL_INCOMPATIBLE_PEER_LOWER:
ToastUtil.toastShort(context, R.string.im_avchat_peer_protocol_low_version);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "对方版本过低,请提示对方升");
break;
case AVChatExitCode.PROTOCOL_INCOMPATIBLE_SELF_LOWER:
ToastUtil.toastShort(context, R.string.im_avchat_local_protocol_low_version);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "版本过低,请升级后使用");
break;
case AVChatExitCode.INVALIDE_CHANNELID:
ToastUtil.toastShort(context, R.string.im_avchat_invalid_channel_id);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "对方已挂断");
break;
case AVChatExitCode.LOCAL_CALL_BUSY:
ToastUtil.toastShort(context, R.string.im_avchat_local_call_busy);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "本地通话中,无法进行通话。");
break;
default:
break;
......
......@@ -35,6 +35,8 @@ import com.netease.nimlib.sdk.avchat.model.AVChatParameters;
import com.netease.nimlib.sdk.avchat.video.AVChatCameraCapturer;
import com.netease.nimlib.sdk.avchat.video.AVChatVideoCapturerFactory;
import com.netease.nrtc.video.render.IVideoRender;
import com.ydl.ydlcommon.utils.log.AliYunLogConfig;
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper;
import com.yidianling.avchatkit.AVChatKit;
import com.yidianling.avchatkit.TeamAVChatProfile;
import com.yidianling.avchatkit.common.activity.AVChatBaseUI;
......@@ -436,6 +438,7 @@ public class TeamAVChatActivity extends AVChatBaseUI {
public void onSuccess(AVChatData data) {
chatId = data.getChatId();
LogUtil.i(TAG, "join room success, roomId=" + roomId + ", chatId=" + chatId);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN,"join room success, roomId=" + roomId + ", chatId=" + chatId);
}
@Override
......@@ -458,13 +461,17 @@ public class TeamAVChatActivity extends AVChatBaseUI {
startLocalPreview();
startTimerForCheckReceivedCall();
LogUtil.i(TAG, "team avchat running..." + ", roomId=" + roomId);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN,"onJoinRoomSuccess 进入房间成功");
}
private void onJoinRoomFailed(int code, Throwable e) {
if (code == ResponseCode.RES_ENONEXIST) {
showToast(getString(R.string.im_t_avchat_join_fail_not_exist));
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN,"startRtc 进入房间失败 房间不存在 code:"+code);
} else {
showToast("join room failed, code=" + code + ", e=" + (e == null ? "" : e.getMessage()));
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN,"join room failed, code=" + code + ", e=" + (e == null ? "" : e.getMessage()));
}
}
......@@ -483,6 +490,7 @@ public class TeamAVChatActivity extends AVChatBaseUI {
updateAudioMuteButtonState();
LogUtil.i(TAG, "on user joined, account=" + account);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN,"on user joined, account=" + account);
}
public void onAVChatUserLeave(String account) {
......@@ -496,6 +504,7 @@ public class TeamAVChatActivity extends AVChatBaseUI {
updateAudioMuteButtonState();
LogUtil.i(TAG, "on user leave, account=" + account);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN,"on user leave, account=" + account);
}
private void startLocalPreview() {
......
......@@ -17,6 +17,8 @@ import com.ydl.ydlcommon.ui.LoadingDialogFragment
import com.ydl.ydlcommon.ui.LoadingDialogFragment.Companion.newInstance
import com.ydl.ydlcommon.utils.NetworkParamsUtils
import com.ydl.ydlcommon.utils.UserInfoCache
import com.ydl.ydlcommon.utils.log.AliYunLogConfig
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper
import com.ydl.ydlcommon.utils.remind.HttpErrorUtils.Companion.handleError
import com.ydl.ydlcommon.view.dialog.CommonDialog
import com.yidianling.common.tools.LogUtil
......@@ -194,6 +196,7 @@ object IMChatUtil {
isFromQingShu: Int,
context: AppCompatActivity
) {
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "startChatSession 开启聊天会话")
val p2PCustomActionHandlerImpl = P2PCustomActionHandlerImpl(toUid, expertInfo)
p2PCustomActionHandlerImpl.isFromQingShu = isFromQingShu
SessionHelper.startP2PSession(
......@@ -278,7 +281,7 @@ object IMChatUtil {
} else {
upLoadLog("consult/get-expert", resp.code, resp.msg)
if (resp.code == ImConstants.HTTP_CODE_UNLOGIN) {
ImIn.loginByOneKeyLogin(context,true)
ImIn.loginByOneKeyLogin(context, true)
ToastUtil.toastShort(resp.msg)
} else if (resp.code == ImConstants.SILENCED_CODE) { //禁言
showSilencedDialog(context, resp.data.tips, resp.data.url)
......@@ -326,7 +329,7 @@ object IMChatUtil {
} else {
upLoadLog("consult/get-expert", resp.code, resp.msg)
if (resp.code == ImConstants.HTTP_CODE_UNLOGIN) {
ImIn.loginByOneKeyLogin(context,true)
ImIn.loginByOneKeyLogin(context, true)
ToastUtil.toastShort(resp.msg)
} else if (resp.code == ImConstants.SILENCED_CODE) { //禁言
showSilencedDialog(context, resp.data.tips, resp.data.url)
......@@ -367,7 +370,9 @@ object IMChatUtil {
tb.setmMinTitleVisiable(View.GONE)
} else {
//对方是用户,自己是助理
if (actionHandler.userType == USER_TYPE_USER && ModularServiceManager.provide(IUserService::class.java)
if (actionHandler.userType == USER_TYPE_USER && ModularServiceManager.provide(
IUserService::class.java
)
.getUserInfo()?.user_type == USER_TYPE_ASSISTANT
) {
tb.setTitleTextRightIcon(R.drawable.user_info_icon) {
......
......@@ -5,6 +5,8 @@ import android.content.Context;
import com.netease.nimlib.sdk.msg.attachment.MsgAttachment;
import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;
import com.netease.nimlib.sdk.msg.model.IMMessage;
import com.ydl.ydlcommon.utils.log.AliYunLogConfig;
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper;
import com.yidianling.nimbase.api.BaseNimUIKit;
import com.yidianling.nimbase.api.model.session.SessionCustomization;
import com.yidianling.uikit.business.contact.selector.activity.ContactSelectActivity;
......@@ -30,6 +32,7 @@ public class NimUIKit extends BaseNimUIKit {
*/
public static void startYDLChatting(Context context, String id, SessionTypeEnum sessionType, SessionCustomization
customization, IMMessage anchor, IP2PCustomActionHandler handler) {
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "startYDLChatting 打开壹点灵定制聊天窗口,开始聊天");
NimUIKitImpl.startChatting(context, id, sessionType, customization, anchor, handler);
}
......
......@@ -4,7 +4,6 @@ import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.WindowManager;
import com.alibaba.fastjson.JSON;
......@@ -17,6 +16,8 @@ import com.netease.nimlib.sdk.msg.MsgServiceObserve;
import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;
import com.netease.nimlib.sdk.msg.model.CustomNotification;
import com.netease.nimlib.sdk.msg.model.IMMessage;
import com.ydl.ydlcommon.utils.log.AliYunLogConfig;
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper;
import com.yidianling.common.tools.ToastUtil;
import com.yidianling.im.R;
import com.yidianling.im.api.bean.IMRegisterObserverCustomNotificationCallBack;
......@@ -82,9 +83,8 @@ public class YDLP2PMessageActivity extends YDLBaseMessageActivity {
/**
* 切换到客服界面
*
*/
public static void startChangeDoctor(Context context, String contactId, SessionCustomization customization, IMMessage anchor, IP2PCustomActionHandler l){
public static void startChangeDoctor(Context context, String contactId, SessionCustomization customization, IMMessage anchor, IP2PCustomActionHandler l) {
Intent intent = new Intent();
intent.putExtra(Extras.EXTRA_ACCOUNT, contactId);
intent.putExtra(Extras.EXTRA_CUSTOMIZATION, customization);
......@@ -106,7 +106,7 @@ public class YDLP2PMessageActivity extends YDLBaseMessageActivity {
// 如果isChangeDoctor为true表示切换客服
if (isChangeDoctor) {
messageFragment = (YDLMessageFragment) switchContent(switchServiceFragment(intent));
isChangeDoctor=false;
isChangeDoctor = false;
}
}
......@@ -137,7 +137,7 @@ public class YDLP2PMessageActivity extends YDLBaseMessageActivity {
isChangeDoctor = true;
String serviceUid = String.valueOf(serviceBean.getData().getToUid());
tb.setTitle(serviceBean.getData().getName());
YDLP2PMessageActivity.startChangeDoctor(YDLP2PMessageActivity.this, serviceUid, SessionHelper.getP2pCustomization(-1), null,new P2PCustomActionHandlerImpl(serviceUid, serviceBean.getData().getName(), serviceUid));
YDLP2PMessageActivity.startChangeDoctor(YDLP2PMessageActivity.this, serviceUid, SessionHelper.getP2pCustomization(-1), null, new P2PCustomActionHandlerImpl(serviceUid, serviceBean.getData().getName(), serviceUid));
}
}
});
......@@ -145,13 +145,13 @@ public class YDLP2PMessageActivity extends YDLBaseMessageActivity {
@Override
protected void onDestroy() {
if (ActionHandlerStorage.getL(sessionId) != null)
if (ActionHandlerStorage.getL(sessionId) != null) {
ActionHandlerStorage.getL(sessionId).clear(sessionId);
}
registerObservers(false);
super.onDestroy();
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN,"退出聊天页面");
}
@Override
......
......@@ -49,6 +49,8 @@ import com.ydl.ydlcommon.utils.LogUtil;
import com.ydl.ydlcommon.utils.SharedPreferencesEditor;
import com.ydl.ydlcommon.utils.YdlBuryPointUtil;
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils;
import com.ydl.ydlcommon.utils.log.AliYunLogConfig;
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper;
import com.ydl.ydlcommon.utils.log.LogHelper;
import com.ydl.ydlcommon.view.CircleImageView;
import com.ydl.ydlcommon.view.dialog.CommonDialog;
......@@ -754,15 +756,21 @@ public class YDLMessageFragment extends TFragment implements ModuleProxy {
}
// 帮助人数
help_num = String.valueOf(ActionHandlerStorage.getL(sessionId).getInfo().doctorBriefInfoOrderNum);
if (TextUtils.isEmpty(help_num)) help_num = "0";
if (TextUtils.isEmpty(help_num)) {
help_num = "0";
}
help_num_tv.setText(help_num);
// 服务时长
server_num = String.valueOf((int) Math.ceil((double) ActionHandlerStorage.getL(sessionId).getInfo().doctorBriefInfoHelpLong / 60.0));
if (TextUtils.isEmpty(server_num)) server_num = "0";
if (TextUtils.isEmpty(server_num)) {
server_num = "0";
}
server_num_tv.setText(server_num);
// 好评率
good_num = ActionHandlerStorage.getL(sessionId).getInfo().doctorBriefInfoFeedbackRateForShow;
if (TextUtils.isEmpty(good_num)) good_num = "0.0";
if (TextUtils.isEmpty(good_num)) {
good_num = "0.0";
}
good_num_tv.setText(good_num);
try {
......@@ -1176,13 +1184,14 @@ public class YDLMessageFragment extends TFragment implements ModuleProxy {
}
});
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "sendMessage 该消息发送成功 sessionId:" + sessionId);
} else {
// 替换成tip
message = MessageBuilder.createTipMessage(message.getSessionId(), message.getSessionType());
message.setContent("该消息无法发送");
message.setStatus(MsgStatusEnum.success);
NIMClient.getService(MsgService.class).saveMessageToLocal(message, false);
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "sendMessage 该消息无法发送 sessionId:" + sessionId);
}
messageListPanel.onMsgSend(message);
......@@ -1210,9 +1219,12 @@ public class YDLMessageFragment extends TFragment implements ModuleProxy {
LogHelper.Companion.getInstance().writeLogSync("发送消息失败:已被对方拉黑");
ToastUtil.toastLong(getActivity(), "您已被对方拉黑!");
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "sendFailWithBlackList 发送消息失败:已被对方拉黑 sessionId:" + sessionId);
} else if (code == 404) {
LogHelper.Companion.getInstance().writeLogSync("发送消息失败:对象不见了");
ToastUtil.toastLong(getActivity(), "对象不见了!");
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.YUNXIN, "sendFailWithBlackList 发送消息失败:对象不见了 404 sessionId:" + sessionId);
} else {
//上传至后台
if (!TextUtils.isEmpty(sessionId) && ActionHandlerStorage.getL(sessionId) != null) {
......
......@@ -6,6 +6,8 @@ import com.tencent.bugly.crashreport.CrashReport
import com.ydl.ydlcommon.data.http.RxUtils
import com.ydl.ydlcommon.utils.ActivityManager
import com.ydl.ydlcommon.utils.BuryPointUtils
import com.ydl.ydlcommon.utils.log.AliYunLogConfig
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper
import com.yidianling.common.tools.LogUtil
import com.yidianling.im.api.bean.IMLoginInfo
import com.yidianling.im.api.bean.IMRequestCallback
......@@ -57,16 +59,22 @@ object LoginUtils {
val info = IMLoginInfo(userInfo?.uid ?: "", userInfo?.hxpwd ?: "")
val callback = object : IMRequestCallback<IMLoginInfo> {
override fun onSuccess(t: IMLoginInfo?) {
LogUtil.e("IM登录成功:"+"info.account:"+info.account+"info.passWord"+info.passWord)
LogUtil.e("IM登录成功:" + "info.account:" + info.account + "info.passWord" + info.passWord)
UserIn.imSetAccount(userInfo?.uid ?: "")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.LOGIN, "IM登录成功")
}
override fun onFailed(i: Int) {
LogUtil.e("IM登录失败:$i"+"info.account:"+info.account+"info.passWord"+info.passWord)
LogUtil.e("IM登录失败:$i" + "info.account:" + info.account + "info.passWord" + info.passWord)
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.LOGIN, "IM登录失败")
}
override fun onException(throwable: Throwable?) {
LogUtil.e("IM登录onException:${throwable?.message}")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.LOGIN, "IM登录onException:${throwable?.message}")
}
}
......@@ -79,17 +87,18 @@ object LoginUtils {
fun logout() {
EventBus.getDefault().post(UserLogoutEvent())
UserHttpImpl.getInstance().logout(Logout())
.compose(RxUtils.resultData())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
logoutClearLocal()
}, {
logoutClearLocal()
})
.compose(RxUtils.resultData())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
logoutClearLocal()
}, {
logoutClearLocal()
})
}
@JvmStatic
fun logoutClearLocal() {
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.LOGIN, "退出登录")
UserIn.imLogout()
UserIn.closePlayer()
UserIn.clearImData()
......@@ -105,7 +114,7 @@ object LoginUtils {
ActivityManager.finishAll()
if (StatusUtils.isFirstLogin && StatusUtils.isFirstStartApp) {
activity.startActivity(Intent(activity, CollectSexAndBirthActivity::class.java))
}else {
} else {
UserIn.mainIntent(activity)
}
} else {//需要判断stack中是否有MainActivity
......
......@@ -14,6 +14,8 @@ import com.ydl.ydlcommon.router.YdlCommonOut
import com.ydl.ydlcommon.utils.ActivityManager
import com.ydl.ydlcommon.utils.UserInfoCache
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.ydl.ydlcommon.utils.log.AliYunLogConfig
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper
import com.ydl.ydlcommon.utils.remind.ToastHelper
import com.yidianling.im.api.bean.IMLoginInfo
import com.yidianling.im.api.bean.IMRequestCallback
......@@ -118,13 +120,13 @@ class SmsLoginActivity : BaseActivity() {
})*/
vCodeSub = userHttp.code(CodeParam(code, phoneNum, UserConstants.SIGNIN_ACTION))
.compose(RxUtils.resultData())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(Consumer {}, object : ThrowableConsumer() {
override fun accept(msg: String) {
ToastHelper.show(msg)
}
})
.compose(RxUtils.resultData())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(Consumer {}, object : ThrowableConsumer() {
override fun accept(msg: String) {
ToastHelper.show(msg)
}
})
}
private var loginSub: Disposable? = null
......@@ -136,37 +138,49 @@ class SmsLoginActivity : BaseActivity() {
return
}
ActionCountUtils.count(UserBIConstants.POSITION_LOGIN_CLICK, UserBIConstants.ACTION_TYPE_CODE_LOGIN)
ActionCountUtils.count(
UserBIConstants.POSITION_LOGIN_CLICK,
UserBIConstants.ACTION_TYPE_CODE_LOGIN
)
Log.e("短信验证码:", code + " - " + phoneNum + " - " + et_code.text.toString());
loginSub = userHttp.login(LoginParam(code, phoneNum, null, 2, et_code.text.toString()))
.compose(RxUtils.resultData())
.doOnNext { LoginUtils.saveData(it) }
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe { showProgressDialog("") }
.doAfterTerminate { dismissProgressDialog() }
.subscribe(Consumer {
LoginUtils.onLogin(it)
//关闭手势解锁页面与指纹解锁页面
finishFinger()
if (it.firstLogin == 1) {
StatusUtils.isFirstLogin = true
baiduActionBury()
}else {
ActionCountUtils.countUid(UserBIConstants.POSITION_LOGIN_SUCCESS_CLICK,it.uid!!,UserBIConstants.ACTION_TYPE_CODE_LOGIN)
}
.compose(RxUtils.resultData())
.doOnNext { LoginUtils.saveData(it) }
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe { showProgressDialog("") }
.doAfterTerminate { dismissProgressDialog() }
.subscribe(Consumer {
LoginUtils.onLogin(it)
//关闭手势解锁页面与指纹解锁页面
finishFinger()
if (it.firstLogin == 1) {
StatusUtils.isFirstLogin = true
baiduActionBury()
} else {
ActionCountUtils.countUid(
UserBIConstants.POSITION_LOGIN_SUCCESS_CLICK,
it.uid!!,
UserBIConstants.ACTION_TYPE_CODE_LOGIN
)
}
// ActivityManager.finishActivity(LoginActivity::class.java)
// if (ActivityManager.getActivitySize() <= 1) {
// UserIn.mainIntent(this)
// }
// finish()
LoginUtils.loginSuccessOperate(this)
}, object : ThrowableConsumer() {
override fun accept(msg: String) {
dismissProgressDialog()
YdlCommonOut.showToast(msg)
}
})
LoginUtils.loginSuccessOperate(this)
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.LOGIN, "短信验证码 成功")
}, object : ThrowableConsumer() {
override fun accept(msg: String) {
dismissProgressDialog()
YdlCommonOut.showToast(msg)
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.LOGIN, "短信验证码 失败 msg:$msg ")
}
})
}
/**
......@@ -224,9 +238,11 @@ class SmsLoginActivity : BaseActivity() {
try {
if (userInfo != null) {
UserIn.imSetAccount(userInfo.uid.toString())
UserInfoCache.getInstance().saveYDLUser(userInfo.uid.toString(),
userInfo.nick_name,
userInfo.head)
UserInfoCache.getInstance().saveYDLUser(
userInfo.uid.toString(),
userInfo.nick_name,
userInfo.head
)
}
} catch (e: Exception) {
e.printStackTrace()
......@@ -237,21 +253,21 @@ class SmsLoginActivity : BaseActivity() {
private fun initTimer() {
timerSub = Observable.interval(0, 1, TimeUnit.SECONDS)
.subscribeOn(Schedulers.computation())
.take(60)
.map { String.format("重发(%d)", 59 - it) }
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe {
tv_get_code.isEnabled = false
tv_get_code.setTextColor(-0x525253)
}
.subscribe({
tv_get_code.text = it
}, {}, {
tv_get_code.text = "重新发送"
tv_get_code.isEnabled = true
tv_get_code.setTextColor(-0xb62d7f)
})
.subscribeOn(Schedulers.computation())
.take(60)
.map { String.format("重发(%d)", 59 - it) }
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe {
tv_get_code.isEnabled = false
tv_get_code.setTextColor(-0x525253)
}
.subscribe({
tv_get_code.text = it
}, {}, {
tv_get_code.text = "重新发送"
tv_get_code.isEnabled = true
tv_get_code.setTextColor(-0xb62d7f)
})
}
......
......@@ -7,7 +7,6 @@ import android.content.Context
import android.content.pm.ActivityInfo
import android.graphics.Color
import android.text.TextUtils
import android.util.Log
import android.util.TypedValue
import android.view.Gravity
import android.view.View
......@@ -17,17 +16,19 @@ import android.widget.TextView
import com.fm.openinstall.OpenInstall
import com.fm.openinstall.listener.AppInstallAdapter
import com.fm.openinstall.model.AppData
import com.fm.openinstall.model.Error
import com.meituan.android.walle.WalleChannelReader
import com.mobile.auth.gatewayauth.*
import com.mobile.auth.gatewayauth.model.TokenRet
import com.tbruyelle.rxpermissions2.RxPermissions
import com.ydl.webview.NewH5Activity
import com.ydl.ydlcommon.base.BaseActivity
import com.ydl.ydlcommon.base.BaseApp
import com.ydl.ydlcommon.utils.JPushUtils
import com.ydl.ydlcommon.utils.LogUtil
import com.ydl.ydlcommon.utils.YDLCacheUtils
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.ydl.ydlcommon.utils.log.AliYunLogConfig
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper
import com.ydl.ydlcommon.utils.log.LogHelper
import com.yidianling.common.tools.RxAppTool
import com.yidianling.common.tools.RxDeviceTool
......@@ -430,6 +431,8 @@ object OneKeyLoginHelp {
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
if (it.code == 200) {
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.LOGIN, "一键登录成功")
ToastUtil.toastShort("登录成功")
saveUserData(it.data)
if (it.data.firstLogin == 1) {//第一次登录:是注册
......@@ -463,10 +466,18 @@ object OneKeyLoginHelp {
LoginUtils.loginSuccessOperate(mActivity)
}
} else {
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.LOGIN,
"一键登录失败 msg:${it.msg}"
)
ToastUtil.toastShort(it.msg)
mPhoneNumberAuthHelper?.hideLoginLoading()
}
}, {
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.LOGIN,
"一键登录Error msg:${it.message}"
)
ToastUtil.toastShort(it.message)
mPhoneNumberAuthHelper?.hideLoginLoading()
})
......@@ -580,23 +591,29 @@ object OneKeyLoginHelp {
* */
@SuppressLint("CheckResult")
fun startLogin(context: Activity, isOpenDialog: Boolean) {
RxPermissions(context)
.request(Manifest.permission.READ_PHONE_STATE)
.subscribe { hasPermission: Boolean? ->
if (hasPermission == true && mIsOpenOneKeyLogin) {
getLoginToken(isOpenDialog)
} else {
// 一键登录页面打开成功
if (mOpenPageIsSuccess) {
RegisterAndLoginActivity.start(context)
try {
RxPermissions(context)
.request(Manifest.permission.READ_PHONE_STATE)
.subscribe { hasPermission: Boolean? ->
if (hasPermission == true && mIsOpenOneKeyLogin) {
getLoginToken(isOpenDialog)
} else {
RegisterAndLoginActivity.start(
context,
isFromOneKey = false,
isFromGuide = true
)
// 一键登录页面打开成功
if (mOpenPageIsSuccess) {
RegisterAndLoginActivity.start(context)
} else {
RegisterAndLoginActivity.start(
context,
isFromOneKey = false,
isFromGuide = true
)
}
}
}
}
} catch (e: Exception) {
RegisterAndLoginActivity.start(context)
e.printStackTrace()
}
}
}
......@@ -612,6 +612,7 @@ class RegisterAndLoginActivity : BaseMvpActivity<ILoginContract.View, ILoginCont
runOnUiThread {
showLoading(false)
}
if (chcekPhoneResponeBean != null && chcekPhoneResponeBean?.hasPwd == 1) {//用户码有设置密码:跳转到密登录
InputPassWordActivity.start(
this,
......
......@@ -7,6 +7,8 @@ import com.ydl.ydlcommon.router.YdlCommonOut
import com.ydl.ydlcommon.utils.StringUtils
import com.ydl.ydlcommon.utils.YDLCacheUtils
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.ydl.ydlcommon.utils.log.AliYunLogConfig
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper
import com.ydl.ydlcommon.utils.log.LogHelper
import com.yidianling.common.tools.ToastUtil
import com.yidianling.user.LoginUtils
......@@ -28,7 +30,9 @@ import java.math.BigDecimal
* @Company 壹点灵
* @date 2018/12/2
*/
class InputPassWordPresenterImpl : BasePresenter<IInputPassWordContract.View, IInputPassWordContract.Model>(), IInputPassWordContract.Presenter {
class InputPassWordPresenterImpl :
BasePresenter<IInputPassWordContract.View, IInputPassWordContract.Model>(),
IInputPassWordContract.Presenter {
override fun createModel(): IInputPassWordContract.Model {
return InputPassWordModelImpl()
......@@ -37,38 +41,51 @@ class InputPassWordPresenterImpl : BasePresenter<IInputPassWordContract.View, II
/**
* 重新设置密码
*/
override fun resetPwd(newPassword: String, phone: String, msgCode: String, phoneCountryCode: String) {
override fun resetPwd(
newPassword: String,
phone: String,
msgCode: String,
phoneCountryCode: String
) {
ActionCountUtils.count(UserBIConstants.POSITION_LOGIN_CLICK, UserBIConstants.ACTION_TYPE_RESET_PWD)
ActionCountUtils.count(
UserBIConstants.POSITION_LOGIN_CLICK,
UserBIConstants.ACTION_TYPE_RESET_PWD
)
var param = PhoneResetPwdParam(StringUtils.md5(newPassword), phoneCountryCode, msgCode, phone)
var param =
PhoneResetPwdParam(StringUtils.md5(newPassword), phoneCountryCode, msgCode, phone)
mModel.resetPwd(param)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe { mView.showLoading(true) }
.doAfterTerminate { mView.showLoading(false) }
.subscribe({
if (it?.data == null) {
ToastUtil.toastShort(it.msg)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe { mView.showLoading(true) }
.doAfterTerminate { mView.showLoading(false) }
.subscribe({
if (it?.data == null) {
ToastUtil.toastShort(it.msg)
} else {
if (it.data.userInfo?.user_type == 2) {
mView.showNormalDialog()
} else {
if (it.data.userInfo?.user_type == 2) {
mView.showNormalDialog()
ToastUtil.toastShort("修改密码成功")
saveUserData(it.data)
ActionCountUtils.countUid(
UserBIConstants.POSITION_LOGIN_SUCCESS_CLICK,
it.data.uid!!,
UserBIConstants.ACTION_TYPE_RESET_PWD
)
if (it.data.firstLogin == 1) {//第一次登录:是注册
StatusUtils.isFirstLogin = true
// 重设密码登录已经不可能是首次登录,所以不进行百度埋点
//view.baiduActionBury()
} else {
ToastUtil.toastShort("修改密码成功")
saveUserData(it.data)
ActionCountUtils.countUid(UserBIConstants.POSITION_LOGIN_SUCCESS_CLICK,it.data.uid!!,UserBIConstants.ACTION_TYPE_RESET_PWD)
if (it.data.firstLogin == 1) {//第一次登录:是注册
StatusUtils.isFirstLogin = true
// 重设密码登录已经不可能是首次登录,所以不进行百度埋点
//view.baiduActionBury()
} else {
}
mView.closeActivity()
}
mView.closeActivity()
}
}, {
YdlCommonOut.showToast(it.message!!)
})
}
}, {
YdlCommonOut.showToast(it.message!!)
})
}
......@@ -76,36 +93,54 @@ class InputPassWordPresenterImpl : BasePresenter<IInputPassWordContract.View, II
* 手机号密码登录
*/
@SuppressLint("CheckResult")
override fun userLoginByPassword(inputPassword: String, phone: String, phoneCountryCode: String) {
ActionCountUtils.count( UserBIConstants.POSITION_LOGIN_CLICK,UserBIConstants.ACTION_TYPE_PWD_LOGIN)
override fun userLoginByPassword(
inputPassword: String,
phone: String,
phoneCountryCode: String
) {
ActionCountUtils.count(
UserBIConstants.POSITION_LOGIN_CLICK,
UserBIConstants.ACTION_TYPE_PWD_LOGIN
)
var param = PhoneLoginPwdParam(StringUtils.md5(inputPassword), phoneCountryCode, phone)
mModel.userLoginByPassword(param)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe { mView.showLoading(true) }
.doAfterTerminate { mView.showLoading(false) }
.subscribe({
if (it?.data == null) {
ToastUtil.toastShort(it.msg)
mView.startAnim()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe { mView.showLoading(true) }
.doAfterTerminate { mView.showLoading(false) }
.subscribe({
if (it?.data == null) {
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.LOGIN, "手机号密码 登录失败 msg: ${it.msg}")
ToastUtil.toastShort(it.msg)
mView.startAnim()
} else {
if (it.data.userInfo?.user_type == 2) {
mView.showNormalDialog()
} else {
if (it.data.userInfo?.user_type == 2) {
mView.showNormalDialog()
saveUserData(it.data)
if (it.data.firstLogin == 1) {//第一次登录:是注册
StatusUtils.isFirstLogin = true
mView.baiduActionBury()
} else {
saveUserData(it.data)
if (it.data.firstLogin == 1) {//第一次登录:是注册
StatusUtils.isFirstLogin = true
mView.baiduActionBury()
} else {
ActionCountUtils.countUid(UserBIConstants.POSITION_LOGIN_SUCCESS_CLICK,it.data.uid!!,UserBIConstants.ACTION_TYPE_PWD_LOGIN)
}
mView.closeActivity()
ActionCountUtils.countUid(
UserBIConstants.POSITION_LOGIN_SUCCESS_CLICK,
it.data.uid!!,
UserBIConstants.ACTION_TYPE_PWD_LOGIN
)
}
mView.closeActivity()
}
}, {
YdlCommonOut.showToast(it.message!!)
})
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.LOGIN, "手机号密码 登录成功")
}
}, {
YdlCommonOut.showToast(it.message!!)
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.LOGIN, "手机号密码 Error msg: ${it.message}")
})
}
/**
......
......@@ -9,6 +9,8 @@ import com.ydl.ydlcommon.mvp.base.BasePresenter
import com.ydl.ydlcommon.router.YdlCommonOut
import com.ydl.ydlcommon.utils.YDLCacheUtils
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.ydl.ydlcommon.utils.log.AliYunLogConfig
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper
import com.ydl.ydlcommon.utils.log.LogHelper
import com.yidianling.common.tools.ToastUtil
import com.yidianling.user.LoginUtils
......@@ -33,24 +35,25 @@ import java.math.BigDecimal
* @Company 壹点灵
* @date 2018/11/29
*/
class LoginPresenterImpl(view: ILoginContract.View) : BasePresenter<ILoginContract.View, ILoginContract.Model>(), ILoginContract.Presenter {
class LoginPresenterImpl(view: ILoginContract.View) :
BasePresenter<ILoginContract.View, ILoginContract.Model>(), ILoginContract.Presenter {
@SuppressLint("CheckResult")
override fun bindPhone(param: BindPhoneJavaParam) {
mModel.bindPhone(param)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe { mView.showLoading(true) }
.doAfterTerminate { mView.showLoading(false) }
.subscribe({
if (it.code == 200) {
ToastUtil.toastShort("手机号绑定成功")
mView.bindSuccess()
} else {
ToastUtil.toastShort(it.msg)
}
}, {
ToastUtil.toastShort(it.message)
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe { mView.showLoading(true) }
.doAfterTerminate { mView.showLoading(false) }
.subscribe({
if (it.code == 200) {
ToastUtil.toastShort("手机号绑定成功")
mView.bindSuccess()
} else {
ToastUtil.toastShort(it.msg)
}
}, {
ToastUtil.toastShort(it.message)
})
}
......@@ -59,33 +62,51 @@ class LoginPresenterImpl(view: ILoginContract.View) : BasePresenter<ILoginContra
*/
@SuppressLint("CheckResult")
override fun autoLogin(bean: PhoneLoginAutoParam) {
ActionCountUtils.count( UserBIConstants.POSITION_LOGIN_CLICK,UserBIConstants.ACTION_TYPE_DIRECT_LOGIN)
ActionCountUtils.count(
UserBIConstants.POSITION_LOGIN_CLICK,
UserBIConstants.ACTION_TYPE_DIRECT_LOGIN
)
mModel.autoLogin(bean)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe { mView.showLoading(true) }
.doAfterTerminate { mView.showLoading(false) }
.subscribe({
if (it.code == 200) {
//绑定手机号
saveUserData(it.data)
if (it.data.firstLogin == 1) {//第一次登录:是注册
StatusUtils.isFirstLogin = true
mView.baiduActionBury(it.data.uid, UserBIConstants.POSITION_ALIYUN_REGISTER_CLICK)
} else {
ActionCountUtils.countUid(UserBIConstants.POSITION_LOGIN_SUCCESS_CLICK,it.data.uid!!,UserBIConstants.ACTION_TYPE_DIRECT_LOGIN)
}
mView.autoLoginSuccess()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe { mView.showLoading(true) }
.doAfterTerminate { mView.showLoading(false) }
.subscribe({
if (it.code == 200) {
//绑定手机号
saveUserData(it.data)
if (it.data.firstLogin == 1) {//第一次登录:是注册
StatusUtils.isFirstLogin = true
mView.baiduActionBury(
it.data.uid,
UserBIConstants.POSITION_ALIYUN_REGISTER_CLICK
)
} else {
// ToastUtil.toastShort(it.msg)
mView.aliAuthFailed()
ActionCountUtils.countUid(
UserBIConstants.POSITION_LOGIN_SUCCESS_CLICK,
it.data.uid!!,
UserBIConstants.ACTION_TYPE_DIRECT_LOGIN
)
}
}, {
//走验证码、密码登录
mView.autoLoginSuccess()
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.LOGIN, "通过一键认证服务登录成功")
} else {
// ToastUtil.toastShort(it.msg)
mView.aliAuthFailed()
})
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.LOGIN, "通过一键认证服务登陆 失败 msg: ${it.msg}")
}
}, {
//走验证码、密码登录
mView.aliAuthFailed()
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.LOGIN, "通过一键认证服务登陆 Error msg: ${it.message}")
})
}
......@@ -117,15 +138,15 @@ class LoginPresenterImpl(view: ILoginContract.View) : BasePresenter<ILoginContra
@SuppressLint("CheckResult")
override fun checkAliAuth(param: CheckAliAuthParam) {
mModel.checkAliAuth(param)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
if (it?.data == null) {
mView.aliAuthFailed()
}
}, {
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
if (it?.data == null) {
mView.aliAuthFailed()
})
}
}, {
mView.aliAuthFailed()
})
}
/**
......@@ -136,35 +157,35 @@ class LoginPresenterImpl(view: ILoginContract.View) : BasePresenter<ILoginContra
override fun checkPhoneStatus(phone: String, countryCode: String, isBind: Boolean) {
mView.showLoading(true)
mModel.checkPhoneStatus(phone, countryCode)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
if (it?.data == null || it?.code != 200) {
ToastUtil.toastShort(it.msg)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
if (it?.data == null || it?.code != 200) {
ToastUtil.toastShort(it.msg)
mView.showLoading(false)
return@subscribe
}
if (isBind) {//第三方登录成功后的绑定逻辑
if (it.data.isRegistered == 1) {
mView.showLoading(false)
return@subscribe
}
if (isBind) {//第三方登录成功后的绑定逻辑
if (it.data.isRegistered == 1) {
mView.showLoading(false)
mView.showHasBindedDialog()
} else {
mView.checkPhoneStatusSuccess(it.data, phone)
}
} else {//登录逻辑
if (it.data.isDoctor == 1) {//是专家账号
mView.showLoading(false)
mView.showNormalDialog()
} else {
mView.checkPhoneStatusSuccess(it.data, phone)
}
mView.showHasBindedDialog()
} else {
mView.checkPhoneStatusSuccess(it.data, phone)
}
}, {
mView.showLoading(false)
if (null != it && !TextUtils.isEmpty(it.message)){
YdlCommonOut.showToast(it.message!!)
} else {//登录逻辑
if (it.data.isDoctor == 1) {//是专家账号
mView.showLoading(false)
mView.showNormalDialog()
} else {
mView.checkPhoneStatusSuccess(it.data, phone)
}
})
}
}, {
mView.showLoading(false)
if (null != it && !TextUtils.isEmpty(it.message)) {
YdlCommonOut.showToast(it.message!!)
}
})
}
/**
......@@ -173,63 +194,85 @@ class LoginPresenterImpl(view: ILoginContract.View) : BasePresenter<ILoginContra
@SuppressLint("CheckResult")
override fun loginByThird(activity: Activity, media: SHARE_MEDIA) {
val sign1 = if (media == SHARE_MEDIA.QQ) UserBIConstants.ACTION_TYPE_QQ_THIRD_LOGIN else UserBIConstants.ACTION_TYPE_WX_THIRD_LOGIN
val sign1 =
if (media == SHARE_MEDIA.QQ) UserBIConstants.ACTION_TYPE_QQ_THIRD_LOGIN else UserBIConstants.ACTION_TYPE_WX_THIRD_LOGIN
ActionCountUtils.count(UserBIConstants.POSITION_LOGIN_CLICK, sign1)
UserHttpImpl.getInstance()
.umLogin(activity, media)
.doOnSubscribe { mView.showProgressView() }
.doAfterTerminate {
mView.dismissProgressView()
.umLogin(activity, media)
.doOnSubscribe { mView.showProgressView() }
.doAfterTerminate {
mView.dismissProgressView()
}
.observeOn(Schedulers.io())
.flatMap { thirdLoginParam ->
UserHttpImpl.getInstance().thirdPartJavaLogin(thirdLoginParam)
}
.doOnNext { LoginUtils.saveData(it.data) }
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
mView.dismissProgressView()
if (it?.data == null) {
ToastUtil.toastShort(it.msg)
return@subscribe
}
.observeOn(Schedulers.io())
.flatMap { thirdLoginParam -> UserHttpImpl.getInstance().thirdPartJavaLogin(thirdLoginParam) }
.doOnNext { LoginUtils.saveData(it.data) }
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
mView.dismissProgressView()
if (it?.data == null) {
ToastUtil.toastShort(it.msg)
return@subscribe
}
if (it.data.firstLogin == 1) {//第一次登录:是注册
StatusUtils.isFirstLogin = true
if (media == SHARE_MEDIA.QQ) {
mView.baiduActionBury(it.data.uid,UserBIConstants.POSITION_QQ_REGISTER_CLICK)
ActionCountUtils.baiduCount(
it.data.uid,
UserBIConstants.APP_REGISTER_PAGE,
UserBIConstants.POSITION_QQ_REGISTER_CLICK,
"",
"",
25,
OneKeyLoginHelp.openInstallKey
)
}else{
mView.baiduActionBury(it.data.uid,UserBIConstants.POSITION_WX_REGISTER_CLICK)
ActionCountUtils.baiduCount(
it.data.uid,
UserBIConstants.APP_REGISTER_PAGE,
UserBIConstants.POSITION_WX_REGISTER_CLICK,
"",
"",
25,
OneKeyLoginHelp.openInstallKey
)
}
// 用户注册成功后调用
OpenInstall.reportRegister()
}else{
ActionCountUtils.countUid(UserBIConstants.POSITION_LOGIN_SUCCESS_CLICK, it.data.uid!!,sign1)
if (it.data.firstLogin == 1) {//第一次登录:是注册
StatusUtils.isFirstLogin = true
if (media == SHARE_MEDIA.QQ) {
mView.baiduActionBury(
it.data.uid,
UserBIConstants.POSITION_QQ_REGISTER_CLICK
)
ActionCountUtils.baiduCount(
it.data.uid,
UserBIConstants.APP_REGISTER_PAGE,
UserBIConstants.POSITION_QQ_REGISTER_CLICK,
"",
"",
25,
OneKeyLoginHelp.openInstallKey
)
} else {
mView.baiduActionBury(
it.data.uid,
UserBIConstants.POSITION_WX_REGISTER_CLICK
)
ActionCountUtils.baiduCount(
it.data.uid,
UserBIConstants.APP_REGISTER_PAGE,
UserBIConstants.POSITION_WX_REGISTER_CLICK,
"",
"",
25,
OneKeyLoginHelp.openInstallKey
)
}
// 用户注册成功后调用
OpenInstall.reportRegister()
} else {
ActionCountUtils.countUid(
UserBIConstants.POSITION_LOGIN_SUCCESS_CLICK,
it.data.uid!!,
sign1
)
}
LoginUtils.onLogin(it.data)
mView.thirdLoginSuccess(it.data.userInfo!!,if (media == SHARE_MEDIA.QQ) "qq" else "weixin")
LogHelper.getInstance().writeLogSync(media.getName() + "登录成功")
}, {
mView.dismissProgressView()
YdlCommonOut.showToast(it.message!!)
})
LoginUtils.onLogin(it.data)
mView.thirdLoginSuccess(
it.data.userInfo!!,
if (media == SHARE_MEDIA.QQ) "qq" else "weixin"
)
LogHelper.getInstance().writeLogSync(media.getName() + "登录成功")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.LOGIN, media.getName() + "登录成功")
}, {
mView.dismissProgressView()
YdlCommonOut.showToast(it.message!!)
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.LOGIN, media.getName() + "登录失败")
})
}
override fun createModel(): ILoginContract.Model {
......
......@@ -41,6 +41,7 @@ dependencies {
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
api rootProject.ext.dependencies["gson"]
api rootProject.ext.dependencies["aliyun"]
api rootProject.ext.dependencies["rxjava2"]
api(rootProject.ext.dependencies["rxandroid2"]) {
exclude module: 'rxjava'
......
package com.ydl.ydlnet.builder.api
import com.google.gson.Gson
import com.ydl.ydlnet.YDLHttpUtils.Companion.obtainApi
import com.ydl.ydlnet.builder.bean.ApiErrorActionBean
import com.ydl.ydlnet.builder.bean.BaseAPIResponse
import io.reactivex.Observable
import okhttp3.MediaType
import okhttp3.RequestBody
/**
* Created by Ykai on 2021/3/15.
*/
class ApiUtil{
companion object {
/**
* 行为数据埋点统计
*/
fun actionDataCount(actionDataParams: ApiErrorActionBean): Observable<BaseAPIResponse<String>> {
val body = RequestBody.create(
MediaType.parse("application/json; charset=utf-8"),
Gson().toJson(actionDataParams)
)
return obtainApi(NetApi::class.java).actionDataCount(body)
}
}
}
\ No newline at end of file
package com.ydl.ydlnet.builder.api
import com.ydl.ydlnet.builder.bean.BaseAPIResponse
import io.reactivex.Observable
import okhttp3.RequestBody
import retrofit2.http.Body
import retrofit2.http.Headers
import retrofit2.http.POST
/**
* Created by Ykai on 2021/3/15.
*/
interface NetApi {
/**
* 行为动作埋点统计
*/
@Headers("Domain-Name:JAVA_BASE_URL")
@POST("data/bigdata/maidian/writeMaiDianData")
fun actionDataCount(@Body body: RequestBody): Observable<BaseAPIResponse<String>>
}
\ No newline at end of file
......@@ -2,7 +2,6 @@ package com.ydl.ydlnet.builder.interceptor.log;
import android.support.annotation.Nullable;
import com.ydl.ydlnet.utils.ApiErrorCountUtils;
import com.ydl.ydlnet.utils.CharacterHandler;
import com.ydl.ydlnet.utils.NetLogUtils;
import com.ydl.ydlnet.utils.UrlEncoderUtils;
......@@ -23,13 +22,14 @@ import okhttp3.Response;
import okhttp3.ResponseBody;
import okio.Buffer;
import okio.BufferedSource;
/**
* Created by haorui on 2019-09-01 .
* Des: 解析框架中的网络请求和响应结果并打印
*/
public class RequestLogInterceptor implements Interceptor {
private DefaultFormatPrinter mPrinter = new DefaultFormatPrinter();
private boolean mIsDebug ;
private boolean mIsDebug;
private RequestHandler mRequestHandler;
public RequestLogInterceptor(boolean isDebug, RequestHandler requestHandler) {
......@@ -48,10 +48,10 @@ public class RequestLogInterceptor implements Interceptor {
mPrinter.printFileRequest(request);
}
if (mRequestHandler != null)
if (mRequestHandler != null) {
request = mRequestHandler.onHttpRequestBefore(chain, request);
long t1 =System.nanoTime() ;
}
long t1 = System.nanoTime();
Response originalResponse;
try {
originalResponse = chain.proceed(request);
......@@ -59,7 +59,7 @@ public class RequestLogInterceptor implements Interceptor {
NetLogUtils.debugInfo("Http Error: " + e);
throw e;
}
long t2 = System.nanoTime() ;
long t2 = System.nanoTime();
ResponseBody responseBody = originalResponse.body();
......@@ -67,12 +67,12 @@ public class RequestLogInterceptor implements Interceptor {
String bodyString = null;
if (responseBody != null && isParseable(responseBody.contentType())) {
bodyString = printResult(request, originalResponse);
if (mRequestHandler != null){
if (mRequestHandler != null) {
mRequestHandler.onHttpResultResponse(bodyString, chain, originalResponse);
}
}
if(mIsDebug) {
if (mIsDebug) {
final List<String> segmentList = request.url().encodedPathSegments();
final String header = originalResponse.headers().toString();
final int code = originalResponse.code();
......@@ -87,21 +87,6 @@ public class RequestLogInterceptor implements Interceptor {
mPrinter.printFileResponse(TimeUnit.NANOSECONDS.toMillis(t2 - t1),
isSuccessful, code, header, segmentList, message, url);
}
}else {
int code = originalResponse.code();
// 接口返回错误的情况下,埋点告诉服务器原因
if (code!=200){
String params = "";
Request rq = originalResponse.request();
if (rq.method().equals("GET")){
params = rq.url().query();
}else if (rq.method().equals("POST")){
params = parseParams(rq);
}
String message = originalResponse.message();
ApiErrorCountUtils.Companion.baiDuCount("pardId-ydl_user_error_business","error_log",params,message);
}
}
return originalResponse;
}
......@@ -109,8 +94,8 @@ public class RequestLogInterceptor implements Interceptor {
/**
* 打印响应结果
*
* @param request {@link Request}
* @param response {@link Response}
* @param request {@link Request}
* @param response {@link Response}
* @return 解析后的响应结果
* @throws IOException
*/
......
package com.ydl.ydlnet.utils
import android.annotation.SuppressLint
import android.util.Log
import com.ydl.ydlnet.builder.api.ApiUtil
import com.ydl.ydlnet.builder.bean.ApiErrorActionBean
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
/**
* Created by Ykai on 2021/3/15.
*/
class ApiErrorCountUtils {
companion object {
private const val TAG: String = "ActionCountUtils"
/**
* 接口返回错误埋点调用该方法
* @param partId pardId-ydl_user_error_business
* @param position error_log
* @param sign1 访问接口对应的参数
* @param sign2 接口返回的错误信息
*/
fun baiDuCount(
partId: String,
position: String,
sign1: String,
sign2: String
) {
val actionDataParams = ApiErrorActionBean.Builder()
actionDataParams.partId = partId
actionDataParams.position = position
actionDataParams.sign1 = sign1
actionDataParams.sign2 = sign2
//请求
request(actionDataParams.build())
}
/**
* 传入ActionDataParams参数,访问接口
*/
@SuppressLint("CheckResult")
private fun request(actionDataBean: ApiErrorActionBean) {
try {
ApiUtil.actionDataCount(actionDataBean)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
Log.i(TAG, it.data)
}) {
Log.i(TAG, it.toString())
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}
}
\ No newline at end of file
......@@ -14,6 +14,8 @@ import android.widget.LinearLayout
import com.alipay.sdk.app.PayTask
import com.tencent.mm.opensdk.modelpay.PayReq
import com.tencent.mm.opensdk.openapi.WXAPIFactory
import com.ydl.ydlcommon.utils.log.AliYunLogConfig
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper
import com.yidianling.common.tools.RxImageTool
import com.yidianling.ydl_pay.R
import com.yidianling.ydl_pay.common.bean.*
......@@ -42,6 +44,7 @@ class CommonPayDialog : Dialog {
private lateinit var activity: Activity
private var viewList = ArrayList<LinearLayout>()
private var couponListBean: AllCouponListBean? = null
//选中的优惠券
private var selectedCouponBean: CommonCouponBean? = null
private var payCouponView: PayCouponView? = null
......@@ -49,14 +52,17 @@ class CommonPayDialog : Dialog {
private var listener: OnPayResultListener? = null
private var payMoney: Float? = null
private var thankPayId: String? = null
//加载中弹窗
private var dialog: AlertDialog? = null
private var dialogContentView: View? = null
/**
* 支付方式
* 1024.微信支付 1025.支付宝支付
*/
private var payWay = 0
/**
* 支付的业务类型
* [TYPE_COURSE] 课程支付
......@@ -72,18 +78,22 @@ class CommonPayDialog : Dialog {
* 课程业务
*/
const val TYPE_COURSE = 1
/**
* 倾诉
*/
const val TYPE_CONFIDE = 2
/**
* 测评
*/
const val TYPE_TEST = 3
/**
* 咨询
*/
const val TYPE_CONSULTANT = 4
/**
* 动态打赏
*/
......@@ -157,11 +167,14 @@ class CommonPayDialog : Dialog {
PAY_WECHAT -> {
getWeiXinPayOrderId(
thankPayId!!,
if (useMoneyType == 2) 1 else 0,bean.merchantType
if (useMoneyType == 2) 1 else 0, bean.merchantType
)
}
else -> {
getAliPayOrderId(thankPayId!!, if (useMoneyType == 2) 1 else 0)
getAliPayOrderId(
thankPayId!!,
if (useMoneyType == 2) 1 else 0
)
}
}
} else {
......@@ -198,6 +211,7 @@ class CommonPayDialog : Dialog {
private fun getOrderInfo() {
if (!NetUtils.isConnected(activity)) {
ToastHelper.show(activity, activity.getString(R.string.net_error))
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "获取下单信息,无网络")
// progress.visibility = View.GONE
dismissProgressDialog()
return
......@@ -216,12 +230,18 @@ class CommonPayDialog : Dialog {
progress_layout.visibility = View.GONE
view_pager.visibility = View.VISIBLE
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "获取下单信息,成功")
updateDataOnView(it.data)
} else {
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.PAY, "获取下单信息data=null msg: ${it.msg}")
ToastHelper.show(activity, it.msg)
// progress.visibility = View.GONE
}
} else {
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.PAY, "获取下单信息code!=200 msg: ${it.msg}")
ToastHelper.show(activity, it.msg)
// progress.visibility = View.GONE
}
......@@ -229,6 +249,9 @@ class CommonPayDialog : Dialog {
dismissProgressDialog()
// progress.visibility = View.GONE
ToastHelper.show(activity, e.message!!)
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.PAY, "获取下单信息error e:${e.message}")
})
}
......@@ -413,6 +436,10 @@ class CommonPayDialog : Dialog {
}
bean.orderType = payBusinessType.toString()
bean.payType = useMoneyType.toString()
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.PAY,
"创建订单,支付方式payWay:$payWay---payMoney:$payMoney----useMoneyType:$useMoneyType"
)
showProgressDialog()
HttpUtils.createOrder(bean)
......@@ -422,6 +449,10 @@ class CommonPayDialog : Dialog {
if (it.code == 200) {
if (it.data != null) {
if (it.data.payStatus) {
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.PAY,
"创建订单,支付成功"
)
dismissProgressDialog()
ToastHelper.show(activity, "支付成功")
if (listener != null) {
......@@ -463,6 +494,10 @@ class CommonPayDialog : Dialog {
@SuppressLint("CheckResult")
private fun getAliPayOrderId(payId: String, isThreePay: Int) {
if (!NetUtils.isConnected(activity)) {
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.PAY,
"支付宝支付:无网络"
)
activity.runOnUiThread {
ToastHelper.show(activity, activity.getString(R.string.net_error))
}
......@@ -474,14 +509,26 @@ class CommonPayDialog : Dialog {
.subscribeOn(Schedulers.io())
.subscribe({
if (it.data != null) {
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.PAY,
"支付宝支付:无网络"
)
aliPay(it.data.aliSign)
} else {
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.PAY,
"支付宝支付:data = null msg: ${it.msg} "
)
activity.runOnUiThread {
ToastHelper.show(activity, it.msg)
}
dismissProgressDialog()
}
}, {
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.PAY,
"支付宝支付:error message: ${it.message} localizedMessage: ${it.localizedMessage}"
)
activity.runOnUiThread {
ToastHelper.show(activity, it.localizedMessage)
}
......@@ -494,6 +541,10 @@ class CommonPayDialog : Dialog {
val result = alipay.payV2(aliSign, true)
val payResult = PayResult(result)
if ("9000" == payResult.resultStatus) {
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.PAY,
"支付宝支付:支付成功"
)
activity.runOnUiThread {
ToastHelper.show(activity, "支付成功")
listener!!.onSuccesed()
......@@ -501,6 +552,10 @@ class CommonPayDialog : Dialog {
}
dismissProgressDialog()
} else {
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.PAY,
"支付宝支付:resultStatus != 9000 memo${payResult.memo} "
)
dismissProgressDialog()
activity.runOnUiThread {
ToastHelper.show(activity, payResult.memo)
......@@ -512,27 +567,39 @@ class CommonPayDialog : Dialog {
* 微信支付
*/
@SuppressLint("CheckResult")
private fun getWeiXinPayOrderId(payId: String, isThreePay: Int,merchantType:String) {
private fun getWeiXinPayOrderId(payId: String, isThreePay: Int, merchantType: String) {
if (!NetUtils.isConnected(activity)) {
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.PAY,
"微信支付,无网络"
)
activity.runOnUiThread {
ToastHelper.show(activity, activity.getString(R.string.net_error))
}
return
}
var bean = WxPayParam(payId, isThreePay,merchantType)
var bean = WxPayParam(payId, isThreePay, merchantType)
HttpUtils.wxPay(bean)
.subscribeOn(Schedulers.io())
.subscribe({
if (it.data != null) {
weixinPay(it.data.option)
} else {
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.PAY,
"微信支付data=null ${it.msg}"
)
activity.runOnUiThread {
ToastHelper.show(activity, it.msg)
}
dismissProgressDialog()
}
}, {
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.PAY,
"微信支付,异常:message:${it.message}----localizedMessage:${it.localizedMessage}"
)
activity.runOnUiThread {
ToastHelper.show(activity, it.localizedMessage)
}
......@@ -566,16 +633,28 @@ class CommonPayDialog : Dialog {
.subscribe({
dismissProgressDialog()
if (it.data != null && it.code == 0) {
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.PAY,
"余额支付:成功"
)
activity.runOnUiThread {
listener!!.onSuccesed()
dismiss()
}
} else {
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.PAY,
"余额支付:失败 msg:${it.msg}"
)
activity.runOnUiThread {
ToastHelper.show(activity, it.msg)
}
}
}, {
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.PAY,
"余额支付:ERROR message:${it.message} localizedMessage: ${it.localizedMessage}"
)
activity.runOnUiThread {
ToastHelper.show(activity, it.localizedMessage)
}
......@@ -587,10 +666,18 @@ class CommonPayDialog : Dialog {
fun onEvent(event: WeiXinPayStatusEvent) {
dismissProgressDialog()
if (event.success) {
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.PAY,
"微信支付成功"
)
ToastHelper.show(activity, "支付成功")
listener!!.onSuccesed()
dismiss()
} else {
AliYunRichLogsHelper.getInstance().sendRichLog(
AliYunLogConfig.PAY,
"微信支付:失败 msg:${event.msg}"
)
if (!TextUtils.isEmpty(event.msg)) {
ToastHelper.show(activity, event.msg!!)
}
......@@ -673,6 +760,7 @@ class CommonPayDialog : Dialog {
private lateinit var ffrom: String
internal lateinit var listener: OnPayResultListener
private var isTestEnvironment = true
/**
* 支付的业务类型[CommonPayDialog.payBusinessType]
*/
......
......@@ -18,6 +18,8 @@ import com.ydl.ydlcommon.data.PlatformDataManager
import com.ydl.ydlcommon.data.http.RxUtils
import com.ydl.ydlcommon.data.http.ThrowableConsumer
import com.ydl.ydlcommon.modular.ModularServiceManager
import com.ydl.ydlcommon.utils.log.AliYunLogConfig
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper
import com.ydl.ydlcommon.utils.log.LogHelper
import com.yidianling.common.tools.LogUtil
import com.yidianling.common.tools.ToastUtil
......@@ -65,6 +67,7 @@ class PayActivity : BaseActivity() {
*/
private const val PARAMS = "params"
private const val PARAMS_RED = "params_redPacket"
/**
* 支付类型
* 1.微信支付 2.支付宝支付
......@@ -91,29 +94,41 @@ class PayActivity : BaseActivity() {
//订单信息数据
private var payParams: PayParams? = null
//红包列表数据+支付金额
private var redPacketPayBean: RedPacketPayBean? = null
//入口
private var inlet = PayParams.INLET_NORMAL
//红包列表弹窗
private var redPacketPopWindow: RedPacketPopWindow? = null
//加载中弹窗
private var dialog: AlertDialog? = null
private var dialogContentView: View? = null
//红包id 默认为0
private var redPacketId: String? = "0"
//使用红包金额
private var redPacketMoney: Float = 0f
//使用红包文案
private var redPacketMoneyContent: String = ""
//账户余额
private var balanceMoney: Float = 0f
//支付金额
private var payMoney: Float = 0F
//可使用余额
private var canBalanceMoney = 0F
//支付类型
private var payType = PAY_ALI
//测评下单数据bean
private var testAddOrderBean: TestAddOrderBean? = null
......@@ -538,6 +553,7 @@ class PayActivity : BaseActivity() {
* 点击支付
*/
private fun onClickPay() {
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "点击支付")
when (inlet) {
INLET_NORMAL -> {
//正常入口
......@@ -603,6 +619,7 @@ class PayActivity : BaseActivity() {
if (null == payParams) {
return
}
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "进入充值, 0微信充值,其他支付宝充值:$select")
HttpUtils.recharge(RechargeParam(payParams!!.needPay.toInt().toString()))
.subscribeOn(Schedulers.io())
......@@ -622,6 +639,8 @@ class PayActivity : BaseActivity() {
.doOnSubscribe { showProgressDialog("") }
.doAfterTerminate { dismissProgressDialog() }
.subscribe(Consumer {
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "支付成功")
LogHelper.getInstance().writeLogSync("支付成功")
ToastUtil.toastShort("支付成功")
var intent = Intent()
......@@ -633,6 +652,8 @@ class PayActivity : BaseActivity() {
override fun accept(msg: String) {
ToastUtil.toastShort(msg)
LogHelper.getInstance().writeLogSync("支付失败$msg")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "支付失败$msg")
}
})
......@@ -644,13 +665,19 @@ class PayActivity : BaseActivity() {
when (inlet) {
INLET_NORMAL -> {
//正常入口
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "余额支付 正常入口")
balancePayById(payParams!!.payId)
}
INLET_TEST -> {
//测评入口
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "余额支付 测评入口")
balancePayById(testAddOrderBean!!.payId!!)
}
else -> {
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "余额支付")
balancePayById(payParams!!.payId)
}
}
......@@ -673,6 +700,7 @@ class PayActivity : BaseActivity() {
.doAfterTerminate { dismissProgressDialog() }
.subscribe(Consumer {
LogHelper.getInstance().writeLogSync("支付成功")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "余额支付:支付成功")
ToastUtil.toastShort("支付成功")
setResult(Activity.RESULT_OK)
finish()
......@@ -680,6 +708,8 @@ class PayActivity : BaseActivity() {
override fun accept(msg: String) {
ToastUtil.toastShort(msg)
LogHelper.getInstance().writeLogSync("支付失败:$msg")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "余额支付:支付失败:$msg")
}
})
}
......@@ -689,6 +719,7 @@ class PayActivity : BaseActivity() {
*/
@SuppressLint("CheckResult")
private fun appPay() {
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "微信支付 0 其他支付宝支付 select:${select}")
Observable.just(select)
.subscribeOn(Schedulers.io())
......@@ -706,6 +737,7 @@ class PayActivity : BaseActivity() {
.doOnSubscribe { showProgressDialog("") }
.doAfterTerminate { dismissProgressDialog() }
.subscribe(Consumer {
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "支付成功")
LogHelper.getInstance().writeLogSync("支付成功")
setResult(Activity.RESULT_OK)
finish()
......@@ -713,6 +745,8 @@ class PayActivity : BaseActivity() {
override fun accept(msg: String) {
ToastUtil.toastShort(msg)
LogHelper.getInstance().writeLogSync("支付失败:$msg")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "支付失败:$msg")
}
})
}
......@@ -724,18 +758,21 @@ class PayActivity : BaseActivity() {
return when (inlet) {
INLET_NORMAL -> {
//正常入口
wxPayById(payParams!!.payId,payParams?.merchantType.toString())
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "微信支付:正常入口")
wxPayById(payParams!!.payId, payParams?.merchantType.toString())
}
INLET_TEST -> {
//测评入口
if (null != testAddOrderBean && !TextUtils.isEmpty(testAddOrderBean!!.payId!!)) {
wxPayById(testAddOrderBean!!.payId!!,payParams?.merchantType.toString())
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "微信支付:测评入口")
wxPayById(testAddOrderBean!!.payId!!, payParams?.merchantType.toString())
} else {
null
}
}
else -> {
wxPayById(payParams!!.payId,payParams?.merchantType.toString())
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "微信支付")
wxPayById(payParams!!.payId, payParams?.merchantType.toString())
}
}
}
......@@ -744,8 +781,8 @@ class PayActivity : BaseActivity() {
* 微信支付
* @param payId 支付id
*/
private fun wxPayById(payId: String,merchantType:String): Observable<PayStatus> {
val bean = WxPayParam(payId, 1,merchantType)
private fun wxPayById(payId: String, merchantType: String): Observable<PayStatus> {
val bean = WxPayParam(payId, 1, merchantType)
return HttpUtils.wxPay(bean)
.compose(RxUtils.resultData())
.observeOn(AndroidSchedulers.mainThread())
......@@ -760,17 +797,23 @@ class PayActivity : BaseActivity() {
return when (inlet) {
INLET_NORMAL -> {
//正常入口
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "支付宝支付:正常入口")
aliPayById(payParams!!.payId)
}
INLET_TEST -> {
//测评入口
if (null != testAddOrderBean && !TextUtils.isEmpty(testAddOrderBean!!.payId!!)) {
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "支付宝支付:测评入口")
aliPayById(testAddOrderBean!!.payId!!)
} else {
null
}
}
else -> {
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "支付宝支付")
aliPayById(payParams!!.payId)
}
}
......@@ -811,7 +854,8 @@ class PayActivity : BaseActivity() {
.create()
}
if (dialogContentView == null) {
dialogContentView = LayoutInflater.from(this).inflate(R.layout.pay_fragment_loading_dialog, null)
dialogContentView =
LayoutInflater.from(this).inflate(R.layout.pay_fragment_loading_dialog, null)
dialogContentView?.tvMsg?.visibility = View.GONE
}
dialog?.show()
......
......@@ -3,14 +3,16 @@ package com.yidianling.ydl_pay.pay
import android.app.Activity
import android.content.Context
import com.alipay.sdk.app.PayTask
import com.yidianling.ydl_pay.pay.bean.PayStatus
import com.tencent.mm.opensdk.constants.Build
import com.tencent.mm.opensdk.modelpay.PayReq
import com.tencent.mm.opensdk.openapi.WXAPIFactory
import com.yidianling.ydl_pay.pay.bean.WXPayEvent
import com.ydl.ydlcommon.data.http.CustomThrowable
import com.ydl.ydlcommon.utils.log.AliYunLogConfig
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper
import com.yidianling.ydl_pay.common.bean.CommonWXPayBean
import com.yidianling.ydl_pay.common.bean.PayResult
import com.yidianling.ydl_pay.pay.bean.PayStatus
import com.yidianling.ydl_pay.pay.bean.WXPayEvent
import de.greenrobot.event.EventBus
import io.reactivex.Emitter
import io.reactivex.Observable
......@@ -59,8 +61,18 @@ object RxPay {
val result = alipay.payV2(aliSign, true)
val payResult = PayResult(result)
when {
"9000" == payResult.resultStatus -> it.onNext(PayStatus(true))
else -> it.onError(CustomThrowable(payResult.memo))
"9000" == payResult.resultStatus -> {
it.onNext(PayStatus(true))
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY, "支付宝支付成功")
}
else -> {
it.onError(CustomThrowable(payResult.memo))
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.PAY, "支付宝支付失败 memo:${payResult.memo}")
}
}
it.onComplete()
}
......
......@@ -9,6 +9,8 @@ import android.support.v7.app.AlertDialog
import android.view.*
import com.ydl.ydlcommon.data.http.RxUtils
import com.ydl.ydlcommon.utils.StringUtils
import com.ydl.ydlcommon.utils.log.AliYunLogConfig
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper
import com.ydl.ydlcommon.utils.log.LogHelper
import com.ydl.ydlcommon.utils.remind.ToastHelper
import com.yidianling.ydl_pay.R
......@@ -160,6 +162,7 @@ class PayDialog : Dialog {
if (data?.payId == null) {
ToastHelper.show("支付id有误,请返回重试")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY,"支付id有误,请返回重试")
return
}
......@@ -187,9 +190,12 @@ class PayDialog : Dialog {
this.callBack?.onSuccess()
}
LogHelper.getInstance().writeLogSync("支付成功")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY,"支付成功")
this.callBack?.onSuccess()
dismiss()
}, {
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY,"支付失败:${it.message}")
ToastHelper.show(it.message ?: "支付失败")
LogHelper.getInstance().writeLogSync("支付失败:${it.message}")
})
......@@ -200,6 +206,7 @@ class PayDialog : Dialog {
* @param payId 支付id
*/
private fun wxPayById(payId: String,merchantType:String): Observable<PayStatus> {
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY,"微信支付")
val bean = WxPayParam(payId, 1,merchantType)
return HttpUtils.wxPay(bean)
.compose(RxUtils.resultData())
......@@ -212,6 +219,8 @@ class PayDialog : Dialog {
* @param payId 支付Id
*/
private fun aliPayById(payId: String): Observable<PayStatus> {
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.PAY,"支付宝支付")
var bean = AliPayParam(payId, 1)
return HttpUtils.getAliPayOrderId(bean)
.compose(RxUtils.resultData())
......
......@@ -72,10 +72,11 @@ dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
//====================YDL Repository====================
// api rootProject.ext.dependencies["ydl-pushagent"]
// api rootProject.ext.dependencies["ydl-hnet"]
api (rootProject.ext.dependencies["ydl-notracepoint"]){
api(rootProject.ext.dependencies["ydl-notracepoint"]) {
transitive = true
exclude group: 'com.google.code.gson', module: 'gson'
exclude group: 'com.squareup.okhttp3', module: 'okhttp3'
......
......@@ -16,9 +16,13 @@ import com.ydl.ydlcommon.data.http.RxUtils
import com.ydl.ydlcommon.data.http.api.ApiRequestUtil
import com.ydl.ydlcommon.modular.ModularServiceManager
import com.ydl.ydlcommon.utils.YDLCacheUtils
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.ydl.ydlcommon.utils.log.AliYunLogConfig
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper
import com.ydl.ydlnet.builder.config.OkHttpConfig
import com.ydl.ydlnet.builder.factory.ApiFactory
import com.ydl.ydlnet.builder.interceptor.log.RequestHandler
import com.ydl.ydlnet.builder.interceptor.log.RequestLogInterceptor
import com.yidianling.common.tools.LogUtil
import com.yidianling.common.tools.RxAppTool
import com.yidianling.common.tools.RxDeviceTool
......@@ -118,6 +122,7 @@ class HttpConfig {
var ENCRYPTION_APP_KEY = "" // 接口加密appKey
var ENCRYPTION_APP_SECRET = "" // 接口加密appSecret
var isEncryption = false
var appDebug:Boolean=false
fun getInstance(): HttpConfig {
return Holder.INSTANCE
......@@ -127,7 +132,7 @@ class HttpConfig {
fun createOkHttp(): OkHttpClient {
val globalConfig = BaseApp.instance.getGlobalConfig()
val context = BaseApp.getApp()
val appDebug = globalConfig.appDebug
appDebug = globalConfig.appDebug
val appName = globalConfig.appName
//获取证书
......@@ -144,7 +149,8 @@ class HttpConfig {
.setInterceptor(
commonParams(),
requestHead(appName),
addEncryptionHeaderParamsInterceptor()
addEncryptionHeaderParamsInterceptor(),
responseErrorInterceptor()
)
.setRequestHandler(getRequestHandler())
.setReadTimeout(15)
......@@ -170,7 +176,7 @@ class HttpConfig {
path += it.request().url().encodedPath().substring(5)
}
else -> {
path+it.request().url().encodedPath()
path + it.request().url().encodedPath()
}
}
val sign = EncryptionParams.getSign(path, timestamp)
......@@ -180,12 +186,39 @@ class HttpConfig {
.addHeader("timestamp", timestamp)
.build()
it.proceed(request)
}else{
} else {
it.proceed(it.request())
}
}
}
/**
* 接口返回错误日志埋点
*/
private fun responseErrorInterceptor(): Interceptor {
return Interceptor {
val request: Request = it.request()
val originalResponse: Response = it.proceed(request)
if (!appDebug){
val code = originalResponse.code()
// 接口返回错误的情况下,埋点告诉服务器原因
if (code != 200) {
var params = ""
if (request.method() == "GET") {
params = request.url().query().toString()
} else if (request.method() == "POST") {
params = RequestLogInterceptor.parseParams(request)
}
val message = originalResponse.message()
val api = request.url().encodedPath()
ActionCountUtils.baiDuCount("ydl_user_error_business","error_log",api,params,message)
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.API, "error_log---api:$api---params:$params ---- message:$message")
}
}
originalResponse
}
}
private fun getRequestHandler(): RequestHandler {
return object : RequestHandler {
override fun onHttpResultResponse(
......
......@@ -134,10 +134,10 @@ class ActionCountUtils {
actionDataParams.appVersion(RxDeviceTool.getAppVersionName(BaseApp.getApp()))
actionDataParams.appId(appId)
actionDataParams.api(api)
actionDataParams.manufacturer(android.os.Build.BRAND.trim().toUpperCase())
actionDataParams.model(android.os.Build.MODEL)
actionDataParams.manufacturer(Build.BRAND.trim().toUpperCase())
actionDataParams.model(Build.MODEL)
actionDataParams.os(BIConstants.OS)
actionDataParams.osVersion(android.os.Build.VERSION.RELEASE)
actionDataParams.osVersion(Build.VERSION.RELEASE)
actionDataParams.wifi(if (isWifi()) 0 else 1)
var deviceId = ""
/*
......@@ -243,10 +243,10 @@ class ActionCountUtils {
actionDataParams.appVersion(RxDeviceTool.getAppVersionName(BaseApp.getApp()))
actionDataParams.appId(appId)
actionDataParams.api(api)
actionDataParams.manufacturer(android.os.Build.BRAND.trim().toUpperCase())
actionDataParams.model(android.os.Build.MODEL)
actionDataParams.manufacturer(Build.BRAND.trim().toUpperCase())
actionDataParams.model(Build.MODEL)
actionDataParams.os(BIConstants.OS)
actionDataParams.osVersion(android.os.Build.VERSION.RELEASE)
actionDataParams.osVersion(Build.VERSION.RELEASE)
actionDataParams.wifi(if (isWifi()) 0 else 1)
actionDataParams.screenWidth(RxDeviceTool.getScreenWidth(RxTool.getContext()!!))
actionDataParams.screenHeight(RxDeviceTool.getScreenHeight(RxTool.getContext()!!))
......@@ -287,7 +287,7 @@ class ActionCountUtils {
baiduActionDataParams.androidId(DeviceTool.getAndroidID())//MD5加密的androidId
baiduActionDataParams.ip("")
baiduActionDataParams.ipv6("")//给服务端传IPV6地址DeviceTool.getLocalIpV6()
baiduActionDataParams.tp(android.os.Build.MODEL)
baiduActionDataParams.tp(Build.MODEL)
baiduActionDataParams.network(DeviceTool.getNetworkState(RxTool.getContext()))
baiduActionDataParams.convertParam("")
baiduActionDataParams.uid(uid)
......@@ -316,8 +316,52 @@ class ActionCountUtils {
}
/**
* 接口返回错误埋点调用该方法
* @param partId pardId-ydl_user_error_business
* @param position error_log
* @param sign1 访问接口对应的参数
* @param sign2 接口返回的错误信息
*/
fun baiDuCount(
partId: String,
position: String,
api: String,
sign1: String,
sign2: String
) {
val actionDataParams = ActionDataBean.Builder()
actionDataParams.partId = partId
actionDataParams.position = position
actionDataParams.sign1 = sign1
actionDataParams.sign2 = sign2
actionDataParams.api = api
actionDataParams.appVersion(RxDeviceTool.getAppVersionName(BaseApp.getApp()))
val deviceId = if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
val topTaskActivity = ActivityManager.getInstance().getTopTaskActivity()
//获取imei
Utils.getIMEI(topTaskActivity)
} else {
//android Q及以上取oaid
DeviceIDHelper.getInstance().deviceId
}
actionDataParams.deviceId=deviceId
actionDataParams.time(System.currentTimeMillis())
actionDataParams.appId(appId)
actionDataParams.manufacturer(Build.BRAND.trim().toUpperCase())
actionDataParams.model(Build.MODEL)
actionDataParams.os(BIConstants.OS)
actionDataParams.osVersion(Build.VERSION.RELEASE)
actionDataParams.wifi(if (isWifi()) 0 else 1)
actionDataParams.uid = ModularServiceManager.getPlatformUserService()!!.getUser()?.userId
//请求
request(actionDataParams.build())
}
/**
* 传入ActionDataParams参数,访问接口
*/
@SuppressLint("CheckResult")
fun request(actionDataBean: ActionDataBean) {
try {
ApiRequestUtil.actionDataCount(actionDataBean)
......
package com.ydl.ydlcommon.utils.log
object AliYunLogConfig {
/**接口*/
const val API = "API"
/**声网*/
const val AGORA = "Agora"
/**登录*/
const val LOGIN = "Login"
/**WebView*/
const val WEB = "Web"
/**支付*/
const val PAY = "Pay"
/**云信*/
const val YUNXIN = "YunXin"
/**RTM*/
const val RTM = "Rtm"
/**网络状态*/
const val NETSTATUS = "NetStatus"
/**其他*/
const val OTHER = "Other"
}
\ No newline at end of file
package com.ydl.ydlcommon.utils.log
import com.aliyun.sls.android.producer.*
import com.ydl.ydlcommon.base.BaseApp.Companion.getApp
import com.ydl.ydlcommon.data.PlatformDataManager.getRam
import com.ydl.ydlcommon.modular.ModularServiceManager.getPlatformUserService
import com.yidianling.common.tools.RxAppTool
import com.yidianling.common.tools.RxDeviceTool
/**
* @author liupeng
*
* 阿里云埋点,携带基本参数,方便后续排查问题定位
* */
class AliYunRichLogsHelper {
companion object {
var mConfig: LogProducerConfig? = null
var mClient: LogProducerClient? = null
fun getInstance(): AliYunRichLogsHelper {
return Holder.INSTANCE
}
}
constructor() {
val endpoint = "cn-hangzhou.log.aliyuncs.com"
val project = "ydl-app-log"
val logstore = "ydl-app-log"
val accesskeyid = "LTAI5tH6WGqWUqzo4u5GfrCS"
val accesskeysecret = "uzccm79mr9d4rIsABu3xwfbdUdaeWT"
try {
mConfig = LogProducerConfig(endpoint, project, logstore, accesskeyid, accesskeysecret)
mClient = LogProducerClient(mConfig)
} catch (e: LogProducerException) {
e.printStackTrace()
}
}
private object Holder {
val INSTANCE = AliYunRichLogsHelper()
}
/**
*
* @param key AliYunLogConfig 接口、登录、声网、WebView、支付、其他
* @param value 具体的状态值
* */
fun sendRichLog(key: String, value: String) {
val log = Log()
val userInfo = getPlatformUserService()!!.getUser()
log.putContent(key, value)
log.putContent("ffrom", getRam().getChannelName())
log.putContent("isFromApp", "1")
log.putContent("osBuild", RxDeviceTool.getBuildBrandModel())
log.putContent(RxDeviceTool.getSDKVersionName(), RxAppTool.getAppVersionName(getApp()))
log.putContent("version", RxAppTool.getAppVersionName(getApp()))
if (null != userInfo) {
log.putContent("uid", userInfo.userId)
log.putContent("accessToken", userInfo.token)
}
if (mClient != null) {
val res: LogProducerResult = mClient!!.addLog(log)
}
}
/**
*
* @param key AliYunLogConfig 接口、登录、声网、WebView、支付、其他
* @param value 具体的状态值
* */
fun sendLog(key: String, value: String) {
val log = Log()
log.putContent(key, value)
if (mClient != null) {
val res: LogProducerResult = mClient!!.addLog(log)
}
}
}
\ No newline at end of file
......@@ -48,6 +48,8 @@ import com.ydl.ydlcommon.utils.LogUtil;
import com.ydl.ydlcommon.utils.NetWorkSpeedUtils;
import com.ydl.ydlcommon.utils.StatusBarUtils;
import com.ydl.ydlcommon.utils.URLUtils;
import com.ydl.ydlcommon.utils.log.AliYunLogConfig;
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper;
import com.ydl.ydlcommon.view.TitleBar;
import com.ydl.ydlcommon.view.dialog.YDLCommonDialog;
import com.ydl.ydlcommon.view.dialog.YDLShareDialog;
......@@ -81,24 +83,21 @@ import static android.view.View.VISIBLE;
/**
* 通用h5显示页面
* <p>
* 跳转此h5页面,请使用唯一参数 H5ParamsBaseActivity
*/
@Route(path = "/new_h5/h5")
public class NewH5Activity extends BaseActivity implements PtrHandler {
public static final String PARAMS = "h5Params";
/**
* 路由传递过来的参数
*/
/*** 路由传递过来的参数*/
public static final String ROUTER_PARAMS = "routerParam";
//下单选择时间请求吗
/***下单选择时间请求吗*/
public static final int ORDER_TIME_REQUEST_CODE = 110;
//启动类型
private int startType = 0;//0正常模式 1从下至上打开页面
//右侧按钮文字
/***启动类型 0正常模式 1从下至上打开页面*/
private int startType = 0;
/***右侧按钮文字*/
private String rightText = "";
protected TitleBar tb_title;
......@@ -107,10 +106,10 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
protected ProgressWebView wv_content;
protected PtrFrameLayout store_house_ptr_frame;
protected SafeTipView safeTipView;
//接收参数
/***接收参数*/
private H5Params h5Params;
protected String purl;//分享到发布需要的url
/***分享到发布需要的url*/
protected String purl;
protected String shareUrl;
protected String shareTitle;
protected String shareDesc;
......@@ -121,11 +120,9 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
protected ValueCallback<Uri> uploadMessage;
protected ValueCallback<Uri[]> uploadMessageAboveL;
private boolean shouldClearHistory = false;
//要分享出去的url
/***要分享出去的url*/
private String shareToUrl;
/**
* 拍照/选择文件请求码
*/
/*** 拍照/选择文件请求码*/
protected final static int FILE_CHOOSER_RESULT_CODE = 10000;
protected IJavascriptHandler jtoJHandle;
......@@ -133,37 +130,46 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
private LinearLayout llWebView;
private long loadStartTime = 0;//加载url开始的时间
private long initStartTime = 0;//webview初始化开始的时间
private long initDuration = 0;//webview初始化耗时
private long loadDuration = 0;//加载url耗时
/***加载url开始的时间*/
private long loadStartTime = 0;
/***webview初始化开始的时间*/
private long initStartTime = 0;
/***webview初始化耗时*/
private long initDuration = 0;
/***加载url耗时*/
private long loadDuration = 0;
private NetWorkSpeedUtils workSpeedUtils;
private boolean hasLoad = false;//部分机型中webview加载完成回调方法会调用多次,增加本地标识符
//是否跳转到动态
/***部分机型中webview加载完成回调方法会调用多次,增加本地标识符*/
private boolean hasLoad = false;
/***是否跳转到动态*/
private boolean isToTrend = false;
private LogoLoadingView v_loading;
private boolean isTimeOut = false; //是否超时
private Handler mTimeOutHandler = null; //超时处理handler
private int timeOutLong = 15000; //超时限定时间
private int TIME_OUT_TYPE = 0x1000; //超时消息
// 设置微信 H5 支付调用 loadDataWithBaseURL 的标记位,避免循环调用,
// 再次进入微信 H5 支付流程时记得重置此标记位状态
/***是否超时*/
private boolean isTimeOut = false;
/***超时处理handler*/
private Handler mTimeOutHandler = null;
/***超时限定时间*/
private int timeOutLong = 15000;
/***超时消息*/
private int TIME_OUT_TYPE = 0x1000;
/**
* 设置微信 H5 支付调用 loadDataWithBaseURL 的标记位,避免循环调用,
* 再次进入微信 H5 支付流程时记得重置此标记位状态
*/
boolean firstVisitWXH5PayUrl = true;
private String WX_H5_PAY_HOST = "http://testnewm.ydl.com";
/**
* 当前页面类型
*/
/*** 当前页面类型*/
private int selfPageType = -1;
private int TEST_QUESTIONS_PAGE_TYPE = 1000001; //测评题页面
/***测评题页面*/
private int TEST_QUESTIONS_PAGE_TYPE = 1000001;
private YDLCommonDialog testQuestionsPageReturnDialog = null;
private boolean isTitleBarCover = false; // 标题栏是否被覆盖隐藏
private static IWebRightClickListener webRightClickListener= null;
/*** 标题栏是否被覆盖隐藏*/
private boolean isTitleBarCover = false;
private static IWebRightClickListener webRightClickListener = null;
/**
* 设置当前h5页面类型
*
......@@ -202,7 +208,7 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
context.startActivity(intent);
}
public static void start(Context context, H5Params h5Params1,String rightText,IWebRightClickListener listener) {
public static void start(Context context, H5Params h5Params1, String rightText, IWebRightClickListener listener) {
if (null == context) {
return;
}
......@@ -238,9 +244,6 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
intent.putExtra(PARAMS, h5Params1);
context.startActivity(intent);
// if (startType == 1) {
// context.overridePendingTransition(R.anim.activity_open_up, 0);
// }
}
public static void startForResult(Activity context, H5Params h5Params1, int requestCode) {
......@@ -299,8 +302,9 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
* 15秒后发送一条消息通知展示无网络页面
*/
private void sendNetLossMessage() {
if (null != mTimeOutHandler)
if (null != mTimeOutHandler) {
mTimeOutHandler.sendEmptyMessageDelayed(TIME_OUT_TYPE, timeOutLong);
}
}
/**
......@@ -372,6 +376,7 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
rightText = getIntent().getStringExtra("rightText");
if (h5Params == null) {
ToastUtil.toastShort("参数错误");
AliYunRichLogsHelper.Companion.getInstance().sendRichLog(AliYunLogConfig.WEB, "参数错误 Params == null");
finish();
return;
}
......@@ -387,7 +392,7 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
tb_title.setOnRightTextClick((view, isActive) -> {
finish();
});
}else if(!TextUtils.isEmpty(rightText)&&webRightClickListener!=null) {
} else if (!TextUtils.isEmpty(rightText) && webRightClickListener != null) {
tb_title.setmRightText(rightText);
tb_title.setOnRightTextClick((view, isActive) -> {
webRightClickListener.onCLick(view);
......@@ -438,7 +443,7 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
if (null != uri && !TextUtils.isEmpty(host) && host.contains("nodeapi.ydl")) {
//马亮的需求,在nodeapi.ydl.com 地址后面拼上公共参数,用于判断是否为app
String uriAppendSuffix = jtoJHandle.getUriAppendSuffix();
resultUrl = WebUrlParamsUtils.getSuffix(url,uriAppendSuffix);
resultUrl = WebUrlParamsUtils.getSuffix(url, uriAppendSuffix);
}
} catch (Exception e) {
e.printStackTrace();
......@@ -479,7 +484,7 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
hideJavaTitleBar();
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
}
......@@ -616,15 +621,18 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
tb_title.setImage(getResources().getDrawable(R.drawable.web_common_back));
WebSettings setting = wv_content.getSettings();
setting.setJavaScriptEnabled(true);//支持js
setting.setDefaultTextEncodingName("GBK");//设置字符编码
//支持js
setting.setJavaScriptEnabled(true);
//设置字符编码
setting.setDefaultTextEncodingName("GBK");
setting.setDomStorageEnabled(true);
String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
setting.setAppCachePath(appCachePath);
setting.setAllowFileAccessFromFileURLs(true);
setting.setAppCacheEnabled(true);
setting.setAllowFileAccess(true);
setting.setBlockNetworkImage(false); // 解决图片不显示
// 解决图片不显示
setting.setBlockNetworkImage(false);
//设置自动缩放 degmi的测试题不能设置 不然界面展示有问题
if (h5Params.getUrl().contains("l.yidianling.com") || h5Params.getUrl().contains("l.ydl.com")) {
//l.yidianling.com 这个域名 只有云凤蝶使用 这个平台需要设置自适应 不然显示有问题
......@@ -641,8 +649,7 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
WebModularServiceUtils.Companion.startMain(NewH5Activity.this);
finish();
}
else {
} else {
if (ActivityManager.Companion.getInstance().getActivitys().size() == 1) {
WebModularServiceUtils.Companion.startMain(NewH5Activity.this);
}
......@@ -666,8 +673,9 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
if (newProgress == 100) {
wv_content.getProgressbar().setVisibility(GONE);
} else {
if (wv_content.getProgressbar().getVisibility() == GONE)
if (wv_content.getProgressbar().getVisibility() == GONE) {
wv_content.getProgressbar().setVisibility(VISIBLE);
}
wv_content.getProgressbar().setProgress(newProgress);
}
super.onProgressChanged(view, newProgress);
......@@ -682,6 +690,10 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
safeTipView.updateVisibility();
safeTipView.setLocation("orderList");
}
if (title.contains("404") || title.contains("500") || title.contains("Error")) {
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.WEB, "页面错误 : url:" + view.getUrl() + "title:" + title);
}
}
// For Android < 3.0
......@@ -697,12 +709,14 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
}
//For Android >= 4.1
@Override
public void openFileChooser(ValueCallback<Uri> valueCallback, String acceptType, String capture) {
uploadMessage = valueCallback;
openImageChooserActivity();
}
// For Android >= 5.0
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {
uploadMessageAboveL = filePathCallback;
openImageChooserActivity();
......@@ -721,15 +735,13 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
return overridePayUrl;
}
if (!TextUtils.isEmpty(url)&&url.endsWith(".apk")){
if (!TextUtils.isEmpty(url) && url.endsWith(".apk")) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
} else if (!TextUtils.isEmpty(url) && url.startsWith("http")) {
loadUrl(setUrlHeightParams(url));
} else {
if (YDLRouterManager.Companion.router(url)) {
} else {
if (!YDLRouterManager.Companion.router(url)) {
loadUrl(setUrlHeightParams(url));
}
}
......@@ -772,6 +784,8 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.WEB, "onReceivedError---- errorCode: " + errorCode + "----failingUrl:" + failingUrl);
loadFailed = true;
tb_title.setTitle("加载中");
if (wv_content != null) {
......@@ -803,20 +817,16 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
return overridePayUrl;
}
if (!TextUtils.isEmpty(url)&&url.endsWith(".apk")){
if (!TextUtils.isEmpty(url) && url.endsWith(".apk")) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
} else if (!TextUtils.isEmpty(url) && url.startsWith("http")) {
loadUrl(setUrlHeightParams(url));
} else {
if (YDLRouterManager.Companion.router(url)) {
} else {
if (!YDLRouterManager.Companion.router(url)) {
loadUrl(setUrlHeightParams(url));
}
}
return true;
}
......@@ -844,8 +854,7 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
tb_title.setImageListener(v -> {
if (wv_content.canGoBack()) {
wv_content.goBack();
}
else {
} else {
finish();
}
});
......@@ -859,8 +868,7 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
if (h5Params.getShowUrlTitle()) {
WebModularServiceUtils.Companion.startMain(NewH5Activity.this);
finish();
}
else {
} else {
if (ActivityManager.Companion.getInstance().getActivitys().size() == 1) {
WebModularServiceUtils.Companion.startMain(NewH5Activity.this);
}
......@@ -887,6 +895,8 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.WEB, "onReceivedError---- errorCode: " + errorCode + "----failingUrl:" + failingUrl);
tb_title.setTitle("加载中");
loadFailed = true;
if (wv_content != null) {
......@@ -909,8 +919,9 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
});
}
wv_content.setDownloadListener((url, userAgent, contentDisposition, mimetype, contentLength) -> {
if (url != null && url.startsWith("http://"))
if (url != null && url.startsWith("http://")) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
}
});
initDuration = System.currentTimeMillis() - initStartTime;
workSpeedUtils = new NetWorkSpeedUtils(this);
......@@ -1079,7 +1090,7 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
return;
}
String resultUrl = h5Params.getSuffix() ? WebUrlParamsUtils.getSuffix(url,jtoJHandle.getUriAppendSuffix()) : url;
String resultUrl = h5Params.getSuffix() ? WebUrlParamsUtils.getSuffix(url, jtoJHandle.getUriAppendSuffix()) : url;
Log.e("AAAA", resultUrl);
wv_content.loadUrl(resultUrl);
pointBI(resultUrl);
......@@ -1097,7 +1108,7 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
private void initHead() {
// header
final MaterialHeader header = new MaterialHeader(this);
int[] colors = new int[]{getResources().getColor(R.color.platform_main_theme )};
int[] colors = new int[]{getResources().getColor(R.color.platform_main_theme)};
header.setColorSchemeColors(colors);
header.setLayoutParams(new PtrFrameLayout.LayoutParams(-1, -2));
int padding = (int) getResources().getDimension(R.dimen.platform_default_dis_size);
......@@ -1155,8 +1166,7 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
if (h5Params.isSplash()) {
WebModularServiceUtils.Companion.startMain(NewH5Activity.this);
finish();
}
else {
} else {
if (ActivityManager.Companion.getInstance().getActivitys().size() == 1) {
WebModularServiceUtils.Companion.startMain(NewH5Activity.this);
}
......@@ -1213,10 +1223,15 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILE_CHOOSER_RESULT_CODE);
}
//最后在OnActivityResult中接受返回的结果
/**
* 最后在OnActivityResult中接受返回的结果
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == FILE_CHOOSER_RESULT_CODE) {
if (null == uploadMessage && null == uploadMessageAboveL) return;
if (null == uploadMessage && null == uploadMessageAboveL) {
return;
}
Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();
if (uploadMessageAboveL != null) {
onActivityResultAboveL(requestCode, resultCode, data);
......@@ -1250,8 +1265,9 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void onActivityResultAboveL(int requestCode, int resultCode, Intent intent) {
if (requestCode != FILE_CHOOSER_RESULT_CODE || uploadMessageAboveL == null)
if (requestCode != FILE_CHOOSER_RESULT_CODE || uploadMessageAboveL == null) {
return;
}
Uri[] results = null;
if (resultCode == Activity.RESULT_OK) {
if (intent != null) {
......@@ -1264,8 +1280,9 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
results[i] = item.getUri();
}
}
if (dataString != null)
if (dataString != null) {
results = new Uri[]{Uri.parse(dataString)};
}
}
}
uploadMessageAboveL.onReceiveValue(results);
......@@ -1278,8 +1295,6 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
/**
* 判断是否是测评题页面,如果是,则走测评题页面的返回逻辑
*/
if (keyCode == KeyEvent.KEYCODE_BACK) {
/**
* 是否是测评题目页面
......@@ -1358,7 +1373,9 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
} else {
tb_title.setImage_right(getResources().getDrawable(R.drawable.web_common_notice_more_un));
}
} catch (Exception e) {}
} catch (Exception e) {
e.printStackTrace();
}
}
if (backgroundView.getVisibility() == View.VISIBLE) {
backgroundView.setVisibility(View.GONE);
......@@ -1387,19 +1404,18 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
if (params != null && !TextUtils.isEmpty(params.getCourse_id())) {
dialog = YDLShareDialog.Companion.style5(this, shareTitle, shareUrl, shareDesc, cover);
} else {
if(!H5RouterUtils.INSTANCE.isDependByClz(IDynamicService.class)) {
if (!H5RouterUtils.INSTANCE.isDependByClz(IDynamicService.class)) {
//如果未引入动态模块的话,隐藏分享至动态按钮
dialog = YDLShareDialog.Companion.style4(this, shareTitle, shareUrl, shareDesc, cover);
}else {
} else {
dialog = YDLShareDialog.Companion.style1(this, shareTitle, shareUrl, shareDesc, cover, minPath, minId);
}
}
dialog.setCallBack(type -> {
if (1 == type) {
if (!WebModularServiceUtils.Companion.getUserService().loginByOneKeyLogin(NewH5Activity.this,true)) {
if (!WebModularServiceUtils.Companion.getUserService().loginByOneKeyLogin(NewH5Activity.this, true)) {
isToTrend = true;
} else {
//分享到心事动态
......
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