From 478be4a2636e9a2299c04e628e857322532a04ba Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Fri, 17 Feb 2023 19:06:48 +0800 Subject: [PATCH 1/5] =?UTF-8?q?[dev=5Farch=5Fopt=5F3.0]=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96obu=20v2i=E5=92=8Cv2v=E5=BC=80=E5=85=B3=EF=BC=8C?= =?UTF-8?q?=E5=B0=81=E8=A3=85=E8=B0=83=E7=94=A8=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datacenter/obu/MoGoObuProvider.kt | 38 +- .../obu/MogoPrivateObuNewManager.kt | 660 +++++++++--------- .../mogo-core-function-hmi/build.gradle | 1 - .../hmi/ui/setting/DebugSettingView.kt | 12 +- .../function/hmi/ui/setting/SOPSettingView.kt | 9 +- .../src/main/res/layout/view_sop_setting.xml | 2 + .../eagle/core/data/config/HmiBuildConfig.kt | 4 +- .../mogo/eagle/core/data/obu/ObuStatusInfo.kt | 5 - .../core/function/api/obu/IMoGoObuProvider.kt | 2 + .../function/call/obu/CallerObuApiManager.kt | 7 + 10 files changed, 384 insertions(+), 356 deletions(-) diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MoGoObuProvider.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MoGoObuProvider.kt index 29eb90cdbc..0e6f1f200d 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MoGoObuProvider.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MoGoObuProvider.kt @@ -20,7 +20,6 @@ import com.mogo.support.obu.MogoObuManager @Route(path = MogoServicePaths.PATH_V2X_OBU_MOGO) class MoGoObuProvider : IMoGoObuProvider { private val TAG = "MoGoObuProvider" - private var mContext: Context? = null private val taxiObuIp = "192.168.1.199" //obu的taxi和bus的ip已经全部统一成1网段ip @@ -36,10 +35,11 @@ class MoGoObuProvider : IMoGoObuProvider { MogoObuDcCombineManager.INSTANCE.init(context) CallerLogger.d("$M_OBU$TAG", "初始化蘑菇自研OBU…… localIp = " + CommonUtils.getLocalIPAddress()) - //bus乘客版本obu功能去掉,大理项目需要全部车辆接收,不在限制 + //bus乘客版本obu功能去掉,大理项目需要全部车辆接收,不再限制 mContext = context mContext?.let { - val ipAddress = SharedPrefsMgr.getInstance(context).getString(MoGoConfig.OBU_IP, taxiObuIp) + val ipAddress = + SharedPrefsMgr.getInstance(context).getString(MoGoConfig.OBU_IP, taxiObuIp) //mogo obu MogoPrivateObuNewManager.INSTANCE.connectObu( it, @@ -53,32 +53,28 @@ class MoGoObuProvider : IMoGoObuProvider { * 通过控制面板设置ip,进行传递 */ override fun connect(ipAddress: String) { - if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) - && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) - ) { - //不处理 - } else { - mContext?.let { - // 保存本地OBU IP地址 - SharedPrefsMgr.getInstance(it).putString(MoGoConfig.OBU_IP, ipAddress) + mContext?.let { + // 保存本地OBU IP地址 + SharedPrefsMgr.getInstance(it).putString(MoGoConfig.OBU_IP, ipAddress) - //连接 mogo obu - MogoPrivateObuNewManager.INSTANCE.connectObu( - it, - ipAddress, - CommonUtils.getIpAddressString() - ) - - } + //连接 mogo obu + MogoPrivateObuNewManager.INSTANCE.connectObu( + it, + ipAddress, + CommonUtils.getIpAddressString() + ) } } override fun disConnect() { - MogoPrivateObuNewManager.INSTANCE.disconnect() + MogoPrivateObuNewManager.INSTANCE.disConnectObu() } override fun isConnected(): Boolean { - return MogoObuManager.getInstance().connectStatus == 1 + return MogoPrivateObuNewManager.INSTANCE.isConnected() } + override fun setObuLog(isChecked: Boolean) { + MogoPrivateObuNewManager.INSTANCE.setObuLog(isChecked) + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt index 71a0eab932..cf1a909d8c 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt @@ -29,9 +29,11 @@ import com.mogo.support.obu.ObuBase import com.mogo.support.obu.ObuScene import com.mogo.support.obu.constants.MogoObuComType import com.mogo.support.obu.constants.MogoObuConstants +import com.mogo.support.obu.constants.MogoObuLogLevel import com.mogo.support.obu.constants.MogoObuTopicId import com.mogo.support.obu.model.* import com.mogo.support.obu.option.MogoObuCom +import com.mogo.support.obu.option.MogoObuLog import com.mogo.support.obu.option.MogoObuOptions import com.zhidao.support.obu.ObuManager import com.zhidao.support.obu.OnObuListener @@ -74,7 +76,7 @@ class MogoPrivateObuNewManager private constructor() { .build() //每次连接的时候如果连接连接了,先断开,防止ip改变等导致的连接失败 - if (ObuManager.getInstance().connectStatus == 1) { + if (ObuManager.getInstance().connectStatus == MogoObuConstants.CONNECT_STATUS.CONNECTED) { try { ObuManager.getInstance().disconnect() } catch (e: Exception) { @@ -84,12 +86,33 @@ class MogoPrivateObuNewManager private constructor() { ObuManager.getInstance().connect(options) } - fun getMogoObuListener(): OnObuListener { - return mogoObuListener + + /** + * 断开新obu + */ + fun disConnectObu() { + try { + ObuManager.getInstance().disconnect() + } catch (e: Exception) { + e.printStackTrace() + } } - fun disconnect() { - ObuManager.getInstance().disconnect() + /** + * 新obu是否连接 + */ + fun isConnected(): Boolean { + return ObuManager.getInstance().connectStatus == MogoObuConstants.CONNECT_STATUS.CONNECTED + } + + fun setObuLog(isChecked: Boolean) { + ObuManager.getInstance().setEnableLog(isChecked) + val builder: com.mogo.support.obu.option.MogoObuLog.Builder = + MogoObuLog.newBuilder().setEnableStdio(isChecked) + if (isChecked) { + builder.setStdioLevel(MogoObuLogLevel.DBG) + } + ObuManager.getInstance().logConfig(builder.build()) } private val mogoObuListener: OnObuListener = object : OnObuListener { @@ -133,260 +156,270 @@ class MogoPrivateObuNewManager private constructor() { * v2v预警信息 CvxRvInfoIndInfo CvxV2vThreatIndInfo 他车 */ override fun onObuRvWarning(data: ObuScene.RvWarningData) { -// if (HmiBuildConfig.isShowObuV2vView) { //TODO 临时需要关闭v2v开关 - if (data.warningMsg != null && !data.warningMsg.warningDataList.isNullOrEmpty()) { - // 更新数据,远车数据,之前要匹配uuid - TrafficDataConvertUtilsNew.cvxRvInfoIndInfo2TrafficData(data.vehBasicsMsg)?.let { - CallerMapUIServiceManager.getMarkerService()?.updateITrafficLocationInfo(it) - } - - CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", data.toString()) - data.let { - //预警信息,预警类型 threat_level 2、3 - data.vehBasicsMsg?.let { - //预警方位 - val direction = getMessageDirection(data.vehBasicsMsg.targetPosition) - //处理预警类型 - var appId = "" - var level = -1 - var status = -1 - data.warningMsg?.let { - if (data.warningMsg.warningDataList != null && data.warningMsg.warningDataList.size > 0) { - level = data.warningMsg.warningDataList[0].warningLevel - appId = data.warningMsg.warningDataList[0].warningType.toString() - status = data.warningMsg.warningDataList[0].status - //拼凑数据 - handleSdkObu(appId, direction, status, level, data) - } + if (HmiBuildConfig.isShowObuV2vView) { + if (data.warningMsg != null && !data.warningMsg.warningDataList.isNullOrEmpty()) { + // 更新数据,远车数据,之前要匹配uuid + TrafficDataConvertUtilsNew.cvxRvInfoIndInfo2TrafficData(data.vehBasicsMsg) + ?.let { + CallerMapUIServiceManager.getMarkerService() + ?.updateITrafficLocationInfo(it) } - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", - "onMogoObuRvWarning target_classification = ${ - getMessageDirection(data.vehBasicsMsg.targetPosition) - } --- direction = $direction --- appId = $appId ---level = $level -- status = $status" - ) + CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", data.toString()) + data.let { + //预警信息,预警类型 threat_level 2、3 + data.vehBasicsMsg?.let { + //预警方位 + val direction = getMessageDirection(data.vehBasicsMsg.targetPosition) + //处理预警类型 + var appId = "" + var level = -1 + var status = -1 + data.warningMsg?.let { + if (data.warningMsg.warningDataList != null && data.warningMsg.warningDataList.size > 0) { + level = data.warningMsg.warningDataList[0].warningLevel + appId = + data.warningMsg.warningDataList[0].warningType.toString() + status = data.warningMsg.warningDataList[0].status + //拼凑数据 + handleSdkObu(appId, direction, status, level, data) + } + } + + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", + "onMogoObuRvWarning target_classification = ${ + getMessageDirection(data.vehBasicsMsg.targetPosition) + } --- direction = $direction --- appId = $appId ---level = $level -- status = $status" + ) + } } } } -// } } /** * 红绿灯预警信息 CvxIvpThreatIndInfo */ override fun onObuSpatWarning(data: ObuScene.SpatWarningData) { - handlerTrafficLight( - data.warningType, - data.status, - data.lightsList - ) + if (HmiBuildConfig.isShowObuV2iView) { + handlerTrafficLight( + data.warningType, + data.status, + data.lightsList + ) + } } /** * RSI预警信息 onMogoObuRsiWarning(交通标志预警(前方限速、前方学校等等),交通事件预警(前方拥堵、前方积水等等)) */ override fun onObuRsiWarning(data: ObuScene.RsiWarningData) { -// if (HmiBuildConfig.isShowObuV2iView) { - if (data.warningMsgList != null && data.warningMsgList.size > 0) { - var alertContent = "" - var ttsContent = "" - var appId = data.warningMsgList[0].sceneType.toString() - val status = data.status - val level = data.warningMsgList[0].warningLevel - val direction = getMessageDirection(data.warningMsgList[0].targetPosition) - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", - "onMogoObuRsiWarning appId = $appId --status = $status --level = $level -- eventSerialNum = ${data.warningMsgList[0].eventSerialNum} ---signSerialNum = ${data.warningMsgList[0].signSerialNum} --- direction = $direction -- targetPosition = ${data.warningMsgList[0].targetPosition}" - ) + if (HmiBuildConfig.isShowObuV2iView) { + if (data.warningMsgList != null && data.warningMsgList.size > 0) { + var alertContent = "" + var ttsContent = "" + var appId = data.warningMsgList[0].sceneType.toString() + val status = data.status + val level = data.warningMsgList[0].warningLevel + val direction = getMessageDirection(data.warningMsgList[0].targetPosition) + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", + "onMogoObuRsiWarning appId = $appId --status = $status --level = $level -- eventSerialNum = ${data.warningMsgList[0].eventSerialNum} ---signSerialNum = ${data.warningMsgList[0].signSerialNum} --- direction = $direction -- targetPosition = ${data.warningMsgList[0].targetPosition}" + ) - if (appId != "0") { - when (appId) { - // 道路危险情况预警 - MogoObuConstants.RSI_SCENE_TYPE.HLW.toString() -> { - when (data.warningMsgList[0].eventSerialNum) { - MogoObuConstants.RTE.RTI_TYPE_BREAKDOWN -> {//车辆故障 - appId = - EventTypeEnumNew.TYPE_USECASE_ID_BREAKDOWN_WARNING.poiType - } - MogoObuConstants.RTE.RTI_TYPE_ROAD_WATER -> { //道路积水 - appId = EventTypeEnumNew.FOURS_PONDING.poiType - } - MogoObuConstants.RTE.RTI_TYPE_PARKING_VIOLATION -> { //异常停车 - appId = EventTypeEnumNew.TYPE_USECASE_ID_ROAD_PARKING.poiType - } + if (appId != "0") { + when (appId) { + // 道路危险情况预警 + MogoObuConstants.RSI_SCENE_TYPE.HLW.toString() -> { + when (data.warningMsgList[0].eventSerialNum) { + MogoObuConstants.RTE.RTI_TYPE_BREAKDOWN -> {//车辆故障 + appId = + EventTypeEnumNew.TYPE_USECASE_ID_BREAKDOWN_WARNING.poiType + } + MogoObuConstants.RTE.RTI_TYPE_ROAD_WATER -> { //道路积水 + appId = EventTypeEnumNew.FOURS_PONDING.poiType + } + MogoObuConstants.RTE.RTI_TYPE_PARKING_VIOLATION -> { //异常停车 + appId = + EventTypeEnumNew.TYPE_USECASE_ID_ROAD_PARKING.poiType + } // MogoObuConstants.RTE.RTI_TYPE_CONSTRUCTION_RTE -> { //施工占道,和标牌重复 // appId = EventTypeEnumNew.FOURS_ROAD_WORK.poiType // } - MogoObuConstants.RTE.RTI_TYPE_SPEEDING -> { //超速行驶 - appId = EventTypeEnumNew.TYPE_USECASE_ID_SLW.poiType - } - MogoObuConstants.RTE.RTI_TYPE_RETRIGRADE -> { //车辆逆行 - appId = - EventTypeEnumNew.TYPE_USECASE_ID_ROAD_VEHICLE_RETROGRADE.poiType + MogoObuConstants.RTE.RTI_TYPE_SPEEDING -> { //超速行驶 + appId = EventTypeEnumNew.TYPE_USECASE_ID_SLW.poiType + } + MogoObuConstants.RTE.RTI_TYPE_RETRIGRADE -> { //车辆逆行 + appId = + EventTypeEnumNew.TYPE_USECASE_ID_ROAD_VEHICLE_RETROGRADE.poiType + } } + alertContent = EventTypeEnumNew.getWarningContent(appId) + ttsContent = EventTypeEnumNew.getWarningTts(appId) + alertContent = String.format( //事件才有影响范围 + alertContent, + Math.round(data.warningMsgList[0].distance).toString(), + Math.round(data.warningMsgList[0].eventRadius).toString() + ) + ttsContent = String.format( + ttsContent, + Math.round(data.warningMsgList[0].distance).toString(), + Math.round(data.warningMsgList[0].eventRadius).toString() + ) } - alertContent = EventTypeEnumNew.getWarningContent(appId) - ttsContent = EventTypeEnumNew.getWarningTts(appId) - alertContent = String.format( //事件才有影响范围 - alertContent, - Math.round(data.warningMsgList[0].distance).toString(), - Math.round(data.warningMsgList[0].eventRadius).toString() - ) - ttsContent = String.format( - ttsContent, - Math.round(data.warningMsgList[0].distance).toString(), - Math.round(data.warningMsgList[0].eventRadius).toString() - ) - } - //车内标牌 - MogoObuConstants.RSI_SCENE_TYPE.IVS.toString() -> { - when (data.warningMsgList[0].signSerialNum) { - MogoObuConstants.RTS.RTI_TYPE_SHAPR_TURNS -> { //急转弯 - appId = EventTypeEnumNew.TYPE_ID_SHAPR_TURNS.poiType - } - MogoObuConstants.RTS.RTI_TYPE_BRIDGE -> { //桥梁 - appId = EventTypeEnumNew.TYPE_ID_BRIDGE.poiType - } - MogoObuConstants.RTS.RTI_TYPE_PEDESTRIAN -> { //行人 - appId = EventTypeEnumNew.TYPE_ID_PEDESTRIAN.poiType - } - MogoObuConstants.RTS.RTI_TYPE_SLIPPERY_ROAD -> { //路滑 - appId = EventTypeEnumNew.TYPE_ID_SLIPPERY_ROAD.poiType - } - MogoObuConstants.RTS.RTI_TYPE_TUNNEL -> { //隧道 - appId = EventTypeEnumNew.TYPE_ID_TUNNEL.poiType - } - MogoObuConstants.RTS.RTI_TYPE_FERRY -> { //渡轮 - appId = EventTypeEnumNew.TYPE_ID_FERRY.poiType - } - MogoObuConstants.RTS.RTI_TYPE_UNEVEN_ROAD -> { //路面不平 - appId = EventTypeEnumNew.TYPE_ID_UNEVEN_ROAD.poiType - } - MogoObuConstants.RTS.RTI_TYPE_NON_MOTOR_VEHICLE -> { //非机动车 - appId = EventTypeEnumNew.TYPE_ID_NON_MOTOR_VEHICLE.poiType - } - MogoObuConstants.RTS.RTI_TYPE_OBSTACLE -> { //障碍 - appId = EventTypeEnumNew.TYPE_ID_OBSTACLE.poiType - } - MogoObuConstants.RTS.RTI_TYPE_CONSTRUCTION -> { //施工 - appId = EventTypeEnumNew.TYPE_FOURS_ROAD_WORK.poiType - } - MogoObuConstants.RTS.RTI_TYPE_VEHICLE_QUEUE -> { //车队 - appId = EventTypeEnumNew.TYPE_VEHICLE_QUEUE.poiType - } - MogoObuConstants.RTS.RTI_TYPE_NO_PASSING -> { //不通 - appId = EventTypeEnumNew.TYPE_NO_PASSING.poiType - } - MogoObuConstants.RTS.RTI_TYPE_NO_TURNING_AROUND -> { //禁止掉头 - appId = EventTypeEnumNew.TYPE_NO_TURNING_AROUND.poiType - } - MogoObuConstants.RTS.RTI_TYPE_NO_STOPPING -> { //禁止停车 - appId = EventTypeEnumNew.TYPE_USECASE_ID_ROAD_NO_PARKING.poiType - } - MogoObuConstants.RTS.RTI_TYPE_NO_TOOTING -> { //禁止鸣笛 - appId = EventTypeEnumNew.TYPE_USECASE_ID_ROAD_NO_TOOTING.poiType - } + //车内标牌 + MogoObuConstants.RSI_SCENE_TYPE.IVS.toString() -> { + when (data.warningMsgList[0].signSerialNum) { + MogoObuConstants.RTS.RTI_TYPE_SHAPR_TURNS -> { //急转弯 + appId = EventTypeEnumNew.TYPE_ID_SHAPR_TURNS.poiType + } + MogoObuConstants.RTS.RTI_TYPE_BRIDGE -> { //桥梁 + appId = EventTypeEnumNew.TYPE_ID_BRIDGE.poiType + } + MogoObuConstants.RTS.RTI_TYPE_PEDESTRIAN -> { //行人 + appId = EventTypeEnumNew.TYPE_ID_PEDESTRIAN.poiType + } + MogoObuConstants.RTS.RTI_TYPE_SLIPPERY_ROAD -> { //路滑 + appId = EventTypeEnumNew.TYPE_ID_SLIPPERY_ROAD.poiType + } + MogoObuConstants.RTS.RTI_TYPE_TUNNEL -> { //隧道 + appId = EventTypeEnumNew.TYPE_ID_TUNNEL.poiType + } + MogoObuConstants.RTS.RTI_TYPE_FERRY -> { //渡轮 + appId = EventTypeEnumNew.TYPE_ID_FERRY.poiType + } + MogoObuConstants.RTS.RTI_TYPE_UNEVEN_ROAD -> { //路面不平 + appId = EventTypeEnumNew.TYPE_ID_UNEVEN_ROAD.poiType + } + MogoObuConstants.RTS.RTI_TYPE_NON_MOTOR_VEHICLE -> { //非机动车 + appId = EventTypeEnumNew.TYPE_ID_NON_MOTOR_VEHICLE.poiType + } + MogoObuConstants.RTS.RTI_TYPE_OBSTACLE -> { //障碍 + appId = EventTypeEnumNew.TYPE_ID_OBSTACLE.poiType + } + MogoObuConstants.RTS.RTI_TYPE_CONSTRUCTION -> { //施工 + appId = EventTypeEnumNew.TYPE_FOURS_ROAD_WORK.poiType + } + MogoObuConstants.RTS.RTI_TYPE_VEHICLE_QUEUE -> { //车队 + appId = EventTypeEnumNew.TYPE_VEHICLE_QUEUE.poiType + } + MogoObuConstants.RTS.RTI_TYPE_NO_PASSING -> { //不通 + appId = EventTypeEnumNew.TYPE_NO_PASSING.poiType + } + MogoObuConstants.RTS.RTI_TYPE_NO_TURNING_AROUND -> { //禁止掉头 + appId = EventTypeEnumNew.TYPE_NO_TURNING_AROUND.poiType + } + MogoObuConstants.RTS.RTI_TYPE_NO_STOPPING -> { //禁止停车 + appId = + EventTypeEnumNew.TYPE_USECASE_ID_ROAD_NO_PARKING.poiType + } + MogoObuConstants.RTS.RTI_TYPE_NO_TOOTING -> { //禁止鸣笛 + appId = + EventTypeEnumNew.TYPE_USECASE_ID_ROAD_NO_TOOTING.poiType + } // MogoObuConstants.RTS.RTI_TYPE_SPEED_LIMIT -> { //限速 // appId = // EventTypeEnumNew.TYPE_USECASE_ID_ROAD_SPEED_LIMIT.poiType // } - MogoObuConstants.RTS.RTI_TYPE_BUS_WARNING -> { //公交提醒 - appId = EventTypeEnumNew.TYPE_USECASE_ID_BUS_WARNING.poiType - } - MogoObuConstants.RTS.RTI_TYPE_NARROW_RIGHT -> { //右侧变窄/车道数减少 - appId = EventTypeEnumNew.TYPE_USECASE_ID_NARROW_RIGHT.poiType - } - MogoObuConstants.RTS.RTI_TYPE_GAS_STATION -> { //加油站 - appId = EventTypeEnumNew.TYPE_USECASE_ID_GAS_STATION.poiType - } - MogoObuConstants.RTS.RTI_TYPE_SCHOOL -> { //学校 - appId = - EventTypeEnumNew.TYPE_USECASE_ID_ROAD_PEDESTRIAN_SCHOOL.poiType - } - MogoObuConstants.RTS.RTI_TYPE_ACCIDENT -> { //事故 - appId = EventTypeEnumNew.TYPE_USECASE_ID_ACCIDENT.poiType + MogoObuConstants.RTS.RTI_TYPE_BUS_WARNING -> { //公交提醒 + appId = EventTypeEnumNew.TYPE_USECASE_ID_BUS_WARNING.poiType + } + MogoObuConstants.RTS.RTI_TYPE_NARROW_RIGHT -> { //右侧变窄/车道数减少 + appId = + EventTypeEnumNew.TYPE_USECASE_ID_NARROW_RIGHT.poiType + } + MogoObuConstants.RTS.RTI_TYPE_GAS_STATION -> { //加油站 + appId = EventTypeEnumNew.TYPE_USECASE_ID_GAS_STATION.poiType + } + MogoObuConstants.RTS.RTI_TYPE_SCHOOL -> { //学校 + appId = + EventTypeEnumNew.TYPE_USECASE_ID_ROAD_PEDESTRIAN_SCHOOL.poiType + } + MogoObuConstants.RTS.RTI_TYPE_ACCIDENT -> { //事故 + appId = EventTypeEnumNew.TYPE_USECASE_ID_ACCIDENT.poiType + } } + + alertContent = EventTypeEnumNew.getWarningContent(appId) + ttsContent = EventTypeEnumNew.getWarningTts(appId) + alertContent = String.format( //标牌是没有影响范围的 + alertContent, + Math.round(data.warningMsgList[0].distance).toString() + ) + ttsContent = String.format( + ttsContent, + Math.round(data.warningMsgList[0].distance).toString() + ) } - alertContent = EventTypeEnumNew.getWarningContent(appId) - ttsContent = EventTypeEnumNew.getWarningTts(appId) - alertContent = String.format( //标牌是没有影响范围的 - alertContent, - Math.round(data.warningMsgList[0].distance).toString() - ) - ttsContent = String.format( - ttsContent, - Math.round(data.warningMsgList[0].distance).toString() - ) - } - - // 拥堵 - MogoObuConstants.RSI_SCENE_TYPE.TJW.toString() -> { - appId = EventTypeEnumNew.TYPE_USECASE_ID_TJW.poiType - alertContent = EventTypeEnumNew.getWarningContent(appId) - ttsContent = EventTypeEnumNew.getWarningTts(appId) - alertContent = String.format( //事件才有影响范围 - alertContent, - Math.round(data.warningMsgList[0].distance).toString(), - Math.round(data.warningMsgList[0].eventRadius).toString() - ) - ttsContent = String.format( - ttsContent, - Math.round(data.warningMsgList[0].distance).toString(), - Math.round(data.warningMsgList[0].eventRadius).toString() - ) - } - - //限速预警, ADD处理一次 - MogoObuConstants.RSI_SCENE_TYPE.SLW.toString() -> { - appId = EventTypeEnumNew.TYPE_USECASE_ID_ROAD_SPEED_LIMIT.poiType - alertContent = EventTypeEnumNew.getWarningContent(appId) - ttsContent = EventTypeEnumNew.getWarningTts(appId) - } - } - - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", - "new onMogoObuRsiWarning appId = $appId ---status = $status --- ttsContent = $ttsContent --alertContent = $alertContent -- eventSerialNum = ${data.warningMsgList[0].eventSerialNum} ---signSerialNum = ${data.warningMsgList[0].signSerialNum} ---direction = ${direction.direction} --distance = ${ - Math.round(data.warningMsgList[0].distance) - } ---eventRadius = ${Math.round(data.warningMsgList[0].eventRadius)} --speedMaxLimit = ${data.warningMsgList[0].speedMaxLimit.toInt()}" - ) - - when (status) { - MogoObuConstants.STATUS.ADD -> { // 添加 - //不显示弹框,语音提示,数据在消息盒子里面展示,此处不在处理弹框 - if (alertContent.isEmpty() || ttsContent.isEmpty()) { - return + // 拥堵 + MogoObuConstants.RSI_SCENE_TYPE.TJW.toString() -> { + appId = EventTypeEnumNew.TYPE_USECASE_ID_TJW.poiType + alertContent = EventTypeEnumNew.getWarningContent(appId) + ttsContent = EventTypeEnumNew.getWarningTts(appId) + alertContent = String.format( //事件才有影响范围 + alertContent, + Math.round(data.warningMsgList[0].distance).toString(), + Math.round(data.warningMsgList[0].eventRadius).toString() + ) + ttsContent = String.format( + ttsContent, + Math.round(data.warningMsgList[0].distance).toString(), + Math.round(data.warningMsgList[0].eventRadius).toString() + ) } - saveObuData(appId, alertContent, ttsContent) - showWarning(appId, alertContent, ttsContent, direction) - // 更新数据 - TrafficDataConvertUtilsNew.cvxRtiThreatIndInfo2TrafficData(data)?.let { - CallerMapUIServiceManager.getMarkerService() - ?.updateITrafficThreatLevelInfo(it) + //限速预警, ADD处理一次 + MogoObuConstants.RSI_SCENE_TYPE.SLW.toString() -> { + appId = EventTypeEnumNew.TYPE_USECASE_ID_ROAD_SPEED_LIMIT.poiType + alertContent = EventTypeEnumNew.getWarningContent(appId) + ttsContent = EventTypeEnumNew.getWarningTts(appId) } } - MogoObuConstants.STATUS.UPDATE -> { // 更新 - } + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", + "new onMogoObuRsiWarning appId = $appId ---status = $status --- ttsContent = $ttsContent --alertContent = $alertContent -- eventSerialNum = ${data.warningMsgList[0].eventSerialNum} ---signSerialNum = ${data.warningMsgList[0].signSerialNum} ---direction = ${direction.direction} --distance = ${ + Math.round(data.warningMsgList[0].distance) + } ---eventRadius = ${Math.round(data.warningMsgList[0].eventRadius)} --speedMaxLimit = ${data.warningMsgList[0].speedMaxLimit.toInt()}" + ) - MogoObuConstants.STATUS.DELETE -> { // 删除 - // 更新数据 - TrafficDataConvertUtilsNew.cvxRtiThreatIndInfo2TrafficData(data) - ?.let { - // 事件结束,还原车辆颜色 - it.threatLevel = 0x01 - CallerMapUIServiceManager.getMarkerService() - ?.updateITrafficInfo(it) + when (status) { + MogoObuConstants.STATUS.ADD -> { // 添加 + //不显示弹框,语音提示,数据在消息盒子里面展示,此处不在处理弹框 + if (alertContent.isEmpty() || ttsContent.isEmpty()) { + return } + saveObuData(appId, alertContent, ttsContent) + showWarning(appId, alertContent, ttsContent, direction) + + // 更新数据 + TrafficDataConvertUtilsNew.cvxRtiThreatIndInfo2TrafficData(data) + ?.let { + CallerMapUIServiceManager.getMarkerService() + ?.updateITrafficThreatLevelInfo(it) + } + } + + MogoObuConstants.STATUS.UPDATE -> { // 更新 + } + + MogoObuConstants.STATUS.DELETE -> { // 删除 + // 更新数据 + TrafficDataConvertUtilsNew.cvxRtiThreatIndInfo2TrafficData(data) + ?.let { + // 事件结束,还原车辆颜色 + it.threatLevel = 0x01 + CallerMapUIServiceManager.getMarkerService() + ?.updateITrafficInfo(it) + } + } } } } } -// } } /** @@ -405,133 +438,135 @@ class MogoPrivateObuNewManager private constructor() { "$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", "onMogoObuRsmWarning ------> ${data.toString()}" ) -// if (HmiBuildConfig.isShowObuV2iView) { - if (HmiBuildConfig.isShowObuWeaknessTrafficView) { - // 交通参与者类型 0x0:未知 UNKNOWN | 1机动车 2:非机动车 NON_MOTOR | 3:行人 PEDESTRIAN 4:obu - if (data != null && data.participant != null) { - var v2xType = "" - if (data.participant.ptcType == 1) { //机动车 - v2xType = - EventTypeEnumNew.TYPE_USECASE_ID_VRUCW_MOTOR_VEHICLES.poiType - } else if (data.participant.ptcType == 2) { //非机动车 - v2xType = - EventTypeEnumNew.TYPE_USECASE_ID_VRUCW_NOT_MOTOR_VEHICLES.poiType - } else if (data.participant.ptcType == 3) { //行人 - v2xType = - EventTypeEnumNew.TYPE_USECASE_ID_VRUCW_PERSON.poiType - } else { //未知 - v2xType = EventTypeEnumNew.TYPE_ERROR.poiType - } - - val ttsContent = EventTypeEnumNew.getWarningTts(v2xType) - val alertContent = - EventTypeEnumNew.getWarningContent(v2xType) - var level = -1 - val direction = getMessageDirection(data.participant.targetPosition) - - //物体数据绘制 - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", - "onMogoObuRsmWarning ---- data.status = ${data.status} ---data.participant.ptcId = ${data.participant.ptcId} ---data.participant.ptcType = ${data.participant.ptcType} ---data.warningMsg = ${data.warningMsg} -----data = ${data.toString()}" - ) - when (data.status) { - MogoObuConstants.STATUS.ADD -> { // 添加 - // 更新数据,模型变色的时候是不是update,如果不是更新,可能导致模型不变色,(add的时候,是否有level高的) TODO - TrafficDataConvertUtilsNew.cvxPtcThreatIndInfo2TrafficData(data) - ?.let { - CallerMapUIServiceManager.getMarkerService() - ?.updateITrafficThreatLevelInfo(it) - } + if (HmiBuildConfig.isShowObuV2iView) { + if (HmiBuildConfig.isShowObuWeaknessTrafficView) { + // 交通参与者类型 0x0:未知 UNKNOWN | 1机动车 2:非机动车 NON_MOTOR | 3:行人 PEDESTRIAN 4:obu + if (data != null && data.participant != null) { + var v2xType = "" + if (data.participant.ptcType == 1) { //机动车 + v2xType = + EventTypeEnumNew.TYPE_USECASE_ID_VRUCW_MOTOR_VEHICLES.poiType + } else if (data.participant.ptcType == 2) { //非机动车 + v2xType = + EventTypeEnumNew.TYPE_USECASE_ID_VRUCW_NOT_MOTOR_VEHICLES.poiType + } else if (data.participant.ptcType == 3) { //行人 + v2xType = + EventTypeEnumNew.TYPE_USECASE_ID_VRUCW_PERSON.poiType + } else { //未知 + v2xType = EventTypeEnumNew.TYPE_ERROR.poiType } - MogoObuConstants.STATUS.UPDATE -> { // 更新 - } + val ttsContent = EventTypeEnumNew.getWarningTts(v2xType) + val alertContent = + EventTypeEnumNew.getWarningContent(v2xType) + var level = -1 + val direction = getMessageDirection(data.participant.targetPosition) - MogoObuConstants.STATUS.DELETE -> { // 删除 - // 更新数据 TODO 删除原来的,改变颜色,删除marker。不影响别的模型添加 - TrafficDataConvertUtilsNew.cvxPtcThreatIndInfo2TrafficData(data) - ?.let { - // 事件结束,还原交通参与者颜色 - it.threatLevel = 0x01 - CallerMapUIServiceManager.getMarkerService() - ?.updateITrafficThreatLevelInfo(it) - } - - //删除弱势交通元素 - CallerMapUIServiceManager.getMarkerService() - ?.removeCvxRvInfoIndInfo(data.participant.ptcId.toString()) - } - } - - //预警status - if (data.warningMsg != null && data.warningMsg.warningDataList != null && data.warningMsg.warningDataList.size > 0) { - level = data.warningMsg.warningDataList[0].warningLevel //默认是1个 + //物体数据绘制 CallerLogger.d( "$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", - "onMogoObuRsmWarning ---status---> ${data.status} ---data.warningMsg.warningData[0].status = ${data.warningMsg.warningDataList[0].status} ---v2xType = $v2xType ---alertContent = $alertContent ---ttsContent = $ttsContent ---level = $level" + "onMogoObuRsmWarning ---- data.status = ${data.status} ---data.participant.ptcId = ${data.participant.ptcId} ---data.participant.ptcType = ${data.participant.ptcType} ---data.warningMsg = ${data.warningMsg} -----data = ${data.toString()}" ) - when (data.warningMsg.warningDataList[0].status) { + when (data.status) { MogoObuConstants.STATUS.ADD -> { // 添加 - //更新模型的颜色 + // 更新数据,模型变色的时候是不是update,如果不是更新,可能导致模型不变色,(add的时候,是否有level高的) TODO TrafficDataConvertUtilsNew.cvxPtcThreatIndInfo2TrafficData(data) ?.let { CallerMapUIServiceManager.getMarkerService() ?.updateITrafficThreatLevelInfo(it) } - - if (alertContent.isEmpty() || ttsContent.isEmpty()) { - return - } - saveObuData(v2xType, alertContent, ttsContent) - showWarning(v2xType, alertContent, ttsContent, direction) } - MogoObuConstants.STATUS.UPDATE -> {// 更新 + MogoObuConstants.STATUS.UPDATE -> { // 更新 } MogoObuConstants.STATUS.DELETE -> { // 删除 - // 关闭警告红边 - CallerHmiManager.dismissWarning(WarningDirectionEnum.ALERT_WARNING_ALL) + // 更新数据 TODO 删除原来的,改变颜色,删除marker。不影响别的模型添加 + TrafficDataConvertUtilsNew.cvxPtcThreatIndInfo2TrafficData(data) + ?.let { + // 事件结束,还原交通参与者颜色 + it.threatLevel = 0x01 + CallerMapUIServiceManager.getMarkerService() + ?.updateITrafficThreatLevelInfo(it) + } + //删除弱势交通元素 CallerMapUIServiceManager.getMarkerService() ?.removeCvxRvInfoIndInfo(data.participant.ptcId.toString()) } } + + //预警status + if (data.warningMsg != null && data.warningMsg.warningDataList != null && data.warningMsg.warningDataList.size > 0) { + level = data.warningMsg.warningDataList[0].warningLevel //默认是1个 + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", + "onMogoObuRsmWarning ---status---> ${data.status} ---data.warningMsg.warningData[0].status = ${data.warningMsg.warningDataList[0].status} ---v2xType = $v2xType ---alertContent = $alertContent ---ttsContent = $ttsContent ---level = $level" + ) + when (data.warningMsg.warningDataList[0].status) { + MogoObuConstants.STATUS.ADD -> { // 添加 + //更新模型的颜色 + TrafficDataConvertUtilsNew.cvxPtcThreatIndInfo2TrafficData(data) + ?.let { + CallerMapUIServiceManager.getMarkerService() + ?.updateITrafficThreatLevelInfo(it) + } + + if (alertContent.isEmpty() || ttsContent.isEmpty()) { + return + } + saveObuData(v2xType, alertContent, ttsContent) + showWarning(v2xType, alertContent, ttsContent, direction) + } + + MogoObuConstants.STATUS.UPDATE -> {// 更新 + } + + MogoObuConstants.STATUS.DELETE -> { // 删除 + // 关闭警告红边 + CallerHmiManager.dismissWarning(WarningDirectionEnum.ALERT_WARNING_ALL) + //删除弱势交通元素 + CallerMapUIServiceManager.getMarkerService() + ?.removeCvxRvInfoIndInfo(data.participant.ptcId.toString()) + } + } + } } } } -// } } /** * 地图匹配 是OBU算法输出地图匹配结果,主车匹配道路哪条路或者哪条车道 */ override fun onObuMapMath(data: ObuScene.MapMatchData?) { - if (data != null) { - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", - "onMogoObuMapMath = ${data.status} --speedMaxLimit = ${(data.speedMaxLimit * 3.6).roundToInt()}" - ) - when (data.status) { - MogoObuConstants.STATUS.ADD -> { // 添加 - UiThreadHandler.post { - if (data.speedMaxLimit > 0) { - CallerLimitingVelocityListenerManager.invokeUnion( - (data.speedMaxLimit * 3.6).roundToInt(), DataSourceType.OBU - ) + if (HmiBuildConfig.isShowObuV2iView) { + if (data != null) { + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", + "onMogoObuMapMath = ${data.status} --speedMaxLimit = ${(data.speedMaxLimit * 3.6).roundToInt()}" + ) + when (data.status) { + MogoObuConstants.STATUS.ADD -> { // 添加 + UiThreadHandler.post { + if (data.speedMaxLimit > 0) { + CallerLimitingVelocityListenerManager.invokeUnion( + (data.speedMaxLimit * 3.6).roundToInt(), DataSourceType.OBU + ) + } } } - } - MogoObuConstants.STATUS.UPDATE -> { // 更新 - } + MogoObuConstants.STATUS.UPDATE -> { // 更新 + } - MogoObuConstants.STATUS.DELETE -> { // 删除 - UiThreadHandler.post { - CallerLimitingVelocityListenerManager.invokeUnion( - -1, - DataSourceType.OBU - ) + MogoObuConstants.STATUS.DELETE -> { // 删除 + UiThreadHandler.post { + CallerLimitingVelocityListenerManager.invokeUnion( + -1, + DataSourceType.OBU + ) + } } } } @@ -543,7 +578,6 @@ class MogoPrivateObuNewManager private constructor() { * 获取消息的方位 车辆相关 */ private fun getMessageDirection(targetClassification: Int): WarningDirectionEnum { - // CallerLogger.d("$M_OBU${TAG_MOGO_NEW_OBU}", "预警红边:预警方向->$targetClassification") return when (targetClassification) { MogoObuConstants.VEH_TARGET_POSITION.AHEAD_IN_LANE, MogoObuConstants.VEH_TARGET_POSITION.ONCOMING_IN_LANE -> WarningDirectionEnum.ALERT_WARNING_TOP //正前方 @@ -589,7 +623,9 @@ class MogoPrivateObuNewManager private constructor() { if (FunctionBuildConfig.isObuWarningFusionUnion) { alertContent = "前车距离过近" ttsContent = "前车距离过近" - CallerObuWarningListenerManager.invokeTrackerFusionData(ObuManager.getInstance().obuRvToTrackedObject(info)) + CallerObuWarningListenerManager.invokeTrackerFusionData( + ObuManager.getInstance().obuRvToTrackedObject(info) + ) } else { alertContent = EventTypeEnumNew.getWarningContent(EventTypeEnumNew.TYPE_USECASE_ID_FCW.poiType) @@ -650,7 +686,7 @@ class MogoPrivateObuNewManager private constructor() { ttsContent = EventTypeEnumNew.getWarningTts(EventTypeEnumNew.TYPE_USECASE_ID_LCW.poiType) v2xType = EventTypeEnumNew.TYPE_USECASE_ID_LCW.poiType - if ( + if ( direction == WarningDirectionEnum.ALERT_WARNING_LEFT || direction == WarningDirectionEnum.ALERT_WARNING_TOP_LEFT || direction == WarningDirectionEnum.ALERT_WARNING_BOTTOM_LEFT diff --git a/core/function-impl/mogo-core-function-hmi/build.gradle b/core/function-impl/mogo-core-function-hmi/build.gradle index 852be9bd7f..5229ec0dd4 100644 --- a/core/function-impl/mogo-core-function-hmi/build.gradle +++ b/core/function-impl/mogo-core-function-hmi/build.gradle @@ -68,7 +68,6 @@ dependencies { // debugImplementation rootProject.ext.dependencies.debugleakcanary // releaseImplementation rootProject.ext.dependencies.releaseleakcanary - implementation project(':libraries:mogo-obu') implementation rootProject.ext.dependencies.arouter kapt rootProject.ext.dependencies.aroutercompiler diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt index 0e422750f7..0c0f7961b4 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt @@ -73,9 +73,6 @@ import com.mogo.eagle.core.utilcode.mogo.toast.TipToast import com.mogo.eagle.core.utilcode.util.* import com.mogo.map.uicontroller.VisualAngleMode import com.mogo.map.uicontroller.VisualAngleMode.* -import com.mogo.support.obu.MogoObuManager -import com.mogo.support.obu.constants.MogoObuLogLevel -import com.mogo.support.obu.option.MogoObuLog import kotlinx.android.synthetic.main.view_debug_setting.view.* import kotlinx.coroutines.launch import mogo.telematics.pad.MessagePad @@ -1194,14 +1191,7 @@ internal class DebugSettingView @JvmOverloads constructor( * 设置是否输出OBU日志 true-打印日志,false-不打印日志 */ tbObuLog.setOnCheckedChangeListener { _, isChecked -> - MogoObuManager.getInstance().setEnableLog(isChecked) - - val builder: com.mogo.support.obu.option.MogoObuLog.Builder = - MogoObuLog.newBuilder().setEnableStdio(isChecked) - if (isChecked) { - builder.setStdioLevel(MogoObuLogLevel.DBG) - } - MogoObuManager.getInstance().logConfig(builder.build()) + CallerObuApiManager.setObuLog(isChecked) } /** diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt index 6327b04bed..2b6dadfb77 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt @@ -95,18 +95,19 @@ internal class SOPSettingView @JvmOverloads constructor( } /** - * obu V2V开关 + * obu V2V开关,默认打开 */ + tbObuV2vView.isChecked = HmiBuildConfig.isShowObuV2vView tbObuV2vView.setOnCheckedChangeListener { _, isChecked -> // 默认关闭 HmiBuildConfig.isShowObuV2vView = isChecked } /** - * obu V2i开关 + * obu V2i开关,默认打开 */ + tbObuV2iView.isChecked = HmiBuildConfig.isShowObuV2iView tbObuV2iView.setOnCheckedChangeListener { _, isChecked -> - // 默认关闭 HmiBuildConfig.isShowObuV2iView = isChecked } @@ -174,7 +175,7 @@ internal class SOPSettingView @JvmOverloads constructor( //OBU控制总开关 tbObu.isChecked = CallerObuApiManager.isConnected() tbObu.setOnCheckedChangeListener { _, isChecked -> - if (!isChecked) { + if (isChecked) { CallerObuApiManager.resetObuIpAddress("192.168.1.199") } else { //断开链接 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml index e9830e19b0..8c7522b317 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml @@ -203,11 +203,13 @@ app:layout_constraintTop_toBottomOf="@id/tbCloudWeaknessTrafficSop" /> + Date: Fri, 17 Feb 2023 19:14:14 +0800 Subject: [PATCH 2/5] =?UTF-8?q?[dev=5Farch=5Fopt=5F3.0]=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../obu/MogoPrivateObuNewManager.kt | 50 ++++++++----------- 1 file changed, 22 insertions(+), 28 deletions(-) diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt index cf1a909d8c..7ab13fcfb4 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt @@ -86,7 +86,6 @@ class MogoPrivateObuNewManager private constructor() { ObuManager.getInstance().connect(options) } - /** * 断开新obu */ @@ -157,7 +156,7 @@ class MogoPrivateObuNewManager private constructor() { */ override fun onObuRvWarning(data: ObuScene.RvWarningData) { if (HmiBuildConfig.isShowObuV2vView) { - if (data.warningMsg != null && !data.warningMsg.warningDataList.isNullOrEmpty()) { + if (data.warningMsg != null) { // 更新数据,远车数据,之前要匹配uuid TrafficDataConvertUtilsNew.cvxRvInfoIndInfo2TrafficData(data.vehBasicsMsg) ?.let { @@ -166,33 +165,28 @@ class MogoPrivateObuNewManager private constructor() { } CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", data.toString()) - data.let { - //预警信息,预警类型 threat_level 2、3 - data.vehBasicsMsg?.let { - //预警方位 - val direction = getMessageDirection(data.vehBasicsMsg.targetPosition) - //处理预警类型 - var appId = "" - var level = -1 - var status = -1 - data.warningMsg?.let { - if (data.warningMsg.warningDataList != null && data.warningMsg.warningDataList.size > 0) { - level = data.warningMsg.warningDataList[0].warningLevel - appId = - data.warningMsg.warningDataList[0].warningType.toString() - status = data.warningMsg.warningDataList[0].status - //拼凑数据 - handleSdkObu(appId, direction, status, level, data) - } - } - - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", - "onMogoObuRvWarning target_classification = ${ - getMessageDirection(data.vehBasicsMsg.targetPosition) - } --- direction = $direction --- appId = $appId ---level = $level -- status = $status" - ) + //预警信息,预警类型 threat_level 2、3 + data.vehBasicsMsg?.let { + //预警方位 + val direction = getMessageDirection(data.vehBasicsMsg.targetPosition) + //处理预警类型 + var appId = "" + var level = -1 + var status = -1 + if (data.warningMsg.warningDataList != null && data.warningMsg.warningDataList.size > 0) { + level = data.warningMsg.warningDataList[0].warningLevel + appId = data.warningMsg.warningDataList[0].warningType.toString() + status = data.warningMsg.warningDataList[0].status + //拼凑数据 + handleSdkObu(appId, direction, status, level, data) } + + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", + "onMogoObuRvWarning target_classification = ${ + getMessageDirection(data.vehBasicsMsg.targetPosition) + } --- direction = $direction --- appId = $appId ---level = $level -- status = $status" + ) } } } From fc7732e8f57d48131e21f64c5ff428dd1f91803f Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Fri, 10 Feb 2023 19:32:22 +0800 Subject: [PATCH 3/5] =?UTF-8?q?[Feat]=E6=96=B0=E5=A2=9E=E9=AB=98=E7=B2=BE?= =?UTF-8?q?=E5=9C=B0=E5=9B=BE=E7=BC=93=E5=AD=98=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/hmi/ui/map/OfflineMapDialog.kt | 170 ++++++++++++++++++ .../hmi/ui/tools/AutoPilotAndCheckView.kt | 4 + .../hmi/ui/widget/SystemVersionView.kt | 21 +++ .../res/drawable-xhdpi/download_fail_icon.png | Bin 0 -> 8253 bytes .../drawable-xhdpi/download_success_icon.png | Bin 0 -> 9547 bytes .../res/drawable-xhdpi/icon_be_updated.png | Bin 0 -> 7172 bytes .../main/res/drawable-xhdpi/icon_hd_map.png | Bin 0 -> 3196 bytes .../res/drawable/progressbar_corner_bg.xml | 43 +++++ .../main/res/layout/dialog_offline_map.xml | 135 ++++++++++++++ .../main/res/layout/view_system_version.xml | 24 ++- .../src/main/res/values/color.xml | 4 +- .../src/main/res/values/strings.xml | 7 + .../api/hmi/warning/IMoGoWaringProvider.kt | 20 +++ .../function/call/hmi/CallerHmiManager.kt | 3 + .../call/map/CallerMapUIServiceManager.kt | 12 +- gradle.properties | 2 +- .../com/mogo/map/hdcache/IHdCacheListener.kt | 5 + .../uicontroller/IMogoMapUIController.java | 10 ++ .../java/com/mogo/map/AMapViewWrapper.java | 51 ++++++ .../com/mogo/map/MogoMapUIController.java | 17 ++ .../map/uicontroller/AMapUIController.java | 16 ++ .../java/com/mogo/map/utils/HDMapUtils.kt | 27 +++ 22 files changed, 565 insertions(+), 6 deletions(-) create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/download_fail_icon.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/download_success_icon.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_be_updated.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_hd_map.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/progressbar_corner_bg.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_offline_map.xml create mode 100644 core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt create mode 100644 libraries/mogo-map-api/src/main/java/com/mogo/map/hdcache/IHdCacheListener.kt create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/utils/HDMapUtils.kt diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt new file mode 100644 index 0000000000..aa62c470b2 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt @@ -0,0 +1,170 @@ +package com.mogo.eagle.core.function.hmi.ui.map + +import android.annotation.SuppressLint +import android.content.Context +import android.view.View +import android.widget.ImageView +import android.widget.ProgressBar +import android.widget.TextView +import androidx.annotation.MainThread +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat +import androidx.core.content.res.ResourcesCompat +import androidx.core.view.marginTop +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.function.hmi.dialog.BaseFloatDialog +import com.mogo.map.hdcache.IHdCacheListener +import me.jessyan.autosize.utils.AutoSizeUtils + +/** + * 离线地图缓存 + */ +class OfflineMapDialog(context: Context): BaseFloatDialog(context) { + + private var roundRootLayout: ConstraintLayout? = null + private var offlineTitleView: TextView? = null + private var leftView: TextView? = null + private var rightView: TextView? = null + private var okView: TextView? = null + private var vertLineView: View? = null + private var horizontalLineView: View? = null + private var cacheTipView: TextView? = null + + private var progressBar: ProgressBar? = null + private var downloadPercentView: TextView? = null + private var downloadResultImg: ImageView? = null + + private var isLoading = false + private var isConfirm = true + private var isRetry = false + + init { + setContentView(R.layout.dialog_offline_map) + setCanceledOnTouchOutside(true) + + initView() + } + + private fun initView() { + roundRootLayout = findViewById(R.id.roundRootLayout) + offlineTitleView = findViewById(R.id.tv_cache_title) + progressBar = findViewById(R.id.progressBar) + downloadPercentView = findViewById(R.id.tvDownloadProgress) + leftView = findViewById(R.id.tv_cache_confirm) + rightView = findViewById(R.id.tv_cache_cancel) + okView = findViewById(R.id.tv_cache_ok) + vertLineView = findViewById(R.id.view_vertical_line) + horizontalLineView = findViewById(R.id.view_horizontal_line) + cacheTipView = findViewById(R.id.tv_cache_tips) + downloadResultImg = findViewById(R.id.iv_download_Status) + + leftView?.setOnClickListener { + when { + isConfirm -> { + cacheHDOfflineData() + showNewContent(isLoading = true, false) + } + else -> { + dismiss() + } + } + } + + rightView?.setOnClickListener { + when { + isRetry -> { + cacheHDOfflineData() + } + else -> { + dismiss() + } + } + } + + okView?.setOnClickListener { + dismiss() + } + } + + private fun cacheHDOfflineData() { + CallerMapUIServiceManager.cacheHDDataByCity(object : IHdCacheListener { + override fun onMapHdCacheProgress(cityId: Int, progress: Double) { + updateProgress(progress.toInt()) + } + }) + } + + @SuppressLint("SetTextI18n") + private fun updateProgress(progress: Int) { + if (this@OfflineMapDialog.isShowing) { + progressBar?.let { + if (it.visibility == View.VISIBLE) { + it.progress = if (progress in 1..5) 5 else progress + } + } + downloadPercentView?.text = "$progress%" + if (progress == 100) { + showNewContent(isLoading = false, true) + CallerHmiManager.updateHDDataCacheStatus(true) + } + } + } + + private fun change2NewStyle() { + roundRootLayout?.layoutParams?.width = AutoSizeUtils.dp2px(context, 1110f) + roundRootLayout?.layoutParams?.height = AutoSizeUtils.dp2px(context, 668f) + + val titleParams = offlineTitleView?.layoutParams as ConstraintLayout.LayoutParams + titleParams.topMargin = AutoSizeUtils.dp2px(context, 51f) + + val horizontalLineParams = horizontalLineView?.layoutParams as ConstraintLayout.LayoutParams + horizontalLineParams.topMargin = AutoSizeUtils.dp2px(context, 374f) + + progressBar?.visibility = View.VISIBLE + downloadPercentView?.visibility = View.VISIBLE + okView?.visibility = View.VISIBLE + + vertLineView?.visibility = View.GONE + leftView?.visibility = View.GONE + rightView?.visibility = View.GONE + cacheTipView?.visibility = View.INVISIBLE + } + + @SuppressLint("UseCompatLoadingForDrawables") + private fun showNewContent(isLoading: Boolean, isSuccess: Boolean) { + change2NewStyle() + when { + isLoading -> { + okView?.text = context.resources.getString(R.string.cancel) + offlineTitleView?.text = context.resources.getString(R.string.offline_downloading) + downloadResultImg?.visibility = View.GONE + } + else -> { + downloadResultImg?.visibility = View.VISIBLE + when { + isSuccess -> { + okView?.visibility = View.VISIBLE + okView?.text = context.resources.getString(R.string.ok_tip) + offlineTitleView?.text = context.resources.getString(R.string.offline_download_success) + progressBar?.visibility = View.GONE + downloadPercentView?.visibility = View.GONE + downloadResultImg?.background = ContextCompat.getDrawable(context, R.drawable.download_success_icon) + } + else -> { + offlineTitleView?.text = context.resources.getString(R.string.offline_download_failure) + okView?.visibility = View.GONE + progressBar?.visibility = View.GONE + downloadPercentView?.visibility = View.GONE + leftView?.visibility = View.VISIBLE + rightView?.visibility = View.VISIBLE + vertLineView?.visibility = View.VISIBLE + rightView?.text = context.resources.getString(R.string.retry) + downloadResultImg?.background = ContextCompat.getDrawable(context, R.drawable.download_fail_icon) + } + } + } + } + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt index b6025d5503..b9b5274d05 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt @@ -197,6 +197,10 @@ internal class AutoPilotAndCheckView @JvmOverloads constructor( systemVersionView?.showAdUpgradeStatus(ipcUpgradeStateInfo) } + fun updateHDDataCacheStatus(isCached: Boolean) { + systemVersionView?.updateHDDataCacheStatus(isCached) + } + override fun onAttachedToWindow() { super.onAttachedToWindow() CallerAutoPilotStatusListenerManager.addListener(TAG, this) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt index 913da911a7..6875daab9d 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt @@ -10,10 +10,15 @@ import com.mogo.eagle.core.data.bindingcar.AdUpgradeStateHelper import com.mogo.eagle.core.data.bindingcar.IPCUpgradeStateInfo import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsListener +import com.mogo.eagle.core.function.api.bindingcar.IMoGoBindingCarListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager +import com.mogo.eagle.core.function.call.bindingcar.CallerBindingCarListenerManager +import com.mogo.eagle.core.function.call.bindingcar.CallerBindingcarManager +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.function.hmi.ui.map.OfflineMapDialog import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI import com.mogo.eagle.core.utilcode.util.AppUtils @@ -135,6 +140,12 @@ class SystemVersionView @JvmOverloads constructor( } + ivHDCache.setOnClickListener { + OfflineMapDialog(context).show() + } + + updateHDDataCacheStatus(CallerMapUIServiceManager.isCityDataCached()) + if(AdUpgradeStateHelper.isConfirmUpgrade()){ //将角标改为“下载中” ivAdStatus?.setImageResource(R.drawable.icon_downloading) @@ -239,6 +250,16 @@ class SystemVersionView @JvmOverloads constructor( } + fun updateHDDataCacheStatus(isCached: Boolean) { + if (isCached) { + ivHDCacheStatus?.setImageResource(R.drawable.icon_latest_version) + ivHDCache.isEnabled = false + } else { + ivHDCacheStatus?.setImageResource(R.drawable.icon_be_updated) + ivHDCache.isEnabled = true + } + } + /** * 展示当前鹰眼版本 */ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/download_fail_icon.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/download_fail_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..809d7ee41430fdcc7ad9423a11b4352f3d3c7257 GIT binary patch literal 8253 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 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/download_success_icon.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/download_success_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f6f1197a934c28a588dbdf678769c3f667b40c34 GIT binary patch literal 9547 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_offline_map.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_offline_map.xml new file mode 100644 index 0000000000..6ae72b0a13 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_offline_map.xml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_system_version.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_system_version.xml index ce0064ad18..3972c865ff 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_system_version.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_system_version.xml @@ -82,7 +82,6 @@ android:visibility="gone" /> - + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml index 574b9fc2f3..ff8c61e6bf 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml @@ -71,7 +71,5 @@ #FF282F62 #FFFFFF - - - + #E63B4577 \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml index f12f7f9bc0..9af0f3ad70 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml @@ -65,4 +65,11 @@ 车辆将开启自动驾驶,并行驶至: 确认 取消 + 离线地图缓存提醒 + 是否缓存最新版本离线地图? + 离线地图下载中 + 离线地图下载成功 + 离线地图下载失败 + 确定 + 重试 diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt new file mode 100644 index 0000000000..42b0cadcfc --- /dev/null +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt @@ -0,0 +1,20 @@ +package com.mogo.eagle.core.function.api.hmi.warning + +import android.view.View +import android.view.ViewGroup +import com.mogo.eagle.core.data.bindingcar.IPCUpgradeStateInfo +import com.mogo.eagle.core.data.enums.WarningDirectionEnum +import com.mogo.eagle.core.data.map.Infrastructure +import com.mogo.eagle.core.data.notice.NoticeNormalData +import com.mogo.eagle.core.data.notice.NoticeTrafficStylePushData +import com.mogo.eagle.core.data.report.ReportEntity +import com.mogo.eagle.core.function.api.hmi.IMoGoHmiViewProxy +import com.mogo.eagle.core.function.api.hmi.view.IOchBusView + +/** + * @author xiaoyuzhou + * @date 2021/8/2 7:36 下午 + */ +interface IMoGoWaringProvider : IMoGoHmiViewProxy { + fun updateHDDataCacheStatus(isCached: Boolean) +} \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt index 8339a0c006..b6aca6f544 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt @@ -212,4 +212,7 @@ object CallerHmiManager { hmiProviderApi?.updateStatusBarDownloadView(insert, tag, progress) } + fun updateHDDataCacheStatus(isCached: Boolean) { + waringProviderApi?.updateHDDataCacheStatus(isCached) + } } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt index cb8288ae15..0562c116ee 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt @@ -5,7 +5,9 @@ import com.mogo.eagle.core.data.constants.MogoServicePaths import com.mogo.eagle.core.function.api.map.IMogoMapService import com.mogo.eagle.core.function.api.map.marker.IMogoMarkerService import com.mogo.eagle.core.function.call.base.CallerBase -import com.mogo.map.location.IMogoGDLocationClient +import com.mogo.map.hdcache.IHdCacheListener +import com.mogo.map.listener.IMogoHosListenerRegister +import com.mogo.map.location.IMogoLocationClient import com.mogo.map.marker.IMogoMarkerManager import com.mogo.map.overlay.IMogoOverlayManager import com.mogo.map.uicontroller.IMogoMapUIController @@ -30,6 +32,14 @@ object CallerMapUIServiceManager { return serviceProvider?.markerService } + fun cacheHDDataByCity(listener: IHdCacheListener) { + serviceProvider?.mapUIController?.cacheHDDataByCity(listener) + } + + fun isCityDataCached(): Boolean { + return serviceProvider?.mapUIController?.isCityDataCached ?: true + } + fun getOverlayManager(): IMogoOverlayManager?{ return serviceProvider?.overlayManager } diff --git a/gradle.properties b/gradle.properties index dd72d41281..9578aa5a52 100644 --- a/gradle.properties +++ b/gradle.properties @@ -85,7 +85,7 @@ MOGO_LOCATION_VERSION=1.4.4.2 MOGO_TELEMATIC_VERSION=1.4.4.2 ######## MogoAiCloudSDK Version ######## # 自研地图 -MAP_SDK_VERSION=2.10.0.2_test_01 +MAP_SDK_VERSION=2.10.0.2 MAP_SDK_OPERATION_VERSION=1.1.4.1 # websocket WEBSOCKET_VERSION=1.1.7 diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/hdcache/IHdCacheListener.kt b/libraries/mogo-map-api/src/main/java/com/mogo/map/hdcache/IHdCacheListener.kt new file mode 100644 index 0000000000..4761e40fff --- /dev/null +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/hdcache/IHdCacheListener.kt @@ -0,0 +1,5 @@ +package com.mogo.map.hdcache + +interface IHdCacheListener { + fun onMapHdCacheProgress(cityId: Int, progress: Double) +} \ No newline at end of file diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java index 362b48f839..8235fe8a36 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java @@ -9,6 +9,9 @@ import androidx.annotation.RawRes; import com.mogo.eagle.core.data.map.CenterLine; import com.mogo.eagle.core.data.map.MogoLatLng; +import com.mogo.map.hdcache.IHdCacheListener; + +import org.json.JSONObject; import com.mogo.eagle.core.data.map.MogoLocation; import java.util.List; @@ -348,4 +351,11 @@ public interface IMogoMapUIController { * @param color // color:"#RRGGBB* */ void setPointCloudColor(String color); + void cacheHDDataByCity(IHdCacheListener listener); + + /** + * 当前城市离线数据是否已缓存 + * @return + */ + boolean isCityDataCached(); } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java index e264f883ad..e46408c5f2 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java @@ -23,6 +23,7 @@ import android.util.Log; import android.view.MotionEvent; import android.view.View; +import androidx.annotation.MainThread; import androidx.annotation.NonNull; import com.mogo.commons.debug.DebugConfig; @@ -40,13 +41,17 @@ import com.mogo.eagle.core.function.call.map.CallerMapStyleListenerManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.map.hdcache.IHdCacheListener; import com.mogo.map.listener.MogoMapListenerHandler; +import com.mogo.map.location.GDLocationClient; +import com.mogo.map.navi.MogoCarLocationChangedListenerRegister; import com.mogo.map.uicontroller.CarCursorOption; import com.mogo.map.uicontroller.EnumMapUI; import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.map.uicontroller.MapCameraPosition; import com.mogo.map.uicontroller.MapControlResult; import com.mogo.map.uicontroller.VisualAngleMode; +import com.mogo.map.utils.HDMapUtils; import com.mogo.map.utils.MogoMapUtils; import com.mogo.map.utils.ObjectUtils; import com.mogo.map.utils.ResIdCache; @@ -64,6 +69,7 @@ import com.zhidaoauto.map.sdk.open.business.PointCloudHelper; import com.zhidaoauto.map.sdk.open.camera.CameraPosition; import com.zhidaoauto.map.sdk.open.camera.CameraUpdateFactory; import com.zhidaoauto.map.sdk.open.camera.LatLngBounds; +import com.zhidaoauto.map.sdk.open.data.CityInfo; import com.zhidaoauto.map.sdk.open.data.MapDataApi; import com.zhidaoauto.map.sdk.open.location.LocationClient; import com.zhidaoauto.map.sdk.open.location.MyLocationStyle; @@ -115,6 +121,8 @@ public class AMapViewWrapper implements IMogoMapView, private boolean mIsFirstLocated = true; private boolean mIsDelayed = false; + private IHdCacheListener hdCacheListener; + public AMapViewWrapper(MapAutoView mMapView) { CallerLogger.INSTANCE.i(M_MAP + TAG, "autoop--AMapViewWrapper: init"); this.mMapView = mMapView; @@ -1035,4 +1043,47 @@ public class AMapViewWrapper implements IMogoMapView, } + + @Override + public void cacheHDDataByCity(IHdCacheListener listener) { + if (mMapView.getMapAutoViewHelper() != null) { + String gdCityCode = GDLocationClient.getInstance(getContext()).getLastCityCode(); + Integer id = HDMapUtils.getHDCityCode(gdCityCode); + if (id != null) { + hdCacheListener = listener; + mMapView.getMapAutoViewHelper().cacheHDDataByCity(id, (cityId, progress) -> { + if (Thread.currentThread() == Looper.getMainLooper().getThread()) { + if (hdCacheListener != null) { + hdCacheListener.onMapHdCacheProgress(cityId, progress * 100); + } + } else { + UiThreadHandler.post(() -> { + if (hdCacheListener != null) { + hdCacheListener.onMapHdCacheProgress(cityId, progress * 100); + } + }); + } + }); + } + } + } + + @Override + public boolean isCityDataCached() { + if (mMapView.getMapAutoViewHelper() != null) { + String gdCityCode = GDLocationClient.getInstance(getContext()).getLastCityCode(); + Integer id = HDMapUtils.getHDCityCode(gdCityCode); + if (id != null) { + List cityInfoList = mMapView.getMapAutoViewHelper().getAllCityCode(); + if (cityInfoList != null) { + for (CityInfo cityInfo : cityInfoList) { + if (id == cityInfo.getCityCode()) { + return cityInfo.isCache; + } + } + } + } + } + return true; + } } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java index f525de00c5..fbbb4ab578 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java @@ -2,12 +2,14 @@ package com.mogo.map; import android.graphics.Point; import android.graphics.Rect; +import android.location.Location; import android.view.View; import com.mogo.eagle.core.data.map.CenterLine; import com.mogo.eagle.core.data.map.MogoLatLng; import com.mogo.eagle.core.data.map.MogoLocation; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.map.hdcache.IHdCacheListener; import com.mogo.map.uicontroller.AMapUIController; import com.mogo.map.uicontroller.CarCursorOption; import com.mogo.map.uicontroller.IMogoMapUIController; @@ -449,4 +451,19 @@ public class MogoMapUIController implements IMogoMapUIController { mDelegate.setPointCloudColor(color); } } + + @Override + public void cacheHDDataByCity(IHdCacheListener listener) { + if (mDelegate != null) { + mDelegate.cacheHDDataByCity(listener); + } + } + + @Override + public boolean isCityDataCached() { + if (mDelegate != null) { + return mDelegate.isCityDataCached(); + } + return true; + } } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java index 9da7c35e7a..f48f36cc66 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java @@ -6,6 +6,7 @@ import android.view.View; import com.mogo.eagle.core.data.map.CenterLine; import com.mogo.eagle.core.data.map.MogoLatLng; +import com.mogo.map.hdcache.IHdCacheListener; import com.mogo.eagle.core.data.map.MogoLocation; import com.zhidaoauto.map.sdk.open.MapAutoApi; @@ -389,4 +390,19 @@ public class AMapUIController implements IMogoMapUIController { mClient.setPointCloudColor(color); } } + + @Override + public void cacheHDDataByCity(IHdCacheListener listener) { + if (mClient != null) { + mClient.cacheHDDataByCity(listener); + } + } + + @Override + public boolean isCityDataCached() { + if (mClient != null) { + return mClient.isCityDataCached(); + } + return true; + } } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/utils/HDMapUtils.kt b/libraries/mogo-map/src/main/java/com/mogo/map/utils/HDMapUtils.kt new file mode 100644 index 0000000000..b15a5c2704 --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/utils/HDMapUtils.kt @@ -0,0 +1,27 @@ +package com.mogo.map.utils + +object HDMapUtils { + private val cityCodeMap by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + val map = HashMap() + map["0831"] = 5115// 宜宾市 + map["0512"] = 3205// 苏州市 + map["0872"] = 5329// 大理市 + map["0711"] = 4207// 鄂州市 + map["028"] = 5101// 成都市 + map["0931"] = 6201// 兰州市 + map["0535"] = 3706// 烟台市 + map["027"] = 4201// 武汉市 + map["010"] = 1101// 北京市 + map["0734"] = 4304// 衡阳市 + map + } + + /** + * gdCityCode: 高德CityCode + * return: 高精地图CityCode + */ + @JvmStatic + fun getHDCityCode(gdCityCode: String?): Int? { + return cityCodeMap[gdCityCode] + } +} \ No newline at end of file From d37737d95631131158738eeeb9df60c1562ab691 Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Mon, 13 Feb 2023 18:32:46 +0800 Subject: [PATCH 4/5] =?UTF-8?q?[2.14.0][Opt]=E5=9C=B0=E5=9B=BE=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E5=8A=9F=E8=83=BD=E4=BA=A4=E4=BA=92=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/function/hmi/ui/widget/SystemVersionView.kt | 11 ++++++++--- .../src/main/res/values/strings.xml | 1 + .../src/main/java/com/mogo/map/utils/HDMapUtils.kt | 1 + 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt index 6875daab9d..65f2050257 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt @@ -55,6 +55,8 @@ class SystemVersionView @JvmOverloads constructor( private var previousProgress: Int = -1 //前一秒的下载进度,用于计算下载剩余时间 private var currentProgress: Int = -1 //当前已下载包体大小 + private var isHDCached = false + init { LayoutInflater.from(context).inflate(R.layout.view_system_version, this, true) initView() @@ -141,7 +143,11 @@ class SystemVersionView @JvmOverloads constructor( } ivHDCache.setOnClickListener { - OfflineMapDialog(context).show() + if (isHDCached) {// 已缓存 + ToastUtils.showShort(resources.getString(R.string.offline_had_downloaded)) + } else {// 未缓存 + OfflineMapDialog(context).show() + } } updateHDDataCacheStatus(CallerMapUIServiceManager.isCityDataCached()) @@ -253,11 +259,10 @@ class SystemVersionView @JvmOverloads constructor( fun updateHDDataCacheStatus(isCached: Boolean) { if (isCached) { ivHDCacheStatus?.setImageResource(R.drawable.icon_latest_version) - ivHDCache.isEnabled = false } else { ivHDCacheStatus?.setImageResource(R.drawable.icon_be_updated) - ivHDCache.isEnabled = true } + isHDCached = isCached } /** diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml index 9af0f3ad70..a792f63bf1 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml @@ -70,6 +70,7 @@ 离线地图下载中 离线地图下载成功 离线地图下载失败 + 当前已为最新版本 确定 重试 diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/utils/HDMapUtils.kt b/libraries/mogo-map/src/main/java/com/mogo/map/utils/HDMapUtils.kt index b15a5c2704..72e8eadaa5 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/utils/HDMapUtils.kt +++ b/libraries/mogo-map/src/main/java/com/mogo/map/utils/HDMapUtils.kt @@ -3,6 +3,7 @@ package com.mogo.map.utils object HDMapUtils { private val cityCodeMap by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { val map = HashMap() + // TODO:("高精地图自己去做") map["0831"] = 5115// 宜宾市 map["0512"] = 3205// 苏州市 map["0872"] = 5329// 大理市 From 6cd9b5d76c1a9cd89c0b436470d28ff8ac7aeed7 Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Wed, 15 Feb 2023 17:14:36 +0800 Subject: [PATCH 5/5] =?UTF-8?q?[2.14.0][Opt]=E5=AF=B9=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E7=9B=92=E5=AD=90=E4=B8=ADV2X=E5=92=8C=E8=BF=90=E8=90=A5?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E7=9A=84=E5=8F=82=E6=95=B0=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/eagle/core/data/msgbox/OperationMsg.kt | 10 +++++++++- .../java/com/mogo/eagle/core/data/msgbox/V2XMsg.kt | 5 +++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/OperationMsg.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/OperationMsg.kt index 230e98dca5..75e7be26bd 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/OperationMsg.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/OperationMsg.kt @@ -1,8 +1,16 @@ package com.mogo.eagle.core.data.msgbox +import android.util.Log +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import java.io.Serializable /** * 运营消息:-1表示初始值 */ -data class OperationMsg(val timestamp : Long, val content: String, val type: Int = -1): Serializable +data class OperationMsg(val timestamp : Long, val content: String, val type: Int = -1): Serializable { + init { + if (content.isEmpty()) { + CallerLogger.e("MsgBox", Log.getStackTraceString(Throwable())) + } + } +} diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/V2XMsg.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/V2XMsg.kt index 374c545563..b4f98777f5 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/V2XMsg.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/V2XMsg.kt @@ -1,5 +1,7 @@ package com.mogo.eagle.core.data.msgbox +import android.util.Log +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import java.io.Serializable data class V2XMsg(var type: String = "", var content: String? = "", var tts: String? = ""): Serializable { @@ -9,5 +11,8 @@ data class V2XMsg(var type: String = "", var content: String? = "", var tts: Str init { timeStamp = System.currentTimeMillis() + if (content.isNullOrEmpty()) { + CallerLogger.e("MsgBox", Log.getStackTraceString(Throwable())) + } } } \ No newline at end of file