[sweeper-cloud] 接取任务弹窗逻辑封装处理

This commit is contained in:
bxb
2023-05-06 19:17:21 +08:00
parent a0e486988d
commit 7dc77457d2
6 changed files with 89 additions and 62 deletions

View File

@@ -0,0 +1,8 @@
package com.mogo.och.sweepercloud.callback
interface SweeperCloudDialogClickListener {
fun onConfirm()
fun onRefuseOrEnd()
fun onCountDownStop()
fun onNext()
}

View File

@@ -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()
}

View File

@@ -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();
}
}

View File

@@ -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)
}
}
/**
* 启动动画
*/

View File

@@ -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)

View File

@@ -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" />