[抽出启动自驾、代码整理]
This commit is contained in:
yangyakun
2023-07-14 17:14:20 +08:00
parent 1e192b633a
commit 2b3d24b2b6
23 changed files with 614 additions and 1862 deletions

View File

@@ -5,6 +5,7 @@ import android.animation.ValueAnimator
import android.content.Context
import android.graphics.BitmapFactory
import android.graphics.drawable.ClipDrawable
import android.graphics.drawable.GradientDrawable
import android.graphics.drawable.LayerDrawable
import android.media.AudioManager
import android.os.Bundle

View File

@@ -1,11 +1,19 @@
package com.mogo.och.common.module.utils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.exceptions.UndeliverableException
import io.reactivex.plugins.RxJavaPlugins
import java.io.IOException
import java.util.concurrent.TimeUnit
import io.reactivex.functions.Consumer
object RxUtils {
private const val TAG = "RxUtils"
fun disposeSubscribe(subscribe: Disposable?) {
subscribe?.let {
if (!it.isDisposed) {
@@ -29,4 +37,41 @@ object RxUtils {
return false
}
// 调用Disposable.dispose() 时候会出现InterruptedException 导致出现崩溃
// The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the excTeption has nowhere to go to begin with
fun errCatch(){
RxJavaPlugins.setErrorHandler(Consumer { e ->
if (e is UndeliverableException) {
CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "UndeliverableException")
return@Consumer
}
if (e is IOException) { //
// fine, irrelevant network problem or API that throws on cancellation
CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "IOException")
return@Consumer
}
if (e is InterruptedException) {
// fine, some blocking code was interrupted by a dispose call
CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "InterruptedException")
return@Consumer
}
if (e is NullPointerException || e is IllegalArgumentException) {
// that's likely a bug in the application
CallerLogger.d(
SceneConstant.M_OCHCOMMON + TAG,
"NullPointerException or IllegalArgumentException"
)
Thread.currentThread().uncaughtExceptionHandler?.uncaughtException(Thread.currentThread(), e)
return@Consumer
}
if (e is IllegalStateException) {
// that's a bug in RxJava or in a custom operator
CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "IllegalStateException")
Thread.currentThread().uncaughtExceptionHandler?.uncaughtException(Thread.currentThread(), e)
return@Consumer
}
CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "Undeliverable exception")
})
}
}

View File

@@ -1,20 +0,0 @@
package com.mogo.och.taxi.passenger.callback;
/**
* Created on 2021/9/8
*
* Model->Presenter回调ADAS相关自动驾驶状态回调到达终点等等
*/
public interface IOCHTaxiPassengerADASStatusCallback {
// 自动驾驶触发的已到达目的地:暂未用到
void onAutopilotArriveEnd();
// 自动驾驶可用状态
void onAutopilotEnable();
// 自动驾驶不可用状态
void onAutopilotDisable();
// 自动驾驶运行中
void onAutopilotRunning();
}

View File

@@ -1,18 +0,0 @@
package com.mogo.och.taxi.passenger.callback;
import com.amap.api.maps.model.LatLng;
import com.mogo.eagle.core.data.map.MogoLocation;
import java.util.List;
import mogo.telematics.pad.MessagePad;
/**
* @author: wangmingjun
* @date: 2021/11/1
*/
public interface IOCHTaxiPassengerAutopilotPlanningCallback {
void setLineMarker(LatLng startStation,LatLng endStation);
void routeResultByServer(List<LatLng> routeArriviedTemp, List<LatLng> routeArrivingTemp, MogoLocation location);
void showRottingMapView();
}

View File

@@ -1,7 +0,0 @@
package com.mogo.och.taxi.passenger.callback;
import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean;
public interface ITaxiPassengerScoreCallback {
void onScoreCallback(TaxiPassengerScoreUpdateOrderReqBean taxiPassengerScoreUpdateOrderReqBean);
}

View File

