Merge remote-tracking branch 'origin/dev_robotaxi-d_230809_6.0.0' into dev_robotaxi-d_230809_6.0.0

This commit is contained in:
yangyakun
2023-08-18 09:54:01 +08:00
22 changed files with 390 additions and 173 deletions

View File

@@ -1,6 +1,8 @@
package com.mogo.och.common.module.wigets;
import android.annotation.SuppressLint
import android.content.Context
import android.os.CountDownTimer
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
@@ -11,8 +13,10 @@ 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 com.mogo.och.common.module.utils.SoundPoolHelper
import kotlinx.android.synthetic.main.start_autopilot_animation_view.view.startAutopilotTip
import kotlinx.android.synthetic.main.start_autopilot_animation_view.view.startAutopilotTipImg
import java.lang.Exception
import java.util.concurrent.atomic.AtomicReference
@@ -27,6 +31,9 @@ class StartAutopilotAnimationView @JvmOverloads constructor(
private const val TAG = "V2XWarningView"
}
private var startTimer: CountDownTimer? = null
private val mContext: Context
private val closeWarningTask: Runnable = Runnable {
showWarning(DirectionEnum.ALERT_WARNING_NON)
}
@@ -34,9 +41,18 @@ class StartAutopilotAnimationView @JvmOverloads constructor(
private val oldDirection = AtomicReference<DirectionEnum>()
init {
mContext = context
LayoutInflater.from(context).inflate(R.layout.start_autopilot_animation_view, this, true)
}
fun playDI(){
try {
SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(mContext , R.raw.startautopilot)
}catch (e: Exception){
e.printStackTrace()
}
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
}
@@ -47,6 +63,12 @@ class StartAutopilotAnimationView @JvmOverloads constructor(
fun dismiss(direction: DirectionEnum) {
dismissWarning(direction)
cancelCountdown()
}
fun cancelCountdown(){ //防止内存泄漏
startTimer?.cancel()
startTimer = null
}
/**
@@ -56,7 +78,8 @@ class StartAutopilotAnimationView @JvmOverloads constructor(
*/
private fun showWarning(direction: DirectionEnum, time: Long = ALL_CLOSE_TIMER) {
startAutopilotTip.text = direction.desc
//开始倒计时
countDownTimer()
// 如果传入的不是关闭显示,则设置倒计时,定时关闭红框警示
if (oldDirection.get() == direction) {
@@ -72,6 +95,7 @@ class StartAutopilotAnimationView @JvmOverloads constructor(
post {
if (direction == DirectionEnum.ALERT_WARNING_TOP){
startAutopilotTipImg.visibility = View.VISIBLE
startAutopilotTip.visibility = View.VISIBLE
}
if (direction == DirectionEnum.ALERT_WARNING_NON) {
@@ -96,6 +120,7 @@ class StartAutopilotAnimationView @JvmOverloads constructor(
when (direction) {
DirectionEnum.ALERT_WARNING_TOP -> {
startAutopilotTipImg.visibility = View.GONE
startAutopilotTip.visibility = View.GONE
}
else -> {
CallerLogger.d("$M_HMI$TAG", "Not Support Direction")
@@ -112,15 +137,31 @@ class StartAutopilotAnimationView @JvmOverloads constructor(
enum class DirectionEnum(
var direction: Int,
var desc: String,
) {
ALERT_WARNING_NON(
0,
"关闭红色边框预警"
),
0),
ALERT_WARNING_TOP(
1,
"正上方"
),
1)
}
private fun countDownTimer() {
startTimer = object : CountDownTimer(ALL_CLOSE_TIMER, 1000L) {// 5倒计时后开启自驾
@SuppressLint("SetTextI18n")
override fun onTick(millisUntilFinished: Long) {
// 倒计时
startAutopilotTip.text = "${(millisUntilFinished/1000).toInt()} 车辆即将自动开启自动驾驶"
playDI()
}
override fun onFinish() {
//倒计时结束了...
startAutopilotTip.text = "车辆正在自动开启自动驾驶"
}
}
startTimer?.start()
}
}

View File

@@ -9,7 +9,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="开始自驾"
android:visibility="gone"
android:textSize="@dimen/dp_34"
android:textColor="@android:color/white"/>
<ImageView

View File

@@ -3,6 +3,7 @@ package com.mogo.och.taxi.base
import android.animation.ObjectAnimator
import android.annotation.SuppressLint
import android.os.Bundle
import android.os.CountDownTimer
import android.os.Handler
import android.os.Looper
import android.os.SystemClock
@@ -36,8 +37,10 @@ import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.map.listener.IMogoMapListener
import com.mogo.map.uicontroller.VisualAngleMode
import com.mogo.och.common.module.utils.AnimatorDrawableUtil
import com.mogo.och.common.module.wigets.StartAutopilotAnimationView
import com.mogo.och.taxi.R
import com.mogo.och.taxi.constant.TaxiUnmannedConst
import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.START_AUTOPILOT_ANIMATION_INTERVAL
import com.mogo.och.taxi.ui.TaxiAmapNaviFragment
import com.mogo.och.taxi.ui.TaxiRottingNaviFragment
import kotlinx.android.synthetic.main.taxi_base_fragment.anim_flow_iv
@@ -54,6 +57,7 @@ import kotlinx.android.synthetic.main.taxi_base_fragment.module_och_taxi_badcase
import kotlinx.android.synthetic.main.taxi_base_fragment.module_och_taxi_setting_layout
import kotlinx.android.synthetic.main.taxi_base_fragment.module_och_taxi_swich_map_layout
import kotlinx.android.synthetic.main.taxi_base_fragment.smallMapView
import kotlinx.android.synthetic.main.taxi_base_fragment.startAutopilotAnimationView
import kotlinx.android.synthetic.main.taxi_base_fragment.taxi_close_navi_icon
import kotlinx.android.synthetic.main.taxi_base_fragment.taxi_switch_icon
import kotlinx.android.synthetic.main.taxi_base_fragment.viewDriverMsgBoxBubble
@@ -301,6 +305,7 @@ abstract class BaseTaxiTabFragment<V : IView, P : Presenter<V>> : MvpFragment<V,
override fun onDestroyView() {
mapBizView.onDestroy()
startAutopilotAnimationView.cancelCountdown()
super.onDestroyView()
CallerAutopilotRecordListenerManager.removeListener(TAG)
}
@@ -616,4 +621,17 @@ abstract class BaseTaxiTabFragment<V : IView, P : Presenter<V>> : MvpFragment<V,
}
abstract fun startNaviToEndStation(isShow: Boolean)
fun showStartAutopilotBlinkAnimation(){
startAutopilotAnimationView.show(
StartAutopilotAnimationView.DirectionEnum.ALERT_WARNING_TOP,START_AUTOPILOT_ANIMATION_INTERVAL)
UiThreadHandler.postDelayed({
stopStartAutopilotBlinkAnimation()
},START_AUTOPILOT_ANIMATION_INTERVAL)
}
private fun stopStartAutopilotBlinkAnimation(){
startAutopilotAnimationView.dismiss(StartAutopilotAnimationView.DirectionEnum.ALERT_WARNING_TOP)
}
}

View File

@@ -16,7 +16,8 @@ data class OrderDetail(
var bookingUserPhone: String,
var passengerSize: Int,
var fullMinutes: Int, //到站后返回的总里程 /公里
var fullMileage: Float // 到站后返回的总用时 /分钟
var fullMileage: Float, // 到站后返回的总用时 /分钟
var orderLine: Long // 订单路线id
) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
@@ -91,16 +92,16 @@ 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 lineId: Long, var cityCode: Int, var taskType: Int,
var startSite: Site, var endSite: Site
) //taskType 1:虚拟任务 2:接驾任务3:送驾任务
: BaseData()
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
)
}
data class JumpPassengerCheckReqBean(var sn: String, var orderNo: String)
data class CancelOrderReqBean(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 ContrailListReqBean(var lineIds: Array<Long>)
data class QueryCarOrderByNoReqBean(var sn: String, var orderNo: String)
data class QueryCarOrderByNoRespBean(
var sn: String, var orderNo: String, var orderStatus: Int,

View File

@@ -14,4 +14,7 @@ public interface ITaxiControllerStatusCallback {
void onCarLocationChanged(MogoLocation location);
//开始开启自动驾驶
void startOpenAutopilot();
//自动开启自动驾驶
void startOpenAutopilotNonManual();
}

View File

@@ -73,7 +73,11 @@ class TaxiUnmannedConst {
const val TIMER_START_AUTOPILOT_INTERVAL = 20 * 1000L
const val TIMER_PREPARE_TASK_INTERVAL = 30 * 1000L
const val TIMER_PREPARE_TASK_INTERVAL = 30 * 1000L //30s再次获取任务
const val COUNTDOWN_INTERVAL = 5 * 1000L //30s再次获取任务
const val START_AUTOPILOT_ANIMATION_INTERVAL = 7 * 1000L //30s再次获取任务
}
}

View File

@@ -61,14 +61,13 @@ import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceM
import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.setStationPoint
import com.mogo.och.common.module.map.AmapNaviToDestinationModel
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjLocations
import com.mogo.och.common.module.voice.VoiceNotice
import com.mogo.och.taxi.bean.ContrailListRespBean
import com.mogo.och.taxi.bean.OrderDetail
import com.mogo.och.taxi.bean.PrepareTaskRespBean
import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean
import com.mogo.och.taxi.bean.StartServiceRespBean
import com.mogo.och.taxi.callback.IOCHTaxiAutopilotPlanningCallback
import com.mogo.och.taxi.callback.ITaxiADASStatusCallback
import com.mogo.och.taxi.callback.ITaxiCarOperationalCallback
import com.mogo.och.taxi.callback.ITaxiControllerStatusCallback
import com.mogo.och.taxi.callback.ITaxiOrderStatusCallback
import com.mogo.och.taxi.constant.TaskStatusEnum
@@ -76,10 +75,9 @@ import com.mogo.och.taxi.constant.TaxiOrderStatusEnum
import com.mogo.och.taxi.constant.TaxiOrderStatusEnum.Companion.valueOf
import com.mogo.och.taxi.constant.TaxiUnmannedConst
import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.BUSINESSTYPE
import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.TIMER_PREPARE_TASK_INTERVAL
import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.COUNTDOWN_INTERVAL
import com.mogo.och.taxi.network.CarServiceManager
import com.mogo.och.taxi.network.CarServiceManager.arriveSite
import com.mogo.och.taxi.network.CarServiceManager.prepareTask
import com.mogo.och.taxi.network.CarServiceManager.startTask
import com.mogo.och.taxi.utils.TaxiAnalyticsManager
import com.mogo.och.taxi.utils.TaxiTrajectoryManager
@@ -121,8 +119,7 @@ object TaxiModel {
private var mADASStatusCallback //Model->Presenter自动驾驶状态相关
: ITaxiADASStatusCallback? = null
private var mCarOperationalCallback //Model->Presenter登录状态和司机今日接单状态
: ITaxiCarOperationalCallback? = null
private var mControllerStatusCallback //Model->PresenterVR mode等
: ITaxiControllerStatusCallback? = null
private var mOrderStatusCallback //Model->Presenter订单变更
@@ -144,10 +141,6 @@ object TaxiModel {
mADASStatusCallback = callback
}
fun setCarStatusCallback(callback: ITaxiCarOperationalCallback?) {
mCarOperationalCallback = callback
}
fun setControllerStatusCallback(callback: ITaxiControllerStatusCallback?) {
mControllerStatusCallback = callback
}
@@ -300,7 +293,7 @@ object TaxiModel {
return
}
mCurrentTaskAndOrder = data
TaxiTrajectoryManager.getInstance().syncTrajectoryInfo()
SharedPrefsMgr.getInstance(mContext!!).putString(
TaxiUnmannedConst.SP_KEY_OCH_TAXI_ORDER,
GsonUtil.jsonFromObject(data)
@@ -410,7 +403,7 @@ object TaxiModel {
}
//根据开关和后台是否发布轨迹启动自驾
if (FunctionBuildConfig.isPassStartAutopilotCommand && TextUtils.isEmpty(
if (FunctionBuildConfig.isPassStartAutopilotCommand && mCurTaskContrail != null && TextUtils.isEmpty(
mCurTaskContrail!!.csvFileUrl
)
&& TextUtils.isEmpty(mCurTaskContrail!!.csvFileUrlDPQP)
@@ -707,12 +700,15 @@ object TaxiModel {
CarServiceManager.contrailList(mContext!!, planningLines,
object : OchCommonServiceCallback<ContrailListRespBean> {
override fun onSuccess(data: ContrailListRespBean?) {
d(SceneConstant.M_TAXI + TAG, "queryTaskContrail: ${GsonUtil.jsonFromObject(data?.data)}")
if (data == null || data.code != 0) return
mCurTaskContrail = data.data?.get(0)
TaxiTrajectoryManager.getInstance().syncTrajectoryInfo()
}
override fun onFail(code: Int, msg: String?) {
d(SceneConstant.M_TAXI + TAG, "queryOrderContrails code=$code,msg=$msg")
d(SceneConstant.M_TAXI + TAG, "queryTaskContrail code=$code,msg=$msg")
}
})
@@ -1068,4 +1064,17 @@ object TaxiModel {
fun updateOrderContrails(contrails: MutableList<ContrailListRespBean.Result>?) {
mOrderContrails = contrails
}
fun autoStartDriving(){
//启动动画+文字
if (mControllerStatusCallback != null) {
mControllerStatusCallback!!.startOpenAutopilotNonManual()
}
UiThreadHandler.postDelayed({
toStartTask() //状态流转
startAutoPilot() //自驾开启
VoiceNotice.showNotice("车辆正在自动开启自动驾驶")
},COUNTDOWN_INTERVAL) // 5s后开启自驾, 状态流转
}
}

View File

@@ -86,7 +86,7 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
}
is UnmannedIntent.CancelOrder -> {// 取消订单, 暂未加取消类型和原因
handleCancelOrder()
handleCancelOrder(intent.type)
}
is UnmannedIntent.StartTask -> {
@@ -95,9 +95,9 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
}
}
private fun handleCancelOrder() {
private fun handleCancelOrder(cancelType: Int) {
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null){
cancelOrder(mContext, mCurrentTaskAndOrder!!.order!!.orderNo,
cancelOrder(mContext, mCurrentTaskAndOrder!!.order!!.orderNo,cancelType,
object : OchCommonServiceCallback<BaseData>{
override fun onSuccess(data: BaseData?) {
d(SceneConstant.M_TAXI + TAG, "handleCancelOrder() = onSuccess")
@@ -130,7 +130,8 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
updateUntruthTask(null)
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.endSite != null
&& mCurrentTaskAndOrder!!.startSite != null){
&& mCurrentTaskAndOrder!!.startSite != null
&& mCurrentTaskAndOrder!!.currentStatus < TaskStatusEnum.CompleteTask.code){
VoiceNotice.showNotice("暂停接单啦!要完成当前订单哦")
}else{
VoiceNotice.showNotice("暂停接单啦")
@@ -283,7 +284,8 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
d(TAG, "queryCurrentTaskOnce = mCurrentTaskAndOrder = " + GsonUtil.jsonFromObject(mCurrentTaskAndOrder))
if (result!!.endSite == null && mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order!= null) {
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order!= null &&
result != null && result.order == null) {
//本地根据订单 orderNo 去查询下(乘客取消订单)
queryCurrentOrderStatusByNo(mCurrentTaskAndOrder!!.order!!.orderNo)
return
@@ -292,6 +294,8 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
//订单或者伪任务更新, 都去刷新下界面
if (mCurrentTaskAndOrder == null || !mCurrentTaskAndOrder!!.equals(result)){
if (result == null) return
if (result.endSite == null && result.order == null){
mCurrentTaskAndOrder = null
updateNoTaskAndOrderUi()
@@ -303,17 +307,29 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
}
mCurrentTaskAndOrder = result
TaxiModel.updateCurrentTaskAndOrder(result)
TaxiModel.updateStation()
updateTaskAndOrderUi()
//根据lineId集合去查轨迹集合
if (result.order != null && result.taskType == TaskTypeEnum.ToOrderStartTask.code){
queryOrderPickUpConertrail(result.order!!.planningLines)
if (result.order != null && result.order!!.orderStatus == TaxiOrderStatusEnum.ArriveAtEnd.code){
queryCurrentOrderStatusByNo(mCurrentTaskAndOrder!!.order!!.orderNo) //查询全程里程和用时,更新
}
TaxiModel.updateCurrentTaskAndOrder(result)
//根据lineId集合去查轨迹集合, 返回的只是接驾任务的line集合,没有送驾任务
if (result.order != null && result.order!!.orderStatus <= TaxiOrderStatusEnum.OnTheWayToEnd.code){
var lines = result.order!!.planningLines
lines[lines.size] = result.order!!.orderLine
queryOrderPickUpContrails(lines)
}
TaxiModel.updateStation()
if (result.currentStatus <= TaskStatusEnum.StartTask.code){//任务执行中, 去加载下轨迹
TaxiModel.queryTaskContrail(Array(1) {result.lineId})
}
updateTaskAndOrderUi()
if (result.taskType <= TaskTypeEnum.ToOrderStartTask.code
&& result.currentStatus == TaskStatusEnum.GetTask.code){//自动去启动自驾
TaxiModel.autoStartDriving()
}
}
}
@@ -328,7 +344,7 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
* 查询送驾任务轨迹集合
* 注: 运营单刚来的时候, 有可能还在运行一个演练任务, 要先跑完演练任务才跑运营单
*/
private fun queryOrderPickUpConertrail(planningLines: Array<Long>?) {
private fun queryOrderPickUpContrails(planningLines: Array<Long>?) {
if (planningLines == null) return
contrailList(mContext,planningLines,
object : OchCommonServiceCallback<ContrailListRespBean>{
@@ -337,12 +353,11 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
val contrails = data.data
if (mCurrentTaskAndOrder != null){
TaxiModel.updateOrderContrails(contrails)
TaxiModel.queryTaskContrail(Array(1) {mCurrentTaskAndOrder!!.lineId})
}
}
override fun onFail(code: Int, msg: String?) {
d(SceneConstant.M_TAXI + TAG, "queryOrderContrails code=$code,msg=$msg")
d(SceneConstant.M_TAXI + TAG, "queryOrderContrail code=$code,msg=$msg")
}
})
@@ -355,7 +370,6 @@ 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
mCurrentTaskAndOrder = null
updateTaskAndOrderUi()
return
@@ -400,14 +414,15 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
siteId,
object : OchCommonServiceCallback<PrepareTaskRespBean> {
override fun onSuccess(data: PrepareTaskRespBean?) {
d(SceneConstant.M_TAXI + TAG, GsonUtil.jsonFromObject(data))
d(SceneConstant.M_TAXI + TAG, "prepareTask = " + GsonUtil.jsonFromObject(data))
if (data == null || data.code != 0) return
//去下载轨迹, 下发给工控机下载
queryOrderPickUpConertrail(Array(1) { data.lineId })
TaxiModel.queryTaskContrail(Array(1) {data.data.lineId})
}
override fun onFail(code: Int, msg: String?) {
d(SceneConstant.M_TAXI + TAG, "$code $msg")
startPrepareTask(siteId) //失败后30s再次调用获取下一任务
}
})

View File

@@ -150,11 +150,11 @@ object CarServiceManager {
*/
@JvmStatic
fun cancelOrder(
context: Context, orderNo: String,
context: Context, orderNo: String, cancelType: Int,
callback: OchCommonServiceCallback<BaseData>?
) {
mOCHTaxiServiceApi.cancelOrder(
data = CancelOrderReqBean(MoGoAiCloudClientConfig.getInstance().sn, orderNo)
data = CancelOrderReqBean(MoGoAiCloudClientConfig.getInstance().sn, orderNo,cancelType)
).transformTry()
.subscribe(OchCommonSubscribeImpl(context, callback, "cancelOrder"))
}
@@ -167,8 +167,7 @@ object CarServiceManager {
context: Context, linIds: Array<Long>,
callback: OchCommonServiceCallback<ContrailListRespBean>?
) {
mOCHTaxiServiceApi.contrailList(
data = ContrailListReqBean(linIds)
mOCHTaxiServiceApi.contrailList(data = linIds
).transformTry()
.subscribe(OchCommonSubscribeImpl(context, callback, "contrailList"))
}

View File

@@ -4,7 +4,6 @@ import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.eagle.core.data.BaseData
import com.mogo.och.taxi.bean.ArriveSiteReqBean
import com.mogo.och.taxi.bean.CancelOrderReqBean
import com.mogo.och.taxi.bean.ContrailListReqBean
import com.mogo.och.taxi.bean.ContrailListRespBean
import com.mogo.och.taxi.bean.JumpPassengerCheckReqBean
import com.mogo.och.taxi.bean.OrderCompletedReqBean
@@ -128,7 +127,7 @@ interface UnmannedTaskServiceApi {
fun contrailList(
@Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId,
@Header("ticket") ticket: String = MoGoAiCloudClientConfig.getInstance().token,
@Body data: ContrailListReqBean?
@Body data: Array<Long>
): Observable<ContrailListRespBean>
/**

View File

@@ -15,21 +15,11 @@ public class TaxiOperationalPresenter extends Presenter<TaxiPersonalDialogFragme
implements ITaxiCarOperationalCallback {
public TaxiOperationalPresenter(TaxiPersonalDialogFragment view) {
super(view);
initListener();
}
private void initListener() {
TaxiModel.INSTANCE.setCarStatusCallback(this);
}
private void releaseListener(){
TaxiModel.INSTANCE.setCarStatusCallback(null);
}
@Override
public void onDestroy(@NonNull LifecycleOwner owner) {
super.onDestroy(owner);
releaseListener();
}
// 获取全部订单列表

View File

@@ -15,10 +15,8 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.och.common.module.biz.bean.DriverStatusQueryRespBean;
import com.mogo.och.common.module.biz.callback.ILoginCallback;
import com.mogo.och.common.module.biz.constant.LoginStatusManager;
import com.mogo.och.common.module.manager.OCHAdasAbilityManager;
import com.mogo.och.taxi.callback.ITaxiADASStatusCallback;
import com.mogo.och.taxi.callback.ITaxiCarOperationalCallback;
import com.mogo.och.taxi.callback.ITaxiControllerStatusCallback;
import com.mogo.och.taxi.callback.ITaxiOrderStatusCallback;
import com.mogo.och.taxi.constant.TaxiUnmannedConst;
@@ -35,7 +33,7 @@ import com.mogo.och.taxi.ui.TaxiFragment;
* 描述
*/
public class TaxiPresenter extends Presenter<TaxiFragment> implements ITaxiADASStatusCallback,
ITaxiOrderStatusCallback, ITaxiControllerStatusCallback, ILoginCallback, ITaxiCarOperationalCallback {
ITaxiOrderStatusCallback, ITaxiControllerStatusCallback, ILoginCallback {
private static final String TAG = TaxiPresenter.class.getSimpleName();
@@ -65,7 +63,6 @@ public class TaxiPresenter extends Presenter<TaxiFragment> implements ITaxiADASS
private void initListeners() {
TaxiModel.INSTANCE.setADASStatusCallback(this);
TaxiModel.INSTANCE.setControllerStatusCallback(this);
TaxiModel.INSTANCE.setCarStatusCallback(this);
TaxiModel.INSTANCE.setOrderStatusCallback(this);
}
@@ -185,6 +182,14 @@ public class TaxiPresenter extends Presenter<TaxiFragment> implements ITaxiADASS
});
}
@Override
public void startOpenAutopilotNonManual() {
runOnUIThread(() -> {
mView.startOrStopLoadingAnim(true);
mView.showStartAutopilotBlinkAnimation();
});
}
@Override
public void loginSuccess(DriverStatusQueryRespBean data) {
//设置 接单状态
@@ -211,9 +216,4 @@ public class TaxiPresenter extends Presenter<TaxiFragment> implements ITaxiADASS
public void loginFail(boolean isLogin) {
}
@Override
public void onServiceDataUpdate(long dailyTimeDuration, long dailyOrderNum) {
}
}

View File

@@ -148,11 +148,12 @@ class TaxiBeingTaskFragment : BaseFragment(),
@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>")
("<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)
}
@RequiresApi(Build.VERSION_CODES.N)
private fun updateReserveOrderChanged(taskAndOrder: QueryCurrentTaskRespBean.Result?) {
mTaxiFragment?.let {
it.updateReserveOrderChanged(taskAndOrder)
@@ -187,6 +188,7 @@ class TaxiBeingTaskFragment : BaseFragment(),
private fun updateUntruthTaskView() {
taskStatus.visibility = View.VISIBLE
taskTypeTv.visibility = View.GONE
cancelOrder.visibility = View.GONE
orderPhoneAndNum.visibility = View.GONE
startStationName.visibility = View.VISIBLE
endStationName.visibility = View.VISIBLE
@@ -240,7 +242,7 @@ class TaxiBeingTaskFragment : BaseFragment(),
}
if (taskAndOrder.currentStatus == TaskStatusEnum.CompleteTask.code
&& taskAndOrder.order == null && taskAndOrder.endSite == null){
&& taskAndOrder.order == null){
isHaveBeingOrder(false)
return
}
@@ -262,7 +264,12 @@ class TaxiBeingTaskFragment : BaseFragment(),
when (taskType) {
TaskTypeEnum.VirtualTask.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.text = resources.getString(R.string.task_exercise)
@@ -271,15 +278,13 @@ class TaxiBeingTaskFragment : BaseFragment(),
}
TaskTypeEnum.ToOrderEndTask.code,TaskTypeEnum.ToOrderStartTask.code -> {// 送驾/接驾任务任务
if (order == null) return
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} " +
"<font color=\"#33FFFFFF\"> | </font> " +
"${order.passengerSize}",Html.FROM_HTML_MODE_LEGACY)
startStationName.text = order.orderStartSite?.siteName
endStationName.text = order.orderEndSite?.siteName
updateOrderUI(order)
}
TaskTypeEnum.None.code -> {
if (order != null){
updateOrderUI(order)
}
}
}
updateRemainDistanceAndTime(false)
@@ -288,6 +293,14 @@ class TaxiBeingTaskFragment : BaseFragment(),
@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("<font color=\"#FFFFFF\"> " + order.bookingUserPhone + "</font>" +
"<font color=\"#33FFFFFF\"> | </font>" +
"<font color=\"#FFFFFF\">" + order.passengerSize + "" + "</font>",Html.FROM_HTML_MODE_LEGACY)
startStationName.text = order.orderStartSite?.siteName
endStationName.text = order.orderEndSite?.siteName
when(order.orderStatus){
TaxiOrderStatusEnum.None.code -> { //无
@@ -462,33 +475,45 @@ class TaxiBeingTaskFragment : BaseFragment(),
private fun updateUIShowStatus(taskType: Int, currentStatus: Int, order: OrderDetail?) {
when (taskType) {
TaskTypeEnum.None.code ->{
if (order != null && currentStatus == TaskStatusEnum.CompleteTask.code){
handleOrderView(order)
}
}
TaskTypeEnum.VirtualTask.code -> { //演练任务
cancelOrder.visibility = View.GONE
orderPhoneAndNum.visibility = View.GONE
taskClickBtn.visibility = View.GONE
// 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
}
TaskTypeEnum.ToOrderEndTask.code,TaskTypeEnum.ToOrderStartTask.code -> {// 运营单(接驾任务、送驾任务)
if (order == null) return
cancelOrder.visibility = View.VISIBLE
orderPhoneAndNum.visibility = View.VISIBLE
taskClickBtn.visibility = View.VISIBLE
// orderStatus: 0 订单创建(为派单), 10 已派上司机(司机去往上车点), 20 司机到达上车点,
// 30 乘客到达上车点, 40 服务中(去往目的地), 50 到达目的地, 60 已完成, 70 已取消
naviToStart.visibility = if (order.orderStatus
== TaxiOrderStatusEnum.OnTheWayToStart.code) View.VISIBLE else View.GONE
naviToEnd.visibility = if (order.orderStatus
== TaxiOrderStatusEnum.OnTheWayToEnd.code) View.VISIBLE else View.GONE
taskOtherInfo.visibility = View.VISIBLE
handleOrderView(order)
}
}
}
private fun handleOrderView(order: OrderDetail?) {
if (order == null) return
cancelOrder.visibility = View.VISIBLE
orderPhoneAndNum.visibility = View.VISIBLE
taskClickBtn.visibility = View.VISIBLE
taskTypeTv.visibility = View.VISIBLE
// orderStatus: 0 订单创建(为派单), 10 已派上司机(司机去往上车点), 20 司机到达上车点,
// 30 乘客到达上车点, 40 服务中(去往目的地), 50 到达目的地, 60 已完成, 70 已取消
naviToStart.visibility = if (order.orderStatus
== TaxiOrderStatusEnum.OnTheWayToStart.code) View.VISIBLE else View.GONE
naviToEnd.visibility = if (order.orderStatus
== TaxiOrderStatusEnum.OnTheWayToEnd.code) View.VISIBLE else View.GONE
taskOtherInfo.visibility = View.VISIBLE
}
private fun hideNavi() {
naviToStart.visibility = View.GONE
@@ -655,8 +680,8 @@ class TaxiBeingTaskFragment : BaseFragment(),
} else if (v.id == cancelOrder.id) {
if (mCurrentTaskAndOrder!!.order != null){
TaxiOrderCancelDialog(mActivity,mCurrentTaskAndOrder!!.order!!.orderStatus
) { type, reason ->
mViewModel.sendUiIntent(UnmannedIntent.CancelOrder(type,reason))
) {
mViewModel.sendUiIntent(UnmannedIntent.CancelOrder(it))
}
.show()
}

View File

@@ -11,6 +11,7 @@ import android.widget.TextView
import androidx.annotation.RequiresApi
import androidx.fragment.app.FragmentTransaction
import com.alibaba.android.arouter.launcher.ARouter
import com.elegant.network.utils.GsonUtil
import com.mogo.commons.module.status.MogoStatusManager
import com.mogo.eagle.core.data.temp.EventLogout
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
@@ -27,6 +28,12 @@ import com.mogo.och.taxi.presenter.TaxiPresenter
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
import kotlinx.android.synthetic.main.taxi_panel.orderInfo
import kotlinx.android.synthetic.main.taxi_panel.orderToStartLines
import kotlinx.android.synthetic.main.taxi_panel.taskEndSite
import kotlinx.android.synthetic.main.taxi_panel.taskStartSite
import kotlinx.android.synthetic.main.taxi_panel.taskStatus2
import kotlinx.android.synthetic.main.taxi_panel.taskType2
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
@@ -111,6 +118,7 @@ class TaxiFragment : BaseTaxiTabFragment<TaxiFragment, TaxiPresenter>(),
serverOrdersFragmentWR!!.get()!!.onChangeOperationStatus()
}
@RequiresApi(Build.VERSION_CODES.N)
fun updateReserveOrderChanged(taskAndOrder: QueryCurrentTaskRespBean.Result?){
if (null == serverOrdersFragmentWR || serverOrdersFragmentWR!!.get() == null) return
serverOrdersFragmentWR!!.get()!!.updateOrderChanged(taskAndOrder)
@@ -198,9 +206,7 @@ class TaxiFragment : BaseTaxiTabFragment<TaxiFragment, TaxiPresenter>(),
findViewById<View>(R.id.test_bar_to_virtual)?.setOnClickListener{
TaxiModel.setArriveAtUntruthStation()
}
findViewById<View>(R.id.test_bar_to_start)?.setOnClickListener {
TaxiModel.setArriveAtStartStation()
}
findViewById<View>(R.id.test_bar_to_end)?.setOnClickListener {
TaxiModel.setArriveAtEndStation()
}
@@ -276,35 +282,32 @@ class TaxiFragment : BaseTaxiTabFragment<TaxiFragment, TaxiPresenter>(),
testBar!!.visibility = View.GONE
} else {
val result = TaxiModel.getCurTaskAndOrder()
val task = result?.endSite
val order = result?.order
testCurOrderId!!.text = ":" + (order?.orderNo ?: "")
testCurLineId!!.text = "lineId:" + (result?.lineId.toString() ?: "")
// testCurTrajMd5!!.text = "TMd5:" + if (order == null) "" else order.csvFileMd5
// testCurStopMd5!!.text = "SMd5:" + if (order == null) "" else order.txtFileMd5
// testCurTrajMd5DPQP!!.text =
// "TMd5DPQP:" + if (order == null) "" else order.csvFileMd5DPQP
// testCurStopMd5DPQP!!.text =
// "SMd5DPQP:" + if (order == null) "" else order.txtFileMd5DPQP
testCurOrderId!!.text = "orderNo: " + order?.orderNo
testCurLineId!!.text = "当前任务lineId: " + result?.lineId
taskType2.text = "当前任务类型: " + result?.taskType
taskStatus2.text = "任务状态: "+ result?.currentStatus
taskStartSite.text = "任务开始站点: "+ result?.startSite?.siteName +
", siteId: " + result?.startSite?.siteId
taskEndSite.text = "任务结束站点: "+ result?.endSite?.siteName +
", siteId: " + result?.endSite?.siteId
orderInfo.text = "订单信息: 开始: " + order?.orderStartSite?.siteName + ", 结束: "+
order?.orderEndSite?.siteName + ", orderStatus: "+ order?.orderStatus
orderToStartLines.text = "接驾任务的lineId集合: " + GsonUtil.jsonFromObject(order?.planningLines)
val curContrail = TaxiModel.getCurTaskContrail()
testCurTrajMd5!!.text = "TMd5:" + curContrail?.csvFileMd5
testCurStopMd5!!.text = "SMd5:" + curContrail?.txtFileMd5
testCurTrajMd5DPQP!!.text =
"TMd5DPQP:" + curContrail?.csvFileMd5DPQP
testCurStopMd5DPQP!!.text =
"SMd5DPQP:" + curContrail?.txtFileMd5DPQP
testBar!!.visibility = View.VISIBLE
}
}
@SuppressLint("SetTextI18n")
private fun updateTaxiTestBarInfo() {
// if (testBar != null && testBar!!.visibility == View.VISIBLE) {
// val order = TaxiModel.getCurrentOrder()
// testCurOrderId!!.text = "orderNo:" + (order?.orderNo?.toString() ?: "")
// testCurLineId!!.text = "lineId:" + (order?.lineId?.toString() ?: "")
// testCurTrajMd5!!.text = "TMd5:" + if (order == null) "" else order.csvFileMd5
// testCurStopMd5!!.text = "SMd5:" + if (order == null) "" else order.txtFileMd5
// testCurTrajMd5DPQP!!.text =
// "TMd5DPQP:" + if (order == null) "" else order.csvFileMd5DPQP
// testCurStopMd5DPQP!!.text =
// "SMd5DPQP:" + if (order == null) "" else order.txtFileMd5DPQP
// }
}
companion object {
const val TAG = "TaxiFragment"
fun newInstance(): TaxiFragment {

View File

@@ -130,7 +130,7 @@ public class TaxiOrderCancelDialog extends AlertDialog implements View.OnClickLi
if (!TextUtils.isEmpty(mCurrentReason) && TaxiOrderCancelReasons.getType(mCurrentReason) != 0) {
//todo 取消正在执行的任务
if (mCommitListener != null){
mCommitListener.cancelCurOrder(TaxiOrderCancelReasons.getType(mCurrentReason),mCurrentReason);
mCommitListener.cancelCurOrder(TaxiOrderCancelReasons.getType(mCurrentReason));
}
dismiss();
}else {
@@ -150,7 +150,7 @@ public class TaxiOrderCancelDialog extends AlertDialog implements View.OnClickLi
}
interface CommitReasonListener{
void cancelCurOrder(int type, String reason);
void cancelCurOrder(int type);
}
class ContentAdapter extends BaseAdapter{

View File

@@ -5,8 +5,11 @@ import android.app.Activity
import android.content.Context
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 com.mogo.commons.mvp.BaseFragment
import com.mogo.och.taxi.R
import com.mogo.och.taxi.bean.OrderDetail
@@ -44,18 +47,26 @@ class TaxiReserveOrderFragment : BaseFragment() {
}
override fun initViews() {
showNoOrderView()
}
@RequiresApi(Build.VERSION_CODES.N)
fun updateOrderChanged(model: QueryCurrentTaskRespBean.Result?) {
if (model == null) return
if (model.order == null || model.taskType != TaskTypeEnum.ToOrderStartTask.code){
if (model?.order == null) {
showNoOrderView()
return
}
val order = model.order
updateOrderUI(order!!)
if (model.taskType == TaskTypeEnum.VirtualTask.code){
val order = model.order
updateOrderUI(order!!)
}else{
showNoOrderView()
}
}
@RequiresApi(Build.VERSION_CODES.N)
@SuppressLint("SetTextI18n")
private fun updateOrderUI(order: OrderDetail) {
showOrderView()
@@ -63,7 +74,10 @@ class TaxiReserveOrderFragment : BaseFragment() {
naviToStart.visibility = View.GONE
naviToEnd.visibility = View.GONE
orderPhoneAndNum.text = "${order.bookingUserPhone} | ${order.passengerSize}"
orderPhoneAndNum.text = Html.fromHtml("<font color=\"#FFFFFF\"> " + order.bookingUserPhone + "</font>" +
"<font color=\"#33FFFFFF\"> | </font>" +
"<font color=\"#FFFFFF\">" + order.passengerSize + "" + "</font>",Html.FROM_HTML_MODE_LEGACY)
order.orderStartSite?.let {
startStationName.text = it.siteName
@@ -72,7 +86,6 @@ class TaxiReserveOrderFragment : BaseFragment() {
endStationName.text = it.siteName
}
taskStatus.text = resources.getString(R.string.waiting_server)
taskTypeTv.text = resources.getString(R.string.task_order)
taskTypeTv.background = resources.getDrawable(R.drawable.task_order_type_btn_bg,null)

View File

@@ -169,6 +169,7 @@ class TaxiServerOrdersFragment : BaseFragment(){
beingTaskFragment!!.onChangeOperationStatus()
}
@RequiresApi(Build.VERSION_CODES.N)
fun updateOrderChanged(model: QueryCurrentTaskRespBean.Result?){
if (null == reserveOrdersFragment) return
reserveOrdersFragment!!.updateOrderChanged(model)

View File

@@ -14,7 +14,7 @@ sealed class UnmannedIntent: IUiIntent{
object StartTaskOrOrderLooper : UnmannedIntent()
//取消订单
class CancelOrder(type: Int, reason: String) : UnmannedIntent()
class CancelOrder(val type: Int) : UnmannedIntent()
object StartTask: UnmannedIntent()

View File

@@ -32,6 +32,11 @@ import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAX
public class TaxiTrajectoryManager {
private static final String TAG = TaxiTrajectoryManager.class.getSimpleName();
//载类型: 0:正常下载 1:预下载
private static final int COMMON_LOADING = 0;
private static final int PRE_LOADING = 1;
private static final class SingletonHolder {
private static final TaxiTrajectoryManager INSTANCE = new TaxiTrajectoryManager();
}
@@ -40,7 +45,11 @@ public class TaxiTrajectoryManager {
return SingletonHolder.INSTANCE;
}
//正常加载的路线
private AutopilotControlParameters.AutoPilotLine mAutoPilotLine = null;
//预加载的路线
private AutopilotControlParameters.AutoPilotLine mPreAutoPilotLine = null;
private Disposable mSendReqDisposable = null;
private String mPrevTaskLineId = "";
@@ -48,6 +57,10 @@ public class TaxiTrajectoryManager {
mAutoPilotLine = new AutopilotControlParameters.AutoPilotLine(-1, "",
"", "", "", "", 0, "",
"", "", "", "", 0);
mPreAutoPilotLine = new AutopilotControlParameters.AutoPilotLine(-1, "",
"", "", "", "", 0, "",
"", "", "", "", 0);
}
/**
@@ -124,17 +137,6 @@ public class TaxiTrajectoryManager {
final OrderDetail orderDetail = taskAndOrder.getOrder();
ContrailListRespBean.Result preloadContrail = null; //预加载的轨迹
if (orderDetail != null && orderContrails != null && orderContrails.size() != 0 ){
if (orderContrails.contains(curLineId)){ //预加载轨迹是curLineId索引的下一个
int index = orderContrails.indexOf(curLineId);
if (orderContrails.size()-1 >= index){
preloadContrail = orderContrails.get(index);
}
}else {//预加载轨迹直接是集合第一个
preloadContrail = orderContrails.get(0);
}
}
if (mAutoPilotLine == null) {
mAutoPilotLine = new AutopilotControlParameters.AutoPilotLine(curTaskContrail.getLineId(), curTaskContrail.getLineName(),
curTaskContrail.getCsvFileUrl(), curTaskContrail.getCsvFileMd5(), curTaskContrail.getTxtFileUrl(),
@@ -156,24 +158,76 @@ public class TaxiTrajectoryManager {
mAutoPilotLine.setStopMd5_dpqp(curTaskContrail.getTxtFileMd5DPQP());
mAutoPilotLine.setTimestamp_dpqp(curTaskContrail.getContrailSaveTimeDPQP());
}
if (orderDetail != null && orderContrails != null && orderContrails.size() != 0 ){
if (orderContrails.contains(curLineId)){ //预加载轨迹是curLineId索引的下一个
int index = orderContrails.indexOf(curLineId);
if (orderContrails.size()-1 >= index){
preloadContrail = orderContrails.get(index);
}
}else {//预加载轨迹直接是集合第一个
preloadContrail = orderContrails.get(0);
}
}
if (preloadContrail == null) return;
if (mPreAutoPilotLine == null) {
mPreAutoPilotLine = new AutopilotControlParameters.AutoPilotLine(preloadContrail.getLineId(), preloadContrail.getLineName(),
preloadContrail.getCsvFileUrl(), preloadContrail.getCsvFileMd5(), preloadContrail.getTxtFileUrl(),
preloadContrail.getTxtFileMd5(), preloadContrail.getContrailSaveTime(), "",//todo curTaskContrail.getCarModel()
preloadContrail.getCsvFileUrlDPQP(), preloadContrail.getCsvFileMd5DPQP(), preloadContrail.getTxtFileUrlDPQP(),
preloadContrail.getTxtFileMd5DPQP(), preloadContrail.getContrailSaveTimeDPQP());
} else {
mPreAutoPilotLine.setLineId(taskAndOrder.getLineId());
mPreAutoPilotLine.setLineName(preloadContrail.getLineName());
mPreAutoPilotLine.setTrajUrl(preloadContrail.getCsvFileUrl());
mPreAutoPilotLine.setTrajMd5(preloadContrail.getCsvFileMd5());
mPreAutoPilotLine.setStopUrl(preloadContrail.getTxtFileUrl());
mPreAutoPilotLine.setStopMd5(preloadContrail.getTxtFileMd5());
mPreAutoPilotLine.setTimestamp(preloadContrail.getContrailSaveTime());
mPreAutoPilotLine.setVehicleModel("");// todo curTaskContrail.getCarModel()
mPreAutoPilotLine.setTrajUrl_dpqp(preloadContrail.getCsvFileUrlDPQP());
mPreAutoPilotLine.setTrajMd5_dpqp(preloadContrail.getCsvFileMd5DPQP());
mPreAutoPilotLine.setStopUrl_dpqp(preloadContrail.getTxtFileUrlDPQP());
mPreAutoPilotLine.setStopMd5_dpqp(preloadContrail.getTxtFileMd5DPQP());
mPreAutoPilotLine.setTimestamp_dpqp(preloadContrail.getContrailSaveTimeDPQP());
}
}
}
private void clearAutoPilotLine() {
if (mAutoPilotLine == null) return;
mAutoPilotLine.setLineId(-1);
mAutoPilotLine.setLineName("");
mAutoPilotLine.setTrajUrl("");
mAutoPilotLine.setTrajMd5("");
mAutoPilotLine.setStopUrl("");
mAutoPilotLine.setStopMd5("");
mAutoPilotLine.setTimestamp(0);
mAutoPilotLine.setVehicleModel("");
mAutoPilotLine.setTrajUrl_dpqp("");
mAutoPilotLine.setTrajMd5_dpqp("");
mAutoPilotLine.setStopUrl_dpqp("");
mAutoPilotLine.setStopMd5_dpqp("");
mAutoPilotLine.setTimestamp_dpqp(0);
if (mAutoPilotLine != null){
mAutoPilotLine.setLineId(-1);
mAutoPilotLine.setLineName("");
mAutoPilotLine.setTrajUrl("");
mAutoPilotLine.setTrajMd5("");
mAutoPilotLine.setStopUrl("");
mAutoPilotLine.setStopMd5("");
mAutoPilotLine.setTimestamp(0);
mAutoPilotLine.setVehicleModel("");
mAutoPilotLine.setTrajUrl_dpqp("");
mAutoPilotLine.setTrajMd5_dpqp("");
mAutoPilotLine.setStopUrl_dpqp("");
mAutoPilotLine.setStopMd5_dpqp("");
mAutoPilotLine.setTimestamp_dpqp(0);
}
if (mPreAutoPilotLine != null){
mPreAutoPilotLine.setLineId(-1);
mPreAutoPilotLine.setLineName("");
mPreAutoPilotLine.setTrajUrl("");
mPreAutoPilotLine.setTrajMd5("");
mPreAutoPilotLine.setStopUrl("");
mPreAutoPilotLine.setStopMd5("");
mPreAutoPilotLine.setTimestamp(0);
mPreAutoPilotLine.setVehicleModel("");
mPreAutoPilotLine.setTrajUrl_dpqp("");
mPreAutoPilotLine.setTrajMd5_dpqp("");
mPreAutoPilotLine.setStopUrl_dpqp("");
mPreAutoPilotLine.setStopMd5_dpqp("");
mPreAutoPilotLine.setTimestamp_dpqp(0);
}
}
private void startTrajReqLoop() {
@@ -208,13 +262,19 @@ public class TaxiTrajectoryManager {
}
private void sendTrajectoryReq() {
if (mAutoPilotLine == null) {
if (mAutoPilotLine != null) {
CallerAutoPilotControlManager.INSTANCE.sendTrajectoryDownloadReq(mAutoPilotLine,COMMON_LOADING);
}else {
CallerLogger.INSTANCE.e(M_TAXI + TAG, "sendTrajectoryReq(): mAutoPilotLine is null!!!");
return;
}
CallerAutoPilotControlManager.INSTANCE.sendTrajectoryDownloadReq(mAutoPilotLine);
CallerLogger.INSTANCE.d(M_TAXI + TAG, "sendTrajectoryReq(): "
+ GsonUtils.toJson(mAutoPilotLine));
if (mPreAutoPilotLine != null){
CallerAutoPilotControlManager.INSTANCE.sendTrajectoryDownloadReq(mPreAutoPilotLine,PRE_LOADING);
}else {
CallerLogger.INSTANCE.e(M_TAXI + TAG, "sendTrajectoryReq(): mPreAutoPilotLine is null!!!");
}
CallerLogger.INSTANCE.d(M_TAXI + TAG, "sendTrajectoryReq(): common_load = "
+ GsonUtils.toJson(mAutoPilotLine) + "pre_load" + GsonUtils.toJson(mPreAutoPilotLine));
}
}

View File

@@ -91,8 +91,9 @@
</RelativeLayout>
<!--V2X预警红色边框-->
<com.mogo.eagle.core.function.hmi.ui.widget.V2XWarningView
<!--自动启动自驾闪烁上边框-->
<com.mogo.och.common.module.wigets.StartAutopilotAnimationView
android:id="@+id/startAutopilotAnimationView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"

View File

@@ -38,6 +38,48 @@
android:textColor="@android:color/white"
android:textSize="@dimen/dp_24" />
<TextView
android:id="@+id/taskType2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:textSize="@dimen/dp_24" />
<TextView
android:id="@+id/taskStatus2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:textSize="@dimen/dp_24" />
<TextView
android:id="@+id/taskStartSite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:textSize="@dimen/dp_24" />
<TextView
android:id="@+id/taskEndSite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:textSize="@dimen/dp_24" />
<TextView
android:id="@+id/orderInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:textSize="@dimen/dp_24" />
<TextView
android:id="@+id/orderToStartLines"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:textSize="@dimen/dp_24" />
<TextView
android:id="@+id/test_bar_current_traj_md5"
android:layout_width="wrap_content"
@@ -73,13 +115,6 @@
android:text="到达标定站点"
android:textSize="@dimen/dp_24" />
<Button
android:id="@+id/test_bar_to_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="到达起点"
android:textSize="@dimen/dp_24" />
<Button
android:id="@+id/test_bar_start_service_confirm"
android:layout_width="wrap_content"
@@ -98,7 +133,7 @@
android:id="@+id/test_bar_to_end"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="到达点"
android:text="到达点"
android:textSize="@dimen/dp_24" />
<Button