[650]feat: 通用事件弹框,增加日志打印和相关埋点;

This commit is contained in:
aibingbing
2024-06-27 19:24:23 +08:00
parent 3f65bc3976
commit 5640289b8e
4 changed files with 46 additions and 8 deletions

View File

@@ -11,6 +11,7 @@ import androidx.core.content.ContextCompat
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.business.roadcross.net.NDERoadV2NModel
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.ui.v2n.RoadV2NEventWindowView.Companion.trackEvent
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
@@ -113,23 +114,26 @@ class RoadV2NEventLivePlayView @JvmOverloads constructor(
/**
* 开始查询拉流url
*/
fun startRoadCameraLive(
fun startRoadCameraLive(eventId:String,
cameraId: String, lon: Double, lat: Double, cityCode: String
) {
CallerLogger.i(
"${SceneConstant.M_HMI}$TAG",
"startRoadCameraLive, cameraId=$cameraId, lon=$lon, lat=$lat"
"startRoadCameraLive, eventId=$eventId, cameraId=$cameraId, lon=$lon, lat=$lat, cityCode=$cityCode"
)
trackEvent("startRoadCameraLive --> eventId=$eventId, cameraId=$cameraId, lon=$lon, lat=$lat, cityCode=$cityCode")
startLoading()
NDERoadV2NModel.ndeRoadV2NModel.querySingleCameraLiveByCameraIp(cameraId, lon, lat, cityCode,
onSuccess = {
startPlay(it?.liveUrl)
trackEvent("startRoadCameraLive --> success, eventId=$eventId, liveUrl=${it?.liveUrl}")
},
onError = {
CallerLogger.e(
"${SceneConstant.M_HMI}$TAG",
"查询视频播放地址error, msg=$it"
)
trackEvent("startRoadCameraLive --> error, eventId=$eventId, msg=$it")
stopLoading()
showPlayFail()
@@ -147,6 +151,7 @@ class RoadV2NEventLivePlayView @JvmOverloads constructor(
"${SceneConstant.M_HMI}$TAG",
"stopRoadCameraLive"
)
trackEvent("stopRoadCameraLive --> ")
stopLoading()
try {
svpPlayer?.gsyVideoManager?.stop()
@@ -156,15 +161,18 @@ class RoadV2NEventLivePlayView @JvmOverloads constructor(
"${SceneConstant.M_HMI}$TAG",
"onDetachedFromWindow, e=${e.message}"
)
trackEvent("stopRoadCameraLive --> e=${e.message}")
}
}
private fun startPlay(flvUrl: String?) {
trackEvent("startPlay --> flvUrl=${flvUrl}")
if (TextUtils.isEmpty(flvUrl)) {
CallerLogger.e(
"${SceneConstant.M_HMI}$TAG",
"播放视频数据异常, flvUrl=${flvUrl}"
)
trackEvent("startPlay --> 播放视频数据异常, flvUrl=${flvUrl}")
stopLoading()
showPlayFail()
return
@@ -173,6 +181,7 @@ class RoadV2NEventLivePlayView @JvmOverloads constructor(
"${SceneConstant.M_HMI}$TAG",
"开始加载视频, flvUrl=${flvUrl}"
)
trackEvent("startPlay --> 开始加载视频, flvUrl=${flvUrl}")
flvUrl?.also {
startLoadVideo(it)
}

View File

@@ -9,6 +9,9 @@ import android.view.View
import android.widget.RelativeLayout
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import androidx.lifecycle.ProcessLifecycleOwner
import androidx.lifecycle.lifecycleScope
import com.mogo.commons.utils.MogoAnalyticUtils
import com.mogo.commons.voice.AIAssist
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.v2x.RoadV2NEventWindowBean
@@ -27,6 +30,8 @@ import kotlinx.android.synthetic.main.hmi_view_road_v2n_event_window.view.ivV2XI
import kotlinx.android.synthetic.main.hmi_view_road_v2n_event_window.view.roundRoadV2NEventContainer
import kotlinx.android.synthetic.main.hmi_view_road_v2n_event_window.view.tvV2XHintContent
import kotlinx.android.synthetic.main.hmi_view_road_v2n_event_window.view.tvV2XTimeStr
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import me.jessyan.autosize.utils.AutoSizeUtils
import java.util.UUID
@@ -41,6 +46,18 @@ class RoadV2NEventWindowView @JvmOverloads constructor(
companion object {
const val TAG = "RoadV2NEventWindowView"
const val ANALYTICS_KEY = "hmi_road_event_window_view"
public fun trackEvent(msg: String) {
ProcessLifecycleOwner.get().lifecycleScope.launch(Dispatchers.IO) {
val map: MutableMap<String, Any> = HashMap()
map["msg"] = msg
MogoAnalyticUtils.track(
ANALYTICS_KEY,
map
)
}
}
}
private val isPassengerScreen by lazy {
@@ -265,8 +282,9 @@ class RoadV2NEventWindowView @JvmOverloads constructor(
}
override fun show(dataBean: RoadV2NEventWindowBean) {
trackEvent("show --> ${dataBean.toString()}")
UiThreadHandler.post {
currentEventUUID = dataBean.uuid
currentEventUUID = dataBean.eventId
ivV2XImage.setImageDrawable(
ContextCompat.getDrawable(
context,
@@ -280,19 +298,25 @@ class RoadV2NEventWindowView @JvmOverloads constructor(
AIAssist.getInstance(context)
.speakTTSVoiceWithLevel(dataBean.hintStr, AIAssist.LEVEL0)
}
val cityCode = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().cityCode
containerLivePlay.startRoadCameraLive(
dataBean.cameraIp, dataBean.lon, dataBean.lat, cityCode)
val cityCode =
CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().cityCode
containerLivePlay.startRoadCameraLive(dataBean.eventId,
dataBean.cameraIp, dataBean.lon, dataBean.lat, cityCode
)
visibility = View.VISIBLE
}
}
override fun dismiss(eventId: String) {
trackEvent("dismiss --> eventId=${eventId}")
UiThreadHandler.post {
if (eventId == currentEventUUID) {
visibility = View.GONE
currentEventUUID = ""
containerLivePlay.stopRoadCameraLive()
trackEvent("dismiss --> eventId=${eventId}, 执行dismiss")
} else {
trackEvent("dismiss --> eventId=${eventId}, 跳过dismiss")
}
}
}

View File

@@ -4,7 +4,7 @@ package com.mogo.eagle.core.data.v2x
* 路侧道路事件 弹框
*/
data class RoadV2NEventWindowBean(
var uuid: String, //当前事件弹框 ID show时生成用于dismiss时使用
var eventId: String, //当前事件弹框 ID show时生成用于dismiss时使用
var timestamp: Long = 0, //事件发生事件戳
var iconResId: Int, //事件icon resource id
var hintStr: String, //事件提示文案
@@ -14,6 +14,6 @@ data class RoadV2NEventWindowBean(
var lat: Double, //事件坐标-纬度
) {
override fun toString(): String {
return "RoadV2NEventWindowBean(uuid='$uuid', timestamp=$timestamp, iconResId=$iconResId, hintStr='$hintStr', isNeedTTS=$isNeedTTS, cameraIp='$cameraIp', lon=$lon, lat=$lat)"
return "RoadV2NEventWindowBean(eventId='$eventId', timestamp=$timestamp, iconResId=$iconResId, hintStr='$hintStr', isNeedTTS=$isNeedTTS, cameraIp='$cameraIp', lon=$lon, lat=$lat)"
}
}

View File

@@ -3,12 +3,15 @@ package com.mogo.eagle.core.function.call.hmi
import com.mogo.eagle.core.data.v2x.RoadV2NEventWindowBean
import com.mogo.eagle.core.function.api.hmi.v2n.IRoadV2NEventWindowListener
import com.mogo.eagle.core.function.call.base.CallerBase
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
/**
* 路侧V2N事件弹框 调用者管理类
*/
object CallerRoadV2NEventWindowListenerManager : CallerBase<IRoadV2NEventWindowListener>() {
const val TAG = "CallerRoadV2NEventWindowListenerManager"
/**
* 通用事件弹框通过caremaIp, lon , lat请求查询拉流地址
* @param eventId 调用者设置唯一的事件 ID
@@ -44,6 +47,7 @@ object CallerRoadV2NEventWindowListenerManager : CallerBase<IRoadV2NEventWindowL
val listener = it.value
listener.show(data)
}
CallerLogger.i(TAG, "show ${data.toString()}")
}
/**
@@ -57,5 +61,6 @@ object CallerRoadV2NEventWindowListenerManager : CallerBase<IRoadV2NEventWindowL
eventId
)
}
CallerLogger.i(TAG, "dismiss eventId=$eventId")
}
}