[2.13.0-arch-opt] move dispatch to biz and remove gradle settings
This commit is contained in:
@@ -187,7 +187,6 @@ ext {
|
||||
mogo_core_function_v2x : "com.mogo.eagle.core.function.impl:v2x:${MOGO_CORE_FUNCTION_V2X_VERSION}",
|
||||
mogo_core_function_api : "com.mogo.eagle.core.function:api:${MOGO_CORE_FUNCTION_API_VERSION}",
|
||||
mogo_core_function_call : "com.mogo.eagle.core.function:call:${MOGO_CORE_FUNCTION_CALL_VERSION}",
|
||||
mogo_core_function_carcorder : "com.mogo.eagle.core.function:carcorder:${MOGO_CORE_FUNCTION_CARCORDER_VERSION}",
|
||||
mogo_core_data : "com.mogo.eagle.core:data:${MOGO_CORE_DATA_VERSION}",
|
||||
mogo_core_res : "com.mogo.eagle.core:res:${MOGO_CORE_RES_VERSION}",
|
||||
mogo_core_utils : "com.mogo.eagle.core:utils:${MOGO_CORE_UTILS_VERSION}",
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.mogo.eagle.function.biz.push
|
||||
|
||||
import android.content.Context
|
||||
import com.alibaba.android.arouter.facade.annotation.Route
|
||||
import com.mogo.eagle.core.data.constants.MogoServicePaths
|
||||
import com.mogo.eagle.core.function.api.biz.IMoGoFuncBizProvider
|
||||
import com.mogo.eagle.core.function.api.biz.IMoGoNoticeNetCallBack
|
||||
import com.mogo.eagle.function.biz.push.dispatch.DispatchAutoPilotManager.Companion.dispatchAutoPilotManager
|
||||
import com.mogo.eagle.function.biz.push.notice.NoticeSocketManager.Companion.noticeSocketManager
|
||||
import com.mogo.eagle.function.biz.push.notice.network.NoticeNetWorkManager
|
||||
|
||||
@Route(path = MogoServicePaths.PATH_FUNC_BIZ)
|
||||
class FuncBizProvider : IMoGoFuncBizProvider {
|
||||
override val functionName: String
|
||||
get() = "FuncBiz"
|
||||
|
||||
override fun init(context: Context) {
|
||||
noticeSocketManager.init(context)
|
||||
dispatchAutoPilotManager.init(context)
|
||||
}
|
||||
|
||||
override fun feedBackNoticeTraffic(infoId: String, sn: String, accept: Int) {
|
||||
NoticeNetWorkManager.getInstance().sendAccidentAcceptStatus(infoId, sn, accept)
|
||||
}
|
||||
|
||||
override fun requestAccidentInfo(infoId: String, sn: String, callBack: IMoGoNoticeNetCallBack) {
|
||||
NoticeNetWorkManager.getInstance().requestAccidentInfo(infoId, sn, callBack)
|
||||
}
|
||||
|
||||
override fun dispatchAffirm() {
|
||||
dispatchAutoPilotManager.affirm()
|
||||
}
|
||||
|
||||
override fun dispatchCancel(manualTrigger: Boolean) {
|
||||
dispatchAutoPilotManager.cancel(manualTrigger)
|
||||
}
|
||||
|
||||
override fun testDispatch(sceneType: Int) {
|
||||
dispatchAutoPilotManager.testDispatch(sceneType)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
noticeSocketManager.release()
|
||||
dispatchAutoPilotManager.release()
|
||||
}
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
package com.mogo.eagle.function.biz.push;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.mogo.eagle.core.data.constants.MogoServicePaths;
|
||||
import com.mogo.eagle.core.function.api.notice.IMoGoNoticeProvider;
|
||||
import com.mogo.eagle.core.function.api.notice.NoticeNetCallBack;
|
||||
import com.mogo.eagle.function.biz.push.network.NoticeNetWorkManager;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
||||
/**
|
||||
* @author Jing
|
||||
* @description 云公告公告
|
||||
* @since: 10/27/21
|
||||
*/
|
||||
@Route(path = MogoServicePaths.PATH_AI_NOTICE)
|
||||
public class NoticeProvider implements IMoGoNoticeProvider {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getFunctionName() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
NoticeSocketManager.getInstance().unRegisterSocketMessageListener();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(Context context) {
|
||||
NoticeSocketManager.getInstance().registerSocketMessageListener(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void feedBackNoticeTraffic(String infoId, String sn, int accept) {
|
||||
NoticeNetWorkManager.getInstance().sendAccidentAcceptStatus(infoId, sn, accept);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void requestAccidentInfo(String infoId, String sn, NoticeNetCallBack callBack) {
|
||||
NoticeNetWorkManager.getInstance().requestAccidentInfo(infoId, sn, callBack);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,93 +0,0 @@
|
||||
package com.mogo.eagle.function.biz.push;
|
||||
|
||||
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_NOTICE;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager;
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxBean;
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxType;
|
||||
import com.mogo.eagle.core.data.msgbox.NoticeFrCloudMsg;
|
||||
import com.mogo.eagle.core.data.notice.NoticeNormalData;
|
||||
import com.mogo.eagle.core.data.notice.NoticeTrafficStylePushData;
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager;
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
import com.mogo.eagle.core.network.utils.GsonUtil;
|
||||
import com.mogo.aicloud.services.socket.IMogoOnMessageListener;
|
||||
|
||||
/**
|
||||
* @author Jing
|
||||
* @description 云公告注册、反注册
|
||||
* @since: 10/27/21
|
||||
*/
|
||||
class NoticeSocketManager {
|
||||
private String TAG = "AINotice";
|
||||
private static NoticeSocketManager mNoticeSocketManager;
|
||||
private Context mContext;
|
||||
|
||||
public static synchronized NoticeSocketManager getInstance() {
|
||||
synchronized (NoticeSocketManager.class) {
|
||||
if (mNoticeSocketManager == null) {
|
||||
mNoticeSocketManager = new NoticeSocketManager();
|
||||
}
|
||||
}
|
||||
return mNoticeSocketManager;
|
||||
}
|
||||
|
||||
public void registerSocketMessageListener(Context context) {
|
||||
mContext = context;
|
||||
MogoAiCloudSocketManager.getInstance(context).
|
||||
registerOnMessageListener(301001, mTrafficNoticeListener);
|
||||
MogoAiCloudSocketManager.getInstance(context).
|
||||
registerOnMessageListener(100, mNormalNoticeListener);
|
||||
}
|
||||
|
||||
public void unRegisterSocketMessageListener() {
|
||||
MogoAiCloudSocketManager.getInstance(mContext).
|
||||
unregisterOnMessageListener(301001, mTrafficNoticeListener);
|
||||
MogoAiCloudSocketManager.getInstance(mContext).
|
||||
unregisterOnMessageListener(100, mNormalNoticeListener);
|
||||
}
|
||||
|
||||
/**
|
||||
* 普通云公告
|
||||
*/
|
||||
private final IMogoOnMessageListener<NoticeNormalData> mNormalNoticeListener = new IMogoOnMessageListener<NoticeNormalData>() {
|
||||
@Override
|
||||
public Class<NoticeNormalData> target() {
|
||||
return NoticeNormalData.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMsgReceived(NoticeNormalData obj) {
|
||||
if (obj == null) {
|
||||
return;
|
||||
}
|
||||
CallerLogger.INSTANCE.d(M_NOTICE + TAG, "100-- 普通公告数据:" + GsonUtil.jsonFromObject(obj));
|
||||
NoticeFrCloudMsg noticeFromCloudMsg = new NoticeFrCloudMsg(obj, null, 0);
|
||||
CallerMsgBoxManager.INSTANCE.saveMsgBox(new MsgBoxBean(MsgBoxType.NOTICE, noticeFromCloudMsg));
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 交警类型公告弹窗
|
||||
*/
|
||||
private final IMogoOnMessageListener<NoticeTrafficStylePushData> mTrafficNoticeListener = new IMogoOnMessageListener<NoticeTrafficStylePushData>() {
|
||||
|
||||
@Override
|
||||
public Class<NoticeTrafficStylePushData> target() {
|
||||
return NoticeTrafficStylePushData.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMsgReceived(NoticeTrafficStylePushData obj) {
|
||||
if (obj == null) {
|
||||
return;
|
||||
}
|
||||
CallerLogger.INSTANCE.d(M_NOTICE + TAG, "301001-- 交警类型公告数据:" + GsonUtil.jsonFromObject(obj));
|
||||
NoticeFrCloudMsg noticeFromCloudMsg = new NoticeFrCloudMsg(null, obj, 1);
|
||||
CallerMsgBoxManager.INSTANCE.saveMsgBox(new MsgBoxBean(MsgBoxType.NOTICE, noticeFromCloudMsg));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,289 @@
|
||||
package com.mogo.eagle.function.biz.push.dispatch
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.os.Handler
|
||||
import android.os.Message
|
||||
import com.mogo.aicloud.services.socket.IMogoOnMessageListener
|
||||
import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager
|
||||
import com.mogo.cloud.commons.utils.CoordinateUtils
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotRouteInfo
|
||||
import com.mogo.eagle.core.data.dispatch.DispatchAdasAutoPilotLocReceiverBean
|
||||
import com.mogo.eagle.core.data.map.MogoLatLng
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningListener
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
|
||||
import com.mogo.eagle.core.function.api.hmi.autopilot.IMoGoCheckAutoPilotBtnListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListenerManager
|
||||
import com.mogo.eagle.core.function.call.hmi.CallerHmiListenerManager
|
||||
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.eagle.function.biz.push.dispatch.network.DispatchServiceModel.Companion.DISPATCH_RESULT_AFFIRM
|
||||
import com.mogo.eagle.function.biz.push.dispatch.network.DispatchServiceModel.Companion.DISPATCH_RESULT_MANUAL_CANCEL
|
||||
import com.mogo.eagle.function.biz.push.dispatch.network.DispatchServiceModel.Companion.DISPATCH_RESULT_TIMER_CANCEL
|
||||
import com.mogo.eagle.function.biz.push.dispatch.network.DispatchServiceModel.Companion.dispatchServiceModel
|
||||
import mogo.telematics.pad.MessagePad
|
||||
|
||||
|
||||
//负责监听自动驾驶状态并进行状态上报,自动驾驶路线上报,接收调度指令展示指令弹窗
|
||||
class DispatchAutoPilotManager private constructor() :
|
||||
IMogoOnMessageListener<DispatchAdasAutoPilotLocReceiverBean>, IMoGoCheckAutoPilotBtnListener,
|
||||
IMoGoAutopilotPlanningListener, IMoGoAutopilotStatusListener {
|
||||
|
||||
companion object {
|
||||
private const val TAG = "DispatchAutoPilotManager"
|
||||
|
||||
private const val MSG_SOCKET_TYPE = 501000
|
||||
private const val MSG_TYPE_SHOW_DIALOG = 0
|
||||
private const val MSG_TYPE_UPLOAD_AUTOPILOT_STATUS = 1
|
||||
|
||||
val dispatchAutoPilotManager by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
|
||||
DispatchAutoPilotManager()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private var mContext: Context? = null
|
||||
private var receiverBean: DispatchAdasAutoPilotLocReceiverBean? = null
|
||||
private var isDispatch = false
|
||||
private var isArriveEnd = false
|
||||
|
||||
private val handler: Handler = object : Handler() {
|
||||
override fun handleMessage(msg: Message) {
|
||||
super.handleMessage(msg)
|
||||
if (msg.what == MSG_TYPE_SHOW_DIALOG) {
|
||||
isDispatch = true
|
||||
isArriveEnd = false
|
||||
val msgData: DispatchAdasAutoPilotLocReceiverBean =
|
||||
msg.obj as DispatchAdasAutoPilotLocReceiverBean
|
||||
CallerHmiManager.showDispatchDialog(msgData)
|
||||
} else if (msg.what == MSG_TYPE_UPLOAD_AUTOPILOT_STATUS) {
|
||||
dispatchServiceModel.uploadAutopilotStatus(
|
||||
getAutoPilotStatusInfo().state,
|
||||
getAutoPilotStatusInfo().reason
|
||||
)
|
||||
sendEmptyMessageDelayed(MSG_TYPE_UPLOAD_AUTOPILOT_STATUS, 1000L)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun init(context: Context) {
|
||||
mContext = context
|
||||
MogoAiCloudSocketManager.getInstance(context)
|
||||
.registerOnMessageListener(MSG_SOCKET_TYPE, this)
|
||||
// 添加自动驾驶按钮选中监听
|
||||
CallerHmiListenerManager.addCheckAutoPilotBtnListener(TAG, this)
|
||||
// 添加 规划路径相关回调 监听
|
||||
CallerAutopilotPlanningListenerManager.addListener(TAG, this)
|
||||
// 添加 ADAS状态 监听
|
||||
CallerAutoPilotStatusListenerManager.addListener(TAG, this)
|
||||
handler.sendEmptyMessageDelayed(MSG_TYPE_UPLOAD_AUTOPILOT_STATUS, 1000L)
|
||||
}
|
||||
|
||||
fun release() {
|
||||
// 添加自动驾驶按钮选中监听
|
||||
CallerHmiListenerManager.removeCheckAutoPilotBtnListener(TAG)
|
||||
// 添加 规划路径相关回调 监听
|
||||
CallerAutopilotPlanningListenerManager.removeListener(TAG)
|
||||
// 添加 ADAS状态 监听
|
||||
CallerAutoPilotStatusListenerManager.removeListener(TAG)
|
||||
}
|
||||
|
||||
override fun target(): Class<DispatchAdasAutoPilotLocReceiverBean> {
|
||||
return DispatchAdasAutoPilotLocReceiverBean::class.java
|
||||
}
|
||||
|
||||
override fun onMsgReceived(adasAutoPilotLocReceiverBean: DispatchAdasAutoPilotLocReceiverBean?) {
|
||||
if (adasAutoPilotLocReceiverBean != null && adasAutoPilotLocReceiverBean.startLat != 0.0 && adasAutoPilotLocReceiverBean.startLon != 0.0) {
|
||||
receiverBean = adasAutoPilotLocReceiverBean
|
||||
val message = Message()
|
||||
message.what = MSG_TYPE_SHOW_DIALOG
|
||||
message.obj = adasAutoPilotLocReceiverBean
|
||||
handler.sendMessage(message)
|
||||
}
|
||||
}
|
||||
|
||||
private fun startAutoPilot() {
|
||||
val currentAutopilot = AutopilotControlParameters()
|
||||
currentAutopilot.isSpeakVoice = false
|
||||
val wayLatLon: MutableList<AutopilotControlParameters.AutoPilotLonLat> = ArrayList()
|
||||
receiverBean?.let {
|
||||
if (it.stopsList != null) {
|
||||
for (mogoLatLng in receiverBean!!.stopsList) {
|
||||
wayLatLon.add(
|
||||
AutopilotControlParameters.AutoPilotLonLat(
|
||||
mogoLatLng.lat,
|
||||
mogoLatLng.lon
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
currentAutopilot.wayLatLons = wayLatLon
|
||||
currentAutopilot.startLatLon =
|
||||
AutopilotControlParameters.AutoPilotLonLat(it.startLat, it.startLon)
|
||||
currentAutopilot.endLatLon =
|
||||
AutopilotControlParameters.AutoPilotLonLat(it.endLat, it.endLon)
|
||||
currentAutopilot.vehicleType = 10
|
||||
CallerLogger.d(SceneConstant.Companion.M_DISPATCH + TAG, "开启自动驾驶====$currentAutopilot")
|
||||
CallerAutoPilotManager.startAutoPilot(currentAutopilot)
|
||||
}
|
||||
}
|
||||
|
||||
fun affirm() {
|
||||
CallerHmiManager.dismissDispatchDialog()
|
||||
dispatchServiceModel.dispatchResultUpload(DISPATCH_RESULT_AFFIRM)
|
||||
}
|
||||
|
||||
fun cancel(manualTrigger: Boolean) {
|
||||
CallerHmiManager.dismissDispatchDialog()
|
||||
dispatchServiceModel.dispatchResultUpload(
|
||||
if (manualTrigger) DISPATCH_RESULT_MANUAL_CANCEL else DISPATCH_RESULT_TIMER_CANCEL
|
||||
)
|
||||
}
|
||||
|
||||
override fun onCheck(isChecked: Boolean) {
|
||||
if (isChecked) {
|
||||
// 确保到达终点后,再次点击,不会有回馈,并且在下次调开始时,才会重置
|
||||
if (isArriveEnd) {
|
||||
return
|
||||
}
|
||||
//todo 确认是否要根据停靠时自动驾驶状态,再次开启自动驾驶
|
||||
// 确保处于调度中并且返回的自动驾驶状态为1才开启自动驾驶
|
||||
// 上述等待鄂州项目复盘后,产品输出完成方案后再进操作!!!
|
||||
if (isDispatch) {
|
||||
startAutoPilot()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onAutopilotRotting(globalPathResp: MessagePad.GlobalPathResp?) {
|
||||
if (globalPathResp == null || globalPathResp.wayPointsList.isEmpty()) {
|
||||
return
|
||||
}
|
||||
val list: MutableList<AutopilotRouteInfo.RouteModels> = ArrayList()
|
||||
for (location in globalPathResp.wayPointsList) {
|
||||
val routeModels = AutopilotRouteInfo.RouteModels()
|
||||
routeModels.lat = location.latitude
|
||||
routeModels.lon = location.longitude
|
||||
list.add(routeModels)
|
||||
}
|
||||
dispatchServiceModel.uploadAutopilotRoute(list)
|
||||
}
|
||||
|
||||
override fun onAutopilotArriveAtStation(arrivalNotification: MessagePad.ArrivalNotification?) {
|
||||
if (!isDispatch) {
|
||||
return
|
||||
}
|
||||
if (arrivalNotification == null) {
|
||||
return
|
||||
}
|
||||
if (receiverBean == null) {
|
||||
return
|
||||
}
|
||||
|
||||
CallerLogger.d(
|
||||
SceneConstant.Companion.M_DISPATCH + TAG,
|
||||
"onArriveAt data : $arrivalNotification"
|
||||
)
|
||||
|
||||
if (arrivalNotification.endLocation == null) {
|
||||
return
|
||||
}
|
||||
val endLat: Double = arrivalNotification.endLocation.latitude
|
||||
val endLon: Double = arrivalNotification.endLocation.longitude
|
||||
// 计算是不是到了终点
|
||||
val distanceFromSelf: Float = CoordinateUtils.calculateLineDistance(
|
||||
receiverBean!!.endLon, receiverBean!!.endLat, endLon, endLat
|
||||
)
|
||||
CallerLogger.d(
|
||||
SceneConstant.Companion.M_DISPATCH + TAG,
|
||||
"onArriveAt cal distance : $distanceFromSelf"
|
||||
)
|
||||
if (distanceFromSelf < 10) {
|
||||
CallerLogger.d(SceneConstant.Companion.M_DISPATCH + TAG, "onArriveAt end location")
|
||||
isDispatch = false
|
||||
isArriveEnd = true
|
||||
}
|
||||
}
|
||||
|
||||
fun testDispatch(sceneType: Int) {
|
||||
when (sceneType) {
|
||||
0 -> testEZhouStart()
|
||||
1 -> testEZhouStop()
|
||||
2 -> testHengYangStart()
|
||||
3 -> testDispatchResultUpload()//验证自动驾驶调度上报接口
|
||||
}
|
||||
}
|
||||
|
||||
private fun testEZhouStart() {
|
||||
val adasAutoPilotLocReceiverBean = DispatchAdasAutoPilotLocReceiverBean(
|
||||
DispatchAdasAutoPilotLocReceiverBean.DISPATCH_SOURCE_EZHOU,
|
||||
DispatchAdasAutoPilotLocReceiverBean.DISPATCH_TYPE_START,
|
||||
"1",
|
||||
26.825571122,
|
||||
112.5762410415,
|
||||
"起点---5号跑道",
|
||||
26.825571122,
|
||||
112.5762410415,
|
||||
"终点---鄂州机场",
|
||||
"5分钟",
|
||||
"AR453航班",
|
||||
"你车需执行编号ca1098次航班的引导任务,从A区A1到B区B1",
|
||||
System.currentTimeMillis(),
|
||||
ArrayList<MogoLatLng>()
|
||||
)
|
||||
receiverBean = adasAutoPilotLocReceiverBean
|
||||
CallerHmiManager.showDispatchDialog(adasAutoPilotLocReceiverBean)
|
||||
}
|
||||
|
||||
private fun testEZhouStop() {
|
||||
val adasAutoPilotLocReceiverBean = DispatchAdasAutoPilotLocReceiverBean(
|
||||
DispatchAdasAutoPilotLocReceiverBean.DISPATCH_SOURCE_EZHOU,
|
||||
DispatchAdasAutoPilotLocReceiverBean.DISPATCH_TYPE_STOP,
|
||||
"1",
|
||||
0.0,
|
||||
0.0,
|
||||
"",
|
||||
0.0,
|
||||
0.0,
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
System.currentTimeMillis(),
|
||||
ArrayList<MogoLatLng>()
|
||||
)
|
||||
receiverBean = adasAutoPilotLocReceiverBean
|
||||
CallerHmiManager.showDispatchDialog(adasAutoPilotLocReceiverBean)
|
||||
}
|
||||
|
||||
private fun testHengYangStart() {
|
||||
val adasAutoPilotLocReceiverBean = DispatchAdasAutoPilotLocReceiverBean(
|
||||
DispatchAdasAutoPilotLocReceiverBean.DISPATCH_SOURCE_HENGYANG,
|
||||
DispatchAdasAutoPilotLocReceiverBean.DISPATCH_TYPE_START,
|
||||
"2",
|
||||
26.825571122,
|
||||
112.5762410415,
|
||||
"衡阳科学城",
|
||||
26.825571122,
|
||||
112.5762410415,
|
||||
"衡阳首钢集团",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
System.currentTimeMillis(),
|
||||
ArrayList<MogoLatLng>()
|
||||
)
|
||||
receiverBean = adasAutoPilotLocReceiverBean
|
||||
CallerHmiManager.showDispatchDialog(adasAutoPilotLocReceiverBean)
|
||||
}
|
||||
|
||||
private fun testDispatchResultUpload() {
|
||||
dispatchServiceModel.dispatchResultUpload(DISPATCH_RESULT_AFFIRM)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
package com.mogo.eagle.function.biz.push.dispatch.network
|
||||
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
|
||||
import com.mogo.commons.constants.HostConst
|
||||
import com.mogo.commons.context.ContextHolderUtil
|
||||
import com.mogo.eagle.core.data.BaseData
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotRouteInfo.RouteModels
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotStatus
|
||||
import com.mogo.eagle.core.data.dispatch.ReportDispatchResult
|
||||
import com.mogo.eagle.core.data.dispatch.ReportedRoute
|
||||
import com.mogo.eagle.core.network.MoGoRetrofitFactory
|
||||
import com.mogo.eagle.core.network.RequestOptions
|
||||
import com.mogo.eagle.core.network.SubscribeImpl
|
||||
import com.mogo.eagle.core.network.utils.GsonUtil
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import java.util.*
|
||||
|
||||
class DispatchServiceModel private constructor() {
|
||||
|
||||
companion object {
|
||||
|
||||
const val DISPATCH_RESULT_AFFIRM = 0
|
||||
const val DISPATCH_RESULT_MANUAL_CANCEL = 1
|
||||
const val DISPATCH_RESULT_TIMER_CANCEL = 2
|
||||
|
||||
val dispatchServiceModel by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
|
||||
DispatchServiceModel()
|
||||
}
|
||||
}
|
||||
|
||||
private var mAdasApiService: IDispatchAdasApiService =
|
||||
MoGoRetrofitFactory.getInstance(HostConst.DATA_SERVICE_HOST).create(
|
||||
IDispatchAdasApiService::class.java
|
||||
)
|
||||
|
||||
/**
|
||||
* 上报自动驾驶状态
|
||||
*/
|
||||
fun uploadAutopilotStatus(state: Int, reason: String?) {
|
||||
val autopilotStatus = AutopilotStatus()
|
||||
autopilotStatus.action = "autopilotstate"
|
||||
val valuesBean = AutopilotStatus.ValuesBean()
|
||||
valuesBean.state = state
|
||||
valuesBean.reason = reason
|
||||
autopilotStatus.values = valuesBean
|
||||
val sn = MoGoAiCloudClientConfig.getInstance().sn
|
||||
val reportedRoute = ReportedRoute(sn, autopilotStatus.values)
|
||||
val map: MutableMap<String, Any> = HashMap()
|
||||
map["sn"] = sn
|
||||
map["data"] = GsonUtil.jsonFromObject(reportedRoute)
|
||||
mAdasApiService.uploadAutopilotState(map)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(object :
|
||||
SubscribeImpl<BaseData>(RequestOptions.create(ContextHolderUtil.getContext())) {
|
||||
override fun onNext(o: BaseData) {
|
||||
super.onNext(o)
|
||||
}
|
||||
|
||||
override fun onError(e: Throwable) {
|
||||
super.onError(e)
|
||||
}
|
||||
|
||||
override fun onSuccess(o: BaseData) {
|
||||
super.onSuccess(o)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 上报自动驾驶路线
|
||||
*
|
||||
* @param list 路线集合
|
||||
*/
|
||||
fun uploadAutopilotRoute(list: List<RouteModels?>?) {
|
||||
val sn = MoGoAiCloudClientConfig.getInstance().sn
|
||||
val reportedRoute = ReportedRoute(sn, GsonUtil.jsonFromObject(list))
|
||||
val map: MutableMap<String, Any> = HashMap()
|
||||
map["sn"] = sn
|
||||
map["data"] = GsonUtil.jsonFromObject(reportedRoute)
|
||||
mAdasApiService.uploadAutopilotRoute(map)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(object :
|
||||
SubscribeImpl<BaseData>(RequestOptions.create(ContextHolderUtil.getContext())) {
|
||||
override fun onNext(o: BaseData) {
|
||||
super.onNext(o)
|
||||
}
|
||||
|
||||
override fun onError(e: Throwable) {
|
||||
super.onError(e)
|
||||
}
|
||||
|
||||
override fun onSuccess(o: BaseData) {
|
||||
super.onSuccess(o)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 上报调度处理结果
|
||||
*
|
||||
* @param dispatchResultType int
|
||||
*/
|
||||
fun dispatchResultUpload(
|
||||
dispatchResultType: Int,
|
||||
onSuccess: ((BaseData) -> Unit)? = null,
|
||||
onError: ((String) -> Unit)? = null
|
||||
) {
|
||||
val sn = MoGoAiCloudClientConfig.getInstance().sn
|
||||
val reportDispatchResult = ReportDispatchResult(sn, dispatchResultType)
|
||||
val map: MutableMap<String, Any> = HashMap()
|
||||
map["sn"] = sn
|
||||
map["data"] = GsonUtil.jsonFromObject(reportDispatchResult)
|
||||
mAdasApiService.uploadDispatchResult(map)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(object :
|
||||
SubscribeImpl<BaseData>(RequestOptions.create(ContextHolderUtil.getContext())) {
|
||||
override fun onNext(o: BaseData) {
|
||||
super.onNext(o)
|
||||
onSuccess?.invoke(o)
|
||||
}
|
||||
|
||||
override fun onError(e: Throwable) {
|
||||
super.onError(e)
|
||||
if (!e.message.isNullOrBlank()) {
|
||||
onError?.invoke(e.message!!)
|
||||
} else {
|
||||
onError?.invoke("上报失败")
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSuccess(o: BaseData) {
|
||||
super.onSuccess(o)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package com.mogo.eagle.function.biz.push.dispatch.network
|
||||
|
||||
import com.mogo.eagle.core.data.BaseData
|
||||
import io.reactivex.Observable
|
||||
import retrofit2.http.FieldMap
|
||||
import retrofit2.http.FormUrlEncoded
|
||||
import retrofit2.http.POST
|
||||
|
||||
interface IDispatchAdasApiService {
|
||||
/**
|
||||
* 上报自动驾驶路径 服务于业务调度
|
||||
*
|
||||
* @param parameters map
|
||||
* @return [BaseData]
|
||||
*/
|
||||
@FormUrlEncoded
|
||||
@POST("/dataService/autoDriver/receiveCarPreSetPath")
|
||||
fun uploadAutopilotRoute(@FieldMap parameters: Map<String, Any>): Observable<BaseData>
|
||||
|
||||
/**
|
||||
* 上报自动驾驶调度处理结果 服务于业务调度
|
||||
*
|
||||
* @param parameters map
|
||||
* @return [BaseData]
|
||||
*/
|
||||
@FormUrlEncoded
|
||||
@POST("/dataService/autoDriver/receiverDestSiteResult")
|
||||
fun uploadDispatchResult(@FieldMap parameters: Map<String, Any>): Observable<BaseData>
|
||||
|
||||
/**
|
||||
* 上报自动驾驶状态 服务于业务调度
|
||||
*
|
||||
* @param parameters map
|
||||
* @return [BaseData]
|
||||
*/
|
||||
@FormUrlEncoded
|
||||
@POST("/dataService/autoDriver/receiveAutopilotState")
|
||||
fun uploadAutopilotState(@FieldMap parameters: Map<String, Any>): Observable<BaseData>
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
package com.mogo.eagle.function.biz.push.notice
|
||||
|
||||
import android.content.Context
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager.saveMsgBox
|
||||
import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager
|
||||
import com.mogo.aicloud.services.socket.IMogoOnMessageListener
|
||||
import com.mogo.eagle.core.data.notice.NoticeNormalData
|
||||
import java.lang.Class
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.eagle.core.data.msgbox.NoticeFrCloudMsg
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxType
|
||||
import com.mogo.eagle.core.data.notice.NoticeTrafficStylePushData
|
||||
import com.mogo.eagle.core.network.utils.GsonUtil
|
||||
|
||||
/**
|
||||
* @author Jing
|
||||
* @description 云公告注册、反注册
|
||||
* @since: 10/27/21
|
||||
*/
|
||||
internal class NoticeSocketManager {
|
||||
|
||||
private var mContext: Context? = null
|
||||
|
||||
companion object {
|
||||
private const val TAG = "NoticeSocketManager"
|
||||
|
||||
val noticeSocketManager:NoticeSocketManager by lazy(LazyThreadSafetyMode.SYNCHRONIZED){
|
||||
NoticeSocketManager()
|
||||
}
|
||||
}
|
||||
|
||||
fun init(context: Context) {
|
||||
mContext = context
|
||||
MogoAiCloudSocketManager.getInstance(context)
|
||||
.registerOnMessageListener(301001, mTrafficNoticeListener)
|
||||
MogoAiCloudSocketManager.getInstance(context)
|
||||
.registerOnMessageListener(100, mNormalNoticeListener)
|
||||
}
|
||||
|
||||
fun release() {
|
||||
MogoAiCloudSocketManager.getInstance(mContext)
|
||||
.unregisterOnMessageListener(301001, mTrafficNoticeListener)
|
||||
MogoAiCloudSocketManager.getInstance(mContext)
|
||||
.unregisterOnMessageListener(100, mNormalNoticeListener)
|
||||
}
|
||||
|
||||
/**
|
||||
* 普通云公告
|
||||
*/
|
||||
private val mNormalNoticeListener: IMogoOnMessageListener<NoticeNormalData> =
|
||||
object : IMogoOnMessageListener<NoticeNormalData> {
|
||||
override fun target(): Class<NoticeNormalData> {
|
||||
return NoticeNormalData::class.java
|
||||
}
|
||||
|
||||
override fun onMsgReceived(obj: NoticeNormalData?) {
|
||||
if (obj == null) {
|
||||
return
|
||||
}
|
||||
d(SceneConstant.M_NOTICE + TAG, "100-- 普通公告数据:" + GsonUtil.jsonFromObject(obj))
|
||||
val noticeFromCloudMsg = NoticeFrCloudMsg(obj, null, 0)
|
||||
saveMsgBox(MsgBoxBean(MsgBoxType.NOTICE, noticeFromCloudMsg))
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 交警类型公告弹窗
|
||||
*/
|
||||
private val mTrafficNoticeListener: IMogoOnMessageListener<NoticeTrafficStylePushData> =
|
||||
object : IMogoOnMessageListener<NoticeTrafficStylePushData> {
|
||||
override fun target(): Class<NoticeTrafficStylePushData> {
|
||||
return NoticeTrafficStylePushData::class.java
|
||||
}
|
||||
|
||||
override fun onMsgReceived(obj: NoticeTrafficStylePushData?) {
|
||||
if (obj == null) {
|
||||
return
|
||||
}
|
||||
d(SceneConstant.M_NOTICE + TAG, "301001-- 交警类型公告数据:" + GsonUtil.jsonFromObject(obj))
|
||||
val noticeFromCloudMsg = NoticeFrCloudMsg(null, obj, 1)
|
||||
saveMsgBox(MsgBoxBean(MsgBoxType.NOTICE, noticeFromCloudMsg))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.eagle.function.biz.push.network;
|
||||
package com.mogo.eagle.function.biz.push.notice.network;
|
||||
|
||||
import com.mogo.eagle.core.data.BaseData;
|
||||
import com.mogo.eagle.core.data.notice.NoticeNormalDetail;
|
||||
@@ -19,7 +19,7 @@ import retrofit2.http.QueryMap;
|
||||
* @description 云公告相关的短链请求接口定义
|
||||
* @since: 10/28/21
|
||||
*/
|
||||
public interface NoticeApiService {
|
||||
public interface INoticeApiService {
|
||||
/**
|
||||
* 获取道路事故详情
|
||||
*
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.eagle.function.biz.push.network;
|
||||
package com.mogo.eagle.function.biz.push.notice.network;
|
||||
|
||||
import android.util.ArrayMap;
|
||||
|
||||
@@ -7,9 +7,10 @@ import com.mogo.cloud.network.RetrofitFactory;
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClient;
|
||||
import com.mogo.eagle.core.data.BaseData;
|
||||
import com.mogo.eagle.core.data.notice.NoticeNormalDetail;
|
||||
import com.mogo.eagle.core.data.notice.NoticeRequest;
|
||||
import com.mogo.eagle.core.data.notice.NoticeTrafficStyleInfo;
|
||||
|
||||
import com.mogo.eagle.core.function.api.notice.NoticeNetCallBack;
|
||||
import com.mogo.eagle.core.function.api.biz.IMoGoNoticeNetCallBack;
|
||||
import com.mogo.eagle.core.network.utils.GsonUtil;
|
||||
|
||||
import java.util.HashMap;
|
||||
@@ -30,11 +31,11 @@ import okhttp3.RequestBody;
|
||||
*/
|
||||
public class NoticeNetWorkManager {
|
||||
private static volatile NoticeNetWorkManager requestNoticeManager;
|
||||
private final NoticeApiService mNoticeApiService;
|
||||
private final INoticeApiService mNoticeApiService;
|
||||
|
||||
private NoticeNetWorkManager() {
|
||||
mNoticeApiService = RetrofitFactory.INSTANCE.getInstance(NetConstants.DEVA_HOST)
|
||||
.create(NoticeApiService.class);
|
||||
.create(INoticeApiService.class);
|
||||
}
|
||||
|
||||
public static NoticeNetWorkManager getInstance() {
|
||||
@@ -54,8 +55,7 @@ public class NoticeNetWorkManager {
|
||||
* @param infoId 事故id
|
||||
* @param callBack 回调
|
||||
*/
|
||||
public void requestAccidentInfo(String infoId, String sn,NoticeNetCallBack callBack) {
|
||||
|
||||
public void requestAccidentInfo(String infoId, String sn, IMoGoNoticeNetCallBack callBack) {
|
||||
NoticeRequest request = new NoticeRequest(infoId);
|
||||
RequestBody requestBody = RequestBody.create(MediaType.get("application/json;charset=UTF-8"),
|
||||
GsonUtil.jsonFromObject(request));
|
||||
@@ -1 +0,0 @@
|
||||
/build
|
||||
@@ -1,71 +0,0 @@
|
||||
plugins {
|
||||
id 'com.android.library'
|
||||
id 'kotlin-android'
|
||||
id 'kotlin-android-extensions'
|
||||
id 'kotlin-kapt'
|
||||
id 'com.alibaba.arouter'
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion rootProject.ext.android.compileSdkVersion
|
||||
// buildToolsVersion rootProject.ext.android.buildToolsVersion
|
||||
defaultConfig {
|
||||
minSdkVersion rootProject.ext.android.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.android.targetSdkVersion
|
||||
versionCode Integer.valueOf(VERSION_CODE)
|
||||
versionName getValueFromRootProperties("${project.name.replace("-", "_").toUpperCase()}_VERSION")
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
consumerProguardFiles 'consumer-rules.pro'
|
||||
//ARouter apt 参数
|
||||
kapt {
|
||||
useBuildCache = false
|
||||
arguments {
|
||||
arg("AROUTER_MODULE_NAME", project.getName())
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
implementation rootProject.ext.dependencies.kotlinstdlibjdk7
|
||||
implementation rootProject.ext.dependencies.androidxconstraintlayout
|
||||
implementation rootProject.ext.dependencies.androidxccorektx
|
||||
implementation rootProject.ext.dependencies.coroutinesandroid
|
||||
implementation rootProject.ext.dependencies.coroutinescore
|
||||
|
||||
implementation rootProject.ext.dependencies.rxjava
|
||||
implementation rootProject.ext.dependencies.rxandroid
|
||||
|
||||
implementation rootProject.ext.dependencies.arouter
|
||||
kapt rootProject.ext.dependencies.aroutercompiler
|
||||
|
||||
if (Boolean.valueOf(USE_MAVEN_PACKAGE)) {
|
||||
|
||||
implementation rootProject.ext.dependencies.mogo_core_data
|
||||
implementation rootProject.ext.dependencies.mogo_core_utils
|
||||
implementation rootProject.ext.dependencies.mogo_core_network
|
||||
implementation rootProject.ext.dependencies.mogo_core_function_call
|
||||
}else{
|
||||
implementation project(":foudations:mogo-commons")
|
||||
implementation project(':core:mogo-core-data')
|
||||
implementation project(':core:mogo-core-utils')
|
||||
implementation project(':core:mogo-core-network')
|
||||
implementation project(':core:mogo-core-function-call')
|
||||
}
|
||||
}
|
||||
|
||||
apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()
|
||||
@@ -1,3 +0,0 @@
|
||||
GROUP=com.mogo.eagle.core.function.impl
|
||||
POM_ARTIFACT_ID=dispatch
|
||||
VERSION_CODE=1
|
||||
@@ -1,21 +0,0 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# You can control the set of applied configuration files using the
|
||||
# proguardFiles setting in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
|
||||
# Uncomment this to preserve the line number information for
|
||||
# debugging stack traces.
|
||||
#-keepattributes SourceFile,LineNumberTable
|
||||
|
||||
# If you keep the line number information, uncomment this to
|
||||
# hide the original source file name.
|
||||
#-renamesourcefileattribute SourceFile
|
||||
@@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.zhjt.dispatch">
|
||||
|
||||
<application>
|
||||
|
||||
<receiver android:name=".DispatchTestPanelBroadCastReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="com.dispatch.test_panel_control" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
</application>
|
||||
</manifest>
|
||||
@@ -1,331 +0,0 @@
|
||||
package com.zhjt.dispatch;
|
||||
|
||||
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_DISPATCH;
|
||||
import static com.zhjt.dispatch.model.DispatchServiceModel.DISPATCH_RESULT_AFFIRM;
|
||||
import static com.zhjt.dispatch.model.DispatchServiceModel.DISPATCH_RESULT_MANUAL_CANCEL;
|
||||
import static com.zhjt.dispatch.model.DispatchServiceModel.DISPATCH_RESULT_TIMER_CANCEL;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.mogo.aicloud.services.socket.IMogoOnMessageListener;
|
||||
import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager;
|
||||
import com.mogo.cloud.commons.utils.CoordinateUtils;
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters;
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotRouteInfo;
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo;
|
||||
import com.mogo.eagle.core.data.dispatch.DispatchAdasAutoPilotLocReceiverBean;
|
||||
import com.mogo.eagle.core.data.map.MogoLatLng;
|
||||
import com.mogo.eagle.core.data.map.MogoLocation;
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningListener;
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener;
|
||||
import com.mogo.eagle.core.function.api.hmi.autopilot.IMoGoCheckAutoPilotBtnListener;
|
||||
import com.mogo.eagle.core.function.api.map.listener.IMoGoMapLocationListener;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListenerManager;
|
||||
import com.mogo.eagle.core.function.call.hmi.CallerHmiListenerManager;
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapLocationListenerManager;
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
import com.zhjt.dispatch.model.DispatchServiceModel;
|
||||
import com.zhjt.dispatch.model.IDispatch;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import mogo.telematics.pad.MessagePad;
|
||||
import mogo_msg.MogoReportMsg;
|
||||
import system_master.SystemStatusInfo;
|
||||
|
||||
//负责监听自动驾驶状态并进行状态上报,自动驾驶路线上报,接收调度指令展示指令弹窗
|
||||
public class DispatchAutoPilotManager implements IMogoOnMessageListener<DispatchAdasAutoPilotLocReceiverBean>
|
||||
, IDispatchRemindClickListener, IMoGoCheckAutoPilotBtnListener, IMoGoAutopilotPlanningListener, IMoGoAutopilotStatusListener, IMoGoMapLocationListener {
|
||||
|
||||
private static final String TAG = "DispatchAutoPilotManager";
|
||||
private static volatile DispatchAutoPilotManager instance;
|
||||
private static final byte[] obj = new byte[0];
|
||||
private Context mContext;
|
||||
private static final int MSG_SOCKET_TYPE = 501000;
|
||||
private static final int MSG_TYPE_SHOW_DIALOG = 0;
|
||||
private static final int MSG_TYPE_UPLOAD_AUTOPILOT_STATUS = 1;
|
||||
|
||||
private DispatchDialogManager dispatchDialogManager;
|
||||
private MogoLocation mogoLocation;
|
||||
private DispatchAdasAutoPilotLocReceiverBean receiverBean;
|
||||
private int autoPilotStatus = 0;
|
||||
private String reason = null;
|
||||
private boolean isDispatch = false;
|
||||
private boolean isArriveEnd = false;
|
||||
|
||||
private DispatchAutoPilotManager() {
|
||||
|
||||
}
|
||||
|
||||
public static DispatchAutoPilotManager getInstance() {
|
||||
if (instance == null) {
|
||||
synchronized (obj) {
|
||||
if (instance == null) {
|
||||
instance = new DispatchAutoPilotManager();
|
||||
}
|
||||
}
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
private final Handler handler = new Handler() {
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
super.handleMessage(msg);
|
||||
if (msg.what == MSG_TYPE_SHOW_DIALOG) {
|
||||
if (dispatchDialogManager.isShowing()) {
|
||||
return;
|
||||
}
|
||||
isDispatch = true;
|
||||
isArriveEnd = false;
|
||||
DispatchAdasAutoPilotLocReceiverBean msgData = (DispatchAdasAutoPilotLocReceiverBean) msg.obj;
|
||||
dispatchDialogManager.showDialog(msgData);
|
||||
} else if (msg.what == MSG_TYPE_UPLOAD_AUTOPILOT_STATUS) {
|
||||
DispatchServiceModel.getInstance().uploadAutopilotStatus(autoPilotStatus, reason);
|
||||
handler.sendEmptyMessageDelayed(MSG_TYPE_UPLOAD_AUTOPILOT_STATUS, 1000L);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
public void initSocket(Context context) {
|
||||
mContext = context;
|
||||
|
||||
MogoAiCloudSocketManager.getInstance(context).registerOnMessageListener(MSG_SOCKET_TYPE, this);
|
||||
CallerMapLocationListenerManager.INSTANCE.addListener(TAG, this, false);
|
||||
// 添加自动驾驶按钮选中监听
|
||||
CallerHmiListenerManager.INSTANCE.addCheckAutoPilotBtnListener(TAG, this);
|
||||
// 添加 规划路径相关回调 监听
|
||||
CallerAutopilotPlanningListenerManager.INSTANCE.addListener(TAG, this);
|
||||
// 添加 ADAS状态 监听
|
||||
CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, this);
|
||||
dispatchDialogManager = DispatchDialogManager.getInstance(context);
|
||||
dispatchDialogManager.addIDispatchRemindListener(this);
|
||||
handler.sendEmptyMessageDelayed(MSG_TYPE_UPLOAD_AUTOPILOT_STATUS, 1000L);
|
||||
}
|
||||
|
||||
public void release() {
|
||||
// 添加自动驾驶按钮选中监听
|
||||
CallerHmiListenerManager.INSTANCE.removeCheckAutoPilotBtnListener(TAG);
|
||||
// 添加 规划路径相关回调 监听
|
||||
CallerAutopilotPlanningListenerManager.INSTANCE.removeListener(TAG);
|
||||
// 添加 ADAS状态 监听
|
||||
CallerAutoPilotStatusListenerManager.INSTANCE.removeListener(TAG);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<DispatchAdasAutoPilotLocReceiverBean> target() {
|
||||
return DispatchAdasAutoPilotLocReceiverBean.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMsgReceived(DispatchAdasAutoPilotLocReceiverBean adasAutoPilotLocReceiverBean) {
|
||||
if (adasAutoPilotLocReceiverBean != null
|
||||
&& adasAutoPilotLocReceiverBean.getStartLat() != 0.0
|
||||
&& adasAutoPilotLocReceiverBean.getStartLon() != 0.0) {
|
||||
this.receiverBean = adasAutoPilotLocReceiverBean;
|
||||
Message message = new Message();
|
||||
message.what = MSG_TYPE_SHOW_DIALOG;
|
||||
message.obj = adasAutoPilotLocReceiverBean;
|
||||
handler.sendMessage(message);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void affirm() {
|
||||
dispatchDialogManager.releaseDialog();
|
||||
DispatchServiceModel.getInstance().dispatchResultUpload(DISPATCH_RESULT_AFFIRM, new IDispatch() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
startAutoPilot();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String msg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void startAutoPilot() {
|
||||
AutopilotControlParameters currentAutopilot = new AutopilotControlParameters();
|
||||
currentAutopilot.isSpeakVoice = false;
|
||||
List<AutopilotControlParameters.AutoPilotLonLat> wayLatLon = new ArrayList<>();
|
||||
if (receiverBean != null && receiverBean.getStopsList() != null) {
|
||||
for (MogoLatLng mogoLatLng : receiverBean.getStopsList()) {
|
||||
wayLatLon.add(new AutopilotControlParameters.AutoPilotLonLat(mogoLatLng.lat, mogoLatLng.lon));
|
||||
}
|
||||
}
|
||||
currentAutopilot.wayLatLons = wayLatLon;
|
||||
currentAutopilot.startLatLon = new AutopilotControlParameters.AutoPilotLonLat(receiverBean.getStartLat(), receiverBean.getStartLon());
|
||||
currentAutopilot.endLatLon = new AutopilotControlParameters.AutoPilotLonLat(receiverBean.getEndLat(), receiverBean.getEndLon());
|
||||
currentAutopilot.vehicleType = 10;
|
||||
CallerLogger.INSTANCE.d(M_DISPATCH + TAG, "开启自动驾驶====" + currentAutopilot);
|
||||
CallerAutoPilotManager.INSTANCE.startAutoPilot(currentAutopilot);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(boolean manualTrigger) {
|
||||
dispatchDialogManager.releaseDialog();
|
||||
DispatchServiceModel.getInstance().dispatchResultUpload(manualTrigger ? DISPATCH_RESULT_MANUAL_CANCEL
|
||||
: DISPATCH_RESULT_TIMER_CANCEL, new IDispatch() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String msg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLocationChanged(@Nullable MogoLocation location, int from, boolean isGps) {
|
||||
mogoLocation = location;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCheck(boolean isChecked) {
|
||||
if (isChecked) {
|
||||
// 确保到达终点后,再次点击,不会有回馈,并且在下次调开始时,才会重置
|
||||
if (isArriveEnd) {
|
||||
return;
|
||||
}
|
||||
//todo 确认是否要根据停靠时自动驾驶状态,再次开启自动驾驶
|
||||
// 确保处于调度中并且返回的自动驾驶状态为1才开启自动驾驶
|
||||
// 上述等待鄂州项目复盘后,产品输出完成方案后再进操作!!!
|
||||
if (isDispatch) {
|
||||
startAutoPilot();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void testAutopilotStatus() {
|
||||
autoPilotStatus = 2;
|
||||
}
|
||||
|
||||
public void testEZhouStart() {
|
||||
DispatchAdasAutoPilotLocReceiverBean adasAutoPilotLocReceiverBean = new DispatchAdasAutoPilotLocReceiverBean(
|
||||
DispatchAdasAutoPilotLocReceiverBean.DISPATCH_SOURCE_EZHOU, DispatchAdasAutoPilotLocReceiverBean.DISPATCH_TYPE_START, "1",
|
||||
26.825571122, 112.5762410415, "起点---5号跑道",
|
||||
26.825571122, 112.5762410415, "终点---鄂州机场",
|
||||
"5分钟", "AR453航班", "你车需执行编号ca1098次航班的引导任务,从A区A1到B区B1", System.currentTimeMillis(), new ArrayList<>());
|
||||
this.receiverBean = adasAutoPilotLocReceiverBean;
|
||||
DispatchDialogManager.getInstance(mContext).showDialog(adasAutoPilotLocReceiverBean);
|
||||
}
|
||||
|
||||
public void testEZhouStop() {
|
||||
DispatchAdasAutoPilotLocReceiverBean adasAutoPilotLocReceiverBean = new DispatchAdasAutoPilotLocReceiverBean(
|
||||
DispatchAdasAutoPilotLocReceiverBean.DISPATCH_SOURCE_EZHOU, DispatchAdasAutoPilotLocReceiverBean.DISPATCH_TYPE_STOP, "1",
|
||||
0.0, 0.0, "",
|
||||
0.0, 0.0, "",
|
||||
"", "", "", System.currentTimeMillis(), new ArrayList<>());
|
||||
this.receiverBean = adasAutoPilotLocReceiverBean;
|
||||
DispatchDialogManager.getInstance(mContext).showDialog(adasAutoPilotLocReceiverBean);
|
||||
}
|
||||
|
||||
public void testHengYangStart() {
|
||||
DispatchAdasAutoPilotLocReceiverBean adasAutoPilotLocReceiverBean = new DispatchAdasAutoPilotLocReceiverBean(
|
||||
DispatchAdasAutoPilotLocReceiverBean.DISPATCH_SOURCE_HENGYANG, DispatchAdasAutoPilotLocReceiverBean.DISPATCH_TYPE_START, "2",
|
||||
26.825571122, 112.5762410415, "衡阳科学城",
|
||||
26.825571122, 112.5762410415, "衡阳首钢集团",
|
||||
"", "", "", System.currentTimeMillis(), new ArrayList<>());
|
||||
this.receiverBean = adasAutoPilotLocReceiverBean;
|
||||
DispatchDialogManager.getInstance(mContext).showDialog(adasAutoPilotLocReceiverBean);
|
||||
}
|
||||
|
||||
public void testDispatchResultUpload() {
|
||||
DispatchServiceModel.getInstance().dispatchResultUpload(DISPATCH_RESULT_AFFIRM, new IDispatch() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String msg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAutopilotTrajectory(List<MessagePad.TrajectoryPoint> trajectoryInfos) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAutopilotRotting(MessagePad.GlobalPathResp globalPathResp) {
|
||||
if (globalPathResp == null || globalPathResp.getWayPointsList().size() == 0) {
|
||||
return;
|
||||
}
|
||||
List<AutopilotRouteInfo.RouteModels> list = new ArrayList<>();
|
||||
for (MessagePad.Location location : globalPathResp.getWayPointsList()) {
|
||||
AutopilotRouteInfo.RouteModels routeModels = new AutopilotRouteInfo.RouteModels();
|
||||
routeModels.setLat(location.getLatitude());
|
||||
routeModels.setLon(location.getLongitude());
|
||||
list.add(routeModels);
|
||||
}
|
||||
DispatchServiceModel.getInstance().uploadAutopilotRoute(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autoPilotStatusInfo) {
|
||||
autoPilotStatus = autoPilotStatusInfo.getState();
|
||||
this.reason = autoPilotStatusInfo.getReason();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAutopilotArriveAtStation(MessagePad.ArrivalNotification autopilotWayArrive) {
|
||||
if (!isDispatch) {
|
||||
return;
|
||||
}
|
||||
if (autopilotWayArrive == null) {
|
||||
return;
|
||||
}
|
||||
CallerLogger.INSTANCE.d(M_DISPATCH + TAG, "onArriveAt data : " + autopilotWayArrive.toString());
|
||||
if (autopilotWayArrive.getEndLocation() == null) {
|
||||
return;
|
||||
}
|
||||
double endLat = autopilotWayArrive.getEndLocation().getLatitude();
|
||||
double endLon = autopilotWayArrive.getEndLocation().getLongitude();
|
||||
// 计算是不是到了终点
|
||||
float distanceFromSelf = CoordinateUtils.calculateLineDistance(receiverBean.getEndLon(), receiverBean.getEndLat()
|
||||
, endLon, endLat);
|
||||
CallerLogger.INSTANCE.d(M_DISPATCH + TAG, "onArriveAt cal distance : " + distanceFromSelf);
|
||||
if (distanceFromSelf < 10) {
|
||||
CallerLogger.INSTANCE.d(M_DISPATCH + TAG, "onArriveAt end location");
|
||||
isDispatch = false;
|
||||
isArriveEnd = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAutopilotSNRequest() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAutopilotGuardian(MogoReportMsg.MogoReportMessage guardianInfo) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAutopilotIpcConnectStatusChanged(int status, @Nullable String reason) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAutopilotStatusRespByQuery(@NonNull SystemStatusInfo.StatusInfo status) {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
package com.zhjt.dispatch;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
||||
public class DispatchTestPanelBroadCastReceiver extends BroadcastReceiver {
|
||||
|
||||
private static final String TAG = "DispatchTestPanelBroadCastReceiver";
|
||||
|
||||
/**
|
||||
* Adas测试控制面板广播Action
|
||||
*/
|
||||
public static final String BROADCAST_TEST_PANEL_CONTROL_TYPE_EXTRA_KEY = "sceneType";
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
try {
|
||||
int sceneType = intent.getIntExtra(BROADCAST_TEST_PANEL_CONTROL_TYPE_EXTRA_KEY, 0);
|
||||
// 分发场景
|
||||
dispatchSceneTest(sceneType);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 分发处理场景
|
||||
*
|
||||
* @param sceneType 场景类型
|
||||
*/
|
||||
private void dispatchSceneTest(int sceneType) {
|
||||
if (sceneType == 0) {
|
||||
DispatchAutoPilotManager.getInstance().testEZhouStart();
|
||||
} else if (sceneType == 1) {
|
||||
DispatchAutoPilotManager.getInstance().testEZhouStop();
|
||||
} else if (sceneType == 2) {
|
||||
DispatchAutoPilotManager.getInstance().testHengYangStart();
|
||||
} else if (sceneType == 3) { //验证自动驾驶调度上报接口
|
||||
DispatchAutoPilotManager.getInstance().testDispatchResultUpload();
|
||||
} else if (sceneType == 4) { //更改自动驾驶状态上报
|
||||
DispatchAutoPilotManager.getInstance().testAutopilotStatus();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
package com.zhjt.dispatch;
|
||||
|
||||
|
||||
import com.mogo.eagle.core.function.api.base.IMoGoFunctionServerProvider;
|
||||
|
||||
public interface IDispatchProvider extends IMoGoFunctionServerProvider {
|
||||
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
package com.zhjt.dispatch;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.mogo.eagle.core.data.constants.MogoServicePaths;
|
||||
|
||||
@Route(path = MogoServicePaths.PATH_AI_DISPATCH)
|
||||
public class MoGoDispatchProvider implements IDispatchProvider{
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String getFunctionName() {
|
||||
return "MoGoDispatchProvider";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(Context context) {
|
||||
DispatchAutoPilotManager.getInstance().initSocket(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,154 +0,0 @@
|
||||
package com.zhjt.dispatch.model;
|
||||
|
||||
import static com.mogo.commons.context.ContextHolderUtil.getContext;
|
||||
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClientConfig;
|
||||
import com.mogo.commons.constants.HostConst;
|
||||
import com.mogo.eagle.core.data.BaseData;
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotRouteInfo;
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotStatus;
|
||||
import com.mogo.eagle.core.data.dispatch.ReportDispatchResult;
|
||||
import com.mogo.eagle.core.data.dispatch.ReportedRoute;
|
||||
import com.mogo.eagle.core.network.MoGoRetrofitFactory;
|
||||
import com.mogo.eagle.core.network.RequestOptions;
|
||||
import com.mogo.eagle.core.network.SubscribeImpl;
|
||||
import com.mogo.eagle.core.network.utils.GsonUtil;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
|
||||
|
||||
public class DispatchServiceModel {
|
||||
|
||||
private static volatile DispatchServiceModel instance;
|
||||
private static final byte[] obj = new byte[0];
|
||||
|
||||
public static final int DISPATCH_RESULT_AFFIRM = 0;
|
||||
public static final int DISPATCH_RESULT_MANUAL_CANCEL = 1;
|
||||
public static final int DISPATCH_RESULT_TIMER_CANCEL = 2;
|
||||
|
||||
private final IDispatchAdasApiService mAdasApiService;
|
||||
|
||||
private DispatchServiceModel() {
|
||||
mAdasApiService = MoGoRetrofitFactory.getInstance(HostConst.DATA_SERVICE_HOST).create(IDispatchAdasApiService.class);
|
||||
}
|
||||
|
||||
public static DispatchServiceModel getInstance() {
|
||||
if (instance == null) {
|
||||
synchronized (obj) {
|
||||
if (instance == null) {
|
||||
instance = new DispatchServiceModel();
|
||||
}
|
||||
}
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* 上报自动驾驶状态
|
||||
*/
|
||||
public void uploadAutopilotStatus(int state, String reason) {
|
||||
AutopilotStatus autopilotStatus = new AutopilotStatus();
|
||||
autopilotStatus.setAction("autopilotstate");
|
||||
AutopilotStatus.ValuesBean valuesBean = new AutopilotStatus.ValuesBean();
|
||||
valuesBean.setState(state);
|
||||
valuesBean.setReason(reason);
|
||||
autopilotStatus.setValues(valuesBean);
|
||||
String sn = MoGoAiCloudClientConfig.getInstance().getSn();
|
||||
|
||||
ReportedRoute reportedRoute = new ReportedRoute(sn, autopilotStatus.getValues());
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("sn", sn);
|
||||
map.put("data", GsonUtil.jsonFromObject(reportedRoute));
|
||||
mAdasApiService.uploadAutopilotState(map)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new SubscribeImpl<BaseData>(RequestOptions.create(getContext())) {
|
||||
@Override
|
||||
public void onNext(BaseData o) {
|
||||
super.onNext(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
super.onError(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(BaseData o) {
|
||||
super.onSuccess(o);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 上报自动驾驶路线
|
||||
*
|
||||
* @param list 路线集合
|
||||
*/
|
||||
public void uploadAutopilotRoute(List<AutopilotRouteInfo.RouteModels> list) {
|
||||
String sn = MoGoAiCloudClientConfig.getInstance().getSn();
|
||||
ReportedRoute reportedRoute = new ReportedRoute(sn, GsonUtil.jsonFromObject(list));
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("sn", sn);
|
||||
map.put("data", GsonUtil.jsonFromObject(reportedRoute));
|
||||
mAdasApiService.uploadAutopilotRoute(map)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new SubscribeImpl<BaseData>(RequestOptions.create(getContext())) {
|
||||
@Override
|
||||
public void onNext(BaseData o) {
|
||||
super.onNext(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
super.onError(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(BaseData o) {
|
||||
super.onSuccess(o);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 上报调度处理结果
|
||||
*
|
||||
* @param dispatchResultType int
|
||||
*/
|
||||
public void dispatchResultUpload(int dispatchResultType, IDispatch dispatch) {
|
||||
String sn = MoGoAiCloudClientConfig.getInstance().getSn();
|
||||
ReportDispatchResult reportDispatchResult = new ReportDispatchResult(sn, dispatchResultType);
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("sn", sn);
|
||||
map.put("data", GsonUtil.jsonFromObject(reportDispatchResult));
|
||||
mAdasApiService.uploadDispatchResult(map)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new SubscribeImpl<BaseData>(RequestOptions.create(getContext())) {
|
||||
@Override
|
||||
public void onNext(BaseData o) {
|
||||
super.onNext(o);
|
||||
dispatch.onSuccess();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
super.onError(e);
|
||||
dispatch.onError(e.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(BaseData o) {
|
||||
super.onSuccess(o);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
package com.zhjt.dispatch.model;
|
||||
|
||||
public interface IDispatch {
|
||||
|
||||
void onSuccess();
|
||||
|
||||
void onError(String msg);
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
package com.zhjt.dispatch.model;
|
||||
|
||||
import com.mogo.eagle.core.data.BaseData;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import io.reactivex.Observable;
|
||||
import retrofit2.http.FieldMap;
|
||||
import retrofit2.http.FormUrlEncoded;
|
||||
import retrofit2.http.POST;
|
||||
|
||||
public interface IDispatchAdasApiService {
|
||||
|
||||
/**
|
||||
* 上报自动驾驶路径 服务于业务调度
|
||||
*
|
||||
* @param parameters map
|
||||
* @return {@link BaseData}
|
||||
*/
|
||||
@FormUrlEncoded
|
||||
@POST("/dataService/autoDriver/receiveCarPreSetPath")
|
||||
Observable<BaseData> uploadAutopilotRoute(@FieldMap Map<String, Object> parameters);
|
||||
|
||||
/**
|
||||
* 上报自动驾驶调度处理结果 服务于业务调度
|
||||
*
|
||||
* @param parameters map
|
||||
* @return {@link BaseData}
|
||||
*/
|
||||
@FormUrlEncoded
|
||||
@POST("/dataService/autoDriver/receiverDestSiteResult")
|
||||
Observable<BaseData> uploadDispatchResult(@FieldMap Map<String, Object> parameters);
|
||||
|
||||
/**
|
||||
* 上报自动驾驶状态 服务于业务调度
|
||||
*
|
||||
* @param parameters map
|
||||
* @return {@link BaseData}
|
||||
*/
|
||||
@FormUrlEncoded
|
||||
@POST("/dataService/autoDriver/receiveAutopilotState")
|
||||
Observable<BaseData> uploadAutopilotState(@FieldMap Map<String, Object> parameters);
|
||||
}
|
||||
@@ -1,170 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path
|
||||
android:fillColor="#3DDC84"
|
||||
android:pathData="M0,0h108v108h-108z" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M9,0L9,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,0L19,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M29,0L29,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M39,0L39,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M49,0L49,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M59,0L59,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M69,0L69,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M79,0L79,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M89,0L89,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M99,0L99,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,9L108,9"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,19L108,19"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,29L108,29"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,39L108,39"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,49L108,49"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,59L108,59"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,69L108,69"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,79L108,79"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,89L108,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,99L108,99"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,29L89,29"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,39L89,39"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,49L89,49"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,59L89,59"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,69L89,69"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,79L89,79"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M29,19L29,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M39,19L39,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M49,19L49,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M59,19L59,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M69,19L69,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M79,19L79,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
</vector>
|
||||
@@ -1,13 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="module_services_dispatch_bg">#E63B4577</color>
|
||||
<color name="module_services_dispatch_affirm_bg">#3E7BFE</color>
|
||||
|
||||
<color name="module_services_dispatch_cars_text_loc">#1F9BFE</color>
|
||||
<color name="module_services_dispatch_cars_background">#E63B4577</color>
|
||||
<color name="module_services_dispatch_cars_count_down_txt">#8E9DD4</color>
|
||||
<color name="module_services_dispatch_cars_count_down_bg">#4D000000</color>
|
||||
<color name="module_services_dispatch_cars_line">#66B8BFE8</color>
|
||||
<color name="module_services_dispatch_cars_cancel">#AFB3C7</color>
|
||||
<color name="module_services_remind_background">#E63B4577</color>
|
||||
</resources>
|
||||
@@ -1,39 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<dimen name="module_services_dispatch_airport_dialog_width">1263dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_height">1173dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_corner">32dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_next_level_title_size">38dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_title_size">48dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_task_content_size">42dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_title_margin_top">55dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_startloc_margin_top">219dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_startloc_content_margin_top">288dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_endloc_margin_top">415dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_endloc_content_margin_top">484dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_task_margin_top">621dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_task_content_margin_top">690dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_first_column_margin_left">100dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_last_column_margin_left">852dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_margin_top">86dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_margin_bottom">80dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_affirm_width">700dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_affirm_height">140dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_affirm_corner">70dp</dimen>
|
||||
|
||||
<dimen name="module_services_dispatch_cars_dialog_width">950dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_height">540dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_corner">32dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_title_size">48dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_title_margin_top">55dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_content_size">38dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_content_margin_top">179dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_loc_size">54dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_loc_margin_top">251dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_line_margin_bottom">152dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_btn_width">474.5dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_timer_margin">20dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_timer_size">46dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_timer_txt_size">24dp</dimen>
|
||||
</resources>
|
||||
@@ -1,14 +0,0 @@
|
||||
<resources>
|
||||
<string name="module_services_dispatch_dialog_title">您有新的工作任务</string>
|
||||
<string name="module_services_dispatch_dialog_start_loc">开始地点:</string>
|
||||
<string name="module_services_dispatch_dialog_end_loc">结束地点:</string>
|
||||
<string name="module_services_dispatch_dialog_task_time">任务时间:</string>
|
||||
<string name="module_services_dispatch_dialog_task_info">任务内容:</string>
|
||||
<string name="module_services_dispatch_dialog_flight_info">航班信息:</string>
|
||||
<string name="module_services_dispatch_dialog_affirm">接受任务</string>
|
||||
|
||||
<string name="module_services_dispatch_cars_remind_title">调度确认</string>
|
||||
<string name="module_services_dispatch_cars_remind_content">车辆将开启自动驾驶,并行驶至:</string>
|
||||
<string name="module_services_dispatch_cars_affirm">确认</string>
|
||||
<string name="module_services_dispatch_cars_cancel">取消</string>
|
||||
</resources>
|
||||
@@ -1,18 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<style name="BaseFloatDialogStyle" parent="@android:style/Theme.Dialog">
|
||||
<item name="android:windowIsFloating">true</item>
|
||||
<item name="android:windowFrame">@null</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<item name="android:windowBackground">@android:color/transparent</item>
|
||||
<item name="android:backgroundDimAmount">0.6</item>
|
||||
<item name="android:backgroundDimEnabled">true</item>
|
||||
<item name="android:windowContentOverlay">@null</item>
|
||||
<item name="android:fullBright">@android:color/transparent</item>
|
||||
<item name="android:fullDark">@android:color/transparent</item>
|
||||
<item name="android:topBright">@android:color/transparent</item>
|
||||
<item name="android:topDark">@android:color/transparent</item>
|
||||
<item name="android:borderlessButtonStyle">@android:color/transparent</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
@@ -95,7 +95,6 @@ dependencies {
|
||||
api rootProject.ext.dependencies.mogo_core_function_v2x
|
||||
api rootProject.ext.dependencies.mogo_core_function_monitoring
|
||||
api rootProject.ext.dependencies.mogo_core_function_devatools
|
||||
api rootProject.ext.dependencies.mogo_core_function_carcorder
|
||||
api rootProject.ext.dependencies.mogo_core_function_call
|
||||
api rootProject.ext.dependencies.mogo_core_function_msgbox
|
||||
|
||||
@@ -115,7 +114,6 @@ dependencies {
|
||||
api project(':core:function-impl:mogo-core-function-v2x')
|
||||
api project(':core:function-impl:mogo-core-function-monitoring')
|
||||
api project(':core:function-impl:mogo-core-function-devatools')
|
||||
api project(':core:function-impl:mogo-core-function-dispatch')
|
||||
api project(':core:function-impl:mogo-core-function-chat')
|
||||
api project(':core:function-impl:mogo-core-function-bindingcar')
|
||||
api project(':core:function-impl:mogo-core-function-datacenter')
|
||||
|
||||
@@ -179,5 +179,12 @@
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<receiver android:name="com.mogo.eagle.core.function.hmi.receiver.DispatchTestPanelBroadCastReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="com.dispatch.test_panel_control" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
</application>
|
||||
</manifest>
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.mogo.eagle.core.function.hmi.receiver
|
||||
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import com.mogo.eagle.core.function.call.biz.CallerFuncBizManager
|
||||
import com.mogo.eagle.core.function.hmi.receiver.DispatchTestPanelBroadCastReceiver
|
||||
import java.lang.Exception
|
||||
|
||||
class DispatchTestPanelBroadCastReceiver : BroadcastReceiver() {
|
||||
|
||||
companion object {
|
||||
private const val TAG = "DispatchTestPanelBroadCastReceiver"
|
||||
|
||||
/**
|
||||
* Adas测试控制面板广播Action
|
||||
*/
|
||||
const val BROADCAST_TEST_PANEL_CONTROL_TYPE_EXTRA_KEY = "sceneType"
|
||||
}
|
||||
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
try {
|
||||
val sceneType = intent.getIntExtra(BROADCAST_TEST_PANEL_CONTROL_TYPE_EXTRA_KEY, 0)
|
||||
// 分发场景
|
||||
dispatchSceneTest(sceneType)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 分发处理场景
|
||||
*
|
||||
* @param sceneType 场景类型
|
||||
*/
|
||||
private fun dispatchSceneTest(sceneType: Int) {
|
||||
CallerFuncBizManager.bizProvider.testDispatch(sceneType)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -33,6 +33,7 @@ import com.mogo.eagle.core.data.config.HmiBuildConfig
|
||||
import com.mogo.eagle.core.data.constants.MoGoFragmentPaths
|
||||
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_RTS
|
||||
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.V2I
|
||||
import com.mogo.eagle.core.data.dispatch.DispatchAdasAutoPilotLocReceiverBean
|
||||
import com.mogo.eagle.core.data.enums.EventTypeEnum
|
||||
import com.mogo.eagle.core.data.enums.SidePattern
|
||||
import com.mogo.eagle.core.data.enums.SidePattern.*
|
||||
@@ -52,7 +53,7 @@ import com.mogo.eagle.core.function.api.hmi.view.IOchBusView
|
||||
import com.mogo.eagle.core.function.api.hmi.view.IViewLimitingVelocity
|
||||
import com.mogo.eagle.core.function.api.hmi.view.IViewNotification
|
||||
import com.mogo.eagle.core.function.api.hmi.view.IViewTrafficLight
|
||||
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWaringProvider
|
||||
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoHmiProvider
|
||||
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
|
||||
@@ -72,8 +73,9 @@ import com.mogo.eagle.core.function.hmi.ui.bindingcar.ToBindingCarDialog
|
||||
import com.mogo.eagle.core.function.hmi.ui.bindingcar.UpgradeAppDialog
|
||||
import com.mogo.eagle.core.function.hmi.ui.camera.CameraListView
|
||||
import com.mogo.eagle.core.function.hmi.ui.camera.RoadVideoDialog
|
||||
import com.mogo.eagle.core.function.hmi.ui.dispatch.DispatchDialogManager
|
||||
import com.mogo.eagle.core.function.hmi.ui.notice.NoticeCheckDialog
|
||||
import com.mogo.eagle.core.function.hmi.ui.notice.NoticeTrafficDialog
|
||||
import com.mogo.eagle.core.function.hmi.ui.notice.traffic.NoticeTrafficDialog
|
||||
import com.mogo.eagle.core.function.hmi.ui.setting.DebugSettingView
|
||||
import com.mogo.eagle.core.function.hmi.ui.setting.IPCReportWindow
|
||||
import com.mogo.eagle.core.function.hmi.ui.setting.ReportListFloatWindow
|
||||
@@ -119,7 +121,7 @@ import java.util.*
|
||||
*/
|
||||
@Route(path = MoGoFragmentPaths.PATH_FRAGMENT_HMI)
|
||||
class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
|
||||
IMoGoWaringProvider,
|
||||
IMoGoHmiProvider,
|
||||
IMoGoHmiViewProxy,
|
||||
MoGoHmiContract.View,
|
||||
IMoGoAutopilotRecordListener,
|
||||
@@ -253,13 +255,13 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
|
||||
}
|
||||
|
||||
cbMsgBoxDriver.setOnCheckedChangeListener { _, isChecked ->
|
||||
if(isChecked){
|
||||
if (isChecked) {
|
||||
viewDriverMsgBoxList.visibility = View.VISIBLE
|
||||
viewDriverMsgBoxList.notifyData()
|
||||
viewDriverMsgBoxBubble.visibility = View.GONE
|
||||
viewDriverMsgBoxBubble.isShowData(false)
|
||||
CallerHmiManager.updateDriverMsgBoxTipView(false)
|
||||
}else{
|
||||
} else {
|
||||
viewDriverMsgBoxList.visibility = View.GONE
|
||||
viewDriverMsgBoxBubble.visibility = View.VISIBLE
|
||||
viewDriverMsgBoxBubble.isShowData(true)
|
||||
@@ -267,24 +269,25 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
|
||||
}
|
||||
|
||||
cbMsgBoxPassenger.setOnCheckedChangeListener { _, isChecked ->
|
||||
if(isChecked){
|
||||
if (isChecked) {
|
||||
viewPassengerMsgBoxList.visibility = View.VISIBLE
|
||||
viewPassengerMsgBoxBubble.visibility = View.GONE
|
||||
viewPassengerMsgBoxBubble.isShowData(false)
|
||||
CallerHmiManager.updatePassengerMsgBoxTipView(false)
|
||||
}else{
|
||||
} else {
|
||||
viewPassengerMsgBoxList.visibility = View.GONE
|
||||
viewPassengerMsgBoxBubble.visibility = View.VISIBLE
|
||||
viewPassengerMsgBoxBubble.isShowData(true)
|
||||
}
|
||||
}
|
||||
|
||||
if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){
|
||||
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
|
||||
cbMsgBoxDriver.visibility = View.VISIBLE
|
||||
viewDriverMsgBoxBubble.visibility = View.VISIBLE
|
||||
}
|
||||
if(AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) &&
|
||||
AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)){
|
||||
if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) &&
|
||||
AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)
|
||||
) {
|
||||
cbMsgBoxPassenger.visibility = View.VISIBLE
|
||||
viewPassengerMsgBoxBubble.visibility = View.VISIBLE
|
||||
}
|
||||
@@ -467,18 +470,33 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
|
||||
statusBarView?.updateMfStatus(tag, status)
|
||||
}
|
||||
|
||||
override fun showDispatchDialog(msgData: DispatchAdasAutoPilotLocReceiverBean) {
|
||||
context?.let {
|
||||
if (DispatchDialogManager.getInstance(it).isShowing) {
|
||||
return
|
||||
}
|
||||
DispatchDialogManager.getInstance(it).showDialog(msgData)
|
||||
}
|
||||
}
|
||||
|
||||
override fun dismissDispatchDialog() {
|
||||
context?.let {
|
||||
DispatchDialogManager.getInstance(it).releaseDialog()
|
||||
}
|
||||
}
|
||||
|
||||
override fun updateDriverMsgBoxTipView(show: Boolean) {
|
||||
if(show){
|
||||
if (show) {
|
||||
MsgBoxTipView.visibility = View.VISIBLE
|
||||
}else{
|
||||
} else {
|
||||
MsgBoxTipView.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
override fun updatePassengerMsgBoxTipView(show: Boolean) {
|
||||
if(show){
|
||||
if (show) {
|
||||
MsgBoxPTipView.visibility = View.VISIBLE
|
||||
}else{
|
||||
} else {
|
||||
MsgBoxPTipView.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
@@ -1155,7 +1173,11 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
|
||||
}
|
||||
ThreadUtils.runOnUiThread {
|
||||
context?.let {
|
||||
noticeTrafficDialog = NoticeTrafficDialog(it, trafficStylePushData)
|
||||
noticeTrafficDialog =
|
||||
NoticeTrafficDialog(
|
||||
it,
|
||||
trafficStylePushData
|
||||
)
|
||||
noticeTrafficDialog?.show()
|
||||
}
|
||||
}
|
||||
@@ -1372,7 +1394,10 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
|
||||
* 显示转向灯效果 if (HmiBuildConfig.isShowBadCaseView) {
|
||||
*/
|
||||
override fun showTurnLight(light: Int) {
|
||||
CallerLogger.d("${SceneConstant.M_DEVA}${"TurnLight"}", "---showTurnLight = $light ---isLeftLight = $isLeftLight ---isRightLight = $isRightLight")
|
||||
CallerLogger.d(
|
||||
"${SceneConstant.M_DEVA}${"TurnLight"}",
|
||||
"---showTurnLight = $light ---isLeftLight = $isLeftLight ---isRightLight = $isRightLight"
|
||||
)
|
||||
if (HmiBuildConfig.isShowTurnLightView) {
|
||||
ThreadUtils.runOnUiThread {
|
||||
if (light == 1 || light == 2) {
|
||||
@@ -1391,7 +1416,10 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
|
||||
isLeftLight = true
|
||||
isRightLight = false
|
||||
isDisappare = false
|
||||
CallerLogger.d("${SceneConstant.M_DEVA}${"TurnLight"}", "---showTurnLight ---light = 1")
|
||||
CallerLogger.d(
|
||||
"${SceneConstant.M_DEVA}${"TurnLight"}",
|
||||
"---showTurnLight ---light = 1"
|
||||
)
|
||||
CallerMapUIServiceManager.getMapUIController()?.setCarLightsType(4, 500)
|
||||
}
|
||||
} else if (light == 2) { //右转灯
|
||||
@@ -1399,7 +1427,10 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
|
||||
isRightLight = true
|
||||
isLeftLight = false
|
||||
isDisappare = false
|
||||
CallerLogger.d("${SceneConstant.M_DEVA}${"TurnLight"}", "---showTurnLight ---light = 2")
|
||||
CallerLogger.d(
|
||||
"${SceneConstant.M_DEVA}${"TurnLight"}",
|
||||
"---showTurnLight ---light = 2"
|
||||
)
|
||||
CallerMapUIServiceManager.getMapUIController()?.setCarLightsType(2, 500)
|
||||
}
|
||||
} else {
|
||||
@@ -1407,7 +1438,10 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
|
||||
isDisappare = true
|
||||
isLeftLight = false
|
||||
isRightLight = false
|
||||
CallerLogger.d("${SceneConstant.M_DEVA}${"TurnLight"}", "---showTurnLight ---light other")
|
||||
CallerLogger.d(
|
||||
"${SceneConstant.M_DEVA}${"TurnLight"}",
|
||||
"---showTurnLight ---light other"
|
||||
)
|
||||
CallerMapUIServiceManager.getMapUIController()?.setCarLightsType(3, 500)
|
||||
}
|
||||
}
|
||||
@@ -1430,13 +1464,19 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
|
||||
if (light == 1) { //刹车灯亮
|
||||
if (!isBrake) {
|
||||
isBrake = true
|
||||
CallerLogger.d("${SceneConstant.M_DEVA}${"BrakeLight"}", " showBrakeLight light = 1 ")
|
||||
CallerLogger.d(
|
||||
"${SceneConstant.M_DEVA}${"BrakeLight"}",
|
||||
" showBrakeLight light = 1 "
|
||||
)
|
||||
CallerMapUIServiceManager.getMapUIController()?.setCarLightsType(0, 500)
|
||||
}
|
||||
} else {
|
||||
if (isBrake) {//默认 不亮灯
|
||||
isBrake = false
|
||||
CallerLogger.d("${SceneConstant.M_DEVA}${"BrakeLight"}", " showBrakeLight light != 1 ")
|
||||
CallerLogger.d(
|
||||
"${SceneConstant.M_DEVA}${"BrakeLight"}",
|
||||
" showBrakeLight light != 1 "
|
||||
)
|
||||
CallerMapUIServiceManager.getMapUIController()?.setCarLightsType(3, 500)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,251 +0,0 @@
|
||||
package com.mogo.eagle.core.function.hmi.ui.carcorder
|
||||
|
||||
import android.animation.Animator
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.hardware.usb.UsbDevice
|
||||
import android.os.Looper
|
||||
import android.view.*
|
||||
import android.view.animation.OvershootInterpolator
|
||||
import com.mogo.cloud.live.manager.ILiveStreamManager
|
||||
import com.mogo.cloud.live.manager.LiveStreamManagerImpl
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.function.hmi.R
|
||||
import com.mogo.eagle.core.function.hmi.notification.WarningFloat
|
||||
import com.mogo.eagle.core.function.hmi.notification.anim.DefaultAnimator
|
||||
import com.mogo.eagle.core.data.enums.SidePattern
|
||||
import com.mogo.usbcamera.UVCCameraHelper
|
||||
import com.serenegiant.usb.ParentPreviewConstraintLayout
|
||||
import com.serenegiant.usb.widget.CameraViewInterface
|
||||
import kotlinx.android.synthetic.main.view_carcorder_preview.view.*
|
||||
|
||||
/**
|
||||
* @author donghongyu
|
||||
* @date 2021/9/30 8:46 下午
|
||||
* USB-Camera 摄像头预览
|
||||
*
|
||||
* TODO 临时方案,后面考虑封装将摄像头数据流通过 Tensorflow-lite 处理后展示
|
||||
*/
|
||||
class CarcorderPreviewView private constructor(
|
||||
context: Context
|
||||
) : ParentPreviewConstraintLayout(context),
|
||||
CameraViewInterface.Callback {
|
||||
|
||||
private val TAG = "CarcorderPreviewView"
|
||||
|
||||
|
||||
private var mCameraHelper: UVCCameraHelper? = null
|
||||
|
||||
private var isRequest = false
|
||||
private var isPreview = false
|
||||
|
||||
private var liveStreamManager: ILiveStreamManager? = null
|
||||
|
||||
init {
|
||||
LayoutInflater.from(context).inflate(R.layout.view_carcorder_preview, this, true)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private var mCarcorderPreviewViewFloat: WarningFloat.Builder? = null
|
||||
|
||||
@Volatile
|
||||
var instance: CarcorderPreviewView? = null
|
||||
|
||||
fun getInstance(context: Activity): CarcorderPreviewView {
|
||||
if (instance == null) {
|
||||
synchronized(CarcorderPreviewView::class) {
|
||||
if (instance == null) {
|
||||
instance = CarcorderPreviewView(context)
|
||||
}
|
||||
}
|
||||
}
|
||||
return instance!!
|
||||
}
|
||||
|
||||
/**
|
||||
* 展示窗口
|
||||
*/
|
||||
fun show(context: Activity) {
|
||||
if (mCarcorderPreviewViewFloat == null) {
|
||||
val carcorderPreviewVie = getInstance(context)
|
||||
mCarcorderPreviewViewFloat = WarningFloat.with(context)
|
||||
.setTag("CarcorderPreviewView")
|
||||
.setLayout(carcorderPreviewVie)
|
||||
.setSidePattern(SidePattern.RIGHT)
|
||||
.setGravity(Gravity.RIGHT, offsetY = 250)
|
||||
.setImmersionStatusBar(true)
|
||||
.setAnimator(object : DefaultAnimator() {
|
||||
override fun enterAnim(
|
||||
view: View,
|
||||
params: WindowManager.LayoutParams,
|
||||
windowManager: WindowManager,
|
||||
sidePattern: SidePattern
|
||||
): Animator? =
|
||||
super.enterAnim(view, params, windowManager, sidePattern)
|
||||
?.apply {
|
||||
interpolator = OvershootInterpolator()
|
||||
}
|
||||
|
||||
override fun exitAnim(
|
||||
view: View,
|
||||
params: WindowManager.LayoutParams,
|
||||
windowManager: WindowManager,
|
||||
sidePattern: SidePattern
|
||||
): Animator? =
|
||||
super.exitAnim(view, params, windowManager, sidePattern)
|
||||
?.setDuration(200)
|
||||
})
|
||||
.show()
|
||||
} else {
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 隐藏窗口
|
||||
*/
|
||||
fun dismiss() {
|
||||
if (mCarcorderPreviewViewFloat != null) {
|
||||
WarningFloat.dismiss(mCarcorderPreviewViewFloat!!.config.floatTag, false)
|
||||
mCarcorderPreviewViewFloat = null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val listener: UVCCameraHelper.OnMyDevConnectListener = object : UVCCameraHelper.OnMyDevConnectListener {
|
||||
override fun onAttachDev(device: UsbDevice?) {
|
||||
CallerLogger.d("$M_HMI$TAG", "onAttachDev")
|
||||
// request open permission
|
||||
if (!isRequest) {
|
||||
isRequest = true
|
||||
mCameraHelper?.requestPermission(0)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDettachDev(device: UsbDevice) {
|
||||
CallerLogger.d("$M_HMI$TAG", "onDettachDev")
|
||||
// close camera
|
||||
if (isRequest) {
|
||||
isRequest = false
|
||||
mCameraHelper?.closeCamera()
|
||||
showShortMsg(device.deviceName + " is out")
|
||||
}
|
||||
}
|
||||
|
||||
override fun onConnectDev(device: UsbDevice?, isConnected: Boolean) {
|
||||
CallerLogger.d("$M_HMI$TAG", "onConnectDev:isConnected=$isConnected")
|
||||
if (!isConnected) {
|
||||
showShortMsg("fail to connect,please check resolution params")
|
||||
isPreview = false
|
||||
} else {
|
||||
isPreview = true
|
||||
showShortMsg("相机连接中")
|
||||
// initialize seekbar
|
||||
// need to wait UVCCamera initialize over
|
||||
Thread {
|
||||
try {
|
||||
Thread.sleep(2500)
|
||||
} catch (e: InterruptedException) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
Looper.prepare()
|
||||
if (mCameraHelper != null && mCameraHelper!!.isCameraOpened) {
|
||||
CallerLogger.d("$M_HMI$TAG", "亮度(brightness):${mCameraHelper!!.getModelValue(UVCCameraHelper.MODE_BRIGHTNESS)}")
|
||||
CallerLogger.d("$M_HMI$TAG", "对比度(contrast):${mCameraHelper!!.getModelValue(UVCCameraHelper.MODE_CONTRAST)}")
|
||||
}
|
||||
Looper.loop()
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDisConnectDev(device: UsbDevice?) {
|
||||
CallerLogger.d("$M_HMI$TAG", "onDisConnectDev")
|
||||
showShortMsg("相机断开连接")
|
||||
}
|
||||
|
||||
override fun onCancelDev(device: UsbDevice?) {
|
||||
CallerLogger.d("$M_HMI$TAG", "onCancelDev:" + device?.deviceName)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private fun showShortMsg(msg: String) {
|
||||
//Toast.makeText(context, msg, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
|
||||
private fun initView() {
|
||||
// step.1 initialize UVCCameraHelper
|
||||
carcorderPreview.setCallback(this)
|
||||
mCameraHelper = UVCCameraHelper.getInstance()
|
||||
mCameraHelper?.setDefaultFrameFormat(UVCCameraHelper.FRAME_FORMAT_MJPEG)
|
||||
mCameraHelper?.initUSBMonitor(context as Activity, carcorderPreview, listener)
|
||||
|
||||
mCameraHelper?.setOnPreviewFrameListener { nv21Yuv ->
|
||||
CallerLogger.d("$M_HMI$TAG", "onPreviewResult: " + nv21Yuv.size)
|
||||
if (liveStreamManager != null) {
|
||||
// 将摄像头采集的YUV数据推送到ZEGO
|
||||
liveStreamManager!!.notifyYUVData(nv21Yuv, 640, 480, 2)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
initView()
|
||||
// step.2 register USB event broadcast
|
||||
if (mCameraHelper != null) {
|
||||
mCameraHelper!!.registerUSB()
|
||||
}
|
||||
// 初始化直播流管理
|
||||
// 初始化直播流管理
|
||||
liveStreamManager = LiveStreamManagerImpl.getInstance((context as Activity).application,
|
||||
MoGoAiCloudClientConfig.getInstance().sn, true)
|
||||
|
||||
// 设置状态回调
|
||||
liveStreamManager!!.setLiveStatusChangeCallback { status ->
|
||||
if (status == 0) {
|
||||
CallerLogger.d("$M_HMI$TAG", "直播中……")
|
||||
} else {
|
||||
CallerLogger.d("$M_HMI$TAG", "直播结束……")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow()
|
||||
// step.3 unregister USB event broadcast
|
||||
if (mCameraHelper != null) {
|
||||
mCameraHelper!!.unregisterUSB()
|
||||
}
|
||||
|
||||
if (liveStreamManager != null) {
|
||||
// 停止
|
||||
liveStreamManager!!.stopLiveStream()
|
||||
// 释放资源
|
||||
liveStreamManager!!.release()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSurfaceCreated(view: CameraViewInterface?, surface: Surface?) {
|
||||
if (!isPreview && mCameraHelper!!.isCameraOpened) {
|
||||
mCameraHelper!!.startPreview(carcorderPreview)
|
||||
isPreview = true
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSurfaceChanged(view: CameraViewInterface?, surface: Surface?, width: Int, height: Int) {
|
||||
|
||||
}
|
||||
|
||||
override fun onSurfaceDestroy(view: CameraViewInterface?, surface: Surface?) {
|
||||
if (isPreview && mCameraHelper!!.isCameraOpened) {
|
||||
mCameraHelper!!.stopPreview()
|
||||
isPreview = false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.zhjt.dispatch;
|
||||
package com.mogo.eagle.core.function.hmi.ui.dispatch;
|
||||
|
||||
import android.content.Context;
|
||||
import android.text.TextUtils;
|
||||
@@ -8,11 +8,11 @@ import android.widget.TextView;
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.mogo.eagle.core.data.dispatch.DispatchAdasAutoPilotLocReceiverBean;
|
||||
import com.mogo.eagle.core.function.call.biz.CallerFuncBizManager;
|
||||
import com.mogo.eagle.core.function.hmi.R;
|
||||
|
||||
public class DispatchAirportDialog extends DispatchBaseDialog {
|
||||
|
||||
private IDispatchRemindClickListener mListener;
|
||||
|
||||
private final TextView tvStartLoc;
|
||||
private final TextView tvEndLoc;
|
||||
private final TextView tvTaskTime;
|
||||
@@ -21,7 +21,7 @@ public class DispatchAirportDialog extends DispatchBaseDialog {
|
||||
|
||||
public DispatchAirportDialog(@NonNull Context context) {
|
||||
super(context);
|
||||
setContentView(R.layout.module_dialog_adas_dispatch_airport);
|
||||
setContentView(R.layout.dialog_adas_dispatch_airport);
|
||||
setCanceledOnTouchOutside(false);
|
||||
tvStartLoc = findViewById(R.id.module_services_dispatch_dialog_start_content);
|
||||
tvEndLoc = findViewById(R.id.module_services_dispatch_dialog_end_content);
|
||||
@@ -30,12 +30,9 @@ public class DispatchAirportDialog extends DispatchBaseDialog {
|
||||
tvTaskContent = findViewById(R.id.module_services_dispatch_dialog_task_content);
|
||||
Button btnAffirm = findViewById(R.id.module_services_dispatch_dialog_confirm);
|
||||
btnAffirm.setOnClickListener(v -> {
|
||||
if (mListener != null) {
|
||||
mListener.affirm();
|
||||
CallerFuncBizManager.getBizProvider().dispatchAffirm();
|
||||
dismissDialog();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -62,12 +59,4 @@ public class DispatchAirportDialog extends DispatchBaseDialog {
|
||||
dismiss();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addIDispatchRemindListener(IDispatchRemindClickListener listener) {
|
||||
if (listener == null) {
|
||||
return;
|
||||
}
|
||||
this.mListener = listener;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.zhjt.dispatch;
|
||||
package com.mogo.eagle.core.function.hmi.ui.dispatch;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
@@ -8,11 +8,12 @@ import android.view.WindowManager;
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.mogo.eagle.core.data.dispatch.DispatchAdasAutoPilotLocReceiverBean;
|
||||
import com.mogo.eagle.core.function.hmi.R;
|
||||
|
||||
public abstract class DispatchBaseDialog extends Dialog {
|
||||
|
||||
public DispatchBaseDialog(@NonNull Context context) {
|
||||
super(context,R.style.Base_AlertDialog_AppCompat);
|
||||
super(context, R.style.Base_AlertDialog_AppCompat);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
|
||||
} else {
|
||||
@@ -23,8 +24,6 @@ public abstract class DispatchBaseDialog extends Dialog {
|
||||
| WindowManager.LayoutParams.FLAG_LOCAL_FOCUS_MODE);
|
||||
}
|
||||
|
||||
public abstract void addIDispatchRemindListener(IDispatchRemindClickListener listener);
|
||||
|
||||
public abstract void showDialog(DispatchAdasAutoPilotLocReceiverBean dispatchContent);
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.zhjt.dispatch;
|
||||
package com.mogo.eagle.core.function.hmi.ui.dispatch;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Handler;
|
||||
@@ -10,13 +10,14 @@ import android.widget.TextView;
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.mogo.eagle.core.data.dispatch.DispatchAdasAutoPilotLocReceiverBean;
|
||||
import com.mogo.eagle.core.function.call.biz.CallerFuncBizManager;
|
||||
import com.mogo.eagle.core.function.hmi.R;
|
||||
|
||||
|
||||
public class DispatchCarsDialog extends DispatchBaseDialog {
|
||||
|
||||
private static final int MSG_TYPE_TIMER = 0;
|
||||
private static int TIMER = 10;
|
||||
private IDispatchRemindClickListener mListener;
|
||||
|
||||
private final TextView tvTimer;
|
||||
private final TextView tvLoc;
|
||||
@@ -39,7 +40,7 @@ public class DispatchCarsDialog extends DispatchBaseDialog {
|
||||
|
||||
public DispatchCarsDialog(@NonNull Context context) {
|
||||
super(context);
|
||||
setContentView(R.layout.module_dialog_adas_dispatch_cars);
|
||||
setContentView(R.layout.dialog_adas_dispatch_cars);
|
||||
setCanceledOnTouchOutside(false);
|
||||
tvTimer = findViewById(R.id.module_adas_dispatch_remind_timer);
|
||||
tvLoc = findViewById(R.id.module_adas_dispatch_remind_loc);
|
||||
@@ -47,23 +48,17 @@ public class DispatchCarsDialog extends DispatchBaseDialog {
|
||||
Button btnCancel = (Button) findViewById(R.id.module_adas_dispatch_remind_cancel);
|
||||
tvTimer.setText(String.valueOf(TIMER));
|
||||
btnAffirm.setOnClickListener(v -> {
|
||||
if (mListener != null) {
|
||||
mListener.affirm();
|
||||
dismissDialog();
|
||||
}
|
||||
CallerFuncBizManager.getBizProvider().dispatchAffirm();
|
||||
dismissDialog();
|
||||
});
|
||||
btnCancel.setOnClickListener(v -> {
|
||||
if (mListener != null) {
|
||||
mListener.cancel(true);
|
||||
dismissDialog();
|
||||
}
|
||||
CallerFuncBizManager.getBizProvider().dispatchCancel(true);
|
||||
dismissDialog();
|
||||
});
|
||||
}
|
||||
|
||||
private void hideDialog() {
|
||||
if (mListener != null) {
|
||||
mListener.cancel(false);
|
||||
}
|
||||
CallerFuncBizManager.getBizProvider().dispatchCancel(false);
|
||||
dismissDialog();
|
||||
}
|
||||
|
||||
@@ -73,14 +68,6 @@ public class DispatchCarsDialog extends DispatchBaseDialog {
|
||||
dismiss();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addIDispatchRemindListener(IDispatchRemindClickListener listener) {
|
||||
if (listener == null) {
|
||||
return;
|
||||
}
|
||||
this.mListener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showDialog(DispatchAdasAutoPilotLocReceiverBean dispatchContent) {
|
||||
if (TextUtils.isEmpty(dispatchContent.getEndLocAddress())) {
|
||||
@@ -1,5 +1,4 @@
|
||||
package com.zhjt.dispatch;
|
||||
|
||||
package com.mogo.eagle.core.function.hmi.ui.dispatch;
|
||||
|
||||
import static com.mogo.eagle.core.data.dispatch.DispatchAdasAutoPilotLocReceiverBean.DISPATCH_SOURCE_EZHOU;
|
||||
import static com.mogo.eagle.core.data.dispatch.DispatchAdasAutoPilotLocReceiverBean.DISPATCH_SOURCE_HENGYANG;
|
||||
@@ -16,7 +15,6 @@ public class DispatchDialogManager {
|
||||
private static volatile DispatchDialogManager manager;
|
||||
private static final byte[] obj = new byte[0];
|
||||
private final Context mContext;
|
||||
private IDispatchRemindClickListener mListener;
|
||||
private DispatchBaseDialog dialog;
|
||||
|
||||
private DispatchDialogManager(Context context) {
|
||||
@@ -34,13 +32,6 @@ public class DispatchDialogManager {
|
||||
return manager;
|
||||
}
|
||||
|
||||
public void addIDispatchRemindListener(IDispatchRemindClickListener listener) {
|
||||
if (listener == null) {
|
||||
return;
|
||||
}
|
||||
this.mListener = listener;
|
||||
}
|
||||
|
||||
public boolean isShowing() {
|
||||
return dialog != null && dialog.isShowing();
|
||||
}
|
||||
@@ -57,7 +48,6 @@ public class DispatchDialogManager {
|
||||
dispatchEZhou(msgData);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void dispatchHengYang(DispatchAdasAutoPilotLocReceiverBean msgData) {
|
||||
@@ -68,7 +58,6 @@ public class DispatchDialogManager {
|
||||
if (dialog == null) {
|
||||
dialog = new DispatchCarsDialog(mContext);
|
||||
}
|
||||
dialog.addIDispatchRemindListener(mListener);
|
||||
dialog.showDialog(msgData);
|
||||
}
|
||||
}
|
||||
@@ -82,7 +71,6 @@ public class DispatchDialogManager {
|
||||
if (dialog == null) {
|
||||
dialog = new DispatchAirportDialog(mContext);
|
||||
}
|
||||
dialog.addIDispatchRemindListener(mListener);
|
||||
dialog.showDialog(msgData);
|
||||
break;
|
||||
case DISPATCH_TYPE_STOP:
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.zhjt.dispatch;
|
||||
package com.mogo.eagle.core.function.hmi.ui.dispatch;
|
||||
|
||||
public interface IDispatchRemindClickListener {
|
||||
|
||||
@@ -14,6 +14,7 @@ import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
|
||||
import com.mogo.eagle.core.data.notice.NoticeTrafficStylePushData;
|
||||
import com.mogo.eagle.core.function.hmi.R;
|
||||
import com.mogo.eagle.core.function.hmi.ui.notice.traffic.NoticeTrafficDialog;
|
||||
import com.mogo.eagle.core.utilcode.mogo.glide.GlideApp;
|
||||
import com.mogo.eagle.core.utilcode.mogo.glide.transform.GlideRoundedCornersTransform;
|
||||
import com.mogo.eagle.core.utilcode.util.BitmapHelper;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.eagle.core.function.hmi.ui.notice;
|
||||
package com.mogo.eagle.core.function.hmi.ui.notice.traffic;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.eagle.core.function.hmi.ui.notice;
|
||||
package com.mogo.eagle.core.function.hmi.ui.notice.traffic;
|
||||
|
||||
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_HMI;
|
||||
|
||||
@@ -24,7 +24,7 @@ import com.mogo.eagle.core.data.notice.NoticeTrafficStylePushData;
|
||||
import com.mogo.eagle.core.data.notice.NoticeValue;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager;
|
||||
import com.mogo.eagle.core.function.call.notice.CallerNoticeManager;
|
||||
import com.mogo.eagle.core.function.call.biz.CallerFuncBizManager;
|
||||
import com.mogo.eagle.core.function.hmi.R;
|
||||
import com.mogo.eagle.core.utilcode.mogo.glide.GlideApp;
|
||||
import com.mogo.eagle.core.utilcode.mogo.glide.transform.GlideRoundedCornersTransform;
|
||||
@@ -153,7 +153,7 @@ public class NoticeTrafficDialog extends BaseFloatDialog implements LifecycleObs
|
||||
* 0不接收 1接受 发起自动驾驶任务,显示引导线
|
||||
*/
|
||||
private void feedBackTraffic(int i) {
|
||||
CallerNoticeManager.getNoticeProvider().feedBackNoticeTraffic(mPushData.getInfoId(), MoGoAiCloudClientConfig.getInstance().getSn(), i);
|
||||
CallerFuncBizManager.getBizProvider().feedBackNoticeTraffic(mPushData.getInfoId(), MoGoAiCloudClientConfig.getInstance().getSn(), i);
|
||||
if (i == 1) {
|
||||
startAutoPilot();
|
||||
}
|
||||
@@ -352,7 +352,7 @@ public class NoticeTrafficDialog extends BaseFloatDialog implements LifecycleObs
|
||||
*/
|
||||
private void requestTrafficInfo() {
|
||||
CallerLogger.INSTANCE.d(M_HMI + TAG, "requestTrafficInfo");
|
||||
CallerNoticeManager.getNoticeProvider().requestAccidentInfo(mPushData.getInfoId(), MoGoAiCloudClientConfig.getInstance().getSn(), trafficInfo -> {
|
||||
CallerFuncBizManager.getBizProvider().requestAccidentInfo(mPushData.getInfoId(), MoGoAiCloudClientConfig.getInstance().getSn(), trafficInfo -> {
|
||||
CallerLogger.INSTANCE.d(M_HMI + TAG, "交通事故详情::" + trafficInfo);
|
||||
mTrafficStyleInfo = trafficInfo.getResult().getAccidentInfo();
|
||||
infoRefresh(mTrafficStyleInfo);
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.eagle.core.function.hmi.ui.notice;
|
||||
package com.mogo.eagle.core.function.hmi.ui.notice.traffic;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.eagle.core.function.hmi.ui.notice;
|
||||
package com.mogo.eagle.core.function.hmi.ui.notice.traffic;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
@@ -10,7 +10,6 @@ import android.os.Process;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.app.NotificationCompat;
|
||||
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.bytedance.boost_multidex.BoostMultiDex;
|
||||
import com.elegant.utils.UiThreadHandler;
|
||||
import com.mogo.cloud.socket.SocketBuildConfig;
|
||||
@@ -18,11 +17,9 @@ import com.mogo.commons.AbsMogoApplication;
|
||||
import com.mogo.commons.debug.DebugConfig;
|
||||
import com.mogo.commons.module.MogoModule;
|
||||
import com.mogo.commons.module.MogoModulePaths;
|
||||
import com.mogo.commons.voice.AIAssist;
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig;
|
||||
import com.mogo.eagle.core.data.constants.MoGoConfig;
|
||||
import com.mogo.eagle.core.data.constants.MogoServicePaths;
|
||||
import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider;
|
||||
import com.mogo.eagle.core.function.api.chat.biz.ChatConsts;
|
||||
import com.mogo.eagle.core.function.api.devatools.IMogoDevaToolsUpgradeListener;
|
||||
import com.mogo.eagle.core.function.call.bindingcar.CallerBindingcarManager;
|
||||
@@ -237,11 +234,9 @@ public abstract class MainMoGoApplication extends AbsMogoApplication {
|
||||
// 超视距,路测、行车记录仪监控
|
||||
MogoModulePaths.addModuleFunctionServer(new MogoModule(MogoServicePaths.PATH_AI_MONITORING, "IMoGoMonitoringProvider"));
|
||||
// 云公告发布
|
||||
MogoModulePaths.addModuleFunctionServer(new MogoModule(MogoServicePaths.PATH_AI_NOTICE, "IMoGoNoticeProvider"));
|
||||
MogoModulePaths.addModuleFunctionServer(new MogoModule(MogoServicePaths.PATH_FUNC_BIZ, "IMoGoNoticeProvider"));
|
||||
// 车聊聊,IM
|
||||
MogoModulePaths.addModuleFunctionServer(new MogoModule(ChatConsts.CHAT_PROVIDER_PATH, ChatConsts.CHAT_MODULE_NAME));
|
||||
// 调度
|
||||
MogoModulePaths.addBaseModule(new MogoModule(MogoServicePaths.PATH_AI_DISPATCH, "IDispatchProvider"));
|
||||
// V2X 模块
|
||||
MogoModulePaths.addBaseModule(new MogoModule(MogoServicePaths.PATH_V2X_MODULE, "V2XProvider"));
|
||||
// 绑定车辆
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="@color/module_services_dispatch_bg" />
|
||||
<solid android:color="@color/color_E63B4577" />
|
||||
<corners android:radius="@dimen/module_services_dispatch_airport_dialog_corner" />
|
||||
|
||||
</shape>
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="@color/module_services_dispatch_affirm_bg" />
|
||||
<solid android:color="@color/color_3E7BFE" />
|
||||
<corners android:radius="@dimen/module_services_dispatch_airport_dialog_affirm_corner" />
|
||||
|
||||
</shape>
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<corners android:radius="@dimen/module_services_dispatch_cars_dialog_corner"/>
|
||||
<solid android:color="@color/module_services_dispatch_cars_background"/>
|
||||
<solid android:color="@color/color_E63B4577"/>
|
||||
</shape>
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
|
||||
<corners android:bottomLeftRadius="@dimen/module_services_dispatch_cars_dialog_corner"/>
|
||||
<solid android:color="@color/module_services_dispatch_cars_background"/>
|
||||
<solid android:color="@color/color_E63B4577"/>
|
||||
</shape>
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
|
||||
<corners android:bottomRightRadius="@dimen/module_services_dispatch_cars_dialog_corner"/>
|
||||
<solid android:color="@color/module_services_dispatch_cars_background"/>
|
||||
<solid android:color="@color/color_E63B4577"/>
|
||||
</shape>
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="@color/module_services_remind_background" />
|
||||
<solid android:color="@color/color_E63B4577" />
|
||||
<corners android:bottomLeftRadius="@dimen/module_services_dispatch_cars_dialog_corner" />
|
||||
</shape>
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="@color/module_services_remind_background" />
|
||||
<solid android:color="@color/color_E63B4577" />
|
||||
<corners android:bottomRightRadius="@dimen/module_services_dispatch_cars_dialog_corner" />
|
||||
</shape>
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
|
||||
<solid android:color="@color/module_services_dispatch_cars_count_down_bg"/>
|
||||
<solid android:color="@color/color_4D000000"/>
|
||||
</shape>
|
||||
@@ -10,7 +10,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_marginTop="@dimen/module_services_dispatch_airport_dialog_title_margin_top"
|
||||
android:text="@string/module_services_dispatch_dialog_title"
|
||||
android:text="@string/dispatch_dialog_title"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="@dimen/module_services_dispatch_airport_dialog_title_size"
|
||||
android:textStyle="bold" />
|
||||
@@ -20,7 +20,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/module_services_dispatch_airport_dialog_first_column_margin_left"
|
||||
android:layout_marginTop="@dimen/module_services_dispatch_airport_dialog_startloc_margin_top"
|
||||
android:text="@string/module_services_dispatch_dialog_start_loc"
|
||||
android:text="@string/dispatch_dialog_start_loc"
|
||||
android:textSize="@dimen/module_services_dispatch_airport_dialog_next_level_title_size" />
|
||||
|
||||
<TextView
|
||||
@@ -38,7 +38,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/module_services_dispatch_airport_dialog_first_column_margin_left"
|
||||
android:layout_marginTop="@dimen/module_services_dispatch_airport_dialog_endloc_margin_top"
|
||||
android:text="@string/module_services_dispatch_dialog_end_loc"
|
||||
android:text="@string/dispatch_dialog_end_loc"
|
||||
android:textSize="@dimen/module_services_dispatch_airport_dialog_next_level_title_size" />
|
||||
|
||||
<TextView
|
||||
@@ -56,7 +56,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/module_services_dispatch_airport_dialog_first_column_margin_left"
|
||||
android:layout_marginTop="@dimen/module_services_dispatch_airport_dialog_task_margin_top"
|
||||
android:text="@string/module_services_dispatch_dialog_task_info"
|
||||
android:text="@string/dispatch_dialog_task_info"
|
||||
android:textSize="@dimen/module_services_dispatch_airport_dialog_next_level_title_size" />
|
||||
|
||||
<TextView
|
||||
@@ -74,7 +74,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/module_services_dispatch_airport_dialog_last_column_margin_left"
|
||||
android:layout_marginTop="@dimen/module_services_dispatch_airport_dialog_startloc_margin_top"
|
||||
android:text="@string/module_services_dispatch_dialog_task_time"
|
||||
android:text="@string/dispatch_dialog_task_time"
|
||||
android:textSize="@dimen/module_services_dispatch_airport_dialog_next_level_title_size" />
|
||||
|
||||
<TextView
|
||||
@@ -92,7 +92,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/module_services_dispatch_airport_dialog_last_column_margin_left"
|
||||
android:layout_marginTop="@dimen/module_services_dispatch_airport_dialog_endloc_margin_top"
|
||||
android:text="@string/module_services_dispatch_dialog_flight_info"
|
||||
android:text="@string/dispatch_dialog_flight_info"
|
||||
android:textSize="@dimen/module_services_dispatch_airport_dialog_next_level_title_size" />
|
||||
|
||||
<TextView
|
||||
@@ -115,7 +115,7 @@
|
||||
android:layout_marginBottom="@dimen/module_services_dispatch_airport_dialog_margin_bottom"
|
||||
android:background="@drawable/bg_adas_dispatch_affirm"
|
||||
android:gravity="center"
|
||||
android:text="@string/module_services_dispatch_dialog_affirm"
|
||||
android:text="@string/dispatch_dialog_affirm"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="@dimen/module_services_dispatch_airport_dialog_title_size"
|
||||
android:textStyle="bold" />
|
||||
@@ -3,17 +3,17 @@
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="@dimen/module_services_dispatch_cars_dialog_width"
|
||||
android:layout_height="@dimen/module_services_dispatch_cars_dialog_height"
|
||||
android:background="@drawable/module_service_dispatch_cars_bg">
|
||||
android:background="@drawable/bg_dispatch_cars">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/module_adas_dispatch_remind_timer"
|
||||
android:layout_width="@dimen/module_services_dispatch_cars_dialog_timer_size"
|
||||
android:layout_height="@dimen/module_services_dispatch_cars_dialog_timer_size"
|
||||
android:layout_margin="@dimen/module_services_dispatch_cars_dialog_timer_margin"
|
||||
android:background="@drawable/module_service_dispatch_timer_bg"
|
||||
android:background="@drawable/bg_dispatch_timer"
|
||||
android:gravity="center"
|
||||
android:text="10"
|
||||
android:textColor="@color/module_services_dispatch_cars_count_down_txt"
|
||||
android:textColor="@color/color_8E9DD4"
|
||||
android:textSize="@dimen/module_services_dispatch_cars_dialog_timer_txt_size"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
@@ -22,7 +22,7 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/module_services_dispatch_cars_dialog_title_margin_top"
|
||||
android:text="@string/module_services_dispatch_cars_remind_title"
|
||||
android:text="@string/dispatch_cars_remind_title"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="@dimen/module_services_dispatch_cars_dialog_title_size"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
@@ -33,7 +33,7 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/module_services_dispatch_cars_dialog_content_margin_top"
|
||||
android:text="@string/module_services_dispatch_cars_remind_content"
|
||||
android:text="@string/dispatch_cars_remind_content"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="@dimen/module_services_dispatch_cars_dialog_content_size"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
@@ -46,7 +46,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/module_services_dispatch_cars_dialog_loc_margin_top"
|
||||
android:maxLines="1"
|
||||
android:textColor="@color/module_services_dispatch_cars_text_loc"
|
||||
android:textColor="@color/color_1F9BFE"
|
||||
android:textSize="@dimen/module_services_dispatch_cars_dialog_loc_size"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
@@ -56,7 +56,7 @@
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="@color/module_services_dispatch_cars_line"
|
||||
android:background="@color/color_66B8BFE8"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@+id/module_adas_dispatch_remind_affirm"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
@@ -67,9 +67,9 @@
|
||||
android:layout_width="@dimen/module_services_dispatch_cars_dialog_btn_width"
|
||||
android:layout_height="@dimen/module_services_dispatch_cars_dialog_line_margin_bottom"
|
||||
android:gravity="center"
|
||||
android:background="@drawable/module_service_left_corner_bg"
|
||||
android:text="@string/module_services_dispatch_cars_affirm"
|
||||
android:textColor="@color/module_services_dispatch_cars_text_loc"
|
||||
android:background="@drawable/bg_dispatch_left_corner"
|
||||
android:text="@string/dispatch_cars_affirm"
|
||||
android:textColor="@color/color_1F9BFE"
|
||||
android:textSize="@dimen/module_services_dispatch_cars_dialog_title_size"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent" />
|
||||
@@ -78,7 +78,7 @@
|
||||
android:layout_width="2dp"
|
||||
android:layout_height="@dimen/module_services_dispatch_cars_dialog_line_margin_bottom"
|
||||
android:layout_marginStart="@dimen/module_services_dispatch_cars_dialog_btn_width"
|
||||
android:background="@color/module_services_dispatch_cars_line"
|
||||
android:background="@color/color_66B8BFE8"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent" />
|
||||
|
||||
@@ -87,9 +87,9 @@
|
||||
android:layout_width="@dimen/module_services_dispatch_cars_dialog_btn_width"
|
||||
android:layout_height="@dimen/module_services_dispatch_cars_dialog_line_margin_bottom"
|
||||
android:gravity="center"
|
||||
android:text="@string/module_services_dispatch_cars_cancel"
|
||||
android:textColor="@color/module_services_dispatch_cars_cancel"
|
||||
android:background="@drawable/module_service_right_corner_bg"
|
||||
android:text="@string/dispatch_cars_cancel"
|
||||
android:textColor="@color/color_AFB3C7"
|
||||
android:background="@drawable/bg_dispatch_right_corner"
|
||||
android:textSize="@dimen/module_services_dispatch_cars_dialog_title_size"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent" />
|
||||
@@ -1,17 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="@dimen/dp_768"
|
||||
android:layout_height="@dimen/dp_432">
|
||||
|
||||
|
||||
<com.serenegiant.usb.widget.UVCCameraTextureView
|
||||
android:id="@+id/carcorderPreview"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -43,6 +43,13 @@
|
||||
<color name="color_FFA7B6F0">#FFA7B6F0</color>
|
||||
<color name="color_B3FFFFFF">#B3FFFFFF</color>
|
||||
<color name="color_99000000">#99000000</color>
|
||||
<color name="color_E63B4577">#E63B4577</color>
|
||||
<color name="color_3E7BFE">#3E7BFE</color>
|
||||
<color name="color_1F9BFE">#1F9BFE</color>
|
||||
<color name="color_8E9DD4">#8E9DD4</color>
|
||||
<color name="color_4D000000">#4D000000</color>
|
||||
<color name="color_66B8BFE8">#66B8BFE8</color>
|
||||
<color name="color_AFB3C7">#AFB3C7</color>
|
||||
|
||||
|
||||
<color name="version_latest_start_color">#6D7BAF</color>
|
||||
@@ -74,4 +81,7 @@
|
||||
|
||||
<color name="hmi_check_keyboard_input_field">#FF282F62</color>
|
||||
<color name="bus_autopilot_text_color_normal">#FFFFFF</color>
|
||||
|
||||
|
||||
|
||||
</resources>
|
||||
@@ -76,4 +76,40 @@
|
||||
<dimen name="hmi_take_over_request_width">810dp</dimen>
|
||||
<dimen name="hmi_take_over_request_height">560dp</dimen>
|
||||
<dimen name="hmi_take_over_request_m_top">524dp</dimen>
|
||||
|
||||
<dimen name="module_services_dispatch_airport_dialog_width">1263dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_height">1173dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_corner">32dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_next_level_title_size">38dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_title_size">48dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_task_content_size">42dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_title_margin_top">55dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_startloc_margin_top">219dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_startloc_content_margin_top">288dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_endloc_margin_top">415dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_endloc_content_margin_top">484dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_task_margin_top">621dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_task_content_margin_top">690dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_first_column_margin_left">100dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_last_column_margin_left">852dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_margin_top">86dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_margin_bottom">80dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_affirm_width">700dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_affirm_height">140dp</dimen>
|
||||
<dimen name="module_services_dispatch_airport_dialog_affirm_corner">70dp</dimen>
|
||||
|
||||
<dimen name="module_services_dispatch_cars_dialog_width">950dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_height">540dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_corner">32dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_title_size">48dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_title_margin_top">55dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_content_size">38dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_content_margin_top">179dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_loc_size">54dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_loc_margin_top">251dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_line_margin_bottom">152dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_btn_width">474.5dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_timer_margin">20dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_timer_size">46dp</dimen>
|
||||
<dimen name="module_services_dispatch_cars_dialog_timer_txt_size">24dp</dimen>
|
||||
</resources>
|
||||
@@ -53,4 +53,16 @@
|
||||
<string name="to_binding_car">是否绑定车机?</string>
|
||||
|
||||
<string name="status_bar_tag">蘑菇星云</string>
|
||||
|
||||
<string name="dispatch_dialog_title">您有新的工作任务</string>
|
||||
<string name="dispatch_dialog_start_loc">开始地点:</string>
|
||||
<string name="dispatch_dialog_end_loc">结束地点:</string>
|
||||
<string name="dispatch_dialog_task_time">任务时间:</string>
|
||||
<string name="dispatch_dialog_task_info">任务内容:</string>
|
||||
<string name="dispatch_dialog_flight_info">航班信息:</string>
|
||||
<string name="dispatch_dialog_affirm">接受任务</string>
|
||||
<string name="dispatch_cars_remind_title">调度确认</string>
|
||||
<string name="dispatch_cars_remind_content">车辆将开启自动驾驶,并行驶至:</string>
|
||||
<string name="dispatch_cars_affirm">确认</string>
|
||||
<string name="dispatch_cars_cancel">取消</string>
|
||||
</resources>
|
||||
|
||||
@@ -89,4 +89,19 @@
|
||||
<item name="android:layout_margin">@dimen/dp_10</item>
|
||||
</style>
|
||||
|
||||
<style name="BaseFloatDialogStyle" parent="@android:style/Theme.Dialog">
|
||||
<item name="android:windowIsFloating">true</item>
|
||||
<item name="android:windowFrame">@null</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<item name="android:windowBackground">@android:color/transparent</item>
|
||||
<item name="android:backgroundDimAmount">0.6</item>
|
||||
<item name="android:backgroundDimEnabled">true</item>
|
||||
<item name="android:windowContentOverlay">@null</item>
|
||||
<item name="android:fullBright">@android:color/transparent</item>
|
||||
<item name="android:fullDark">@android:color/transparent</item>
|
||||
<item name="android:topBright">@android:color/transparent</item>
|
||||
<item name="android:topDark">@android:color/transparent</item>
|
||||
<item name="android:borderlessButtonStyle">@android:color/transparent</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -30,27 +30,6 @@ public class MogoServicePaths {
|
||||
@Deprecated
|
||||
public static final String PATH_FLOAT_VIEW_MANAGER = "/floatview/api";
|
||||
|
||||
/**
|
||||
* 免唤醒语音控制
|
||||
*/
|
||||
@Keep
|
||||
@Deprecated
|
||||
public static final String PATH_VOICE_MANAGER = "/voicemanager/api";
|
||||
|
||||
/**
|
||||
* 自研地图和高德地图切换
|
||||
*/
|
||||
@Keep
|
||||
@Deprecated
|
||||
public static final String PATH_MAP_FRAME_CONTROLLER = "/mapframe/controller";
|
||||
|
||||
/**
|
||||
* 小地图控件
|
||||
*/
|
||||
@Keep
|
||||
@Deprecated
|
||||
public static final String PATH_SMALL_MAP = "/small_map/api";
|
||||
|
||||
/**
|
||||
* v2x 模块
|
||||
*/
|
||||
@@ -77,11 +56,11 @@ public class MogoServicePaths {
|
||||
public static final String PATH_AUTO_PILOT = "/auto_pilot/api";
|
||||
|
||||
/**
|
||||
* 云公告 模块
|
||||
* 业务聚合 模块
|
||||
*/
|
||||
@Keep
|
||||
@Deprecated
|
||||
public static final String PATH_AI_NOTICE = "/notice/api";
|
||||
public static final String PATH_FUNC_BIZ = "/func/biz";
|
||||
|
||||
/**
|
||||
* 绑定车机 模块
|
||||
@@ -97,20 +76,6 @@ public class MogoServicePaths {
|
||||
@Deprecated
|
||||
public static final String PATH_AI_MONITORING = "/monitoring/api";
|
||||
|
||||
/**
|
||||
* 调度 模块
|
||||
*/
|
||||
@Keep
|
||||
@Deprecated
|
||||
public static final String PATH_AI_DISPATCH = "/dispatch/api";
|
||||
|
||||
/**
|
||||
* 自动驾驶时,定位信息改变要同步更新
|
||||
*/
|
||||
@Keep
|
||||
@Deprecated
|
||||
public static final String PATH_MAP_LOCATION_UPDATE_4_AUTO_PILOT = "/map_x/location_update";
|
||||
|
||||
/**
|
||||
* deva开发套件
|
||||
*/
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.eagle.function.biz.push.network;
|
||||
package com.mogo.eagle.core.data.notice;
|
||||
|
||||
/**
|
||||
* @author Jing
|
||||
@@ -11,7 +11,9 @@ interface IMoGoAutopilotPlanningListener {
|
||||
*
|
||||
* @param trajectoryInfos 引导线数据经纬度
|
||||
*/
|
||||
fun onAutopilotTrajectory(trajectoryInfos: MutableList<MessagePad.TrajectoryPoint>)
|
||||
fun onAutopilotTrajectory(trajectoryInfos: MutableList<MessagePad.TrajectoryPoint>){
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 2021/6/23 工控机经纬度 绘制时转成高德经纬度
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.mogo.eagle.core.function.api.biz
|
||||
|
||||
import com.mogo.eagle.core.function.api.base.IMoGoFunctionServerProvider
|
||||
|
||||
/**
|
||||
* @author Jing
|
||||
* @description
|
||||
* @since: 10/27/21
|
||||
*/
|
||||
interface IMoGoFuncBizProvider : IMoGoFunctionServerProvider {
|
||||
/**
|
||||
* 是否接受交通事故任务
|
||||
* @param infoId
|
||||
* @param sn
|
||||
* @param accept
|
||||
*/
|
||||
fun feedBackNoticeTraffic(infoId: String, sn: String, accept: Int)
|
||||
|
||||
/**
|
||||
* 获取事故详细信息
|
||||
* @param infoId
|
||||
* @param sn
|
||||
* @param callBack
|
||||
*/
|
||||
fun requestAccidentInfo(infoId: String, sn: String, callBack: IMoGoNoticeNetCallBack)
|
||||
|
||||
/**
|
||||
* 调度确认
|
||||
*/
|
||||
fun dispatchAffirm()
|
||||
|
||||
/**
|
||||
* 调度取消
|
||||
* @param manualTrigger 是否手动
|
||||
*/
|
||||
fun dispatchCancel(manualTrigger: Boolean)
|
||||
|
||||
/**
|
||||
* 调度测试
|
||||
*/
|
||||
fun testDispatch(sceneType: Int)
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.eagle.core.function.api.notice;
|
||||
package com.mogo.eagle.core.function.api.biz;
|
||||
|
||||
import com.mogo.eagle.core.data.notice.NoticeTrafficStyleInfo;
|
||||
|
||||
@@ -7,6 +7,6 @@ import com.mogo.eagle.core.data.notice.NoticeTrafficStyleInfo;
|
||||
* @description 网络请求回调
|
||||
* @since: 11/3/21
|
||||
*/
|
||||
public interface NoticeNetCallBack {
|
||||
public interface IMoGoNoticeNetCallBack {
|
||||
void callBackWithResult(NoticeTrafficStyleInfo trafficInfo);
|
||||
}
|
||||
@@ -3,6 +3,7 @@ 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.dispatch.DispatchAdasAutoPilotLocReceiverBean
|
||||
import com.mogo.eagle.core.data.enums.WarningDirectionEnum
|
||||
import com.mogo.eagle.core.data.map.Infrastructure
|
||||
import com.mogo.eagle.core.data.notice.NoticeNormalData
|
||||
@@ -15,7 +16,7 @@ import com.mogo.eagle.core.function.api.hmi.view.IOchBusView
|
||||
* @author xiaoyuzhou
|
||||
* @date 2021/8/2 7:36 下午
|
||||
*/
|
||||
interface IMoGoWaringProvider : IMoGoHmiViewProxy {
|
||||
interface IMoGoHmiProvider : IMoGoHmiViewProxy {
|
||||
|
||||
/**
|
||||
* 浓雾预警
|
||||
@@ -321,4 +322,14 @@ interface IMoGoWaringProvider : IMoGoHmiViewProxy {
|
||||
*/
|
||||
fun updateMfStatus(tag: String, status: Boolean)
|
||||
|
||||
/**
|
||||
* 调度弹窗展示
|
||||
*/
|
||||
fun showDispatchDialog(msgData: DispatchAdasAutoPilotLocReceiverBean)
|
||||
|
||||
/**
|
||||
* 隐藏调度弹窗
|
||||
*/
|
||||
fun dismissDispatchDialog()
|
||||
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
package com.mogo.eagle.core.function.api.notice;
|
||||
|
||||
import com.mogo.eagle.core.function.api.base.IMoGoFunctionServerProvider;
|
||||
|
||||
/**
|
||||
* @author Jing
|
||||
* @description
|
||||
* @since: 10/27/21
|
||||
*/
|
||||
public interface IMoGoNoticeProvider extends IMoGoFunctionServerProvider {
|
||||
void feedBackNoticeTraffic(String infoId, String sn, int accept);
|
||||
void requestAccidentInfo(String infoId, String sn,NoticeNetCallBack callBack);
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.mogo.eagle.core.function.call.biz
|
||||
|
||||
import com.mogo.eagle.core.function.call.base.CallerBase
|
||||
import com.mogo.eagle.core.function.api.biz.IMoGoFuncBizProvider
|
||||
import com.mogo.eagle.core.data.constants.MogoServicePaths
|
||||
|
||||
/**
|
||||
* @author xiaoyuzhou
|
||||
*/
|
||||
object CallerFuncBizManager : CallerBase() {
|
||||
|
||||
@JvmStatic
|
||||
val bizProvider: IMoGoFuncBizProvider
|
||||
get() = getApiInstance(IMoGoFuncBizProvider::class.java, MogoServicePaths.PATH_FUNC_BIZ)
|
||||
|
||||
|
||||
}
|
||||
@@ -7,11 +7,9 @@ import com.mogo.eagle.core.data.bindingcar.IPCUpgradeStateInfo
|
||||
import com.mogo.eagle.core.data.constants.MoGoFragmentPaths
|
||||
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_SLW
|
||||
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.V2I
|
||||
import com.mogo.eagle.core.data.dispatch.DispatchAdasAutoPilotLocReceiverBean
|
||||
import com.mogo.eagle.core.data.enums.WarningDirectionEnum
|
||||
import com.mogo.eagle.core.data.map.Infrastructure
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxType
|
||||
import com.mogo.eagle.core.data.msgbox.V2XMsg
|
||||
import com.mogo.eagle.core.data.notice.NoticeNormalData
|
||||
import com.mogo.eagle.core.data.notice.NoticeTrafficStylePushData
|
||||
import com.mogo.eagle.core.data.report.ReportEntity
|
||||
@@ -19,10 +17,9 @@ import com.mogo.eagle.core.function.api.hmi.IMoGoHmiViewProxy.IViewNotificationP
|
||||
import com.mogo.eagle.core.function.api.hmi.view.IOchBusView
|
||||
import com.mogo.eagle.core.function.api.hmi.view.IViewLimitingVelocity
|
||||
import com.mogo.eagle.core.function.api.hmi.view.IViewTrafficLight
|
||||
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWaringProvider
|
||||
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoHmiProvider
|
||||
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
|
||||
import com.mogo.eagle.core.function.call.base.CallerBase
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager.saveMsgBox
|
||||
import com.zhjt.service_biz.BizConfig
|
||||
|
||||
/**
|
||||
@@ -34,12 +31,12 @@ import com.zhjt.service_biz.BizConfig
|
||||
object CallerHmiManager : CallerBase() {
|
||||
private val waringProviderApi
|
||||
get() = ARouter.getInstance().build(MoGoFragmentPaths.PATH_FRAGMENT_HMI)
|
||||
.navigation() as? IMoGoWaringProvider
|
||||
.navigation() as? IMoGoHmiProvider
|
||||
|
||||
/**
|
||||
* 浓雾预警
|
||||
*/
|
||||
fun displayEffects(){
|
||||
fun displayEffects() {
|
||||
waringProviderApi?.displayEffects()
|
||||
}
|
||||
|
||||
@@ -485,14 +482,14 @@ object CallerHmiManager : CallerBase() {
|
||||
/**
|
||||
* 设置司机端消息盒子是否展示
|
||||
*/
|
||||
fun updateDriverMsgBoxTipView(show: Boolean = false){
|
||||
fun updateDriverMsgBoxTipView(show: Boolean = false) {
|
||||
waringProviderApi?.updateDriverMsgBoxTipView(show)
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置乘客端消息盒子是否展示
|
||||
*/
|
||||
fun updatePassengerMsgBoxTipView(show: Boolean = false){
|
||||
fun updatePassengerMsgBoxTipView(show: Boolean = false) {
|
||||
waringProviderApi?.updatePassengerMsgBoxTipView(show)
|
||||
}
|
||||
|
||||
@@ -510,6 +507,18 @@ object CallerHmiManager : CallerBase() {
|
||||
waringProviderApi?.updateMfStatus(tag, status)
|
||||
}
|
||||
|
||||
/**
|
||||
* 调度弹窗展示
|
||||
*/
|
||||
fun showDispatchDialog(msgData: DispatchAdasAutoPilotLocReceiverBean) {
|
||||
waringProviderApi?.showDispatchDialog(msgData)
|
||||
}
|
||||
|
||||
/**
|
||||
* 隐藏调度弹窗
|
||||
*/
|
||||
fun dismissDispatchDialog(){
|
||||
waringProviderApi?.dismissDispatchDialog()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
package com.mogo.eagle.core.function.call.notice;
|
||||
|
||||
import com.mogo.eagle.core.function.api.notice.IMoGoNoticeProvider;
|
||||
import com.mogo.eagle.core.function.call.base.CallerBase;
|
||||
|
||||
import static com.mogo.eagle.core.data.constants.MogoServicePaths.PATH_AI_NOTICE;
|
||||
|
||||
/**
|
||||
* @author xiaoyuzhou
|
||||
*/
|
||||
public class CallerNoticeManager extends CallerBase {
|
||||
|
||||
public static IMoGoNoticeProvider getNoticeProvider() {
|
||||
return getApiInstance(IMoGoNoticeProvider.class, PATH_AI_NOTICE);
|
||||
}
|
||||
}
|
||||
@@ -44,11 +44,8 @@ android {
|
||||
'src/main/res',
|
||||
'src/main/function-adas-res',
|
||||
'src/main/function-chat-res',
|
||||
'src/main/function-check-res',
|
||||
'src/main/function-dispatch-res',
|
||||
'src/main/function-hmi-res',
|
||||
'src/main/function-map-res',
|
||||
'src/main/function-notice-res',
|
||||
'src/main/function-obu-res',
|
||||
'src/main/function-tts-res',
|
||||
'src/main/function-v2x-res',
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
:core:function-impl:mogo-core-function-map
|
||||
:core:function-impl:mogo-core-function-monitoring
|
||||
:core:function-impl:mogo-core-function-v2x
|
||||
:core:function-impl:mogo-core-function-dispatch
|
||||
:core:function-impl:mogo-core-function-chat
|
||||
:core:function-impl:mogo-core-function-devatools
|
||||
:core:function-impl:mogo-core-function-bindingcar
|
||||
@@ -34,8 +34,6 @@ include ':core:function-impl:mogo-core-function-obu-mogo'
|
||||
//include ':core:function-impl:mogo-core-function-autopilot'
|
||||
// 行车超视距服务,路测摄像头、前车摄像头
|
||||
include ':core:function-impl:mogo-core-function-monitoring'
|
||||
// 调度业务
|
||||
include ':core:function-impl:mogo-core-function-dispatch'
|
||||
// 绑定车机
|
||||
include ':core:function-impl:mogo-core-function-bindingcar'
|
||||
// 车聊聊业务
|
||||
|
||||
Reference in New Issue
Block a user