[sweeper-cloud]pad端请求云控是否可以进入自驾逻辑处理

This commit is contained in:
bxb
2023-05-16 17:01:48 +08:00
parent e7aa0f7b38
commit 4fae00fd4a
10 changed files with 152 additions and 67 deletions

View File

@@ -4,6 +4,8 @@ import chassis.ChassisStatesOuterClass
import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean
import com.mogo.och.sweepercloud.database.bean.WeltDataBean
import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask
import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable
import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable.IsBootableResp
import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon
import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon.Code
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask
@@ -43,7 +45,7 @@ interface ISweeperCloudTaskCallback {
/**
* pad请求云端进入自驾
*/
fun onSweeperCloudBootable(taskId:String,subTaskId:String,code:Code)
fun onSweeperCloudBootable(taskId:String,subTaskId:String,isBootableResp: IsBootableResp)
/**
* 云端同步大任务状态

View File

@@ -92,9 +92,6 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
protected int getLayoutId() {
return R.layout.sweeper_base_fragment;
}
private View panelView;
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
@@ -106,7 +103,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
groupTestPanel = findViewById(R.id.groupTestPanel);
flTaskListPanelContainer = findViewById(R.id.module_mogo_och_task_list_container);
mTrafficDataView = findViewById(R.id.sweeper_arc);
panelView = LayoutInflater.from(getContext()).inflate(getTaskListPanelViewId(), flTaskListPanelContainer);
LayoutInflater.from(getContext()).inflate(getTaskListPanelViewId(), flTaskListPanelContainer);
mSwitchMapModeImage = findViewById(R.id.sweeper_switch_model_icon);
mSettingBtn = findViewById(R.id.sweeper_setting_model_icon);
mCardBtn = findViewById(R.id.sweeper_card_model_icon);
@@ -487,7 +484,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
* 模拟云端发送任务信息
*/
public void mockSendCloudTaskInfo() {
SweeperCloudTaskUtils.mockSendCloudTaskInfo(SweeperCloudTask.MessageType.CloudPushTask);
SweeperCloudTaskUtils.mockSendCloudTaskInfo(SweeperCloudTask.MessageType.PadSendGetTaskReq);
}
/**

View File

@@ -6,6 +6,7 @@ import androidx.lifecycle.lifecycleScope
import chassis.ChassisStatesOuterClass
import com.amap.api.maps.model.LatLng
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener.Companion.STATUS_AUTOPILOT_ENABLE
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.util.ToastUtils
@@ -23,6 +24,7 @@ import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createSweeperTaskNor
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.printMessage
import com.mogo.och.sweepercloud.view.SweeperCurrentTaskInfoView
import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask
import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable
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
@@ -51,6 +53,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
private var mSubTaskType: TaskModel = TaskModel.DEFAULT_MODEL //1:自动驾驶子任务 2人工驾驶子任务 -1:未知任务类型
private var mCurrentSubTaskInfo: SubTaskInfo? = null//当前正在执行的子任务
private val mLoadingDialog: SweeperCloudLoadingDialog by lazy { SweeperCloudLoadingDialog(requireContext()) }
private var mDialog:SweeperCloudDialog?=null
override fun getTagName(): String {
return "SweepersFragment"
@@ -105,8 +108,14 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
* 设置各种监听事件
*/
private fun initListener() {
getCurrentView().setOnClickListener {
getCurrentView().getAutoBtn().setOnClickListener {
//前置条件 必须处于人工驾驶,并且有正在执行的子任务,才能请求云端进入自驾
mCurrentSubTaskInfo?.let {
if (mPresenter?.autopilotState == STATUS_AUTOPILOT_ENABLE) {
mLoadingDialog.showLoading()
mPresenter?.sendSweeperAutopilotBootable(mTaskInfo?.taskId, it.subTaskId, it.lineId.toLong())
}
}
}
}
@@ -149,11 +158,13 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
* 设置当前子任务终点
*/
private fun setEndStationMarker(position: Int) {
mSubMutableList?.let { subList ->
val endPoint = subList[position].endLocation
val endLatLng = LatLng(endPoint.latitude, endPoint.longitude)
super.mCurrentTaskEndStation = endLatLng
setCurrentTaskEndMarker(endLatLng)
lifecycleScope.launch(Dispatchers.IO) {
mSubMutableList?.let { subList ->
val endPoint = subList[position].endLocation
val endLatLng = LatLng(endPoint.latitude, endPoint.longitude)
super.mCurrentTaskEndStation = endLatLng
setCurrentTaskEndMarker(endLatLng)
}
}
}
@@ -231,11 +242,14 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
return
}
val timeout: String = getTimeSpent(it.taskEndTime)
var dialog: SweeperCloudDialog?
//数据重复导致连续弹窗
if (mDialog!=null&& mDialog!!.isShowing){
return
}
if (stopTaskType == SweeperTaskStop.StopTaskType.NORMAL) {
dialog = sweeperCloudTaskNormalEndDialog(true)
mDialog = sweeperCloudTaskNormalEndDialog()
} else {
dialog = createSweeperTaskEndDialog(context, object : SweeperCloudDialogClickListener {
mDialog = createSweeperTaskEndDialog(context, object : SweeperCloudDialogClickListener {
override fun onConfirm() {
mPresenter?.sendSweeperStopTaskResp(taskId, SweeperTaskStop.StopTaskCode.MANUAL_CONFIRM)
mLoadingDialog.showLoading()
@@ -259,7 +273,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
}, stopTaskType, timeout)
}
dialog?.show()
mDialog?.show()
}
}
@@ -267,12 +281,11 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
/**
* 大任务/子任务正常结束弹窗
*/
private fun sweeperCloudTaskNormalEndDialog(isBigTaskEnd: Boolean): SweeperCloudDialog? {
private fun sweeperCloudTaskNormalEndDialog(): SweeperCloudDialog? {
return createSweeperTaskNormalEndDialog(context, object : SweeperCloudDialogClickListener {
override fun onConfirm() {
if (isBigTaskEnd) {
resetTaskInfoPanel()
}
ToastUtils.showLong("任务已结束")
resetTaskInfoPanel()
}
override fun onRefuseOrEnd() {
@@ -280,9 +293,8 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
}
override fun onCountDownStop() {
if (isBigTaskEnd) {
resetTaskInfoPanel()
}
ToastUtils.showLong("任务已结束")
resetTaskInfoPanel()
}
override fun onNext() {
@@ -305,8 +317,12 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
}
//大任务正常结束
if (subTaskStatus == SweeperBigTaskStatus.BigTaskStatus.FINISHED) {
val dialog = sweeperCloudTaskNormalEndDialog(true)
dialog?.show()
//数据重复导致连续弹窗
if (mDialog!=null&& mDialog!!.isShowing){
return
}
mDialog=sweeperCloudTaskNormalEndDialog()
mDialog?.show()
return
}
//大任务处于取消状态 异常状态pad端都显示无任务列表
@@ -316,6 +332,18 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
}
}
/**
* pad请求云端进入自动驾驶回调
*/
fun onSweeperCloudAutopilotBootable(taskId: String, subTaskId: String, isBootableResp: SweeperBootable.IsBootableResp) {
mLoadingDialog.hideLoading()
if (isBootableResp.code == SweeperCommon.Code.SUCCEED) {
ToastUtils.showLong("请求成功")
} else {
ToastUtils.showLong("请求失败")
}
}
/**
* 重置任务面板为无数据状态
*/
@@ -403,7 +431,11 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
if (mTaskInfo?.taskId != taskId) return
val subInfo = bySubTaskIdFindSubTaskInfo(subTaskId)
subInfo?.let {
val dialog = createConfirmStartSubTaskDialog(context, object : SweeperCloudDialogClickListener {
//数据重复导致连续弹窗
if (mDialog!=null&& mDialog!!.isShowing){
return
}
mDialog = createConfirmStartSubTaskDialog(context, object : SweeperCloudDialogClickListener {
override fun onConfirm() {
ToastUtils.showLong("确认")
mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.MANUAL_CONFIRM)
@@ -429,7 +461,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
}
}, it)
dialog?.show()
mDialog?.show()
}
}
@@ -439,7 +471,11 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
private fun receivedTaskInfoDialog() {
mTaskInfo?.let {
mPresenter?.sendSweeperStartTaskResp(it.taskId, SweeperTask.StartTaskCode.RECEIVED)
val dialog = createReceivedTaskInfoDialog(context, object : SweeperCloudDialogClickListener {
//数据重复导致连续弹窗
if (mDialog!=null&& mDialog!!.isShowing){
return
}
mDialog = createReceivedTaskInfoDialog(context, object : SweeperCloudDialogClickListener {
override fun onConfirm() {
ToastUtils.showLong("确认")
mPresenter?.sendSweeperStartTaskResp(it.taskId, SweeperTask.StartTaskCode.MANUAL_CONFIRM)
@@ -468,7 +504,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
}
}, it)
dialog?.show()
mDialog?.show()
}
}

View File

@@ -456,9 +456,9 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
public void getCurrentTask() {
SweeperTask.GetTaskReq.Builder builder = SweeperTask.GetTaskReq.newBuilder();
builder.setSn(getDriverSn());
String reqNo = String.valueOf(System.currentTimeMillis());
String reqNo = SweeperCloudTaskUtils.getRequestId();
SweeperTask.GetTaskReq getTaskReq = builder.build();
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "getCurrentTask:" + printMessage(getTaskReq) + " reqNo:" + reqNo);
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "getCurrentTask:" + printMessage(getTaskReq) + " reqNo:" + reqNo +" messageType:"+ SweeperCloudTask.MessageType.PadSendGetTaskReq.getNumber());
getAutoPilotControlManager().sendSweeperGetTaskReq(reqNo, getTaskReq);
// TODO: 2023/5/5 模拟云控获取任务
UiThreadHandler.postDelayed(() -> {
@@ -478,7 +478,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
SweeperTask.StartTaskResp startTaskResp = builder.build();
String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTask.getNumber());
getAutoPilotControlManager().sendSweeperStartTaskResp(reqNo, startTaskResp);
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperStartTaskResp:" + printMessage(startTaskResp) + " reqNo:" + reqNo);
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperStartTaskResp:" + printMessage(startTaskResp) + " reqNo:" + reqNo+" messageType:"+ SweeperCloudTask.MessageType.CloudPushTask.getNumber());
}
/**
@@ -492,7 +492,7 @@ 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, "sendSweeperTaskConfirmResp" + printMessage(taskConfirmResp) + " reqNo:" + reqNo);
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperTaskConfirmResp" + printMessage(taskConfirmResp) + " reqNo:" + reqNo+" messageType:"+ SweeperCloudTask.MessageType.CloudPushTaskConfirm.getNumber());
getAutoPilotControlManager().sendSweeperTaskConfirmResp(reqNo, taskConfirmResp);
}
@@ -509,7 +509,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, "sendSweeperStopTaskResp" + printMessage(stopTaskResp) + " reqNo:" + reqNo);
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperStopTaskResp" + printMessage(stopTaskResp) + " reqNo:" + reqNo+" messageType:"+ SweeperCloudTask.MessageType.CloudPushTaskStop.getNumber());
getAutoPilotControlManager().sendSweeperStopTaskResp(reqNo, stopTaskResp);
}
@@ -527,9 +527,11 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
builder.setSubTaskId(subTaskId);
builder.setLineId(lineId);
SweeperBootable.IsBootable isBootable = builder.build();
String reqNo = String.valueOf(System.currentTimeMillis());
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperAutopilotBootable" + printMessage(isBootable) + " reqNo:" + reqNo);
String reqNo = SweeperCloudTaskUtils.getRequestId();
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperAutopilotBootable" + printMessage(isBootable) + " reqNo:" + reqNo+" messageType:"+ SweeperCloudTask.MessageType.PadSendBootable.getNumber());
getAutoPilotControlManager().sendSweeperAutopilotBootable(reqNo, isBootable);
// TODO: 2023/5/16
SweeperCloudTaskUtils.mockSendCloudBootable();
}
public CallerAutoPilotControlManager getAutoPilotControlManager() {

View File

@@ -15,6 +15,7 @@ import com.mogo.och.sweepercloud.database.bean.WeltDataBean;
import com.mogo.och.sweepercloud.fragment.SweeperFragment;
import com.mogo.och.sweepercloud.model.SweeperTaskModel;
import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask;
import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable;
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.big.SweeperBigTaskStatus;
@@ -190,8 +191,8 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
}
@Override
public void onSweeperCloudBootable(@NonNull String taskId, @NonNull String subTaskId, SweeperCommon.Code code) {
public void onSweeperCloudBootable(@NonNull String taskId, @NonNull String subTaskId, SweeperBootable.IsBootableResp isBootableResp) {
ThreadUtils.runOnUiThread(() -> mView.onSweeperCloudAutopilotBootable(taskId, subTaskId,isBootableResp));
}
@Override

View File

@@ -35,7 +35,7 @@ class SweeperCloudLoadingDialog : BaseFloatDialog, LifecycleObserver {
private fun startRotation() {
objectAnimator = ObjectAnimator.ofFloat(mLoadingView, "rotation", 0f, 720f)
objectAnimator?.let {
it.duration = 1800
it.duration = 3000
it.repeatCount = -1
it.interpolator = LinearInterpolator()
it.start()

View File

@@ -1,6 +1,7 @@
package com.mogo.och.sweepercloud.util
import android.content.Context
import com.elegant.utils.UiThreadHandler
import com.google.protobuf.MessageOrBuilder
import com.google.protobuf.TextFormat
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
@@ -11,6 +12,7 @@ import com.mogo.och.sweepercloud.callback.SweeperCloudDialogClickListener
import com.mogo.och.sweepercloud.model.SweeperTaskModel
import com.mogo.och.sweepercloud.ui.dialog.SweeperCloudDialog
import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask.MessageType
import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable
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.big.SweeperBigTaskStatus
@@ -18,6 +20,7 @@ import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus.BigTaskStat
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
import java.util.*
object SweeperCloudTaskUtils {
const val TAG = "SweeperCloudTaskUtils"
@@ -39,7 +42,7 @@ object SweeperCloudTaskUtils {
subBuilder0.subTaskId = "1"
subBuilder0.subTaskName = "海水浴场-佛兴禅寺(前岛贴右)"
subBuilder0.taskModel = TaskModel.AUTO
subBuilder0.taskStatus = SweeperCommon.TaskStatus.FINISHED
subBuilder0.taskStatus = SweeperCommon.TaskStatus.TO_START
val startLocation0 = Location.newBuilder()
startLocation0.siteName = "自动驾驶子任务起点0"
startLocation0.wgsLongitude = 121.6421189511
@@ -99,13 +102,34 @@ object SweeperCloudTaskUtils {
endLocation2.latitude = 37.48032689641474
subBuilder2.endLocation = endLocation2.build()
builder.addSubList(subBuilder2.build())
//第四个子任务
val subBuilder3 = SubTaskInfo.newBuilder()
subBuilder3.subTaskId = "4"
subBuilder3.subTaskName = "海水浴场-佛兴禅寺(前岛贴左第四个任务)"
subBuilder3.taskModel = TaskModel.MANUAL
subBuilder3.taskStatus = SweeperCommon.TaskStatus.TO_START
val startLocation3 = Location.newBuilder()
startLocation3.siteName = "人工驾驶子任务起点3"
startLocation3.wgsLongitude = 121.31344761929978
startLocation3.wgsLatitude = 37.53205755535642
startLocation3.longitude = 121.3185679517558
startLocation3.latitude = 37.5329694887952
subBuilder3.startLocation = startLocation3.build()
val endLocation3 = Location.newBuilder()
endLocation3.siteName = "人工驾驶子任务终点3"
endLocation3.wgsLongitude = 121.4551205070834
endLocation3.wgsLatitude = 37.47936696980237
endLocation3.longitude = 121.46030960742117
endLocation3.latitude = 37.48032689641474
subBuilder3.endLocation = endLocation3.build()
builder.addSubList(subBuilder3.build())
SweeperTaskModel.getInstance().onSweeperFutianCloudTask(
messageType,
"${System.currentTimeMillis()}",
System.currentTimeMillis(),
builder.build()
)
CallerLogger.d(SceneConstant.M_SWEEPER + TAG, "messageType:" + messageType + "taskInfo:" + printMessage(builder.build()))
CallerLogger.d(SceneConstant.M_SWEEPER + TAG, "messageType:" + messageType.number + "taskInfo:" + printMessage(builder.build()))
}
/**
@@ -131,7 +155,7 @@ object SweeperCloudTaskUtils {
val builder = SweeperTaskStatus.TaskStatusPush.newBuilder()
builder.sn = getDriverSn()
builder.taskId = "10"
builder.subTaskId = "3"
builder.subTaskId = "1"
builder.taskStatus = SweeperCommon.TaskStatus.RUNNING
SweeperTaskModel.getInstance().onSweeperFutianCloudTaskStatus(
MessageType.CloudPushTaskStatus, "${System.currentTimeMillis()}",
@@ -170,6 +194,24 @@ object SweeperCloudTaskUtils {
)
}
/**
* 模拟云端发送是否可以启动自驾
*/
@JvmStatic
fun mockSendCloudBootable() {
val builder = SweeperBootable.IsBootableResp.newBuilder()
builder.sn = getDriverSn()
builder.taskId = "10"
builder.subTaskId = "1"
builder.code = SweeperCommon.Code.SUCCEED
UiThreadHandler.getsUiHandler().postDelayed({
SweeperTaskModel.getInstance().onSweeperFutianCloudBootable(
MessageType.PadSendBootable, "${System.currentTimeMillis()}",
System.currentTimeMillis(), builder.build()
)
}, 10000)
}
private fun getDriverSn(): String? {
return MoGoAiCloudClientConfig.getInstance().sn
}
@@ -277,6 +319,10 @@ object SweeperCloudTaskUtils {
@JvmStatic
fun printMessage(message: MessageOrBuilder): String {
return TextFormat.printer().escapingNonAscii(false).printToString(message)
return "\n"+TextFormat.printer().escapingNonAscii(false).printToString(message)
}
@JvmStatic
fun getRequestId():String{
return UUID.randomUUID().toString()
}
}

View File

@@ -4,6 +4,7 @@ import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.sweepercloud.R
@@ -34,6 +35,10 @@ class SweeperCurrentTaskInfoView : ConstraintLayout {
setSubTaskState(false)
}
fun getAutoBtn(): TextView {
return tvStartAuto
}
/**
* 设置当前任务数据
*/
@@ -46,7 +51,12 @@ class SweeperCurrentTaskInfoView : ConstraintLayout {
tvTaskName.text = taskName
val calendarStart = DateTimeUtil.formatLongToCalendar(taskStartTime)
val calendarEnd = DateTimeUtil.formatLongToCalendar(taskEndTime)
tvTaskTime.text = "${DateTimeUtil.formatCalendarToString(calendarStart, DateTimeUtil.HH_mm)}-${DateTimeUtil.formatCalendarToString(calendarEnd, DateTimeUtil.HH_mm)}"
tvTaskTime.text = "${DateTimeUtil.formatCalendarToString(calendarStart, DateTimeUtil.HH_mm)}-${
DateTimeUtil.formatCalendarToString(
calendarEnd,
DateTimeUtil.HH_mm
)
}"
}
listTask?.let {
//特殊处理当前暂无执行中任务的情况

View File

@@ -212,9 +212,11 @@ class WeltSmallMapView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener {
* 设置当前任务的终点
*/
fun setCurrentTaskCoordinatesLatLng(coordinatesLatLng: LatLng) {
endStationMarker?.remove()
endStationMarker = mAMap?.addMarker(MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.sweeper_small_end_marker_icon)))
endStationMarker?.position = coordinatesLatLng
ThreadUtils.runOnUiThread {
endStationMarker?.remove()
endStationMarker = mAMap?.addMarker(MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.sweeper_small_end_marker_icon)))
endStationMarker?.position = coordinatesLatLng
}
}
/**

View File

@@ -94,29 +94,18 @@
<com.mogo.och.common.module.wigets.OCHRoundConstraintLayout
android:layout_width="@dimen/dp_711"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_27"
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.MogoVideoView
android:id="@+id/sweeper_video_view"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_401"
android:src="#999999"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
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"
>
<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_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintEnd_toEndOf="parent"/>
</com.mogo.och.common.module.wigets.OCHRoundConstraintLayout>
<ImageView