[6.0.0] 前后端联调
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
package com.mogo.och.common.module.wigets;
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.animation.AlphaAnimation
|
||||
import android.view.animation.Animation
|
||||
import android.view.animation.LinearInterpolator
|
||||
import android.widget.RelativeLayout
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI
|
||||
import com.mogo.och.common.module.R
|
||||
import kotlinx.android.synthetic.main.start_autopilot_animation_view.view.startAutopilotTip
|
||||
import kotlinx.android.synthetic.main.start_autopilot_animation_view.view.startAutopilotTipImg
|
||||
import java.util.concurrent.atomic.AtomicReference
|
||||
|
||||
|
||||
class StartAutopilotAnimationView @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0
|
||||
) : RelativeLayout(context, attrs, defStyleAttr){
|
||||
|
||||
companion object {
|
||||
private const val ALL_CLOSE_TIMER = 5000L
|
||||
private const val TAG = "V2XWarningView"
|
||||
}
|
||||
|
||||
private val closeWarningTask: Runnable = Runnable {
|
||||
showWarning(DirectionEnum.ALERT_WARNING_NON)
|
||||
}
|
||||
|
||||
private val oldDirection = AtomicReference<DirectionEnum>()
|
||||
|
||||
init {
|
||||
LayoutInflater.from(context).inflate(R.layout.start_autopilot_animation_view, this, true)
|
||||
}
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
}
|
||||
|
||||
fun show(direction: DirectionEnum, time: Long) {
|
||||
showWarning(direction, time)
|
||||
}
|
||||
|
||||
fun dismiss(direction: DirectionEnum) {
|
||||
dismissWarning(direction)
|
||||
}
|
||||
|
||||
/**
|
||||
* 展示指定方位上的红框预警
|
||||
* @param direction
|
||||
* @see WarningDirectionEnum
|
||||
*/
|
||||
private fun showWarning(direction: DirectionEnum, time: Long = ALL_CLOSE_TIMER) {
|
||||
|
||||
startAutopilotTip.text = direction.desc
|
||||
|
||||
// 如果传入的不是关闭显示,则设置倒计时,定时关闭红框警示
|
||||
if (oldDirection.get() == direction) {
|
||||
removeCallbacks(closeWarningTask)
|
||||
postDelayed(closeWarningTask, time)
|
||||
return
|
||||
}
|
||||
if (direction != DirectionEnum.ALERT_WARNING_NON) {
|
||||
oldDirection.set(direction)
|
||||
removeCallbacks(closeWarningTask)
|
||||
postDelayed(closeWarningTask, time)
|
||||
}
|
||||
post {
|
||||
if (direction == DirectionEnum.ALERT_WARNING_TOP){
|
||||
startAutopilotTipImg.visibility = View.VISIBLE
|
||||
}
|
||||
|
||||
if (direction == DirectionEnum.ALERT_WARNING_NON) {
|
||||
dismissWarning(DirectionEnum.ALERT_WARNING_TOP)
|
||||
} else {
|
||||
val alphaAnimation = AlphaAnimation(0f, 0.88f)
|
||||
alphaAnimation.duration = 600
|
||||
alphaAnimation.interpolator = LinearInterpolator()
|
||||
alphaAnimation.repeatCount = Animation.INFINITE
|
||||
alphaAnimation.repeatMode = Animation.REVERSE
|
||||
startAnimation(alphaAnimation)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun dismissWarning(direction: DirectionEnum) {
|
||||
if (direction == DirectionEnum.ALERT_WARNING_NON) {
|
||||
return
|
||||
}
|
||||
removeCallbacks(closeWarningTask)
|
||||
post {
|
||||
when (direction) {
|
||||
DirectionEnum.ALERT_WARNING_TOP -> {
|
||||
startAutopilotTipImg.visibility = View.GONE
|
||||
}
|
||||
else -> {
|
||||
CallerLogger.d("$M_HMI$TAG", "Not Support Direction")
|
||||
}
|
||||
}
|
||||
clearAnimation()
|
||||
this.oldDirection.set(null)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow()
|
||||
}
|
||||
|
||||
enum class DirectionEnum(
|
||||
var direction: Int,
|
||||
var desc: String,
|
||||
) {
|
||||
ALERT_WARNING_NON(
|
||||
0,
|
||||
"关闭红色边框预警"
|
||||
),
|
||||
ALERT_WARNING_TOP(
|
||||
1,
|
||||
"正上方"
|
||||
),
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:endColor="#00FF0606"
|
||||
android:startColor="#2A6DE7"
|
||||
android:type="linear"/>
|
||||
</shape>
|
||||
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
<!--上方闪烁且有文字-->
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/startAutopilotTip"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:text="开始自驾"
|
||||
android:textSize="@dimen/dp_34"
|
||||
android:textColor="@android:color/white"/>
|
||||
<ImageView
|
||||
android:id="@+id/startAutopilotTipImg"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dp_328"
|
||||
android:background="@drawable/start_autopilot_animation_bkg_top"
|
||||
android:visibility="gone"
|
||||
tools:visibility="invisible" />
|
||||
</FrameLayout>
|
||||
@@ -12,7 +12,7 @@ data class OrderDetail(
|
||||
var orderStatus: Int,
|
||||
var orderStartSite: Site?,
|
||||
var orderEndSite: Site?,
|
||||
var planningLines: Array<Long>,
|
||||
var planningLines: Array<Long>, //返回的是接驾任务的id集合
|
||||
var bookingUserPhone: String,
|
||||
var passengerSize: Int,
|
||||
var fullMinutes: Int, //到站后返回的总里程 /公里
|
||||
|
||||
@@ -107,6 +107,10 @@ object TaxiModel {
|
||||
|
||||
private var mCurrentTaskAndOrder: QueryCurrentTaskRespBean.Result? = null //当前任务和订单
|
||||
|
||||
/**
|
||||
* 标定站点的任务, 在没有到站之前, 轮询接口是没有的.
|
||||
* 到站后, 轮询的任务会显示到站站点为这个虚拟站点,任务状态为到站
|
||||
*/
|
||||
private var mUntruthTask: StartServiceRespBean.Result? = null // 前往出车点的伪任务, 后台并不算做真正的任务
|
||||
|
||||
private var mOrderContrails: MutableList<ContrailListRespBean.Result>? =
|
||||
|
||||
@@ -49,15 +49,12 @@ import java.util.concurrent.TimeUnit
|
||||
class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
|
||||
|
||||
private var mInAndWaitServiceDisposable: Disposable? = null //进行中、待服务订单列表轮询
|
||||
|
||||
private var mCurrentTaskAndOrder: QueryCurrentTaskRespBean.Result? = null
|
||||
private val TAG = "TaxiUnmannedViewModel"
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
private var mContext : Context = AbsMogoApplication.getApp().applicationContext
|
||||
|
||||
init {
|
||||
startOrStopOrderLoop(true)
|
||||
}
|
||||
|
||||
override fun initUiState(): UnmannedState {
|
||||
return UnmannedState(TaskAndOrderUiState.INIT)
|
||||
}
|
||||
@@ -65,6 +62,10 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
|
||||
override fun handleIntent(intent: IUiIntent) {
|
||||
when(intent) {
|
||||
|
||||
is UnmannedIntent.StartTaskOrOrderLooper -> { //开始轮询
|
||||
startOrStopOrderLoop(true)
|
||||
}
|
||||
|
||||
is UnmannedIntent.StartOrPauseReceivingOrder -> {//开始、暂停接单
|
||||
updateCarStatus()
|
||||
}
|
||||
@@ -124,9 +125,12 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
|
||||
override fun onSuccess(data: BaseData?) {
|
||||
TaxiModel.loginService!!.queryLoginStatusByNet()
|
||||
//需要将虚拟任务停掉, 虚拟任务会再开始接单后获取新的
|
||||
d(TAG, "set mUntruthSiteTask null")
|
||||
updateUntruthTaskUI(null)
|
||||
updateUntruthTask(null)
|
||||
|
||||
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.endSite != null){
|
||||
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.endSite != null
|
||||
&& mCurrentTaskAndOrder!!.startSite != null){
|
||||
VoiceNotice.showNotice("暂停接单啦!要完成当前订单哦")
|
||||
}else{
|
||||
VoiceNotice.showNotice("暂停接单啦")
|
||||
@@ -157,10 +161,19 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
|
||||
if (data == null || data.code != 0) return
|
||||
TaxiModel.loginService!!.queryLoginStatusByNet()
|
||||
VoiceNotice.showNotice("开始接单啦")
|
||||
//虚拟任务要开启到站围栏
|
||||
if (mCurrentTaskAndOrder == null || mCurrentTaskAndOrder!!.endSite == null){
|
||||
updateUntruthTask(data.data)
|
||||
d(TAG, "data.data="+GsonUtil.jsonFromObject(data.data))
|
||||
if (mCurrentTaskAndOrder == null) return
|
||||
if (mCurrentTaskAndOrder!!.endSite != null){
|
||||
if (mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.CompleteTask.code
|
||||
&& mCurrentTaskAndOrder!!.order != null){ //有任务, 状态为3, 且有订单
|
||||
return
|
||||
}else if (mCurrentTaskAndOrder!!.currentStatus < TaskStatusEnum.CompleteTask.code){
|
||||
//有任务, 并且未执行完成
|
||||
return
|
||||
}
|
||||
}
|
||||
updateUntruthTaskUI(data.data)
|
||||
updateUntruthTask(data.data)
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String?) {
|
||||
@@ -216,6 +229,8 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
|
||||
}
|
||||
|
||||
private fun updateTaskAndOrderUi() {
|
||||
d(TAG, "queryCurrentTaskOnce = updateTaskAndOrderUi")
|
||||
|
||||
sendUiState {
|
||||
copy(
|
||||
taskAndOrderUiState = TaskAndOrderUiState.TASKANDORDER(mCurrentTaskAndOrder,
|
||||
@@ -224,8 +239,18 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateNoTaskAndOrderUi() {
|
||||
private fun updateUntruthTaskUI(untruthTask: StartServiceRespBean.Result?) {
|
||||
d(TAG, "queryCurrentTaskOnce = updateTaskAndOrderUi")
|
||||
|
||||
sendUiState {
|
||||
copy(
|
||||
taskAndOrderUiState = TaskAndOrderUiState.TASKANDORDER(mCurrentTaskAndOrder,
|
||||
untruthTask)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateNoTaskAndOrderUi() {
|
||||
sendUiState {
|
||||
copy(
|
||||
taskAndOrderUiState = TaskAndOrderUiState.TASKANDORDER(null,
|
||||
@@ -234,7 +259,7 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
|
||||
}
|
||||
}
|
||||
|
||||
private fun startOrStopOrderLoop(start: Boolean) {
|
||||
fun startOrStopOrderLoop(start: Boolean) {
|
||||
d(SceneConstant.M_TAXI + TAG, "startOrStopOrderLoop() $start")
|
||||
if (start) {
|
||||
startInAndWaitCurrentTaskLoop()
|
||||
@@ -253,9 +278,10 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
|
||||
|
||||
val result = data.data
|
||||
|
||||
d(TAG, "queryCurrentTaskOnce = result = ," + GsonUtil.jsonFromObject(result))
|
||||
d(TAG, "queryCurrentTaskOnce = result = " + GsonUtil.jsonFromObject(result))
|
||||
|
||||
d(TAG, "queryCurrentTaskOnce = mCurrentTaskAndOrder = " + GsonUtil.jsonFromObject(mCurrentTaskAndOrder))
|
||||
|
||||
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.equals(result)) return
|
||||
|
||||
if (result!!.endSite == null && mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order!= null) {
|
||||
//本地根据订单 orderNo 去查询下(乘客取消订单)
|
||||
@@ -263,29 +289,32 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
|
||||
return
|
||||
}
|
||||
|
||||
if (result.endSite == null && result.order == null){
|
||||
mCurrentTaskAndOrder = null
|
||||
updateNoTaskAndOrderUi()
|
||||
TaxiModel.updateCurrentTaskAndOrder(null)
|
||||
//订单或者伪任务更新, 都去刷新下界面
|
||||
if (mCurrentTaskAndOrder == null || !mCurrentTaskAndOrder!!.equals(result)){
|
||||
|
||||
if (result.endSite == null && result.order == null){
|
||||
mCurrentTaskAndOrder = null
|
||||
updateNoTaskAndOrderUi()
|
||||
TaxiModel.updateCurrentTaskAndOrder(null)
|
||||
}
|
||||
|
||||
if (result.currentStatus == TaskStatusEnum.CompleteTask.code){
|
||||
startPrepareTask(result.endSite!!.siteId)
|
||||
}
|
||||
|
||||
mCurrentTaskAndOrder = result
|
||||
|
||||
//根据lineId集合去查轨迹集合
|
||||
if (result.order != null && result.taskType == TaskTypeEnum.ToOrderStartTask.code){
|
||||
queryOrderPickUpConertrail(result.order!!.planningLines)
|
||||
}
|
||||
|
||||
TaxiModel.updateCurrentTaskAndOrder(result)
|
||||
|
||||
TaxiModel.updateStation()
|
||||
|
||||
updateTaskAndOrderUi()
|
||||
}
|
||||
|
||||
if (result.currentStatus == TaskStatusEnum.CompleteTask.code
|
||||
&& result.endSite != null){
|
||||
startPrepareTask(result.endSite!!.siteId)
|
||||
}
|
||||
|
||||
mCurrentTaskAndOrder = result
|
||||
|
||||
//根据lineId集合去查轨迹集合
|
||||
if (result.order != null){
|
||||
queryOrderContrails(result.order!!.planningLines)
|
||||
}
|
||||
|
||||
TaxiModel.updateCurrentTaskAndOrder(result)
|
||||
|
||||
TaxiModel.updateStation()
|
||||
|
||||
updateTaskAndOrderUi()
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String?) {
|
||||
@@ -296,10 +325,10 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询接驾/送驾任务轨迹集合
|
||||
* 查询送驾任务轨迹集合
|
||||
* 注: 运营单刚来的时候, 有可能还在运行一个演练任务, 要先跑完演练任务才跑运营单
|
||||
*/
|
||||
private fun queryOrderContrails(planningLines: Array<Long>?) {
|
||||
private fun queryOrderPickUpConertrail(planningLines: Array<Long>?) {
|
||||
if (planningLines == null) return
|
||||
contrailList(mContext,planningLines,
|
||||
object : OchCommonServiceCallback<ContrailListRespBean>{
|
||||
@@ -326,18 +355,20 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
|
||||
if (data != null && data.code != 0) return
|
||||
if (data!!.orderStatus == TaxiOrderStatusEnum.Cancel.code){
|
||||
VoiceNotice.showNotice("乘客已经取消")
|
||||
mCurrentTaskAndOrder?.order?.orderStatus = TaxiOrderStatusEnum.Cancel.code
|
||||
updateTaskAndOrderUi()
|
||||
// mCurrentTaskAndOrder?.order?.orderStatus = TaxiOrderStatusEnum.Cancel.code
|
||||
mCurrentTaskAndOrder = null
|
||||
updateTaskAndOrderUi()
|
||||
return
|
||||
}
|
||||
if (data.orderStatus == TaxiOrderStatusEnum.ArriveAtEnd.code){//到站
|
||||
mCurrentTaskAndOrder?.order?.fullMileage = data.mileage
|
||||
mCurrentTaskAndOrder?.order?.fullMinutes = data.duration
|
||||
updateTaskAndOrderUi()
|
||||
updateOrderMileAndDur(data.mileage,data.duration)
|
||||
return
|
||||
}
|
||||
if (data.orderStatus == TaxiOrderStatusEnum.JourneyCompleted.code){//到站
|
||||
if (data.orderStatus == TaxiOrderStatusEnum.JourneyCompleted.code){//完成
|
||||
//获取新的任务
|
||||
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.endSite != null){
|
||||
startPrepareTask(mCurrentTaskAndOrder!!.endSite!!.siteId)
|
||||
}
|
||||
mCurrentTaskAndOrder = null
|
||||
updateNoTaskAndOrderUi()
|
||||
return
|
||||
@@ -351,7 +382,18 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
|
||||
})
|
||||
}
|
||||
|
||||
fun startPrepareTask(siteId: Long) {
|
||||
private fun updateOrderMileAndDur(mileage: Float, duration: Int) {
|
||||
d(TAG, "queryCurrentTaskOnce = updateTaskAndOrderUi")
|
||||
|
||||
sendUiState {
|
||||
copy(
|
||||
taskAndOrderUiState = TaskAndOrderUiState.UPDATEORDERMILEANDDUR(mileage,
|
||||
duration)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun startPrepareTask(siteId: Long) {
|
||||
UiThreadHandler.postDelayed({
|
||||
CarServiceManager.prepareTask(
|
||||
mContext,
|
||||
@@ -361,7 +403,7 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
|
||||
d(SceneConstant.M_TAXI + TAG, GsonUtil.jsonFromObject(data))
|
||||
if (data == null || data.code != 0) return
|
||||
//去下载轨迹, 下发给工控机下载
|
||||
queryOrderContrails(Array(1) { data.lineId })
|
||||
queryOrderPickUpConertrail(Array(1) { data.lineId })
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String?) {
|
||||
|
||||
@@ -107,6 +107,8 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
@RequiresApi(Build.VERSION_CODES.N)
|
||||
private fun initData() {
|
||||
|
||||
mViewModel.sendUiIntent(UnmannedIntent.StartTaskOrOrderLooper)
|
||||
|
||||
//监听返回的数据状态
|
||||
lifecycleScope.launchWhenStarted {
|
||||
mViewModel.uiStateFlow.map {it.taskAndOrderUiState}.collect {taskAndOrderUiState ->
|
||||
@@ -130,14 +132,37 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
if (taskAndOrderUiState.untruthTask != null){
|
||||
updateUntruthTask(taskAndOrderUiState.untruthTask)
|
||||
}else{
|
||||
updateReserveOrderChanged(taskAndOrderUiState.taskAndOrder)
|
||||
updateCurrentOrderStatusChanged(taskAndOrderUiState.taskAndOrder)
|
||||
}
|
||||
}
|
||||
|
||||
is TaskAndOrderUiState.UPDATEORDERMILEANDDUR -> {
|
||||
updateOrderTotalMilAndDur(taskAndOrderUiState.mileage,taskAndOrderUiState.duration)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.N)
|
||||
private fun updateOrderTotalMilAndDur(mileage: Float, duration: Int) {
|
||||
val strHtml2 =
|
||||
("<font color=\"#CAD6FF\">里程 </font>" + "<font color=\"#FFFFFF\"> $mileage </font>" + "<font color=\"#CAD6FF\"> 公里 </font>"
|
||||
+ "<font color=\"#CAD6FF\">,剩余 </font>" + "<font color=\"#FFFFFF\"> $duration </font>" + "<font color=\"#CAD6FF\"> 分钟</font>")
|
||||
taskOtherInfo.text = Html.fromHtml(strHtml2,Html.FROM_HTML_MODE_LEGACY)
|
||||
}
|
||||
|
||||
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)
|
||||
@@ -214,8 +239,8 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
return
|
||||
}
|
||||
|
||||
if (taskAndOrder.currentStatus == TaskStatusEnum.CompleteTask.code &&
|
||||
taskAndOrder.startSite == null){
|
||||
if (taskAndOrder.currentStatus == TaskStatusEnum.CompleteTask.code
|
||||
&& taskAndOrder.order == null && taskAndOrder.endSite == null){
|
||||
isHaveBeingOrder(false)
|
||||
return
|
||||
}
|
||||
@@ -285,11 +310,6 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
TaxiOrderStatusEnum.ArriveAtEnd.code -> { //到达目的地
|
||||
taskStatus.text = resources.getString(R.string.task_start_end_site)
|
||||
|
||||
val strHtml2 =
|
||||
("<font color=\"#CAD6FF\">里程 </font>" + "<font color=\"#FFFFFF\"> ${order.fullMileage} </font>" + "<font color=\"#CAD6FF\"> 公里 </font>"
|
||||
+ "<font color=\"#CAD6FF\">,剩余 </font>" + "<font color=\"#FFFFFF\"> ${order.fullMinutes} </font>" + "<font color=\"#CAD6FF\"> 分钟</font>")
|
||||
taskOtherInfo.text = Html.fromHtml(strHtml2,Html.FROM_HTML_MODE_LEGACY)
|
||||
|
||||
updateOrderBottomBtn(
|
||||
getString(R.string.module_och_taxi_order_server_end),
|
||||
Color.parseColor("#FFFFFF"),
|
||||
@@ -818,6 +838,11 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
taskClickBtn.isClickable = isClickable
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
mViewModel.startOrStopOrderLoop(false)
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
/**
|
||||
* END
|
||||
*/
|
||||
|
||||
@@ -10,7 +10,6 @@ import android.view.ViewGroup
|
||||
import android.widget.TextView
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.fragment.app.FragmentTransaction
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import com.alibaba.android.arouter.launcher.ARouter
|
||||
import com.mogo.commons.module.status.MogoStatusManager
|
||||
import com.mogo.eagle.core.data.temp.EventLogout
|
||||
@@ -21,11 +20,10 @@ import com.mogo.och.common.module.biz.constant.OchCommonConst
|
||||
import com.mogo.och.common.module.biz.provider.LoginService
|
||||
import com.mogo.och.taxi.R
|
||||
import com.mogo.och.taxi.base.BaseTaxiTabFragment
|
||||
import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean
|
||||
import com.mogo.och.taxi.model.TaxiModel
|
||||
import com.mogo.och.taxi.model.TaxiUnmannedViewModel
|
||||
import com.mogo.och.taxi.network.LoginBusImpl
|
||||
import com.mogo.och.taxi.presenter.TaxiPresenter
|
||||
import com.mogo.och.taxi.ui.unmanned.UnmannedIntent
|
||||
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
|
||||
@@ -43,7 +41,6 @@ class TaxiFragment : BaseTaxiTabFragment<TaxiFragment, TaxiPresenter>(),
|
||||
private var serverOrdersFragmentWR: WeakReference<TaxiServerOrdersFragment>? = null
|
||||
private var personalDialogFragment: WeakReference<TaxiPersonalDialogFragment>? = null
|
||||
private var loginService: LoginService? = null
|
||||
private lateinit var mViewModel : TaxiUnmannedViewModel
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
@@ -54,11 +51,6 @@ class TaxiFragment : BaseTaxiTabFragment<TaxiFragment, TaxiPresenter>(),
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
mViewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(TaxiUnmannedViewModel::class.java)
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
@@ -115,7 +107,13 @@ class TaxiFragment : BaseTaxiTabFragment<TaxiFragment, TaxiPresenter>(),
|
||||
|
||||
override fun onChangeOperationStatus() {
|
||||
super.onChangeOperationStatus()
|
||||
mViewModel.sendUiIntent(UnmannedIntent.StartOrPauseReceivingOrder)
|
||||
if (null == serverOrdersFragmentWR || serverOrdersFragmentWR!!.get() == null) return
|
||||
serverOrdersFragmentWR!!.get()!!.onChangeOperationStatus()
|
||||
}
|
||||
|
||||
fun updateReserveOrderChanged(taskAndOrder: QueryCurrentTaskRespBean.Result?){
|
||||
if (null == serverOrdersFragmentWR || serverOrdersFragmentWR!!.get() == null) return
|
||||
serverOrdersFragmentWR!!.get()!!.updateOrderChanged(taskAndOrder)
|
||||
}
|
||||
|
||||
fun switchVRFlatMode(isVRMode: Boolean) {
|
||||
|
||||
@@ -7,16 +7,11 @@ import android.graphics.Color
|
||||
import android.graphics.drawable.GradientDrawable
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.mogo.commons.mvp.BaseFragment
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
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.model.TaxiUnmannedViewModel
|
||||
import com.mogo.och.taxi.ui.unmanned.TaskAndOrderUiState
|
||||
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
|
||||
@@ -28,7 +23,6 @@ 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
|
||||
|
||||
/**
|
||||
* @author: wangmingjun
|
||||
@@ -36,11 +30,9 @@ import kotlinx.coroutines.flow.map
|
||||
*/
|
||||
class TaxiReserveOrderFragment : BaseFragment() {
|
||||
private val mData: MutableList<QueryCurrentTaskRespBean.Result> = ArrayList()
|
||||
private lateinit var mViewModel : TaxiUnmannedViewModel
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
mViewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(TaxiUnmannedViewModel::class.java)
|
||||
}
|
||||
|
||||
override fun getLayoutId(): Int {
|
||||
@@ -51,33 +43,10 @@ class TaxiReserveOrderFragment : BaseFragment() {
|
||||
return "TaxiReserveOrderFragment"
|
||||
}
|
||||
|
||||
override fun onAttach(context: Context) {
|
||||
super.onAttach(context)
|
||||
}
|
||||
|
||||
override fun initViews() {
|
||||
initData()
|
||||
}
|
||||
|
||||
private fun initData() {
|
||||
//监听返回的数据状态
|
||||
lifecycleScope.launchWhenStarted {
|
||||
mViewModel.uiStateFlow.map {it.taskAndOrderUiState}.collect {state ->
|
||||
CallerLogger.d(TAG, "uiStateFlow: $state")
|
||||
when(state){
|
||||
is TaskAndOrderUiState.INIT -> {
|
||||
|
||||
}
|
||||
|
||||
is TaskAndOrderUiState.TASKANDORDER -> {
|
||||
updateOrderChanged(state.taskAndOrder)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateOrderChanged(model: QueryCurrentTaskRespBean.Result?) {
|
||||
fun updateOrderChanged(model: QueryCurrentTaskRespBean.Result?) {
|
||||
if (model == null) return
|
||||
if (model.order == null || model.taskType != TaskTypeEnum.ToOrderStartTask.code){
|
||||
showNoOrderView()
|
||||
|
||||
@@ -18,6 +18,7 @@ import com.mogo.commons.mvp.BaseFragment
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.och.taxi.R
|
||||
import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean
|
||||
import kotlinx.android.synthetic.main.taxi_server_orders_panel.module_och_taxi_tab
|
||||
import kotlinx.android.synthetic.main.taxi_server_orders_panel.module_och_taxi_view_pager
|
||||
import me.jessyan.autosize.utils.AutoSizeUtils
|
||||
@@ -163,6 +164,16 @@ class TaxiServerOrdersFragment : BaseFragment(){
|
||||
beingTaskFragment!!.updateDistanceAndTime(meters, timeInSecond)
|
||||
}
|
||||
|
||||
fun onChangeOperationStatus(){
|
||||
if (null == beingTaskFragment) return
|
||||
beingTaskFragment!!.onChangeOperationStatus()
|
||||
}
|
||||
|
||||
fun updateOrderChanged(model: QueryCurrentTaskRespBean.Result?){
|
||||
if (null == reserveOrdersFragment) return
|
||||
reserveOrdersFragment!!.updateOrderChanged(model)
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val TAG = "TaxiServerOrdersFragment"
|
||||
fun newInstance(): TaxiServerOrdersFragment {
|
||||
|
||||
@@ -11,6 +11,8 @@ sealed class UnmannedIntent: IUiIntent{
|
||||
//开始接单 、 暂停接单
|
||||
object StartOrPauseReceivingOrder : UnmannedIntent()
|
||||
|
||||
object StartTaskOrOrderLooper : UnmannedIntent()
|
||||
|
||||
//取消订单
|
||||
class CancelOrder(type: Int, reason: String) : UnmannedIntent()
|
||||
|
||||
|
||||
@@ -10,4 +10,6 @@ data class UnmannedState(val taskAndOrderUiState: TaskAndOrderUiState) : IUiStat
|
||||
sealed class TaskAndOrderUiState {
|
||||
object INIT : TaskAndOrderUiState()
|
||||
data class TASKANDORDER(val taskAndOrder: QueryCurrentTaskRespBean.Result?, val untruthTask: StartServiceRespBean.Result?) : TaskAndOrderUiState()//演练任务、接驾、送驾任务
|
||||
|
||||
data class UPDATEORDERMILEANDDUR(val mileage: Float, val duration: Int): TaskAndOrderUiState()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user