[sweeper-cloud] 接取任务弹窗逻辑封装处理
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
package com.mogo.och.sweepercloud.callback
|
||||
|
||||
interface SweeperCloudDialogClickListener {
|
||||
fun onConfirm()
|
||||
fun onRefuseOrEnd()
|
||||
fun onCountDownStop()
|
||||
fun onNext()
|
||||
}
|
||||
@@ -7,12 +7,14 @@ import chassis.ChassisStatesOuterClass
|
||||
import com.amap.api.maps.model.LatLng
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
import com.mogo.eagle.core.utilcode.util.ToastUtils
|
||||
import com.mogo.och.common.module.utils.DateTimeUtil
|
||||
import com.mogo.och.sweepercloud.R
|
||||
import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean
|
||||
import com.mogo.och.sweepercloud.callback.SweeperCloudDialogClickListener
|
||||
import com.mogo.och.sweepercloud.presenter.SweeperPresenter
|
||||
import com.mogo.och.sweepercloud.ui.dialog.SweeperCloudDialog
|
||||
import com.mogo.och.sweepercloud.util.SweeperCloudTaskMockUtils.sendCloudTaskInfo
|
||||
import com.mogo.och.sweepercloud.ui.dialog.SweeperCloudLoadingDialog
|
||||
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createConfirmStartSubTaskDialog
|
||||
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createReceivedTaskInfoDialog
|
||||
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.sendCloudTaskInfo
|
||||
import com.mogo.och.sweepercloud.view.SweeperCurrentTaskInfoView
|
||||
import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask
|
||||
import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon
|
||||
@@ -38,6 +40,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
private var mLocation: MogoLocation? = null
|
||||
private var mTaskInfo: SweeperTask.TaskInfo? = null
|
||||
private var mSubTaskType: Int = 0 //0:自动驾驶子任务 1:人工驾驶子任务
|
||||
private val mLoadingDialog: SweeperCloudLoadingDialog by lazy { SweeperCloudLoadingDialog(requireContext()) }
|
||||
|
||||
override fun getTagName(): String {
|
||||
return "SweepersFragment"
|
||||
@@ -225,41 +228,37 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
* 云控下发子任务确认弹窗
|
||||
*/
|
||||
fun showSubTaskInfoDialog(taskId: String, subTaskId: String) {
|
||||
mLoadingDialog.hideLoading()
|
||||
if (mTaskInfo == null) return
|
||||
if (mTaskInfo?.taskId != taskId) return
|
||||
val subInfo = bySubTaskIdFindSubTaskInfo(subTaskId)
|
||||
subInfo?.let {
|
||||
var builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
|
||||
builder.titleStr = "任务确认"
|
||||
builder.contentStr = "请确认是否执行任务${it.subTaskName}"
|
||||
builder.tipStr = if (it.taskModel.number == 1) "[需手动驾驶至终点${it.endLocation.siteName}]" else "[自动驾驶至终点${it.endLocation.siteName}]"
|
||||
builder.leftStr = "确认"
|
||||
builder.middleStr = "下一个"
|
||||
builder.rightStr = "结束"
|
||||
builder.countDownTime = 15
|
||||
builder.listener = object : SweeperCloudDialog.SweeperCloudClickListener {
|
||||
val dialog = createConfirmStartSubTaskDialog(context, object : SweeperCloudDialogClickListener {
|
||||
override fun onConfirm() {
|
||||
ToastUtils.showLong("确认")
|
||||
mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.MANUAL_CONFIRM)
|
||||
mLoadingDialog.showLoading()
|
||||
}
|
||||
|
||||
override fun onRefuseOrEnd() {
|
||||
ToastUtils.showLong("结束")
|
||||
mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.MANUAL_REFUSE_ALL)
|
||||
mLoadingDialog.showLoading()
|
||||
}
|
||||
|
||||
override fun onCountDownStop() {
|
||||
ToastUtils.showLong("倒计时结束")
|
||||
mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.OVER_TIME)
|
||||
mLoadingDialog.showLoading()
|
||||
}
|
||||
|
||||
override fun onNext() {
|
||||
ToastUtils.showLong("下一个")
|
||||
mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.MANUAL_REFUSE_SINGLE)
|
||||
mLoadingDialog.showLoading()
|
||||
}
|
||||
|
||||
}
|
||||
val dialog = context?.let { it1 -> builder.build(it1) }
|
||||
}, it)
|
||||
dialog?.show()
|
||||
}
|
||||
}
|
||||
@@ -268,47 +267,34 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
* 接取云端任务弹窗
|
||||
*/
|
||||
private fun receivedTaskInfoDialog() {
|
||||
mTaskInfo?.apply {
|
||||
mPresenter?.sendSweeperStartTaskResp(taskId, SweeperTask.StartTaskCode.RECEIVED)
|
||||
var builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
|
||||
val startCalendar = DateTimeUtil.formatLongToCalendar(taskStartTime)
|
||||
val endCalendar = DateTimeUtil.formatLongToCalendar(taskEndTime)
|
||||
builder.titleStr = "任务接取"
|
||||
builder.contentStr = "请确认是否接取任务${taskName}"
|
||||
builder.tipStr = "(任务时间${DateTimeUtil.formatCalendarToString(startCalendar, DateTimeUtil.HH_mm)}-${
|
||||
DateTimeUtil.formatCalendarToString(
|
||||
endCalendar,
|
||||
DateTimeUtil.HH_mm
|
||||
)
|
||||
})"
|
||||
builder.leftStr = "确认"
|
||||
builder.middleStr = ""
|
||||
builder.rightStr = "拒绝"
|
||||
builder.countDownTime = 15
|
||||
builder.listener = object : SweeperCloudDialog.SweeperCloudClickListener {
|
||||
mTaskInfo?.let {
|
||||
mPresenter?.sendSweeperStartTaskResp(it.taskId, SweeperTask.StartTaskCode.RECEIVED)
|
||||
val dialog = createReceivedTaskInfoDialog(context, object : SweeperCloudDialogClickListener {
|
||||
override fun onConfirm() {
|
||||
ToastUtils.showLong("确认")
|
||||
mPresenter?.sendSweeperStartTaskResp(taskId, SweeperTask.StartTaskCode.MANUAL_CONFIRM)
|
||||
mPresenter?.sendSweeperStartTaskResp(it.taskId, SweeperTask.StartTaskCode.MANUAL_CONFIRM)
|
||||
mLoadingDialog.showLoading()
|
||||
}
|
||||
|
||||
override fun onRefuseOrEnd() {
|
||||
ToastUtils.showLong("拒绝")
|
||||
setShowCurrentTaskPanelView(false)
|
||||
mPresenter?.sendSweeperStartTaskResp(taskId, SweeperTask.StartTaskCode.MANUAL_REFUSE)
|
||||
mPresenter?.sendSweeperStartTaskResp(it.taskId, SweeperTask.StartTaskCode.MANUAL_REFUSE)
|
||||
mLoadingDialog.showLoading()
|
||||
}
|
||||
|
||||
override fun onCountDownStop() {
|
||||
ToastUtils.showLong("倒计时结束")
|
||||
setShowCurrentTaskPanelView(false)
|
||||
mPresenter?.sendSweeperStartTaskResp(taskId, SweeperTask.StartTaskCode.OVER_TIME)
|
||||
mPresenter?.sendSweeperStartTaskResp(it.taskId, SweeperTask.StartTaskCode.OVER_TIME)
|
||||
mLoadingDialog.showLoading()
|
||||
}
|
||||
|
||||
override fun onNext() {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
val dialog = context?.let { it1 -> builder.build(it1) }
|
||||
}, it)
|
||||
dialog?.show()
|
||||
}
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ import com.mogo.och.sweepercloud.callback.ISweeperControllerStatusCallback;
|
||||
import com.mogo.och.sweepercloud.constant.SweeperConst;
|
||||
import com.mogo.och.sweepercloud.database.MyDataBase;
|
||||
import com.mogo.och.sweepercloud.database.bean.WeltDataBean;
|
||||
import com.mogo.och.sweepercloud.util.SweeperCloudTaskMockUtils;
|
||||
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils;
|
||||
import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask;
|
||||
import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable;
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask;
|
||||
@@ -61,7 +61,7 @@ import planning.RoboSweeperTaskIndexOuterClass;
|
||||
import system_master.SystemStatusInfo;
|
||||
|
||||
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_SWEEPER;
|
||||
import static com.mogo.och.sweepercloud.util.SweeperCloudTaskMockUtils.printMessage;
|
||||
import static com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.printMessage;
|
||||
|
||||
/**
|
||||
* @author congtaowang
|
||||
@@ -457,7 +457,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
|
||||
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "getCurrentTask:" + printMessage(getTaskReq) + " reqNo:" + reqNo);
|
||||
getAutoPilotControlManager().sendSweeperGetTaskReq(reqNo, getTaskReq);
|
||||
// TODO: 2023/5/5 模拟云控获取任务
|
||||
SweeperCloudTaskMockUtils.sendCloudTaskInfo(SweeperCloudTask.MessageType.PadSendGetTaskReq);
|
||||
SweeperCloudTaskUtils.sendCloudTaskInfo(SweeperCloudTask.MessageType.PadSendGetTaskReq);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -474,7 +474,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
|
||||
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperStartTaskResp:" + printMessage(startTaskResp) + " reqNo:" + reqNo);
|
||||
// TODO: 2023/5/5 模拟 当云控收到pad接取任务成功的指令时, 云控下发子任务开始确认指令
|
||||
if (code == SweeperTask.StartTaskCode.MANUAL_CONFIRM) {
|
||||
SweeperCloudTaskMockUtils.sendCloudSubTaskConfirm();
|
||||
SweeperCloudTaskUtils.sendCloudSubTaskConfirm();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,12 +10,13 @@ import android.widget.TextView
|
||||
import androidx.lifecycle.LifecycleObserver
|
||||
import com.mogo.eagle.core.function.hmi.dialog.BaseFloatDialog
|
||||
import com.mogo.och.sweepercloud.R
|
||||
import com.mogo.och.sweepercloud.callback.SweeperCloudDialogClickListener
|
||||
import com.mogo.och.sweepercloud.view.CountDownView
|
||||
|
||||
/**
|
||||
* 清扫车云控任务dialog基类
|
||||
*/
|
||||
class SweeperCloudDialog : BaseFloatDialog, LifecycleObserver {
|
||||
class SweeperCloudDialog : BaseFloatDialog, LifecycleObserver {
|
||||
private var commonTitle: TextView? = null //标题
|
||||
private var commonLeft: TextView? = null//底部左边按钮
|
||||
private var commonMiddle: TextView? = null //底部中间按钮
|
||||
@@ -96,14 +97,6 @@ class SweeperCloudDialog : BaseFloatDialog, LifecycleObserver {
|
||||
countDownImage = findViewById(R.id.sweeper_cloud_imageview)
|
||||
commonCountDown = findViewById(R.id.sweeper_cloud_countdown)
|
||||
}
|
||||
|
||||
interface SweeperCloudClickListener {
|
||||
fun onConfirm()
|
||||
fun onRefuseOrEnd()
|
||||
fun onCountDownStop()
|
||||
fun onNext()
|
||||
}
|
||||
|
||||
class Builder {
|
||||
var titleStr: String = ""
|
||||
var contentStr: String = ""
|
||||
@@ -112,12 +105,11 @@ class SweeperCloudDialog : BaseFloatDialog, LifecycleObserver {
|
||||
var middleStr: String = ""
|
||||
var rightStr: String = ""
|
||||
var countDownTime: Int = 0
|
||||
var listener: SweeperCloudClickListener? = null
|
||||
var listener: SweeperCloudDialogClickListener? = null
|
||||
fun build(context: Context): SweeperCloudDialog {
|
||||
return SweeperCloudDialog(this, context)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 启动动画
|
||||
*/
|
||||
|
||||
@@ -1,19 +1,20 @@
|
||||
package com.mogo.och.sweepercloud.util
|
||||
|
||||
import android.content.Context
|
||||
import com.google.protobuf.MessageOrBuilder
|
||||
import com.google.protobuf.TextFormat
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
|
||||
import com.mogo.eagle.core.utilcode.util.ThreadUtils
|
||||
import com.mogo.och.common.module.utils.DateTimeUtil
|
||||
import com.mogo.och.sweepercloud.callback.SweeperCloudDialogClickListener
|
||||
import com.mogo.och.sweepercloud.model.SweeperTaskModel
|
||||
import com.mogo.och.sweepercloud.ui.dialog.SweeperCloudDialog
|
||||
import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask.MessageType
|
||||
import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.Location
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.SubTaskInfo
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.TaskInfo
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.TaskModel
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.*
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm.TaskConfirm
|
||||
|
||||
object SweeperCloudTaskMockUtils {
|
||||
object SweeperCloudTaskUtils {
|
||||
/**
|
||||
* 模拟云控发送任务给pad
|
||||
*/
|
||||
@@ -22,14 +23,14 @@ object SweeperCloudTaskMockUtils {
|
||||
val builder = TaskInfo.newBuilder()
|
||||
builder.sn = getDriverSn()
|
||||
builder.taskId = "10"
|
||||
builder.taskName = "环球贸易中心B座"
|
||||
builder.taskName = "烟台清扫车作业任务"
|
||||
builder.currentTime = System.currentTimeMillis()
|
||||
builder.taskStartTime = 1682664162000
|
||||
builder.taskEndTime = 1682750562000
|
||||
//第一个子任务
|
||||
val subBuilder0 = SubTaskInfo.newBuilder()
|
||||
subBuilder0.subTaskId = "1"
|
||||
subBuilder0.subTaskName = "自动驾驶子任务0"
|
||||
subBuilder0.subTaskName = "海水浴场-佛兴禅寺(前岛贴右)"
|
||||
subBuilder0.taskModel = TaskModel.AUTO
|
||||
subBuilder0.taskStatus = SweeperCommon.TaskStatus.FINISHED
|
||||
val startLocation0 = Location.newBuilder()
|
||||
@@ -52,7 +53,7 @@ object SweeperCloudTaskMockUtils {
|
||||
//第二个子任务
|
||||
val subBuilder1 = SubTaskInfo.newBuilder()
|
||||
subBuilder1.subTaskId = "2"
|
||||
subBuilder1.subTaskName = "自动驾驶子任务1"
|
||||
subBuilder1.subTaskName = "佛兴禅寺-海水浴场(前岛贴左)"
|
||||
subBuilder1.taskModel = TaskModel.AUTO
|
||||
subBuilder1.taskStatus = SweeperCommon.TaskStatus.TO_START
|
||||
val startLocation1 = Location.newBuilder()
|
||||
@@ -73,7 +74,7 @@ object SweeperCloudTaskMockUtils {
|
||||
//第三个子任务
|
||||
val subBuilder2 = SubTaskInfo.newBuilder()
|
||||
subBuilder2.subTaskId = "3"
|
||||
subBuilder2.subTaskName = "人工驾驶子任务路线2"
|
||||
subBuilder2.subTaskName = "海水浴场-佛兴禅寺(前岛贴左)"
|
||||
subBuilder2.taskModel = TaskModel.MANUAL
|
||||
subBuilder2.taskStatus = SweeperCommon.TaskStatus.TO_START
|
||||
val startLocation2 = Location.newBuilder()
|
||||
@@ -120,6 +121,46 @@ object SweeperCloudTaskMockUtils {
|
||||
return MoGoAiCloudClientConfig.getInstance().sn
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建接收任务弹窗
|
||||
*/
|
||||
@JvmStatic
|
||||
fun createReceivedTaskInfoDialog(context:Context?,listener: SweeperCloudDialogClickListener?,taskInfo: TaskInfo):SweeperCloudDialog?{
|
||||
var builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
|
||||
val startCalendar = DateTimeUtil.formatLongToCalendar(taskInfo.taskStartTime)
|
||||
val endCalendar = DateTimeUtil.formatLongToCalendar(taskInfo.taskEndTime)
|
||||
builder.titleStr = "任务接取"
|
||||
builder.contentStr = "请确认是否接取任务${taskInfo.taskName}"
|
||||
builder.tipStr = "(任务时间${DateTimeUtil.formatCalendarToString(startCalendar, DateTimeUtil.HH_mm)}-${
|
||||
DateTimeUtil.formatCalendarToString(
|
||||
endCalendar,
|
||||
DateTimeUtil.HH_mm
|
||||
)
|
||||
})"
|
||||
builder.leftStr = "确认"
|
||||
builder.middleStr = ""
|
||||
builder.rightStr = "拒绝"
|
||||
builder.countDownTime = 15
|
||||
builder.listener=listener
|
||||
return context?.let { it1 -> builder.build(it1) }
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建确认开始子任务弹窗
|
||||
*/
|
||||
@JvmStatic
|
||||
fun createConfirmStartSubTaskDialog(context:Context?,listener: SweeperCloudDialogClickListener?,subTaskInfo: SubTaskInfo):SweeperCloudDialog?{
|
||||
var builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
|
||||
builder.titleStr = "任务确认"
|
||||
builder.contentStr = "请确认是否执行任务${subTaskInfo.subTaskName}"
|
||||
builder.tipStr = if (subTaskInfo.taskModel.number == 1) "[需手动驾驶至终点${subTaskInfo.endLocation.siteName}]" else "[自动驾驶至终点${subTaskInfo.endLocation.siteName}]"
|
||||
builder.leftStr = "确认"
|
||||
builder.middleStr = "下一个"
|
||||
builder.rightStr = "结束"
|
||||
builder.countDownTime = 15
|
||||
builder.listener =listener
|
||||
return context?.let { it1 -> builder.build(it1) }
|
||||
}
|
||||
@JvmStatic
|
||||
fun printMessage(message: MessageOrBuilder): String {
|
||||
return TextFormat.printer().escapingNonAscii(false).printToString(message)
|
||||
@@ -77,7 +77,7 @@
|
||||
android:id="@+id/preSubTask"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/dp_40"
|
||||
android:layout_marginTop="@dimen/dp_50"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/viewTaskInfoLine" />
|
||||
|
||||
Reference in New Issue
Block a user