[sweeper-cloud]大任务正常结束和提前结束逻辑处理
This commit is contained in:
@@ -36,8 +36,10 @@ import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean;
|
||||
import com.mogo.och.sweepercloud.callback.ISweeperTaskDataToFragmentCallback;
|
||||
import com.mogo.och.sweepercloud.callback.IWeltMapSwitchToSmallCallback;
|
||||
import com.mogo.och.sweepercloud.database.bean.WeltDataBean;
|
||||
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils;
|
||||
import com.mogo.och.sweepercloud.view.SweeperTrafficDataView;
|
||||
import com.mogo.och.sweepercloud.view.WeltSmallMapView;
|
||||
import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
@@ -119,25 +121,28 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
|
||||
setMessageBox();
|
||||
//设置左下角四个按钮监听事件
|
||||
setBottomBtnListener();
|
||||
// 模拟 不可自动驾驶,目前场景是刚开机,adas还未和工控机连接
|
||||
findViewById(R.id.btnAutopilotDisable).setOnClickListener(view ->
|
||||
debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE)
|
||||
// 模拟 云端发送任务
|
||||
findViewById(R.id.btnSendTask).setOnClickListener(view ->
|
||||
mockSendCloudTaskInfo()
|
||||
);
|
||||
// 模拟 云端发送子任务确认
|
||||
findViewById(R.id.btnSendSubTaskConfirm).setOnClickListener(view ->
|
||||
mockSendCloudSubTaskConfirm()
|
||||
);
|
||||
|
||||
// 模拟 可自动驾驶,工控机连接正常,且处于人工干预状态
|
||||
findViewById(R.id.btnAutopilotEnable).setOnClickListener(view ->
|
||||
debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE)
|
||||
// 模拟 云端请求结束大任务
|
||||
findViewById(R.id.btnSendEndTask).setOnClickListener(view ->
|
||||
mockSendCloudEndBigTask()
|
||||
);
|
||||
|
||||
// 模拟 自动驾驶能力,自动驾驶中,可能是停车,可能是行进,但是是机器在处理车的前进后退,不是人
|
||||
findViewById(R.id.btnAutopilotRunning).setOnClickListener(view ->
|
||||
debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING)
|
||||
// 模拟 云端发送子任务状态
|
||||
findViewById(R.id.btnSendSubtaskStatus).setOnClickListener(view ->
|
||||
mockSendCloudSubTaskStatus()
|
||||
);
|
||||
// 模拟 结束子任务
|
||||
findViewById(R.id.btnEndTask).setOnClickListener(view ->
|
||||
debugEndSubTask()
|
||||
// 模拟 云端发送大任务状态
|
||||
findViewById(R.id.btnSendTaskStatus).setOnClickListener(view ->
|
||||
mockSendCloudBigTaskStatus()
|
||||
);
|
||||
mTrafficDataView.setOnLongClickListener(new View.OnLongClickListener() {
|
||||
mTrafficDataView.getSpeedImage().setOnLongClickListener(new View.OnLongClickListener() {
|
||||
@Override
|
||||
public boolean onLongClick(View v) {
|
||||
debugTestBar();
|
||||
@@ -256,12 +261,6 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
|
||||
*/
|
||||
public abstract int getTaskListPanelViewId();
|
||||
|
||||
/**
|
||||
* 模拟自动驾驶返回状态
|
||||
*
|
||||
* @param status
|
||||
*/
|
||||
public abstract void debugAutoPilotStatus(int status);
|
||||
|
||||
/**
|
||||
* 迈速表实时更新
|
||||
@@ -360,6 +359,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
|
||||
CallerDevaToolsManager.INSTANCE.initAiCollect(mAICollectBtn);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置作业任务全览图隐藏或者显示
|
||||
*
|
||||
@@ -439,6 +439,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
|
||||
|
||||
/**
|
||||
* 设置当前子任务终点
|
||||
*
|
||||
* @param subTaskCoordinate
|
||||
*/
|
||||
public void setCurrentTaskEndMarker(LatLng subTaskCoordinate) {
|
||||
@@ -461,6 +462,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
|
||||
mTaskDataToFragmentCallback.clearAllMarkerAndPolyline();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置任务轨迹点数据
|
||||
*/
|
||||
@@ -484,6 +486,40 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
|
||||
this.mTaskDataToFragmentCallback = mTaskDataToFragmentCallback;
|
||||
}
|
||||
|
||||
/**
|
||||
* 模拟云端发送任务信息
|
||||
*/
|
||||
public void mockSendCloudTaskInfo() {
|
||||
SweeperCloudTaskUtils.mockSendCloudTaskInfo(SweeperCloudTask.MessageType.CloudPushTask);
|
||||
}
|
||||
|
||||
/**
|
||||
* 模拟云端发送子任务确认
|
||||
*/
|
||||
public void mockSendCloudSubTaskConfirm() {
|
||||
SweeperCloudTaskUtils.mockSendCloudSubTaskConfirm();
|
||||
}
|
||||
|
||||
/**
|
||||
* 模拟云端发送结束大任务
|
||||
*/
|
||||
public void mockSendCloudEndBigTask() {
|
||||
SweeperCloudTaskUtils.mockSendCloudBigTaskEnd();
|
||||
}
|
||||
/**
|
||||
* 模拟云端发送子任务状态
|
||||
*/
|
||||
public void mockSendCloudSubTaskStatus() {
|
||||
SweeperCloudTaskUtils.mockSendCloudUpdateSubTaskStatus();
|
||||
}
|
||||
|
||||
/**
|
||||
* 模拟云端发送大任务状态
|
||||
*/
|
||||
public void mockSendCloudBigTaskStatus() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 结束子任务
|
||||
*/
|
||||
@@ -491,16 +527,16 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
|
||||
ArrayList<SweeperRoutePlanningUpdateReqBean.Result> resultArrayList = tempData();
|
||||
setTaskRouteList(resultArrayList);
|
||||
UiThreadHandler.postDelayed(() -> {
|
||||
ArrayList<SweeperRoutePlanningUpdateReqBean.Result> routeList =tempData1();
|
||||
ArrayList<SweeperRoutePlanningUpdateReqBean.Result> routeList = tempData1();
|
||||
ArrayList<WeltDataBean> weltDataBeans = new ArrayList<>();
|
||||
ArrayList<LatLng> subTaskCoordinates=new ArrayList<>();
|
||||
ArrayList<LatLng> subTaskCoordinates = new ArrayList<>();
|
||||
for (int i = 0; i < routeList.size(); i++) {
|
||||
WeltDataBean weltDataBean = new WeltDataBean();
|
||||
weltDataBean.setLocLon(routeList.get(i).longitude);
|
||||
weltDataBean.setLocLat(routeList.get(i).latitude);
|
||||
weltDataBean.setWeltDistance(Math.random() * 50);
|
||||
weltDataBeans.add(weltDataBean);
|
||||
subTaskCoordinates.add(new LatLng(routeList.get(i).latitude,routeList.get(i).longitude));
|
||||
subTaskCoordinates.add(new LatLng(routeList.get(i).latitude, routeList.get(i).longitude));
|
||||
}
|
||||
setTaskListCoordinatesLatLng(subTaskCoordinates);
|
||||
setWeltDataToMap(weltDataBeans, true, format(Math.random() * 50));
|
||||
@@ -509,24 +545,26 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
|
||||
|
||||
private ArrayList<SweeperRoutePlanningUpdateReqBean.Result> tempData() {
|
||||
ArrayList<SweeperRoutePlanningUpdateReqBean.Result> results = new ArrayList<>();
|
||||
results.add(getRoute(116.41732262522,39.974576894194));
|
||||
results.add(getRoute(116.43963532201855,39.9752190287537));
|
||||
results.add(getRoute(116.4440910789222,39.96469276598098));
|
||||
results.add(getRoute(116.45254030604285,39.958762580403544));
|
||||
results.add(getRoute(116.46168616811329,39.94668171374373));
|
||||
results.add(getRoute(116.41732262522, 39.974576894194));
|
||||
results.add(getRoute(116.43963532201855, 39.9752190287537));
|
||||
results.add(getRoute(116.4440910789222, 39.96469276598098));
|
||||
results.add(getRoute(116.45254030604285, 39.958762580403544));
|
||||
results.add(getRoute(116.46168616811329, 39.94668171374373));
|
||||
return results;
|
||||
}
|
||||
|
||||
private ArrayList<SweeperRoutePlanningUpdateReqBean.Result> tempData1() {
|
||||
ArrayList<SweeperRoutePlanningUpdateReqBean.Result> results = new ArrayList<>();
|
||||
results.add(getRoute(116.41732262522,39.974576894194));
|
||||
results.add(getRoute(116.43963532201855,39.9752190287537));
|
||||
results.add(getRoute(116.4440910789222,39.96469276598098));
|
||||
results.add(getRoute(116.41732262522, 39.974576894194));
|
||||
results.add(getRoute(116.43963532201855, 39.9752190287537));
|
||||
results.add(getRoute(116.4440910789222, 39.96469276598098));
|
||||
return results;
|
||||
}
|
||||
private SweeperRoutePlanningUpdateReqBean.Result getRoute(double longitude,double latitude){
|
||||
|
||||
private SweeperRoutePlanningUpdateReqBean.Result getRoute(double longitude, double latitude) {
|
||||
SweeperRoutePlanningUpdateReqBean.Result result = new SweeperRoutePlanningUpdateReqBean.Result();
|
||||
result.latitude = latitude;
|
||||
result.longitude =longitude;
|
||||
result.longitude = longitude;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import chassis.ChassisStatesOuterClass
|
||||
import com.amap.api.maps.model.LatLng
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
import com.mogo.eagle.core.utilcode.util.ToastUtils
|
||||
import com.mogo.och.common.module.utils.DateTimeUtil
|
||||
import com.mogo.och.sweepercloud.R
|
||||
import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean
|
||||
import com.mogo.och.sweepercloud.callback.SweeperCloudDialogClickListener
|
||||
@@ -14,13 +15,15 @@ import com.mogo.och.sweepercloud.presenter.SweeperPresenter
|
||||
import com.mogo.och.sweepercloud.ui.dialog.SweeperCloudLoadingDialog
|
||||
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createConfirmStartSubTaskDialog
|
||||
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createReceivedTaskInfoDialog
|
||||
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.mockSendCloudTaskInfo
|
||||
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createSweeperTaskEndDialog
|
||||
import com.mogo.och.sweepercloud.view.SweeperCurrentTaskInfoView
|
||||
import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask
|
||||
import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.SubTaskInfo
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.TaskModel
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop
|
||||
import kotlinx.android.synthetic.main.fragment_och_sweeper.*
|
||||
import kotlinx.android.synthetic.main.sweeper_no_data_common_view.*
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@@ -39,7 +42,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
private var mCleanSystemState: ChassisStatesOuterClass.SweeperFuTianTaskSystemStates? = null
|
||||
private var mLocation: MogoLocation? = null
|
||||
private var mTaskInfo: SweeperTask.TaskInfo? = null
|
||||
private var mSubTaskType: Int = -1 //0:自动驾驶子任务 1:人工驾驶子任务 -1:未知任务类型
|
||||
private var mSubTaskType: TaskModel = TaskModel.DEFAULT_MODEL //1:自动驾驶子任务 2:人工驾驶子任务 -1:未知任务类型
|
||||
private var mCurrentSubTaskInfo: SubTaskInfo? = null//当前正在执行的子任务
|
||||
private val mLoadingDialog: SweeperCloudLoadingDialog by lazy { SweeperCloudLoadingDialog(requireContext()) }
|
||||
|
||||
@@ -91,9 +94,6 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
}
|
||||
|
||||
fun hideOchSweeper() {}
|
||||
override fun debugAutoPilotStatus(status: Int) {
|
||||
mPresenter?.debugAutoPilotStatus(status)
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置各种监听事件
|
||||
@@ -160,13 +160,15 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
fun onSweeperCloudTask(messageType: SweeperCloudTask.MessageType, taskInfo: SweeperTask.TaskInfo?) {
|
||||
this.mTaskInfo = taskInfo
|
||||
this.mSubMutableList = taskInfo?.subListList
|
||||
if (messageType == SweeperCloudTask.MessageType.PadSendGetTaskReq) {//主动拉取云端正在执行的任务,则直接在任务列表展示
|
||||
//主动拉取云端正在执行的任务,有则直接在任务列表展示
|
||||
if (messageType == SweeperCloudTask.MessageType.PadSendGetTaskReq) {
|
||||
if (taskInfo == null) {
|
||||
setShowCurrentTaskPanelView(false)
|
||||
} else {
|
||||
getCurrentView().setData(taskInfo, getCurrentPosition())
|
||||
setShowCurrentTaskPanelView(true)
|
||||
return
|
||||
}
|
||||
getCurrentView().setData(taskInfo, getCurrentPosition())
|
||||
setShowCurrentTaskPanelView(true)
|
||||
addTaskData()
|
||||
} else {//云端下发的任务信息需要弹窗接取
|
||||
setShowCurrentTaskPanelView(true)
|
||||
getCurrentView().setData(taskInfo)
|
||||
@@ -195,9 +197,9 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
updateCurrentSubTaskInfo()
|
||||
}
|
||||
val builder = it.toBuilder()
|
||||
builder.setSubList(index,subBuilder.build())
|
||||
mTaskInfo=builder.build()
|
||||
mSubMutableList=mTaskInfo?.subListList
|
||||
builder.setSubList(index, subBuilder.build())
|
||||
mTaskInfo = builder.build()
|
||||
mSubMutableList = mTaskInfo?.subListList
|
||||
getCurrentView().setData(mTaskInfo, index)
|
||||
}
|
||||
}
|
||||
@@ -206,12 +208,42 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
}
|
||||
}
|
||||
|
||||
//模拟结束子任务
|
||||
override fun debugEndSubTask() {
|
||||
//super.debugEndSubTask()
|
||||
// TODO: 模拟云控获取任务
|
||||
//mPresenter?.getCurrentTask()
|
||||
mockSendCloudTaskInfo(SweeperCloudTask.MessageType.CloudPushTask)
|
||||
/**
|
||||
* 云端请求结束大任务
|
||||
*/
|
||||
fun onSweeperCloudTaskStop(taskId: String, stopTaskType: SweeperTaskStop.StopTaskType) {
|
||||
mTaskInfo?.let {
|
||||
//如果云端要更新的任务和本地缓存任务不是同一个,在无法结束任务
|
||||
if (taskId != it.taskId) {
|
||||
return
|
||||
}
|
||||
val timeout: String = getTimeSpent(it.taskEndTime)
|
||||
val dialog = createSweeperTaskEndDialog(context, object : SweeperCloudDialogClickListener {
|
||||
override fun onConfirm() {
|
||||
mPresenter?.sendSweeperStopTaskResp(taskId, SweeperTaskStop.StopTaskCode.MANUAL_CONFIRM)
|
||||
mLoadingDialog.showLoading()
|
||||
ToastUtils.showLong("确认")
|
||||
}
|
||||
|
||||
override fun onRefuseOrEnd() {
|
||||
mPresenter?.sendSweeperStopTaskResp(taskId, SweeperTaskStop.StopTaskCode.MANUAL_REFUSE)
|
||||
mLoadingDialog.showLoading()
|
||||
ToastUtils.showLong("拒绝")
|
||||
}
|
||||
|
||||
override fun onCountDownStop() {
|
||||
mPresenter?.sendSweeperStopTaskResp(taskId, SweeperTaskStop.StopTaskCode.OVER_TIME)
|
||||
mLoadingDialog.showLoading()
|
||||
ToastUtils.showLong("倒计时")
|
||||
}
|
||||
|
||||
override fun onNext() {
|
||||
}
|
||||
|
||||
}, stopTaskType, timeout)
|
||||
dialog?.show()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -251,8 +283,9 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
*/
|
||||
private fun updateCurrentSubTaskInfo() {
|
||||
mCurrentSubTaskInfo?.let {
|
||||
mSubTaskType = it.taskModel.number
|
||||
mPresenter?.setSubtask(it.subTaskId, it.taskModel.number, it.lineId)
|
||||
mSubTaskType = it.taskModel
|
||||
mPresenter?.setSubtask(it.subTaskId, it.taskModel, it.lineId)
|
||||
setEndStationMarker()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -315,6 +348,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
ToastUtils.showLong("确认")
|
||||
mPresenter?.sendSweeperStartTaskResp(it.taskId, SweeperTask.StartTaskCode.MANUAL_CONFIRM)
|
||||
mLoadingDialog.showLoading()
|
||||
addTaskData()
|
||||
}
|
||||
|
||||
override fun onRefuseOrEnd() {
|
||||
@@ -340,4 +374,23 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun getTimeSpent(taskEndTime: Long): String {
|
||||
|
||||
val timeLag: Long = System.currentTimeMillis() - taskEndTime
|
||||
//天
|
||||
val day: Long = timeLag / (24 * 60 * 60 * 1000)
|
||||
//小时
|
||||
val hour = (timeLag / (60 * 60 * 1000) - day * 24)
|
||||
//分钟
|
||||
val minute = ((timeLag / (60 * 1000)) - day * 24 * 60 - hour * 60)
|
||||
|
||||
if (day >= 1) {
|
||||
return "${day}天${hour}时${minute}分钟"
|
||||
}
|
||||
if (hour >= 1) {
|
||||
return "${hour}时${minute}分钟"
|
||||
}
|
||||
return "${minute}分钟"
|
||||
}
|
||||
}
|
||||
@@ -78,7 +78,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
|
||||
private ISweeperControllerStatusCallback mControllerStatusCallback; //Model->Presenter:VR mode等
|
||||
private ISweeperCloudTaskCallback mSweeperTaskCallback;
|
||||
ArrayList<SweeperRoutePlanningUpdateReqBean.Result> points = new ArrayList<>();//全路径信息
|
||||
private int mSubTaskType = -1; //1自动驾驶 2.人工驾驶 -1:未知任务类型
|
||||
private SweeperTask.TaskModel mSubTaskType = SweeperTask.TaskModel.DEFAULT_MODEL; //1自动驾驶 2.人工驾驶 0:无效值
|
||||
private int mCurrentLineId = 0; //当前路线id
|
||||
private int mLineId = 0;//上一次存储的路线id
|
||||
//自动驾驶状态
|
||||
@@ -196,7 +196,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
|
||||
|
||||
};
|
||||
|
||||
public void setSubtask(String subTaskId, int subTaskType, int currentLineId) {
|
||||
public void setSubtask(String subTaskId, SweeperTask.TaskModel subTaskType, int currentLineId) {
|
||||
this.mSubTaskId = subTaskId;
|
||||
this.mSubTaskType = subTaskType;
|
||||
this.mCurrentLineId = currentLineId;
|
||||
@@ -207,7 +207,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
|
||||
*/
|
||||
public void clearRouteList() {
|
||||
points.clear();
|
||||
mSubTaskType = 0;
|
||||
mSubTaskType = SweeperTask.TaskModel.UNRECOGNIZED;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -265,7 +265,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
|
||||
if (mControllerStatusCallback != null) {
|
||||
mControllerStatusCallback.onCarLocationChanged(gnssInfo);
|
||||
}
|
||||
if (mSubTaskType == 1) {//收集人工驾驶子任务坐标点
|
||||
if (mSubTaskType == SweeperTask.TaskModel.MANUAL) {//收集人工驾驶子任务坐标点
|
||||
addCoordinates(gnssInfo);
|
||||
return;
|
||||
}
|
||||
@@ -472,10 +472,6 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
|
||||
String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTask.getNumber());
|
||||
getAutoPilotControlManager().sendSweeperStartTaskResp(reqNo, startTaskResp);
|
||||
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperStartTaskResp:" + printMessage(startTaskResp) + " reqNo:" + reqNo);
|
||||
// TODO: 2023/5/5 模拟 当云控收到pad接取任务成功的指令时, 云控下发子任务开始确认指令
|
||||
if (code == SweeperTask.StartTaskCode.MANUAL_CONFIRM) {
|
||||
SweeperCloudTaskUtils.mockSendCloudSubTaskConfirm();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -489,12 +485,8 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
|
||||
builder.setCode(code);
|
||||
SweeperTaskConfirm.TaskConfirmResp taskConfirmResp = builder.build();
|
||||
String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTaskConfirm.getNumber());
|
||||
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperStartTaskResp" + printMessage(taskConfirmResp) + " reqNo:" + reqNo);
|
||||
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperTaskConfirmResp" + printMessage(taskConfirmResp) + " reqNo:" + reqNo);
|
||||
getAutoPilotControlManager().sendSweeperTaskConfirmResp(reqNo, taskConfirmResp);
|
||||
// TODO: 2023/5/8 模拟当云控收到pad子任务确认指令后。云控下发子任务状态更新指令
|
||||
if (code == SweeperTaskConfirm.TaskConfirmCode.MANUAL_CONFIRM) {
|
||||
SweeperCloudTaskUtils.mockSendCloudUpdateSubTaskStatus();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -510,7 +502,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
|
||||
builder.setCode(code);
|
||||
SweeperTaskStop.StopTaskResp stopTaskResp = builder.build();
|
||||
String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTaskStop.getNumber());
|
||||
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperStartTaskResp" + printMessage(stopTaskResp) + " reqNo:" + reqNo);
|
||||
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperStopTaskResp" + printMessage(stopTaskResp) + " reqNo:" + reqNo);
|
||||
getAutoPilotControlManager().sendSweeperStopTaskResp(reqNo, stopTaskResp);
|
||||
}
|
||||
|
||||
|
||||
@@ -98,7 +98,7 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
/**
|
||||
* 设置当前子任务信息
|
||||
*/
|
||||
public void setSubtask(String subTaskId, int subTaskType, int currentLineId) {
|
||||
public void setSubtask(String subTaskId, SweeperTask.TaskModel subTaskType, int currentLineId) {
|
||||
SweeperTaskModel.getInstance().setSubtask(subTaskId, subTaskType, currentLineId);
|
||||
}
|
||||
|
||||
@@ -167,23 +167,23 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSweeperCloudTask(@NonNull SweeperCloudTask.MessageType messageType,SweeperTask.TaskInfo taskInfo) {
|
||||
ThreadUtils.runOnUiThread(()-> mView.onSweeperCloudTask(messageType,taskInfo));
|
||||
public void onSweeperCloudTask(@NonNull SweeperCloudTask.MessageType messageType, SweeperTask.TaskInfo taskInfo) {
|
||||
ThreadUtils.runOnUiThread(() -> mView.onSweeperCloudTask(messageType, taskInfo));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSweeperCloudTaskConfirm(@NonNull String taskId, @NonNull String subTaskId) {
|
||||
ThreadUtils.runOnUiThread(()-> mView.showSubTaskInfoDialog(taskId,subTaskId));
|
||||
ThreadUtils.runOnUiThread(() -> mView.showSubTaskInfoDialog(taskId, subTaskId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSweeperCloudTaskStatus(@NonNull String taskId, @NonNull String subTaskId, @NonNull SweeperCommon.TaskStatus subTaskStatus) {
|
||||
ThreadUtils.runOnUiThread(()->mView.onSweeperUpdateSubTaskStatus(taskId,subTaskId,subTaskStatus));
|
||||
ThreadUtils.runOnUiThread(() -> mView.onSweeperUpdateSubTaskStatus(taskId, subTaskId, subTaskStatus));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSweeperCloudTaskStop(@NonNull String taskId, @NonNull SweeperTaskStop.StopTaskType stopTaskType) {
|
||||
|
||||
ThreadUtils.runOnUiThread(() -> mView.onSweeperCloudTaskStop(taskId, stopTaskType));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -204,11 +204,11 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
|
||||
@Override
|
||||
public void setWeltDataToMap(@NonNull ArrayList<WeltDataBean> weltDataBeans, boolean isWeltData, @NonNull String distance) {
|
||||
ThreadUtils.runOnUiThread(()-> mView.setWeltDataToMap(weltDataBeans, isWeltData, distance));
|
||||
ThreadUtils.runOnUiThread(() -> mView.setWeltDataToMap(weltDataBeans, isWeltData, distance));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSweeperFutianCleanSystemState(@NonNull ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState) {
|
||||
ThreadUtils.runOnUiThread(()-> mView.onSweeperFutianCleanSystemState(cleanSystemState));
|
||||
ThreadUtils.runOnUiThread(() -> mView.onSweeperFutianCleanSystemState(cleanSystemState));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,9 +33,9 @@ class SweeperCloudLoadingDialog : BaseFloatDialog, LifecycleObserver {
|
||||
* 开始旋转
|
||||
*/
|
||||
private fun startRotation() {
|
||||
objectAnimator = ObjectAnimator.ofFloat(mLoadingView, "rotation", 0f, 360f)
|
||||
objectAnimator = ObjectAnimator.ofFloat(mLoadingView, "rotation", 0f, 720f)
|
||||
objectAnimator?.let {
|
||||
it.duration = 1000
|
||||
it.duration = 2000
|
||||
it.repeatCount = -1
|
||||
it.interpolator = LinearInterpolator()
|
||||
it.start()
|
||||
|
||||
@@ -4,7 +4,6 @@ import android.content.Context
|
||||
import com.google.protobuf.MessageOrBuilder
|
||||
import com.google.protobuf.TextFormat
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
|
||||
import com.mogo.eagle.core.utilcode.util.ThreadUtils
|
||||
import com.mogo.och.common.module.utils.DateTimeUtil
|
||||
import com.mogo.och.sweepercloud.callback.SweeperCloudDialogClickListener
|
||||
import com.mogo.och.sweepercloud.model.SweeperTaskModel
|
||||
@@ -14,6 +13,7 @@ import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.*
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm.TaskConfirm
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop
|
||||
|
||||
object SweeperCloudTaskUtils {
|
||||
/**
|
||||
@@ -110,13 +110,12 @@ object SweeperCloudTaskUtils {
|
||||
builder.sn = getDriverSn()
|
||||
builder.taskId = "10"
|
||||
builder.subTaskId = "1"
|
||||
ThreadUtils.runOnUiThreadDelayed({
|
||||
SweeperTaskModel.getInstance().onSweeperFutianCloudTaskConfirm(
|
||||
MessageType.CloudPushTaskConfirm, "${System.currentTimeMillis()}",
|
||||
System.currentTimeMillis(), builder.build()
|
||||
)
|
||||
}, 10000)
|
||||
SweeperTaskModel.getInstance().onSweeperFutianCloudTaskConfirm(
|
||||
MessageType.CloudPushTaskConfirm, "${System.currentTimeMillis()}",
|
||||
System.currentTimeMillis(), builder.build()
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* 模拟下发更新子任务状态指令
|
||||
*/
|
||||
@@ -127,13 +126,27 @@ object SweeperCloudTaskUtils {
|
||||
builder.taskId = "10"
|
||||
builder.subTaskId = "3"
|
||||
builder.taskStatus = SweeperCommon.TaskStatus.RUNNING
|
||||
ThreadUtils.runOnUiThreadDelayed({
|
||||
SweeperTaskModel.getInstance().onSweeperFutianCloudTaskStatus(
|
||||
MessageType.CloudPushTaskStatus, "${System.currentTimeMillis()}",
|
||||
System.currentTimeMillis(), builder.build()
|
||||
)
|
||||
}, 10000)
|
||||
SweeperTaskModel.getInstance().onSweeperFutianCloudTaskStatus(
|
||||
MessageType.CloudPushTaskStatus, "${System.currentTimeMillis()}",
|
||||
System.currentTimeMillis(), builder.build()
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* 模拟云端发送大任务结束
|
||||
*/
|
||||
@JvmStatic
|
||||
fun mockSendCloudBigTaskEnd() {
|
||||
val builder = SweeperTaskStop.StopTaskReq.newBuilder()
|
||||
builder.sn = getDriverSn()
|
||||
builder.taskId = "10"
|
||||
builder.type = SweeperTaskStop.StopTaskType.TIMEOUT
|
||||
SweeperTaskModel.getInstance().onSweeperFutianCloudTaskStop(
|
||||
MessageType.CloudPushTaskStop, "${System.currentTimeMillis()}",
|
||||
System.currentTimeMillis(), builder.build()
|
||||
)
|
||||
}
|
||||
|
||||
fun getDriverSn(): String? {
|
||||
return MoGoAiCloudClientConfig.getInstance().sn
|
||||
}
|
||||
@@ -142,12 +155,12 @@ object SweeperCloudTaskUtils {
|
||||
* 创建接收任务弹窗
|
||||
*/
|
||||
@JvmStatic
|
||||
fun createReceivedTaskInfoDialog(context:Context?,listener: SweeperCloudDialogClickListener?,taskInfo: TaskInfo):SweeperCloudDialog?{
|
||||
fun createReceivedTaskInfoDialog(context: Context?, listener: SweeperCloudDialogClickListener?, taskInfo: TaskInfo): SweeperCloudDialog? {
|
||||
var builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
|
||||
val startCalendar = DateTimeUtil.formatLongToCalendar(taskInfo.taskStartTime)
|
||||
val endCalendar = DateTimeUtil.formatLongToCalendar(taskInfo.taskEndTime)
|
||||
builder.titleStr = "任务接取"
|
||||
builder.contentStr = "请确认是否接取任务${taskInfo.taskName}"
|
||||
builder.contentStr = "请确认是否接取${taskInfo.taskName}"
|
||||
builder.tipStr = "(任务时间${DateTimeUtil.formatCalendarToString(startCalendar, DateTimeUtil.HH_mm)}-${
|
||||
DateTimeUtil.formatCalendarToString(
|
||||
endCalendar,
|
||||
@@ -158,7 +171,7 @@ object SweeperCloudTaskUtils {
|
||||
builder.middleStr = ""
|
||||
builder.rightStr = "拒绝"
|
||||
builder.countDownTime = 15
|
||||
builder.listener=listener
|
||||
builder.listener = listener
|
||||
return context?.let { it1 -> builder.build(it1) }
|
||||
}
|
||||
|
||||
@@ -166,18 +179,67 @@ object SweeperCloudTaskUtils {
|
||||
* 创建确认开始子任务弹窗
|
||||
*/
|
||||
@JvmStatic
|
||||
fun createConfirmStartSubTaskDialog(context:Context?,listener: SweeperCloudDialogClickListener?,subTaskInfo: SubTaskInfo):SweeperCloudDialog?{
|
||||
fun createConfirmStartSubTaskDialog(
|
||||
context: Context?,
|
||||
listener: SweeperCloudDialogClickListener?,
|
||||
subTaskInfo: SubTaskInfo
|
||||
): SweeperCloudDialog? {
|
||||
var builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
|
||||
builder.titleStr = "任务确认"
|
||||
builder.contentStr = "请确认是否执行任务${subTaskInfo.subTaskName}"
|
||||
builder.tipStr = if (subTaskInfo.taskModel.number == 1) "[需手动驾驶至终点${subTaskInfo.endLocation.siteName}]" else "[自动驾驶至终点${subTaskInfo.endLocation.siteName}]"
|
||||
builder.contentStr = "请确认是否执行${subTaskInfo.subTaskName}"
|
||||
builder.tipStr =
|
||||
if (subTaskInfo.taskModel == TaskModel.MANUAL) "[需手动驾驶至终点${subTaskInfo.endLocation.siteName}]" else "[自动驾驶至终点${subTaskInfo.endLocation.siteName}]"
|
||||
builder.leftStr = "确认"
|
||||
builder.middleStr = "下一个"
|
||||
builder.rightStr = "结束"
|
||||
builder.countDownTime = 15
|
||||
builder.listener =listener
|
||||
builder.listener = listener
|
||||
return context?.let { it1 -> builder.build(it1) }
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建结束任务弹窗
|
||||
*/
|
||||
@JvmStatic
|
||||
fun createSweeperTaskEndDialog(
|
||||
context: Context?,
|
||||
listener: SweeperCloudDialogClickListener?,
|
||||
stopTaskType: SweeperTaskStop.StopTaskType,
|
||||
timeoutStr: String
|
||||
): SweeperCloudDialog? {
|
||||
var builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
|
||||
builder.titleStr = "任务结束"
|
||||
when (stopTaskType) {
|
||||
//任务正常结束
|
||||
SweeperTaskStop.StopTaskType.NORMAL -> {
|
||||
builder.contentStr = "任务已完成,干的漂亮!"
|
||||
builder.tipStr = ""
|
||||
builder.leftStr = "确认"
|
||||
builder.middleStr = ""
|
||||
builder.rightStr = ""
|
||||
}
|
||||
//任务提前结束
|
||||
SweeperTaskStop.StopTaskType.ADVANCE -> {
|
||||
builder.contentStr = "云端请求终止任务,请确认"
|
||||
builder.tipStr = "【确认后请接管停车】"
|
||||
builder.leftStr = "确认"
|
||||
builder.middleStr = ""
|
||||
builder.rightStr = "拒绝"
|
||||
}
|
||||
//任务超时结束
|
||||
SweeperTaskStop.StopTaskType.TIMEOUT -> {
|
||||
builder.contentStr = "任务已超时${timeoutStr},请确认是否结束"
|
||||
builder.tipStr = "【结束后请接管停车】"
|
||||
builder.leftStr = "确认"
|
||||
builder.middleStr = ""
|
||||
builder.rightStr = "拒绝"
|
||||
}
|
||||
}
|
||||
builder.countDownTime = 15
|
||||
builder.listener = listener
|
||||
return context?.let { it1 -> builder.build(it1) }
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun printMessage(message: MessageOrBuilder): String {
|
||||
return TextFormat.printer().escapingNonAscii(false).printToString(message)
|
||||
|
||||
@@ -9,6 +9,7 @@ import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import com.mogo.och.sweepercloud.R
|
||||
import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.SubTaskInfo
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.TaskModel
|
||||
import kotlinx.android.synthetic.main.sweeper_subtask_view.view.*
|
||||
|
||||
/**
|
||||
@@ -32,7 +33,7 @@ class SubTaskView : ConstraintLayout {
|
||||
fun setData(taskInfo: SubTaskInfo,isLastTask: Boolean = false) {
|
||||
tvSubTaskName.text = taskInfo.subTaskName
|
||||
tvSubTaskName.setTextColor(if (taskInfo.taskStatus==SweeperCommon.TaskStatus.RUNNING) Color.parseColor("#3BD2FF") else Color.parseColor("#FFFFFF"))
|
||||
if (taskInfo.taskModel.number == 1) {//人工驾驶子任务
|
||||
if (taskInfo.taskModel == TaskModel.MANUAL) {//人工驾驶子任务
|
||||
ivManualDriving.visibility = View.VISIBLE
|
||||
} else {
|
||||
ivManualDriving.visibility = View.GONE
|
||||
|
||||
@@ -158,7 +158,9 @@ class SweeperTrafficDataView : ConstraintLayout,
|
||||
tapPositionView?.updateWithGear(gear)
|
||||
}
|
||||
}
|
||||
|
||||
fun getSpeedImage():ImageView?{
|
||||
return speedImage
|
||||
}
|
||||
/**
|
||||
* 速度设置
|
||||
*/
|
||||
|
||||
@@ -14,6 +14,7 @@ import com.mogo.och.sweepercloud.callback.ICleaningModeStateCallback
|
||||
import com.mogo.och.sweepercloud.constant.OperateStateEnum
|
||||
import com.mogo.och.sweepercloud.ui.popwindow.SweeperOperatePanelPopWindow
|
||||
import com.mogo.och.sweepercloud.util.SweeperFutianCmdUtil
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.TaskModel
|
||||
import kotlinx.android.synthetic.main.sweeper_work_mode.view.*
|
||||
|
||||
/**
|
||||
@@ -67,7 +68,7 @@ class SweeperWorkModeView : ConstraintLayout,ICleaningModeStateCallback {
|
||||
/**
|
||||
* 设置清扫模式面板
|
||||
*/
|
||||
fun setSweeperFutianCleanSystemState(taskType: Int, cleanSystemState: SweeperFuTianTaskSystemStates?) {
|
||||
fun setSweeperFutianCleanSystemState(taskType: TaskModel, cleanSystemState: SweeperFuTianTaskSystemStates?) {
|
||||
// TODO:传递清扫车底盘数据给上装面板
|
||||
//mOperatePanelPopWindow?.setCleanSystemState(cleanSystemState, this@SweeperWorkModeView)
|
||||
if (this.operateState.code==OperateStateEnum.STARTING_STATUS.code){
|
||||
@@ -79,7 +80,7 @@ class SweeperWorkModeView : ConstraintLayout,ICleaningModeStateCallback {
|
||||
d(SceneConstant.M_SWEEPER + TAG, "SystemState operateState:"+operateState.code)
|
||||
}
|
||||
//清扫车暂未选择清扫模式或者任务类型是人工驾驶子任务,则暂无清扫模式
|
||||
if (SweeperFutianCmdUtil.checkIfCleanMode(cleanSystemState) || taskType==1||taskType==-1) {
|
||||
if (SweeperFutianCmdUtil.checkIfCleanMode(cleanSystemState) || taskType==TaskModel.MANUAL||taskType==TaskModel.DEFAULT_MODEL) {
|
||||
setShowOrHideCleanSystemState(OperateStateEnum.NO_STATUS, cleanSystemState)
|
||||
} else {
|
||||
setShowOrHideCleanSystemState(OperateStateEnum.SUCCESS_STATUS, cleanSystemState)
|
||||
|
||||
@@ -4,31 +4,32 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="@dimen/dp_800"
|
||||
android:layout_height="@dimen/dp_560"
|
||||
android:layout_gravity="center"
|
||||
android:background="@drawable/bg_shape_dialog_cloud_view"
|
||||
app:roundLayoutRadius="@dimen/dp_45"
|
||||
android:layout_gravity="center">
|
||||
app:roundLayoutRadius="@dimen/dp_45">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/sweeper_cloud_imageview"
|
||||
android:layout_width="@dimen/dp_75"
|
||||
android:layout_height="@dimen/dp_75"
|
||||
android:layout_marginStart="@dimen/dp_30"
|
||||
android:layout_marginTop="@dimen/dp_30"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:src="@drawable/shape_sweeper_cloud_rotation"
|
||||
/>
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<com.mogo.och.sweepercloud.view.CountDownView
|
||||
android:id="@+id/sweeper_cloud_countdown"
|
||||
android:layout_width="@dimen/dp_75"
|
||||
android:layout_height="@dimen/dp_75"
|
||||
tools:text="15"
|
||||
android:gravity="center"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/dp_32"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/sweeper_cloud_imageview"
|
||||
app:layout_constraintEnd_toEndOf="@+id/sweeper_cloud_imageview"
|
||||
app:layout_constraintLeft_toLeftOf="@+id/sweeper_cloud_imageview"
|
||||
app:layout_constraintTop_toTopOf="@+id/sweeper_cloud_imageview"
|
||||
app:layout_constraintEnd_toEndOf="@+id/sweeper_cloud_imageview"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/sweeper_cloud_imageview"/>
|
||||
tools:text="15" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/sweeper_cloud_title"
|
||||
@@ -36,42 +37,49 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/dp_30"
|
||||
android:gravity="center"
|
||||
tools:text="任务领取"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/dp_56"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="任务领取" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/sweeper_cloud_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/dp_30"
|
||||
android:layout_marginTop="@dimen/dp_49"
|
||||
android:layout_marginEnd="@dimen/dp_30"
|
||||
android:gravity="center"
|
||||
tools:text="请确认是否接取任务AAAAAAA"
|
||||
android:textColor="#FFFFFFFF"
|
||||
android:textSize="@dimen/dp_50"
|
||||
app:layout_constraintTop_toBottomOf="@+id/sweeper_cloud_title"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent" />
|
||||
<TextView
|
||||
android:id="@+id/sweeper_cloud_tip"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/dp_30"
|
||||
android:layout_marginTop="@dimen/dp_10"
|
||||
android:layout_marginEnd="@dimen/dp_30"
|
||||
android:gravity="center"
|
||||
tools:text="(任务时间09:00-12:00)"
|
||||
android:textColor="#A6CEFF"
|
||||
android:textSize="@dimen/dp_40"
|
||||
app:layout_constraintTop_toBottomOf="@+id/sweeper_cloud_content"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent" />
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical"
|
||||
app:layout_constraintBottom_toTopOf="@+id/llBottom"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/sweeper_cloud_title">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/sweeper_cloud_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/dp_30"
|
||||
android:layout_marginEnd="@dimen/dp_30"
|
||||
android:gravity="center"
|
||||
android:textColor="#FFFFFFFF"
|
||||
android:textSize="@dimen/dp_50"
|
||||
tools:text="请确认是否接取任务AAAAAAA" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/sweeper_cloud_tip"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/dp_30"
|
||||
android:layout_marginTop="@dimen/dp_10"
|
||||
android:layout_marginEnd="@dimen/dp_30"
|
||||
android:gravity="center"
|
||||
android:textColor="#A6CEFF"
|
||||
android:textSize="@dimen/dp_40"
|
||||
tools:text="(任务时间09:00-12:00)" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/llBottom"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dp_134"
|
||||
android:orientation="horizontal"
|
||||
@@ -97,9 +105,9 @@
|
||||
android:layout_weight="1"
|
||||
android:background="#3769B5"
|
||||
android:gravity="center"
|
||||
tools:text="下一个"
|
||||
android:textColor="#FFFFFFFF"
|
||||
android:textSize="@dimen/dp_50" />
|
||||
android:textSize="@dimen/dp_50"
|
||||
tools:text="下一个" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/sweeper_cloud_right"
|
||||
@@ -108,8 +116,8 @@
|
||||
android:layout_weight="1"
|
||||
android:background="@drawable/bg_shape_right_bottom_round"
|
||||
android:gravity="center"
|
||||
tools:text="拒绝"
|
||||
android:textColor="#FFFFFFFF"
|
||||
android:textSize="@dimen/dp_50" />
|
||||
android:textSize="@dimen/dp_50"
|
||||
tools:text="拒绝" />
|
||||
</LinearLayout>
|
||||
</com.mogo.och.common.module.wigets.OCHRoundConstraintLayout>
|
||||
@@ -85,36 +85,37 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginLeft="@dimen/dp_13"
|
||||
android:layout_marginTop="-20dp"
|
||||
app:layout_constraintBottom_toTopOf="@+id/sweeper_switch_model_icon"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/sweeper_arc"
|
||||
app:layout_goneMarginTop="@dimen/module_mogo_och_station_panel_container_margin_top_no_call"
|
||||
android:layout_marginTop="-20dp"/>
|
||||
app:layout_goneMarginTop="@dimen/module_mogo_och_station_panel_container_margin_top_no_call" />
|
||||
|
||||
<com.mogo.och.common.module.wigets.OCHRoundConstraintLayout
|
||||
android:layout_width="@dimen/dp_711"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
android:layout_marginEnd="@dimen/dp_36"
|
||||
android:layout_marginTop="@dimen/dp_27"
|
||||
app:roundLayoutRadius="@dimen/dp_16"
|
||||
>
|
||||
android:layout_marginEnd="@dimen/dp_36"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:roundLayoutRadius="@dimen/dp_16">
|
||||
|
||||
<com.mogo.eagle.core.function.hmi.ui.widget.SweeperVideoView
|
||||
android:id="@+id/sweeper_video_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dp_401"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:src="#999999"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
android:src="#999999"/>
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<com.mogo.och.sweepercloud.view.WeltSmallMapView
|
||||
android:id="@+id/sweeper_task_welt_small_map"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dp_401"
|
||||
app:layout_constraintTop_toBottomOf="@+id/sweeper_video_view"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"/>
|
||||
app:layout_constraintTop_toBottomOf="@+id/sweeper_video_view" />
|
||||
</com.mogo.och.common.module.wigets.OCHRoundConstraintLayout>
|
||||
|
||||
<ImageView
|
||||
@@ -185,36 +186,6 @@
|
||||
android:visibility="gone"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/viewDriverMsgBoxButton" />
|
||||
<!--清扫手动驾驶路线导航-->
|
||||
<FrameLayout
|
||||
android:id="@+id/module_mogo_och_navi_panel_container"
|
||||
android:layout_width="@dimen/dp_600"
|
||||
android:layout_height="@dimen/dp_600"
|
||||
android:layout_marginEnd="@dimen/module_mogo_och_margin_right"
|
||||
android:layout_marginBottom="@dimen/module_mogo_och_margin_bottom"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/sweeper_close_navi_icon"
|
||||
android:layout_width="@dimen/dp_80"
|
||||
android:layout_height="@dimen/dp_80"
|
||||
android:layout_marginStart="@dimen/dp_24"
|
||||
android:layout_marginTop="@dimen/dp_26"
|
||||
android:src="@drawable/sweeper_close_navi_icon"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintStart_toStartOf="@+id/module_mogo_och_navi_panel_container"
|
||||
app:layout_constraintTop_toTopOf="@+id/module_mogo_och_navi_panel_container" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/sweeper_refresh_navi"
|
||||
android:layout_width="@dimen/dp_80"
|
||||
android:layout_height="@dimen/dp_80"
|
||||
android:layout_marginTop="@dimen/dp_26"
|
||||
android:layout_marginEnd="@dimen/dp_24"
|
||||
android:src="@drawable/sweeper_navi_refresh"
|
||||
app:layout_constraintEnd_toEndOf="@+id/module_mogo_och_navi_panel_container"
|
||||
app:layout_constraintTop_toTopOf="@+id/module_mogo_och_navi_panel_container" />
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/sweeper_welt_map_overview"
|
||||
@@ -223,62 +194,66 @@
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<androidx.constraintlayout.widget.Group
|
||||
android:id="@+id/group_navi_panel"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:constraint_referenced_ids="module_mogo_och_navi_panel_container,sweeper_close_navi_icon
|
||||
,sweeper_refresh_navi"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnAutopilotDisable"
|
||||
android:id="@+id/btnSendTask"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="#f00"
|
||||
android:text="Disable"
|
||||
android:text="发送任务"
|
||||
android:textSize="30sp"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:layout_marginTop="@dimen/dp_200"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnAutopilotEnable"
|
||||
android:id="@+id/btnSendSubTaskConfirm"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="#0f0"
|
||||
android:text="Enable"
|
||||
android:text="子任务开始确认"
|
||||
android:textSize="30sp"
|
||||
app:layout_constraintRight_toRightOf="@id/btnAutopilotDisable"
|
||||
app:layout_constraintTop_toBottomOf="@id/btnAutopilotDisable" />
|
||||
app:layout_constraintRight_toRightOf="@id/btnSendTask"
|
||||
app:layout_constraintTop_toBottomOf="@id/btnSendTask" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnAutopilotRunning"
|
||||
android:id="@+id/btnSendEndTask"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="#00f"
|
||||
android:text="Running"
|
||||
android:text="结束大任务"
|
||||
android:textSize="30sp"
|
||||
app:layout_constraintRight_toRightOf="@id/btnAutopilotDisable"
|
||||
app:layout_constraintTop_toBottomOf="@id/btnAutopilotEnable" />
|
||||
android:textColor="#fff"
|
||||
app:layout_constraintRight_toRightOf="@id/btnSendTask"
|
||||
app:layout_constraintTop_toBottomOf="@id/btnSendSubTaskConfirm" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnEndTask"
|
||||
android:id="@+id/btnSendSubtaskStatus"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="#ffffff"
|
||||
android:text="结束子任务"
|
||||
android:text="子任务状态"
|
||||
android:textSize="30sp"
|
||||
app:layout_constraintRight_toRightOf="@id/btnAutopilotRunning"
|
||||
app:layout_constraintTop_toBottomOf="@id/btnAutopilotRunning" />
|
||||
app:layout_constraintRight_toRightOf="@id/btnSendEndTask"
|
||||
app:layout_constraintTop_toBottomOf="@id/btnSendEndTask" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnSendTaskStatus"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="#000000"
|
||||
android:text="大任务状态"
|
||||
android:textSize="30sp"
|
||||
android:textColor="#fff"
|
||||
app:layout_constraintRight_toRightOf="@id/btnSendSubtaskStatus"
|
||||
app:layout_constraintTop_toBottomOf="@id/btnSendSubtaskStatus" />
|
||||
|
||||
<androidx.constraintlayout.widget.Group
|
||||
android:id="@+id/groupTestPanel"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:constraint_referenced_ids="btnAutopilotDisable,btnAutopilotEnable
|
||||
,btnAutopilotRunning,btnEndTask"
|
||||
app:constraint_referenced_ids="btnSendTask,btnSendSubTaskConfirm,btnSendEndTask
|
||||
,btnSendSubtaskStatus,btnSendTaskStatus"
|
||||
tools:visibility="visible" />
|
||||
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:layout_marginEnd="@dimen/dp_26"
|
||||
android:layout_marginTop="@dimen/dp_20"
|
||||
android:visibility="gone"
|
||||
/>
|
||||
<ImageView
|
||||
android:id="@+id/ivSubTask"
|
||||
|
||||
Reference in New Issue
Block a user