[清扫车]人工驾驶子任务和结束任务弹窗相关逻辑添加
This commit is contained in:
@@ -3,9 +3,10 @@ package com.mogo.och.sweeper.bean
|
||||
/**
|
||||
* 子任务信息
|
||||
*/
|
||||
data class SweeperSubTaskBean(var taskId:Int?,
|
||||
data class SweeperSubTaskBean(var taskId:Int=0,
|
||||
var taskName:String?,
|
||||
var taskStartTime:Long?,
|
||||
var sort:Int=1,
|
||||
var subList:MutableList<SubInfo>?)
|
||||
data class SubInfo(
|
||||
var taskId: Int = 0,
|
||||
@@ -13,6 +14,6 @@ data class SubInfo(
|
||||
var mileage: Int = 0,
|
||||
var taskStatus: Int,// 状态1未执行 2执行中 3结束 4跳过
|
||||
var taskType: Int,//1自动驾驶 2人工驾驶
|
||||
var timeSpent: Long = 0,
|
||||
var timeSpent: String,
|
||||
var sort: Int = 0,
|
||||
)
|
||||
@@ -2,6 +2,8 @@ package com.mogo.och.sweeper.callback
|
||||
|
||||
import com.mogo.och.sweeper.bean.SweeperMainTaskBean
|
||||
import com.mogo.och.sweeper.bean.SweeperSubTaskBean
|
||||
import com.mogo.och.sweeper.bean.SweeperSubTaskDetailBean
|
||||
import com.mogo.och.sweeper.constant.SubTaskTypeEnum
|
||||
import com.mogo.och.sweeper.constant.TaskStatusEnum
|
||||
|
||||
/**
|
||||
@@ -30,8 +32,8 @@ interface ISweeperTaskCallback {
|
||||
fun setMainTaskReset(isSuccess: Boolean)
|
||||
|
||||
/**
|
||||
* 空数据展示
|
||||
* @param type
|
||||
* 获取子任务详情包括轨迹信息
|
||||
*/
|
||||
fun emptyDataUI(type: Int)
|
||||
fun setSubTakDetail(subTaskDetailBean: SweeperSubTaskDetailBean,subTaskTypeEnum: SubTaskTypeEnum)
|
||||
|
||||
}
|
||||
@@ -7,10 +7,6 @@ import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.constraintlayout.widget.Group;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
|
||||
import com.mogo.commons.AbsMogoApplication;
|
||||
import com.mogo.commons.mvp.IView;
|
||||
import com.mogo.commons.mvp.MvpFragment;
|
||||
@@ -27,11 +23,16 @@ import com.mogo.map.listener.MogoMapListenerHandler;
|
||||
import com.mogo.map.marker.IMogoMarkerManager;
|
||||
import com.mogo.map.uicontroller.IMogoMapUIController;
|
||||
import com.mogo.map.uicontroller.VisualAngleMode;
|
||||
import com.mogo.och.common.module.map.AmapNaviToDestinationModel;
|
||||
import com.mogo.och.sweeper.R;
|
||||
import com.mogo.och.sweeper.view.SweeperCurrentTaskInfoView;
|
||||
import com.mogo.och.sweeper.view.SweeperTrafficDataView;
|
||||
import com.mogo.och.sweeper.view.SweeperWorkModeView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.constraintlayout.widget.Group;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
|
||||
/**
|
||||
* 网约车基础Fragment,主要负责布局通用界面,处理站点面板和通话面板互斥情况
|
||||
* <p>
|
||||
@@ -331,32 +332,32 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
|
||||
|
||||
|
||||
/**
|
||||
* 人工驾驶地图导航
|
||||
* 展示人工驾驶地图导航
|
||||
*
|
||||
* @param isShow
|
||||
*/
|
||||
protected void showAmapNaviToStationFragment(boolean isShow) {
|
||||
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
|
||||
if (isShow) {
|
||||
mGroupNaviPanel.setVisibility(View.VISIBLE);
|
||||
if(isShow){
|
||||
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
|
||||
mOchAmapNaviFragment = SweeperAmapNaviFragment.newInstance();
|
||||
if (mOchAmapNaviFragment.isAdded()) {
|
||||
return;
|
||||
}
|
||||
transaction.add(R.id.module_mogo_och_navi_panel_container, mOchAmapNaviFragment).show(mOchAmapNaviFragment);
|
||||
transaction.commitAllowingStateLoss();
|
||||
} else {
|
||||
mGroupNaviPanel.setVisibility(View.VISIBLE);
|
||||
}else{
|
||||
AmapNaviToDestinationModel.getInstance(getContext()).destroyAmaNavi();
|
||||
mGroupNaviPanel.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
int id = v.getId();
|
||||
if (id == R.id.sweeper_close_navi_icon) {
|
||||
mGroupNaviPanel.setVisibility(View.GONE);
|
||||
showAmapNaviToStationFragment(false);
|
||||
} else if (id == R.id.sweeper_refresh_navi) {
|
||||
|
||||
refreshNavi();
|
||||
}
|
||||
}
|
||||
public abstract void refreshNavi();
|
||||
}
|
||||
|
||||
@@ -4,16 +4,18 @@ import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import chassis.ChassisStatesOuterClass
|
||||
import com.amap.api.navi.model.NaviLatLng
|
||||
import com.mogo.och.common.module.map.AmapNaviToDestinationModel
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
import com.mogo.och.sweeper.R
|
||||
import com.mogo.och.sweeper.bean.SubInfo
|
||||
import com.mogo.och.sweeper.bean.SweeperMainTaskBean
|
||||
import com.mogo.och.sweeper.bean.SweeperSubTaskBean
|
||||
import com.mogo.och.sweeper.bean.SweeperSubTaskDetailBean
|
||||
import com.mogo.och.sweeper.constant.SubTaskTypeEnum
|
||||
import com.mogo.och.sweeper.constant.TaskStatusEnum
|
||||
import com.mogo.och.sweeper.presenter.SweeperPresenter
|
||||
import com.mogo.och.sweeper.ui.adapter.TaskListAdapter
|
||||
import com.mogo.och.sweeper.ui.dialog.SweeperManualDrivingDialog
|
||||
import com.mogo.och.sweeper.ui.dialog.SweeperNoTitleCommonDialog
|
||||
import com.mogo.och.sweeper.ui.popwindow.MenuPopWindow
|
||||
import com.mogo.och.sweeper.util.SweeperFutianCmdUtil
|
||||
import kotlinx.android.synthetic.main.fragment_och_sweeper.*
|
||||
@@ -22,17 +24,20 @@ import kotlinx.android.synthetic.main.sweeper_no_data_common_view.*
|
||||
/**
|
||||
* 清扫车主界面
|
||||
*/
|
||||
class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresenter?>(), MenuPopWindow.OnMenuItemOnClickListener{
|
||||
class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresenter?>(), MenuPopWindow.OnMenuItemOnClickListener {
|
||||
private var mAdapter: TaskListAdapter? = null
|
||||
private var mCurrentSubPosition: Int =0 //子任务下标
|
||||
private var mMainMutableList: MutableList<SweeperMainTaskBean>?=null
|
||||
private var mSubMutableList: MutableList<SubInfo>?=null
|
||||
private var mSubTaskBean: SweeperSubTaskBean?=null
|
||||
private var mSubTaskType:SubTaskTypeEnum=SubTaskTypeEnum.AUTOPILOT_SUBTYPE //1:自动驾驶子任务 2:人工驾驶子任务
|
||||
private var mCleanSystemState: ChassisStatesOuterClass.SweeperFuTianTaskSystemStates?=null
|
||||
private var mIsLastSubTask=false //是否最后一个子任务
|
||||
private var mSubTaskId=-1//子任务id
|
||||
private var mMainTask:SweeperMainTaskBean?=null
|
||||
private var mCurrentSubPosition: Int = 0 //子任务下标
|
||||
private var mMainMutableList: MutableList<SweeperMainTaskBean>? = null
|
||||
private var mSubMutableList: MutableList<SubInfo>? = null
|
||||
private var mSubTaskBean: SweeperSubTaskBean? = null
|
||||
private var mSubTaskType: SubTaskTypeEnum = SubTaskTypeEnum.AUTOPILOT_SUBTYPE //1:自动驾驶子任务 2:人工驾驶子任务
|
||||
private var mCleanSystemState: ChassisStatesOuterClass.SweeperFuTianTaskSystemStates? = null
|
||||
private var mIsLastSubTask: Boolean = false //是否最后一个子任务
|
||||
private var mSubTaskId: Int = -1//子任务id
|
||||
private var mSubTaskName: String? = null
|
||||
private var mMainTask: SweeperMainTaskBean? = null
|
||||
private var mLocation:MogoLocation?=null
|
||||
private var mSubTaskDetailBean:SweeperSubTaskDetailBean?=null
|
||||
|
||||
//当前经纬度
|
||||
override fun getTagName(): String {
|
||||
@@ -41,38 +46,36 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
|
||||
override fun initViews() {
|
||||
super.initViews()
|
||||
mMainMutableList= mutableListOf()
|
||||
mMainMutableList?.add(SweeperMainTaskBean(1, "惠新西街南口地铁站公交站", 10,1675848980000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(2, "惠新西街南口地铁站公交站", 10,1675935380000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(3, "惠新西街南口地铁站公交站", 10,1675762580000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(4, "环球贸易中心", 10,1675848980000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(5, "惠新西街南口地铁站公交站", 10,1675848980000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(6, "惠新西街南口地铁站公交站", 10,1675848980000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(7, "惠新西街南口地铁站公交站", 10,1675762580000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(8, "环球贸易中心", 10,1675848980000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(9, "惠新西街南口地铁站公交站", 10,1675848980000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(10, "惠新西街南口地铁站公交站", 10,1675935380000L))
|
||||
mSubMutableList= mutableListOf()
|
||||
mSubMutableList?.add(SubInfo(1, "惠新西街南口地铁站公交站", 1200,1,1,1675848980000L,0))
|
||||
mSubMutableList?.add(SubInfo(2, "惠新西街南口地铁站公交站", 2000,1,1,1675935380000L,0))
|
||||
mSubMutableList?.add(SubInfo(3, "惠新西街南口地铁站公交站", 500,1,1,1675762580000L,0))
|
||||
mSubMutableList?.add(SubInfo(4, "环球贸易中心", 10,1,1,1675848980000L,0))
|
||||
mSubMutableList?.add(SubInfo(5, "惠新西街南口地铁站公交站", 800,1,1,1675848980000L,0))
|
||||
mSubMutableList?.add(SubInfo(6, "惠新西街南口地铁站公交站", 90000,1,1,1675848980000L,0))
|
||||
mSubMutableList?.add(SubInfo(7, "惠新西街南口地铁站公交站", 12356,1,1,1675762580000L,0))
|
||||
mSubMutableList?.add(SubInfo(8, "环球贸易中心", 400,1,1,1675848980000L,0))
|
||||
mSubMutableList?.add(SubInfo(9, "惠新西街南口地铁站公交站", 200,1,1,1675848980000L,0))
|
||||
mSubMutableList?.add(SubInfo(10, "惠新西街南口地铁站公交站", 300,1,1,1675935380000L,0))
|
||||
mMainMutableList = mutableListOf()
|
||||
mMainMutableList?.add(SweeperMainTaskBean(1, "环球贸易中心", 10, 1675848980000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(2, "惠新西街南口地铁站公交站", 10, 1675935380000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(3, "环球贸易中心", 10, 1675762580000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(4, "环球贸易中心", 10, 1675848980000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(5, "惠新西街南口地铁站公交站", 10, 1675848980000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(6, "惠新西街南口地铁站公交站", 10, 1675848980000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(7, "惠新西街南口地铁站公交站", 10, 1675762580000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(8, "环球贸易中心", 10, 1675848980000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(9, "惠新西街南口地铁站公交站", 10, 1675848980000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(10, "惠新西街南口地铁站公交站", 10, 1675935380000L))
|
||||
mSubMutableList = mutableListOf()
|
||||
mSubMutableList?.add(SubInfo(1, "环球贸易中心", 1200, 1, 2, "1小时40分钟", 1))
|
||||
mSubMutableList?.add(SubInfo(2, "环球贸易中心", 2000, 1, 1, "10小时34分钟", 1))
|
||||
mSubMutableList?.add(SubInfo(3, "环球贸易中心", 500, 1, 1, "10小时34分钟", 1))
|
||||
mSubMutableList?.add(SubInfo(4, "环球贸易中心", 10, 1, 1, "10小时34分钟", 0))
|
||||
mSubMutableList?.add(SubInfo(5, "惠新西街南口地铁站公交站", 800, 1, 1, "10小时34分钟", 1))
|
||||
mSubMutableList?.add(SubInfo(6, "惠新西街南口地铁站公交站", 90000, 1, 1, "10小时34分钟", 1))
|
||||
mSubMutableList?.add(SubInfo(7, "惠新西街南口地铁站公交站", 12356, 1, 1, "10小时34分钟", 1))
|
||||
mSubMutableList?.add(SubInfo(8, "环球贸易中心", 400, 1, 1, "10小时34分钟", 1))
|
||||
mSubMutableList?.add(SubInfo(9, "惠新西街南口地铁站公交站", 200, 1, 1, "10小时34分钟", 1))
|
||||
mSubMutableList?.add(SubInfo(10, "惠新西街南口地铁站公交站", 300, 1, 1, "10小时34分钟", 1))
|
||||
|
||||
mAdapter = context?.let { TaskListAdapter(it, mMainMutableList)}
|
||||
mAdapter = context?.let { TaskListAdapter(it, mMainMutableList) }
|
||||
val linearLayoutManager = LinearLayoutManager(context)
|
||||
linearLayoutManager.orientation = LinearLayoutManager.VERTICAL
|
||||
rvTaskList?.layoutManager = linearLayoutManager
|
||||
rvTaskList?.adapter = mAdapter
|
||||
mAdapter?.setOnTaskItemClickListener(onTaskItemClickListener)
|
||||
initListener()
|
||||
showAmapNaviToStationFragment(true)
|
||||
startNaviToStation(true, 40.199247410363796, 116.73367125257714, 40.20070929640184, 116.73582650844378)
|
||||
}
|
||||
|
||||
override fun createPresenter(): SweeperPresenter {
|
||||
@@ -83,9 +86,11 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
mPresenter?.getCurrentTask()
|
||||
}
|
||||
|
||||
override fun getTaskListPanelViewId(): Int {
|
||||
return R.layout.fragment_och_sweeper
|
||||
}
|
||||
|
||||
/**
|
||||
* VR模式切换
|
||||
*
|
||||
@@ -105,8 +110,8 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
/**
|
||||
* 根据自动驾驶状态更新按钮
|
||||
*/
|
||||
fun readyTaskBtn(text:String,isClick:Boolean,isTaskWorking:Boolean) {
|
||||
currentTaskPanelView.setEnableClickBtn(text,isClick,isTaskWorking)
|
||||
fun readyTaskBtn(text: String, isClick: Boolean, isTaskWorking: Boolean) {
|
||||
currentTaskPanelView.setEnableClickBtn(text, isClick, isTaskWorking)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -114,25 +119,36 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
*/
|
||||
private fun initListener() {
|
||||
tvTaskConfirm.setOnClickListener {
|
||||
mMainTask?.let { task->
|
||||
mSubTaskBean= SweeperSubTaskBean(task.mainTaskId,task.mainTaskName,task.mainTaskStartTime,mSubMutableList)
|
||||
mMainTask?.let { task ->
|
||||
mCurrentSubPosition=0
|
||||
mSubTaskBean = SweeperSubTaskBean(task.mainTaskId, task.mainTaskName, task.mainTaskStartTime, 1, mSubMutableList)
|
||||
//获取当前子任务列表
|
||||
presenter?.getSubTaskList(task.mainTaskId,mSubTaskBean)
|
||||
presenter?.getSubTaskList(task.mainTaskId, mSubTaskBean)
|
||||
}
|
||||
|
||||
//mock 数据
|
||||
setShowTaskListPanelView(false)
|
||||
workModePanelView.visibility = View.VISIBLE
|
||||
setShowCurrentTaskPanelView(true)
|
||||
currentTaskPanelView.setData(workModePanelView,mSubTaskBean, mCurrentSubPosition,this,presenter)
|
||||
workModePanelView.setSweeperFutianCleanSystemState(mSubTaskType,if(mCleanSystemState==null) SweeperFutianCmdUtil.buildSweeperFuTionCleanSystemStateMockData() else mCleanSystemState,trafficDataView)
|
||||
setSubTaskData()
|
||||
if (mSubTaskType == SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE) {//如果是人工驾驶子任务,则弹窗
|
||||
manualDriving(null)
|
||||
} else {
|
||||
setShowTaskListPanelView(false)
|
||||
workModePanelView.visibility = View.VISIBLE
|
||||
setShowCurrentTaskPanelView(true)
|
||||
currentTaskPanelView.setData(workModePanelView, mSubTaskBean, mCurrentSubPosition, this, presenter)
|
||||
workModePanelView.setSweeperFutianCleanSystemState(
|
||||
mSubTaskType,
|
||||
if (mCleanSystemState == null) SweeperFutianCmdUtil.buildSweeperFuTionCleanSystemStateMockData() else mCleanSystemState,
|
||||
trafficDataView
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val onTaskItemClickListener = object : TaskListAdapter.TaskItemClickListener {
|
||||
override fun onItemClick(position: Int,mainTask:SweeperMainTaskBean) {
|
||||
override fun onItemClick(position: Int, mainTask: SweeperMainTaskBean) {
|
||||
mAdapter?.selectPosition(position)
|
||||
tvTaskConfirm.isSelected = true
|
||||
this@SweeperFragment.mMainTask=mainTask
|
||||
this@SweeperFragment.mMainTask = mainTask
|
||||
}
|
||||
|
||||
}
|
||||
@@ -140,13 +156,141 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
override fun onMenuItemClick(itemType: TaskStatusEnum) {
|
||||
when (itemType) {
|
||||
TaskStatusEnum.JUMP_OVER_SUBTASK -> {//跳过任务
|
||||
presenter?.subTaskSkip(mSubTaskId,mIsLastSubTask)
|
||||
presenter?.subTaskSkip(mSubTaskId, mIsLastSubTask)
|
||||
//mock
|
||||
if (mSubTaskType == SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE){//人工驾驶子任务
|
||||
showAmapNaviToStationFragment(false)
|
||||
}
|
||||
mCurrentSubPosition++
|
||||
currentTaskPanelView.setData(workModePanelView,mSubTaskBean, mCurrentSubPosition,this,presenter)
|
||||
|
||||
currentTaskPanelView.setData(workModePanelView, mSubTaskBean, mCurrentSubPosition, this@SweeperFragment, presenter)
|
||||
}
|
||||
TaskStatusEnum.END_TASK -> {
|
||||
subTaskEnd()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun onSweeperFutianCleanSystemState(cleanSystemState: ChassisStatesOuterClass.SweeperFuTianTaskSystemStates) {
|
||||
this.mCleanSystemState = cleanSystemState
|
||||
workModePanelView.setSweeperFutianCleanSystemState(mSubTaskType, cleanSystemState, trafficDataView)
|
||||
}
|
||||
/**
|
||||
* 设置当前主任务列表数据
|
||||
*/
|
||||
fun setMainTaskList(mainTaskBeanList: MutableList<SweeperMainTaskBean>?) {
|
||||
setShowCurrentTaskPanelView(false)
|
||||
setShowTaskListPanelView(true)
|
||||
workModePanelView.visibility = View.GONE
|
||||
if (mainTaskBeanList != null && mainTaskBeanList.isNotEmpty()) {
|
||||
noTaskDataView.visibility = View.GONE
|
||||
sweeperListCl.visibility = View.VISIBLE
|
||||
mAdapter?.setTaskListData(mainTaskBeanList)
|
||||
} else {
|
||||
noTaskDataView.visibility = View.VISIBLE
|
||||
sweeperListCl.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置当前子任务列表数据
|
||||
*/
|
||||
fun setSubTaskBean(subTaskBean: SweeperSubTaskBean?) {
|
||||
this.mSubTaskBean = subTaskBean
|
||||
this.mSubTaskBean?.let {
|
||||
setShowCurrentTaskPanelView(true)
|
||||
setShowTaskListPanelView(false)
|
||||
workModePanelView.visibility = View.VISIBLE
|
||||
mCurrentSubPosition = it.sort - 1
|
||||
currentTaskPanelView.setData(workModePanelView, it, mCurrentSubPosition, this, presenter)
|
||||
setSubTaskData()
|
||||
presenter?.getSubTaskDetail(mSubTaskId, mSubTaskType)//加载子任务详情包括轨迹信息
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新子任务状态
|
||||
*/
|
||||
fun updateSubTaskStatus(typeEnum: TaskStatusEnum, isLastSubTask: Boolean) {
|
||||
if (isLastSubTask) {
|
||||
setShowCurrentTaskPanelView(false)
|
||||
setShowTaskListPanelView(true)
|
||||
return
|
||||
}
|
||||
when (typeEnum) {
|
||||
TaskStatusEnum.END_SUBTASK -> {//子任务结束
|
||||
mCurrentSubPosition++
|
||||
setSubTaskData()
|
||||
presenter?.getSubTaskDetail(mSubTaskId, mSubTaskType)
|
||||
if (mSubTaskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE) {//自动驾驶子任务
|
||||
presenter?.startTask(mSubTaskId, mSubTaskType)
|
||||
}
|
||||
}
|
||||
TaskStatusEnum.JUMP_OVER_SUBTASK -> { //子任务跳过
|
||||
presenter?.subTaskEnd(mSubTaskId, mIsLastSubTask)
|
||||
if (mSubTaskType == SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE){//人工驾驶子任务
|
||||
showAmapNaviToStationFragment(false)
|
||||
}
|
||||
}
|
||||
TaskStatusEnum.START_SUBTASK -> { //子任务开始
|
||||
if (mSubTaskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE) {//自动驾驶子任务
|
||||
readyTaskBtn("暂停任务", true, true)
|
||||
}
|
||||
currentTaskPanelView.setCurrentData(mCurrentSubPosition)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 子任务信息详情,包括轨迹文件
|
||||
*/
|
||||
fun setSubTakDetail(subTaskDetailBean: SweeperSubTaskDetailBean, subTaskTypeEnum: SubTaskTypeEnum) {
|
||||
if (subTaskTypeEnum == SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE) {//人工驾驶子任务
|
||||
this.mSubTaskDetailBean=subTaskDetailBean
|
||||
manualDriving(subTaskDetailBean)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 主任务重置
|
||||
*/
|
||||
fun setMainTaskReset(isSuccess: Boolean) {
|
||||
if (isSuccess) {
|
||||
setShowCurrentTaskPanelView(false)
|
||||
setShowTaskListPanelView(true)
|
||||
workModePanelView.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置当前选中的子任务信息
|
||||
*/
|
||||
private fun setSubTaskData() {
|
||||
mSubMutableList?.let {
|
||||
mSubTaskId = it[mCurrentSubPosition].taskId
|
||||
mSubTaskName=it[mCurrentSubPosition].taskName
|
||||
mSubTaskType = if (it[mCurrentSubPosition].taskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE.code)
|
||||
SubTaskTypeEnum.AUTOPILOT_SUBTYPE else SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE
|
||||
//设置当前子任务id
|
||||
presenter?.setSubTaskId(mSubTaskId)
|
||||
//设置是否是最后一个子任务
|
||||
presenter?.setIsLastSubtask(mCurrentSubPosition==it.size-1)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 跳过子任务
|
||||
*/
|
||||
private fun subTaskEnd() {
|
||||
//结束任务
|
||||
val builder = SweeperNoTitleCommonDialog.Builder()
|
||||
val endConfirmDialog = builder
|
||||
.tips("是否结束任务?")
|
||||
.confirmStr("确认")
|
||||
.cancelStr("取消")
|
||||
.build(requireContext())
|
||||
endConfirmDialog?.setClickListener(object : SweeperNoTitleCommonDialog.ClickListener {
|
||||
override fun confirm() {
|
||||
mMainTask?.let {
|
||||
presenter?.mainTaskReset(it.mainTaskId)
|
||||
}
|
||||
@@ -155,99 +299,53 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
setShowCurrentTaskPanelView(false)
|
||||
workModePanelView.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun onSweeperFutianCleanSystemState(cleanSystemState: ChassisStatesOuterClass.SweeperFuTianTaskSystemStates) {
|
||||
this.mCleanSystemState=cleanSystemState
|
||||
workModePanelView.setSweeperFutianCleanSystemState(mSubTaskType,cleanSystemState,trafficDataView)
|
||||
}
|
||||
/**
|
||||
* 导航去目的地
|
||||
*/
|
||||
private fun startNaviToStation(isVoicePlay: Boolean, startLat: Double, startLng: Double, endLat: Double, endLng: Double) {
|
||||
AmapNaviToDestinationModel.getInstance(context).destroyAmaNavi()
|
||||
val startNaviLatLng = NaviLatLng(startLat, startLng)
|
||||
val endNaviLatLng = NaviLatLng(endLat, endLng)
|
||||
AmapNaviToDestinationModel.getInstance(context).initAMapNavi(startNaviLatLng, endNaviLatLng)
|
||||
AmapNaviToDestinationModel.getInstance(context).setVoiceIsMute(isVoicePlay)
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置当前主任务列表数据
|
||||
*/
|
||||
fun setMainTaskList(mainTaskBeanList: MutableList<SweeperMainTaskBean>?){
|
||||
setShowCurrentTaskPanelView(false)
|
||||
setShowTaskListPanelView(true)
|
||||
workModePanelView.visibility = View.GONE
|
||||
if(mainTaskBeanList!=null&& mainTaskBeanList.isNotEmpty()){
|
||||
noTaskDataView.visibility=View.GONE
|
||||
sweeperListCl.visibility=View.VISIBLE
|
||||
mAdapter?.setTaskListData(mainTaskBeanList)
|
||||
}else{
|
||||
noTaskDataView.visibility=View.VISIBLE
|
||||
sweeperListCl.visibility=View.GONE
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 设置当前子任务列表数据
|
||||
*/
|
||||
fun setSubTaskBean(subTaskBean: SweeperSubTaskBean?){
|
||||
this.mSubTaskBean= subTaskBean
|
||||
setShowCurrentTaskPanelView(true)
|
||||
setShowTaskListPanelView(false)
|
||||
workModePanelView.visibility = View.VISIBLE
|
||||
currentTaskPanelView.setData(workModePanelView,mSubTaskBean, mCurrentSubPosition,this,presenter)
|
||||
setSubTaskData()
|
||||
}
|
||||
/**
|
||||
* 更新子任务状态
|
||||
*/
|
||||
fun updateSubTaskStatus(typeEnum: TaskStatusEnum, isLastSubTask: Boolean){
|
||||
if (isLastSubTask){
|
||||
setShowCurrentTaskPanelView(false)
|
||||
setShowTaskListPanelView(true)
|
||||
return
|
||||
}
|
||||
when(typeEnum){
|
||||
TaskStatusEnum.END_SUBTASK->{//子任务结束
|
||||
mCurrentSubPosition++
|
||||
setSubTaskData()
|
||||
presenter?.startTask(mSubTaskId,mSubTaskType)
|
||||
override fun cancel() {
|
||||
endConfirmDialog?.dismiss()
|
||||
}
|
||||
TaskStatusEnum.JUMP_OVER_SUBTASK->{ //子任务跳过
|
||||
presenter?.subTaskEnd(mSubTaskId,mIsLastSubTask)
|
||||
}
|
||||
TaskStatusEnum.START_SUBTASK->{ //子任务开始
|
||||
if (mSubTaskType==SubTaskTypeEnum.AUTOPILOT_SUBTYPE){//自动驾驶子任务
|
||||
readyTaskBtn("暂停任务",true,true)
|
||||
}else{//手动驾驶的子任务会弹窗
|
||||
|
||||
}
|
||||
currentTaskPanelView.setCurrentData(mCurrentSubPosition)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* 主任务重置
|
||||
*/
|
||||
fun setMainTaskReset(isSuccess: Boolean){
|
||||
if (isSuccess){
|
||||
setShowCurrentTaskPanelView(false)
|
||||
setShowTaskListPanelView(true)
|
||||
workModePanelView.visibility = View.GONE
|
||||
}
|
||||
})
|
||||
endConfirmDialog?.show()
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置子任务数据
|
||||
* 人工驾驶子任务
|
||||
*/
|
||||
private fun setSubTaskData(){
|
||||
mSubMutableList?.let {
|
||||
mSubTaskId=it[mCurrentSubPosition].taskId
|
||||
mSubTaskType=if (it[mCurrentSubPosition].taskType==SubTaskTypeEnum.AUTOPILOT_SUBTYPE.code)
|
||||
SubTaskTypeEnum.AUTOPILOT_SUBTYPE else SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE
|
||||
private fun manualDriving(subTaskDetailBean: SweeperSubTaskDetailBean?) {
|
||||
val builder = SweeperManualDrivingDialog.Builder()
|
||||
val endConfirmDialog = builder
|
||||
.tips("前方子任务惠新西街南口地铁站公交站手动驾驶至惠新西街南口地铁站公交站")
|
||||
.confirmStr("确认")
|
||||
.build(requireContext())
|
||||
endConfirmDialog?.setClickListener(object : SweeperManualDrivingDialog.ClickListener {
|
||||
override fun confirm() {
|
||||
presenter?.startTask(mSubTaskId, mSubTaskType)
|
||||
showAmapNaviToStationFragment(true)
|
||||
presenter?.startNaviToStation(true, 40.199247410363796, 116.73367125257714, 40.20070929640184, 116.73582650844378)
|
||||
//mock
|
||||
setShowTaskListPanelView(false)
|
||||
workModePanelView.visibility = View.VISIBLE
|
||||
setShowCurrentTaskPanelView(true)
|
||||
currentTaskPanelView.setData(workModePanelView, mSubTaskBean, mCurrentSubPosition, this@SweeperFragment, presenter)
|
||||
workModePanelView.setSweeperFutianCleanSystemState(
|
||||
mSubTaskType,
|
||||
if (mCleanSystemState == null) SweeperFutianCmdUtil.buildSweeperFuTionCleanSystemStateMockData() else mCleanSystemState,
|
||||
trafficDataView
|
||||
)
|
||||
}
|
||||
})
|
||||
endConfirmDialog?.show()
|
||||
}
|
||||
/**
|
||||
* 当前位置经纬度
|
||||
*/
|
||||
fun setCurrentLocation(location: MogoLocation){
|
||||
this.mLocation=location
|
||||
}
|
||||
override fun refreshNavi(){
|
||||
mSubTaskDetailBean?.apply {
|
||||
mLocation?.let {
|
||||
presenter?.startNaviToStation(true, it.longitude, it.latitude, endSiteLon, endSiteLat)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -370,7 +370,7 @@ public class SweeperTaskModel {
|
||||
}
|
||||
|
||||
/**
|
||||
* 将业务订单信息保存,鹰眼可取用
|
||||
* 将轨迹文件信息同步到鹰眼
|
||||
*/
|
||||
private void updateAutopilotControlParameters() {
|
||||
|
||||
@@ -523,16 +523,18 @@ public class SweeperTaskModel {
|
||||
/**
|
||||
* 获取子任务详情包括轨迹文件信息
|
||||
*/
|
||||
public void getSubTaskDetail(int subTaskId) {
|
||||
public void getSubTaskDetail(int subTaskId,SubTaskTypeEnum subTaskType) {
|
||||
SweeperServiceManager.getSubTaskDetail(subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<SweeperSubTaskDetailBean>>() {
|
||||
@Override
|
||||
public void onSuccess(BaseResponse<SweeperSubTaskDetailBean> data) {
|
||||
if (data != null) {
|
||||
currentSubTaskDetail = data.getData();
|
||||
if (currentSubTaskDetail!=null){
|
||||
//向自动驾驶发送要下载文件轨迹路径
|
||||
SweeperTrajectoryManager.getInstance().syncTrajectoryInfo(currentSubTaskDetail);
|
||||
updateAutopilotControlParameters();
|
||||
if (subTaskType==SubTaskTypeEnum.AUTOPILOT_SUBTYPE){//自动驾驶子任务
|
||||
//向自动驾驶发送要下载文件轨迹路径
|
||||
SweeperTrajectoryManager.getInstance().syncTrajectoryInfo(currentSubTaskDetail);
|
||||
updateAutopilotControlParameters();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -49,7 +49,6 @@ public interface ISweeperApiService {
|
||||
*/
|
||||
@GET("/och-sweep/api/task/v1/subTaskList")
|
||||
Observable<BaseResponse<List<SubInfo>>> getSubTaskList(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("carSn") String sn, @Query("taskId") int taskId);
|
||||
|
||||
/**
|
||||
* 子任务详情 包括子任务轨迹信息
|
||||
* @param appId
|
||||
|
||||
@@ -2,12 +2,10 @@ package com.mogo.och.sweeper.presenter;
|
||||
|
||||
import android.os.Looper;
|
||||
|
||||
import com.elegant.network.utils.GsonUtil;
|
||||
import com.amap.api.navi.model.NaviLatLng;
|
||||
import com.mogo.commons.AbsMogoApplication;
|
||||
import com.mogo.commons.mvp.Presenter;
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters;
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo;
|
||||
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig;
|
||||
import com.mogo.eagle.core.data.map.MogoLocation;
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener;
|
||||
@@ -15,12 +13,12 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoSweeperFutianCleanSystemL
|
||||
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.och.common.module.manager.OCHAdasAbilityManager;
|
||||
import com.mogo.och.common.module.utils.PinYinUtil;
|
||||
import com.mogo.och.common.module.map.AmapNaviToDestinationModel;
|
||||
import com.mogo.och.sweeper.bean.SweeperMainTaskBean;
|
||||
import com.mogo.och.sweeper.bean.SweeperSubTaskBean;
|
||||
import com.mogo.och.sweeper.bean.SweeperSubTaskDetailBean;
|
||||
import com.mogo.och.sweeper.callback.ISweeperADASStatusCallback;
|
||||
import com.mogo.och.sweeper.callback.ISweeperControllerStatusCallback;
|
||||
import com.mogo.och.sweeper.callback.ISweeperTaskCallback;
|
||||
@@ -49,20 +47,21 @@ import system_master.SystemStatusInfo;
|
||||
* @author tongchenfei
|
||||
*/
|
||||
public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
implements IMoGoAutopilotStatusListener, ISweeperControllerStatusCallback, ISweeperADASStatusCallback, IMoGoSweeperFutianCleanSystemListener, ISweeperTaskCallback {
|
||||
implements IMoGoAutopilotStatusListener, ISweeperControllerStatusCallback, ISweeperADASStatusCallback,
|
||||
IMoGoSweeperFutianCleanSystemListener, ISweeperTaskCallback {
|
||||
|
||||
private static final String TAG = "BusPresenter";
|
||||
private static final String TAG = "SweeperPresenter";
|
||||
//当前子任务id
|
||||
private int mSubTaskId=0;
|
||||
private int mSubTaskId = 0;
|
||||
//当前是否最后一个子任务
|
||||
private boolean mIsLastSubtask=false;
|
||||
private boolean mIsLastSubtask = false;
|
||||
|
||||
public SweeperPresenter(SweeperFragment view) {
|
||||
super(view);
|
||||
//2021.11.1 鹰眼架构整合,由IMoGoAutopilotStatusListener逐步替代IMogoAdasOCHCallback接口
|
||||
CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, this);
|
||||
//清扫车模式和贴边数据回调监听
|
||||
CallerSweeperFutianCleanSystemListenerManager.INSTANCE.addListener(TAG,this);
|
||||
CallerSweeperFutianCleanSystemListenerManager.INSTANCE.addListener(TAG, this);
|
||||
SweeperTaskModel.getInstance().init();
|
||||
OCHAdasAbilityManager.getInstance().init(AbsMogoApplication.getApp());
|
||||
}
|
||||
@@ -92,48 +91,49 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
SweeperTaskModel.getInstance().setSweeperTaskCallback(null);
|
||||
CallerSweeperFutianCleanSystemListenerManager.INSTANCE.removeListener(TAG);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autopilotStatusInfo) {
|
||||
if (autopilotStatusInfo == null) return;
|
||||
switch (autopilotStatusInfo.getState()){
|
||||
switch (autopilotStatusInfo.getState()) {
|
||||
case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE://不可自动驾驶
|
||||
runOnUIThread(() -> mView.readyTaskBtn("准备出发",false,false));
|
||||
runOnUIThread(() -> mView.readyTaskBtn("准备出发", false, false));
|
||||
break;
|
||||
case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE://人工驾驶
|
||||
if (SweeperTaskModel.getInstance().getSubWorking()){
|
||||
if(FunctionBuildConfig.isDemoMode){//美化模式开启时
|
||||
if (SweeperTaskModel.getInstance().getSubWorking()) {
|
||||
if (FunctionBuildConfig.isDemoMode) {//美化模式开启时
|
||||
SweeperTaskModel.getInstance().startBeautificationMode();
|
||||
}
|
||||
}else{
|
||||
if (FunctionBuildConfig.isDemoMode){//美化模式开启时
|
||||
} else {
|
||||
if (FunctionBuildConfig.isDemoMode) {//美化模式开启时
|
||||
//关闭美化模式
|
||||
SweeperTaskModel.getInstance().closeBeautificationMode();
|
||||
}
|
||||
}
|
||||
runOnUIThread(() -> mView.readyTaskBtn("准备出发",true,false));
|
||||
runOnUIThread(() -> mView.readyTaskBtn("准备出发", true, false));
|
||||
break;
|
||||
case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING://自动驾驶中
|
||||
if (SweeperTaskModel.getInstance().getSubWorking()){
|
||||
if (FunctionBuildConfig.isDemoMode){//美化模式开启时
|
||||
if (SweeperTaskModel.getInstance().getSubWorking()) {
|
||||
if (FunctionBuildConfig.isDemoMode) {//美化模式开启时
|
||||
SweeperTaskModel.getInstance().startBeautificationMode();
|
||||
}
|
||||
runOnUIThread(() -> mView.readyTaskBtn("暂停任务",true,true));
|
||||
}else{
|
||||
runOnUIThread(() -> mView.readyTaskBtn("准备出发",true,false));
|
||||
runOnUIThread(() -> mView.readyTaskBtn("暂停任务", true, true));
|
||||
} else {
|
||||
runOnUIThread(() -> mView.readyTaskBtn("准备出发", true, false));
|
||||
}
|
||||
case IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING://平行驾驶
|
||||
if (SweeperTaskModel.getInstance().getSubWorking()){
|
||||
if(FunctionBuildConfig.isDemoMode){//美化模式开启时
|
||||
if (SweeperTaskModel.getInstance().getSubWorking()) {
|
||||
if (FunctionBuildConfig.isDemoMode) {//美化模式开启时
|
||||
FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true;//是否强制绘制引导线
|
||||
CallerAutoPilotControlManager.INSTANCE.setIPCDemoMode(false);//是否自动启动自驾
|
||||
}
|
||||
}else{
|
||||
if (FunctionBuildConfig.isDemoMode){//美化模式开启时
|
||||
} else {
|
||||
if (FunctionBuildConfig.isDemoMode) {//美化模式开启时
|
||||
//关闭美化模式
|
||||
SweeperTaskModel.getInstance().closeBeautificationMode();
|
||||
}
|
||||
}
|
||||
runOnUIThread(() -> mView.readyTaskBtn("准备出发",true,false));
|
||||
runOnUIThread(() -> mView.readyTaskBtn("准备出发", true, false));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -149,24 +149,30 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
public void onCarLocationChanged(MogoLocation location) {
|
||||
if (null != location) {
|
||||
runOnUIThread(() -> mView.updateSpeedView((float) location.getGnssSpeed()));
|
||||
runOnUIThread(() -> mView.setCurrentLocation(location));
|
||||
}
|
||||
}
|
||||
public void cancelAutoPilot(){
|
||||
|
||||
public void cancelAutoPilot() {
|
||||
//结束自动驾驶
|
||||
CallerAutoPilotControlManager.INSTANCE.cancelAutoPilot();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startOpenAutopilot() {
|
||||
|
||||
}
|
||||
|
||||
public void setSubTaskId(int mSubTaskId) {
|
||||
this.mSubTaskId = mSubTaskId;
|
||||
SweeperTaskModel.getInstance().setSubTaskId(mSubTaskId);
|
||||
}
|
||||
|
||||
public void setIsLastSubtask(boolean mIsLastSubtask) {
|
||||
this.mIsLastSubtask = mIsLastSubtask;
|
||||
SweeperTaskModel.getInstance().setIsLastSubtask(mIsLastSubtask);
|
||||
}
|
||||
|
||||
private void runOnUIThread(Runnable executor) {
|
||||
if (executor == null) {
|
||||
return;
|
||||
@@ -177,6 +183,7 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
executor.run();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试使用
|
||||
*
|
||||
@@ -219,29 +226,33 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
|
||||
@Override
|
||||
public void onSweeperFutianCleanSystemState(@NonNull ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState) {
|
||||
runOnUIThread(() ->mView.onSweeperFutianCleanSystemState(cleanSystemState));
|
||||
runOnUIThread(() -> mView.onSweeperFutianCleanSystemState(cleanSystemState));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSweeperFutianTaskIndexData(@NonNull RoboSweeperTaskIndexOuterClass.RoboSweeperTaskIndex roboSweeperTaskIndex) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前正在执行的任务
|
||||
*/
|
||||
public void getCurrentTask(){
|
||||
public void getCurrentTask() {
|
||||
SweeperTaskModel.getInstance().getCurrentTask();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取子任务列表
|
||||
*/
|
||||
public void getSubTaskList(int taskId,SweeperSubTaskBean sweeperSubTaskBean){
|
||||
SweeperTaskModel.getInstance().getSubTaskList(taskId,sweeperSubTaskBean);
|
||||
public void getSubTaskList(int taskId, SweeperSubTaskBean sweeperSubTaskBean) {
|
||||
SweeperTaskModel.getInstance().getSubTaskList(taskId, sweeperSubTaskBean);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取子任务详情包括轨迹文件信息
|
||||
*/
|
||||
public void getSubTaskDetail(int subTaskId){
|
||||
SweeperTaskModel.getInstance().getSubTaskDetail(subTaskId);
|
||||
public void getSubTaskDetail(int subTaskId, SubTaskTypeEnum subTaskType) {
|
||||
SweeperTaskModel.getInstance().getSubTaskDetail(subTaskId, subTaskType);
|
||||
}
|
||||
/**
|
||||
* 子任务开始上报
|
||||
@@ -249,11 +260,11 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
/**
|
||||
* 开始任务
|
||||
*/
|
||||
public void startTask(int subTaskId,SubTaskTypeEnum subTaskType){
|
||||
if (SweeperTaskModel.getInstance().getSubWorking()&&subTaskType==SubTaskTypeEnum.AUTOPILOT_SUBTYPE){//如果任务正在执行中,被人工接管后掉出自驾,则只重启自动驾驶
|
||||
public void startTask(int subTaskId, SubTaskTypeEnum subTaskType) {
|
||||
if (SweeperTaskModel.getInstance().getSubWorking() && subTaskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE) {//如果任务正在执行中,被人工接管后掉出自驾,则只重启自动驾驶
|
||||
SweeperTaskModel.getInstance().startAutopilot();
|
||||
}else{
|
||||
SweeperTaskModel.getInstance().subTaskStart(subTaskId,subTaskType);
|
||||
} else {
|
||||
SweeperTaskModel.getInstance().subTaskStart(subTaskId, subTaskType);
|
||||
}
|
||||
// AutopilotControlParameters parameters = new AutopilotControlParameters();
|
||||
// parameters.isSpeakVoice = true;
|
||||
@@ -286,22 +297,25 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
// CallerLogger.INSTANCE.d( M_BUS + TAG, "开启自动驾驶====" + GsonUtil.jsonFromObject(parameters));
|
||||
// CallerAutoPilotControlManager.INSTANCE.startAutoPilot(parameters);
|
||||
}
|
||||
|
||||
/**
|
||||
* 子任务结束上报
|
||||
*/
|
||||
public void subTaskEnd(int subTaskId,boolean isLastSubTask){
|
||||
SweeperTaskModel.getInstance().subTaskEnd(subTaskId,isLastSubTask);
|
||||
public void subTaskEnd(int subTaskId, boolean isLastSubTask) {
|
||||
SweeperTaskModel.getInstance().subTaskEnd(subTaskId, isLastSubTask);
|
||||
}
|
||||
|
||||
/**
|
||||
* 子任务跳过上报
|
||||
*/
|
||||
public void subTaskSkip(int subTaskId,boolean isLastSubTask){
|
||||
SweeperTaskModel.getInstance().subTaskSkip(subTaskId,isLastSubTask);
|
||||
public void subTaskSkip(int subTaskId, boolean isLastSubTask) {
|
||||
SweeperTaskModel.getInstance().subTaskSkip(subTaskId, isLastSubTask);
|
||||
}
|
||||
|
||||
/**
|
||||
* 主任务重置
|
||||
*/
|
||||
public void mainTaskReset(int taskId){
|
||||
public void mainTaskReset(int taskId) {
|
||||
SweeperTaskModel.getInstance().mainTaskReset(taskId);
|
||||
}
|
||||
|
||||
@@ -316,14 +330,14 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateSubTaskStatus(TaskStatusEnum typeEnum,boolean isLastSubTask) {
|
||||
if (isLastSubTask){
|
||||
if(FunctionBuildConfig.isDemoMode){//美化模式开启时
|
||||
SweeperTaskModel.getInstance().closeBeautificationMode();
|
||||
}
|
||||
cancelAutoPilot();
|
||||
}
|
||||
mView.updateSubTaskStatus(typeEnum,isLastSubTask);
|
||||
public void updateSubTaskStatus(TaskStatusEnum typeEnum, boolean isLastSubTask) {
|
||||
if (isLastSubTask) {
|
||||
if (FunctionBuildConfig.isDemoMode) {//美化模式开启时
|
||||
SweeperTaskModel.getInstance().closeBeautificationMode();
|
||||
}
|
||||
cancelAutoPilot();
|
||||
}
|
||||
mView.updateSubTaskStatus(typeEnum, isLastSubTask);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -332,7 +346,18 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
}
|
||||
|
||||
@Override
|
||||
public void emptyDataUI(int type) {
|
||||
public void setSubTakDetail(@NonNull SweeperSubTaskDetailBean subTaskDetailBean, SubTaskTypeEnum subTaskTypeEnum) {
|
||||
mView.setSubTakDetail(subTaskDetailBean, subTaskTypeEnum);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导航去目的地
|
||||
*/
|
||||
public void startNaviToStation(Boolean isVoicePlay, double startLat, double startLng, double endLat, double endLng) {
|
||||
AmapNaviToDestinationModel.getInstance(getContext()).destroyAmaNavi();
|
||||
NaviLatLng startNaviLatLng = new NaviLatLng(startLat, startLng);
|
||||
NaviLatLng endNaviLatLng = new NaviLatLng(endLat, endLng);
|
||||
AmapNaviToDestinationModel.getInstance(getContext()).initAMapNavi(startNaviLatLng, endNaviLatLng);
|
||||
AmapNaviToDestinationModel.getInstance(getContext()).setVoiceIsMute(isVoicePlay);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,12 +38,12 @@ class SubTaskView : ConstraintLayout {
|
||||
} else {
|
||||
"${taskInfo.mileage / 1000F}千米"
|
||||
}
|
||||
var timeSpent=if(DateTimeUtil.secondsToHourStr(taskInfo.timeSpent)!=""){
|
||||
"${DateTimeUtil.secondsToHourStr(taskInfo.timeSpent/1000)}小时${DateTimeUtil.secondsToMinuteStr(taskInfo.timeSpent/1000)}分钟"
|
||||
}else{
|
||||
"${DateTimeUtil.secondsToMinuteStr(taskInfo.timeSpent/1000)}分钟"
|
||||
}
|
||||
tvSubTaskDesc.text = "全程约${mileage},预计耗时$timeSpent 分钟"
|
||||
// var timeSpent=if(DateTimeUtil.secondsToHourStr(taskInfo.timeSpent)!=""){
|
||||
// "${DateTimeUtil.secondsToHourStr(taskInfo.timeSpent/1000)}小时${DateTimeUtil.secondsToMinuteStr(taskInfo.timeSpent/1000)}分钟"
|
||||
// }else{
|
||||
// "${DateTimeUtil.secondsToMinuteStr(taskInfo.timeSpent/1000)}分钟"
|
||||
// }
|
||||
tvSubTaskDesc.text = "全程约${mileage},预计耗时${taskInfo.timeSpent}"
|
||||
tvSubTaskName.setTextColor(if (isSelect) Color.parseColor("#3BD2FF") else Color.parseColor("#FFFFFF"))
|
||||
if (isSelect) {
|
||||
ivSubTaskSelect.visibility = View.VISIBLE
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_width="@dimen/dp_560"
|
||||
android:layout_height="match_parent"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:background="@drawable/bg_shape_work_mode">
|
||||
@@ -13,7 +13,7 @@
|
||||
android:textSize="@dimen/dp_38"
|
||||
android:textColor="@color/white"
|
||||
android:layout_marginTop="@dimen/dp_21"
|
||||
android:text="任务AAAAAAA"
|
||||
android:text="惠新西街南口地铁站公交站"
|
||||
android:layout_marginStart="@dimen/dp_28"
|
||||
/>
|
||||
<TextView
|
||||
|
||||
@@ -8,14 +8,15 @@
|
||||
android:id="@+id/tvSubTaskName"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="惠新西街南口地铁"
|
||||
android:textSize="@dimen/dp_40"
|
||||
tools:text="惠新西街南口地铁站公交站"
|
||||
android:textSize="@dimen/dp_38"
|
||||
android:textColor="@color/white"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:layout_marginStart="@dimen/dp_87"
|
||||
android:maxLines="2"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:layout_marginEnd="@dimen/dp_26"
|
||||
/>
|
||||
<ImageView
|
||||
android:id="@+id/ivSubTaskSelect"
|
||||
@@ -41,19 +42,21 @@
|
||||
/>
|
||||
<TextView
|
||||
android:id="@+id/tvSubTaskDesc"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tvSubTaskName"
|
||||
app:layout_constraintStart_toStartOf="@+id/tvSubTaskName"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
android:textColor="#A6CEFF"
|
||||
tools:text="全程约384米,预计耗时19分钟"
|
||||
android:textSize="@dimen/dp_30"
|
||||
android:layout_marginTop="@dimen/dp_4"
|
||||
android:textSize="@dimen/dp_24"
|
||||
android:layout_marginTop="@dimen/dp_1"
|
||||
android:layout_marginEnd="@dimen/dp_26"
|
||||
/>
|
||||
<ImageView
|
||||
android:id="@+id/ivRightDownArrow"
|
||||
android:layout_width="@dimen/dp_16"
|
||||
android:layout_height="@dimen/dp_70"
|
||||
android:layout_height="@dimen/dp_60"
|
||||
android:src="@drawable/icon_right_down_arrow"
|
||||
app:layout_constraintTop_toTopOf="@+id/tvSubTaskDesc"
|
||||
android:layout_marginStart="@dimen/dp_46"
|
||||
|
||||
Reference in New Issue
Block a user