Merge branch 'dev_robotaxi-d_240807_6.6.0' into tmp_6.7.0_arrow
This commit is contained in:
@@ -140,52 +140,6 @@ internal object V2NIdentifyDrawer: IEventDismissListener {
|
||||
car.longitude,
|
||||
car.latitude
|
||||
)
|
||||
// if (polygon.isNotEmpty()) {
|
||||
// val decision = V2NUtils.computeOccupyLanesInfo(Triple(car.longitude, car.latitude, car.heading.toFloat()), Triple(itx.longitude, itx.latitude, itx.heading.toFloat()), polygon.map { kotlin.Pair(it.first, it.second) })
|
||||
// if (decision != null) {
|
||||
// val isDriver = AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)
|
||||
// val total = decision.total
|
||||
// val occupy = decision.occupy
|
||||
// val laneId = decision.laneId
|
||||
// val sb = StringBuilder()
|
||||
// V2XBizTrace.onAck(decision, "计算出道路事件占道决策数据1")
|
||||
// if (laneId != null) {
|
||||
// val isOccupy = occupy.find { it.id == laneId } != null
|
||||
// if (isOccupy) {
|
||||
// if (isDriver) {
|
||||
// val bestLane = V2NUtils.computeBestLane(laneId, occupy, total)
|
||||
// V2XBizTrace.onAck(bestLane, "计算出最优车道")
|
||||
// sb.append("发现前方${distance.toInt()}米${ if (poiType == EventTypeEnumNew.TYPE_SOCKET_ROAD_SHIGONG.poiType) "车道施工" else "车道事故" }@@, 蘑菇建议您尽快${bestLane.second}")
|
||||
// } else {
|
||||
// sb.append("发现前方${distance.toInt()}米${ if (poiType == EventTypeEnumNew.TYPE_SOCKET_ROAD_SHIGONG.poiType) "车道施工" else "车道事故" }@@, 蘑菇时刻为您守护")
|
||||
// }
|
||||
// } else {
|
||||
// if (isDriver) {
|
||||
// sb.append("发现前方${distance.toInt()}米${ if (poiType == EventTypeEnumNew.TYPE_SOCKET_ROAD_SHIGONG.poiType) "车道施工" else "车道事故" }@@, 蘑菇提醒您小心${ if (computeDirection(laneId, occupy) > 0) "右侧" else "左侧" }行人及来车")
|
||||
// } else {
|
||||
// sb.append("发现前方${distance.toInt()}米${ if (poiType == EventTypeEnumNew.TYPE_SOCKET_ROAD_SHIGONG.poiType) "车道施工" else "车道事故" }@@, 蘑菇时刻为您守护")
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// sb.append("发现前方${distance.toInt()}米${ if (poiType == EventTypeEnumNew.TYPE_SOCKET_ROAD_SHIGONG.poiType) "车道施工" else "车道事故" }@@, 蘑菇时刻为您守护")
|
||||
// }
|
||||
// if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
|
||||
// runCatching {
|
||||
// CallerHmiManager.notifyXiaoZhiStatusChanged(V2N(EventTypeEnumNew.getEnumType(poiType)), START)
|
||||
// }
|
||||
// scope.launch {
|
||||
// delay(5000)
|
||||
// runCatching {
|
||||
// CallerHmiManager.notifyXiaoZhiStatusChanged(V2N(EventTypeEnumNew.getEnumType(poiType)), STOP)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// val ss = sb.toString()
|
||||
// val content = ss.substring(0, ss.indexOf("@@"))
|
||||
// val tts = ss.replace("@@", "")
|
||||
// CallerRoadV2NEventWindowListenerManager.showLiveVideo(id, itx.detectStartTime.takeIf { it > 0 } ?: System.currentTimeMillis(), EventTypeEnumNew.getUpdateIconRes(poiType), content, isDriver, tts, itx.cameraIp, itx.longitude, itx.latitude)
|
||||
// }
|
||||
// }
|
||||
val isDriver = AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)
|
||||
if (!isDriver) {
|
||||
runCatching {
|
||||
|
||||
@@ -46,7 +46,7 @@ class AiRoadMarker {
|
||||
val aiMakers = ConcurrentHashMap<String, AiRoadMarker>()
|
||||
|
||||
private const val TAG = "AiRoadMarker"
|
||||
private val COLOR_START = Color.parseColor("#002ABAD9")
|
||||
private val COLOR_START = Color.parseColor("#0030A3FF")
|
||||
private val COLOR_END = Color.parseColor("#66FF7A30")
|
||||
private val builders by lazy { ConcurrentHashMap<String, Point.Options.Builder>() }
|
||||
|
||||
|
||||
@@ -38,12 +38,12 @@ class V2XAiRoadEventMarker {
|
||||
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
|
||||
val colors = ArrayList<Int>()
|
||||
colors.add(Color.argb(204, 237, 172, 21))
|
||||
colors.add(Color.argb(0, 255, 255, 255))
|
||||
colors.add(Color.argb(0, 48, 163, 255))
|
||||
builder.colors(colors)
|
||||
} else {
|
||||
val colors = ArrayList<Int>()
|
||||
colors.add(Color.parseColor("#99FF8F2A"))
|
||||
colors.add(Color.argb(0, 255, 255, 255))
|
||||
colors.add(Color.argb(0, 48, 163, 255))
|
||||
builder.colors(colors)
|
||||
}
|
||||
val dispersedPoints = getDispersedPoints(polygon.map { Pair<Double, Double>(it.first, it.second) }, 3)
|
||||
|
||||
@@ -117,6 +117,7 @@ import mogo.v2x.RoadOverviewEvents
|
||||
import mogo.yycp.paralleldriving.protocol.ParallelTaskProcessNoticeOuterClass
|
||||
import mogo_msg.MogoReportMsg
|
||||
import perception.FusionTrafficLightOuterClass
|
||||
import perception.LaneMarkOuterClass
|
||||
import planning.RoboSweeperTaskIndexOuterClass
|
||||
import prediction.Prediction
|
||||
import record_cache.RecordPanelOuterClass
|
||||
@@ -1030,6 +1031,19 @@ class MoGoAdasListenerImpl : OnAdasListener {
|
||||
CallerV2nNioEventListenerManager.invokeV2nNioCongestionEvent(congestion)
|
||||
}
|
||||
|
||||
/**
|
||||
* 车道线
|
||||
*
|
||||
* @param header 头
|
||||
* @param laneMarks 数据
|
||||
*/
|
||||
override fun onLaneMarksTran(
|
||||
header: MessagePad.Header,
|
||||
laneMarks: LaneMarkOuterClass.LaneMarks
|
||||
) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 所连接的域控的节点状态信息
|
||||
* 目前包含状态 节点是否存在;节点是否超时;
|
||||
|
||||
@@ -5,7 +5,6 @@ package com.zhjt.mogo_core_function_devatools
|
||||
import android.app.Activity
|
||||
import android.app.Application
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import com.alibaba.android.arouter.facade.annotation.Route
|
||||
@@ -13,7 +12,6 @@ import com.alibaba.android.arouter.launcher.ARouter
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.commons.debug.DebugConfig
|
||||
import com.mogo.eagle.core.data.EnvConfig
|
||||
import com.mogo.eagle.core.data.app.AppConfigInfo
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.data.config.HmiBuildConfig.isShowRouteStrategy
|
||||
import com.mogo.eagle.core.data.constants.MogoServicePaths
|
||||
@@ -60,10 +58,8 @@ import com.zhjt.mogo_core_function_devatools.binding.BindingCarManager
|
||||
import com.zhjt.mogo_core_function_devatools.block.MoGoBlockProviderImpl
|
||||
import com.zhjt.mogo_core_function_devatools.env.EnvChangeManager
|
||||
import com.zhjt.mogo_core_function_devatools.exam.ExamControlManager
|
||||
import com.zhjt.mogo_core_function_devatools.exam.ExamControlWindow
|
||||
import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigCenter.Companion.bizConfigCenter
|
||||
import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigImpl
|
||||
import com.zhjt.mogo_core_function_devatools.logcat.CrashLogAnalyticsManager
|
||||
import com.zhjt.mogo_core_function_devatools.logcat.MoGoLogRecordProviderImpl
|
||||
import com.zhjt.mogo_core_function_devatools.logcatch.MogoLogCatchManager
|
||||
import com.zhjt.mogo_core_function_devatools.lookaround.MoGoLookAroundProviderImpl
|
||||
@@ -91,11 +87,7 @@ import com.zhjt.service.chain.ChainLog
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import java.io.BufferedReader
|
||||
import java.io.File
|
||||
import java.io.FileReader
|
||||
import java.io.IOException
|
||||
import java.lang.StringBuilder
|
||||
import java.lang.ref.WeakReference
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
|
||||
@@ -250,26 +242,6 @@ class DevaToolsProvider : IDevaToolsProvider, IAppStateListener {
|
||||
val crashDir = File(it.getExternalFilesDir(null), "crash")
|
||||
if(crashDir.exists() && crashDir.canExecute() && crashDir.listFiles()?.isNotEmpty() == true){
|
||||
it.lifeCycleScope.launch(Dispatchers.IO){
|
||||
crashDir.listFiles()?.forEach {crash->
|
||||
val file = File(crash.absolutePath)
|
||||
try {
|
||||
BufferedReader(FileReader(file)).use { reader ->
|
||||
var line: String?
|
||||
//读取读取文件内容并打印
|
||||
while (reader.readLine().also { line = it } != null) {
|
||||
line?.let { content->
|
||||
if(content.contains("Crash type")){
|
||||
CrashLogAnalyticsManager.crashLogAnalytics(content)
|
||||
return@use
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
} catch (e: IOException) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
val startTime = crashDir.lastModified() - 60*1000
|
||||
val endTime = if(System.currentTimeMillis() - crashDir.lastModified()>60*1000){
|
||||
crashDir.lastModified() + 60*1000
|
||||
|
||||
@@ -246,32 +246,21 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
|
||||
if (ClickUtils.isFastClick()){
|
||||
if (NetworkUtils.isConnected()){
|
||||
if (BadCaseConfig.dockerVersion != null){
|
||||
if(ProjectUtils.isSaas()){
|
||||
//660版本数据闭环增加统一上报问题入口(仅限于saas渠道)
|
||||
if(reportTypeWindow == null){
|
||||
reportTypeWindow = ReportTypeWindow(activity)
|
||||
reportTypeWindow?.setClickListener(object: ReportTypeWindow.ClickListener{
|
||||
override fun closeWindow() {
|
||||
reportTypeWindow?.hideFloatWindow()
|
||||
reportTypeWindow = null
|
||||
}
|
||||
})
|
||||
}
|
||||
if(reportTypeWindow?.getWindowShowStatus() == true){
|
||||
reportTypeWindow?.hideFloatWindow()
|
||||
reportTypeWindow = null
|
||||
}else{
|
||||
reportTypeWindow?.showFloatWindow(xPosition,yPosition)
|
||||
}
|
||||
}else{
|
||||
//展示工单上报弹窗
|
||||
val workOrderWindow = WorkOrderWindow(activity)
|
||||
workOrderWindow.setClickListener(object: WorkOrderWindow.ClickListener{
|
||||
//660版本数据闭环增加统一上报问题入口(仅限于saas渠道)
|
||||
if(reportTypeWindow == null){
|
||||
reportTypeWindow = ReportTypeWindow(activity)
|
||||
reportTypeWindow?.setClickListener(object: ReportTypeWindow.ClickListener{
|
||||
override fun closeWindow() {
|
||||
workOrderWindow.hideFloatWindow()
|
||||
reportTypeWindow?.hideFloatWindow()
|
||||
reportTypeWindow = null
|
||||
}
|
||||
})
|
||||
workOrderWindow.showFloatWindow()
|
||||
}
|
||||
if(reportTypeWindow?.getWindowShowStatus() == true){
|
||||
reportTypeWindow?.hideFloatWindow()
|
||||
reportTypeWindow = null
|
||||
}else{
|
||||
reportTypeWindow?.showFloatWindow(xPosition,yPosition)
|
||||
}
|
||||
}else{
|
||||
ToastUtils.showShort("工控机连接状态异常")
|
||||
@@ -373,29 +362,31 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
|
||||
fun onReceiveBadCaseRecord(msgBoxBean: MsgBoxBean, activity: Activity, countdown: Boolean) {
|
||||
CallerLogger.d("$M_DEVA$TAG", "收到录包结果回调${record}")
|
||||
CallerLogger.d("$M_DEVA$TAG", "开始创建被动录包弹窗,window num=${BadCaseConfig.windowNum}")
|
||||
ThreadUtils.runOnUiThread {
|
||||
val passiveBadCaseWindow = PassiveBadCaseWindow(activity)
|
||||
passiveBadCaseWindow.setRecord(msgBoxBean)
|
||||
passiveBadCaseWindow.setClickListener(object : PassiveBadCaseWindow.ClickListener {
|
||||
override fun closeWindow() {
|
||||
passiveBadCaseWindow.hideFloatWindow()
|
||||
}
|
||||
})
|
||||
passiveBadCaseWindow.showFloatWindow()
|
||||
if (countdown) {
|
||||
val countDownTimer = object : CountDownTimer(10000, 10000) {
|
||||
override fun onTick(p0: Long) {
|
||||
if(!ProjectUtils.isSaas()){
|
||||
ThreadUtils.runOnUiThread {
|
||||
val passiveBadCaseWindow = PassiveBadCaseWindow(activity)
|
||||
passiveBadCaseWindow.setRecord(msgBoxBean)
|
||||
passiveBadCaseWindow.setClickListener(object : PassiveBadCaseWindow.ClickListener {
|
||||
override fun closeWindow() {
|
||||
passiveBadCaseWindow.hideFloatWindow()
|
||||
}
|
||||
})
|
||||
passiveBadCaseWindow.showFloatWindow()
|
||||
if (countdown) {
|
||||
val countDownTimer = object : CountDownTimer(10000, 10000) {
|
||||
override fun onTick(p0: Long) {
|
||||
}
|
||||
|
||||
override fun onFinish() {
|
||||
//如果有页面操作,则不自动关闭窗口
|
||||
if(!passiveBadCaseWindow.isOperated()){
|
||||
passiveBadCaseWindow.hideFloatWindow()
|
||||
BadCaseConfig.windowNum--
|
||||
override fun onFinish() {
|
||||
//如果有页面操作,则不自动关闭窗口
|
||||
if(!passiveBadCaseWindow.isOperated()){
|
||||
passiveBadCaseWindow.hideFloatWindow()
|
||||
BadCaseConfig.windowNum--
|
||||
}
|
||||
}
|
||||
}
|
||||
countDownTimer.start()
|
||||
}
|
||||
countDownTimer.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -579,26 +570,35 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
|
||||
*/
|
||||
override fun onFSM2024State(fsmState: Fsm2024.FSMStateMsg) {
|
||||
Log.i(TAG,"onFSM2024State fsmState.pilotStandbyFlag="+fsmState.pilotStandbyFlag+" pilotNotStandbyReason="+ fsmState.pilotNotStandbyReason)
|
||||
if(!fsmState.pilotStandbyFlag){
|
||||
//pilotStandbyFlag == false代表自动驾驶无法启动
|
||||
if(!BadCaseConfig.alreadyShowOneReport){
|
||||
//触发一键上报
|
||||
ThreadUtils.runOnUiThread {
|
||||
if(reportTypeWindow == null){
|
||||
reportTypeWindow = ReportTypeWindow(activity)
|
||||
reportTypeWindow?.setClickListener(object: ReportTypeWindow.ClickListener{
|
||||
override fun closeWindow() {
|
||||
reportTypeWindow?.hideFloatWindow()
|
||||
reportTypeWindow = null
|
||||
}
|
||||
})
|
||||
if(fsmState.pilotStandbyFlag){
|
||||
BadCaseConfig.fsmAlreadyStandby = true
|
||||
}
|
||||
if(BadCaseConfig.fsmAlreadyStandby){
|
||||
if(!fsmState.pilotStandbyFlag){
|
||||
//pilotStandbyFlag == false代表自动驾驶无法启动
|
||||
if(!BadCaseConfig.alreadyShowOneReport){
|
||||
//触发一键上报
|
||||
ThreadUtils.runOnUiThread {
|
||||
val activity = AppStateManager.currentActivity()
|
||||
if (activity !is AppCompatActivity) {
|
||||
return@runOnUiThread
|
||||
}
|
||||
if(reportTypeWindow == null){
|
||||
reportTypeWindow = ReportTypeWindow(activity)
|
||||
reportTypeWindow?.setClickListener(object: ReportTypeWindow.ClickListener{
|
||||
override fun closeWindow() {
|
||||
reportTypeWindow?.hideFloatWindow()
|
||||
reportTypeWindow = null
|
||||
}
|
||||
})
|
||||
}
|
||||
reportTypeWindow?.showOneClickReportWindow(xPosition,yPosition)
|
||||
BadCaseConfig.alreadyShowOneReport = true
|
||||
}
|
||||
reportTypeWindow?.showOneClickReportWindow(xPosition,yPosition)
|
||||
BadCaseConfig.alreadyShowOneReport = true
|
||||
}
|
||||
}else{
|
||||
BadCaseConfig.alreadyShowOneReport = false
|
||||
}
|
||||
}else{
|
||||
BadCaseConfig.alreadyShowOneReport = false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -614,6 +614,10 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
|
||||
if(it.status == AutopilotStatistics.AUTOPILOT_START_STATUS.FAILED){
|
||||
//触发一键上报
|
||||
ThreadUtils.runOnUiThread{
|
||||
val activity = AppStateManager.currentActivity()
|
||||
if (activity !is AppCompatActivity) {
|
||||
return@runOnUiThread
|
||||
}
|
||||
if(reportTypeWindow == null){
|
||||
reportTypeWindow = ReportTypeWindow(activity)
|
||||
reportTypeWindow?.setClickListener(object: ReportTypeWindow.ClickListener{
|
||||
@@ -655,6 +659,10 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
|
||||
}else if(state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE ||
|
||||
state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE){
|
||||
if(shouldRecord){
|
||||
val activity = AppStateManager.currentActivity()
|
||||
if (activity !is AppCompatActivity) {
|
||||
return
|
||||
}
|
||||
val geocodeSearch = GeocodeSearch(activity)
|
||||
geocodeSearch.setOnGeocodeSearchListener(object: GeocodeSearch.OnGeocodeSearchListener {
|
||||
override fun onRegeocodeSearched(regeocodeResult: RegeocodeResult?, p1: Int) {
|
||||
|
||||
@@ -130,7 +130,7 @@ fun Context.enqueuePop(content: View, width: Int, height: Int, key: String = "",
|
||||
}
|
||||
|
||||
override fun show() {
|
||||
pop.showAtLocation(activity.window.decorView, gravity, startX, if (isImmersiveMode) 0 else BarUtils.getStatusBarHeight() + startY)
|
||||
pop.showAtLocation(activity.window.decorView, gravity, startX, startY)
|
||||
}
|
||||
override fun isOverride(): Boolean = isOverride
|
||||
}
|
||||
|
||||
@@ -507,9 +507,6 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
// 更新浮动窗口位置参数
|
||||
mInScreenX = motionEvent.rawX
|
||||
mInScreenY = motionEvent.rawY
|
||||
if(((mInScreenX - mInViewX)-mWindowParams!!.x).absoluteValue>150 || ((mInScreenY - mInViewY)-mWindowParams!!.y).absoluteValue>150){
|
||||
return true
|
||||
}
|
||||
mWindowParams!!.x = (mInScreenX - mInViewX).toInt()
|
||||
mWindowParams!!.y = (mInScreenY - mInViewY).toInt()
|
||||
// 手指移动的时候更新小悬浮窗的位置
|
||||
|
||||
@@ -505,9 +505,6 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
// 更新浮动窗口位置参数
|
||||
mInScreenX = motionEvent.rawX
|
||||
mInScreenY = motionEvent.rawY
|
||||
if(((mInScreenX - mInViewX)-mWindowParams!!.x).absoluteValue>150 || ((mInScreenY - mInViewY)-mWindowParams!!.y).absoluteValue>150){
|
||||
return true
|
||||
}
|
||||
mWindowParams!!.x = (mInScreenX - mInViewX).toInt()
|
||||
mWindowParams!!.y = (mInScreenY - mInViewY).toInt()
|
||||
// 手指移动的时候更新小悬浮窗的位置
|
||||
|
||||
@@ -62,6 +62,9 @@ object BadCaseConfig {
|
||||
//本次问题是否已经触发一键上报
|
||||
@JvmField
|
||||
var alreadyShowOneReport: Boolean = false
|
||||
//FSM是否已经变为可以启自驾
|
||||
@JvmField
|
||||
var fsmAlreadyStandby: Boolean = false
|
||||
//租户ID
|
||||
@JvmField
|
||||
var tenantId: Long = 0
|
||||
|
||||
@@ -240,9 +240,6 @@ class ExamControlWindow constructor(activity: Activity): View.OnTouchListener{
|
||||
// 更新浮动窗口位置参数
|
||||
mInScreenX = motionEvent.rawX
|
||||
mInScreenY = motionEvent.rawY
|
||||
if(((mInScreenX - mInViewX)-mWindowParams!!.x).absoluteValue>150 || ((mInScreenY - mInViewY)-mWindowParams!!.y).absoluteValue>150){
|
||||
return true
|
||||
}
|
||||
mWindowParams!!.x = (mInScreenX - mInViewX).toInt()
|
||||
mWindowParams!!.y = (mInScreenY - mInViewY).toInt()
|
||||
// 手指移动的时候更新小悬浮窗的位置
|
||||
|
||||
@@ -24,6 +24,8 @@ object CrashLogAnalyticsManager {
|
||||
private const val crashEyeVersion = "eyeVersion" //鹰眼版本
|
||||
private const val crashAppFlavor = "appFlavor" //渠道信息
|
||||
private const val crashBranchHash = "branchHash" //Git Hash
|
||||
private const val crashKeyMessage = "keyMessage" //崩溃核心信息
|
||||
private const val crashIsDriver = "isDriver" //是否是司机屏
|
||||
|
||||
/**
|
||||
* 崩溃统计
|
||||
@@ -37,7 +39,7 @@ object CrashLogAnalyticsManager {
|
||||
* @param branchHash Git Hash
|
||||
*/
|
||||
private fun realCrashLogAnalytics(cosPath: String,type: String,plateNumber: String,carSn: String,mapVersion: String,eyeVersion: String,
|
||||
appFlavor: String,branchHash: String){
|
||||
appFlavor: String,branchHash: String,keyMessage: String,isDriver: Boolean){
|
||||
val crashLogParams = HashMap<String,Any>()
|
||||
crashLogParams[crashCosPath] = cosPath
|
||||
crashLogParams[crashType] = type
|
||||
@@ -47,14 +49,17 @@ object CrashLogAnalyticsManager {
|
||||
crashLogParams[crashEyeVersion] = eyeVersion
|
||||
crashLogParams[crashAppFlavor] = appFlavor
|
||||
crashLogParams[crashBranchHash] = branchHash
|
||||
crashLogParams[crashKeyMessage] = keyMessage
|
||||
crashLogParams[crashIsDriver] = isDriver
|
||||
MogoAnalyticUtils.track(crashLogRecord,crashLogParams)
|
||||
}
|
||||
|
||||
/**
|
||||
* 崩溃统计
|
||||
* @param crashType 崩溃类型
|
||||
* @param keyMessage 崩溃关键信息
|
||||
*/
|
||||
fun crashLogAnalytics(crashType: String){
|
||||
fun crashLogAnalytics(crashType: String,keyMessage: String){
|
||||
val crashCosPath = StringBuilder()
|
||||
crashCosPath.append("CarPad/")
|
||||
if(DebugConfig.isDebug()){
|
||||
@@ -66,10 +71,10 @@ object CrashLogAnalyticsManager {
|
||||
crashCosPath.append("/")
|
||||
crashCosPath.append(millis2String(System.currentTimeMillis(), TimeUtils.getMdFormat()))
|
||||
crashCosPath.append("/")
|
||||
realCrashLogAnalytics(crashCosPath.toString(),crashType.replace("Crash type:","").trim(), AppConfigInfo.plateNumber,
|
||||
realCrashLogAnalytics(crashCosPath.toString(),crashType, AppConfigInfo.plateNumber,
|
||||
SharedPrefsMgr.getInstance().sn,
|
||||
CallerAutoPilotStatusListenerManager.getDockerVersion() ?: "",
|
||||
AppUtils.getAppVersionName(),AppConfigInfo.flavor,AppConfigInfo.workingBranchHash)
|
||||
AppUtils.getAppVersionName(),AppConfigInfo.flavor,AppConfigInfo.workingBranchHash,keyMessage,AppConfigInfo.isDriver)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -14,7 +14,12 @@ import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.core.log.record.*
|
||||
import com.mogo.core.log.record.config.*
|
||||
import com.mogo.core.log.record.config.crash.ANRCrash
|
||||
import com.mogo.core.log.record.config.crash.CrashConfig
|
||||
import com.mogo.core.log.record.config.crash.CrashType
|
||||
import com.mogo.core.log.record.config.crash.JavaCrash
|
||||
import com.mogo.core.log.record.config.crash.NativeCrash
|
||||
import com.mogo.core.log.record.config.crash.upload.ICrashFileUploader
|
||||
import com.mogo.core.log.record.config.extra.IExtraFileToUpload
|
||||
import com.mogo.core.log.record.config.extra.ToUploadFile
|
||||
import com.mogo.core.log.record.config.state.IStateProvider
|
||||
@@ -137,6 +142,7 @@ internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider,
|
||||
builder.crashConfig(
|
||||
CrashConfig.Builder()
|
||||
.enabled(true)
|
||||
.uploader(CrashLogUploader(context))
|
||||
.crashDir(File(context.getExternalFilesDir(null), "crash"))
|
||||
.expireDuration(TimeUnit.DAYS.toMillis(3))
|
||||
.javaCrash(true)
|
||||
@@ -156,6 +162,7 @@ internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider,
|
||||
}
|
||||
})
|
||||
LogcatManager.init(builder)
|
||||
LogcatManager.uploadForCrashIfNeed()
|
||||
}
|
||||
|
||||
override fun target(): Class<RemoteLogPushContent> {
|
||||
@@ -235,4 +242,33 @@ internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider,
|
||||
override fun testAnrCrash() {
|
||||
SystemClock.sleep(15000)
|
||||
}
|
||||
|
||||
private class CrashLogUploader(private val mContext: Context): ICrashFileUploader {
|
||||
|
||||
override suspend fun upload(
|
||||
type: CrashType,
|
||||
crashTime: String,
|
||||
file: File,
|
||||
extra: Map<String, String>?
|
||||
): Boolean {
|
||||
try {
|
||||
val keyMessage = when(type) {
|
||||
JavaCrash -> extra?.get("java stacktrace") ?: extra?.get("backtrace") ?: "#"
|
||||
NativeCrash -> extra?.get("backtrace") ?: "#"
|
||||
ANRCrash -> extra?.get("backtrace") ?: "#"
|
||||
}
|
||||
val typeStr = when(type){
|
||||
JavaCrash -> "JavaCrash"
|
||||
NativeCrash -> "NativeCrash"
|
||||
ANRCrash -> "ANRCrash"
|
||||
}
|
||||
CrashLogAnalyticsManager.crashLogAnalytics(typeStr,keyMessage)
|
||||
return true
|
||||
} catch (t: Throwable) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -94,7 +94,6 @@ object StatusManager {
|
||||
is GpsStatus -> GpsImpl(ctx)
|
||||
is TracingStatus -> TracingImpl(ctx)
|
||||
is RTKStatus -> RTKImpl(ctx)
|
||||
is FSMStatus -> FSMImpl(ctx)
|
||||
is OverViewStatus -> OverViewImpl(ctx)
|
||||
is SteerStatus -> SteerImpl(ctx)
|
||||
is AcceleratorStatus -> AcceleratorImpl(ctx)
|
||||
@@ -102,6 +101,7 @@ object StatusManager {
|
||||
is DoubleFlashStatus -> DoubleFlashImpl(ctx)
|
||||
is GearStatus -> GearImpl(ctx)
|
||||
is SpeedStatus -> SpeedImpl(ctx)
|
||||
is FSMStatus -> FSMImpl(ctx)
|
||||
is RouteDownloadStatus -> RouteDownloadImpl(ctx)
|
||||
}
|
||||
}.also { flows += it }
|
||||
@@ -214,6 +214,7 @@ object StatusManager {
|
||||
is DoubleFlashStatus -> "双闪"
|
||||
is GearStatus -> "档位"
|
||||
is RouteDownloadStatus -> if (item.state == RouteStart) "轨迹下载中" else "轨迹下载失败"
|
||||
is FSMStatus -> "FSM"
|
||||
else -> "其它"
|
||||
}
|
||||
}
|
||||
@@ -239,7 +240,6 @@ object StatusManager {
|
||||
} else {
|
||||
ret or shl
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return ret
|
||||
|
||||
@@ -141,7 +141,7 @@ enum class FSMStateCode {
|
||||
/**
|
||||
* FSM模块状态
|
||||
*/
|
||||
class FSMStatus(var state: FSMStateCode, var desc: String = ""): Status() {
|
||||
class FSMStatus(var state: FSMStateCode, var desc: String = ""): Status(), IAutopilotPreLaunchStatus {
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (javaClass != other?.javaClass) return false
|
||||
|
||||
@@ -9,6 +9,7 @@ import androidx.recyclerview.widget.*
|
||||
import com.mogo.eagle.core.utilcode.kotlin.*
|
||||
import com.mogo.eagle.core.utilcode.rv.divider.*
|
||||
import com.zhjt.mogo_core_function_devatools.R
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.FSMStatus
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.IAutopilotPreLaunchStatus
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.Status
|
||||
import com.zhjt.mogo_core_function_devatools.status.model.StatusModel
|
||||
@@ -48,11 +49,11 @@ internal class StatusView(private val model: StatusModel, ctx: Context): Constra
|
||||
.horizontalInnerSpace(10.PX)
|
||||
.build()
|
||||
)
|
||||
val adapter = model.status.value?.let { data -> StatusAdapter(context, data.second.filter { it !is IAutopilotPreLaunchStatus }) }?.also { adapter -> itx.adapter = adapter }
|
||||
val adapter = model.status.value?.let { data -> StatusAdapter(context, data.second.filter { (it !is IAutopilotPreLaunchStatus) || (it is FSMStatus)}) }?.also { adapter -> itx.adapter = adapter }
|
||||
adapter?.let { _ ->
|
||||
model.status.observeForever(Observer<Pair<Status?, ArrayList<Status>>> { data ->
|
||||
val old = adapter.data
|
||||
val update = data.second.filter { it !is IAutopilotPreLaunchStatus }
|
||||
val update = data.second.filter { (it !is IAutopilotPreLaunchStatus) || (it is FSMStatus) }
|
||||
val result = DiffUtil.calculateDiff(StatusDiffCallback(old, update))
|
||||
adapter.data = update
|
||||
result.dispatchUpdatesTo(adapter)
|
||||
|
||||
@@ -22,7 +22,6 @@ import android.view.animation.ScaleAnimation
|
||||
import android.widget.EditText
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import android.widget.ToggleButton
|
||||
import androidx.appcompat.widget.AppCompatEditText
|
||||
import androidx.appcompat.widget.AppCompatTextView
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
@@ -62,7 +61,6 @@ import com.mogo.tts.base.SpeechUtils
|
||||
import com.zhjt.mogo_core_function_devatools.R
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig
|
||||
import com.zhjt.mogo_core_function_devatools.workorder.adapter.OrderReasonAdapter
|
||||
import kotlin.math.absoluteValue
|
||||
|
||||
/**
|
||||
* 故障原因编辑窗口
|
||||
@@ -192,12 +190,15 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener,
|
||||
//故障类型选择没有变化
|
||||
reasonList?.let { orderReasonAdapter.setData(it,2) }
|
||||
}else{
|
||||
//故障类型发生了变化
|
||||
level2Id = reason.id
|
||||
level2Name = reason.name
|
||||
|
||||
source = 2
|
||||
//获取故障三级分类即故障原因
|
||||
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,3,level2Id,type,0)
|
||||
tvFaultReason.text = ""
|
||||
level3Id = 0
|
||||
level3Name = ""
|
||||
}
|
||||
}else{
|
||||
//原因
|
||||
@@ -347,6 +348,7 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener,
|
||||
ToastUtils.showShort("请完整填写再上报")
|
||||
return@setOnClickListener
|
||||
}
|
||||
reportNote = etNoteInput.text.toString()
|
||||
//故障码列表赋值
|
||||
BadCaseConfig.newFMInfoMsg?.fmInfoList?.forEach {
|
||||
faultCodeList.add(it.faultId)
|
||||
@@ -507,9 +509,6 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener,
|
||||
// 更新浮动窗口位置参数
|
||||
mInScreenX = motionEvent.rawX
|
||||
mInScreenY = motionEvent.rawY
|
||||
if(((mInScreenX - mInViewX)-mWindowParams!!.x).absoluteValue>150 || ((mInScreenY - mInViewY)-mWindowParams!!.y).absoluteValue>150){
|
||||
return true
|
||||
}
|
||||
mWindowParams!!.x = (mInScreenX - mInViewX).toInt()
|
||||
mWindowParams!!.y = (mInScreenY - mInViewY).toInt()
|
||||
// 手指移动的时候更新小悬浮窗的位置
|
||||
@@ -533,6 +532,7 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener,
|
||||
}
|
||||
|
||||
fun hideFloatWindow() {
|
||||
etNoteInput.clearFocus()
|
||||
CallerDevaToolsListenerManager.removeListener(TAG)
|
||||
CallerOrderListenerManager.removeListener(TAG)
|
||||
if (mFloatLayout.parent != null){
|
||||
|
||||
@@ -21,6 +21,7 @@ import com.amap.api.services.geocoder.GeocodeResult
|
||||
import com.amap.api.services.geocoder.GeocodeSearch
|
||||
import com.amap.api.services.geocoder.RegeocodeQuery
|
||||
import com.amap.api.services.geocoder.RegeocodeResult
|
||||
import com.mogo.commons.env.ProjectUtils
|
||||
import com.mogo.commons.storage.SharedPrefsMgr
|
||||
import com.mogo.eagle.core.data.app.AppConfigInfo
|
||||
import com.mogo.eagle.core.data.deva.report.CategoryInfo
|
||||
@@ -77,8 +78,6 @@ class ReportTypeWindow constructor(activity: Activity): IMoGoDevaToolsListener {
|
||||
private var level1Name: String = ""
|
||||
private var level2Name: String = ""
|
||||
private var level3Name: String = ""
|
||||
private var lineName: String = "" //行驶路线
|
||||
private var reportNote: String = "" //上报描述
|
||||
private val reportType: Int = 1 //上报方式:0:小程序 1:司机屏 2:云端上报
|
||||
private var level: Int = 1
|
||||
|
||||
@@ -143,7 +142,7 @@ class ReportTypeWindow constructor(activity: Activity): IMoGoDevaToolsListener {
|
||||
}
|
||||
val padProblemList= ArrayList<PadProblemInfo>()
|
||||
val padProblemInfo = PadProblemInfo(address,faultCodeList,millis2String(System.currentTimeMillis()),level1Id,
|
||||
level2Id,level3Id,lineName,reportNote,reportType,
|
||||
level2Id,level3Id,BadCaseConfig.lineName,"${level1Name}-${level2Name}-${level3Name}",reportType,
|
||||
SharedPrefsMgr.getInstance().getString("och_account",""))
|
||||
padProblemList.add(padProblemInfo)
|
||||
val padAddProblemReq = PadAddProblemReq(padProblemList, AppConfigInfo.plateNumber)
|
||||
@@ -160,8 +159,14 @@ class ReportTypeWindow constructor(activity: Activity): IMoGoDevaToolsListener {
|
||||
}
|
||||
//故障类
|
||||
tvReportTypeFault.setOnClickListener {
|
||||
val faultReasonWindow = FaultReasonWindow(mActivity)
|
||||
faultReasonWindow.showFloatWindow()
|
||||
if(ProjectUtils.isSaas()){
|
||||
val faultReasonWindow = FaultReasonWindow(mActivity)
|
||||
faultReasonWindow.showFloatWindow()
|
||||
}else{
|
||||
//展示工单上报弹窗
|
||||
val workOrderWindow = WorkOrderWindow(mActivity)
|
||||
workOrderWindow.showFloatWindow()
|
||||
}
|
||||
clickListener?.closeWindow()
|
||||
}
|
||||
//主动录包
|
||||
@@ -287,7 +292,7 @@ class ReportTypeWindow constructor(activity: Activity): IMoGoDevaToolsListener {
|
||||
/**
|
||||
* 设置弹窗展示状态
|
||||
*/
|
||||
fun setWindowShowStatus(isShow: Boolean){
|
||||
private fun setWindowShowStatus(isShow: Boolean){
|
||||
isShowing = isShow
|
||||
}
|
||||
|
||||
@@ -312,6 +317,7 @@ class ReportTypeWindow constructor(activity: Activity): IMoGoDevaToolsListener {
|
||||
override fun problemPadAddError(msg: String) {
|
||||
super.problemPadAddError(msg)
|
||||
ToastUtils.showShort("故障原因上报失败$msg")
|
||||
clickListener?.closeWindow()
|
||||
}
|
||||
|
||||
override fun getCategoriesSuccess(list: List<CategoryInfo>) {
|
||||
|
||||
@@ -109,6 +109,8 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
private var level2Name: String = ""
|
||||
private var level3Name: String = ""
|
||||
|
||||
private var isShowing: Boolean = false //弹窗是否是展示状态
|
||||
|
||||
init {
|
||||
initFloatWindow()
|
||||
}
|
||||
@@ -156,14 +158,19 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
//选择了接管类型
|
||||
tvTakeOverType.performClick()
|
||||
if(level2Id != 0 && level2Id == reason.id){
|
||||
//故障类型选择没有变化
|
||||
//接管类型选择没有变化
|
||||
reasonList?.let { orderReasonAdapter.setData(it,2) }
|
||||
}else{
|
||||
//接管类型发生变化
|
||||
level2Id = reason.id
|
||||
level2Name = reason.name
|
||||
source = 2
|
||||
//获取故障三级分类即故障原因
|
||||
//获取接管三级分类即接管原因
|
||||
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,3,level2Id,type,0)
|
||||
//将接管原因置空
|
||||
tvTakeOverReason.text = ""
|
||||
level3Name = ""
|
||||
level3Id = 0
|
||||
}
|
||||
}else{
|
||||
//原因
|
||||
@@ -299,10 +306,12 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
mTakeOverRecordInfo.level3Name = level3Name
|
||||
CallerTakeOverManager.updateRecord(mActivity,mTakeOverRecordInfo)
|
||||
clickListener?.onSaveReason(mTakeOverRecordInfo)
|
||||
clickListener?.closeWindow()
|
||||
hideFloatWindow()
|
||||
}
|
||||
//取消
|
||||
tvTakeOverCancel.setOnClickListener {
|
||||
clickListener?.closeWindow()
|
||||
hideFloatWindow()
|
||||
}
|
||||
}
|
||||
@@ -421,9 +430,6 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
// 更新浮动窗口位置参数
|
||||
mInScreenX = motionEvent.rawX
|
||||
mInScreenY = motionEvent.rawY
|
||||
if(((mInScreenX - mInViewX)-mWindowParams!!.x).absoluteValue>150 || ((mInScreenY - mInViewY)-mWindowParams!!.y).absoluteValue>150){
|
||||
return true
|
||||
}
|
||||
mWindowParams!!.x = (mInScreenX - mInViewX).toInt()
|
||||
mWindowParams!!.y = (mInScreenY - mInViewY).toInt()
|
||||
// 手指移动的时候更新小悬浮窗的位置
|
||||
@@ -451,21 +457,40 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
tvTakeOverTime.text = mActivity.resources.getString(R.string.take_over_time) +
|
||||
millis2String(mTakeOverRecordInfo.faultStartTime, TimeUtils.getHourMinSecondFormat())
|
||||
}
|
||||
setWindowShowStatus(true)
|
||||
}
|
||||
|
||||
fun hideFloatWindow() {
|
||||
etNoteInput.clearFocus()
|
||||
if (mFloatLayout.parent != null){
|
||||
mWindowManager!!.removeView(mFloatLayout)
|
||||
}
|
||||
setWindowShowStatus(false)
|
||||
CallerDevaToolsListenerManager.removeListener(TAG)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取弹窗展示状态
|
||||
*/
|
||||
fun getWindowShowStatus(): Boolean{
|
||||
return isShowing
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置弹窗展示状态
|
||||
*/
|
||||
private fun setWindowShowStatus(isShow: Boolean){
|
||||
isShowing = isShow
|
||||
}
|
||||
|
||||
fun setClickListener(clickListener: ClickListener) {
|
||||
this.clickListener = clickListener
|
||||
}
|
||||
|
||||
interface ClickListener {
|
||||
fun onSaveReason(info: TakeOverRecordInfo)
|
||||
|
||||
fun closeWindow()
|
||||
}
|
||||
|
||||
override fun getCategoriesSuccess(list: List<CategoryInfo>) {
|
||||
|
||||
@@ -58,6 +58,7 @@ class TakeOverRecordView @JvmOverloads constructor(
|
||||
private var clickListener: ClickListener? = null
|
||||
private val selectedUploadRecord = ArrayList<TakeOverRecordInfo>()
|
||||
private var recordList: MutableList<TakeOverRecordInfo> ?= null
|
||||
private var takeOverReasonWindow: TakeOverReasonWindow ?= null
|
||||
|
||||
init {
|
||||
LayoutInflater.from(context).inflate(R.layout.view_take_over_record, this, true)
|
||||
@@ -80,13 +81,23 @@ class TakeOverRecordView @JvmOverloads constructor(
|
||||
//展示接管原因窗口
|
||||
val activity = context as? FragmentActivity
|
||||
?: throw IllegalStateException("please ensure context is FragmentActivity.")
|
||||
val takeOverReasonWindow = TakeOverReasonWindow(activity)
|
||||
takeOverReasonWindow.setClickListener(object: TakeOverReasonWindow.ClickListener{
|
||||
override fun onSaveReason(info: TakeOverRecordInfo) {
|
||||
takeOverListAdapter?.notifyRecordItemChanged(info)
|
||||
}
|
||||
})
|
||||
takeOverReasonWindow.showFloatWindow(takeOverRecordInfo)
|
||||
if(takeOverReasonWindow == null){
|
||||
takeOverReasonWindow = TakeOverReasonWindow(activity)
|
||||
takeOverReasonWindow?.setClickListener(object: TakeOverReasonWindow.ClickListener{
|
||||
override fun onSaveReason(info: TakeOverRecordInfo) {
|
||||
takeOverListAdapter?.notifyRecordItemChanged(info)
|
||||
}
|
||||
|
||||
override fun closeWindow() {
|
||||
takeOverReasonWindow = null
|
||||
}
|
||||
})
|
||||
}
|
||||
if(takeOverReasonWindow?.getWindowShowStatus() == true){
|
||||
ToastUtils.showShort("接管原因弹窗已存在,请先编辑现有接管原因")
|
||||
}else{
|
||||
takeOverReasonWindow?.showFloatWindow(takeOverRecordInfo)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSelectRecord(
|
||||
@@ -143,14 +154,28 @@ class TakeOverRecordView @JvmOverloads constructor(
|
||||
if(selectedUploadRecord.isEmpty()){
|
||||
ToastUtils.showShort("请选择需要删除的接管记录")
|
||||
}else{
|
||||
val iterator = selectedUploadRecord.iterator()
|
||||
while (iterator.hasNext()){
|
||||
val removeRecord = iterator.next()
|
||||
CallerTakeOverManager.deleteRecord(context,removeRecord)
|
||||
scope.launch(Dispatchers.IO){
|
||||
val iterator = selectedUploadRecord.iterator()
|
||||
while (iterator.hasNext()){
|
||||
val removeRecord = iterator.next()
|
||||
CallerTakeOverManager.deleteRecord(context,removeRecord)
|
||||
// takeOverListAdapter?.notifyRecordItemRemoved(removeRecord)
|
||||
iterator.remove()
|
||||
iterator.remove()
|
||||
}
|
||||
recordList = CallerTakeOverManager.getAllRecord(context)
|
||||
ThreadUtils.runOnUiThread {
|
||||
if(recordList.isNullOrEmpty()){
|
||||
tvRecordNoData.visibility = View.VISIBLE
|
||||
recordGroup.visibility = View.GONE
|
||||
}else{
|
||||
tvRecordNoData.visibility = View.GONE
|
||||
recordGroup.visibility = View.VISIBLE
|
||||
//更新列表
|
||||
takeOverListAdapter?.setData(recordList!!)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
refreshList()
|
||||
}
|
||||
}
|
||||
//获取接管记录列表
|
||||
@@ -198,6 +223,7 @@ class TakeOverRecordView @JvmOverloads constructor(
|
||||
CallerTakeOverManager.updateRecord(context,it)
|
||||
takeOverListAdapter?.notifyRecordItemChanged(it)
|
||||
}
|
||||
selectedUploadRecord.clear()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -239,7 +239,7 @@ class WorkOrderWindow constructor(activity: Activity) : View.OnTouchListener,
|
||||
}
|
||||
//取消
|
||||
tvWorkOrderCancel.setOnClickListener {
|
||||
clickListener?.closeWindow()
|
||||
hideFloatWindow()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -356,9 +356,6 @@ class WorkOrderWindow constructor(activity: Activity) : View.OnTouchListener,
|
||||
// 更新浮动窗口位置参数
|
||||
mInScreenX = motionEvent.rawX
|
||||
mInScreenY = motionEvent.rawY
|
||||
if(((mInScreenX - mInViewX)-mWindowParams!!.x).absoluteValue>150 || ((mInScreenY - mInViewY)-mWindowParams!!.y).absoluteValue>150){
|
||||
return true
|
||||
}
|
||||
mWindowParams!!.x = (mInScreenX - mInViewX).toInt()
|
||||
mWindowParams!!.y = (mInScreenY - mInViewY).toInt()
|
||||
// 手指移动的时候更新小悬浮窗的位置
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="@dimen/dp_960"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="@dimen/dp_72"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:background="@drawable/bg_take_over_record">
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.mogo.eagle.core.function.hmi.ui.setting
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.text.method.ScrollingMovementMethod
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.widget.FrameLayout
|
||||
@@ -35,6 +36,7 @@ class FSMStatusDetailView @JvmOverloads constructor(
|
||||
private fun initView() {
|
||||
tvTitle = findViewById(R.id.tvTitle)
|
||||
tvContent = findViewById(R.id.tvContent)
|
||||
tvContent?.movementMethod = ScrollingMovementMethod.getInstance()
|
||||
}
|
||||
|
||||
fun setFsmMsg(title: String, titleColor: String , content: String) {
|
||||
|
||||
@@ -6,7 +6,6 @@ import android.content.pm.PackageManager
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
import android.view.Gravity
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.FrameLayout
|
||||
@@ -26,19 +25,16 @@ import com.mogo.commons.module.status.MogoStatusManager
|
||||
import com.mogo.commons.mvp.MvpActivity
|
||||
import com.mogo.commons.utils.MogoAnalyticUtils
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo
|
||||
import com.mogo.eagle.core.data.config.HdMapBuildConfig
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
|
||||
import com.mogo.eagle.core.function.api.setting.IMoGoRequestActivityHandler
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
|
||||
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
|
||||
import com.mogo.eagle.core.function.call.hmi.CallerHmiFloatViewManager
|
||||
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
|
||||
import com.mogo.eagle.core.function.call.setting.CallerRequestActivityHandleManager
|
||||
import com.mogo.eagle.core.function.call.startup.CallerStartUpManager.initStageTwo
|
||||
import com.mogo.eagle.core.function.hmi.R
|
||||
import com.mogo.eagle.core.function.hmi.ui.widget.StatusBarView
|
||||
import com.mogo.eagle.core.function.main.modules.MogoModulesManager
|
||||
import com.mogo.eagle.core.function.main.windowview.FloatingViewHandler
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppLaunchTimeUtils
|
||||
@@ -49,9 +45,6 @@ import com.mogo.eagle.core.utilcode.mogo.permissions.PermissionsDialogUtils
|
||||
import com.mogo.eagle.core.utilcode.util.NetworkUtils
|
||||
import com.mogo.eagle.core.utilcode.util.ProcessUtils
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
|
||||
import com.mogo.map.listener.IMogoMapListener
|
||||
import com.mogo.map.listener.MogoMapListenerHandler.Companion.mogoMapListenerHandler
|
||||
import com.mogo.map.uicontroller.EnumMapUI
|
||||
import com.zhjt.mogo.adas.data.AdasConstants
|
||||
import com.zhjt.service.chain.ChainLog
|
||||
import kotlinx.android.synthetic.main.module_main_activity_main.module_main_id_cover_up
|
||||
@@ -73,7 +66,8 @@ open class MainActivity : MvpActivity<MainView?, MainPresenter?>(), MainView,
|
||||
private var isFirst = false
|
||||
private var mConnAdapter: ConnInfoAdapter? = null
|
||||
private val dataList: List<AutopilotStatusInfo> = ArrayList()
|
||||
// private var mLastStatus = AdasConstants.IpcConnectionStatus.CONNECTED
|
||||
|
||||
// private var mLastStatus = AdasConstants.IpcConnectionStatus.CONNECTED
|
||||
private var mLastStatus = AdasConstants.IpcConnectionStatus.DISCONNECTED
|
||||
private var isFloatingLayerHidden = false
|
||||
|
||||
@@ -326,6 +320,10 @@ open class MainActivity : MvpActivity<MainView?, MainPresenter?>(), MainView,
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
val properties = java.util.HashMap<String, Any>()
|
||||
properties["app_destroy_time"] = System.currentTimeMillis()
|
||||
MogoAnalyticUtils.track("app_lifecycle_destroy", properties)
|
||||
|
||||
CallerAutoPilotStatusListenerManager.removeListener(TAG)
|
||||
CallerRequestActivityHandleManager.removeListener(TAG)
|
||||
//mogoMapListenerHandler.unregisterHostMapListener(TAG)
|
||||
|
||||
@@ -20,6 +20,8 @@ import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils;
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppLaunchTimeUtils;
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* 默认初始化一些基础服务配置
|
||||
*/
|
||||
@@ -45,6 +47,15 @@ public abstract class MainMoGoApplication extends AbsMogoApplication {
|
||||
initModules();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTerminate() {
|
||||
super.onTerminate();
|
||||
|
||||
HashMap<String, Object> properties = new HashMap<>();
|
||||
properties.put("app_destroy_time", System.currentTimeMillis());
|
||||
MogoAnalyticUtils.INSTANCE.track("app_lifecycle_destroy", properties);
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化异常采集配置
|
||||
*/
|
||||
@@ -56,6 +67,11 @@ public abstract class MainMoGoApplication extends AbsMogoApplication {
|
||||
protected void initLogConfig() {
|
||||
// 初始化埋点
|
||||
MogoAnalyticUtils.INSTANCE.init(this, DebugConfig.isDebug());
|
||||
|
||||
HashMap<String, Object> properties = new HashMap<>();
|
||||
properties.put("app_start_time", System.currentTimeMillis());
|
||||
MogoAnalyticUtils.INSTANCE.track("app_lifecycle_start", properties);
|
||||
|
||||
// 初始化DevaTools,开始链路记录
|
||||
CallerDevaToolsManager.INSTANCE.init();
|
||||
}
|
||||
|
||||
@@ -33,6 +33,8 @@
|
||||
android:ellipsize="end"
|
||||
android:gravity="left|center_vertical"
|
||||
android:text=""
|
||||
android:maxLines="5"
|
||||
android:scrollbars="vertical"
|
||||
android:textColor="#D5D5D5"
|
||||
android:textSize="@dimen/dp_28"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
|
||||
@@ -73,7 +73,7 @@ public class RouteOverlayDrawer {
|
||||
List<Integer> alphas = MapTools.INSTANCE.getColorAlpha(temps);
|
||||
if (alphas != null && !alphas.isEmpty()) {
|
||||
for (int i : alphas) {
|
||||
greenWaveColors.add(Color.argb(i, 109,254,208));
|
||||
greenWaveColors.add(Color.argb(i, 48, 163, 255));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -151,7 +151,7 @@ public class RouteOverlayDrawer {
|
||||
if (alphas != null && !alphas.isEmpty()) {
|
||||
colors = new CopyOnWriteArrayList<>();
|
||||
for (int i : alphas) {
|
||||
colors.add(Color.argb(i, 48,203,251));
|
||||
colors.add(Color.argb(i, 48,163,255));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user