[6.2.4]录包截图增加信息

This commit is contained in:
xuxinchao
2023-12-06 16:34:42 +08:00
parent bfa28c1269
commit 959d56f240
7 changed files with 159 additions and 12 deletions

View File

@@ -11,14 +11,27 @@ import androidx.lifecycle.Lifecycle.Event
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.LifecycleOwner
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.commons.module.status.IMogoStatusChangedListener
import com.mogo.commons.module.status.MogoStatusManager
import com.mogo.commons.module.status.StatusDescriptor
import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.deva.report.ReportEntity
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.data.msgbox.FMInfoMsg
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgBoxType
import com.mogo.eagle.core.data.msgbox.MsgCategory
import com.mogo.eagle.core.data.msgbox.RecordBagMsg
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxListener
import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
@@ -32,8 +45,11 @@ import com.zhjt.mogo_core_function_devatools.badcase.repository.db.entity.AutoPi
import com.zhjt.mogo_core_function_devatools.ext.enqueuePop
import me.jessyan.autosize.utils.AutoSizeUtils
import record_cache.RecordPanelOuterClass
import kotlin.math.abs
internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordListener {
internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordListener,
IMoGoChassisLocationGCJ02Listener, IMsgBoxListener, IMoGoDevaToolsListener,
IMogoStatusChangedListener {
const val TAG = "BadCase"
@@ -45,6 +61,14 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
fun init(context: Context) {
CallerAutopilotRecordListenerManager.addListener(TAG, this)
SpeechUtils.init(context)
//定位监听, 传false是高德坐标系
CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 1, this)
//消息盒子监听获取FM和Report信息
CallerMsgBoxListenerManager.addListener(TAG,this)
CallerDevaToolsListenerManager.addListener(TAG, this)
// 云socket连接状态
MogoStatusManager.getInstance()
.registerStatusChangedListener(TAG, StatusDescriptor.CLOUD_SOCKET, this)
}
/**
@@ -302,4 +326,36 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
}
override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) {
mogoLocation?.let {
BadCaseConfig.currentSpeed = (abs(it.gnssSpeed) * 3.6f).toInt()
}
}
override fun onDataChanged(category: MsgCategory, msgBoxList: MsgBoxBean) {
if(category == MsgCategory.SYS_INFO){
//上报
BadCaseConfig.newReportEntity = msgBoxList.bean as ReportEntity
}else if(category == MsgCategory.FM_INFO){
//FM
BadCaseConfig.newFMInfoMsg = msgBoxList.bean as FMInfoMsg
}
}
override fun gpsStatus(status: Boolean) {
super.gpsStatus(status)
BadCaseConfig.gpsStatus = "GPS${if (status) "正常" else "异常"}"
}
override fun tracingStatus(status: Boolean) {
super.tracingStatus(status)
BadCaseConfig.tracingStatus = "寻迹算路${if (status) "正常" else "异常"}"
}
override fun onStatusChanged(descriptor: StatusDescriptor?, isTrue: Boolean) {
BadCaseConfig.socketStatus = "云Socket连接${if (isTrue) "正常" else "异常"}"
}
}

View File

@@ -35,6 +35,7 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener
import com.mogo.eagle.core.function.api.devatools.badcase.BadCaseNetListener
import com.mogo.eagle.core.function.api.map.deva.IMoGoMapScreenListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsNetManager
@@ -645,6 +646,23 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
* 高精地图截图回调
*/
override fun onMapScreen(bitmap: Bitmap) {
//在截图上保存即时信息
val time = "时间:${millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat())}"
val lineId = "路线ID:${CallerAutoPilotStatusListenerManager.getLineId()}"
val state = when(CallerAutoPilotStatusListenerManager.getState()){
0->"自驾状态:不可自驾"
1->"自驾状态:可自驾"
2->"自驾状态:自驾中"
7->"自驾状态:平行驾驶中"
else->"自驾状态:未知"
}
val speed = "当前车速:${BadCaseConfig.currentSpeed}"
val outBitmap = RecordBitmapUtils.drawTextOnBitmap(bitmap,time,lineId,state,speed,
BadCaseConfig.gpsStatus,BadCaseConfig.tracingStatus,BadCaseConfig.socketStatus
,BadCaseConfig.newFMInfoMsg,BadCaseConfig.newReportEntity)
//图片保存本地
val currentDay = millis2String(System.currentTimeMillis(), TimeUtils.getMdFormat())
val fileDir: String = Environment.getExternalStorageDirectory().absolutePath + File.separator+
@@ -654,7 +672,12 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
if (!File(fileDir).exists()) {
File(fileDir).mkdirs()
}
RecordBitmapUtils.bitmap2Path(bitmap,path)
if(outBitmap != null){
RecordBitmapUtils.bitmap2Path(outBitmap,path)
}else{
RecordBitmapUtils.bitmap2Path(bitmap,path)
}
//遍历是否有非当日的文件并删除
RecordBitmapUtils.deleteExpiredFile(currentDay)
}

View File

@@ -1,6 +1,8 @@
package com.zhjt.mogo_core_function_devatools.badcase.consts
import com.mogo.eagle.core.data.deva.badcase.BagInfoEntity
import com.mogo.eagle.core.data.deva.report.ReportEntity
import com.mogo.eagle.core.data.msgbox.FMInfoMsg
/**
* @author XuXinChao
@@ -29,6 +31,23 @@ object BadCaseConfig {
//工控机版本
@JvmField
var dockerVersion:String ?= null
//当前车速
@JvmField
var currentSpeed: Int = 0
//最新的上报消息
@JvmField
var newReportEntity: ReportEntity ?= null
//最新的FM消息
@JvmField
var newFMInfoMsg: FMInfoMsg ?= null
//GPS状态
@JvmField
var gpsStatus: String ?= null
//寻迹算路
@JvmField
var tracingStatus: String ?= null
//云Socket连接状态
var socketStatus: String ?= null
@JvmField
var recordKeyList:ArrayList<Long> = ArrayList()
//自定义Topic清单列表

View File

@@ -6,6 +6,10 @@ import android.graphics.Color
import android.graphics.Paint
import android.os.Environment
import android.util.Log
import com.mogo.eagle.core.data.deva.report.ReportEntity
import com.mogo.eagle.core.data.msgbox.FMInfoMsg
import com.mogo.eagle.core.data.msgbox.MsgFmData
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.zhjt.mogo_core_function_devatools.badcase.biz.InitiativeBadCaseWindow
import java.io.File
import java.io.FileOutputStream
@@ -19,7 +23,7 @@ object RecordBitmapUtils {
fun bitmap2Path(bitmap: Bitmap, path: String?): String? {
try {
val os: OutputStream = FileOutputStream(path)
bitmap.compress(Bitmap.CompressFormat.PNG, 100, os)
bitmap.compress(Bitmap.CompressFormat.PNG, 80, os)
os.flush()
os.close()
} catch (e: java.lang.Exception) {
@@ -49,14 +53,64 @@ object RecordBitmapUtils {
/**
* 在指定Bitmap中绘制文字
*/
fun drawTextOnBitmap(bitmap: Bitmap, text: String?, x: Int, y: Int): Bitmap? {
fun drawTextOnBitmap(bitmap: Bitmap, time: String,lineId: String,state: String,currentSpeed: String
,gpsStatus: String?,tracingStatus: String?,socketStatus: String?
,fm: FMInfoMsg?,report: ReportEntity?
): Bitmap? {
val mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true)
val canvas = Canvas(mutableBitmap)
val paint = Paint()
paint.color = Color.RED
paint.textSize = 100f
paint.textSize = 50f
paint.isAntiAlias = true
canvas.drawText(text!!, x.toFloat(), y.toFloat(), paint)
canvas.drawText(time, 100f, 100f, paint)
canvas.drawText(lineId,100f,200f,paint)
canvas.drawText(state,100f,300f,paint)
canvas.drawText(currentSpeed,100f,400f,paint)
gpsStatus?.let {
canvas.drawText(it,1000f,100f,paint)
}
tracingStatus?.let {
canvas.drawText(it,1000f,200f,paint)
}
socketStatus?.let {
canvas.drawText(it,1000f,300f,paint)
}
fm?.let {
canvas.drawText("FM:${MsgFmData.getFmPolicyName(it.policyCode)}",100f,600f,paint)
canvas.drawText("故障策略:${MsgFmData.getFmPolicyName(it.policyCode)}(${it.policyCode})",100f,700f,paint)
//故障原因
if(it.fmInfoList.isNullOrEmpty()){
canvas.drawText("故障原因:暂无",100f,800f,paint)
}else{
val fmFaultReason = StringBuilder()
fmFaultReason.append("故障原因:")
for((index,info) in it.fmInfoList!!.withIndex()){
fmFaultReason.append(info.faultName)
if(info.faultId.isNotBlank()){
fmFaultReason.append("(")
fmFaultReason.append(info.faultId)
fmFaultReason.append(")")
}
if(index!=(it.fmInfoList!!.size-1)){
fmFaultReason.append("/")
}
}
canvas.drawText(fmFaultReason.toString(),100f,800f,paint)
}
}
report?.let {
var resultStr = "上报类型:"
for (result in it.resultList) {
resultStr =
"${resultStr}${CallerAutoPilotControlManager.getReportResultDesc(result)}"
}
canvas.drawText(resultStr,100f,1000f,paint)
canvas.drawText("原因:${it.msg}",100f,1100f,paint)
canvas.drawText("消息来源:${it.src}",100f,1200f,paint)
}
return mutableBitmap
}

View File

@@ -19,8 +19,6 @@ import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.msgbox.MsgBoxConfig
import com.mogo.eagle.core.function.msgbox.MsgFmData
import com.mogo.eagle.core.utilcode.mogo.glide.GlideApp
import com.mogo.eagle.core.utilcode.mogo.glide.transform.GlideRoundedCornersTransform
import com.mogo.eagle.core.utilcode.util.TimeUtils

View File

@@ -18,7 +18,6 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.msgbox.MsgFmData
import com.mogo.eagle.core.utilcode.mogo.glide.GlideApp
import com.mogo.eagle.core.utilcode.mogo.glide.transform.GlideRoundedCornersTransform
import com.mogo.eagle.core.utilcode.util.ResourceUtils.getDrawable

View File

@@ -1,6 +1,4 @@
package com.mogo.eagle.core.function.msgbox
import com.zhjt.mogo.adas.data.bean.MogoReport
package com.mogo.eagle.core.data.msgbox
/**
* FM信息对照表