From 612a875a03689ab13ba846e9fc764cb8afb1fb82 Mon Sep 17 00:00:00 2001 From: bxb Date: Wed, 1 Mar 2023 09:27:07 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=B8=85=E6=89=AB=E8=BD=A6]=E7=94=B1=E4=BA=8E?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E8=87=AA=E9=A9=BE=E5=92=8C=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E4=BD=BF=E7=94=A8=E5=90=8C=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E6=8C=89=E9=92=AE=EF=BC=8C=E4=B8=8E=E5=AE=9E=E9=99=85=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E5=86=B2=E7=AA=81=EF=BC=8C=E6=8A=8A=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E8=87=AA=E9=A9=BE=E5=92=8C=E5=BC=80=E5=A7=8B=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=8B=86=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo/och/sweeper/event/WeltDataEvent.kt | 3 +- .../fragment/BaseSweeperTabFragment.java | 24 +--- .../och/sweeper/fragment/SweeperFragment.kt | 36 +++--- .../fragment/WeltMapOverViewFragment.kt | 8 +- .../och/sweeper/model/SweeperTaskModel.java | 5 +- .../sweeper/presenter/SweeperPresenter.java | 95 +++++++--------- .../view/SweeperCurrentTaskInfoView.kt | 105 ++++++++++++------ .../sweeper/view/SweeperTrafficDataView.kt | 21 ++-- .../mogo/och/sweeper/view/WeltMapOverView.kt | 9 +- .../mogo/och/sweeper/view/WeltSmallMapView.kt | 3 +- .../res/drawable/sweeper_start_auto_btn.xml | 5 + .../sweeper_start_auto_not_selected.xml | 6 + .../drawable/sweeper_start_auto_selected.xml | 10 ++ .../drawable/sweeper_task_not_selected.xml | 1 - .../res/drawable/sweeper_task_selected.xml | 3 +- .../main/res/layout/fragment_och_sweeper.xml | 4 +- .../res/layout/sweeper_current_task_info.xml | 31 +++++- 17 files changed, 218 insertions(+), 151 deletions(-) create mode 100644 OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_start_auto_btn.xml create mode 100644 OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_start_auto_not_selected.xml create mode 100644 OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_start_auto_selected.xml diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/event/WeltDataEvent.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/event/WeltDataEvent.kt index f9e140e86e..6a85e37631 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/event/WeltDataEvent.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/event/WeltDataEvent.kt @@ -6,5 +6,6 @@ import com.mogo.och.sweeper.database.bean.WeltDataBean data class WeltDataEvent( var type:Int, //1.添加起点和终点 2.实时添加贴边数据 3.清除数据 var weltDataBeanList: MutableList?, - var markers:MutableList? + var markers:MutableList?, + var distance:Double//贴边数据 ) \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java index 7ea9fa62aa..d5a4f1e833 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java @@ -425,15 +425,15 @@ public abstract class BaseSweeperTabFragment weltDataBeans,Boolean isWeltData) { + public void setWeltDataToMap(ArrayList weltDataBeans,Boolean isWeltData,double distance) { if (mMapWeltView != null) { - runOnUIThread(() -> { - mMapWeltView.setWeltData(weltDataBeans,isWeltData); + UiThreadHandler.post(()->{ + mMapWeltView.setWeltData(weltDataBeans,isWeltData,distance); mMapWeltView.drawablePolyline(); }); } this.weltDataBeanList = weltDataBeans; - EventBus.getDefault().postSticky(new WeltDataEvent(2, weltDataBeans, null)); + EventBus.getDefault().postSticky(new WeltDataEvent(2, weltDataBeans, null,distance)); } /** @@ -447,7 +447,7 @@ public abstract class BaseSweeperTabFragment { //子任务开始 - if (mSubTaskType.code == SubTaskTypeEnum.AUTOPILOT_SUBTYPE.code) {//自动驾驶子任务 - readyTaskBtn(true, true) - } else { - readyTaskBtn(false, false) - } + setTaskBtn(true) setShowTaskListPanelView(false) sweeper_cl_work_mode.visibility = View.VISIBLE setShowCurrentTaskPanelView(true) sweeper_current_task_view.setCurrentData(mCurrentSubPosition) + sweeper_current_task_view.setTaskStatus(2) } } @@ -444,14 +446,20 @@ class SweeperFragment : BaseSweeperTabFragment?,isWeltData:Boolean) { - weltMapOverView.setWeltData(weltDatas,isWeltData) + private fun setWeltData(weltDatas: MutableList?,isWeltData:Boolean,distance:Double) { + weltMapOverView.setWeltData(weltDatas,isWeltData,distance) } /** diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/model/SweeperTaskModel.java b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/model/SweeperTaskModel.java index 369e7dfca3..813be701e0 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/model/SweeperTaskModel.java +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/model/SweeperTaskModel.java @@ -289,7 +289,6 @@ public class SweeperTaskModel { CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "行程日志-重启自动驾驶===" + mIsSubTaskWorking); //只去启动自动驾驶 startAutopilot(firstStartAutopilot >= 1); - mIsSubTaskWorking=true; } /** @@ -377,7 +376,9 @@ public class SweeperTaskModel { SweeperAnalyticsManager.getInstance().triggerStartAutopilotEvent(isRestart, send, mCurrentSubTaskDetail.getStartSiteName(), mCurrentSubTaskDetail.getEndSiteName(), mCurrentSubTaskDetail.getLineId()); } - + public boolean isRestartAutopilot() { + return firstStartAutopilot > 1; + } public void triggerUnableStartAPReasonEvent() { if (mCurrentSubTaskDetail == null) { return; diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java index 7a056cfb6e..ea302d69eb 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java @@ -1,6 +1,5 @@ package com.mogo.och.sweeper.presenter; -import android.os.Looper; import com.amap.api.maps.model.LatLng; import com.mogo.commons.AbsMogoApplication; @@ -14,7 +13,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; import com.mogo.eagle.core.function.call.autopilot.CallerSweeperFutianCleanSystemListenerManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.eagle.core.utilcode.util.ThreadUtils; import com.mogo.och.common.module.manager.OCHAdasAbilityManager; import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; import com.mogo.och.sweeper.bean.SweeperMainTaskBean; @@ -69,6 +68,8 @@ public class SweeperPresenter extends Presenter private static final long WELT_DATA_INTERVAL_MILLIS = 2000L; // 贴边数据当前时间戳 private long mWeltDataCurrentTimeMillis; + //当前自动驾驶状态 + private int mCurrentAutopilotStatus; public SweeperPresenter(SweeperFragment view) { super(view); @@ -114,11 +115,11 @@ public class SweeperPresenter extends Presenter @Override public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autopilotStatusInfo) { if (autopilotStatusInfo == null) return; - CallerLogger.INSTANCE.d(M_SWEEPER + TAG,"onAutopilotStatusResponse state:"+autopilotStatusInfo.getState()); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotStatusResponse state:" + autopilotStatusInfo.getState()); SweeperTaskModel.getInstance().setAutopilotState(autopilotStatusInfo.getState()); + ThreadUtils.runOnUiThread(() -> mView.startAutoBtn(autopilotStatusInfo.getState())); switch (autopilotStatusInfo.getState()) { case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE://不可自动驾驶 - runOnUIThread(() -> mView.readyTaskBtn(false, false)); break; case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE://人工驾驶 if (SweeperTaskModel.getInstance().getSubWorking()) { @@ -131,17 +132,16 @@ public class SweeperPresenter extends Presenter SweeperTaskModel.getInstance().closeBeautificationMode(); } } - runOnUIThread(() -> mView.readyTaskBtn(true, false)); break; case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING://自动驾驶中 + SweeperTaskModel.getInstance().triggerStartServiceEvent( + SweeperTaskModel.getInstance().isRestartAutopilot(), true); if (SweeperTaskModel.getInstance().getSubWorking()) { if (FunctionBuildConfig.isDemoMode) {//美化模式开启时 SweeperTaskModel.getInstance().startBeautificationMode(); } - runOnUIThread(() -> mView.readyTaskBtn( true, true)); - } else { - runOnUIThread(() -> mView.readyTaskBtn(true, false)); } + break; case IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING://平行驾驶 if (SweeperTaskModel.getInstance().getSubWorking()) { if (FunctionBuildConfig.isDemoMode) {//美化模式开启时 @@ -154,7 +154,6 @@ public class SweeperPresenter extends Presenter SweeperTaskModel.getInstance().closeBeautificationMode(); } } - runOnUIThread(() -> mView.readyTaskBtn(true, false)); break; default: break; @@ -163,14 +162,14 @@ public class SweeperPresenter extends Presenter @Override public void onVRModeChanged(boolean isVRMode) { - runOnUIThread(() -> mView.onVRModeChanged(isVRMode)); + ThreadUtils.runOnUiThread(() -> mView.onVRModeChanged(isVRMode)); } @Override public void onCarLocationChanged(MogoLocation location) { if (null != location) { - runOnUIThread(() -> mView.updateSpeedView((float) location.getGnssSpeed())); - runOnUIThread(() -> mView.setCurrentLocation(location)); + ThreadUtils.runOnUiThread(() -> mView.updateSpeedView((float) location.getGnssSpeed())); + ThreadUtils.runOnUiThread(() -> mView.setCurrentLocation(location)); } } @@ -178,25 +177,16 @@ public class SweeperPresenter extends Presenter public void startOpenAutopilot() { } - + public void startAutopilot(){ + SweeperTaskModel.getInstance().startAutopilot(); + } /** * 设置当前子任务信息 */ - public void setSubtask(boolean isFirstSubtask,boolean isLastSubtask,int subTaskId) { + public void setSubtask(boolean isFirstSubtask, boolean isLastSubtask, int subTaskId) { this.mSubTaskId = subTaskId; - SweeperTaskModel.getInstance().setSubtask(isFirstSubtask,isLastSubtask,subTaskId); + SweeperTaskModel.getInstance().setSubtask(isFirstSubtask, isLastSubtask, subTaskId); } - private void runOnUIThread(Runnable executor) { - if (executor == null) { - return; - } - if (Looper.myLooper() != Looper.getMainLooper()) { - UiThreadHandler.post(executor); - } else { - executor.run(); - } - } - /** * 测试使用 * @@ -236,12 +226,14 @@ public class SweeperPresenter extends Presenter public void onStartAdasFailure() { } - public void onArriveTaskEnd(@Nullable MessagePad.ArrivalNotification arrivalNotification){ + + public void onArriveTaskEnd(@Nullable MessagePad.ArrivalNotification arrivalNotification) { SweeperTaskModel.getInstance().onArriveTaskEnd(arrivalNotification); } + @Override public void onSweeperFutianCleanSystemState(@NonNull ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState) { - if (cleanSystemState==null){ + if (cleanSystemState == null) { return; } long current = System.currentTimeMillis(); @@ -294,8 +286,8 @@ public class SweeperPresenter extends Presenter .append("强力:") .append(clean_intensity_strong); - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianCleanSystemState:"+stringBuilder); - mView.onSweeperFutianCleanSystemState(cleanSystemState); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianCleanSystemState:" + stringBuilder); + mView.onSweeperFutianCleanSystemState(cleanSystemState); } @Override @@ -305,7 +297,7 @@ public class SweeperPresenter extends Presenter return; } mWeltDataCurrentTimeMillis = current; - if (roboSweeperTaskIndex==null){ + if (roboSweeperTaskIndex == null) { return; } StringBuilder stringBuilder = new StringBuilder(); @@ -321,11 +313,12 @@ public class SweeperPresenter extends Presenter .append(roboSweeperTaskIndex.getLocLon()) .append("纬度:") .append(roboSweeperTaskIndex.getLocLat()); - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianTaskIndexData:"+stringBuilder); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianTaskIndexData:" + stringBuilder); //保存贴边数据到数据库中 - WeltDataBean weltDataBean=new WeltDataBean(); + WeltDataBean weltDataBean = new WeltDataBean(); //把wgs坐标系坐标转换成gcj坐标 - LatLng latLng=CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(AbsMogoApplication.getApp(),roboSweeperTaskIndex.getLocLon(),roboSweeperTaskIndex.getLocLat()); + LatLng latLng = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(AbsMogoApplication.getApp(), roboSweeperTaskIndex.getLocLon(), + roboSweeperTaskIndex.getLocLat()); weltDataBean.setLocLon(latLng.longitude); weltDataBean.setLocLat(latLng.latitude); weltDataBean.setWeltDistance(roboSweeperTaskIndex.getDistToRefEdgePoint()); @@ -334,7 +327,7 @@ public class SweeperPresenter extends Presenter weltDataBean.setCleanIntensity(roboSweeperTaskIndex.getCleanIntensity()); weltDataBean.setSubTaskId(mSubTaskId); MyDataBase.getInstance().getWeltDataDao().insert(weltDataBean); - mView.setWeltDataToMap((ArrayList) MyDataBase.getInstance().getWeltDataDao().loadAllWeltDataInfo(),true); + mView.setWeltDataToMap((ArrayList) MyDataBase.getInstance().getWeltDataDao().loadAllWeltDataInfo(), true,roboSweeperTaskIndex.getDistToRefEdgePoint()); } /** @@ -343,12 +336,14 @@ public class SweeperPresenter extends Presenter public void getCurrentTask() { SweeperTaskModel.getInstance().getCurrentTask(); } + /** * 获取主任务列表 */ public void getMainTaskList() { SweeperTaskModel.getInstance().getMainTaskList(); } + /** * 获取子任务列表 */ @@ -359,8 +354,8 @@ public class SweeperPresenter extends Presenter /** * 获取子任务详情包括轨迹文件信息 */ - public void getSubTaskDetail(boolean isFirst,boolean isEnd,int subTaskId, SubTaskTypeEnum subTaskType,boolean isStartSubtask) { - SweeperTaskModel.getInstance().getSubTaskDetail(isFirst,isEnd,subTaskId, subTaskType,isStartSubtask); + public void getSubTaskDetail(boolean isFirst, boolean isEnd, int subTaskId, SubTaskTypeEnum subTaskType, boolean isStartSubtask) { + SweeperTaskModel.getInstance().getSubTaskDetail(isFirst, isEnd, subTaskId, subTaskType, isStartSubtask); } /** * 子任务开始上报 @@ -368,20 +363,10 @@ public class SweeperPresenter extends Presenter /** * 开始任务 */ - public void startTask(boolean isFirst,boolean isEnd,int subTaskId, SubTaskTypeEnum subTaskType,int subTaskStatus) { - if (SweeperTaskModel.getInstance().getSubWorking()) {//如果任务正在执行中,被人工接管后掉出自驾,则只重启自动驾驶 - if (subTaskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE) { - SweeperTaskModel.getInstance().startAutopilot(); - } - } else { - if (subTaskStatus==1){//子任务未执行,则开始执行 - SweeperTaskModel.getInstance().subTaskStart(isFirst,isEnd,subTaskId, subTaskType); - }else{ - if (subTaskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE) { - SweeperTaskModel.getInstance().startAutopilot(); - } - } - } + public void startTask(boolean isFirst, boolean isEnd, int subTaskId, SubTaskTypeEnum subTaskType, int subTaskStatus) { + if (subTaskStatus==1){ + SweeperTaskModel.getInstance().subTaskStart(isFirst, isEnd, subTaskId, subTaskType); + } // AutopilotControlParameters parameters = new AutopilotControlParameters(); // parameters.isSpeakVoice = true; // parameters.routeID = 164; @@ -417,15 +402,15 @@ public class SweeperPresenter extends Presenter /** * 子任务结束上报 */ - public void subTaskEnd(boolean isFirst,boolean isEnd,int subTaskId) { - SweeperTaskModel.getInstance().subTaskEnd(isFirst,isEnd,subTaskId); + public void subTaskEnd(boolean isFirst, boolean isEnd, int subTaskId) { + SweeperTaskModel.getInstance().subTaskEnd(isFirst, isEnd, subTaskId); } /** * 子任务跳过上报 */ - public void subTaskSkip(boolean isFirst,boolean isEnd,int subTaskId) { - SweeperTaskModel.getInstance().subTaskSkip(isFirst,isEnd,subTaskId); + public void subTaskSkip(boolean isFirst, boolean isEnd, int subTaskId) { + SweeperTaskModel.getInstance().subTaskSkip(isFirst, isEnd, subTaskId); } /** diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperCurrentTaskInfoView.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperCurrentTaskInfoView.kt index b847f00758..e20a1fcab7 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperCurrentTaskInfoView.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperCurrentTaskInfoView.kt @@ -5,8 +5,8 @@ import android.util.AttributeSet import android.view.LayoutInflater import android.view.View import androidx.constraintlayout.widget.ConstraintLayout -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener +import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.och.common.module.utils.DateTimeUtil import com.mogo.och.sweeper.R import com.mogo.och.sweeper.bean.SubInfo @@ -20,14 +20,15 @@ import kotlinx.android.synthetic.main.sweeper_current_task_info.view.* * 清扫车当前任务信息展示 */ class SweeperCurrentTaskInfoView : ConstraintLayout { - private val TAG:String="SweeperCurrentTaskInfoView" + private val TAG: String = "SweeperCurrentTaskInfoView" + //当前任务操作菜单 private var mTaskMenuPopWindow: MenuPopWindow? = null private var presenter: SweeperPresenter? = null private var mCurrentPosition = 0 private var listTask: List? = null - private var isStartTask: Boolean = false private var mSubTaskType: SubTaskTypeEnum = SubTaskTypeEnum.AUTOPILOT_SUBTYPE + private var mSubTaskStatus: Int = 1 constructor(context: Context) : super(context) {} constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) { @@ -39,6 +40,22 @@ class SweeperCurrentTaskInfoView : ConstraintLayout { private fun initView(context: Context) { LayoutInflater.from(context).inflate(R.layout.sweeper_current_task_info, this) + setEnableClickBtn(false) + readyTaskBtn.setOnClickListener { + //开始执行任务 + startSubTask() + } + tvStartAuto.setOnClickListener { + if (mSubTaskStatus==1){ + ToastUtils.showLong("任务未开始无轨迹,无法启动自驾") + return@setOnClickListener + } + if (mSubTaskType==SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE){ + ToastUtils.showLong("人工子任务无轨迹,无法启动自驾") + return@setOnClickListener + } + presenter?.startAutopilot() + } } /** @@ -60,6 +77,10 @@ class SweeperCurrentTaskInfoView : ConstraintLayout { val calendar = DateTimeUtil.formatLongToCalendar(taskStartTime) tvTaskTime.text = DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.TAXI_HH_mm) } + listTask?.let { + mSubTaskStatus=it[currentPosition].taskStatus + setEnableClickBtn(mSubTaskStatus==2) + } setCurrentData(currentPosition) //任务操作菜单打开关闭处理 ivMore.setOnClickListener { @@ -73,44 +94,44 @@ class SweeperCurrentTaskInfoView : ConstraintLayout { mTaskMenuPopWindow?.dismiss() } } - readyTaskBtn.setOnClickListener { - if (!isStartTask) { - //开始执行任务 - startSubTask() - } else { - isStartTask = false - } - } } /** * 设置准备就绪按钮时都可以点击 */ - fun setEnableClickBtn(isClick: Boolean, isPause: Boolean) { - CallerLogger.d(SceneConstant.M_SWEEPER + TAG, "setEnableClickBtn isClick:${isClick} isPause:${isPause}") - if (mSubTaskType.code == SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE.code) {//人工驾驶子任务 + fun setEnableClickBtn(isWorking: Boolean) { + readyTaskBtn.isSelected = !isWorking + readyTaskBtn.isClickable=!isWorking + if (isWorking) { + tvTaskState.text = "正在作业" + tvTaskState.setBackgroundResource(R.drawable.bg_shape_task_state_working) + } else { tvTaskState.text = "暂未准备" tvTaskState.setBackgroundResource(R.drawable.bg_shape_task_state_not_ready) - readyTaskBtn.text = "准备出发" - readyTaskBtn.isClickable = false - readyTaskBtn.isSelected = false - isStartTask = false - } else { - if (isPause) { - readyTaskBtn.text = "暂停任务" - } else { - readyTaskBtn.text = "准备出发" + } + } + + /** + * 设置准备就绪按钮时都可以点击 + */ + fun setStartAutoBtn(autopilotState: Int) { + when (autopilotState) { + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE -> { + tvStartAuto.isSelected = false + tvStartAuto.isClickable = false } - readyTaskBtn.isClickable = isClick - readyTaskBtn.isSelected = isClick - isStartTask = isPause - if (isPause) { - tvTaskState.text = "正在作业" - tvTaskState.setBackgroundResource(R.drawable.bg_shape_task_state_working) - } else { - tvTaskState.text = "暂未准备" - tvTaskState.setBackgroundResource(R.drawable.bg_shape_task_state_not_ready) + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE -> { + tvStartAuto.isSelected = true + tvStartAuto.isClickable = true + } + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING -> { + tvStartAuto.isSelected = true + tvStartAuto.isClickable = true + } + IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING -> { + tvStartAuto.isSelected = false + tvStartAuto.isClickable = false } } } @@ -125,22 +146,32 @@ class SweeperCurrentTaskInfoView : ConstraintLayout { isLastSubTask(), it[mCurrentPosition].taskId, if (it[mCurrentPosition].taskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE.code) SubTaskTypeEnum.AUTOPILOT_SUBTYPE else SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE, - it[mCurrentPosition].taskStatus + mSubTaskStatus ) } } + /** * 是否第一个子任务 */ - private fun isFirstSubTask():Boolean{ - return mCurrentPosition==0 + private fun isFirstSubTask(): Boolean { + return mCurrentPosition == 0 } + /** * 是否第一个子任务 */ - private fun isLastSubTask():Boolean{ + private fun isLastSubTask(): Boolean { return mCurrentPosition == (listTask?.size?.minus(1)) } + + /** + * 设置任务状态 + */ + fun setTaskStatus(status: Int) { + this.mSubTaskStatus = status + } + /** * 填充数据 */ diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperTrafficDataView.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperTrafficDataView.kt index d88dd74abb..52b77b998c 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperTrafficDataView.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperTrafficDataView.kt @@ -11,6 +11,7 @@ import chassis.Chassis.GearPosition import chassis.Chassis.LightSwitch import chassis.ChassisStatesOuterClass.BMSSystemStates import chassis.ChassisStatesOuterClass.SweeperFuTianTaskSystemStates +import com.elegant.utils.UiThreadHandler import com.mogo.eagle.core.function.api.autopilot.IMoGoBatteryManagementSystemListener import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisGearStateListener import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLamplightListener @@ -21,7 +22,6 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.och.sweeper.R -import com.mogo.och.sweeper.presenter.SweeperPresenter import planning.RoboSweeperTaskIndexOuterClass /** @@ -105,13 +105,16 @@ class SweeperTrafficDataView : ConstraintLayout, } mCurrentTimeWaterMillis = current d(SceneConstant.M_SWEEPER + TAG, "水位:${cleanSystemState.hasSecuCleanWaterTankLow()}") - if (cleanSystemState.hasSecuCleanWaterTankLow()) { //清水箱水位低不能清洗作业报警信号 - ivBgWaterWarning?.visibility = VISIBLE - ivWater?.isSelected = true - } else { - ivBgWaterWarning?.visibility = GONE - ivWater?.isSelected = false + UiThreadHandler.post { + if (cleanSystemState.hasSecuCleanWaterTankLow()) { //清水箱水位低不能清洗作业报警信号 + ivBgWaterWarning?.visibility = VISIBLE + ivWater?.isSelected = true + } else { + ivBgWaterWarning?.visibility = GONE + ivWater?.isSelected = false + } } + } @SuppressLint("SetTextI18n") @@ -122,7 +125,9 @@ class SweeperTrafficDataView : ConstraintLayout, } mCurrentTimeBatteryMillis = current d(SceneConstant.M_SWEEPER + TAG, "电量:${states.bmsSoc}") - tvBattery?.text = "${states.bmsSoc*100}%" + UiThreadHandler.post{ + tvBattery?.text = "${states.bmsSoc}%" + } } /** * 车辆转向灯 diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/WeltMapOverView.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/WeltMapOverView.kt index 2f2aff1ffa..f83d4d4b5a 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/WeltMapOverView.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/WeltMapOverView.kt @@ -173,14 +173,15 @@ class WeltMapOverView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener { /** * 设置贴边数据 */ - fun setWeltData(weltData: MutableList?,isWeltData: Boolean) { + fun setWeltData(weltData: MutableList?, isWeltData: Boolean, distance: Double) { if (weltData != null) { this.mWeltData.addAll(weltData) for (i in mWeltData.indices) { mCoordinatesLatLng.add(LatLng(mWeltData[i].locLat, mWeltData[i].locLon)) } } - if (!mFirst&&isWeltData) { + setDistance(distance) + if (!mFirst && isWeltData) { mFirst = true showOrHiddenLegendData(true) } @@ -199,6 +200,10 @@ class WeltMapOverView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener { sweeperLegend6.setData(R.drawable.sweeper_legend6, "未经过") } + private fun setDistance(distance: Double) { + taskWeltDistanceTv.text = "贴边:${distance}cm" + } + fun onCreateView(savedInstanceState: Bundle?) { sweeperTextureMapView.onCreate(savedInstanceState) } diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/WeltSmallMapView.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/WeltSmallMapView.kt index ebf36e64f7..f2e437fd52 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/WeltSmallMapView.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/WeltSmallMapView.kt @@ -209,11 +209,12 @@ class WeltSmallMapView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener { /** * 设置贴边数据 */ - fun setWeltData(weltData: MutableList,isWeltData: Boolean) { + fun setWeltData(weltData: MutableList,isWeltData: Boolean,distance:Double) { this.mWeltData = weltData for (i in mWeltData.indices) { mCoordinatesLatLng.add(CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(context, mWeltData[i].locLon, mWeltData[i].locLat)) } + taskWeltDistanceTv.text="贴边:${distance}cm" if (!mFirst&&isWeltData) { showOrHiddenWelt(true) mFirst = true diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_start_auto_btn.xml b/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_start_auto_btn.xml new file mode 100644 index 0000000000..3bdae39ba5 --- /dev/null +++ b/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_start_auto_btn.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_start_auto_not_selected.xml b/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_start_auto_not_selected.xml new file mode 100644 index 0000000000..10ebc26c66 --- /dev/null +++ b/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_start_auto_not_selected.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_start_auto_selected.xml b/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_start_auto_selected.xml new file mode 100644 index 0000000000..405245c0b9 --- /dev/null +++ b/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_start_auto_selected.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_task_not_selected.xml b/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_task_not_selected.xml index e521225074..2ae1bc8e21 100644 --- a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_task_not_selected.xml +++ b/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_task_not_selected.xml @@ -2,6 +2,5 @@ \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_task_selected.xml b/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_task_selected.xml index 0a23238c63..1d0a08efbb 100644 --- a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_task_selected.xml +++ b/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_task_selected.xml @@ -3,8 +3,7 @@ - + diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/fragment_och_sweeper.xml b/OCH/mogo-och-sweeper/src/main/res/layout/fragment_och_sweeper.xml index 2ffd5d417f..9ed1558350 100644 --- a/OCH/mogo-och-sweeper/src/main/res/layout/fragment_och_sweeper.xml +++ b/OCH/mogo-och-sweeper/src/main/res/layout/fragment_och_sweeper.xml @@ -33,12 +33,12 @@ android:id="@+id/sweeper_current_task_list_view" android:layout_width="match_parent" android:layout_height="match_parent" - android:visibility="gone" android:background="@drawable/bg_shape_work_mode"> + android:layout_height="match_parent" + android:visibility="gone"> + + \ No newline at end of file