diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/bean/UnmannedTaskBean.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/bean/UnmannedTaskBean.kt index 893e68040b..891208987a 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/bean/UnmannedTaskBean.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/bean/UnmannedTaskBean.kt @@ -1,5 +1,7 @@ package com.mogo.och.taxi.bean +import android.text.Spanned +import androidx.core.text.HtmlCompat import com.mogo.eagle.core.data.BaseData /** @@ -44,8 +46,10 @@ data class OrderDetail( } } -data class Site(var siteId: Long, var siteName: String, var gcjLat: Double, var gcjLon: Double, - var wgs84Lon: Double, var wgs84Lat: Double) { +data class Site( + var siteId: Long, var siteName: String, var gcjLat: Double, var gcjLon: Double, + var wgs84Lon: Double, var wgs84Lat: Double +) { override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false @@ -69,6 +73,16 @@ data class QueryCurrentTaskRespBean(var data: Result?) : BaseData() { var startSite: Site?, var endSite: Site?, var order: OrderDetail? ) { + companion object { + @JvmStatic + fun getCurrentTaskTotalAndDurationHtml(mileage: Float, duration: Int): Spanned { + val strHtml = + ("全程 " + " $mileage " + " 公里 " + + ",总用时 " + " $duration " + " 分钟") + return HtmlCompat.fromHtml(strHtml, HtmlCompat.FROM_HTML_MODE_LEGACY) + } + } + // servingStatus = 0 //暂停接单 = 1 //开始接单 //taskType = 1 //虚拟任务 = 2 //接驾任务 = 3 //送驾任务 //currentStatus 0:空闲 1:获取任务 2:开始任务 3:到达目的地 @@ -95,8 +109,8 @@ data class StartTaskReqBean(var sn: String, var lineId: Long) data class ArriveSiteReqBean(var sn: String, var siteId: Long) data class PrepareTaskReqBean(var sn: String, var siteId: Long) -data class PrepareTaskRespBean(var data: Result?): BaseData(){ //taskType 1:虚拟任务 2:接驾任务3:送驾任务 - data class Result( +data class PrepareTaskRespBean(var data: Result?) : BaseData() { //taskType 1:虚拟任务 2:接驾任务3:送驾任务 + data class Result( var lineId: Long, var cityCode: Int, var taskType: Int, var startSite: Site, var endSite: Site ) @@ -106,18 +120,18 @@ data class JumpPassengerCheckReqBean(var sn: String, var orderNo: String) data class CancelOrderReqBean(var sn: String, var orderNo: String, var cancelType: Int) data class OrderCompletedReqBean(var sn: String, var orderNo: String) data class QueryCarOrderByNoReqBean(var sn: String, var orderNo: String) -data class QueryCarOrderByNoRespBean(var data: Result): BaseData(){ +data class QueryCarOrderByNoRespBean(var data: Result) : BaseData() { data class Result( var sn: String, var orderNo: String, var orderStatus: Int, var bookingUserPhone: String, var businessType: String, - var mileage: Float,var duration: Float,var passengerSize: Int + var mileage: Float, var duration: Float, var passengerSize: Int ) } data class ContrailListRespBean(var data: MutableList?) //轨迹路线集合 : BaseData() { data class Result( - var lineId: Long,var lineName: String, var csvFileUrl: String, var csvFileMd5: String, + var lineId: Long, var lineName: String, var csvFileUrl: String, var csvFileMd5: String, var txtFileUrl: String, var txtFileMd5: String, var contrailSaveTime: Long, var csvFileUrlDPQP: String, var csvFileMd5DPQP: String, var txtFileUrlDPQP: String, var txtFileMd5DPQP: String, var contrailSaveTimeDPQP: Long diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/base/TaxiFragment.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/base/TaxiFragment.kt index dd3e816f4d..b378fea9e1 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/base/TaxiFragment.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/base/TaxiFragment.kt @@ -1,12 +1,10 @@ package com.mogo.och.taxi.ui.base -import android.os.Build import android.os.Bundle import android.text.TextUtils import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.annotation.RequiresApi import androidx.fragment.app.FragmentTransaction import com.alibaba.android.arouter.launcher.ARouter import com.mogo.commons.module.status.MogoStatusManager @@ -21,7 +19,7 @@ import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean import com.mogo.och.taxi.model.TaxiModel import com.mogo.och.taxi.network.LoginBusImpl import com.mogo.och.taxi.ui.TaxiPersonalDialogFragment -import com.mogo.och.taxi.ui.TaxiServerOrdersFragment +import com.mogo.och.taxi.ui.TaxiTaskTabFragment import com.mogo.och.taxi.utils.TPRouteDataTestUtils import kotlinx.android.synthetic.main.taxi_base_fragment.module_mogo_och_operation_status import kotlinx.android.synthetic.main.taxi_base_fragment.taxi_driver_role_tv @@ -48,7 +46,7 @@ class TaxiFragment : BaseTaxiTabFragment(), } } - private var servedOrdersFragment: WeakReference? = null + private var taskTabFragment: WeakReference? = null private var personalDialogFragment: WeakReference? = null private var loginService: LoginService? = null @@ -126,10 +124,10 @@ class TaxiFragment : BaseTaxiTabFragment(), } private fun initFragment() { - servedOrdersFragment = WeakReference(TaxiServerOrdersFragment.newInstance()) + taskTabFragment = WeakReference(TaxiTaskTabFragment.newInstance()) val transaction: FragmentTransaction = childFragmentManager.beginTransaction() //默认显示OCHTaxiServerOrdersFragment - servedOrdersFragment?.get()?.let { + taskTabFragment?.get()?.let { transaction.add(R.id.fragment_container, it).show( it ) @@ -143,14 +141,13 @@ class TaxiFragment : BaseTaxiTabFragment(), override fun onChangeOperationStatus() { super.onChangeOperationStatus() - if (null == servedOrdersFragment || servedOrdersFragment!!.get() == null) return - servedOrdersFragment!!.get()!!.onChangeOperationStatus() + if (null == taskTabFragment || taskTabFragment!!.get() == null) return + taskTabFragment!!.get()!!.onOperationStatusChanged() } - @RequiresApi(Build.VERSION_CODES.N) - fun updateReserveOrderChanged(taskAndOrder: QueryCurrentTaskRespBean.Result?) { - if (null == servedOrdersFragment || servedOrdersFragment!!.get() == null) return - servedOrdersFragment!!.get()!!.updateOrderChanged(taskAndOrder) + fun updateNextTaskFragment(taskAndOrder: QueryCurrentTaskRespBean.Result?) { + if (null == taskTabFragment || taskTabFragment!!.get() == null) return + taskTabFragment!!.get()!!.updateOrderChanged(taskAndOrder) } fun switchVRFlatMode(isVRMode: Boolean) { @@ -211,8 +208,8 @@ class TaxiFragment : BaseTaxiTabFragment(), fun onNaviToEnd(isAmap: Boolean, isShow: Boolean) { if (isAmap) { - if (null == servedOrdersFragment || servedOrdersFragment!!.get() == null) return - servedOrdersFragment!!.get()!!.onNaviToEndAMap(isShow) + if (null == taskTabFragment || taskTabFragment!!.get() == null) return + taskTabFragment!!.get()!!.onNaviToEndAMap(isShow) } else if (isShow) { //使用routing数据 showRoutingToStationFragment(true) } else { @@ -247,8 +244,8 @@ class TaxiFragment : BaseTaxiTabFragment(), } fun onCurrentOrderDistToEndChanged(meters: Long, timeInSecond: Long) { - if (null == servedOrdersFragment || servedOrdersFragment!!.get() == null) return - servedOrdersFragment!!.get()!!.onCurrentOrderDistToEndChanged(meters, timeInSecond) + if (null == taskTabFragment || taskTabFragment!!.get() == null) return + taskTabFragment!!.get()!!.onCurrentOrderDistToEndChanged(meters, timeInSecond) } private fun testRouteInfoUpload() { diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/debug/OrderDebugView.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/debug/DebugView.kt similarity index 94% rename from OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/debug/OrderDebugView.kt rename to OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/debug/DebugView.kt index 2ce91eb17b..e336ea75a2 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/debug/OrderDebugView.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/debug/DebugView.kt @@ -8,7 +8,6 @@ import android.widget.LinearLayout import com.mogo.eagle.core.network.utils.GsonUtil import com.mogo.och.taxi.R import com.mogo.och.taxi.model.TaxiModel -import kotlinx.android.synthetic.main.taxi_debug_order.view.orderDebugContainer import kotlinx.android.synthetic.main.taxi_debug_order.view.orderInfo import kotlinx.android.synthetic.main.taxi_debug_order.view.orderToStartLines import kotlinx.android.synthetic.main.taxi_debug_order.view.taskEndSite @@ -22,14 +21,14 @@ import kotlinx.android.synthetic.main.taxi_debug_order.view.test_bar_current_sto import kotlinx.android.synthetic.main.taxi_debug_order.view.test_bar_current_traj_md5 import kotlinx.android.synthetic.main.taxi_debug_order.view.test_bar_current_traj_md5_dpqp -class OrderDebugView @JvmOverloads constructor( +class DebugView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0, defStyleRes: Int = 0 ) : LinearLayout(context, attrs, defStyleAttr, defStyleRes) { companion object { - const val TAG = "OrderDebugView" + const val TAG = "DebugView" } init { diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/TaxiBeingTaskFragment.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskFragment.kt similarity index 61% rename from OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/TaxiBeingTaskFragment.kt rename to OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskFragment.kt index 42625b9a1c..647ad81b88 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/TaxiBeingTaskFragment.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskFragment.kt @@ -1,7 +1,6 @@ package com.mogo.och.taxi.ui import android.annotation.SuppressLint -import android.app.Activity import android.graphics.Color import android.graphics.drawable.GradientDrawable import android.os.Build @@ -9,6 +8,7 @@ import android.os.Bundle import android.text.Html import android.view.View import androidx.annotation.RequiresApi +import androidx.core.text.HtmlCompat import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import com.amap.api.navi.model.NaviLatLng @@ -16,8 +16,6 @@ import com.mogo.commons.mvp.BaseFragment import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.getState import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02 -import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getMapUIController -import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getOverlayManager 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 @@ -25,14 +23,10 @@ import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_ import com.mogo.eagle.core.utilcode.util.DateTimeUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler -import com.mogo.map.overlay.core.Level -import com.mogo.map.overlay.point.Point import com.mogo.och.common.module.map.AmapNaviToDestinationModel import com.mogo.och.common.module.map.ICommonNaviChangedCallback import com.mogo.och.common.module.utils.DateTimeUtil import com.mogo.och.common.module.utils.NumberFormatUtil -import com.mogo.och.common.module.utils.OCHThreadPoolManager -import com.mogo.och.common.module.voice.VoiceNotice.showNotice import com.mogo.och.common.module.wigets.OCHCommitDialog import com.mogo.och.taxi.R import com.mogo.och.taxi.bean.OrderDetail @@ -45,26 +39,26 @@ import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.TAXI_END_MAP_MAKER import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.TAXI_START_MAP_MAKER import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.TYPE_MARKER_TAXI_ORDER import com.mogo.och.taxi.model.TaxiModel -import com.mogo.och.taxi.model.TaxiUnmannedViewModel import com.mogo.och.taxi.ui.base.TaxiFragment +import com.mogo.och.taxi.ui.task.TaxiCurrentTaskViewModel import com.mogo.och.taxi.ui.unmanned.TaskAndOrderUiState import com.mogo.och.taxi.ui.unmanned.UnmannedIntent import com.mogo.och.taxi.utils.MapMakerManager +import kotlinx.android.synthetic.main.task_fragment_current.cancelOrder +import kotlinx.android.synthetic.main.task_fragment_current.endPoint +import kotlinx.android.synthetic.main.task_fragment_current.endStationName +import kotlinx.android.synthetic.main.task_fragment_current.mBeingOrderLayout +import kotlinx.android.synthetic.main.task_fragment_current.naviToEnd +import kotlinx.android.synthetic.main.task_fragment_current.naviToStart +import kotlinx.android.synthetic.main.task_fragment_current.noTaskData +import kotlinx.android.synthetic.main.task_fragment_current.orderPhoneAndNum +import kotlinx.android.synthetic.main.task_fragment_current.startPoint +import kotlinx.android.synthetic.main.task_fragment_current.startStationName +import kotlinx.android.synthetic.main.task_fragment_current.taskClickBtn +import kotlinx.android.synthetic.main.task_fragment_current.taskOtherInfo +import kotlinx.android.synthetic.main.task_fragment_current.taskStatus +import kotlinx.android.synthetic.main.task_fragment_current.taskTypeTv import kotlinx.android.synthetic.main.taxi_no_data_common_view.noOrderDataTv -import kotlinx.android.synthetic.main.unmanned_being_order.cancelOrder -import kotlinx.android.synthetic.main.unmanned_being_order.endPoint -import kotlinx.android.synthetic.main.unmanned_being_order.endStationName -import kotlinx.android.synthetic.main.unmanned_being_order.mBeingOrderLayout -import kotlinx.android.synthetic.main.unmanned_being_order.naviToEnd -import kotlinx.android.synthetic.main.unmanned_being_order.naviToStart -import kotlinx.android.synthetic.main.unmanned_being_order.noTaskData -import kotlinx.android.synthetic.main.unmanned_being_order.orderPhoneAndNum -import kotlinx.android.synthetic.main.unmanned_being_order.startPoint -import kotlinx.android.synthetic.main.unmanned_being_order.startStationName -import kotlinx.android.synthetic.main.unmanned_being_order.taskClickBtn -import kotlinx.android.synthetic.main.unmanned_being_order.taskOtherInfo -import kotlinx.android.synthetic.main.unmanned_being_order.taskStatus -import kotlinx.android.synthetic.main.unmanned_being_order.taskTypeTv import kotlinx.coroutines.flow.map import java.util.Calendar import kotlin.math.ceil @@ -74,155 +68,141 @@ import kotlin.math.roundToInt * @author: wangmingjun * @date: 2023/7/24 */ -class TaxiBeingTaskFragment : BaseFragment(), +class TaxiCurrentTaskFragment : BaseFragment(), View.OnClickListener, ICommonNaviChangedCallback { - private lateinit var mViewModel : TaxiUnmannedViewModel + private lateinit var mViewModel: TaxiCurrentTaskViewModel + private var mCurrentTaskWithOrder: QueryCurrentTaskRespBean.Result? = null - @Volatile - private var mTtsLessThan200Tip = 0 //离终点200米提示播报 - private var mCurrentTaskAndOrder: QueryCurrentTaskRespBean.Result? = null - private var mCurrentUntruthTask: StartServiceRespBean.Result? = null + // 开始接单后 需要将车开到最近的一个站点就位,然后才能开启 无人化 流程 + private var mDriveToNearestStationTask: StartServiceRespBean.Result? = null companion object { - const val TAG = "TaxiBeingTaskFragment" - @SuppressLint("StaticFieldLeak") - private var mActivity: Activity? = null - @SuppressLint("StaticFieldLeak") + const val TAG = "TaxiCurrentTaskFragment" + private var mTaxiFragment: TaxiFragment? = null - fun newInstance( - activity: Activity?, - taxiFragment: TaxiFragment? - ): TaxiBeingTaskFragment { - mActivity = activity + fun newInstance(taxiFragment: TaxiFragment?): TaxiCurrentTaskFragment { mTaxiFragment = taxiFragment val args = Bundle() - val fragment = TaxiBeingTaskFragment() + val fragment = TaxiCurrentTaskFragment() fragment.arguments = args return fragment } } override fun getLayoutId(): Int { - return R.layout.unmanned_being_order + return R.layout.task_fragment_current } override fun getTagName(): String { - return "TaxiBeingTaskFragment" + return "TaxiCurrentTaskFragment" } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - d("viewModel ==", "TaxiBeingTaskFragment onCreate") - mViewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory())[TaxiUnmannedViewModel::class.java] + mViewModel = ViewModelProvider( + this, + ViewModelProvider.NewInstanceFactory() + )[TaxiCurrentTaskViewModel::class.java] } - @RequiresApi(Build.VERSION_CODES.N) override fun initViews() { - initNaviView() - isHaveBeingOrder(false) initOnClickListener() - //任意模式下调试信息都打开 - initOrderTestBar() - - initData() + initContainerView(false) + initTaskDebugViewListener() + initViewModelObserver() } - @RequiresApi(Build.VERSION_CODES.N) - private fun initData() { + /** + * 是否有正在进行的订单,进行UI显示 + * + * @param being + */ + private fun initContainerView(hasCurrentTask: Boolean) { + d( + M_TAXI + TAG, + "hasCurrentTask = $hasCurrentTask" + ) + try { + if (hasCurrentTask) { + noTaskData.visibility = View.GONE + mBeingOrderLayout.visibility = View.VISIBLE + } else { + noTaskData.visibility = View.VISIBLE + noOrderDataTv.text = "暂无进行中订单" + mBeingOrderLayout.visibility = View.GONE + } + } catch (e: NullPointerException) { //可能会出现订单信息已经轮询回来,但进行中页面控件还未初始化完成的情况 + TaxiModel.clearCurrentOCHOrder() + } + } + private fun initOnClickListener() { + naviToStart.setOnClickListener(this) + naviToEnd.setOnClickListener(this) + + cancelOrder.setOnClickListener(this) + taskStatus.setOnClickListener(this) + taskClickBtn.setOnClickListener(this) + } + + private fun initTaskDebugViewListener() { + taskStatus.setOnLongClickListener { + mTaxiFragment?.clickOrderDebugView() + false + } + } + + private fun initViewModelObserver() { mViewModel.sendUiIntent(UnmannedIntent.StartTaskOrOrderLooper) //监听返回的数据状态 lifecycleScope.launchWhenStarted { - mViewModel.uiStateFlow.map {it.taskAndOrderUiState}.collect {taskAndOrderUiState -> - d(TAG,"uiStateFlow-taskAndOrderUiState: $taskAndOrderUiState") - when(taskAndOrderUiState){ - is TaskAndOrderUiState.INIT -> { + mViewModel.uiStateFlow.map { it.taskAndOrderUiState }.collect { taskAndOrderUiState -> + d(TAG, "uiStateFlow-initViewModelObserver: $taskAndOrderUiState") + when (taskAndOrderUiState) { + is TaskAndOrderUiState.INIT -> { + } + is TaskAndOrderUiState.TASKANDORDER -> { + mDriveToNearestStationTask = taskAndOrderUiState.untruthTask + mCurrentTaskWithOrder = taskAndOrderUiState.taskAndOrder + + if ((taskAndOrderUiState.untruthTask == null + && mCurrentTaskWithOrder != null + && mCurrentTaskWithOrder!!.endSite == null) + || mCurrentTaskWithOrder == null + ) { + initContainerView(false) + removeAllMapMarker() + return@collect } - is TaskAndOrderUiState.TASKANDORDER -> { - - mCurrentUntruthTask = taskAndOrderUiState.untruthTask - mCurrentTaskAndOrder = taskAndOrderUiState.taskAndOrder - - if ((taskAndOrderUiState.untruthTask == null && mCurrentTaskAndOrder != null - && mCurrentTaskAndOrder!!.endSite == null) || mCurrentTaskAndOrder == null){ - isHaveBeingOrder(false) - removeAllMapMarker() - return@collect - } - - if (taskAndOrderUiState.untruthTask != null){ - updateUntruthTask(taskAndOrderUiState.untruthTask) - }else{ - updateReserveOrderChanged(taskAndOrderUiState.taskAndOrder) - updateCurrentTaskAndOrderStatusChanged(taskAndOrderUiState.taskAndOrder) - } - } - - is TaskAndOrderUiState.UPDATEORDERMILEANDDUR -> { - updateOrderTotalMilAndDur(taskAndOrderUiState.mileage,taskAndOrderUiState.duration) + if (taskAndOrderUiState.untruthTask != null) { + updateDriveToNearestStationTaskView(taskAndOrderUiState.untruthTask) + } else { + updateNextTaskFragment(taskAndOrderUiState.taskAndOrder) + updateCurrentTaskAndOrderStatusChanged(taskAndOrderUiState.taskAndOrder) } } + + is TaskAndOrderUiState.UPDATEORDERMILEANDDUR -> { + taskOtherInfo.text = + QueryCurrentTaskRespBean.Result.getCurrentTaskTotalAndDurationHtml( + taskAndOrderUiState.mileage, + taskAndOrderUiState.duration + ) + } } + } } } - @RequiresApi(Build.VERSION_CODES.N) - private fun updateOrderTotalMilAndDur(mileage: Float, duration: Int) { - val strHtml2 = - ("全程 " + " $mileage " + " 公里 " - + ",总用时 " + " $duration " + " 分钟") - taskOtherInfo.text = Html.fromHtml(strHtml2,Html.FROM_HTML_MODE_LEGACY) - } - - @RequiresApi(Build.VERSION_CODES.N) - private fun updateReserveOrderChanged(taskAndOrder: QueryCurrentTaskRespBean.Result?) { - mTaxiFragment?.let { - it.updateReserveOrderChanged(taskAndOrder) - } - } - - fun onChangeOperationStatus(){ - mViewModel.sendUiIntent(UnmannedIntent.StartOrPauseReceivingOrder) - } - - private fun updateUntruthTask(untruthTask: StartServiceRespBean.Result?) { - if (untruthTask == null) return - isHaveBeingOrder(true) - updateUntruthTaskView() - updateUntruthTaskUIData(untruthTask.siteName) - updateUntruthTaskOtherInfo() - } - - private fun updateUntruthTaskOtherInfo() { - if (mCurrentUntruthTask != null){ - startNaviToStation(false, mCurrentUntruthTask!!.gcjLat, - mCurrentUntruthTask!!.gcjLon) - } - } - - private fun updateUntruthTaskUIData(siteName: String) { - taskStatus.text = resources.getString(R.string.task_start_to_virtual_site) - startStationName.text = resources.getString(R.string.task_current_loc) - endStationName.text = siteName - setPointBlueGreen() - } - - private fun setPointBlueGreen(){ - startPoint.setImageResource(R.drawable.taxi_driver_circle_blue_big) - endPoint.setImageResource(R.drawable.taxi_driver_circle_green_big) - } - - private fun setPointGreenBlue(){ - startPoint.setImageResource(R.drawable.taxi_driver_circle_green_big) - endPoint.setImageResource(R.drawable.taxi_driver_circle_blue_big) - } - - private fun updateUntruthTaskView() { - taskStatus.visibility = View.VISIBLE + private fun updateDriveToNearestStationTaskView(driveToNearestStationTask: StartServiceRespBean.Result?) { + if (driveToNearestStationTask == null) return + initContainerView(true) + // DriverToNearestStationTask 更新 + taskStatus.visibility = View.VISIBLE taskTypeTv.visibility = View.GONE cancelOrder.visibility = View.GONE orderPhoneAndNum.visibility = View.GONE @@ -231,37 +211,63 @@ class TaxiBeingTaskFragment : BaseFragment(), taskClickBtn.visibility = View.GONE naviToStart.visibility = View.GONE naviToEnd.visibility = View.VISIBLE - taskOtherInfo.visibility = View.VISIBLE + taskOtherInfo.visibility = View.VISIBLE + + // 更新任务状态,起点,终点 + taskStatus.text = resources.getString(R.string.task_start_to_virtual_site) + startStationName.text = resources.getString(R.string.task_current_loc) + endStationName.text = driveToNearestStationTask.siteName + updateStartAndEndStationPointByStatus(true) + + // 使用高德获取导航数据 + if (mDriveToNearestStationTask != null) { + startNaviToStation( + false, mDriveToNearestStationTask!!.gcjLat, + mDriveToNearestStationTask!!.gcjLon + ) + } } - private fun initOnClickListener() { - cancelOrder.setOnClickListener(this) - taskStatus.setOnClickListener(this) - taskClickBtn.setOnClickListener(this) + private fun updateStartAndEndStationPointByStatus(isGoingToStation: Boolean) { + if (isGoingToStation) {// 即将到达的站点 + startPoint.setImageResource(R.drawable.taxi_driver_circle_blue_big) + endPoint.setImageResource(R.drawable.taxi_driver_circle_green_big) + } else {// 到达站点 或 已经经过的站点 + startPoint.setImageResource(R.drawable.taxi_driver_circle_green_big) + endPoint.setImageResource(R.drawable.taxi_driver_circle_blue_big) + } } - private fun initNaviView() { - naviToStart.setOnClickListener(this) - naviToEnd.setOnClickListener(this) + private fun updateNextTaskFragment(taskAndOrder: QueryCurrentTaskRespBean.Result?) { + mTaxiFragment?.let { + it.updateNextTaskFragment(taskAndOrder) + } } - private fun updateRemainDistanceAndTime(isVoicePlay: Boolean){ + fun onOperationStatusChanged() { + mViewModel.sendUiIntent(UnmannedIntent.StartOrPauseReceivingOrder) + } + + private fun updateRemainDistanceAndTime(isVoicePlay: Boolean) { //根据任务状态计算剩余历程和时间 - if (mCurrentTaskAndOrder == null) return - - if (mCurrentTaskAndOrder!!.endSite != null - && mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.StartTask.code){ - - startNaviToStation(isVoicePlay,mCurrentTaskAndOrder!!.endSite!!.gcjLat, - mCurrentTaskAndOrder!!.endSite!!.gcjLon) + if (mCurrentTaskWithOrder == null) return + if (mCurrentTaskWithOrder!!.endSite != null + && mCurrentTaskWithOrder!!.currentStatus == TaskStatusEnum.StartTask.code + ) { + startNaviToStation( + isVoicePlay, mCurrentTaskWithOrder!!.endSite!!.gcjLat, + mCurrentTaskWithOrder!!.endSite!!.gcjLon + ) return } - if (mCurrentTaskAndOrder!!.startSite != null - && mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.GetTask.code){ //演练任务和送驾任务 - - startNaviToStation(isVoicePlay,mCurrentTaskAndOrder!!.startSite!!.gcjLat, - mCurrentTaskAndOrder!!.startSite!!.gcjLon) + if (mCurrentTaskWithOrder!!.startSite != null + && mCurrentTaskWithOrder!!.currentStatus == TaskStatusEnum.GetTask.code + ) { //演练任务和送驾任务 + startNaviToStation( + isVoicePlay, mCurrentTaskWithOrder!!.startSite!!.gcjLat, + mCurrentTaskWithOrder!!.startSite!!.gcjLon + ) } } @@ -273,13 +279,14 @@ class TaxiBeingTaskFragment : BaseFragment(), fun updateCurrentTaskAndOrderStatusChanged(taskAndOrder: QueryCurrentTaskRespBean.Result?) { if (taskAndOrder == null) return if ((taskAndOrder.endSite == null || taskAndOrder.currentStatus == TaskStatusEnum.CompleteTask.code) - && taskAndOrder.order == null){ - isHaveBeingOrder(false) + && taskAndOrder.order == null + ) { + initContainerView(false) removeAllMapMarker() return } - isHaveBeingOrder(true) + initContainerView(true) /** * 根据任务类型判断任务显示, * 虚拟单, 显示在进行中 前往上车点 @@ -292,30 +299,33 @@ class TaxiBeingTaskFragment : BaseFragment(), val endSite = taskAndOrder.endSite //进行的任务 val currentStatus = taskAndOrder.currentStatus // 任务的状态 - updateUIShowStatus(taskType,currentStatus,order) + updateUIShowStatus(taskType, currentStatus, order) when (taskType) { TaskTypeEnum.VirtualTask.code -> {// 演练任务 - if (order != null && currentStatus == TaskStatusEnum.CompleteTask.code){ + if (order != null && currentStatus == TaskStatusEnum.CompleteTask.code) { updateOrderUI(order) return } if (startSite == null || endSite == null) return taskStatus.text = resources.getString(R.string.task_start_end_site) - taskTypeTv.background = resources.getDrawable(R.drawable.task_unreal_type_btn_bg,null) + taskTypeTv.background = + resources.getDrawable(R.drawable.task_unreal_type_btn_bg, null) taskTypeTv.text = resources.getString(R.string.task_exercise) startStationName.text = startSite.siteName endStationName.text = endSite.siteName - setPointBlueGreen() + updateStartAndEndStationPointByStatus(true) } - TaskTypeEnum.ToOrderEndTask.code,TaskTypeEnum.ToOrderStartTask.code -> {// 送驾/接驾任务任务 + + TaskTypeEnum.ToOrderEndTask.code, TaskTypeEnum.ToOrderStartTask.code -> {// 送驾/接驾任务任务 if (order == null) return updateOrderUI(order) } + TaskTypeEnum.None.code -> { - if (order != null){ + if (order != null) { updateOrderUI(order) } } @@ -327,22 +337,23 @@ class TaxiBeingTaskFragment : BaseFragment(), } private fun updateMapMarkers() { - if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.startSite != null - && mCurrentTaskAndOrder!!.endSite != null ) { - when(mCurrentTaskAndOrder!!.currentStatus){ + if (mCurrentTaskWithOrder != null && mCurrentTaskWithOrder!!.startSite != null + && mCurrentTaskWithOrder!!.endSite != null + ) { + when (mCurrentTaskWithOrder!!.currentStatus) { TaskStatusEnum.GetTask.code -> { setOrRemoveMapMaker( true, TAXI_START_MAP_MAKER, - mCurrentTaskAndOrder!!.startSite!!.wgs84Lat, - mCurrentTaskAndOrder!!.startSite!!.wgs84Lon, + mCurrentTaskWithOrder!!.startSite!!.wgs84Lat, + mCurrentTaskWithOrder!!.startSite!!.wgs84Lon, R.raw.star_marker ) setOrRemoveMapMaker( true, TAXI_END_MAP_MAKER, - mCurrentTaskAndOrder!!.endSite!!.wgs84Lat, - mCurrentTaskAndOrder!!.endSite!!.wgs84Lon, + mCurrentTaskWithOrder!!.endSite!!.wgs84Lat, + mCurrentTaskWithOrder!!.endSite!!.wgs84Lon, R.raw.end_marker ) } @@ -351,15 +362,15 @@ class TaxiBeingTaskFragment : BaseFragment(), setOrRemoveMapMaker( false, TAXI_START_MAP_MAKER, - mCurrentTaskAndOrder!!.startSite!!.wgs84Lat, - mCurrentTaskAndOrder!!.startSite!!.wgs84Lon, + mCurrentTaskWithOrder!!.startSite!!.wgs84Lat, + mCurrentTaskWithOrder!!.startSite!!.wgs84Lon, R.raw.star_marker ) setOrRemoveMapMaker( true, TAXI_END_MAP_MAKER, - mCurrentTaskAndOrder!!.endSite!!.wgs84Lat, - mCurrentTaskAndOrder!!.endSite!!.wgs84Lon, + mCurrentTaskWithOrder!!.endSite!!.wgs84Lat, + mCurrentTaskWithOrder!!.endSite!!.wgs84Lon, R.raw.end_marker ) } @@ -368,47 +379,48 @@ class TaxiBeingTaskFragment : BaseFragment(), setOrRemoveMapMaker( false, TAXI_START_MAP_MAKER, - mCurrentTaskAndOrder!!.startSite!!.wgs84Lat, - mCurrentTaskAndOrder!!.startSite!!.wgs84Lon, + mCurrentTaskWithOrder!!.startSite!!.wgs84Lat, + mCurrentTaskWithOrder!!.startSite!!.wgs84Lon, R.raw.star_marker ) setOrRemoveMapMaker( false, TAXI_END_MAP_MAKER, - mCurrentTaskAndOrder!!.endSite!!.wgs84Lat, - mCurrentTaskAndOrder!!.endSite!!.wgs84Lon, + mCurrentTaskWithOrder!!.endSite!!.wgs84Lat, + mCurrentTaskWithOrder!!.endSite!!.wgs84Lon, R.raw.end_marker ) } - } - - - }else{ - d(M_TAXI + TAG,"CurrentTaskAndOrder == "+GsonUtil.jsonFromObject(mCurrentTaskAndOrder)) + } else { + d( + M_TAXI + TAG, + "CurrentTaskAndOrder == " + GsonUtil.jsonFromObject(mCurrentTaskWithOrder) + ) } } @RequiresApi(Build.VERSION_CODES.N) private fun updateOrderUI(order: OrderDetail) { - taskTypeTv.text = resources.getString(R.string.task_order) - taskTypeTv.background = resources.getDrawable(R.drawable.task_order_type_btn_bg,null) - orderPhoneAndNum.text = Html.fromHtml(" " + order.bookingUserPhone + "" + - " | " + - "" + order.passengerSize + "人" + "",Html.FROM_HTML_MODE_LEGACY) + taskTypeTv.background = resources.getDrawable(R.drawable.task_order_type_btn_bg, null) + orderPhoneAndNum.text = Html.fromHtml( + " " + order.bookingUserPhone + "" + + " | " + + "" + order.passengerSize + "人" + "", + Html.FROM_HTML_MODE_LEGACY + ) startStationName.text = order.orderStartSite?.siteName endStationName.text = order.orderEndSite?.siteName - when(order.orderStatus){ - + when (order.orderStatus) { TaxiOrderStatusEnum.None.code -> { //无 - isHaveBeingOrder(false) + initContainerView(false) } TaxiOrderStatusEnum.ArriveAtEnd.code -> { //到达目的地 taskStatus.text = resources.getString(R.string.task_start_end_site) - setPointBlueGreen() + updateStartAndEndStationPointByStatus(true) updateOrderBottomBtn( getString(R.string.module_och_taxi_order_server_end), Color.parseColor("#FFFFFF"), @@ -420,7 +432,7 @@ class TaxiBeingTaskFragment : BaseFragment(), TaxiOrderStatusEnum.OnTheWayToEnd.code -> { //送驾中 taskStatus.text = resources.getString(R.string.task_start_end_site) - setPointBlueGreen() + updateStartAndEndStationPointByStatus(true) updateOrderBottomBtn( getString(R.string.module_och_taxi_order_close), Color.parseColor("#FFFFFF"), @@ -429,26 +441,25 @@ class TaxiBeingTaskFragment : BaseFragment(), ) } - TaxiOrderStatusEnum.UserArriveAtStart.code,TaxiOrderStatusEnum.ArriveAtStart.code -> { + TaxiOrderStatusEnum.UserArriveAtStart.code, TaxiOrderStatusEnum.ArriveAtStart.code -> { //乘客到达上车点,验证成功 ; 到达乘客上车点 - setPointGreenBlue() + updateStartAndEndStationPointByStatus(false) taskStatus.text = resources.getString(R.string.arrived_start_site) updateOrderBottomBtn( - if (order.orderStatus == TaxiOrderStatusEnum.UserArriveAtStart.code) - getString(R.string.module_och_taxi_order_server_start) - else getString(R.string.module_och_taxi_order_server_start_wait_check), - Color.parseColor("#FFFFFF"), - Color.parseColor("#FF1D5EF3"), - true - ) - + if (order.orderStatus == TaxiOrderStatusEnum.UserArriveAtStart.code) + getString(R.string.module_och_taxi_order_server_start) + else getString(R.string.module_och_taxi_order_server_start_wait_check), + Color.parseColor("#FFFFFF"), + Color.parseColor("#FF1D5EF3"), + true + ) updateOtherInfo() hideNavi() } TaxiOrderStatusEnum.OnTheWayToStart.code -> { //前往上车地点 taskStatus.text = resources.getString(R.string.task_start_start_site) - setPointGreenBlue() + updateStartAndEndStationPointByStatus(false) updateOrderBottomBtn( getString(R.string.module_och_taxi_order_server_start), Color.parseColor("#4DFFFFFF"), @@ -456,7 +467,6 @@ class TaxiBeingTaskFragment : BaseFragment(), false ) } - } } @@ -484,16 +494,17 @@ class TaxiBeingTaskFragment : BaseFragment(), DateTimeUtil.MM_dd_HH_mm ) + "") } - taskOtherInfo.text = Html.fromHtml(strHtml13,Html.FROM_HTML_MODE_LEGACY) + taskOtherInfo.text = Html.fromHtml(strHtml13, Html.FROM_HTML_MODE_LEGACY) } private fun updateUIShowStatus(taskType: Int, currentStatus: Int, order: OrderDetail?) { when (taskType) { - TaskTypeEnum.None.code ->{ - if (order != null && currentStatus == TaskStatusEnum.CompleteTask.code){ + TaskTypeEnum.None.code -> { + if (order != null && currentStatus == TaskStatusEnum.CompleteTask.code) { handleOrderView(order) } } + TaskTypeEnum.VirtualTask.code -> { //演练任务 cancelOrder.visibility = View.GONE orderPhoneAndNum.visibility = View.GONE @@ -501,10 +512,13 @@ class TaxiBeingTaskFragment : BaseFragment(), // currentStatus 0:空闲 1:获取任务 2:开始任务 3:到达目的地 naviToStart.visibility = View.GONE taskTypeTv.visibility = View.VISIBLE - naviToEnd.visibility = if (currentStatus >= TaskStatusEnum.StartTask.code) View.VISIBLE else View.GONE - taskOtherInfo.visibility = if (currentStatus == TaskStatusEnum.GetTask.code) View.GONE else View.VISIBLE + naviToEnd.visibility = + if (currentStatus >= TaskStatusEnum.StartTask.code) View.VISIBLE else View.GONE + taskOtherInfo.visibility = + if (currentStatus == TaskStatusEnum.GetTask.code) View.GONE else View.VISIBLE } - TaskTypeEnum.ToOrderEndTask.code,TaskTypeEnum.ToOrderStartTask.code -> {// 运营单(接驾任务、送驾任务) + + TaskTypeEnum.ToOrderEndTask.code, TaskTypeEnum.ToOrderStartTask.code -> {// 运营单(接驾任务、送驾任务) if (order == null) return handleOrderView(order) } @@ -520,10 +534,12 @@ class TaxiBeingTaskFragment : BaseFragment(), // orderStatus: 0 订单创建(为派单), 10 已派上司机(司机去往上车点), 20 司机到达上车点, // 30 乘客到达上车点, 40 服务中(去往目的地), 50 到达目的地, 60 已完成, 70 已取消 naviToStart.visibility = if (order.orderStatus - == TaxiOrderStatusEnum.OnTheWayToStart.code) View.VISIBLE else View.GONE + == TaxiOrderStatusEnum.OnTheWayToStart.code + ) View.VISIBLE else View.GONE naviToEnd.visibility = if (order.orderStatus - == TaxiOrderStatusEnum.OnTheWayToEnd.code) View.VISIBLE else View.GONE + == TaxiOrderStatusEnum.OnTheWayToEnd.code + ) View.VISIBLE else View.GONE taskOtherInfo.visibility = View.VISIBLE } @@ -535,6 +551,7 @@ class TaxiBeingTaskFragment : BaseFragment(), AmapNaviToDestinationModel.getInstance(context).destroyAmaNavi() mTaxiFragment?.showAmapNaviToStationFragment(false) mTaxiFragment?.showRoutingToStationFragment(false) + requireParentFragment() } private fun startNaviToStation(isVoicePlay: Boolean, stationLat: Double, stationLng: Double) { @@ -557,11 +574,10 @@ class TaxiBeingTaskFragment : BaseFragment(), * @param meters m * @param timeInSecond 秒 */ - @RequiresApi(Build.VERSION_CODES.N) fun updateDistanceAndTime(meters: Long, timeInSecond: Long) { // CallerLogger.INSTANCE.d(M_TAXI + TAG,"meters = "+meters+"timeInSecond ="+timeInSecond); - if (mCurrentTaskAndOrder == null) return - if (mCurrentTaskAndOrder!!.endSite == null && mCurrentUntruthTask == null) return + if (mCurrentTaskWithOrder == null) return + if (mCurrentTaskWithOrder!!.endSite == null && mDriveToNearestStationTask == null) return var dis = "0" var disUnit = "公里" @@ -579,13 +595,12 @@ class TaxiBeingTaskFragment : BaseFragment(), ("里程 " + "" + dis + "" + " " + disUnit + "" + ",剩余 " + "" + min + "" + " 分钟") - taskOtherInfo.text = Html.fromHtml(strHtml2,Html.FROM_HTML_MODE_LEGACY) + taskOtherInfo.text = HtmlCompat.fromHtml(strHtml2, HtmlCompat.FROM_HTML_MODE_LEGACY) } - private fun speekVoice200mTipsOnce() { - mTtsLessThan200Tip = 1 - showNotice(resources.getString(R.string.module_och_taxi_order_arrive_end_200m_tip)) - } +// private fun speekVoice200mTipsOnce() { +// showNotice(resources.getString(R.string.module_och_taxi_order_arrive_end_200m_tip)) +// } override fun onDestroyView() { super.onDestroyView() @@ -593,13 +608,13 @@ class TaxiBeingTaskFragment : BaseFragment(), } private fun startOrEndService() { - if (mCurrentTaskAndOrder == null || mCurrentTaskAndOrder!!.order == null) return - val order = mCurrentTaskAndOrder!!.order + if (mCurrentTaskWithOrder == null || mCurrentTaskWithOrder!!.order == null) return + val order = mCurrentTaskWithOrder!!.order if (TaxiOrderStatusEnum.ArriveAtStart.code == order!!.orderStatus) { //到达乘客上车点,司机可跳过乘客屏认证 mViewModel.sendUiIntent(UnmannedIntent.JumpPassengerCheckDone) - } else if (TaxiOrderStatusEnum.UserArriveAtStart.code == order.orderStatus){ + } else if (TaxiOrderStatusEnum.UserArriveAtStart.code == order.orderStatus) { mViewModel.sendUiIntent(UnmannedIntent.StartTask) - }else if (TaxiOrderStatusEnum.ArriveAtEnd.code == order.orderStatus) { //点击了完成服务,结束订单并更新订单信息 + } else if (TaxiOrderStatusEnum.ArriveAtEnd.code == order.orderStatus) { //点击了完成服务,结束订单并更新订单信息 mViewModel.sendUiIntent(UnmannedIntent.JourneyCompleted) } else if (TaxiOrderStatusEnum.OnTheWayToEnd.code == order.orderStatus) { //前往目的地过程中可提前结束行程 //自驾中提示,接管后才能结束 @@ -633,42 +648,20 @@ class TaxiBeingTaskFragment : BaseFragment(), closeOrderDialog.show() } - /** - * 是否有正在进行的订单,进行UI显示 - * - * @param being - */ - private fun isHaveBeingOrder(being: Boolean) { - d( - M_TAXI + TAG, - "isHaveBeingOrder = $being" - ) - try { - if (being) { - noTaskData.visibility = View.GONE - mBeingOrderLayout.visibility = View.VISIBLE - } else { - noTaskData.visibility = View.VISIBLE - noOrderDataTv.text = "暂无进行中订单" - mBeingOrderLayout.visibility = View.GONE - } - - } catch (e: NullPointerException) { //可能会出现订单信息已经轮询回来,但进行中页面控件还未初始化完成的情况 - TaxiModel.clearCurrentOCHOrder() - } - } 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 (mCurrentTaskAndOrder!!.order != null){ - TaxiOrderCancelDialog(mActivity,mCurrentTaskAndOrder!!.order!!.orderStatus - ) { - mViewModel.sendUiIntent(UnmannedIntent.CancelOrder(it)) + if (mCurrentTaskWithOrder!!.order != null) { + activity?.also { + TaxiOrderCancelDialog( + it, mCurrentTaskWithOrder!!.order!!.orderStatus + ) { + mViewModel.sendUiIntent(UnmannedIntent.CancelOrder(it)) + }.show() } - .show() } } else if (v.id == naviToStart.id || v.id == naviToEnd.id) { showNaviToEndStationFragment(true) @@ -684,15 +677,6 @@ class TaxiBeingTaskFragment : BaseFragment(), mTaxiFragment?.startNaviToEndStation(isShow) } - /** - * 订单流转debug START - */ - private fun initOrderTestBar() { - taskStatus.setOnLongClickListener { - mTaxiFragment?.clickOrderDebugView() - false - } - } @RequiresApi(Build.VERSION_CODES.N) override fun onCurrentNaviDistAndTimeChanged(meters: Int, timeInSecond: Long) { @@ -712,15 +696,15 @@ class TaxiBeingTaskFragment : BaseFragment(), updateRemainDistanceAndTime(false) }, 2000) UiThreadHandler.postDelayed({ - if (mCurrentTaskAndOrder != null && - mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.GetTask.code + if (mCurrentTaskWithOrder != null && + mCurrentTaskWithOrder!!.currentStatus == TaskStatusEnum.GetTask.code ) { if (naviToStart.visibility == View.GONE) { naviToStart.visibility = View.VISIBLE } } - if (mCurrentTaskAndOrder != null && - mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.StartTask.code + if (mCurrentTaskWithOrder != null && + mCurrentTaskWithOrder!!.currentStatus == TaskStatusEnum.StartTask.code ) { if (naviToEnd.visibility == View.GONE) { naviToEnd.visibility = View.VISIBLE @@ -730,15 +714,15 @@ class TaxiBeingTaskFragment : BaseFragment(), } fun onNaviToEndAmap(isShow: Boolean) { - if (mCurrentTaskAndOrder == null) return + if (mCurrentTaskWithOrder == null) return mTaxiFragment?.showAmapNaviToStationFragment( - if (mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.StartTask.code) + if (mCurrentTaskWithOrder!!.currentStatus == TaskStatusEnum.StartTask.code) isShow else true ) updateRemainDistanceAndTime( - if (mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.StartTask.code) + if (mCurrentTaskWithOrder!!.currentStatus == TaskStatusEnum.StartTask.code) isShow else true ) } @@ -749,12 +733,14 @@ class TaxiBeingTaskFragment : BaseFragment(), * @param uuid * @param station */ - private fun setOrRemoveMapMaker(isAdd: Boolean, uuid: String, - lat: Double, lon: Double, resourceId: Int) { + private fun setOrRemoveMapMaker( + isAdd: Boolean, uuid: String, + lat: Double, lon: Double, resourceId: Int + ) { if (isAdd) { - MapMakerManager.addMapMaker(TYPE_MARKER_TAXI_ORDER,uuid,lat, lon, resourceId) + MapMakerManager.addMapMaker(TYPE_MARKER_TAXI_ORDER, uuid, lat, lon, resourceId) } else { - MapMakerManager.removeMapMaker(uuid,lat,lon) + MapMakerManager.removeMapMaker(uuid, lat, lon) } } @@ -762,7 +748,12 @@ class TaxiBeingTaskFragment : BaseFragment(), MapMakerManager.removeAllMapMarkerByOwner(TYPE_MARKER_TAXI_ORDER) } - private fun updateOrderBottomBtn(txt: String?, txtColorId: Int, bgColorId: Int, isClickable: Boolean) { + private fun updateOrderBottomBtn( + txt: String?, + txtColorId: Int, + bgColorId: Int, + isClickable: Boolean + ) { taskClickBtn.text = txt taskClickBtn.setTextColor(txtColorId) val background = diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/model/TaxiUnmannedViewModel.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskViewModel.kt similarity index 97% rename from OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/model/TaxiUnmannedViewModel.kt rename to OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskViewModel.kt index eebcaf0ea0..0e025303c0 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/model/TaxiUnmannedViewModel.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskViewModel.kt @@ -1,4 +1,4 @@ -package com.mogo.och.taxi.model +package com.mogo.och.taxi.ui.task import android.annotation.SuppressLint import android.content.Context @@ -31,6 +31,7 @@ import com.mogo.och.taxi.constant.TaxiOrderStatusEnum import com.mogo.och.taxi.constant.TaxiUnmannedConst import com.mogo.och.taxi.constant.TaxtServingStatusManager import com.mogo.och.taxi.constant.TaxtServingStatusManager.isOpeningOrderStatus +import com.mogo.och.taxi.model.TaxiModel import com.mogo.och.taxi.network.CarServiceManager import com.mogo.och.taxi.network.CarServiceManager.cancelOrder import com.mogo.och.taxi.network.CarServiceManager.contrailList @@ -48,7 +49,7 @@ import java.util.concurrent.TimeUnit * @author: wangmingjun * @date: 2023/7/26 */ -class TaxiUnmannedViewModel : BaseViewModel(){ +class TaxiCurrentTaskViewModel : BaseViewModel(){ private var mInAndWaitServiceDisposable: Disposable? = null //进行中、待服务订单列表轮询 @@ -83,7 +84,7 @@ class TaxiUnmannedViewModel : BaseViewModel(){ is UnmannedIntent.CloseOrderByDriver -> { if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null){ val site = mCurrentTaskAndOrder!!.order!!.orderEndSite - TaxiModel.arriveSite(site!!.siteId,true) + TaxiModel.arriveSite(site!!.siteId, true) } } @@ -237,7 +238,8 @@ class TaxiUnmannedViewModel : BaseViewModel(){ sendUiState { copy( taskAndOrderUiState = TaskAndOrderUiState.TASKANDORDER(mCurrentTaskAndOrder, - TaxiModel.getCurUntruthTask()) + TaxiModel.getCurUntruthTask() + ) ) } } @@ -257,7 +259,8 @@ class TaxiUnmannedViewModel : BaseViewModel(){ sendUiState { copy( taskAndOrderUiState = TaskAndOrderUiState.TASKANDORDER(null, - TaxiModel.getCurUntruthTask()) + TaxiModel.getCurUntruthTask() + ) ) } } @@ -339,7 +342,7 @@ class TaxiUnmannedViewModel : BaseViewModel(){ if (result.currentStatus <= TaskStatusEnum.StartTask.code){//任务执行中, 去加载下轨迹 d(TAG, "queryCurrentTaskOnce1 = by lineId query Contrail" ) - TaxiModel.queryTaskContrail(Array(1) {result.lineId}) + TaxiModel.queryTaskContrail(Array(1) { result.lineId }) } if (result.taskType <= TaskTypeEnum.ToOrderStartTask.code @@ -447,7 +450,7 @@ class TaxiUnmannedViewModel : BaseViewModel(){ + ", isOpeningOrderStatus = ${isOpeningOrderStatus()}") if (data?.data == null || data.code != 0) return //去下载轨迹, 下发给工控机下载 - TaxiModel.queryTaskContrail(Array(1) {data.data!!.lineId}) + TaxiModel.queryTaskContrail(Array(1) { data.data!!.lineId }) } override fun onFail(code: Int, msg: String?) { diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/TaxiReserveOrderFragment.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiNextTaskFragment.kt similarity index 63% rename from OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/TaxiReserveOrderFragment.kt rename to OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiNextTaskFragment.kt index e725ac4ac4..c9a38bb0f5 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/TaxiReserveOrderFragment.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiNextTaskFragment.kt @@ -4,33 +4,31 @@ import android.annotation.SuppressLint import android.app.Activity import android.graphics.Color import android.graphics.drawable.GradientDrawable -import android.os.Build import android.os.Bundle -import android.text.Html import android.view.View -import androidx.annotation.RequiresApi +import androidx.core.text.HtmlCompat import com.mogo.commons.mvp.BaseFragment 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.TaskTypeEnum import com.mogo.och.taxi.ui.base.TaxiFragment -import kotlinx.android.synthetic.main.unmanned_being_order.endStationName -import kotlinx.android.synthetic.main.unmanned_being_order.mBeingOrderLayout -import kotlinx.android.synthetic.main.unmanned_being_order.naviToEnd -import kotlinx.android.synthetic.main.unmanned_being_order.naviToStart -import kotlinx.android.synthetic.main.unmanned_being_order.noTaskData -import kotlinx.android.synthetic.main.unmanned_being_order.orderPhoneAndNum -import kotlinx.android.synthetic.main.unmanned_being_order.startStationName -import kotlinx.android.synthetic.main.unmanned_being_order.taskClickBtn -import kotlinx.android.synthetic.main.unmanned_being_order.taskOtherInfo -import kotlinx.android.synthetic.main.unmanned_being_order.taskTypeTv +import kotlinx.android.synthetic.main.task_fragment_current.endStationName +import kotlinx.android.synthetic.main.task_fragment_current.mBeingOrderLayout +import kotlinx.android.synthetic.main.task_fragment_current.naviToEnd +import kotlinx.android.synthetic.main.task_fragment_current.naviToStart +import kotlinx.android.synthetic.main.task_fragment_current.noTaskData +import kotlinx.android.synthetic.main.task_fragment_current.orderPhoneAndNum +import kotlinx.android.synthetic.main.task_fragment_current.startStationName +import kotlinx.android.synthetic.main.task_fragment_current.taskClickBtn +import kotlinx.android.synthetic.main.task_fragment_current.taskOtherInfo +import kotlinx.android.synthetic.main.task_fragment_current.taskTypeTv /** * @author: wangmingjun * @date: 2023/7/24 */ -class TaxiReserveOrderFragment : BaseFragment() { +class TaxiNextTaskFragment : BaseFragment() { private val mData: MutableList = ArrayList() override fun onCreate(savedInstanceState: Bundle?) { @@ -38,34 +36,32 @@ class TaxiReserveOrderFragment : BaseFragment() { } override fun getLayoutId(): Int { - return R.layout.unmanned_being_order + return R.layout.task_fragment_current } override fun getTagName(): String { - return "TaxiReserveOrderFragment" + return "TaxiNextTaskFragment" } override fun initViews() { showNoOrderView() } - @RequiresApi(Build.VERSION_CODES.N) fun updateOrderChanged(model: QueryCurrentTaskRespBean.Result?) { if (model?.order == null) { showNoOrderView() return } - if (model.taskType == TaskTypeEnum.VirtualTask.code){ + if (model.taskType == TaskTypeEnum.VirtualTask.code) { val order = model.order updateOrderUI(order!!) - }else{ + } else { showNoOrderView() } } - @RequiresApi(Build.VERSION_CODES.N) @SuppressLint("SetTextI18n") private fun updateOrderUI(order: OrderDetail) { showOrderView() @@ -73,9 +69,12 @@ class TaxiReserveOrderFragment : BaseFragment() { naviToStart.visibility = View.GONE naviToEnd.visibility = View.GONE - orderPhoneAndNum.text = Html.fromHtml(" " + order.bookingUserPhone + "" + - " | " + - "" + order.passengerSize + "人" + "",Html.FROM_HTML_MODE_LEGACY) + orderPhoneAndNum.text = HtmlCompat.fromHtml( + " " + order.bookingUserPhone + "" + + " | " + + "" + order.passengerSize + "人" + "", + HtmlCompat.FROM_HTML_MODE_LEGACY + ) order.orderStartSite?.let { @@ -86,7 +85,7 @@ class TaxiReserveOrderFragment : BaseFragment() { } taskTypeTv.text = resources.getString(R.string.task_order) - taskTypeTv.background = resources.getDrawable(R.drawable.task_order_type_btn_bg,null) + taskTypeTv.background = resources.getDrawable(R.drawable.task_order_type_btn_bg, null) updateOrderBottomBtn( getString(R.string.waiting_server), @@ -96,7 +95,12 @@ class TaxiReserveOrderFragment : BaseFragment() { ) } - private fun updateOrderBottomBtn(txt: String?, txtColorId: Int, bgColorId: Int, isClickable: Boolean) { + private fun updateOrderBottomBtn( + txt: String?, + txtColorId: Int, + bgColorId: Int, + isClickable: Boolean + ) { taskClickBtn.text = txt taskClickBtn.setTextColor(txtColorId) val background = @@ -117,18 +121,19 @@ class TaxiReserveOrderFragment : BaseFragment() { companion object { - const val TAG = "TaxiReserveOrderFragment" + const val TAG = "TaxiNextTaskFragment" @SuppressLint("StaticFieldLeak") private var mTaxiFragment: TaxiFragment? = null + @SuppressLint("StaticFieldLeak") private var mActivity: Activity? = null fun newInstance( activity: Activity?, - ): TaxiReserveOrderFragment { + ): TaxiNextTaskFragment { mActivity = activity val args = Bundle() - val fragment = TaxiReserveOrderFragment() + val fragment = TaxiNextTaskFragment() fragment.arguments = args return fragment } diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/TaxiServerOrdersFragment.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiTaskTabFragment.kt similarity index 74% rename from OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/TaxiServerOrdersFragment.kt rename to OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiTaskTabFragment.kt index 6d84cce10c..eebd6b5c69 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/TaxiServerOrdersFragment.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiTaskTabFragment.kt @@ -3,12 +3,10 @@ package com.mogo.och.taxi.ui import android.annotation.SuppressLint import android.graphics.Color import android.graphics.Typeface -import android.os.Build import android.os.Bundle import android.util.TypedValue import android.view.View import android.widget.TextView -import androidx.annotation.RequiresApi import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentPagerAdapter @@ -27,18 +25,36 @@ import me.jessyan.autosize.utils.AutoSizeUtils /** * @author: wangmingjun * @date: 2023/7/25 + * @desc: 司机端任务fragment 容器,展示了“进行中”和“待服务”的任务信息 + * 任务:可以理解为对应的是一个自动驾驶任务 + * 任务类型:演练任务 / 接驾任务 / 送驾任务 + * 订单:是面向C端小程序的一个概念,用户下单后产生的是一个订单,后端会将一个订单分解成 接驾任务和送驾任务 并派发到 + * 车端来执行 + * 任务和订单的对应:1.如果是一个演练任务,是后端自动生成的,没有和C端订单挂钩 + * 2.如果是一个接驾任务 或 送驾任务,是和一个实际的C端订单对应的 */ -class TaxiServerOrdersFragment : BaseFragment(){ +class TaxiTaskTabFragment : BaseFragment() { + + companion object { + const val TAG = "TaxiTaskTabFragment" + fun newInstance(): TaxiTaskTabFragment { + val args = Bundle() + val fragment = TaxiTaskTabFragment() + fragment.arguments = args + return fragment + } + } + private val mTabTitles = arrayOf("进行中", "待服务") - private val fragments: MutableList = ArrayList() - private var beingTaskFragment: TaxiBeingTaskFragment? = null - private var reserveOrdersFragment: TaxiReserveOrderFragment? = null + private val mFragments: MutableList = ArrayList() + private var currentTaskFragment: TaxiCurrentTaskFragment? = null + private var nextTaskFragment: TaxiNextTaskFragment? = null override fun getLayoutId(): Int { return R.layout.taxi_server_orders_panel } override fun getTagName(): String { - return "TaxiServerOrdersFragment" + return "TaxiTaskTabFragment" } override fun initViews() { @@ -54,24 +70,25 @@ class TaxiServerOrdersFragment : BaseFragment(){ tabView.text = mTabTitles[i] tabView.height = AutoSizeUtils.dp2px(context, 120f) tab.customView = tabView + if (0 == i) { module_och_taxi_tab.addTab(tab, true) changeTabLayoutTabUI(tab, true) - beingTaskFragment = TaxiBeingTaskFragment.newInstance( - activity, + currentTaskFragment = TaxiCurrentTaskFragment.newInstance( parentFragment as TaxiFragment? ) - fragments.add(beingTaskFragment!!) + mFragments.add(currentTaskFragment!!) } else if (1 == i) { module_och_taxi_tab.addTab(tab) changeTabLayoutTabUI(tab, false) - reserveOrdersFragment = TaxiReserveOrderFragment.newInstance( + nextTaskFragment = TaxiNextTaskFragment.newInstance( activity ) - fragments.add(reserveOrdersFragment!!) + mFragments.add(nextTaskFragment!!) } } d(SceneConstant.M_TAXI + TAG, "activity=$activity") + module_och_taxi_tab.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { override fun onTabSelected(tab: TabLayout.Tab) { module_och_taxi_view_pager.currentItem = tab.position @@ -138,11 +155,11 @@ class TaxiServerOrdersFragment : BaseFragment(){ SceneConstant.M_TAXI + TAG, "getItem=$position" ) - return fragments[position] + return mFragments[position] } override fun getCount(): Int { - return fragments.size + return mFragments.size } override fun getPageTitle(position: Int): CharSequence { @@ -155,33 +172,22 @@ class TaxiServerOrdersFragment : BaseFragment(){ } fun onNaviToEndAMap(isShow: Boolean) { - if (null == beingTaskFragment) return - beingTaskFragment!!.onNaviToEndAmap(isShow) + if (null == currentTaskFragment) return + currentTaskFragment!!.onNaviToEndAmap(isShow) } fun onCurrentOrderDistToEndChanged(meters: Long, timeInSecond: Long) { - if (null == beingTaskFragment) return - beingTaskFragment!!.updateDistanceAndTime(meters, timeInSecond) + if (null == currentTaskFragment) return + currentTaskFragment!!.updateDistanceAndTime(meters, timeInSecond) } - fun onChangeOperationStatus(){ - if (null == beingTaskFragment) return - beingTaskFragment!!.onChangeOperationStatus() + fun onOperationStatusChanged() { + if (null == currentTaskFragment) return + currentTaskFragment!!.onOperationStatusChanged() } - @RequiresApi(Build.VERSION_CODES.N) - fun updateOrderChanged(model: QueryCurrentTaskRespBean.Result?){ - if (null == reserveOrdersFragment) return - reserveOrdersFragment!!.updateOrderChanged(model) - } - - companion object { - const val TAG = "TaxiServerOrdersFragment" - fun newInstance(): TaxiServerOrdersFragment { - val args = Bundle() - val fragment = TaxiServerOrdersFragment() - fragment.arguments = args - return fragment - } + fun updateOrderChanged(model: QueryCurrentTaskRespBean.Result?) { + if (null == nextTaskFragment) return + nextTaskFragment!!.updateOrderChanged(model) } } diff --git a/OCH/taxi/unmanned-driver/src/main/res/layout/unmanned_being_order.xml b/OCH/taxi/unmanned-driver/src/main/res/layout/task_fragment_current.xml similarity index 100% rename from OCH/taxi/unmanned-driver/src/main/res/layout/unmanned_being_order.xml rename to OCH/taxi/unmanned-driver/src/main/res/layout/task_fragment_current.xml diff --git a/OCH/taxi/unmanned-driver/src/main/res/layout/taxi_panel.xml b/OCH/taxi/unmanned-driver/src/main/res/layout/taxi_panel.xml index 871a362fc3..702787973d 100644 --- a/OCH/taxi/unmanned-driver/src/main/res/layout/taxi_panel.xml +++ b/OCH/taxi/unmanned-driver/src/main/res/layout/taxi_panel.xml @@ -15,7 +15,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" /> -