[Taxi无人化] refactor: CurrentTaskFragment 优化;
This commit is contained in:
@@ -98,7 +98,7 @@ public class AmapNaviToDestinationModel implements AMapNaviListener {
|
||||
}
|
||||
}
|
||||
|
||||
public void setOCHTaciNaviChangedCallback(ICommonNaviChangedCallback callback) {
|
||||
public void setTaxiNaviChangedCallback(ICommonNaviChangedCallback callback) {
|
||||
this.mNaviChangedCallback = callback;
|
||||
}
|
||||
|
||||
|
||||
@@ -354,7 +354,7 @@ public class TaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment
|
||||
NaviLatLng endNaviLatLng = new NaviLatLng(stationLat, stationLng);
|
||||
AmapNaviToDestinationModel.getInstance(getContext()).initAMapNavi(startNaviLatLng, endNaviLatLng);
|
||||
AmapNaviToDestinationModel.getInstance(getContext()).setVoiceIsMute(isVoicePlay);
|
||||
AmapNaviToDestinationModel.getInstance(getContext()).setOCHTaciNaviChangedCallback(this);
|
||||
AmapNaviToDestinationModel.getInstance(getContext()).setTaxiNaviChangedCallback(this);
|
||||
}
|
||||
|
||||
private void showOrHideNavi(boolean isShow) {
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.mogo.och.taxi.ui.task
|
||||
|
||||
import com.mogo.och.taxi.base.IUiIntent
|
||||
|
||||
/**
|
||||
* @author: wangmingjun
|
||||
* @date: 2023/7/26
|
||||
*/
|
||||
sealed class TaskUiIntent: IUiIntent{
|
||||
|
||||
//开始接单 、 暂停接单
|
||||
object StartOrEndTakeOrder : TaskUiIntent()
|
||||
|
||||
object StartTaskWithOrderLooper : TaskUiIntent()
|
||||
|
||||
//取消订单
|
||||
class CancelOrder(val type: Int) : TaskUiIntent()
|
||||
|
||||
object StartTask: TaskUiIntent()
|
||||
|
||||
//订单服务完成
|
||||
object JourneyCompleted: TaskUiIntent()
|
||||
|
||||
//跳过乘客验证
|
||||
object JumpPassengerCheck : TaskUiIntent()
|
||||
|
||||
//司机端手动结束订单
|
||||
object CloseOrderByDriver : TaskUiIntent()
|
||||
|
||||
}
|
||||
@@ -3,12 +3,9 @@ package com.mogo.och.taxi.ui.task
|
||||
import android.annotation.SuppressLint
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.GradientDrawable
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.text.HtmlCompat
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.amap.api.navi.model.NaviLatLng
|
||||
@@ -19,8 +16,9 @@ import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02Lis
|
||||
import com.mogo.eagle.core.function.main.MainMoGoApplication
|
||||
import com.mogo.eagle.core.network.utils.GsonUtil
|
||||
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.mogo.logger.CallerLogger.i
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_TAXI
|
||||
import com.mogo.eagle.core.utilcode.util.ClickUtils
|
||||
import com.mogo.eagle.core.utilcode.util.ToastUtils
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
|
||||
import com.mogo.och.common.module.map.AmapNaviToDestinationModel
|
||||
@@ -39,7 +37,6 @@ import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.TYPE_MARKER_TAXI_O
|
||||
import com.mogo.och.taxi.ui.base.TaxiFragment
|
||||
import com.mogo.och.taxi.ui.task.TaxiTaskModel
|
||||
import com.mogo.och.taxi.ui.unmanned.TaskWithOrderUIState
|
||||
import com.mogo.och.taxi.ui.unmanned.UnmannedIntent
|
||||
import com.mogo.och.taxi.utils.MapMakerManager
|
||||
import com.mogo.och.taxi.utils.TaskUtils
|
||||
import kotlinx.android.synthetic.main.task_fragment_current.cancelOrder
|
||||
@@ -67,15 +64,11 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
View.OnClickListener, ICommonNaviChangedCallback {
|
||||
|
||||
private lateinit var mViewModel: TaxiCurrentTaskViewModel
|
||||
private var mCurrentTaskWithOrder: QueryCurrentTaskRespBean.Result? = null
|
||||
|
||||
// 开始接单后 需要将车开到最近的一个站点就位,然后才能开启 无人化 流程
|
||||
private var mDriveToNearestStationTask: StartServiceRespBean.Result? = null
|
||||
|
||||
companion object {
|
||||
const val TAG = "TaxiCurrentTaskFragment"
|
||||
|
||||
const val TAG = M_TAXI + "TaxiCurrentTaskFragment"
|
||||
private var mTaxiFragment: TaxiFragment? = null
|
||||
|
||||
fun newInstance(taxiFragment: TaxiFragment?): TaxiCurrentTaskFragment {
|
||||
mTaxiFragment = taxiFragment
|
||||
val args = Bundle()
|
||||
@@ -115,7 +108,7 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
*/
|
||||
private fun initContainerView(hasCurrentTask: Boolean) {
|
||||
d(
|
||||
M_TAXI + TAG,
|
||||
TAG,
|
||||
"hasCurrentTask = $hasCurrentTask"
|
||||
)
|
||||
try {
|
||||
@@ -149,7 +142,7 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
}
|
||||
|
||||
private fun initViewModelObserver() {
|
||||
mViewModel.sendUiIntent(UnmannedIntent.StartTaskWithOrderLooper)
|
||||
mViewModel.sendUiIntent(TaskUiIntent.StartTaskWithOrderLooper)
|
||||
|
||||
//监听返回的数据状态
|
||||
lifecycleScope.launchWhenStarted {
|
||||
@@ -159,8 +152,8 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
is TaskWithOrderUIState.Init -> {
|
||||
}
|
||||
|
||||
// 开始接单后 需要将车开到最近的一个站点就位,然后才能开启 无人化 流程
|
||||
is TaskWithOrderUIState.TaskDriveToNearestStationTask -> {
|
||||
mDriveToNearestStationTask = taskAndOrderUiState.driveToNearestStationTask
|
||||
if (taskAndOrderUiState.driveToNearestStationTask != null) {
|
||||
updateViewByDriveToNearestStationTask(taskAndOrderUiState.driveToNearestStationTask)
|
||||
} else {
|
||||
@@ -170,20 +163,14 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
}
|
||||
|
||||
is TaskWithOrderUIState.TaskWithOrder -> {
|
||||
mCurrentTaskWithOrder = taskAndOrderUiState.taskWithOrder
|
||||
|
||||
//如果在前往标定站点, 显示标定站点
|
||||
// if (mDriveToNearestStationTask != null){
|
||||
// return@collect
|
||||
// }
|
||||
|
||||
if (mCurrentTaskWithOrder == null) {
|
||||
val currentTaskWithOrder = taskAndOrderUiState.taskWithOrder
|
||||
if (currentTaskWithOrder == null) {
|
||||
initContainerView(false)
|
||||
removeAllMapMarker()
|
||||
return@collect
|
||||
}
|
||||
updateNextTaskFragment(taskAndOrderUiState.taskWithOrder)
|
||||
updateViewByCurrentTaskWithOrder(taskAndOrderUiState.taskWithOrder)
|
||||
updateNextTaskFragment(currentTaskWithOrder)
|
||||
updateViewByCurrentTaskWithOrder(currentTaskWithOrder)
|
||||
}
|
||||
|
||||
is TaskWithOrderUIState.UpdateTaskTripInfo -> {
|
||||
@@ -220,12 +207,11 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
updateStartAndEndStationPointByStatus(true)
|
||||
|
||||
// 使用高德获取导航数据
|
||||
if (mDriveToNearestStationTask != null) {
|
||||
startNaviToStation(
|
||||
false, mDriveToNearestStationTask!!.gcjLat,
|
||||
mDriveToNearestStationTask!!.gcjLon
|
||||
)
|
||||
}
|
||||
startNaviToStation(
|
||||
false,
|
||||
driveToNearestStationTask.gcjLat,
|
||||
driveToNearestStationTask.gcjLon
|
||||
)
|
||||
}
|
||||
|
||||
private fun updateStartAndEndStationPointByStatus(isGoingToStation: Boolean) {
|
||||
@@ -245,28 +231,31 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
}
|
||||
|
||||
fun onCarTakeOrderStatusChanged() {
|
||||
mViewModel.sendUiIntent(UnmannedIntent.StartOrEndTakeOrder)
|
||||
mViewModel.sendUiIntent(TaskUiIntent.StartOrEndTakeOrder)
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据任务状态计算剩余历程和时间
|
||||
*/
|
||||
private fun updateRemainDistanceAndTime(isVoicePlay: Boolean) {
|
||||
//根据任务状态计算剩余历程和时间
|
||||
if (mCurrentTaskWithOrder == null) return
|
||||
if (mCurrentTaskWithOrder!!.endSite != null
|
||||
&& mCurrentTaskWithOrder!!.currentStatus == TaskStatusEnum.StartTask.code
|
||||
val currentTaskWithOrder = TaxiTaskModel.getCurrentTaskWithOrder() ?: return
|
||||
|
||||
if (currentTaskWithOrder.endSite != null
|
||||
&& currentTaskWithOrder.currentStatus == TaskStatusEnum.StartTask.code
|
||||
) {
|
||||
startNaviToStation(
|
||||
isVoicePlay, mCurrentTaskWithOrder!!.endSite!!.gcjLat,
|
||||
mCurrentTaskWithOrder!!.endSite!!.gcjLon
|
||||
isVoicePlay, currentTaskWithOrder.endSite!!.gcjLat,
|
||||
currentTaskWithOrder.endSite!!.gcjLon
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
if (mCurrentTaskWithOrder!!.startSite != null
|
||||
&& mCurrentTaskWithOrder!!.currentStatus == TaskStatusEnum.GetTask.code
|
||||
if (currentTaskWithOrder.startSite != null
|
||||
&& currentTaskWithOrder.currentStatus == TaskStatusEnum.GetTask.code
|
||||
) { //演练任务和送驾任务
|
||||
startNaviToStation(
|
||||
isVoicePlay, mCurrentTaskWithOrder!!.startSite!!.gcjLat,
|
||||
mCurrentTaskWithOrder!!.startSite!!.gcjLon
|
||||
isVoicePlay, currentTaskWithOrder.startSite!!.gcjLat,
|
||||
currentTaskWithOrder.startSite!!.gcjLon
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -274,7 +263,7 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
/**
|
||||
* 更新当前任务和订单信息
|
||||
*/
|
||||
@SuppressLint("SetTextI18n", "UseCompatLoadingForDrawables")
|
||||
@SuppressLint("SetTextI18n")
|
||||
fun updateViewByCurrentTaskWithOrder(taskAndOrder: QueryCurrentTaskRespBean.Result?) {
|
||||
if (taskAndOrder == null) return
|
||||
if ((taskAndOrder.endSite == null || taskAndOrder.currentStatus == TaskStatusEnum.CompleteTask.code)
|
||||
@@ -308,7 +297,8 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
TaskTypeEnum.VirtualTask.code -> { //演练任务
|
||||
cancelOrder.visibility = View.GONE
|
||||
orderPhoneAndNum.visibility = if (order != null &&
|
||||
currentStatus == TaskStatusEnum.CompleteTask.code) View.VISIBLE else View.GONE
|
||||
currentStatus == TaskStatusEnum.CompleteTask.code
|
||||
) View.VISIBLE else View.GONE
|
||||
taskClickBtn.visibility = View.GONE
|
||||
|
||||
naviToStart.visibility = View.GONE
|
||||
@@ -354,29 +344,28 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
updateMapMarkers()
|
||||
updateMapMarkers(taskAndOrder)
|
||||
updateRemainDistanceAndTime(false)
|
||||
}
|
||||
|
||||
private fun updateMapMarkers() {
|
||||
if (mCurrentTaskWithOrder != null && mCurrentTaskWithOrder!!.startSite != null
|
||||
&& mCurrentTaskWithOrder!!.endSite != null
|
||||
private fun updateMapMarkers(taskAndOrder: QueryCurrentTaskRespBean.Result?) {
|
||||
if (taskAndOrder != null && taskAndOrder!!.startSite != null
|
||||
&& taskAndOrder!!.endSite != null
|
||||
) {
|
||||
when (mCurrentTaskWithOrder!!.currentStatus) {
|
||||
when (taskAndOrder.currentStatus) {
|
||||
TaskStatusEnum.GetTask.code -> {
|
||||
setOrRemoveMapMaker(
|
||||
true,
|
||||
TAXI_START_MAP_MAKER,
|
||||
mCurrentTaskWithOrder!!.startSite!!.wgs84Lat,
|
||||
mCurrentTaskWithOrder!!.startSite!!.wgs84Lon,
|
||||
taskAndOrder!!.startSite!!.wgs84Lat,
|
||||
taskAndOrder!!.startSite!!.wgs84Lon,
|
||||
R.raw.star_marker
|
||||
)
|
||||
setOrRemoveMapMaker(
|
||||
true,
|
||||
TAXI_END_MAP_MAKER,
|
||||
mCurrentTaskWithOrder!!.endSite!!.wgs84Lat,
|
||||
mCurrentTaskWithOrder!!.endSite!!.wgs84Lon,
|
||||
taskAndOrder!!.endSite!!.wgs84Lat,
|
||||
taskAndOrder!!.endSite!!.wgs84Lon,
|
||||
R.raw.end_marker
|
||||
)
|
||||
}
|
||||
@@ -385,15 +374,15 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
setOrRemoveMapMaker(
|
||||
false,
|
||||
TAXI_START_MAP_MAKER,
|
||||
mCurrentTaskWithOrder!!.startSite!!.wgs84Lat,
|
||||
mCurrentTaskWithOrder!!.startSite!!.wgs84Lon,
|
||||
taskAndOrder!!.startSite!!.wgs84Lat,
|
||||
taskAndOrder!!.startSite!!.wgs84Lon,
|
||||
R.raw.star_marker
|
||||
)
|
||||
setOrRemoveMapMaker(
|
||||
true,
|
||||
TAXI_END_MAP_MAKER,
|
||||
mCurrentTaskWithOrder!!.endSite!!.wgs84Lat,
|
||||
mCurrentTaskWithOrder!!.endSite!!.wgs84Lon,
|
||||
taskAndOrder!!.endSite!!.wgs84Lat,
|
||||
taskAndOrder!!.endSite!!.wgs84Lon,
|
||||
R.raw.end_marker
|
||||
)
|
||||
}
|
||||
@@ -402,23 +391,23 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
setOrRemoveMapMaker(
|
||||
false,
|
||||
TAXI_START_MAP_MAKER,
|
||||
mCurrentTaskWithOrder!!.startSite!!.wgs84Lat,
|
||||
mCurrentTaskWithOrder!!.startSite!!.wgs84Lon,
|
||||
taskAndOrder!!.startSite!!.wgs84Lat,
|
||||
taskAndOrder!!.startSite!!.wgs84Lon,
|
||||
R.raw.star_marker
|
||||
)
|
||||
setOrRemoveMapMaker(
|
||||
false,
|
||||
TAXI_END_MAP_MAKER,
|
||||
mCurrentTaskWithOrder!!.endSite!!.wgs84Lat,
|
||||
mCurrentTaskWithOrder!!.endSite!!.wgs84Lon,
|
||||
taskAndOrder!!.endSite!!.wgs84Lat,
|
||||
taskAndOrder!!.endSite!!.wgs84Lon,
|
||||
R.raw.end_marker
|
||||
)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
d(
|
||||
M_TAXI + TAG,
|
||||
"CurrentTaskWithOrder == " + GsonUtil.jsonFromObject(mCurrentTaskWithOrder)
|
||||
TAG,
|
||||
"CurrentTaskWithOrder == " + GsonUtil.jsonFromObject(taskAndOrder)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -430,12 +419,7 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
MainMoGoApplication.getApp().applicationContext,
|
||||
R.drawable.task_order_type_btn_bg
|
||||
)
|
||||
orderPhoneAndNum.text = HtmlCompat.fromHtml(
|
||||
"<font color=\"#FFFFFF\"> " + order.bookingUserPhone + "</font>" +
|
||||
"<font color=\"#6473B2\"> | </font>" +
|
||||
"<font color=\"#FFFFFF\">" + order.passengerSize + "人" + "</font>",
|
||||
HtmlCompat.FROM_HTML_MODE_LEGACY
|
||||
)
|
||||
orderPhoneAndNum.text = TaskUtils.getCurrentTaskPhoneNumAndPassengerCountHtml(order.bookingUserPhone, order.passengerSize)
|
||||
startStationName.text = order.orderStartSite?.siteName
|
||||
endStationName.text = order.orderEndSite?.siteName
|
||||
|
||||
@@ -481,7 +465,7 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
true
|
||||
)
|
||||
hideNaviBtns()
|
||||
taskOtherInfo.text = TaskUtils.getWaitTimeHtml()
|
||||
taskOtherInfo.text = TaskUtils.getCurrentTaskWaitTimeHtml()
|
||||
}
|
||||
|
||||
TaxiOrderStatusEnum.OnTheWayToStart.code -> { //前往上车地点
|
||||
@@ -530,14 +514,14 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
val mCurLatitude = getChassisLocationGCJ02().latitude
|
||||
val mCurLongitude = getChassisLocationGCJ02().longitude
|
||||
d(
|
||||
SceneConstant.M_TAXI + TAG,
|
||||
TAG,
|
||||
"currentLatLng=$mCurLatitude $mCurLongitude"
|
||||
)
|
||||
val startNaviLatLng = NaviLatLng(mCurLatitude, mCurLongitude)
|
||||
val endNaviLatLng = NaviLatLng(stationLat, stationLng)
|
||||
AmapNaviToDestinationModel.getInstance(context).initAMapNavi(startNaviLatLng, endNaviLatLng)
|
||||
AmapNaviToDestinationModel.getInstance(context).setVoiceIsMute(isVoicePlay)
|
||||
AmapNaviToDestinationModel.getInstance(context).setOCHTaciNaviChangedCallback(this)
|
||||
AmapNaviToDestinationModel.getInstance(context).setTaxiNaviChangedCallback(this)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -546,8 +530,8 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
* @param timeInSecond 秒
|
||||
*/
|
||||
fun updateCurrentTaskTripInfo(meters: Long, timeInSecond: Long) {
|
||||
if (mCurrentTaskWithOrder == null) return
|
||||
if (mCurrentTaskWithOrder!!.endSite == null && mDriveToNearestStationTask == null) return
|
||||
val currentTaskWithOrder = TaxiTaskModel.getCurrentTaskWithOrder() ?: return
|
||||
if (currentTaskWithOrder.endSite == null && currentTaskWithOrder == null) return
|
||||
taskOtherInfo.text = TaskUtils.getCurrentTaskTripHtml(meters, timeInSecond)
|
||||
}
|
||||
|
||||
@@ -557,14 +541,15 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
}
|
||||
|
||||
private fun startOrEndService() {
|
||||
if (mCurrentTaskWithOrder == null || mCurrentTaskWithOrder!!.order == null) return
|
||||
val order = mCurrentTaskWithOrder!!.order
|
||||
val currentTaskWithOrder = TaxiTaskModel.getCurrentTaskWithOrder()
|
||||
if (currentTaskWithOrder?.order == null) return
|
||||
val order = currentTaskWithOrder?.order
|
||||
if (TaxiOrderStatusEnum.ArriveAtStart.code == order!!.orderStatus) { //到达乘客上车点,司机可跳过乘客屏认证
|
||||
mViewModel.sendUiIntent(UnmannedIntent.JumpPassengerCheck)
|
||||
mViewModel.sendUiIntent(TaskUiIntent.JumpPassengerCheck)
|
||||
} else if (TaxiOrderStatusEnum.UserArriveAtStart.code == order.orderStatus) {
|
||||
mViewModel.sendUiIntent(UnmannedIntent.StartTask)
|
||||
mViewModel.sendUiIntent(TaskUiIntent.StartTask)
|
||||
} else if (TaxiOrderStatusEnum.ArriveAtEnd.code == order.orderStatus) { //点击了完成服务,结束订单并更新订单信息
|
||||
mViewModel.sendUiIntent(UnmannedIntent.JourneyCompleted)
|
||||
mViewModel.sendUiIntent(TaskUiIntent.JourneyCompleted)
|
||||
} else if (TaxiOrderStatusEnum.OnTheWayToEnd.code == order.orderStatus) { //前往目的地过程中可提前结束行程
|
||||
//自驾中提示,接管后才能结束
|
||||
if (getState()
|
||||
@@ -587,7 +572,7 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
.build(requireContext())
|
||||
closeOrderDialog!!.setClickListener(object : OCHCommitDialog.ClickListener {
|
||||
override fun confirm() {
|
||||
mViewModel.sendUiIntent(UnmannedIntent.CloseOrderByDriver)
|
||||
mViewModel.sendUiIntent(TaskUiIntent.CloseOrderByDriver)
|
||||
}
|
||||
|
||||
override fun cancel() {
|
||||
@@ -599,21 +584,32 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
|
||||
|
||||
override fun onClick(v: View) {
|
||||
if (v.id == taskClickBtn.id) {
|
||||
d(M_TAXI + TAG, taskStatus.text.toString())
|
||||
startOrEndService()
|
||||
} else if (v.id == cancelOrder.id) {
|
||||
if (mCurrentTaskWithOrder!!.order != null) {
|
||||
activity?.also {
|
||||
TaxiOrderCancelDialog(
|
||||
it, mCurrentTaskWithOrder!!.order!!.orderStatus
|
||||
) {type ->
|
||||
mViewModel.sendUiIntent(UnmannedIntent.CancelOrder(type))
|
||||
}.show()
|
||||
if (!ClickUtils.isFastClick()) {
|
||||
i(TAG, "view点击过快")
|
||||
return
|
||||
}
|
||||
when (v.id) {
|
||||
taskClickBtn.id -> {
|
||||
d(TAG, taskStatus.text.toString())
|
||||
startOrEndService()
|
||||
}
|
||||
|
||||
cancelOrder.id -> {
|
||||
val currentWithOrder = TaxiTaskModel.getCurrentTaskWithOrder()
|
||||
if (currentWithOrder?.order != null) {
|
||||
val order = currentWithOrder.order
|
||||
activity?.also {
|
||||
TaxiOrderCancelDialog(it, order!!.orderStatus) { type ->
|
||||
mViewModel.sendUiIntent(TaskUiIntent.CancelOrder(type))
|
||||
}.show()
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (v.id == naviToStart.id || v.id == naviToEnd.id) {
|
||||
showNaviToEndStationFragment(true)
|
||||
|
||||
naviToStart.id,
|
||||
naviToEnd.id -> {
|
||||
showNaviToEndStationFragment(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -626,34 +622,30 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
mTaxiFragment?.startNaviToEndStation(isShow)
|
||||
}
|
||||
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.N)
|
||||
override fun onCurrentNaviDistAndTimeChanged(meters: Int, timeInSecond: Long) {
|
||||
updateCurrentTaskTripInfo(meters.toLong(), timeInSecond)
|
||||
}
|
||||
|
||||
override fun reInitNaviAmap(isPlay: Boolean, isRestart: Boolean) {
|
||||
d(
|
||||
SceneConstant.M_TAXI + TAG,
|
||||
"isPlay = $isPlay, isRestart=$isRestart"
|
||||
)
|
||||
d(TAG, "isPlay = $isPlay, isRestart=$isRestart")
|
||||
if (!isRestart) {
|
||||
mTaxiFragment?.showAmapNaviToStationFragment(false)
|
||||
return
|
||||
}
|
||||
val currentTaskWithOrder = TaxiTaskModel.getCurrentTaskWithOrder()
|
||||
|
||||
UiThreadHandler.postDelayed({
|
||||
updateRemainDistanceAndTime(false)
|
||||
}, 2000)
|
||||
|
||||
UiThreadHandler.postDelayed({
|
||||
if (mCurrentTaskWithOrder != null &&
|
||||
mCurrentTaskWithOrder!!.currentStatus == TaskStatusEnum.GetTask.code
|
||||
if (currentTaskWithOrder?.currentStatus == TaskStatusEnum.GetTask.code
|
||||
) {
|
||||
if (naviToStart.visibility == View.GONE) {
|
||||
naviToStart.visibility = View.VISIBLE
|
||||
}
|
||||
}
|
||||
if (mCurrentTaskWithOrder != null &&
|
||||
mCurrentTaskWithOrder!!.currentStatus == TaskStatusEnum.StartTask.code
|
||||
if (currentTaskWithOrder?.currentStatus == TaskStatusEnum.StartTask.code
|
||||
) {
|
||||
if (naviToEnd.visibility == View.GONE) {
|
||||
naviToEnd.visibility = View.VISIBLE
|
||||
@@ -663,15 +655,14 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
}
|
||||
|
||||
fun onNaviToEndStationByAmap(isShow: Boolean) {
|
||||
if (mCurrentTaskWithOrder == null) return
|
||||
val currentTaskWithOrder = TaxiTaskModel.getCurrentTaskWithOrder() ?: return
|
||||
|
||||
mTaxiFragment?.showAmapNaviToStationFragment(
|
||||
if (mCurrentTaskWithOrder!!.currentStatus == TaskStatusEnum.StartTask.code)
|
||||
if (currentTaskWithOrder.currentStatus == TaskStatusEnum.StartTask.code)
|
||||
isShow else true
|
||||
)
|
||||
|
||||
updateRemainDistanceAndTime(
|
||||
if (mCurrentTaskWithOrder!!.currentStatus == TaskStatusEnum.StartTask.code)
|
||||
if (currentTaskWithOrder.currentStatus == TaskStatusEnum.StartTask.code)
|
||||
isShow else true
|
||||
)
|
||||
}
|
||||
|
||||
@@ -26,7 +26,6 @@ import com.mogo.och.taxi.constant.TaxiUnmannedConst
|
||||
import com.mogo.och.taxi.network.TaxiTaskWithOrderServiceManager
|
||||
import com.mogo.och.taxi.network.TaxiTaskWithOrderServiceManager.cancelOrder
|
||||
import com.mogo.och.taxi.ui.unmanned.TaskWithOrderUIState
|
||||
import com.mogo.och.taxi.ui.unmanned.UnmannedIntent
|
||||
import com.mogo.och.taxi.ui.unmanned.UnmannedState
|
||||
import com.mogo.och.taxi.utils.TaxiTrajectoryManager
|
||||
|
||||
@@ -34,7 +33,7 @@ import com.mogo.och.taxi.utils.TaxiTrajectoryManager
|
||||
* @author: wangmingjun
|
||||
* @date: 2023/7/26
|
||||
*/
|
||||
class TaxiCurrentTaskViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(),
|
||||
class TaxiCurrentTaskViewModel : BaseViewModel<UnmannedState, TaskUiIntent>(),
|
||||
ITaxiTaskWithOrderCallback, ITaxiCarServiceCallback {
|
||||
|
||||
private val TAG = SceneConstant.M_TAXI + "TaxiUnmannedViewModel"
|
||||
@@ -50,31 +49,31 @@ class TaxiCurrentTaskViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(),
|
||||
|
||||
override fun handleIntent(intent: IUiIntent) {
|
||||
when (intent) {
|
||||
is UnmannedIntent.StartTaskWithOrderLooper -> { //开始轮询
|
||||
is TaskUiIntent.StartTaskWithOrderLooper -> { //开始轮询
|
||||
startOrStopCurrentTaskWithOrderLoop(true)
|
||||
}
|
||||
|
||||
is UnmannedIntent.StartOrEndTakeOrder -> {//开始、暂停接单
|
||||
is TaskUiIntent.StartOrEndTakeOrder -> {//开始、暂停接单
|
||||
TaxiTaskModel.updateCarServingStatus()
|
||||
}
|
||||
|
||||
is UnmannedIntent.JumpPassengerCheck -> { //手动点击跳过乘客验证
|
||||
is TaskUiIntent.JumpPassengerCheck -> { //手动点击跳过乘客验证
|
||||
jumpPassengerCheck()
|
||||
}
|
||||
|
||||
is UnmannedIntent.JourneyCompleted -> { //点击服务完成
|
||||
is TaskUiIntent.JourneyCompleted -> { //点击服务完成
|
||||
journeyCompleted()
|
||||
}
|
||||
|
||||
is UnmannedIntent.CloseOrderByDriver -> {
|
||||
is TaskUiIntent.CloseOrderByDriver -> {
|
||||
closeOrderByDriver()
|
||||
}
|
||||
|
||||
is UnmannedIntent.CancelOrder -> {// 取消订单, 暂未加取消类型和原因
|
||||
is TaskUiIntent.CancelOrder -> {// 取消订单, 暂未加取消类型和原因
|
||||
cancelOrder(intent.type)
|
||||
}
|
||||
|
||||
is UnmannedIntent.StartTask -> {
|
||||
is TaskUiIntent.StartTask -> {
|
||||
startTask()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +1,19 @@
|
||||
package com.mogo.och.taxi.ui.task
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.GradientDrawable
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.core.text.HtmlCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.mogo.commons.mvp.BaseFragment
|
||||
import com.mogo.eagle.core.function.main.MainMoGoApplication
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.och.taxi.R
|
||||
import com.mogo.och.taxi.bean.OrderDetail
|
||||
import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean
|
||||
import com.mogo.och.taxi.constant.TaskStatusEnum
|
||||
import com.mogo.och.taxi.constant.TaskTypeEnum
|
||||
import com.mogo.och.taxi.utils.TaskUtils
|
||||
import kotlinx.android.synthetic.main.task_fragment_current.endStationName
|
||||
import kotlinx.android.synthetic.main.task_fragment_current.mCurrentTaskLayout
|
||||
import kotlinx.android.synthetic.main.task_fragment_current.naviToEnd
|
||||
@@ -28,8 +31,7 @@ import kotlinx.android.synthetic.main.task_fragment_current.taskTypeTv
|
||||
*/
|
||||
class TaxiNextTaskFragment : BaseFragment() {
|
||||
companion object {
|
||||
const val TAG = "TaxiNextTaskFragment"
|
||||
|
||||
val TAG = SceneConstant.M_TAXI + javaClass.simpleName
|
||||
fun newInstance(): TaxiNextTaskFragment {
|
||||
val args = Bundle()
|
||||
val fragment = TaxiNextTaskFragment()
|
||||
@@ -47,36 +49,36 @@ class TaxiNextTaskFragment : BaseFragment() {
|
||||
}
|
||||
|
||||
override fun initViews() {
|
||||
showNoTaskView()
|
||||
showNoNextTaskView()
|
||||
}
|
||||
|
||||
fun onTaskDataChanged(model: QueryCurrentTaskRespBean.Result?) {
|
||||
if (model?.order == null) {
|
||||
showNoTaskView()
|
||||
fun onTaskDataChanged(taskWithOrder: QueryCurrentTaskRespBean.Result?) {
|
||||
if (taskWithOrder?.order == null) {
|
||||
showNoNextTaskView()
|
||||
return
|
||||
}
|
||||
|
||||
if (model.taskType == TaskTypeEnum.VirtualTask.code) {
|
||||
val order = model.order
|
||||
if (taskWithOrder.taskType == TaskTypeEnum.VirtualTask.code &&
|
||||
taskWithOrder.currentStatus != TaskStatusEnum.CompleteTask.code
|
||||
) {
|
||||
val order = taskWithOrder.order
|
||||
updateTaskUI(order!!)
|
||||
} else {
|
||||
showNoTaskView()
|
||||
showNoNextTaskView()
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
private fun updateTaskUI(order: OrderDetail) {
|
||||
showTaskView()
|
||||
showNextTaskView()
|
||||
taskOtherInfo.visibility = View.GONE
|
||||
naviToStart.visibility = View.GONE
|
||||
naviToEnd.visibility = View.GONE
|
||||
|
||||
orderPhoneAndNum.text = HtmlCompat.fromHtml(
|
||||
"<font color=\"#FFFFFF\"> " + order.bookingUserPhone + "</font>" +
|
||||
"<font color=\"#6473B2\"> | </font>" +
|
||||
"<font color=\"#FFFFFF\">" + order.passengerSize + "人" + "</font>",
|
||||
HtmlCompat.FROM_HTML_MODE_LEGACY
|
||||
)
|
||||
orderPhoneAndNum.text =
|
||||
TaskUtils.getNextTaskPhoneNumAndPassengerCountHtml(
|
||||
order.bookingUserPhone,
|
||||
order.passengerSize
|
||||
)
|
||||
|
||||
order.orderStartSite?.let {
|
||||
startStationName.text = it.siteName
|
||||
@@ -86,7 +88,11 @@ class TaxiNextTaskFragment : BaseFragment() {
|
||||
}
|
||||
|
||||
taskTypeTv.text = resources.getString(R.string.task_order)
|
||||
taskTypeTv.background = resources.getDrawable(R.drawable.task_order_type_btn_bg, null)
|
||||
taskTypeTv.background =
|
||||
ContextCompat.getDrawable(
|
||||
MainMoGoApplication.getApp().applicationContext,
|
||||
R.drawable.task_order_type_btn_bg
|
||||
)
|
||||
|
||||
updateTaskContainerBottomBtn(
|
||||
getString(R.string.waiting_server),
|
||||
@@ -110,12 +116,12 @@ class TaxiNextTaskFragment : BaseFragment() {
|
||||
taskClickBtn.isClickable = isClickable
|
||||
}
|
||||
|
||||
private fun showNoTaskView() {
|
||||
private fun showNoNextTaskView() {
|
||||
noTaskData.visibility = View.VISIBLE
|
||||
mCurrentTaskLayout.visibility = View.GONE
|
||||
}
|
||||
|
||||
private fun showTaskView() {
|
||||
private fun showNextTaskView() {
|
||||
noTaskData.visibility = View.GONE
|
||||
mCurrentTaskLayout.visibility = View.VISIBLE
|
||||
}
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
package com.mogo.och.taxi.ui.unmanned
|
||||
|
||||
import com.mogo.och.taxi.base.IUiIntent
|
||||
|
||||
/**
|
||||
* @author: wangmingjun
|
||||
* @date: 2023/7/26
|
||||
*/
|
||||
sealed class UnmannedIntent: IUiIntent{
|
||||
|
||||
//开始接单 、 暂停接单
|
||||
object StartOrEndTakeOrder : UnmannedIntent()
|
||||
|
||||
object StartTaskWithOrderLooper : UnmannedIntent()
|
||||
|
||||
//取消订单
|
||||
class CancelOrder(val type: Int) : UnmannedIntent()
|
||||
|
||||
object StartTask: UnmannedIntent()
|
||||
|
||||
//订单服务完成
|
||||
object JourneyCompleted: UnmannedIntent()
|
||||
|
||||
//跳过乘客验证
|
||||
object JumpPassengerCheck : UnmannedIntent()
|
||||
|
||||
//司机端手动结束订单
|
||||
object CloseOrderByDriver : UnmannedIntent()
|
||||
|
||||
}
|
||||
@@ -40,7 +40,7 @@ object TaskUtils {
|
||||
return HtmlCompat.fromHtml(strHtml, HtmlCompat.FROM_HTML_MODE_LEGACY)
|
||||
}
|
||||
|
||||
fun getWaitTimeHtml(): Spanned {
|
||||
fun getCurrentTaskWaitTimeHtml(): Spanned {
|
||||
val currentCale = DateTimeUtils.getCurrentDateTime()
|
||||
val currentDay =
|
||||
DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.yyyy_MM_dd)
|
||||
@@ -71,4 +71,22 @@ object TaskUtils {
|
||||
+ "<font color=\"#CAD6FF\">,总用时 </font>" + "<font color=\"#FFFFFF\"> $duration </font>" + "<font color=\"#CAD6FF\"> 分钟</font>")
|
||||
return HtmlCompat.fromHtml(strHtml, HtmlCompat.FROM_HTML_MODE_LEGACY)
|
||||
}
|
||||
|
||||
fun getCurrentTaskPhoneNumAndPassengerCountHtml(phoneNum: String, passengerSize: Int): Spanned {
|
||||
return HtmlCompat.fromHtml(
|
||||
"<font color=\"#FFFFFF\"> " + phoneNum + "</font>" +
|
||||
"<font color=\"#6473B2\"> | </font>" +
|
||||
"<font color=\"#FFFFFF\">" + passengerSize + "人" + "</font>",
|
||||
HtmlCompat.FROM_HTML_MODE_LEGACY
|
||||
)
|
||||
}
|
||||
|
||||
fun getNextTaskPhoneNumAndPassengerCountHtml(phoneNum: String, passengerSize: Int): Spanned {
|
||||
return HtmlCompat.fromHtml(
|
||||
"<font color=\"#FFFFFF\"> " + phoneNum + "</font>" +
|
||||
"<font color=\"#6473B2\"> | </font>" +
|
||||
"<font color=\"#FFFFFF\">" + passengerSize + "人" + "</font>",
|
||||
HtmlCompat.FROM_HTML_MODE_LEGACY
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user