[3.3.2]
[抽出启动自驾、代码整理]
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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")
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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) {}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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>
|
||||
}
|
||||
@@ -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"))
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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(
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -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">
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user