From 2b3d24b2b6b23d09ff2f0fcff477b11cf166a2b9 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Fri, 14 Jul 2023 17:14:20 +0800 Subject: [PATCH] =?UTF-8?q?[3.3.2]=20[=E6=8A=BD=E5=87=BA=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E8=87=AA=E9=A9=BE=E3=80=81=E4=BB=A3=E7=A0=81=E6=95=B4=E7=90=86?= =?UTF-8?q?]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dialogfragment/fragment/M1SoftFragment.kt | 1 + .../mogo/och/common/module/utils/RxUtils.kt | 45 ++ .../IOCHTaxiPassengerADASStatusCallback.java | 20 - ...axiPassengerAutopilotPlanningCallback.java | 18 - .../callback/ITaxiPassengerScoreCallback.java | 7 - .../passenger/constant/TaxiPassengerConst.kt | 3 - .../taxi/passenger/model/AutopilotManager.kt | 190 ++++++ .../passenger/model/TaxiPassengerModel.kt | 584 ++---------------- .../network/TaxiPassengerServiceApi.java | 128 ---- .../network/TaxiPassengerServiceApi.kt | 147 +++++ .../network/TaxiPassengerServiceManager.kt | 133 +--- .../presenter/BaseTaxiPassengerPresenter.java | 49 +- .../TaxiPassengerServingOrderPresenter.java | 133 ---- .../passenger/ui/TaxiPassengerBaseFragment.kt | 18 +- .../ui/TaxiPassengerServingOrderFragment.kt | 351 ----------- .../ui/comment/TaxiPassengerArrivedView.kt | 8 +- .../passenger/ui/orderinfo/ItineraryView.kt | 115 ++-- .../ui/orderinfo/OrderInfoViewModel.kt | 48 ++ .../passenger/utils/TPRouteDataTestUtils.java | 45 -- .../taxi_power_size_seekbar_style.xml | 2 +- .../taxi_p_activity_serving_order_view.xml | 392 ------------ .../src/main/res/layout/taxi_p_itinerary.xml | 33 +- .../src/main/res/values/colors.xml | 6 + 23 files changed, 614 insertions(+), 1862 deletions(-) delete mode 100644 OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerADASStatusCallback.java delete mode 100644 OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java delete mode 100644 OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerScoreCallback.java create mode 100644 OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt delete mode 100644 OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.java create mode 100644 OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.kt delete mode 100644 OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java delete mode 100644 OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.kt create mode 100644 OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/OrderInfoViewModel.kt delete mode 100644 OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPRouteDataTestUtils.java delete mode 100644 OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_activity_serving_order_view.xml diff --git a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/fragment/M1SoftFragment.kt b/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/fragment/M1SoftFragment.kt index c6477b0ee9..f2d3c3b35b 100644 --- a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/fragment/M1SoftFragment.kt +++ b/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/fragment/M1SoftFragment.kt @@ -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 diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/RxUtils.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/RxUtils.kt index cb6cbd7dbd..de7a436527 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/RxUtils.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/RxUtils.kt @@ -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") + }) + } } \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerADASStatusCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerADASStatusCallback.java deleted file mode 100644 index df56841e67..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerADASStatusCallback.java +++ /dev/null @@ -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(); -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java deleted file mode 100644 index badb7dee50..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java +++ /dev/null @@ -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 routeArriviedTemp, List routeArrivingTemp, MogoLocation location); - void showRottingMapView(); -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerScoreCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerScoreCallback.java deleted file mode 100644 index 8a726a52d2..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerScoreCallback.java +++ /dev/null @@ -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); -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerConst.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerConst.kt index 729835b85f..d3655b9b35 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerConst.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerConst.kt @@ -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" diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt new file mode 100644 index 0000000000..6cdb98abf7 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt @@ -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 { + override fun onSuccess(data: TaxiPassengerBaseRespBean) {} + override fun onFail(code: Int, msg: String) {} + }) + } + + +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.kt index 4088fa1bbb..c12e9db36b 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.kt @@ -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() //进行中订单 - - private var mADASStatusCallback: IOCHTaxiPassengerADASStatusCallback? = null//Model->Presenter:自动驾驶状态相关 - private var mAutopilotPlanningCallback: IOCHTaxiPassengerAutopilotPlanningCallback? = null//Model->Presenter:自动驾驶线路规划 private val mOrderStatusCallbackMap: MutableMap = 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 { 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 { - 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, - routeArriving: MutableList, - location: MogoLocation - ) { - val routeArriviedTemp: MutableList = ArrayList() - val routeArrivingTemp: MutableList = 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 { 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 { - 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?) { - 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 { 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? - ) { - if (taxiPassengerScoreUpdateOrderReqBean.orderNo == null) return - TaxiPassengerServiceManager.arrivedAndScore( - mContext!!, taxiPassengerScoreUpdateOrderReqBean, - object : OchCommonServiceCallback { - 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 { 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 { - 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) - } - } \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.java deleted file mode 100644 index e7c366c18a..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.java +++ /dev/null @@ -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 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 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 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 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 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 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 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 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 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 startServicePilotDone(@Header ("appId") String appId - , @Header("ticket") String ticket,@Body TaxiPassengerStartReqBean data); -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.kt new file mode 100644 index 0000000000..f68e077e56 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.kt @@ -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 + + /** + * 通过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 + + /** + * 查询订单剩余里程和时间 + * @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 + + /** + * 提交用户输入的手机后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 + + /** + * 对订单进行打分 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 + + /** + * 获取星星对应的文案(所有文案) + * @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 + + /** + * 获取星星对应的文案(和星星一一对应) + * @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 + + /** + * 查询司机是否已确认可开启自动驾驶 + * @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 + + /** + * 乘客屏启动自动驾驶成功 + * @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 +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.kt index abd2453751..53f5d6290b 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.kt @@ -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? ) { - 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? ) { - 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? - ) { - 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? - ) { - 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? ) { - 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? ) { - 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? ) { - 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? ) { - 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? ) { - 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? ) { - mOCHTaxiServiceApi.getWorldByStar( - MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token, - start - ) + mOCHTaxiServiceApi.getWorldByStar(star=start) .transformTry() .subscribe(OchCommonSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus")) } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java index e63cdec530..934bc285a6 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java @@ -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 implements - IOCHTaxiPassengerADASStatusCallback, IOCHTaxiPassengerOrderStatusCallback { private static final String TAG = BaseTaxiPassengerPresenter.class.getSimpleName(); @@ -58,12 +56,10 @@ public class BaseTaxiPassengerPresenter extends Presenter 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 { mView.showOrHideServingOrderFragment(false); mView.showOrHideArrivedEndLayout(true, order.endSiteAddr,order.orderNo); @@ -197,6 +177,8 @@ public class BaseTaxiPassengerPresenter extends Presenter mView.showArrivedEndLayout2Thank(aBoolean)); - } - /** * 开启自动驾驶 */ public void startAutopilot(){ - TaxiPassengerModel.INSTANCE.startAutopilot(); + AutopilotManager.INSTANCE.startAutopilot(); } } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java deleted file mode 100644 index 9e5c913800..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java +++ /dev/null @@ -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 - 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 routeArriviedTemp, List 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(); - } - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.kt index 3ed102be32..e530f83963 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.kt @@ -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 ) diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.kt deleted file mode 100644 index 3bc1fcbcff..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.kt +++ /dev/null @@ -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(), - 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?, - routeArrivingTemp: List?, - location: MogoLocation - ) { - if (routeArriviedTemp.isNullOrEmpty()||routeArrivingTemp.isNullOrEmpty()) { - clearPolyline() - } else { - drawablePolylineByServerRoute(routeArriviedTemp, routeArrivingTemp,location) - } - } - - private fun drawablePolylineByServerRoute(routeArrivied: List?, - routeArriving: List?, - 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 - } - } -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/TaxiPassengerArrivedView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/TaxiPassengerArrivedView.kt index 545947b0ef..22187742b0 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/TaxiPassengerArrivedView.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/TaxiPassengerArrivedView.kt @@ -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 { 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 { override fun onError() { CallerLogger.e( diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/ItineraryView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/ItineraryView.kt index e069854504..b5a3decf9a 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/ItineraryView.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/ItineraryView.kt @@ -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 { diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/OrderInfoViewModel.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/OrderInfoViewModel.kt new file mode 100644 index 0000000000..d44238de96 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/OrderInfoViewModel.kt @@ -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) + } + +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPRouteDataTestUtils.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPRouteDataTestUtils.java deleted file mode 100644 index a7d355ff95..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPRouteDataTestUtils.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.mogo.och.taxi.passenger.utils; - -import com.mogo.och.taxi.passenger.model.TaxiPassengerModel; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.ArrayList; -import java.util.List; - -import mogo.telematics.pad.MessagePad; - -/** - * @author: wangmingjun - * @date: 2022/4/13 - */ -public class TPRouteDataTestUtils { - - static String jsonStr ="{\n" + - " \"models\": [\n" + - " {\n" + - " \"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19927760268911,\"lon\":116.73512607061035,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19927736555187,\"lon\":116.73498243020299,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19927135941599,\"lon\":116.73482951462647,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199260672670036,\"lon\":116.73468429259535,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199251260349946,\"lon\":116.73453933465,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19924691997577,\"lon\":116.7343756435551,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199247953493625,\"lon\":116.73421240809087,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19924986849947,\"lon\":116.73400425509712,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199249431152175,\"lon\":116.73378579041055,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199248921305724,\"lon\":116.73357811807278,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19925012387371,\"lon\":116.73337650020184,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199252270195075,\"lon\":116.73318223781153,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1992521615169,\"lon\":116.73298632625203,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19925202633083,\"lon\":116.73279582043983,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199261230205735,\"lon\":116.73263403473568,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199327991681926,\"lon\":116.73251962434813,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19944850496711,\"lon\":116.73249661840195,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199582026896415,\"lon\":116.73251038561487,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199743326352014,\"lon\":116.73253087453938,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199908347167394,\"lon\":116.73255070500186,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200065950595445,\"lon\":116.7325720694418,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20022747460407,\"lon\":116.73259461416663,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200384057310536,\"lon\":116.73261575018056,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20053849777916,\"lon\":116.73263451936387,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200696919444624,\"lon\":116.7326540541723,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2008524952796,\"lon\":116.7326743511824,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20101429705625,\"lon\":116.73269393580199,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20118279997041,\"lon\":116.73271564378308,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201342388452076,\"lon\":116.73273653366076,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201476063822355,\"lon\":116.73275292393079,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20163479199852,\"lon\":116.73277440686762,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20181243476041,\"lon\":116.7328052766508,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201991767093304,\"lon\":116.7328453845644,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20215573733484,\"lon\":116.73287624009339,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202313648759784,\"lon\":116.73289887933315,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202434745374454,\"lon\":116.7329182210956,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20253164952098,\"lon\":116.73297539811277,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20258043275509,\"lon\":116.73312335324984,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20258233576585,\"lon\":116.73331077089557,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20257107560234,\"lon\":116.73351244039137,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202561578580514,\"lon\":116.73370176209845,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20256256788661,\"lon\":116.73391325024126,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20255633158834,\"lon\":116.73413195000244,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202543311179575,\"lon\":116.73436614303907,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20253067346457,\"lon\":116.73458032609663,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20251776111356,\"lon\":116.73477082198242,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202503997557805,\"lon\":116.73498624001282,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20249129260376,\"lon\":116.73518976336872,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247877796589,\"lon\":116.73537786253135,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20246651610268,\"lon\":116.73559239130266,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20245754388014,\"lon\":116.73574239922202,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20244749208,\"lon\":116.73589674090469,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243806550113,\"lon\":116.73607057284322,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243550556816,\"lon\":116.73628106525871,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243654127756,\"lon\":116.7364949950665,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243738221016,\"lon\":116.7367061649993,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243672476754,\"lon\":116.73691115930336,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243590788176,\"lon\":116.73710722104272,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202436434375336,\"lon\":116.73730688607075,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243749821501,\"lon\":116.73750140347998,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243625962803,\"lon\":116.73771330926793,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202434515480725,\"lon\":116.73791895606205,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2024326561388,\"lon\":116.73815206945737,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243092086137,\"lon\":116.73838655528765,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202430876006126,\"lon\":116.73861890759498,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20242914053177,\"lon\":116.73882029918758,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20242843336561,\"lon\":116.73904465495175,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20242661219026,\"lon\":116.73922453252953,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202426462811076,\"lon\":116.7393708046956,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20242687134937,\"lon\":116.73954685547025,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20242694967377,\"lon\":116.73975021183773,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202424630601236,\"lon\":116.73999740812975,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202422502184625,\"lon\":116.74028266774337,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202419634158936,\"lon\":116.7405942561498,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241975959762,\"lon\":116.7409069557092,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241920524113,\"lon\":116.74120156191647,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241765540262,\"lon\":116.74149288504978,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241569149764,\"lon\":116.7418080096762,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202414529497084,\"lon\":116.74210262897205,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241419532155,\"lon\":116.74241767661879,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202413879360954,\"lon\":116.7427571218185,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241287045245,\"lon\":116.7431284691325,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241214965105,\"lon\":116.74343354359334,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241141271715,\"lon\":116.7437220210538,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2024080520075,\"lon\":116.74399113498052,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202391714280026,\"lon\":116.74427625698272,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20238163805639,\"lon\":116.74452083315958,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202379293010274,\"lon\":116.74475703837204,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202379007817086,\"lon\":116.7449961645494,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20237814181231,\"lon\":116.7452036063558,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202375477619896,\"lon\":116.74539567654291,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2023632396621,\"lon\":116.74555457589031,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20229396554444,\"lon\":116.7456716047369,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20217800547467,\"lon\":116.74574081942625,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202047498095304,\"lon\":116.74573659255675,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20188573786706,\"lon\":116.74571018281719,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201738240263026,\"lon\":116.74568463148606,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20157507049073,\"lon\":116.74565525041498,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20137985142042,\"lon\":116.745619970576,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201187335613575,\"lon\":116.74558631350607,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20098251429043,\"lon\":116.74555055587679,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2007748533628,\"lon\":116.74551426934663,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20057082986032,\"lon\":116.74547749663195,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20036944224329,\"lon\":116.74544156175533,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20016365229035,\"lon\":116.74540577510051,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1999958572445,\"lon\":116.74537505807076,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19984100521566,\"lon\":116.7453433678602,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1996863960282,\"lon\":116.74529675648621,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19953919567943,\"lon\":116.74525916493474,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19940587189373,\"lon\":116.74523402869453,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19929047792381,\"lon\":116.74518617038383,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922141745155,\"lon\":116.74506912884067,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19920798885308,\"lon\":116.744896716334,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19920912644279,\"lon\":116.74467216715483,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199209186509314,\"lon\":116.74448257515108,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19920910709997,\"lon\":116.74430613406223,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1992100786082,\"lon\":116.74410888316238,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921081961254,\"lon\":116.74391968819582,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921040855518,\"lon\":116.7437082083402,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921085053439,\"lon\":116.74346931155634,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921197237373,\"lon\":116.74325149697013,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921248248983,\"lon\":116.74301103786591,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1992139724646,\"lon\":116.74277237066539,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199215818352386,\"lon\":116.74253219408898,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199216175018876,\"lon\":116.74228853120842,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199215970354246,\"lon\":116.74204663206451,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199216627492966,\"lon\":116.74183871233049,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921789170398,\"lon\":116.74165788334192,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922000138535,\"lon\":116.74144512197054,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199221559127494,\"lon\":116.741249370491,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922287231889,\"lon\":116.7410525810756,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922229019589,\"lon\":116.74085266662037,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1992216995901,\"lon\":116.74061957723823,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922263073874,\"lon\":116.74041638149129,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922478093337,\"lon\":116.7402123910757,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199227066091595,\"lon\":116.74003419421553,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199228634241756,\"lon\":116.73985841944678,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922951636012,\"lon\":116.7397079274105,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199252095329484,\"lon\":116.73956265582487,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199346162997905,\"lon\":116.73944690416265,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199470799628024,\"lon\":116.73941941053417,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19962513314346,\"lon\":116.7394280706812,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199780626058924,\"lon\":116.73944255215424,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199961525343376,\"lon\":116.73945856750177,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20016196947193,\"lon\":116.73947572081121,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200384479551936,\"lon\":116.7394949225795,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200595083817475,\"lon\":116.73951027963179,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200792203321086,\"lon\":116.73952526850614,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200985930701684,\"lon\":116.73954125209579,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20115978977055,\"lon\":116.73955610094161,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201321019536124,\"lon\":116.7395695239138,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20147117943043,\"lon\":116.7395823299481,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20163699848565,\"lon\":116.73959633422596,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20178484338371,\"lon\":116.7396085776486,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201962185646316,\"lon\":116.73962351991214,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2021018923927,\"lon\":116.7396354059821,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2022137620686,\"lon\":116.73964348380458,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20232600820075,\"lon\":116.73961190446633,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241090270993,\"lon\":116.73951649703137,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20245777783807,\"lon\":116.73937664238166,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20246906634823,\"lon\":116.73920146119093,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202470916682884,\"lon\":116.73898763065634,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247034830421,\"lon\":116.73878158418357,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20246978204673,\"lon\":116.73857680142473,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247082638905,\"lon\":116.73834517890637,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202471943178196,\"lon\":116.7381047689514,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247131648035,\"lon\":116.73787761484981,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202470799473765,\"lon\":116.73766230702478,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247013054322,\"lon\":116.73743619407796,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20246999515433,\"lon\":116.73724916823292,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247199652478,\"lon\":116.73704888970806,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202473960263525,\"lon\":116.73684083235807,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202474504753205,\"lon\":116.73665462440796,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247501354581,\"lon\":116.73650710371837,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20246541231906,\"lon\":116.73635807696789,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202426768984274,\"lon\":116.73622283382787,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20236638788854,\"lon\":116.73610589402243,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20227106919894,\"lon\":116.73600895001849,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2021428343084,\"lon\":116.73596816020945,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20197815580698,\"lon\":116.73594623645097,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20181789535303,\"lon\":116.73593148707488,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201667906886954,\"lon\":116.73591743008926,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201505897730755,\"lon\":116.7359002912543,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20135083580946,\"lon\":116.73588579696379,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20118617904595,\"lon\":116.73586970398149,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20102374028594,\"lon\":116.73585314703226,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20085554043743,\"lon\":116.73583763953049,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20069451888229,\"lon\":116.73582073901778,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200530837344964,\"lon\":116.73580314359012,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2003608457064,\"lon\":116.73578183888779,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20021770046798,\"lon\":116.73575292592922,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20003454701824,\"lon\":116.7357174959358,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19986125116602,\"lon\":116.73569499961796,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19969408518737,\"lon\":116.73567725223492,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19955533048882,\"lon\":116.73566375985422,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19943174810538,\"lon\":116.73564927714162,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19933167546824,\"lon\":116.735595995086,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199280357603875,\"lon\":116.73546293260645,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19927848361656,\"lon\":116.73531579486274,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19928127892504,\"lon\":116.73505848474375,\"speed\": 0.0\n" + - " }\n" + - " ]\n" + - "}"; - public static void converToRouteData(){ - List list = new ArrayList<>(); - - try { - JSONObject jsonObject = new JSONObject(jsonStr); - JSONArray jsonElements = jsonObject.getJSONArray("models"); - for (int i = 0; i < jsonElements.length(); i++) { - JSONObject s = jsonElements.getJSONObject(i); - MessagePad.Location.Builder builder = MessagePad.Location.newBuilder(); - builder.setLatitude(s.getDouble("lat")); - builder.setLongitude(s.getDouble("lon")); - list.add(builder.build()); - } - TaxiPassengerModel.INSTANCE.startToRouteAndWipe(); - } catch (JSONException e) { - e.printStackTrace(); - } - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_power_size_seekbar_style.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_power_size_seekbar_style.xml index 1b15cb5398..97cdb1f312 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_power_size_seekbar_style.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_power_size_seekbar_style.xml @@ -4,7 +4,7 @@ - + diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_activity_serving_order_view.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_activity_serving_order_view.xml deleted file mode 100644 index 4e47d76e53..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_activity_serving_order_view.xml +++ /dev/null @@ -1,392 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_itinerary.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_itinerary.xml index 5b831abfd9..15ce4b730c 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_itinerary.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_itinerary.xml @@ -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"> - + 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" /> + android:background="@null" /> \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/values/colors.xml b/OCH/mogo-och-taxi-passenger/src/main/res/values/colors.xml index f99cfdfc8c..64122a696f 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/values/colors.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/values/colors.xml @@ -70,6 +70,12 @@ #56efa0 #A7BDF3 #41444D + #0F5FFF + #44C8FF + #8AE4ED + #C8F3F4 + + \ No newline at end of file