@@ -20,9 +20,6 @@ class TaxiPassengerConst {
const val LOOP_PERIOD_1S = 1 * 1000L
const val LOOP_DELAY = 100L
// 订单信息
const val SP_KEY_OCH_TAXI_ORDER = "SP_KEY_OCH_TAXI_ORDER"
// 订单总里程
const val SP_KEY_ORDER_SUM_DIS = "SP_KEY_ORDER_SUM_DIS"

View File

@@ -0,0 +1,190 @@
package com.mogo.och.taxi.passenger.model
import com.elegant.network.utils.GsonUtil
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
import com.mogo.och.common.module.manager.OCHAdasAbilityManager
import com.mogo.och.common.module.utils.PinYinUtil
import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean
import com.mogo.och.taxi.passenger.bean.TaxiPassengerStartReqBean
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum
import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceManager
import com.mogo.och.taxi.passenger.utils.TaxiPassengerAnalyticsManager
object AutopilotManager : IMoGoAutopilotStatusListener {
private const val TAG = "AutopilotManager"
init {
CallerAutoPilotStatusListenerManager.addListener(TAG, this)
}
//检测当前订单
private fun checkCurrentOCHOrder(): Boolean {
return TaxiPassengerModel.currentOCHOrder != null && TaxiPassengerModel.currentOCHOrder!!.startSiteGcjPoint != null && TaxiPassengerModel.currentOCHOrder!!.endSiteGcjPoint != null
}
fun startAutopilot() {
if (!checkCurrentOCHOrder()) {
CallerLogger.e(
SceneConstant.M_TAXI_P + TAG,
"no order or order is empty."
)
ToastUtils.showShort("当前订单不存在或异常!")
return
}
if (TaxiPassengerModel.currentOCHOrder!!.orderStatus == TaxiPassengerOrderStatusEnum.UserArriveAtStart.code) {
startServicePilotDone()
}
if (!FunctionBuildConfig.isDemoMode && !OCHAdasAbilityManager.getInstance().autopilotAbilityStatus) {
ToastUtils.showLong(
OCHAdasAbilityManager.getInstance().autopilotUnAbilityReason +
", 请稍候重试"
)
TaxiPassengerAnalyticsManager.getInstance().triggerUnableStartAPReasonEvent(
TaxiPassengerModel.currentOCHOrder!!.startSiteAddr,
TaxiPassengerModel.currentOCHOrder!!.endSiteAddr,
TaxiPassengerModel.currentOCHOrder!!.orderNo,
OCHAdasAbilityManager.getInstance().autopilotUnAbilityReason
)
return
}
val parameters = initAutopilotControlParameters()
if (parameters == null) {
CallerLogger.d(
SceneConstant.M_TAXI_P + TAG,
"AutopilotControlParameters is empty."
)
return
}
CallerAutoPilotControlManager.startAutoPilot(parameters)
CallerLogger.d(
SceneConstant.M_TAXI_P + TAG,
"start autopilot with parameter: %s",
GsonUtil.jsonFromObject(parameters)
+ " ,startSiteName=" + TaxiPassengerModel.currentOCHOrder!!.startSiteAddr
+ " ,endSiteName=" + TaxiPassengerModel.currentOCHOrder!!.endSiteAddr
)
TaxiPassengerAnalyticsManager.getInstance().triggerStartAutopilotEvent(
false,
false,
TaxiPassengerModel.currentOCHOrder!!.startSiteAddr,
TaxiPassengerModel.currentOCHOrder!!.endSiteAddr,
TaxiPassengerModel.currentOCHOrder!!.orderNo
)
}
private fun initAutopilotControlParameters(): AutopilotControlParameters? {
if (!checkCurrentOCHOrder()) {
CallerLogger.e(
SceneConstant.M_TAXI_P + TAG,
"no order or order is empty."
)
ToastUtils.showShort("当前订单不存在或异常!")
return null
}
val parameters = AutopilotControlParameters()
val startWgsLon = TaxiPassengerModel.currentOCHOrder!!.startSitePoint[0]
val startWgsLat = TaxiPassengerModel.currentOCHOrder!!.startSitePoint[1]
val endWgsLon = TaxiPassengerModel.currentOCHOrder!!.endSitePoint[0]
val endWgsLat = TaxiPassengerModel.currentOCHOrder!!.endSitePoint[1]
parameters.vehicleType = TaxiPassengerModel.currentOCHOrder!!.businessType
parameters.startName =
PinYinUtil.getPinYinHeadChar(TaxiPassengerModel.currentOCHOrder!!.startSiteAddr) // 起点名称拼音首字母大写科学城B区2号门KXCBQ2HM
parameters.endName =
PinYinUtil.getPinYinHeadChar(TaxiPassengerModel.currentOCHOrder!!.endSiteAddr) // 终点名称拼音首字母大写科学城C区三号门KXCCQSHM
parameters.startLatLon =
AutopilotControlParameters.AutoPilotLonLat(startWgsLat, startWgsLon)
parameters.endLatLon = AutopilotControlParameters.AutoPilotLonLat(endWgsLat, endWgsLon)
if (parameters.autoPilotLine == null) {
parameters.autoPilotLine = AutopilotControlParameters.AutoPilotLine(
TaxiPassengerModel.currentOCHOrder!!.lineId,
TaxiPassengerModel.currentOCHOrder!!.csvFileUrl,
TaxiPassengerModel.currentOCHOrder!!.csvFileMd5,
TaxiPassengerModel.currentOCHOrder!!.txtFileUrl,
TaxiPassengerModel.currentOCHOrder!!.txtFileMd5,
TaxiPassengerModel.currentOCHOrder!!.contrailSaveTime,
TaxiPassengerModel.currentOCHOrder!!.carModel,
TaxiPassengerModel.currentOCHOrder!!.csvFileUrlDPQP,
TaxiPassengerModel.currentOCHOrder!!.csvFileMd5DPQP,
TaxiPassengerModel.currentOCHOrder!!.txtFileUrlDPQP,
TaxiPassengerModel.currentOCHOrder!!.txtFileMd5DPQP,
TaxiPassengerModel.currentOCHOrder!!.contrailSaveTimeDPQP
)
}
return parameters
}
/**
* 将业务订单信息保存,鹰眼可取用
*/
fun updateAutopilotControlParameters() {
val parameters = initAutopilotControlParameters()
if (null == parameters) {
CallerLogger.e(
SceneConstant.M_TAXI_P + TAG,
"AutopilotControlParameters is empty."
)
return
}
CallerLogger.d(
SceneConstant.M_TAXI_P + TAG,
"AutopilotControlParameters is update."
)
CallerAutoPilotStatusListenerManager.updateAutopilotControlParameters(parameters)
}
fun clearAutopilotControlParameters() {
CallerLogger.d(
SceneConstant.M_TAXI_P + TAG,
"AutopilotControlParameters is clear."
)
CallerAutoPilotStatusListenerManager.updateAutopilotControlParameters(null)
}
override fun onAutopilotStatusResponse(state: Int) {
// 启动自驾成功
when (state) {
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING -> {
if (TaxiPassengerModel.currentOCHOrder != null && TaxiPassengerModel.curOrderStatus === TaxiPassengerOrderStatusEnum.UserArriveAtStart) {
TaxiPassengerAnalyticsManager.getInstance().triggerStartAutopilotEvent(
false,
true,
TaxiPassengerModel.currentOCHOrder!!.startSiteAddr,
TaxiPassengerModel.currentOCHOrder!!.endSiteAddr,
TaxiPassengerModel.currentOCHOrder!!.orderNo
)
startServicePilotDone()
}
}
else -> {}
}
}
/**
* 乘客屏启动自动驾驶成功
*/
fun startServicePilotDone() {
if (TaxiPassengerModel.currentOCHOrder == null) return
val result = TaxiPassengerStartReqBean.Result()
val currentLocation = CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02()
result.lat = currentLocation.latitude
result.lon = currentLocation.longitude
TaxiPassengerServiceManager.startServicePilotDone(
TaxiPassengerModel.currentOCHOrder!!.orderNo, result,
object : OchCommonServiceCallback<TaxiPassengerBaseRespBean> {
override fun onSuccess(data: TaxiPassengerBaseRespBean) {}
override fun onFail(code: Int, msg: String) {}
})
}
}

View File

@@ -3,28 +3,11 @@ package com.mogo.och.taxi.passenger.model
import android.annotation.SuppressLint
import android.content.Context
import android.net.ConnectivityManager
import com.amap.api.maps.model.LatLng
import com.amap.api.navi.model.NaviLatLng
import com.elegant.network.utils.GsonUtil
import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager
import com.mogo.commons.module.intent.IMogoIntentListener
import com.mogo.commons.module.intent.IntentManager
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters.AutoPilotLine
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters.AutoPilotLonLat
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.function.api.autopilot.IMoGoPlanningRottingListener
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxEventListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager.startAutoPilot
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.updateAutopilotControlParameters
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils.isPassenger
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e
@@ -34,46 +17,25 @@ import com.mogo.eagle.core.utilcode.util.NetworkUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
import com.mogo.och.common.module.callback.OchAdasStartFailureCallback
import com.mogo.och.common.module.manager.AbnormalFactorsLoopManager.startLoopAbnormalFactors
import com.mogo.och.common.module.manager.AbnormalFactorsLoopManager.stopLoopAbnormalFactors
import com.mogo.och.common.module.manager.AbnormalFactorsLoopManager
import com.mogo.och.common.module.manager.OCHAdasAbilityManager
import com.mogo.och.common.module.manager.distancemamager.IDistanceListener
import com.mogo.och.common.module.manager.distancemamager.ITrajectoryListener
import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.addDistanceListener
import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.addTrajectoryListener
import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.removeListener
import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.setStationPoint
import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager
import com.mogo.och.common.module.manager.loopmanager.BizLoopManager
import com.mogo.och.common.module.manager.loopmanager.LoopInfo
import com.mogo.och.common.module.map.AmapNaviToDestinationModel
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil.calculateRouteSumLength
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjListCommon
import com.mogo.och.common.module.utils.PinYinUtil
import com.mogo.och.common.module.utils.RxUtils
import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean
import com.mogo.och.taxi.passenger.bean.TaxiPassengerQueryOrderRouteResp
import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean
import com.mogo.och.taxi.passenger.bean.TaxiPassengerStartReqBean
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerADASStatusCallback
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerAutopilotPlanningCallback
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonCallback
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonValueCallback
import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum.Companion.valueOf
import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceManager
import com.mogo.och.taxi.passenger.utils.TaxiPassengerAnalyticsManager
import io.reactivex.disposables.Disposable
import io.reactivex.exceptions.UndeliverableException
import io.reactivex.functions.Consumer
import io.reactivex.plugins.RxJavaPlugins
import mogo.telematics.pad.MessagePad.ArrivalNotification
import mogo.telematics.pad.MessagePad.GlobalPathResp
import java.io.IOException
import java.util.concurrent.ConcurrentHashMap
/**
@@ -88,30 +50,17 @@ object TaxiPassengerModel {
private val TAG = TaxiPassengerModel::class.java.simpleName
private val STARTREADYTOAUTOPILOT = "startReadyToAutopilot"
private val MINANDWAITSERVICE = "mInAndWaitService"
private val MQUERYORDERREMAINING = "mQueryOrderRemaining"
private const val STARTREADYTOAUTOPILOT = "startReadyToAutopilot"
private const val MINANDWAITSERVICE = "mInAndWaitService"
private const val MQUERYORDERREMAINING = "mQueryOrderRemaining"
// 获取当前订单
@Volatile
var currentOCHOrder: TaxiPassengerOrderQueryRespBean.Result? = null//当前订单
@Volatile
private var mInServiceList = emptyList<TaxiPassengerOrderQueryRespBean.Result>() //进行中订单
private var mADASStatusCallback: IOCHTaxiPassengerADASStatusCallback? = null//Model->Presenter自动驾驶状态相关
private var mAutopilotPlanningCallback: IOCHTaxiPassengerAutopilotPlanningCallback? = null//Model->Presenter自动驾驶线路规划
private val mOrderStatusCallbackMap: MutableMap<String, IOCHTaxiPassengerOrderStatusCallback> = ConcurrentHashMap()
private var subscribe: Disposable? = null
fun setMoGoAutopilotPlanningListener(moGoAutopilotPlanningCallback: IOCHTaxiPassengerAutopilotPlanningCallback?) {
mAutopilotPlanningCallback = moGoAutopilotPlanningCallback
}
fun setADASStatusCallback(callback: IOCHTaxiPassengerADASStatusCallback?) {
mADASStatusCallback = callback
}
fun setOrderStatusCallback(tag: String?, callback: IOCHTaxiPassengerOrderStatusCallback?) {
if (tag == null || "" == tag) return
if (callback == null) {
@@ -124,45 +73,14 @@ object TaxiPassengerModel {
fun init(context: Context) {
mContext = context.applicationContext
initListeners()
// 调用Disposable.dispose() 时候会出现InterruptedException 导致出现崩溃
// The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the excTeption has nowhere to go to begin with
RxJavaPlugins.setErrorHandler(Consumer { e ->
if (e is UndeliverableException) {
d(M_TAXI_P + TAG, "UndeliverableException")
return@Consumer
}
if (e is IOException) { //
// fine, irrelevant network problem or API that throws on cancellation
d(M_TAXI_P + TAG, "IOException")
return@Consumer
}
if (e is InterruptedException) {
// fine, some blocking code was interrupted by a dispose call
d(M_TAXI_P + TAG, "InterruptedException")
return@Consumer
}
if (e is NullPointerException || e is IllegalArgumentException) {
// that's likely a bug in the application
d(M_TAXI_P + TAG, "NullPointerException or IllegalArgumentException")
Thread.currentThread().uncaughtExceptionHandler?.uncaughtException(Thread.currentThread(), e)
return@Consumer
}
if (e is IllegalStateException) {
// that's a bug in RxJava or in a custom operator
d(M_TAXI_P + TAG, "IllegalStateException")
Thread.currentThread().uncaughtExceptionHandler?.uncaughtException(Thread.currentThread(), e)
return@Consumer
}
d(M_TAXI_P + TAG, "Undeliverable exception")
})
RxUtils.errCatch()
startOrStopOrderLoop()
}
/**
* 订单轮询 初始化主Fragment的Presenter init 调用
*/
fun startOrStopOrderLoop() {
private fun startOrStopOrderLoop() {
if (NetworkUtils.isConnected(mContext)) {
startOrStopOrderLoop(true)
}
@@ -181,30 +99,22 @@ object TaxiPassengerModel {
private fun initListeners() {
// 2021.11.1重构自动驾驶 实现接口 IMoGoAutopilotStatusListener 注册监听 替换IMogoAdasOCHCallback接口
CallerAutoPilotStatusListenerManager.addListener(TAG, mGoAutopilotStatusListener)
IntentManager.getInstance().registerIntentListener(ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener)
//2021.11.1 自动驾驶路线规划接口
CallerPlanningRottingListenerManager.addListener(TAG, moGoAutopilotPlanningListener)
startLoopAbnormalFactors(mContext!!)
AbnormalFactorsLoopManager.startLoopAbnormalFactors(mContext!!)
//开启自驾后 异常信息返回
OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(mAdasStartFailureListener)
CallerMsgBoxEventListenerManager.addListener(TAG, iMsgBoxEventListener)
addDistanceListener(TAG, distanceListener)
addTrajectoryListener(TAG, trajectoryListener)
TrajectoryAndDistanceManager.addDistanceListener(TAG, distanceListener)
}
private fun releaseListeners() {
MogoAiCloudSocketManager.getInstance(mContext)
.unregisterLifecycleListener(10010)
CallerAutoPilotStatusListenerManager.removeListener(mGoAutopilotStatusListener)
CallerPlanningRottingListenerManager.removeListener(moGoAutopilotPlanningListener)
stopLoopAbnormalFactors()
MogoAiCloudSocketManager.getInstance(mContext).unregisterLifecycleListener(10010)
AbnormalFactorsLoopManager.stopLoopAbnormalFactors()
OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(null)
CallerMsgBoxEventListenerManager.removeListener(iMsgBoxEventListener)
removeListener(TAG)
TrajectoryAndDistanceManager.removeListener(TAG)
}
/**
@@ -227,49 +137,21 @@ object TaxiPassengerModel {
* 注只有在本地缓存mCurrentOCHOrder为null时已完成or已取消有明确结果或id相同且status不同时
* 才更新最新进行中单到本地
*/
fun queryInAndWaitOrders() {
private fun queryInAndWaitOrders() {
TaxiPassengerServiceManager.queryOrdersInAndWaitService(
mContext!!,
object : OchCommonServiceCallback<TaxiPassengerOrdersInServiceQueryRespBean> {
override fun onSuccess(data: TaxiPassengerOrdersInServiceQueryRespBean) {
if (data.data == null) {
return
}
//1. 处理进行中订单
mInServiceList = data.data.servicing
if (data.data.servicing != null && data.data.servicing.isNotEmpty()) {
// 1.1. 当存在进行中单时对本地currentOrder进行更新
if (currentOCHOrder == null) {
//1.1.1. 当本地无currentOrder已经完成or取消则更新currentOrder并通知ui更新
updateNativeCurrentOrder(data.data.servicing[0])
if (mOrderStatusCallbackMap.isNotEmpty()) {
for (callback in mOrderStatusCallbackMap.values) {
callback.onCurrentOrderStatusChanged(currentOCHOrder)
}
}
} else {
//1.1.2. 当本地有currentOrder
//orderId不一致时通过currentOrder.orderId查询订单状态并通知ui更新
//orderId一致且orderStatus不一致时则更新currentOrder并通知ui更新
if (currentOCHOrder!!.orderNo != data.data.servicing[0].orderNo) {
queryCurOrderStatus()
// } else if (mCurrentOCHOrder.orderStatus != data.data.servicing.get(0).orderStatus) {
} else { //todo 订单拦截放到各自实现去做
updateNativeCurrentOrder(data.data.servicing[0])
if (mOrderStatusCallbackMap.isNotEmpty()) {
for (callback in mOrderStatusCallbackMap.values) {
callback.onCurrentOrderStatusChanged(currentOCHOrder)
}
}
}
val currentOrder = data.data.servicing[0]
if(currentOCHOrder==null||currentOCHOrder?.orderStatus!=currentOrder.orderStatus){
orderStatusChange(currentOrder)
}
} else {
// 1.2. 当无进行中订单时如果本地也无则跳过如果本地仍存在currentOrder查询此单完成or取消并通知ui更
if (currentOCHOrder != null) {
queryCurOrderStatus()
}
recoverNaviInfo()
currentOCHOrder = currentOrder
}
}
@@ -280,39 +162,6 @@ object TaxiPassengerModel {
})
}
//仅用于轮询时查到本地有mCurrentOCHOrder但请求结果无进行中单or orderId不一致是复查本地currentOrder
private fun queryCurOrderStatus() {
if (currentOCHOrder == null) {
return
}
val orderNo = currentOCHOrder!!.orderNo
TaxiPassengerServiceManager.queryOrderById(
mContext!!, orderNo,
object : OchCommonServiceCallback<TaxiPassengerOrderQueryRespBean> {
override fun onSuccess(data: TaxiPassengerOrderQueryRespBean) {
if (data.data != null && currentOCHOrder != null && currentOCHOrder!!.orderNo == data.data.orderNo) {
if (data.data.orderStatus == TaxiPassengerOrderStatusEnum.Cancel.code || data.data.orderStatus == TaxiPassengerOrderStatusEnum.JourneyCompleted.code || data.data.orderStatus == TaxiPassengerOrderStatusEnum.None.code) {
if (mOrderStatusCallbackMap.isNotEmpty()) {
for (callback in mOrderStatusCallbackMap.values) {
callback.onCurrentOrderStatusChanged(data.data)
}
}
clearCurrentOCHOrder()
} else {
updateNativeCurrentOrder(data.data)
if (mOrderStatusCallbackMap.isNotEmpty()) {
for (callback in mOrderStatusCallbackMap.values) {
callback.onCurrentOrderStatusChanged(currentOCHOrder)
}
}
}
}
}
override fun onFail(code: Int, msg: String) {}
})
}
// 获取当前订单状态
val curOrderStatus: TaxiPassengerOrderStatusEnum
get() {
@@ -322,63 +171,13 @@ object TaxiPassengerModel {
return valueOf(order.orderStatus)
}
//更新本地currentOrder信息并保存订单到本地避免车机重启丢失数据
private fun updateNativeCurrentOrder(data: TaxiPassengerOrderQueryRespBean.Result?) {
if (data == null) {
return
}
currentOCHOrder = data
SharedPrefsMgr.getInstance(mContext!!).putString(
TaxiPassengerConst.SP_KEY_OCH_TAXI_ORDER,
GsonUtil.jsonFromObject(data)
)
}
//清除订单信息
fun clearCurrentOCHOrder() {
currentOCHOrder = null
clearAutopilotControlParameters()
SharedPrefsMgr.getInstance(mContext!!).remove(TaxiPassengerConst.SP_KEY_OCH_TAXI_ORDER)
}
//检测当前订单
fun checkCurrentOCHOrder(): Boolean {
return currentOCHOrder != null && currentOCHOrder!!.startSiteGcjPoint != null && currentOCHOrder!!.endSiteGcjPoint != null
}
//监听网络变化,避免启动机器时无网导致无法更新订单信息
private val distanceListener: IDistanceListener = object : IDistanceListener {
override fun distanceCallback(distance: Float) {
// TODO: 计算站点到站点的距离 calculateRouteLineSum()
SharedPrefsMgr.getInstance(mContext!!).putInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, 12)
}
}
private val trajectoryListener: ITrajectoryListener =
object : ITrajectoryListener {
override fun trajectoryCallback(
routeArrivied: MutableList<MogoLocation>,
routeArriving: MutableList<MogoLocation>,
location: MogoLocation
) {
val routeArriviedTemp: MutableList<LatLng> = ArrayList()
val routeArrivingTemp: MutableList<LatLng> = ArrayList()
var temp: LatLng
for (mogoLocation in routeArrivied) {
temp = LatLng(mogoLocation.latitude, mogoLocation.longitude)
routeArriviedTemp.add(temp)
}
for (mogoLocation in routeArriving) {
temp = LatLng(mogoLocation.latitude, mogoLocation.longitude)
routeArrivingTemp.add(temp)
}
mAutopilotPlanningCallback!!.routeResultByServer(
routeArriviedTemp,
routeArrivingTemp,
location
)
setRouteLineMarker()
}
}
private val mNetWorkIntentListener = IMogoIntentListener { intentStr, intent ->
d(M_TAXI_P + TAG, "onIntentReceived = %s", intentStr)
if (ConnectivityManager.CONNECTIVITY_ACTION == intentStr) {
@@ -388,142 +187,21 @@ object TaxiPassengerModel {
}
}
private val mGoAutopilotStatusListener: IMoGoAutopilotStatusListener =
object : IMoGoAutopilotStatusListener {
private var arriveAtEnd = false //乘客app专用字段
override fun onAutopilotStatusResponse(state: Int) {
if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) {
if (mADASStatusCallback != null) mADASStatusCallback!!.onAutopilotRunning()
if (currentOCHOrder != null
&& curOrderStatus === TaxiPassengerOrderStatusEnum.UserArriveAtStart
) {
TaxiPassengerAnalyticsManager.getInstance().triggerStartAutopilotEvent(
false,
true,
currentOCHOrder!!.startSiteAddr,
currentOCHOrder!!.endSiteAddr,
currentOCHOrder!!.orderNo
)
startServicePilotDone()
}
} else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) {
if (FunctionBuildConfig.isDemoMode
&& isPassenger(FunctionBuildConfig.appIdentityMode)
) {
// 当美化模式演示模式开启时且是乘客app、且未到终点时维持自动驾驶icon开启状态
arriveAtEnd = if (!arriveAtEnd) {
return
} else {
false
}
}
if (mADASStatusCallback != null) mADASStatusCallback!!.onAutopilotEnable()
} else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) {
if (FunctionBuildConfig.isDemoMode
&& isPassenger(FunctionBuildConfig.appIdentityMode)
) {
// 当美化模式演示模式开启时且是乘客app、且未到终点时维持自动驾驶icon开启状态
arriveAtEnd = if (!arriveAtEnd) {
return
} else {
false
}
}
if (mADASStatusCallback != null) mADASStatusCallback!!.onAutopilotDisable()
}
}
override fun onAutopilotArriveAtStation(arrivalNotification: ArrivalNotification?) {
if (FunctionBuildConfig.isDemoMode
&& isPassenger(FunctionBuildConfig.appIdentityMode)
) {
arriveAtEnd = true
}
if (arrivalNotification == null || !checkCurrentOCHOrder() || curOrderStatus === TaxiPassengerOrderStatusEnum.ArriveAtEnd) {
return
}
}
}
private val moGoAutopilotPlanningListener: IMoGoPlanningRottingListener =
object : IMoGoPlanningRottingListener {
override fun onAutopilotRotting(globalPathResp: GlobalPathResp?) {
if (null != globalPathResp && globalPathResp.wayPointsList.size > 0) {
calculateRouteLineSum(
coordinateConverterWgsToGcjListCommon(mContext, globalPathResp.wayPointsList)
)
startToRouteAndWipe()
}
}
}
private val mAdasStartFailureListener: OchAdasStartFailureCallback = object : OchAdasStartFailureCallback {
override fun onStartAutopilotFailure(startFailedCode: String, startFailedMessage: String) {
TaxiPassengerAnalyticsManager.getInstance().triggerStartAutopilotFailureEventByAdas(startFailedCode, startFailedMessage)
}
}
private val iMsgBoxEventListener: IMsgBoxEventListener = object : IMsgBoxEventListener {
override fun onBubbleReportClickEvent(msgBoxBean: MsgBoxBean) {}
override fun onBubbleV2XClickEvent(msgBoxBean: MsgBoxBean) {}
override fun onBubbleOperationClickEvent(msgBoxBean: MsgBoxBean) {}
override fun onUpdateTipEvent(isShow: Boolean) {}
override fun onSummaryClickEvent() {
if (currentOCHOrder == null) {
ToastUtils.showLong("行程已结束")
} else {
// TODO: 页面进入全览
}
}
}
fun startToRouteAndWipe() {
showRottingMapView()
}
private fun showRottingMapView() {
AmapNaviToDestinationModel.getInstance(mContext).destroyAmaNavi()
if (mAutopilotPlanningCallback != null) {
mAutopilotPlanningCallback!!.showRottingMapView()
}
}
fun startNaviByAmap() {
if (currentOCHOrder != null &&
currentOCHOrder!!.orderStatus == TaxiPassengerOrderStatusEnum.OnTheWayToEnd.code
) {
AmapNaviToDestinationModel.getInstance(mContext).destroyAmaNavi()
val orderEndStationLat = currentOCHOrder!!.endSiteGcjPoint[1]
val orderEndStationLng = currentOCHOrder!!.endSiteGcjPoint[0]
val currentLocation = CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02()
val startNaviLatLng = NaviLatLng(currentLocation.latitude, currentLocation.longitude)
val endNaviLatLng = NaviLatLng(orderEndStationLat, orderEndStationLng)
AmapNaviToDestinationModel.getInstance(mContext)
.initAMapNavi(startNaviLatLng, endNaviLatLng)
AmapNaviToDestinationModel.getInstance(mContext).setVoiceIsMute(false)
}
}
/**
* 设置小地图路径的起终点marker
*/
fun setRouteLineMarker() {
if (currentOCHOrder!!.startSiteGcjPoint == null || currentOCHOrder!!.startSiteGcjPoint.isEmpty() || currentOCHOrder!!.startSiteGcjPoint.size < 2 || currentOCHOrder!!.endSiteGcjPoint == null || currentOCHOrder!!.endSiteGcjPoint.isEmpty() || currentOCHOrder!!.endSiteGcjPoint.size < 2) {
setMarker(null, null)
return
}
val startStation = LatLng(
currentOCHOrder!!.startSiteGcjPoint[1], currentOCHOrder!!.startSiteGcjPoint[0]
)
val endStation = LatLng(
currentOCHOrder!!.endSiteGcjPoint[1], currentOCHOrder!!.endSiteGcjPoint[0]
)
setMarker(startStation, endStation)
}
private fun setMarker(startStation: LatLng?, endStation: LatLng?) {
if (mAutopilotPlanningCallback != null) {
mAutopilotPlanningCallback!!.setLineMarker(startStation, endStation)
}
}
fun startOrStopQueryOrderRemaining(isStart: Boolean) {
if (isStart) {
BizLoopManager.setLoopFunction(MQUERYORDERREMAINING,LoopInfo(2, TaxiPassengerModel::queryOrderRemaining))
@@ -535,20 +213,16 @@ object TaxiPassengerModel {
/**
* 查询订单剩余里程和时间
*/
fun queryOrderRemaining() {
private fun queryOrderRemaining() {
if (currentOCHOrder == null) return
TaxiPassengerServiceManager.queryOrderRemaining(
mContext!!,
currentOCHOrder!!.orderNo,
object : OchCommonServiceCallback<TaxiPassengerOrderQueryRemainingResp> {
override fun onSuccess(data: TaxiPassengerOrderQueryRemainingResp) {
if (data.data != null) {
e(M_TAXI_P + TAG, "distance = " + data.data.distance + " ,duration = " + data.data.duration)
for (callback in mOrderStatusCallbackMap.values) {
callback.onCurrentOrderDistToEndChanged(
data.data.distance,
data.data.duration
)
callback.onCurrentOrderDistToEndChanged(data.data.distance, data.data.duration)
}
}
}
@@ -557,36 +231,6 @@ object TaxiPassengerModel {
})
}
fun queryOrderRouteList() {
if (currentOCHOrder == null) return
d(M_TAXI_P + TAG, "--route--- queryOrderRouteList")
TaxiPassengerServiceManager.queryOrderRouteList(
mContext!!,
currentOCHOrder!!.orderNo,
object : OchCommonServiceCallback<TaxiPassengerQueryOrderRouteResp> {
override fun onSuccess(data: TaxiPassengerQueryOrderRouteResp) {
d(M_TAXI_P + TAG, "--route---" + GsonUtil.jsonFromObject(data))
if (data.data != null && data.data != null && data.data.size > 0) {
if (mAutopilotPlanningCallback != null) {
calculateRouteLineSum(data.data)
}
} else {
RxUtils.disposeSubscribe(subscribe)
subscribe = RxUtils.createSubscribe {
queryOrderRouteList()
}
}
}
override fun onFail(code: Int, msg: String) {
RxUtils.disposeSubscribe(subscribe)
subscribe = RxUtils.createSubscribe {
queryOrderRouteList()
}
}
})
}
/**
* 订单结束或者取消的时候, 刷新导航标识位以及缓存的数据
*/
@@ -594,38 +238,23 @@ object TaxiPassengerModel {
SharedPrefsMgr.getInstance(mContext!!).remove(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS)
}
fun calculateRouteLineSum(points: List<LatLng>?) {
val sumLength = calculateRouteSumLength(points)
SharedPrefsMgr.getInstance(mContext!!)
.putInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, sumLength.toInt())
}
fun checkPhoneAndUpdateStatus(
phoneTail: String?,
commonCallback: ITaxiPassengerCommonCallback?
) {
if (currentOCHOrder == null) return
TaxiPassengerServiceManager.checkPhoneAndUpdateOrderStatus(
mContext!!, currentOCHOrder!!.orderNo,
currentOCHOrder!!.orderNo,
phoneTail, object : OchCommonServiceCallback<TaxiPassengerBaseRespBean> {
override fun onSuccess(data: TaxiPassengerBaseRespBean) {
if (data.code == 0 && currentOCHOrder != null) {
currentOCHOrder!!.orderStatus = TaxiPassengerOrderStatusEnum.UserArriveAtStart.code
//乘客验证成功,更新订单状态为 "乘客已上车", 立马弹出乘客开始行程页面,不再等待轮询
currentOCHOrder!!.orderStatus =
TaxiPassengerOrderStatusEnum.UserArriveAtStart.code
if (mOrderStatusCallbackMap.isNotEmpty()) {
for (callback in mOrderStatusCallbackMap.values) {
callback.onCurrentOrderStatusChanged(currentOCHOrder)
}
}
orderStatusChange(currentOCHOrder!!)
}
commonCallback?.onCommonCallback()
}
override fun onError() {
ToastUtils.showLong("当前网络异常,请重新验证;若始终异常,请您在手机端取消行程,给您带来不便,十分抱歉!")
}
override fun onFail(code: Int, msg: String) {
ToastUtils.showLong("当前网络异常,请重新验证;若始终异常,请您在手机端取消行程,给您带来不便,十分抱歉!")
e(
@@ -636,35 +265,21 @@ object TaxiPassengerModel {
})
}
fun arrivedAndScore(
taxiPassengerScoreUpdateOrderReqBean: TaxiPassengerScoreUpdateOrderReqBean,
commonCallback: ITaxiPassengerCommonValueCallback<Boolean?>?
) {
if (taxiPassengerScoreUpdateOrderReqBean.orderNo == null) return
TaxiPassengerServiceManager.arrivedAndScore(
mContext!!, taxiPassengerScoreUpdateOrderReqBean,
object : OchCommonServiceCallback<TaxiPassengerBaseRespBean> {
override fun onSuccess(data: TaxiPassengerBaseRespBean) {
commonCallback?.onCommonCallback(true)
}
override fun onError() {
ToastUtils.showLong("网络错误请稍后再试")
e(M_TAXI_P + TAG, "对订单进行打分 1-5分 网络错误")
commonCallback?.onCommonCallback(false)
}
override fun onFail(code: Int, msg: String) {
e(M_TAXI_P + TAG, "对订单进行打分 1-5分 后台结果错误$code$msg")
commonCallback?.onCommonCallback(false)
}
})
fun orderStatusChange(currentOCHOrder: TaxiPassengerOrderQueryRespBean.Result){
if (mOrderStatusCallbackMap.isNotEmpty()) {
for (callback in mOrderStatusCallbackMap.values) {
callback.onCurrentOrderStatusChanged(currentOCHOrder)
}
}
}
fun loopQueryPilotStatus() {
/**
* 查询司机是否已确认可开启自动驾驶
*/
private fun loopQueryPilotStatus() {
if (currentOCHOrder == null) return
TaxiPassengerServiceManager.queryPilotStatus(
mContext!!, currentOCHOrder!!.orderNo,
currentOCHOrder!!.orderNo,
object : OchCommonServiceCallback<TaxiPassengerBaseRespBean> {
override fun onSuccess(data: TaxiPassengerBaseRespBean) {
if (data.code == 0 && data.data == true) {
@@ -703,131 +318,4 @@ object TaxiPassengerModel {
}
}
fun startServicePilotDone() {
if (currentOCHOrder == null) return
val result = TaxiPassengerStartReqBean.Result()
val currentLocation = CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02()
result.lat = currentLocation.latitude
result.lon = currentLocation.longitude
TaxiPassengerServiceManager.startServicePilotDone(
mContext!!,
currentOCHOrder!!.orderNo, result,
object : OchCommonServiceCallback<TaxiPassengerBaseRespBean> {
override fun onSuccess(data: TaxiPassengerBaseRespBean) {}
override fun onFail(code: Int, msg: String) {
// ToastUtils.showShort(msg);
}
})
}
fun startAutopilot() {
if (!checkCurrentOCHOrder()) {
e(M_TAXI_P + TAG, "no order or order is empty.")
ToastUtils.showShort("当前订单不存在或异常!")
return
}
if (currentOCHOrder!!.orderStatus == TaxiPassengerOrderStatusEnum.UserArriveAtStart.code) {
startServicePilotDone()
}
if (!FunctionBuildConfig.isDemoMode && !OCHAdasAbilityManager.getInstance().autopilotAbilityStatus) {
ToastUtils.showLong(
OCHAdasAbilityManager.getInstance().autopilotUnAbilityReason +
", 请稍候重试"
)
TaxiPassengerAnalyticsManager.getInstance().triggerUnableStartAPReasonEvent(
currentOCHOrder!!.startSiteAddr,
currentOCHOrder!!.endSiteAddr,
currentOCHOrder!!.orderNo,
OCHAdasAbilityManager.getInstance().autopilotUnAbilityReason
)
return
}
val parameters = initAutopilotControlParameters()
if (parameters == null) {
d(M_TAXI_P + TAG, "AutopilotControlParameters is empty.")
return
}
startAutoPilot(parameters)
d(
M_TAXI_P + TAG,
"start autopilot with parameter: %s",
GsonUtil.jsonFromObject(parameters)
+ " ,startSiteName=" + currentOCHOrder!!.startSiteAddr
+ " ,endSiteName=" + currentOCHOrder!!.endSiteAddr
)
TaxiPassengerAnalyticsManager.getInstance().triggerStartAutopilotEvent(
false,
false,
currentOCHOrder!!.startSiteAddr,
currentOCHOrder!!.endSiteAddr,
currentOCHOrder!!.orderNo
)
}
private fun initAutopilotControlParameters(): AutopilotControlParameters? {
if (!checkCurrentOCHOrder()) {
e(M_TAXI_P + TAG, "no order or order is empty.")
ToastUtils.showShort("当前订单不存在或异常!")
return null
}
val parameters = AutopilotControlParameters()
val startWgsLon = currentOCHOrder!!.startSitePoint[0]
val startWgsLat = currentOCHOrder!!.startSitePoint[1]
val endWgsLon = currentOCHOrder!!.endSitePoint[0]
val endWgsLat = currentOCHOrder!!.endSitePoint[1]
parameters.vehicleType = currentOCHOrder!!.businessType
parameters.startName =
PinYinUtil.getPinYinHeadChar(currentOCHOrder!!.startSiteAddr) // 起点名称拼音首字母大写科学城B区2号门KXCBQ2HM
parameters.endName =
PinYinUtil.getPinYinHeadChar(currentOCHOrder!!.endSiteAddr) // 终点名称拼音首字母大写科学城C区三号门KXCCQSHM
parameters.startLatLon = AutoPilotLonLat(startWgsLat, startWgsLon)
parameters.endLatLon = AutoPilotLonLat(endWgsLat, endWgsLon)
if (parameters.autoPilotLine == null) {
parameters.autoPilotLine = AutoPilotLine(
currentOCHOrder!!.lineId,
currentOCHOrder!!.csvFileUrl, currentOCHOrder!!.csvFileMd5,
currentOCHOrder!!.txtFileUrl, currentOCHOrder!!.txtFileMd5,
currentOCHOrder!!.contrailSaveTime, currentOCHOrder!!.carModel,
currentOCHOrder!!.csvFileUrlDPQP, currentOCHOrder!!.csvFileMd5DPQP,
currentOCHOrder!!.txtFileUrlDPQP, currentOCHOrder!!.txtFileMd5DPQP,
currentOCHOrder!!.contrailSaveTimeDPQP
)
}
return parameters
}
/**
* 将业务订单信息保存,鹰眼可取用
*/
fun updateAutopilotControlParameters() {
val parameters = initAutopilotControlParameters()
if (null == parameters) {
e(M_TAXI_P + TAG, "AutopilotControlParameters is empty.")
return
}
d(M_TAXI_P + TAG, "AutopilotControlParameters is update.")
updateAutopilotControlParameters(parameters)
}
fun clearAutopilotControlParameters() {
d(M_TAXI_P + TAG, "AutopilotControlParameters is clear.")
updateAutopilotControlParameters(null)
}
fun setStation() {
if (currentOCHOrder != null) {
val startStation = MogoLocation()
startStation.longitude = currentOCHOrder!!.startSiteGcjPoint[0]
startStation.latitude = currentOCHOrder!!.startSiteGcjPoint[1]
val endStation = MogoLocation()
endStation.longitude = currentOCHOrder!!.endSiteGcjPoint[0]
endStation.latitude = currentOCHOrder!!.endSiteGcjPoint[1]
setStationPoint(startStation, endStation, currentOCHOrder!!.lineId)
}
}
fun cleanStation() {
setStationPoint(null, null, -1L)
}
}

View File

@@ -1,128 +0,0 @@
package com.mogo.och.taxi.passenger.network;
import com.mogo.och.taxi.passenger.bean.TaxiPassengerAllStarWorld;
import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean;
import com.mogo.och.taxi.passenger.bean.TaxiPassengerCheckPhoneUpdateOrderReqBean;
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp;
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryReqBean;
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean;
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean;
import com.mogo.och.taxi.passenger.bean.TaxiPassengerQueryOrderRouteResp;
import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean;
import com.mogo.och.taxi.passenger.bean.TaxiPassengerStartReqBean;
import io.reactivex.Observable;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import retrofit2.http.Query;
/**
* Created by pangfan on 2021/8/19
*
* 网约车-出租车接口定义
*/
interface TaxiPassengerServiceApi {
/**
* 查询全部服务中/待服务订单没有的时候返回code 0空列表
* @param driverSn
* @return
*/
@Headers( {"Content-type:application/json;charset=UTF-8"} )
@GET("/autopilot-car-hailing/order/v2/driver/taxi/passenger/orderInService/query")
Observable<TaxiPassengerOrdersInServiceQueryRespBean> queryOrdersInAndWaitService(@Header("appId") String appId, @Header("ticket") String ticket, @Query("driverSn") String driverSn);
/**
* 通过orderNo查询订单信息用于本地已经有orderNo时
* @param data
* @return
* @deprecated v2.1_0930需求中暂不再使用此接口
*/
@Headers( {"Content-type:application/json;charset=UTF-8"} )
@POST( "/autopilot-car-hailing/order/v2/driver/taxi/passenger/queryOrderById" )
Observable<TaxiPassengerOrderQueryRespBean> queryOrderById(@Header ("appId") String appId,@Header("ticket") String ticket,@Body TaxiPassengerOrderQueryReqBean data);
/**
* 查询订单剩余里程和时间
* @param appId
* @param ticket
* @param orderNo
* @return
*/
@Headers( {"Content-type:application/json;charset=UTF-8"} )
@GET("/autopilot-car-hailing/order/v2/driver/taxi/queryOrderRemaining")
Observable<TaxiPassengerOrderQueryRemainingResp> queryOrderRemaining(@Header("appId") String appId, @Header("ticket") String ticket, @Query("orderNo") String orderNo);
/**
* 查询订单全路径
* @param appId
* @param ticket
* @param orderNo
* @return
*/
@Headers( {"Content-type:application/json;charset=UTF-8"} )
// @GET( "/autopilot-car-hailing/api/v1/driver/serviceStatus/query" )
@GET( "/autopilot-car-hailing/order/v2/driver/taxi/passenger/orderRoute" )
Observable<TaxiPassengerQueryOrderRouteResp> queryOrderRoute(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("orderNo") String orderNo);
/**
* 提交用户输入的手机后4位、并进行状态扭转
* @param data
* @return
*/
@Headers( {"Content-type:application/json;charset=UTF-8"} )
@POST( "/autopilot-car-hailing/cab/flow/v1/driver/taxi/passenger/verification/phone" )
Observable<TaxiPassengerBaseRespBean> checkPhoneAndUpdateOrderStatus(@Header ("appId") String appId, @Header("ticket") String ticket, @Body TaxiPassengerCheckPhoneUpdateOrderReqBean data);
/**
* 对订单进行打分 1-5分 加上文案评论
* @param data
* @return
*/
@Headers( {"Content-type:application/json;charset=UTF-8"} )
@POST( "/autopilot-car-hailing/evaluation/info/driver/taxi/submit" )
Observable<TaxiPassengerBaseRespBean> arrivedAndScore(@Header ("appId") String appId, @Header("ticket") String ticket, @Body TaxiPassengerScoreUpdateOrderReqBean data);
/**
* 获取星星对应的文案(所有文案)
* @return
*/
@Headers( {"Content-type:application/json;charset=UTF-8"} )
@GET( "/autopilot-car-hailing/evaluation/label/driver/taxi/list" )
Observable<TaxiPassengerAllStarWorld> getWorldAllStar(@Header ("appId") String appId, @Header("ticket") String ticket);
/**
* 获取星星对应的文案(和星星一一对应)
* @return
*/
@Headers( {"Content-type:application/json;charset=UTF-8"} )
@GET( "/autopilot-car-hailing/evaluation/label/driver/taxi/listByStar" )
Observable<TaxiPassengerAllStarWorld> getWorldByStar(@Header ("appId") String appId, @Header("ticket") String ticket,@Query("star") String star);
/**
* 查询司机是否已确认可开启自动驾驶
* @param appId
* @param ticket
* @param orderNo
* @return
*/
@Headers( {"Content-type:application/json;charset=UTF-8"} )
@GET( "/autopilot-car-hailing/cab/flow/v1/driver/taxi/pilot/status" )
Observable<TaxiPassengerBaseRespBean> queryPilotStatus(@Header ("appId") String appId
, @Header("ticket") String ticket,@Query("orderNo") String orderNo);
/**
* 乘客屏启动自动驾驶成功
* @param appId
* @param ticket
* @param data
* @return
*/
@Headers( {"Content-type:application/json;charset=UTF-8"} )
@POST( "/autopilot-car-hailing/cab/flow/v1/driver/taxi/passenger/startServicePilot" )
Observable<TaxiPassengerBaseRespBean> startServicePilotDone(@Header ("appId") String appId
, @Header("ticket") String ticket,@Body TaxiPassengerStartReqBean data);
}

View File

@@ -0,0 +1,147 @@
package com.mogo.och.taxi.passenger.network
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.och.taxi.passenger.bean.TaxiPassengerAllStarWorld
import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean
import com.mogo.och.taxi.passenger.bean.TaxiPassengerCheckPhoneUpdateOrderReqBean
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryReqBean
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean
import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean
import com.mogo.och.taxi.passenger.bean.TaxiPassengerStartReqBean
import io.reactivex.Observable
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.Header
import retrofit2.http.Headers
import retrofit2.http.POST
import retrofit2.http.Query
/**
* Created by pangfan on 2021/8/19
*
* 网约车-出租车接口定义
*/
internal interface TaxiPassengerServiceApi {
/**
* 查询全部服务中/待服务订单没有的时候返回code 0空列表
* @param driverSn
* @return
*/
@Headers("Content-type:application/json;charset=UTF-8")
@GET("/autopilot-car-hailing/order/v2/driver/taxi/passenger/orderInService/query")
fun queryOrdersInAndWaitService(
@Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId,
@Header("ticket") ticket: String=MoGoAiCloudClientConfig.getInstance().token,
@Query("driverSn") driverSn: String
): Observable<TaxiPassengerOrdersInServiceQueryRespBean>
/**
* 通过orderNo查询订单信息用于本地已经有orderNo时
* @param data
* @return
*/
@Headers("Content-type:application/json;charset=UTF-8")
@POST("/autopilot-car-hailing/order/v2/driver/taxi/passenger/queryOrderById")
@Deprecated("v2.1_0930需求中暂不再使用此接口")
fun queryOrderById(
@Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId,
@Header("ticket") ticket: String=MoGoAiCloudClientConfig.getInstance().token,
@Body data: TaxiPassengerOrderQueryReqBean
): Observable<TaxiPassengerOrderQueryRespBean>
/**
* 查询订单剩余里程和时间
* @param appId
* @param ticket
* @param orderNo
* @return
*/
@Headers("Content-type:application/json;charset=UTF-8")
@GET("/autopilot-car-hailing/order/v2/driver/taxi/queryOrderRemaining")
fun queryOrderRemaining(
@Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId,
@Header("ticket") ticket: String=MoGoAiCloudClientConfig.getInstance().token,
@Query("orderNo") orderNo: String
): Observable<TaxiPassengerOrderQueryRemainingResp>
/**
* 提交用户输入的手机后4位、并进行状态扭转
* @param data
* @return
*/
@Headers("Content-type:application/json;charset=UTF-8")
@POST("/autopilot-car-hailing/cab/flow/v1/driver/taxi/passenger/verification/phone")
fun checkPhoneAndUpdateOrderStatus(
@Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId,
@Header("ticket") ticket: String=MoGoAiCloudClientConfig.getInstance().token,
@Body data: TaxiPassengerCheckPhoneUpdateOrderReqBean?
): Observable<TaxiPassengerBaseRespBean>
/**
* 对订单进行打分 1-5分 加上文案评论
* @param data
* @return
*/
@Headers("Content-type:application/json;charset=UTF-8")
@POST("/autopilot-car-hailing/evaluation/info/driver/taxi/submit")
fun arrivedAndScore(
@Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId,
@Header("ticket") ticket: String=MoGoAiCloudClientConfig.getInstance().token,
@Body data: TaxiPassengerScoreUpdateOrderReqBean
): Observable<TaxiPassengerBaseRespBean>
/**
* 获取星星对应的文案(所有文案)
* @return
*/
@Headers("Content-type:application/json;charset=UTF-8")
@GET("/autopilot-car-hailing/evaluation/label/driver/taxi/list")
fun getWorldAllStar(
@Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId,
@Header("ticket") ticket: String=MoGoAiCloudClientConfig.getInstance().token,
): Observable<TaxiPassengerAllStarWorld>
/**
* 获取星星对应的文案(和星星一一对应)
* @return
*/
@Headers("Content-type:application/json;charset=UTF-8")
@GET("/autopilot-car-hailing/evaluation/label/driver/taxi/listByStar")
fun getWorldByStar(
@Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId,
@Header("ticket") ticket: String=MoGoAiCloudClientConfig.getInstance().token,
@Query("star") star: String
): Observable<TaxiPassengerAllStarWorld>
/**
* 查询司机是否已确认可开启自动驾驶
* @param appId
* @param ticket
* @param orderNo
* @return
*/
@Headers("Content-type:application/json;charset=UTF-8")
@GET("/autopilot-car-hailing/cab/flow/v1/driver/taxi/pilot/status")
fun queryPilotStatus(
@Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId,
@Header("ticket") ticket: String=MoGoAiCloudClientConfig.getInstance().token,
@Query("orderNo") orderNo: String
): Observable<TaxiPassengerBaseRespBean>
/**
* 乘客屏启动自动驾驶成功
* @param appId
* @param ticket
* @param data
* @return
*/
@Headers("Content-type:application/json;charset=UTF-8")
@POST("/autopilot-car-hailing/cab/flow/v1/driver/taxi/passenger/startServicePilot")
fun startServicePilotDone(
@Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId,
@Header("ticket") ticket: String= MoGoAiCloudClientConfig.getInstance().token,
@Body data: TaxiPassengerStartReqBean
): Observable<TaxiPassengerBaseRespBean>
}

View File

@@ -1,13 +1,10 @@
package com.mogo.och.taxi.passenger.network
import android.content.Context
import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager.getServerToken
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.commons.AbsMogoApplication
import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp
import com.mogo.och.taxi.passenger.bean.TaxiPassengerQueryOrderRouteResp
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryReqBean
import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean
import com.mogo.och.taxi.passenger.bean.TaxiPassengerCheckPhoneUpdateOrderReqBean
import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean
@@ -24,17 +21,27 @@ import com.mogo.och.common.module.biz.network.interceptor.transformTry
*/
object TaxiPassengerServiceManager {
private val mOCHTaxiServiceApi: TaxiPassengerServiceApi = MoGoRetrofitFactory.getInstance(OchCommonConst.getBaseUrl()).create(
TaxiPassengerServiceApi::class.java
)
private val mOCHTaxiServiceApi: TaxiPassengerServiceApi =
MoGoRetrofitFactory.getInstance(OchCommonConst.getBaseUrl()).create(TaxiPassengerServiceApi::class.java)
private var draiverSnCacher = ""
/**
* 获取司机端的sn
* 获取Bus司机端的sn
* @return
*/
private val driverAppSn: String
get() = getServerToken()
val draiverSn: String
get(){
val serverToken = CallerTelematicManager.getServerToken()
if (serverToken != draiverSnCacher && serverToken.isNotEmpty()) {
draiverSnCacher = serverToken
}
return draiverSnCacher
}
val context:Context
get() {
return AbsMogoApplication.getApp()
}
/**
* 查询全部服务中/待服务订单列表
* @param context
@@ -42,14 +49,9 @@ object TaxiPassengerServiceManager {
*/
@JvmStatic
fun queryOrdersInAndWaitService(
context: Context,
callback: OchCommonServiceCallback<TaxiPassengerOrdersInServiceQueryRespBean>?
) {
mOCHTaxiServiceApi.queryOrdersInAndWaitService(
MoGoAiCloudClientConfig.getInstance().serviceAppId,
MoGoAiCloudClientConfig.getInstance().token,
driverAppSn
) //获取到司机端的sn
mOCHTaxiServiceApi.queryOrdersInAndWaitService(driverSn = draiverSn) //获取到司机端的sn
.transformTry()
.subscribe(OchCommonSubscribeImpl(context, callback, "queryOrdersInAndWaitService"))
}
@@ -62,136 +64,65 @@ object TaxiPassengerServiceManager {
*/
@JvmStatic
fun queryOrderRemaining(
context: Context,
orderNo: String?,
orderNo: String,
callback: OchCommonServiceCallback<TaxiPassengerOrderQueryRemainingResp>?
) {
mOCHTaxiServiceApi.queryOrderRemaining(
MoGoAiCloudClientConfig.getInstance().serviceAppId,
MoGoAiCloudClientConfig.getInstance().token,
orderNo
)
mOCHTaxiServiceApi.queryOrderRemaining(orderNo= orderNo)
.transformTry()
.subscribe(OchCommonSubscribeImpl(context, callback, "queryOrderRemaining"))
}
@JvmStatic
fun queryOrderRouteList(
context: Context,
orderNo: String?,
callback: OchCommonServiceCallback<TaxiPassengerQueryOrderRouteResp>?
) {
mOCHTaxiServiceApi.queryOrderRoute(
MoGoAiCloudClientConfig.getInstance().serviceAppId,
MoGoAiCloudClientConfig.getInstance().token,
orderNo
)
.transformTry()
.subscribe(OchCommonSubscribeImpl(context, callback, "queryOrderRouteList"))
}
/**
* 通过orderId查询订单信息用于本地已经有orderId时
* @param context
* @param orderNo
* @param callback
*/
@JvmStatic
@Deprecated("v2.1_0930需求中暂不再使用此接口")
fun queryOrderById(
context: Context, orderNo: String?,
callback: OchCommonServiceCallback<TaxiPassengerOrderQueryRespBean>?
) {
mOCHTaxiServiceApi.queryOrderById(
MoGoAiCloudClientConfig.getInstance().serviceAppId,
MoGoAiCloudClientConfig.getInstance().token,
TaxiPassengerOrderQueryReqBean(driverAppSn, orderNo)
)
.transformTry()
.subscribe(OchCommonSubscribeImpl(context, callback, "queryOrderById"))
}
@JvmStatic
fun checkPhoneAndUpdateOrderStatus(
context: Context,
orderNo: String?,
phone: String?,
callback: OchCommonServiceCallback<TaxiPassengerBaseRespBean>?
) {
mOCHTaxiServiceApi.checkPhoneAndUpdateOrderStatus(
MoGoAiCloudClientConfig.getInstance().serviceAppId,
MoGoAiCloudClientConfig.getInstance().token,
TaxiPassengerCheckPhoneUpdateOrderReqBean(orderNo, phone)
)
mOCHTaxiServiceApi.checkPhoneAndUpdateOrderStatus(data= TaxiPassengerCheckPhoneUpdateOrderReqBean(orderNo, phone))
.transformTry()
.subscribe(OchCommonSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus"))
}
@JvmStatic
fun arrivedAndScore(
context: Context,
taxiPassengerScoreUpdateOrderReqBean: TaxiPassengerScoreUpdateOrderReqBean?,
taxiPassengerScoreUpdateOrderReqBean: TaxiPassengerScoreUpdateOrderReqBean,
callback: OchCommonServiceCallback<TaxiPassengerBaseRespBean>?
) {
mOCHTaxiServiceApi.arrivedAndScore(
MoGoAiCloudClientConfig.getInstance().serviceAppId,
MoGoAiCloudClientConfig.getInstance().token,
taxiPassengerScoreUpdateOrderReqBean
)
mOCHTaxiServiceApi.arrivedAndScore(data = taxiPassengerScoreUpdateOrderReqBean)
.transformTry()
.subscribe(OchCommonSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus"))
}
@JvmStatic
fun getAllScoreWorld(
context: Context,
callback: OchCommonServiceCallback<TaxiPassengerAllStarWorld>?
) {
mOCHTaxiServiceApi.getWorldAllStar(
MoGoAiCloudClientConfig.getInstance().serviceAppId,
MoGoAiCloudClientConfig.getInstance().token
)
mOCHTaxiServiceApi.getWorldAllStar()
.transformTry()
.subscribe(OchCommonSubscribeImpl(context, callback, "arrivedAndScore"))
}
@JvmStatic
fun queryPilotStatus(
context: Context,
orderNo: String?,
orderNo: String,
callback: OchCommonServiceCallback<TaxiPassengerBaseRespBean>?
) {
mOCHTaxiServiceApi.queryPilotStatus(
MoGoAiCloudClientConfig.getInstance().serviceAppId,
MoGoAiCloudClientConfig.getInstance().token,
orderNo
)
mOCHTaxiServiceApi.queryPilotStatus(orderNo = orderNo)
.transformTry()
.subscribe(OchCommonSubscribeImpl(context, callback, "queryPilotStatus"))
}
@JvmStatic
fun startServicePilotDone(
context: Context,
orderNo: String?,
loc: TaxiPassengerStartReqBean.Result?,
orderNo: String?, loc: TaxiPassengerStartReqBean.Result?,
callback: OchCommonServiceCallback<TaxiPassengerBaseRespBean>?
) {
mOCHTaxiServiceApi.startServicePilotDone(
MoGoAiCloudClientConfig.getInstance().serviceAppId,
MoGoAiCloudClientConfig.getInstance().token,
TaxiPassengerStartReqBean(
driverAppSn, orderNo, loc
)
)
mOCHTaxiServiceApi.startServicePilotDone(data = TaxiPassengerStartReqBean(draiverSn, orderNo, loc))
.transformTry()
.subscribe(OchCommonSubscribeImpl(context, callback, "startServicePilotDone"))
}
@JvmStatic
fun getWorldByStar(
context: Context,
start: String?,
start: String,
callback: OchCommonServiceCallback<TaxiPassengerAllStarWorld>?
) {
mOCHTaxiServiceApi.getWorldByStar(
MoGoAiCloudClientConfig.getInstance().serviceAppId,
MoGoAiCloudClientConfig.getInstance().token,
start
)
mOCHTaxiServiceApi.getWorldByStar(star=start)
.transformTry()
.subscribe(OchCommonSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus"))
}

View File

@@ -9,17 +9,16 @@ import androidx.lifecycle.LifecycleOwner;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.commons.mvp.Presenter;
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener;
import com.mogo.eagle.core.function.call.biz.CallerFuncBizManager;
import com.mogo.eagle.core.function.call.order.CallerOrderListenerManager;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.och.common.module.manager.OCHAdasAbilityManager;
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean;
import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean;
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerADASStatusCallback;
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback;
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonCallback;
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum;
import com.mogo.och.taxi.passenger.model.AutopilotManager;
import com.mogo.och.taxi.passenger.model.TaxiPassengerModel;
import com.mogo.och.taxi.passenger.ui.TaxiPassengerBaseFragment;
@@ -28,7 +27,6 @@ import com.mogo.och.taxi.passenger.ui.TaxiPassengerBaseFragment;
* @date: 2022/3/4
*/
public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragment> implements
IOCHTaxiPassengerADASStatusCallback,
IOCHTaxiPassengerOrderStatusCallback {
private static final String TAG = BaseTaxiPassengerPresenter.class.getSimpleName();
@@ -58,12 +56,10 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
}
private void initListeners() {
TaxiPassengerModel.INSTANCE.setADASStatusCallback(this);
TaxiPassengerModel.INSTANCE.setOrderStatusCallback("BaseTaxiPassengerPresenter",this);
}
private void releaseListeners() {
TaxiPassengerModel.INSTANCE.setADASStatusCallback(null);
TaxiPassengerModel.INSTANCE.setOrderStatusCallback("BaseTaxiPassengerPresenter",null);
}
@@ -78,29 +74,6 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
}
}
@Override
public void onAutopilotArriveEnd() {
}
@Override
public void onAutopilotEnable() {
runOnUIThread(() -> mView.onAutopilotStatusChanged(
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE));
}
@Override
public void onAutopilotDisable() {
runOnUIThread(() -> mView.onAutopilotStatusChanged(
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE));
}
@Override
public void onAutopilotRunning() {
runOnUIThread(() -> mView.onAutopilotStatusChanged(
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING));
}
@Override
public void onCurrentOrderStatusChanged(TaxiPassengerOrderQueryRespBean.Result order) {
// CallerLogger.INSTANCE.d(M_TAXI_P + TAG, GsonUtil.jsonFromObject(order));
@@ -139,6 +112,8 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
mView.showOrHideArrivedEndLayout(false,"","");
});
TaxiPassengerModel.INSTANCE.recoverNaviInfo();
AutopilotManager.INSTANCE.clearAutopilotControlParameters();
TaxiPassengerModel.INSTANCE.startOrStopQueryOrderRemaining(false);
TaxiPassengerModel.INSTANCE.startOrStopReadyToAutopilotLoop(false);
return;
}
@@ -167,6 +142,9 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
mView.showOrHideStartAutopilotView(false,false);
mView.showOrHideServingOrderFragment(true);
});
CallerFuncBizManager.getBizProvider().queryV2XEvents();//全览模式的V2X事件轮询开始
TaxiPassengerModel.INSTANCE.startOrStopQueryOrderRemaining(true);
AutopilotManager.INSTANCE.updateAutopilotControlParameters();
TaxiPassengerModel.INSTANCE.startOrStopReadyToAutopilotLoop(false);
}
// 30 用户到达上车点 并通过了手机号后四位验证
@@ -188,6 +166,8 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
if (TaxiPassengerOrderStatusEnum.ArriveAtEnd.getCode() == order.orderStatus){
TaxiPassengerModel.INSTANCE.recoverNaviInfo();
mView.showOrHideOverMapViewFragment(false);
AutopilotManager.INSTANCE.clearAutopilotControlParameters();
TaxiPassengerModel.INSTANCE.startOrStopQueryOrderRemaining(false);
runOnUIThread(() -> {
mView.showOrHideServingOrderFragment(false);
mView.showOrHideArrivedEndLayout(true, order.endSiteAddr,order.orderNo);
@@ -197,6 +177,8 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
}
// 60 服务完成 页面
if (TaxiPassengerOrderStatusEnum.JourneyCompleted.getCode() == order.orderStatus){
AutopilotManager.INSTANCE.clearAutopilotControlParameters();
TaxiPassengerModel.INSTANCE.startOrStopQueryOrderRemaining(false);
mCurrentPassengerOrder = null;
}
}
@@ -210,18 +192,11 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
});
}
/**
* 封装请求
*/
public void arrivedAndScore(TaxiPassengerScoreUpdateOrderReqBean taxiPassengerScoreUpdateOrderReqBean){
TaxiPassengerModel.INSTANCE.arrivedAndScore(taxiPassengerScoreUpdateOrderReqBean,aBoolean -> mView.showArrivedEndLayout2Thank(aBoolean));
}
/**
* 开启自动驾驶
*/
public void startAutopilot(){
TaxiPassengerModel.INSTANCE.startAutopilot();
AutopilotManager.INSTANCE.startAutopilot();
}
}

View File

@@ -1,133 +0,0 @@
package com.mogo.och.taxi.passenger.presenter;
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P;
import android.os.Build;
import android.os.Looper;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.lifecycle.LifecycleOwner;
import com.amap.api.maps.model.LatLng;
import com.mogo.commons.mvp.Presenter;
import com.mogo.eagle.core.data.map.MogoLocation;
import com.mogo.eagle.core.function.call.biz.CallerFuncBizManager;
import com.mogo.eagle.core.network.utils.GsonUtil;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean;
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerAutopilotPlanningCallback;
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback;
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum;
import com.mogo.och.taxi.passenger.model.TaxiPassengerModel;
import com.mogo.och.taxi.passenger.ui.TaxiPassengerServingOrderFragment;
import java.util.List;
/**
* @author: wangmingjun
* @date: 2022/3/14
*/
public class TaxiPassengerServingOrderPresenter extends Presenter<TaxiPassengerServingOrderFragment>
implements IOCHTaxiPassengerAutopilotPlanningCallback, IOCHTaxiPassengerOrderStatusCallback{
private static final String TAG = TaxiPassengerServingOrderPresenter.class.getSimpleName();
private volatile TaxiPassengerOrderQueryRespBean.Result mCurrentPassengerOrder = null; //当前订单
public TaxiPassengerServingOrderPresenter(TaxiPassengerServingOrderFragment view) {
super(view);
initListener();
}
@Override
public void onResume(@NonNull LifecycleOwner owner) {
super.onResume(owner);
}
private void initListener() {
// 设置起点和终点marker和实时车辆位置
TaxiPassengerModel.INSTANCE.setMoGoAutopilotPlanningListener(this);
TaxiPassengerModel.INSTANCE.setOrderStatusCallback("TaxiPassengerServingOrderPresenter",this);
}
public void releaseListener(){
TaxiPassengerModel.INSTANCE.setMoGoAutopilotPlanningListener(null);
TaxiPassengerModel.INSTANCE.setOrderStatusCallback("TaxiPassengerServingOrderPresenter",null);
}
@Override
public void setLineMarker(LatLng startStation,LatLng endStation) {
if (startStation == null || endStation == null) return;
runOnUIThread(() -> mView.setLineMarker(startStation,endStation));
}
@Override
public void routeResultByServer(List<LatLng> routeArriviedTemp, List<LatLng> routeArrivingTemp, MogoLocation location) {
runOnUIThread(() ->mView.routeResultByServer(routeArriviedTemp,routeArrivingTemp,location));
}
@Override
public void showRottingMapView() {
runOnUIThread(() ->mView.showRottingMapView());
}
@Override
public void onCurrentOrderStatusChanged(TaxiPassengerOrderQueryRespBean.Result order) {
CallerLogger.INSTANCE.d(M_TAXI_P + TAG, GsonUtil.jsonFromObject(order));
if (mCurrentPassengerOrder == null || mCurrentPassengerOrder.orderStatus != order.orderStatus){
if (TaxiPassengerOrderStatusEnum.OnTheWayToEnd.getCode() == order.orderStatus){
TaxiPassengerModel.INSTANCE.startOrStopQueryOrderRemaining(true);
if (mCurrentPassengerOrder == null){
TaxiPassengerModel.INSTANCE.queryOrderRouteList();
}
TaxiPassengerModel.INSTANCE.updateAutopilotControlParameters();
CallerFuncBizManager.getBizProvider().queryV2XEvents();//全览模式的V2X事件轮询开始
CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "OnTheWayToEnd");
}
if (TaxiPassengerOrderStatusEnum.Cancel.getCode() == order.orderStatus
|| TaxiPassengerOrderStatusEnum.ArriveAtEnd.getCode() == order.orderStatus
|| TaxiPassengerOrderStatusEnum.JourneyCompleted.getCode() == order.orderStatus){
TaxiPassengerModel.INSTANCE.startOrStopQueryOrderRemaining(false);
TaxiPassengerModel.INSTANCE.clearAutopilotControlParameters();
CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "Cancel or ArriveAtEnd or JourneyCompleted");
}
mCurrentPassengerOrder = order; //当前无订单
runOnUIThread(() ->mView.updateOrderStatusView(order));
}
}
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onCurrentOrderDistToEndChanged(long meters, long timeInSecond) {
runOnUIThread(() -> mView.onCurrentOrderDistToEndChanged(meters, timeInSecond));
}
@Override
public void onDriverHasCheckedPilotCondition(boolean isBoarded) {
}
@Override
public void onDestroy(@NonNull LifecycleOwner owner) {
super.onDestroy(owner);
releaseListener();
}
private void runOnUIThread( Runnable executor ) {
if ( executor == null ) {
return;
}
if ( Looper.myLooper() != Looper.getMainLooper() ) {
UiThreadHandler.post( executor );
} else {
executor.run();
}
}
}

View File

@@ -6,8 +6,6 @@ import com.mogo.commons.mvp.MvpFragment
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.map.CallerMapUIServiceManager
import com.mogo.eagle.core.function.hmi.ui.widget.RomaPassengerView
import com.mogo.eagle.core.function.view.MapBizView
import com.mogo.eagle.core.utilcode.kotlin.onClick
import com.mogo.eagle.core.utilcode.util.DeviceUtils
import com.mogo.eagle.core.utilcode.util.OverlayViewUtils
@@ -18,7 +16,6 @@ import com.mogo.och.taxi.passenger.R
import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean
import com.mogo.och.taxi.passenger.callback.ITPClickStartAutopilotCallback
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonValueCallback
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerScoreCallback
import com.mogo.och.taxi.passenger.presenter.BaseTaxiPassengerPresenter
import com.mogo.och.taxi.passenger.ui.bottom.BottomBar
import com.mogo.och.taxi.passenger.ui.comment.TaxiPassengerArrivedView
@@ -102,11 +99,7 @@ class TaxiPassengerBaseFragment() :
mapBizView.visibility = View.GONE
itinerary.visibility = View.VISIBLE
ck_setting.visibility = View.VISIBLE
if (DeviceUtils.isLenovoModel() || DeviceUtils.isEB5Model()) {
romaPView.visibility = View.VISIBLE
} else {
romaPView.visibility = View.GONE
}
romaPView.visibility = View.GONE
rv_location_center.visibility = View.VISIBLE
pcnActionView.visibility = View.VISIBLE
traffic_light_view.visibility = View.VISIBLE
@@ -148,10 +141,6 @@ class TaxiPassengerBaseFragment() :
}
private fun initArrivedView() {
mArrivedEndView = WeakReference(TaxiPassengerArrivedView(context))
mArrivedEndView!!.get()!!.iTaxiPassengerScoreCallback = ITaxiPassengerScoreCallback {
taxiPassengerScoreUpdateOrderReqBean: TaxiPassengerScoreUpdateOrderReqBean? ->
presenter?.arrivedAndScore(taxiPassengerScoreUpdateOrderReqBean)
}
}
private fun initCheckView() {
@@ -321,10 +310,9 @@ class TaxiPassengerBaseFragment() :
mArrivedEndView!!.get(),
R.style.och_window_anim_alpha
)
UiThreadHandler.postDelayed(
Runnable {
UiThreadHandler.postDelayed({
mArrivedEndView!!.get()!!
.setDataAndStartAnimation(arrivedEndStation, (orderNo)!!)
.setDataAndStartAnimation(arrivedEndStation, orderNo!!)
}, //如果在全屏 回收需要300毫秒 后期优化使用单独的播放器
500
)

View File

@@ -1,351 +0,0 @@
package com.mogo.och.taxi.passenger.ui
import android.animation.Animator
import android.animation.AnimatorInflater
import android.os.Build
import android.os.Bundle
import android.view.View
import android.view.animation.Animation
import android.view.animation.RotateAnimation
import android.widget.ImageView
import android.widget.TextView
import androidx.annotation.RequiresApi
import androidx.appcompat.widget.AppCompatSeekBar
import androidx.fragment.app.FragmentTransaction
import com.amap.api.maps.model.LatLng
import com.mogo.commons.mvp.MvpFragment
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.common.module.map.AmapNaviToDestinationModel
import com.mogo.och.common.module.map.CommonAmapNaviVIew
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.common.module.utils.NumberFormatUtil
import com.mogo.och.common.module.wigets.OCHGradientTextView
import com.mogo.och.common.module.wigets.OCHRadiusImageView
import com.mogo.och.taxi.passenger.R
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerMapViewCallback
import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum
import com.mogo.och.taxi.passenger.model.TaxiPassengerModel
import com.mogo.och.taxi.passenger.presenter.TaxiPassengerServingOrderPresenter
import com.mogo.och.taxi.passenger.utils.TPRouteDataTestUtils
import java.util.Calendar
/**
* @author: wangmingjun
* @date: 2022/3/8
*/
class TaxiPassengerServingOrderFragment :
MvpFragment<TaxiPassengerServingOrderFragment?, TaxiPassengerServingOrderPresenter?>(),
TaxiPassengerTaxiView, ITaxiPassengerMapViewCallback {
private val TAG = TaxiPassengerServingOrderFragment::class.java.simpleName
private var mTPSpeedTv: OCHGradientTextView? = null
private var mTPSpeedTvShadowBg: TextView? = null
private var mTPOrderStatus: TextView? = null
private var mTPOrderStartStation: TextView? = null
private var mTPOrderEndStation: TextView? = null
private var mTPOrderRemainDis: TextView? = null
private var mTPOrderRemainDisUnit: TextView? = null
private var mTPOrderRemainTime: TextView? = null
private var mTPOrderRemainArriveTime: TextView? = null
private var mMapArrowIcon: ImageView? = null
private var mMapRottingView: TaxiPassengerMapDirectionView? = null
private var mAmapNaviVIew: CommonAmapNaviVIew? = null
private var lastBearing = 0f
private var rotateAnimation: RotateAnimation? = null
private var mProgressSeekBar: AppCompatSeekBar? = null
private var mProgessDes: TextView? = null
private var mSpeedLayoutBg: OCHRadiusImageView? = null
override fun getLayoutId(): Int {
return R.layout.taxi_p_activity_serving_order_view
}
override fun getTagName(): String {
return "TaxiPassengerServingOrderFragment"
}
override fun initViews() {
mTPSpeedTv = findViewById(R.id.taxi_p_speed_tv)
mTPSpeedTvShadowBg = findViewById(R.id.taxi_p_speed_tv_bg)
mTPSpeedTv!!.setVertrial(true)
mTPSpeedTv!!.setmColorList(
intArrayOf(
resources.getColor(R.color.taxi_p_speed_normal_color1), resources.getColor(
R.color.taxi_p_speed_normal_color2
)
)
)
mTPSpeedTv!!.text = 0.toString()
mTPSpeedTvShadowBg!!.text = 0.toString()
mTPOrderStatus = findViewById(R.id.taxi_p_order_status_tv)
mTPOrderStartStation = findViewById(R.id.taxi_p_order_status_start_station_tv)
mTPOrderEndStation = findViewById(R.id.taxi_p_order_status_end_station_tv)
mTPOrderRemainDis = findViewById(R.id.taxi_p_order_remain_distance)
mTPOrderRemainDisUnit = findViewById(R.id.taxi_p_order_remain_distance_unit)
mTPOrderRemainTime = findViewById(R.id.taxi_p_order_remain_time)
mTPOrderRemainArriveTime = findViewById(R.id.taxi_p_order_remain_arrive_time)
mMapArrowIcon = findViewById(R.id.taxi_p_arrow_nor)
mProgressSeekBar = findViewById(R.id.taxi_p_seekbar)
mProgessDes = findViewById(R.id.taxi_p_progress_des)
mSpeedLayoutBg = findViewById(R.id.taxi_p_speed_bg)
mTPOrderStatus!!.setOnLongClickListener {
TPRouteDataTestUtils.converToRouteData()
true
}
}
override fun initViews(savedInstanceState: Bundle?) {
super.initViews(savedInstanceState)
initRouteNaviView(savedInstanceState)
initAmapNaviView(savedInstanceState)
}
private fun initAmapNaviView(savedInstanceState: Bundle?) {
mAmapNaviVIew = findViewById(R.id.taxi_p_order_amap_navi_view)
mAmapNaviVIew?.onCreate(savedInstanceState)
TaxiPassengerModel.startNaviByAmap()
}
private fun initRouteNaviView(savedInstanceState: Bundle?) {
mMapRottingView = findViewById(R.id.taxi_p_order_rotting_map_view)
mMapRottingView?.onCreateView(savedInstanceState)
mMapRottingView?.setTaxiPassengerMapViewCallback(this)
}
override fun createPresenter(): TaxiPassengerServingOrderPresenter {
return TaxiPassengerServingOrderPresenter(this)
}
/**
* 设置进度条最大值为 起点终点首次规划出的值
*/
private fun setSeekBarMax() {
//计算订单起点和终点距离
val maxInt = SharedPrefsMgr.getInstance(requireContext())
.getInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, 0)
d(SceneConstant.M_TAXI_P + TAG, "maxInt = $maxInt")
mProgressSeekBar!!.max = maxInt
}
/**
* 行驶进度值更新
*/
@RequiresApi(api = Build.VERSION_CODES.N)
private fun updateDriveProcessLoading(progressLoading: Int) {
val progressInt = SharedPrefsMgr.getInstance(requireContext())
.getInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, 0) - progressLoading
d(SceneConstant.M_TAXI_P + TAG, "progressInt = $progressInt")
mProgressSeekBar?.setProgress(progressInt, true)
mProgressSeekBar?.jumpDrawablesToCurrentState()
}
override fun onResume() {
super.onResume()
mMapRottingView?.onResume()
mAmapNaviVIew?.onResume()
}
override fun onHiddenChanged(hidden: Boolean) {
super.onHiddenChanged(hidden)
if (hidden) { //fragment 隐藏, 导航取消c
clearPolyline()
} else { //fragment 显示, 导航开始
e(SceneConstant.M_TAXI_P + "TaxiPassengerNaviTo", "initGeocodeSearch")
}
}
override fun onPause() {
super.onPause()
mMapRottingView?.onPause()
mAmapNaviVIew?.onPause()
}
override fun onDestroy() {
super.onDestroy()
mMapRottingView?.onDestroy()
mAmapNaviVIew?.onDestroy()
AmapNaviToDestinationModel.getInstance(context).destroyAmaNavi()
}
fun showRottingMapView() {
if (mAmapNaviVIew != null && mAmapNaviVIew!!.visibility == View.VISIBLE) {
mAmapNaviVIew!!.visibility = View.GONE
}
if (mMapRottingView != null && mMapRottingView!!.visibility == View.GONE) {
mMapRottingView!!.visibility = View.VISIBLE
}
}
fun setLineMarker(startStation: LatLng?, endStation: LatLng?) {
if (startStation != null && endStation != null) {
UiThreadHandler.post { mMapRottingView?.setLineMarker(startStation, endStation) }
} else {
clearPolyline()
}
}
fun routeResultByServer(
routeArriviedTemp: List<LatLng>?,
routeArrivingTemp: List<LatLng>?,
location: MogoLocation
) {
if (routeArriviedTemp.isNullOrEmpty()||routeArrivingTemp.isNullOrEmpty()) {
clearPolyline()
} else {
drawablePolylineByServerRoute(routeArriviedTemp, routeArrivingTemp,location)
}
}
private fun drawablePolylineByServerRoute(routeArrivied: List<LatLng>?,
routeArriving: List<LatLng>?,
location: MogoLocation?) {
mMapRottingView?.setCoordinatesLatLng(routeArrivied, routeArriving,location)
UiThreadHandler.post { mMapRottingView?.drawablePolyline() }
}
private fun clearPolyline() {
UiThreadHandler.post { mMapRottingView?.clearPolyline() }
}
fun updateOrderStatusView(order: TaxiPassengerOrderQueryRespBean.Result) {
mTPOrderStartStation!!.text = order.startSiteAddr
mTPOrderEndStation!!.text = order.endSiteAddr
if (TaxiPassengerOrderStatusEnum.ArriveAtStart.code == order.orderStatus) {
mTPOrderStatus!!.text = getString(R.string.taxi_p_arrive_to_start)
mTPOrderRemainDis!!.text = "--"
mTPOrderRemainTime!!.text = "--"
mTPOrderRemainArriveTime!!.text = "--"
setSeekBarMax()
return
}
if (TaxiPassengerOrderStatusEnum.OnTheWayToEnd.code == order.orderStatus) {
mTPOrderStatus!!.setText(R.string.taxi_p_start_to_end)
setSeekBarMax()
return
}
}
/**
* 剩余里程,剩余时间,当前定位点所在道路
* @param meters 单位 米
* @param remainTime 单位 秒
*/
@RequiresApi(api = Build.VERSION_CODES.N)
fun onCurrentOrderDistToEndChanged(meters: Long, remainTime: Long) {
var disUnit = "公里"
var remainDis = "0"
if (meters > 0) {
if (meters / 1000 < 1) {
disUnit = ""
remainDis = Math.round(meters.toFloat()).toString()
} else {
disUnit = "公里"
remainDis = NumberFormatUtil.formatLong(meters.toDouble() / 1000)
}
}
val time = Math.ceil(remainTime.toDouble() / 60f).toInt()
val beforeTime = Calendar.getInstance()
beforeTime.add(Calendar.MINUTE, time)
val arriveTime = DateTimeUtil.formatCalendarToString(beforeTime, DateTimeUtil.HH_mm)
updateOrderDisAndTimeView(remainDis, disUnit, time, arriveTime)
updateDriveProcessLoading(meters.toInt())
}
private fun updateOrderDisAndTimeView(
remainDis: String,
remainDisUnit: String,
remainTime: Int,
arriveTime: String
) {
mTPOrderRemainDis!!.text = remainDis
mTPOrderRemainDisUnit!!.text = remainDisUnit
mTPOrderRemainTime!!.text = remainTime.toString()
mTPOrderRemainArriveTime!!.text = arriveTime
}
fun onCarLocationChanged(location: MogoLocation) {
updateSpeedView(location.gnssSpeed)
}
/**
* 更新速度
*
* @param newSpeed
*/
private fun updateSpeedView(newSpeed: Float) {
val speed = (Math.abs(newSpeed) * 3.6f).toInt() // 倒车时工控机反馈定位信息中speed为负值
mTPSpeedTv?.setmColorList(
intArrayOf(
resources.getColor(R.color.taxi_p_speed_normal_color1), resources.getColor(
R.color.taxi_p_speed_normal_color2
)
)
)
mTPSpeedTv?.text = speed.toString()
mTPSpeedTvShadowBg?.text = speed.toString()
mSpeedLayoutBg?.setImageResource(R.drawable.taxi_p_speed_light_green_bg)
}
override fun onCameraChange(bearing: Float) {
startIvCompass(360-bearing)
}
/**
* 设置指南针旋转
*
* @param bearing
*/
private fun startIvCompass(bearing: Float) {
d(SceneConstant.M_TAXI_P + TAG, "startIvCompass: $bearing")
rotateAnimation = RotateAnimation(
lastBearing, bearing, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f
)
rotateAnimation!!.fillAfter = true
mMapArrowIcon!!.startAnimation(rotateAnimation)
lastBearing = bearing
}
override fun onCreateAnimator(transit: Int, enter: Boolean, nextAnim: Int): Animator? {
if (transit == FragmentTransaction.TRANSIT_FRAGMENT_OPEN) {
return if (enter) { //普通的进入的动作
AnimatorInflater.loadAnimator(
context,
R.animator.alpha_hide_show_f
)
} else { //比如一个已经Fragmen被另一个replace是一个进入动作被replace的那个就是false
AnimatorInflater.loadAnimator(
context,
R.animator.alpha_hide_hide_f
)
}
} else if (FragmentTransaction.TRANSIT_FRAGMENT_CLOSE == transit) {
return if (enter) { //之前被replace的重新进入到界面或者Fragment回到栈顶
AnimatorInflater.loadAnimator(
context,
R.animator.alpha_hide_show_f
)
} else { //Fragment退出出栈
AnimatorInflater.loadAnimator(
context,
R.animator.alpha_hide_hide_f
)
}
}
return super.onCreateAnimator(transit, enter, nextAnim)
}
companion object {
@JvmStatic
fun newInstance(): TaxiPassengerServingOrderFragment {
val args = Bundle()
val fragment = TaxiPassengerServingOrderFragment()
fragment.arguments = args
return fragment
}
}
}

View File

@@ -31,7 +31,6 @@ import com.mogo.och.taxi.passenger.R
import com.mogo.och.taxi.passenger.bean.TaxiPassengerAllStarWorld
import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonCallback
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerScoreCallback
import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceManager
import com.mogo.och.taxi.passenger.ui.comment.adapter.CommentAdapter
import com.mogo.och.taxi.passenger.widget.ResizeAnimation
@@ -80,8 +79,6 @@ class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener {
private val gsyVideoOptionBuilder = GSYVideoOptionBuilder()
var iTaxiPassengerScoreCallback: ITaxiPassengerScoreCallback?=null
var taxiPassengerCommonCallback: ITaxiPassengerCommonCallback?=null
var left2Right: Animation = AnimationUtils.loadAnimation(
context, R.anim.left_to_right
@@ -212,7 +209,6 @@ class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener {
ToastUtils.showLong("请选择评价内容")
return
}
iTaxiPassengerScoreCallback?.onScoreCallback(TaxiPassengerScoreUpdateOrderReqBean(orderNo,currentFraction,selectComment))
}
private fun commitAndStartAnimation(fraction: Int,title:String) {
@@ -412,7 +408,7 @@ class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener {
}
private fun requestStarWord() {
TaxiPassengerServiceManager.getAllScoreWorld(context,
TaxiPassengerServiceManager.getAllScoreWorld(
object : OchCommonServiceCallback<TaxiPassengerAllStarWorld> {
override fun onError() {
CallerLogger.e(
@@ -436,7 +432,7 @@ class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener {
}
private fun requestStarWordByStar(start:Int) {
TaxiPassengerServiceManager.getWorldByStar(context,start.toString(),
TaxiPassengerServiceManager.getWorldByStar(start.toString(),
object : OchCommonServiceCallback<TaxiPassengerAllStarWorld> {
override fun onError() {
CallerLogger.e(

View File

@@ -1,13 +1,36 @@
package com.mogo.och.taxi.passenger.ui.orderinfo
import android.content.Context
import android.graphics.drawable.ClipDrawable
import android.graphics.drawable.GradientDrawable
import android.graphics.drawable.LayerDrawable
import android.graphics.drawable.ScaleDrawable
import android.util.AttributeSet
import android.view.Gravity
import android.view.LayoutInflater
import android.widget.ProgressBar
import androidx.appcompat.widget.AppCompatTextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.findViewTreeViewModelStoreOwner
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.och.taxi.passenger.R
import com.mogo.och.taxi.passenger.model.TaxiPassengerModel
import kotlinx.android.synthetic.main.taxi_p_itinerary.view.actv_arrived_time
import kotlinx.android.synthetic.main.taxi_p_itinerary.view.actv_distance
import kotlinx.android.synthetic.main.taxi_p_itinerary.view.actv_distance_unit
import kotlinx.android.synthetic.main.taxi_p_itinerary.view.actv_endstation
import kotlinx.android.synthetic.main.taxi_p_itinerary.view.actv_speed_value
import kotlinx.android.synthetic.main.taxi_p_itinerary.view.actv_surplus_time
import kotlinx.android.synthetic.main.taxi_p_itinerary.view.actv_surplus_time_unit
import kotlinx.android.synthetic.main.taxi_p_itinerary.view.progress_distance
import me.jessyan.autosize.utils.AutoSizeUtils
class ItineraryView : ConstraintLayout {
class ItineraryView : ConstraintLayout, OrderInfoViewModel.ItineraryViewCallback {
private val TAG = "ItineraryView"
constructor(context: Context) : super(context)
@@ -17,53 +40,63 @@ class ItineraryView : ConstraintLayout {
constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes)
// 速度
lateinit var actvSpeedValue: AppCompatTextView
// 速度单位
lateinit var actvSpeedUnit: AppCompatTextView
// 终点站
lateinit var actvEndstation: AppCompatTextView
// 距离终点距离
lateinit var actvDistance: AppCompatTextView
// 距离终点距离单位
lateinit var actvDistanceUnit: AppCompatTextView
// 剩余时间
lateinit var actvSurplusTime: AppCompatTextView
// 剩余时间单位
lateinit var actvSurplusTimeUnit: AppCompatTextView
// 到达时间
lateinit var actvArrivedTime: AppCompatTextView
private fun initView(context: Context?) {
private fun initView(context: Context) {
LayoutInflater.from(context).inflate(R.layout.taxi_p_itinerary, this, true)
actvSpeedValue = findViewById(R.id.actv_speed_value)
actvSpeedUnit = findViewById(R.id.actv_speed_unit)
actvEndstation = findViewById(R.id.actv_endstation)
actvDistance = findViewById(R.id.actv_distance)
actvDistanceUnit = findViewById(R.id.actv_distance_unit)
actvSurplusTime = findViewById(R.id.actv_surplus_time)
actvSurplusTimeUnit = findViewById(R.id.actv_surplus_time_unit)
actvArrivedTime = findViewById(R.id.actv_arrived_time)
val gradientDrawable = GradientDrawable()
gradientDrawable.shape = GradientDrawable.RECTANGLE
val corner = AutoSizeUtils.dp2px(context, 40f).toFloat()
val cornerTop = AutoSizeUtils.dp2px(context, 20f).toFloat()
gradientDrawable.cornerRadii = floatArrayOf(0f, 0f, cornerTop, cornerTop, cornerTop, cornerTop, corner, corner)
val firstColor = ContextCompat.getColor(context, R.color.taxi_p_OF5FFF)
val setondColor = ContextCompat.getColor(context, R.color.taxi_p_44C8FF)
val thirdColor = ContextCompat.getColor(context, R.color.taxi_p_8AE4ED)
val fourceColor = ContextCompat.getColor(context, R.color.taxi_p_C8F3F4)
val bottomColor = ContextCompat.getColor(context, R.color.taxi_p_476FBE)
gradientDrawable.colors = intArrayOf(firstColor,setondColor,thirdColor,fourceColor)
gradientDrawable.orientation = GradientDrawable.Orientation.LEFT_RIGHT
val temp01 = GradientDrawable()
temp01.cornerRadii = floatArrayOf(0f, 0f, 0f, 0f, corner, corner, corner, corner)
temp01.colors = intArrayOf(bottomColor,bottomColor)
val scaleDrawable3 = ScaleDrawable(gradientDrawable, Gravity.START, 1f,-1f)
val arr = arrayOf(temp01, scaleDrawable3)
val ld = LayerDrawable(arr)
ld.setDrawableByLayerId(android.R.id.background, temp01)
ld.setDrawableByLayerId(android.R.id.progress, scaleDrawable3)
progress_distance.setProgressDrawableTiled(ld)
progress_distance.progress = 0
progress_distance.max = 100
}
fun setSpeed(speedValue:String,speedUnit:String){
actvSpeedValue.text = speedValue
actvSpeedUnit.text = speedUnit
}
fun setEndStation(endStation:String){
actvEndstation.text = endStation
override fun onAttachedToWindow() {
super.onAttachedToWindow()
val viewModel = findViewTreeViewModelStoreOwner()?.let {
ViewModelProvider(it).get(OrderInfoViewModel::class.java)
}
viewModel?.setDistanceCallback(this)
}
fun setDistanceInfo(distance:String,distanceUnit:String,
override fun setSpeed(speedValue:String){
actv_speed_value.text = speedValue
}
override fun setEndStation(endStation:String){
actv_endstation.text = endStation
}
override fun setDistanceInfo(surplusdistance:String,distanceUnit:String,
surplusTime:String,surplusTimeUnit:String,
arrivedTime:String
arrivedTime:String,alreadyGone:Int,distance:Int
){
actvDistance.text = distance
actvDistanceUnit.text = distanceUnit
actvSurplusTime .text= surplusTime
actvSurplusTimeUnit.text = surplusTimeUnit
actvArrivedTime .text= arrivedTime
actv_distance.text = surplusdistance
actv_distance_unit.text = distanceUnit
actv_surplus_time .text= surplusTime
actv_surplus_time_unit.text = surplusTimeUnit
actv_arrived_time.text= arrivedTime
}
init {

View File

@@ -0,0 +1,48 @@
package com.mogo.och.taxi.passenger.ui.orderinfo
import androidx.lifecycle.ViewModel
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import kotlin.math.abs
class OrderInfoViewModel: ViewModel(), IMoGoChassisLocationGCJ02Listener {
private val TAG = OrderInfoViewModel::class.java.simpleName
private var viewCallback:ItineraryViewCallback?=null
init {
// 设置起点和终点marker和实时车辆位置
CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 4, this)
}
fun setDistanceCallback(viewCallback:ItineraryViewCallback){
this.viewCallback = viewCallback
}
override fun onCleared() {
super.onCleared()
this.viewCallback = null
}
override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) {
mogoLocation?.let {
UiThreadHandler.post {
val speedKM = (abs(it.gnssSpeed) * 3.6f).toInt()
viewCallback?.setSpeed(speedKM.toString())
}
}
}
interface ItineraryViewCallback{
fun setDistanceInfo(surplusdistance:String,distanceUnit:String,
surplusTime:String,surplusTimeUnit:String,
arrivedTime:String,alreadyGone:Int,distance:Int
)
fun setEndStation(endStation:String)
fun setSpeed(speedValue:String)
}
}

View File

@@ -4,7 +4,7 @@
<item android:id="@android:id/background">
<shape>
<corners android:bottomLeftRadius="@dimen/dp_20" android:bottomRightRadius="@dimen/dp_20"/>
<solid android:color="@color/taxi_p_476FBE" />
<solid android:color="@color/transparent" />
</shape>
</item>
<item android:id="@android:id/secondaryProgress">

View File

@@ -1,392 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<androidx.cardview.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:cardBackgroundColor="@android:color/transparent"
app:cardCornerRadius="@dimen/dp_48"
app:cardElevation="@dimen/dp_20"
app:cardPreventCornerOverlap="true"
android:layout_marginTop="@dimen/dp_34"
app:cardUseCompatPadding="true"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="@dimen/taxi_p_order_panel_width"
android:layout_height="@dimen/taxi_p_order_panel_height"
android:background="@drawable/taxi_passenger_order_bg"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.mogo.och.common.module.wigets.OCHRadiusImageView
android:id="@+id/taxi_p_speed_bg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:adjustViewBounds="true"
android:src="@drawable/taxi_p_speed_light_green_bg"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:och_image_left_top_radius="@dimen/dp_48"
app:och_image_right_top_radius="@dimen/dp_48" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/taxi_p_order_stations"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_116"
android:background="#2661A2DC"
android:paddingTop="@dimen/dp_30"
android:paddingBottom="@dimen/dp_30"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/taxi_p_order_status_start_station_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_82"
android:ellipsize="end"
android:maxLines="1"
android:text="--"
android:textColor="#FFFFFF"
android:textSize="@dimen/taxi_p_order_station_size"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/taxi_p_blue_dot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/dp_22"
android:background="@drawable/taxi_p_blue_circle_bg"
app:layout_constraintBottom_toBottomOf="@+id/taxi_p_order_status_start_station_tv"
app:layout_constraintRight_toLeftOf="@+id/taxi_p_order_status_start_station_tv"
app:layout_constraintTop_toTopOf="@+id/taxi_p_order_status_start_station_tv" />
<TextView
android:id="@+id/taxi_p_order_status_end_station_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_12"
android:ellipsize="end"
android:maxLines="1"
android:text="--"
android:textColor="#FFFFFF"
android:textSize="@dimen/taxi_p_order_station_size"
app:layout_constraintLeft_toLeftOf="@+id/taxi_p_order_status_start_station_tv"
app:layout_constraintTop_toBottomOf="@+id/taxi_p_order_status_start_station_tv" />
<ImageView
android:id="@+id/taxi_p_yellow_dot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/dp_22"
android:background="@drawable/taxi_p_yellow_circle_bg"
app:layout_constraintBottom_toBottomOf="@+id/taxi_p_order_status_end_station_tv"
app:layout_constraintRight_toLeftOf="@+id/taxi_p_order_status_end_station_tv"
app:layout_constraintTop_toTopOf="@+id/taxi_p_order_status_end_station_tv" />
<ImageView
android:id="@+id/grab_order_end_dotLine"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:scaleType="fitXY"
android:src="@drawable/taxi_p_dot_line"
app:layout_constraintBottom_toTopOf="@+id/taxi_p_yellow_dot"
app:layout_constraintLeft_toLeftOf="@+id/taxi_p_blue_dot"
app:layout_constraintRight_toRightOf="@+id/taxi_p_blue_dot"
app:layout_constraintTop_toBottomOf="@+id/taxi_p_blue_dot" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:id="@+id/taxi_p_order_remain"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="3"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/taxi_p_order_stations"
app:layout_constraintBottom_toTopOf="@+id/taxi_p_order_map_view">
<RelativeLayout
android:id="@+id/taxi_p_order_rl1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical"
app:layout_constraintRight_toLeftOf="@+id/taxi_p_order_rl2"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:id="@+id/taxi_p_order_remain_distance_ll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:orientation="horizontal">
<TextView
android:id="@+id/taxi_p_order_remain_distance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:includeFontPadding="false"
android:text="--"
android:textColor="@color/taxi_p_route_txt_color"
android:textSize="@dimen/taxi_p_order_route_size"
android:textStyle="bold" />
<TextView
android:id="@+id/taxi_p_order_remain_distance_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/taxi_p_order_remain_distance_title"
android:layout_marginLeft="@dimen/dp_7"
android:layout_toRightOf="@+id/taxi_p_order_remain_distance"
android:includeFontPadding="false"
android:text="公里"
android:textColor="#FFFFFF"
android:textSize="@dimen/taxi_p_route_txt_unit_size" />
</LinearLayout>
<TextView
android:id="@+id/taxi_p_order_remain_distance_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/taxi_p_order_remain_distance_ll"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/dp_10"
android:includeFontPadding="false"
android:text="距离"
android:textColor="#8FB3EF"
android:textSize="@dimen/taxi_p_route_txt_unit_size" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/taxi_p_order_rl2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical"
app:layout_constraintRight_toLeftOf="@+id/taxi_p_order_rl3"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:id="@+id/taxi_p_order_remain_distance_ll2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:orientation="horizontal">
<TextView
android:id="@+id/taxi_p_order_remain_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:includeFontPadding="false"
android:text="--"
android:textColor="@color/taxi_p_route_txt_color"
android:textSize="@dimen/taxi_p_order_route_size"
android:textStyle="bold" />
<TextView
android:id="@+id/taxi_p_order_remain_time_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/taxi_p_order_remain_time_title"
android:layout_marginLeft="@dimen/dp_7"
android:layout_toRightOf="@+id/taxi_p_order_remain_time"
android:includeFontPadding="false"
android:text="分钟"
android:textColor="#FFFFFF"
android:textSize="@dimen/taxi_p_route_txt_unit_size" />
</LinearLayout>
<TextView
android:id="@+id/taxi_p_order_remain_time_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/taxi_p_order_remain_distance_ll2"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/dp_10"
android:includeFontPadding="false"
android:text="剩余"
android:textColor="#8FB3EF"
android:textSize="@dimen/taxi_p_route_txt_unit_size" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/taxi_p_order_rl3"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/taxi_p_order_remain_arrive_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:includeFontPadding="false"
android:text="--"
android:textColor="@color/taxi_p_route_txt_color"
android:textSize="@dimen/taxi_p_order_route_size"
android:textStyle="bold" />
<TextView
android:id="@+id/taxi_p_order_remain_arrive_time_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/taxi_p_order_remain_arrive_time"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/dp_10"
android:includeFontPadding="false"
android:text="到达"
android:textColor="#8FB3EF"
android:textSize="@dimen/taxi_p_route_txt_unit_size" />
</RelativeLayout>
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/taxi_p_order_map_view"
android:layout_width="match_parent"
android:layout_height="@dimen/taxi_p_order_map_height"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/taxi_p_order_remain"
app:layout_constraintLeft_toLeftOf="parent" >
<com.mogo.och.taxi.passenger.ui.TaxiPassengerMapDirectionView
android:id="@+id/taxi_p_order_rotting_map_view"
android:layout_width="match_parent"
android:layout_height="@dimen/taxi_p_order_map_height"
android:visibility="gone"
android:background="@color/taxi_p_map_bg"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent" />
<com.mogo.och.common.module.map.CommonAmapNaviVIew
android:id="@+id/taxi_p_order_amap_navi_view"
android:layout_width="match_parent"
android:layout_height="@dimen/taxi_p_order_map_height"
android:background="@color/taxi_p_map_bg"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/dp_124"
android:background="@drawable/taxi_p_panel_bottom_bg"
app:layout_constraintBottom_toBottomOf="parent" />
<com.mogo.och.taxi.passenger.ui.CustomSeekBar
android:id="@+id/taxi_p_seekbar"
android:layout_width="@dimen/dp_296"
android:layout_height="@dimen/dp_30"
android:layout_marginBottom="@dimen/dp_42"
android:fadingEdge="horizontal"
android:focusable="true"
android:maxHeight="@dimen/dp_30"
android:minHeight="@dimen/dp_30"
android:paddingStart="0dp"
android:paddingEnd="0dp"
android:thumbOffset="5dp"
android:progressDrawable="@drawable/taxi_p_seekbar_calculator_layer"
android:splitTrack="false"
android:thumb="@drawable/taxi_p_seekbar_point_icon"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="@id/taxi_p_progress_des" />
<TextView
android:id="@+id/taxi_p_progress_des"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_40"
android:paddingRight="@dimen/dp_20"
android:textColor="@android:color/white"
android:textSize="@dimen/taxi_p_progress_des_size"
android:textStyle="italic"
android:layout_marginBottom="@dimen/dp_10"
android:typeface="monospace"
app:layout_constraintBottom_toTopOf="@+id/taxi_p_seekbar"
app:layout_constraintLeft_toLeftOf="parent" />
<ImageView
android:id="@+id/taxi_p_arrow_nor"
android:layout_width="@dimen/dp_100"
android:layout_height="@dimen/dp_100"
android:layout_marginRight="@dimen/dp_20"
android:layout_marginBottom="@dimen/dp_25"
android:src="@drawable/taxi_p_arrow_nor"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<LinearLayout
android:id="@+id/taxi_p_speed_ll"
android:layout_width="@dimen/taxi_p_order_panel_width"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginLeft="@dimen/dp_40"
android:elevation="@dimen/dp_30"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:gravity="bottom">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/taxi_p_speed_tv_bg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_25"
android:layout_marginTop="@dimen/dp_8"
android:letterSpacing="-0.05"
android:text="0"
android:textStyle="bold"
android:textColor="@color/taxi_p_speed_shadow_color"
android:textSize="@dimen/taxi_p_speed_size"/>
<com.mogo.och.common.module.wigets.OCHGradientTextView
android:id="@+id/taxi_p_speed_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_20"
android:letterSpacing="-0.05"
android:text="0"
android:textStyle="bold"
android:textSize="@dimen/taxi_p_speed_size"/>
</FrameLayout>
<TextView
android:id="@+id/taxi_p_speed_tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_12"
android:text="KM/H"
android:includeFontPadding="false"
android:layout_marginBottom="@dimen/dp_22"
android:textColor="@android:color/white"
android:textSize="@dimen/taxi_p_speed_unit_size" />
<TextView
android:id="@+id/taxi_p_order_status_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/dp_40"
android:layout_marginBottom="@dimen/dp_22"
android:gravity="right"
android:text="@string/taxi_p_arrive_to_start"
android:textColor="@android:color/white"
android:textSize="@dimen/taxi_p_order_status_size" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -3,25 +3,24 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="@dimen/dp_842"
android:layout_height="wrap_content"
android:layout_height="@dimen/dp_510"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
<View
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="@+id/progress"
android:background="@drawable/taxi_p_itinerary_bg"
android:layout_width="@dimen/dp_842"
android:layout_height="@dimen/dp_466"/>
android:layout_height="@dimen/dp_466"
android:layout_marginTop="@dimen/dp_44"
android:background="@drawable/taxi_p_itinerary_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/actv_speed_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_32"
android:layout_marginStart="@dimen/dp_90"
android:textColor="@color/taxi_p_203555"
android:textSize="@dimen/dp_150"
android:textScaleX="0.9"
@@ -45,7 +44,7 @@
android:id="@+id/actv_endstation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_32"
android:layout_marginEnd="@dimen/dp_90"
android:maxLength="10"
android:maxLines="1"
android:textColor="@color/taxi_p_293449"
@@ -83,6 +82,7 @@
android:gravity="center"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_51"
android:layout_marginStart="@dimen/dp_58"
android:textSize="@dimen/dp_61"
app:layout_constraintHorizontal_chainStyle="spread"
android:textColor="@color/taxi_p_081831"
@@ -100,8 +100,6 @@
app:layout_constraintTop_toBottomOf="@+id/actv_distance"
app:layout_constraintStart_toStartOf="@+id/actv_distance"
app:layout_constraintEnd_toEndOf="@+id/actv_distance"
app:layout_constraintBottom_toTopOf="@+id/progress"
android:layout_marginBottom="@dimen/dp_57"
android:text="剩余(分)" />
<androidx.appcompat.widget.AppCompatTextView
@@ -134,6 +132,7 @@
android:layout_height="wrap_content"
android:textSize="@dimen/dp_61"
android:textColor="@color/taxi_p_081831"
android:layout_marginEnd="@dimen/dp_58"
android:text="15:05"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/actv_surplus_time"
@@ -151,16 +150,18 @@
app:layout_constraintEnd_toEndOf="@+id/actv_arrived_time" />
<ProgressBar
android:id="@+id/progress"
android:id="@+id/progress_distance"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="@dimen/dp_20"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="@dimen/dp_66"
android:layout_marginStart="@dimen/dp_58"
android:layout_marginEnd="@dimen/dp_58"
android:progress="20"
android:maxHeight="@dimen/dp_10"
android:minHeight="@dimen/dp_10"
android:background="@null"
android:progressDrawable="@drawable/taxi_power_size_seekbar_style" />
android:background="@null" />
</merge>

View File

@@ -70,6 +70,12 @@
<color name="taxi_p_56efa0">#56efa0</color>
<color name="taxi_p_A7BDF3">#A7BDF3</color>
<color name="taxi_p_41444D">#41444D</color>
<color name="taxi_p_OF5FFF">#0F5FFF</color>
<color name="taxi_p_44C8FF">#44C8FF</color>
<color name="taxi_p_8AE4ED">#8AE4ED</color>
<color name="taxi_p_C8F3F4">#C8F3F4</color>
</resources>