[Taxi-d 280 Taxi-p 130] opt
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
package com.mogo.och.taxi.passenger.bean;
|
||||
|
||||
/**
|
||||
* Created by pangfan on 2021/8/19
|
||||
* 司机端准备好或者乘客已验证上车请求参数
|
||||
*/
|
||||
public class TaxiPassengerStartReqBean {
|
||||
|
||||
public String orderNo;
|
||||
public String sn;
|
||||
public TaxiPassengerStartReqBean.Result loc;
|
||||
|
||||
public static class Result {
|
||||
public Double lat;
|
||||
public Double lon;
|
||||
}
|
||||
|
||||
public TaxiPassengerStartReqBean(String sn, String orderNo, TaxiPassengerStartReqBean.Result point) {
|
||||
this.sn = sn;
|
||||
this.orderNo = orderNo;
|
||||
this.loc = point;
|
||||
}
|
||||
}
|
||||
@@ -22,4 +22,6 @@ public interface IOCHTaxiPassengerOrderStatusCallback {
|
||||
//当前路名字
|
||||
void onCurrentRoadName(String currentRoadName);
|
||||
|
||||
// 司机已确认开启自动驾驶环境
|
||||
void onDriverHasCheckedPilotCondition(boolean isBoarded);
|
||||
}
|
||||
|
||||
@@ -42,5 +42,21 @@ class TaxiPassengerConst {
|
||||
|
||||
//实时查询订单剩余时间 和 剩余里程 轮询间隔2s
|
||||
const val LOOP_CALCULATEROUTE_2S = 2 * 1000L
|
||||
|
||||
// 开始服务启动自动驾驶等待时间(埋点上传)
|
||||
const val LOOP_PERIOD_15S = 15 * 1000L
|
||||
|
||||
// 埋点key:接管后点击'自动驾驶'按钮启动
|
||||
const val EVENT_KEY_RESTART_AUTOPILOT = "event_key_och_taxi_restart_autopilot"
|
||||
// 埋点key:开始服务开启自动驾驶(成功/失败)
|
||||
const val EVENT_KEY_START_SERVICE = "event_key_och_taxi_start_service"
|
||||
const val EVENT_PARAM_SN = "sn"
|
||||
const val EVENT_PARAM_TIME = "time"
|
||||
const val EVENT_PARAM_START_NAME = "start_name"
|
||||
const val EVENT_PARAM_END_NAME = "end_name"
|
||||
const val EVENT_PARAM_ORDER_NUMBER = "order_num"
|
||||
const val EVENT_PARAM_START_RESULT = "start_autopilot" // true/false
|
||||
const val EVENT_PARAM_PLATE_NUM = "plate_number" // 车牌号
|
||||
const val EVENT_PARAM_ENV_ONLINE = "env_online" // 是否线上环境:true/false
|
||||
}
|
||||
}
|
||||
@@ -14,12 +14,13 @@ import com.elegant.network.utils.GsonUtil;
|
||||
import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager;
|
||||
import com.mogo.cloud.commons.utils.CoordinateUtils;
|
||||
import com.mogo.commons.debug.DebugConfig;
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters;
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo;
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig;
|
||||
import com.mogo.eagle.core.data.map.MogoLatLng;
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningListener;
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener;
|
||||
import com.mogo.eagle.core.function.api.v2x.LimitingVelocityListener;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListenerManager;
|
||||
import com.mogo.eagle.core.function.call.v2x.CallLimitingVelocityListenerManager;
|
||||
@@ -32,11 +33,13 @@ import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
|
||||
import com.mogo.map.navi.IMogoCarLocationChangedListener2;
|
||||
import com.mogo.module.common.MogoApisHandler;
|
||||
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil;
|
||||
import com.mogo.och.common.module.utils.PinYinUtil;
|
||||
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.TaxiPassengerStartReqBean;
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerADASStatusCallback;
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerAutopilotPlanningCallback;
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerControllerStatusCallback;
|
||||
@@ -50,6 +53,7 @@ import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum;
|
||||
import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceCallback;
|
||||
import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceManager;
|
||||
import com.mogo.aicloud.services.socket.IMogoLifecycleListener;
|
||||
import com.mogo.och.taxi.passenger.utils.TaxiPassengerAnalyticsManager;
|
||||
import com.mogo.service.intent.IMogoIntentListener;
|
||||
import com.mogo.service.statusmanager.IMogoStatusChangedListener;
|
||||
import com.mogo.service.statusmanager.StatusDescriptor;
|
||||
@@ -69,7 +73,6 @@ import io.reactivex.plugins.RxJavaPlugins;
|
||||
import mogo.telematics.pad.MessagePad;
|
||||
import mogo_msg.MogoReportMsg;
|
||||
|
||||
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI;
|
||||
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P;
|
||||
|
||||
/**
|
||||
@@ -157,31 +160,31 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback
|
||||
public void accept(Throwable e) {
|
||||
if (e instanceof UndeliverableException) {
|
||||
e = e.getCause();
|
||||
CallerLogger.INSTANCE.d(M_TAXI + TAG, "UndeliverableException");
|
||||
CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "UndeliverableException");
|
||||
}
|
||||
if ((e instanceof IOException)) {//
|
||||
// fine, irrelevant network problem or API that throws on cancellation
|
||||
CallerLogger.INSTANCE.d(M_TAXI + TAG, "IOException");
|
||||
CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "IOException");
|
||||
return;
|
||||
}
|
||||
if (e instanceof InterruptedException) {
|
||||
// fine, some blocking code was interrupted by a dispose call
|
||||
CallerLogger.INSTANCE.d(M_TAXI + TAG, "InterruptedException");
|
||||
CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "InterruptedException");
|
||||
return;
|
||||
}
|
||||
if ((e instanceof NullPointerException) || (e instanceof IllegalArgumentException)) {
|
||||
// that's likely a bug in the application
|
||||
CallerLogger.INSTANCE.d(M_TAXI + TAG, "NullPointerException or IllegalArgumentException");
|
||||
CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "NullPointerException or IllegalArgumentException");
|
||||
Thread.currentThread().getUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), e);
|
||||
return;
|
||||
}
|
||||
if (e instanceof IllegalStateException) {
|
||||
// that's a bug in RxJava or in a custom operator
|
||||
CallerLogger.INSTANCE.d(M_TAXI + TAG, "IllegalStateException");
|
||||
CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "IllegalStateException");
|
||||
Thread.currentThread().getUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), e);
|
||||
return;
|
||||
}
|
||||
CallerLogger.INSTANCE.d(M_TAXI + TAG,"Undeliverable exception");
|
||||
CallerLogger.INSTANCE.d(M_TAXI_P + TAG,"Undeliverable exception");
|
||||
}
|
||||
});
|
||||
|
||||
@@ -504,11 +507,11 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback
|
||||
if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) {
|
||||
if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotRunning();
|
||||
if (mCurrentOCHOrder != null
|
||||
&& getCurOrderStatus() == TaxiPassengerOrderStatusEnum.ArriveAtStart
|
||||
&& getCurOrderStatus() == TaxiPassengerOrderStatusEnum.UserArriveAtStart
|
||||
&& state != mPrevAPStatus) {
|
||||
// 当高频返回autopilot 2时,不重复调用订单状态变更
|
||||
mPrevAPStatus = state; // 每个状态单独赋值,解决无订单时已经是2的状态导致的新订单来时无法进入此逻辑更新状态
|
||||
// updateOCHOrderStatus(OrderStatusEnum.OnTheWayToEndStation);
|
||||
startServicePilotDone();
|
||||
}
|
||||
} else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) {
|
||||
mPrevAPStatus = state;
|
||||
@@ -596,9 +599,9 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback
|
||||
*/
|
||||
public void startOrStopRouteAndWipe(boolean isStart){
|
||||
if (isStart){
|
||||
TaxiPassengerModelLoopManager.getInstance().startOrStopRouteAndWipe();
|
||||
TaxiPassengerModelLoopManager.getInstance().startRouteAndWipe();
|
||||
}else {
|
||||
TaxiPassengerModelLoopManager.getInstance().stopOrStopRouteAndWipe();
|
||||
TaxiPassengerModelLoopManager.getInstance().stopRouteAndWipe();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -781,6 +784,100 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback
|
||||
});
|
||||
}
|
||||
|
||||
public void loopQueryPilotStatus(){
|
||||
if (mCurrentOCHOrder == null) return;
|
||||
TaxiPassengerServiceManager.getInstance().queryPilotStatus(mContext, mCurrentOCHOrder.orderNo,
|
||||
new TaxiPassengerServiceCallback<TaxiPassengerBaseRespBean>() {
|
||||
@Override
|
||||
public void onSuccess(TaxiPassengerBaseRespBean data) {
|
||||
updateAutopilotStatus(data.code == 0);
|
||||
startOrStopReadyToAutopilotoop(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFail(int code, String msg) {
|
||||
updateAutopilotStatus(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void updateAutopilotStatus(boolean isBoarded){
|
||||
if (mOrderStatusCallbackMap.size() > 0) {
|
||||
for (IOCHTaxiPassengerOrderStatusCallback callback :mOrderStatusCallbackMap.values()){
|
||||
callback.onDriverHasCheckedPilotCondition(isBoarded);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void startDriverReadyToAutopilotLoop(){
|
||||
if (NetworkUtils.isConnected(mContext)) {
|
||||
startOrStopReadyToAutopilotoop(true);
|
||||
}
|
||||
}
|
||||
|
||||
public void startOrStopReadyToAutopilotoop(boolean isStart) {
|
||||
if (isStart){
|
||||
TaxiPassengerModelLoopManager.getInstance().startReadyToAutopilot();
|
||||
}else {
|
||||
TaxiPassengerModelLoopManager.getInstance().stopReadyToAutopilot();
|
||||
}
|
||||
}
|
||||
|
||||
public void startServicePilotDone(){
|
||||
if (mCurrentOCHOrder == null) return;
|
||||
TaxiPassengerStartReqBean.Result result = new TaxiPassengerStartReqBean.Result();
|
||||
result.lat = mLatitude;
|
||||
result.lon = mLongitude;
|
||||
TaxiPassengerServiceManager.getInstance().startServicePilotDone(mContext,
|
||||
mCurrentOCHOrder.orderNo, result,
|
||||
new TaxiPassengerServiceCallback<TaxiPassengerBaseRespBean>(){
|
||||
|
||||
@Override
|
||||
public void onSuccess(TaxiPassengerBaseRespBean data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFail(int code, String msg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void startAutopilot() {
|
||||
if (!checkCurrentOCHOrder()) {
|
||||
CallerLogger.INSTANCE.e(M_TAXI_P + TAG, "no order or order is empty.");
|
||||
ToastUtils.showShort("当前订单不存在或异常!");
|
||||
return;
|
||||
}
|
||||
|
||||
if (mCurrentOCHOrder.orderStatus != TaxiPassengerOrderStatusEnum.UserArriveAtStart.getCode()) {
|
||||
ToastUtils.showShort("当前订单状态异常!");
|
||||
return;
|
||||
}
|
||||
|
||||
double startWgsLon = mCurrentOCHOrder.startSitePoint.get(0);
|
||||
double startWgsLat = mCurrentOCHOrder.startSitePoint.get(1);
|
||||
double endWgsLon = mCurrentOCHOrder.endSitePoint.get(0);
|
||||
double endWgsLat = mCurrentOCHOrder.endSitePoint.get(1);
|
||||
|
||||
AutopilotControlParameters parameters = new AutopilotControlParameters();
|
||||
parameters.vehicleType = mCurrentOCHOrder.businessType;
|
||||
parameters.startName = PinYinUtil.getPinYinHeadChar(mCurrentOCHOrder.startSiteAddr); // 起点名称拼音首字母大写:科学城B区2号门(KXCBQ2HM)
|
||||
parameters.endName = PinYinUtil.getPinYinHeadChar(mCurrentOCHOrder.endSiteAddr); // 终点名称拼音首字母大写:科学城C区三号门(KXCCQSHM)
|
||||
parameters.startLatLon = new AutopilotControlParameters.AutoPilotLonLat(startWgsLat, startWgsLon);
|
||||
parameters.endLatLon = new AutopilotControlParameters.AutoPilotLonLat(endWgsLat, endWgsLon);
|
||||
CallerAutoPilotManager.INSTANCE.startAutoPilot(parameters);
|
||||
CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "start autopilot with parameter: %s"
|
||||
, GsonUtil.jsonFromObject(parameters)
|
||||
+ " ,startSiteName=" + mCurrentOCHOrder.startSiteAddr
|
||||
+ " ,endSiteName=" + mCurrentOCHOrder.endSiteAddr);
|
||||
|
||||
TaxiPassengerAnalyticsManager.getInstance().triggerStartAutopilotEvent(false, false,
|
||||
mCurrentOCHOrder.startSiteAddr, mCurrentOCHOrder.endSiteAddr, mCurrentOCHOrder.orderNo);
|
||||
}
|
||||
|
||||
|
||||
private void runOnUIThread(Runnable executor) {
|
||||
if (executor == null) {
|
||||
return;
|
||||
|
||||
@@ -32,12 +32,34 @@ public class TaxiPassengerModelLoopManager {
|
||||
private Disposable mInAndWaitServiceDisposable; //进行中、待服务订单列表轮询
|
||||
private Disposable mQueryOrderRemainingDisposable; //心跳轮询
|
||||
private Disposable mRouteWipeDisposable; //轨迹擦除
|
||||
private Disposable mReadyToAutopilotDisposable; //轨迹擦除
|
||||
|
||||
public void startOrStopRouteAndWipe() {
|
||||
public void startReadyToAutopilot() {
|
||||
if (mReadyToAutopilotDisposable != null && !mReadyToAutopilotDisposable.isDisposed()) {
|
||||
return;
|
||||
}
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startReadyToAutopilot()");
|
||||
mReadyToAutopilotDisposable = Observable.interval(TaxiPassengerConst.LOOP_DELAY,
|
||||
TaxiPassengerConst.LOOP_PERIOD_1S, TimeUnit.MILLISECONDS)
|
||||
.map((aLong -> aLong + 1))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(aLong -> TaxiPassengerModel.getInstance().loopQueryPilotStatus());
|
||||
}
|
||||
|
||||
public void stopReadyToAutopilot() {
|
||||
if (mReadyToAutopilotDisposable != null) {
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopReadyToAutopilot()");
|
||||
mReadyToAutopilotDisposable.dispose();
|
||||
mReadyToAutopilotDisposable = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void startRouteAndWipe() {
|
||||
if (mRouteWipeDisposable != null && !mRouteWipeDisposable.isDisposed()) {
|
||||
return;
|
||||
}
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startOrStopRouteWipe()");
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startRouteAndWipe()");
|
||||
mRouteWipeDisposable = Observable.interval(TaxiPassengerConst.LOOP_DELAY,
|
||||
TaxiPassengerConst.LOOP_PERIOD_1S, TimeUnit.MILLISECONDS)
|
||||
.map((aLong -> aLong + 1))
|
||||
@@ -46,9 +68,9 @@ public class TaxiPassengerModelLoopManager {
|
||||
.subscribe(aLong -> TaxiPassengerModel.getInstance().loopRouteAndWipe());
|
||||
}
|
||||
|
||||
public void stopOrStopRouteAndWipe() {
|
||||
public void stopRouteAndWipe() {
|
||||
if (mRouteWipeDisposable != null) {
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopOrStopRouteWipe()");
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopRouteAndWipe()");
|
||||
mRouteWipeDisposable.dispose();
|
||||
mRouteWipeDisposable = null;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ 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;
|
||||
@@ -85,4 +86,27 @@ interface TaxiPassengerServiceApi {
|
||||
@POST( "/autopilot-car-hailing/evaluation/vehicle/taxi/passenger/add" )
|
||||
Observable<TaxiPassengerBaseRespBean> arrivedAndScore(@Header ("appId") String appId, @Header("ticket") String ticket, @Body TaxiPassengerScoreUpdateOrderReqBean data);
|
||||
|
||||
/**
|
||||
* 查询司机是否已确认可开启自动驾驶
|
||||
* @param appId
|
||||
* @param ticket
|
||||
* @param orderNo
|
||||
* @return
|
||||
*/
|
||||
@Headers( {"Content-type:application/json;charset=UTF-8"} )
|
||||
@GET( "/autopilot-car-hailing/cab/flow/v1/driver/taxi/pilot/status" )
|
||||
Observable<TaxiPassengerBaseRespBean> queryPilotStatus(@Header ("appId") String appId
|
||||
, @Header("ticket") String ticket,@Query("orderNo") String orderNo);
|
||||
|
||||
/**
|
||||
* 乘客屏启动自动驾驶成功
|
||||
* @param appId
|
||||
* @param ticket
|
||||
* @param data
|
||||
* @return
|
||||
*/
|
||||
@Headers( {"Content-type:application/json;charset=UTF-8"} )
|
||||
@POST( "/autopilot-car-hailing/cab/flow/v1/driver/taxi/passenger/startServicePilot" )
|
||||
Observable<TaxiPassengerBaseRespBean> startServicePilotDone(@Header ("appId") String appId
|
||||
, @Header("ticket") String ticket,@Body TaxiPassengerStartReqBean data);
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ 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.constant.TaxiPassengerConst;
|
||||
import com.mogo.commons.debug.DebugConfig;
|
||||
|
||||
@@ -167,6 +168,28 @@ public class TaxiPassengerServiceManager {
|
||||
,new TaxiPassengerScoreUpdateOrderReqBean(orderNo,star))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(getSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus"));
|
||||
.subscribe(getSubscribeImpl(context, callback, "arrivedAndScore"));
|
||||
}
|
||||
|
||||
public void queryPilotStatus(Context context, String orderNo
|
||||
,TaxiPassengerServiceCallback<TaxiPassengerBaseRespBean> callback){
|
||||
mOCHTaxiServiceApi.queryPilotStatus(
|
||||
MoGoAiCloudClientConfig.getInstance().getServiceAppId()
|
||||
,MoGoAiCloudClientConfig.getInstance().getToken()
|
||||
,orderNo)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(getSubscribeImpl(context, callback, "queryPilotStatus"));
|
||||
}
|
||||
|
||||
public void startServicePilotDone(Context context,String orderNo,TaxiPassengerStartReqBean.Result loc
|
||||
,TaxiPassengerServiceCallback<TaxiPassengerBaseRespBean> callback){
|
||||
mOCHTaxiServiceApi.startServicePilotDone(MoGoAiCloudClientConfig.getInstance().getServiceAppId()
|
||||
,MoGoAiCloudClientConfig.getInstance().getToken()
|
||||
,new TaxiPassengerStartReqBean(MoGoAiCloudClientConfig.getInstance().getSn()
|
||||
,orderNo,loc))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(getSubscribeImpl(context,callback,"startServicePilotDone"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,19 +141,25 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDriverHasCheckedPilotCondition(boolean isBoarded) {
|
||||
mView.showOrHideStartAutopilotView(true,true);
|
||||
}
|
||||
|
||||
private void updateOrderView(TaxiPassengerOrderQueryRespBean.Result order) {
|
||||
CallerLogger.INSTANCE.d(M_TAXI_P+TAG,"updateOrderView = "+order.orderStatus);
|
||||
// 70 取消订单
|
||||
if (TaxiPassengerOrderStatusEnum.Cancel.getCode() == order.orderStatus){
|
||||
runOnUIThread(() -> {
|
||||
mView.showOrHideServingOrderFragment(false);
|
||||
// mView.showOrHideStartAutopilotView(false);
|
||||
mView.showOrHideStartAutopilotView(false,false);
|
||||
mView.showOrHidePressengerCheckPager(false, "",
|
||||
"", "", "", "");
|
||||
mView.showOrHideArrivedEndLayout(false,"","");
|
||||
});
|
||||
TaxiPassengerModel.getInstance().recoverNaviInfo();
|
||||
TaxiPassengerGeocodeSearchModel.getInstance(getContext()).destroyGeocodeSearch();
|
||||
TaxiPassengerModel.getInstance().startOrStopReadyToAutopilotoop(false);
|
||||
return;
|
||||
}
|
||||
// 20 司机到达上车点
|
||||
@@ -165,13 +171,21 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
|
||||
return;
|
||||
}
|
||||
// TODO: 2022/6/10 若乘客端确认已经上车,则显示开始行程按钮 并且不可点击 暗
|
||||
// TODO: 2022/6/10 若司机端已经确认,则显示开始行程按钮 并且可点击
|
||||
//TODO: 2022/6/10 若订单取消或者隐藏则隐藏开始行程按钮
|
||||
// TODO: 2022/6/10 乘客已上车 需要开启轮询司机确认可以开启自动驾驶的接口
|
||||
// TODO: 2022/6/10 若司机端已经确认,则显示开始行程按钮 并且可点击,第二步的轮询停止
|
||||
//TODO: 2022/6/10 若订单取消或者隐藏则关掉开始行程界面,轮询也要取消
|
||||
if (TaxiPassengerOrderStatusEnum.UserArriveAtStart.getCode() == order.orderStatus){
|
||||
// mView.showOrHideStartAutopilotView(true);
|
||||
runOnUIThread(() ->{
|
||||
//开启轮询司机是否已准备好开启自动驾驶的环境
|
||||
TaxiPassengerModel.getInstance().startDriverReadyToAutopilotLoop();
|
||||
mView.showOrHideStartAutopilotView(true,false);
|
||||
});
|
||||
}
|
||||
if (TaxiPassengerOrderStatusEnum.OnTheWayToEnd.getCode() == order.orderStatus){
|
||||
// mView.showOrHideStartAutopilotView(false);
|
||||
runOnUIThread(() ->{
|
||||
mView.showOrHideStartAutopilotView(false,false);
|
||||
});
|
||||
TaxiPassengerModel.getInstance().startOrStopReadyToAutopilotoop(false);
|
||||
}
|
||||
// 30 用户到达上车点 并通过了手机号后四位验证
|
||||
// 40 服务中
|
||||
@@ -221,4 +235,11 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
|
||||
TaxiPassengerModel.getInstance().arrivedAndScore(score,orderNo, aBoolean -> mView.showArrivedEndLayout2Thank(aBoolean));
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启自动驾驶
|
||||
*/
|
||||
public void startAutopilot(){
|
||||
TaxiPassengerModel.getInstance().startAutopilot();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package com.mogo.och.taxi.passenger.ui;
|
||||
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.view.View;
|
||||
import android.view.animation.LinearInterpolator;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
@@ -172,29 +174,21 @@ public class TaxiPassengerBaseFragment extends MvpFragment<TaxiPassengerBaseFrag
|
||||
private int mPrevAPStatus = -1;
|
||||
public void onAutopilotStatusChanged(int status) {
|
||||
getActivity().runOnUiThread(() -> {
|
||||
// if (isStarting && IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING != status) {
|
||||
// // 1. 主动开启自动驾驶中,不为2(为0、1)则继续loading
|
||||
// return;
|
||||
// }
|
||||
// if (isStarting && IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == status
|
||||
// && mPrevAPStatus != status) {
|
||||
// // 2. 主动开启自动驾驶中,为2则停止loading,并isStarting = false
|
||||
// startAutopilotDone(true);
|
||||
// return;
|
||||
// }
|
||||
if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING != status) {
|
||||
// 1. 主动开启自动驾驶中,不为2(为0、1)则继续loading
|
||||
return;
|
||||
}
|
||||
if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == status
|
||||
&& mPrevAPStatus != status) {
|
||||
// 2. 主动开启自动驾驶中,为2则停止loading,并isStarting = false
|
||||
if ( mStartAutopilotView != null && mStartAutopilotView.get() != null){
|
||||
mStartAutopilotView.get().startOrStopLoadingAnim(false);
|
||||
}
|
||||
}
|
||||
// 3. 其他过程直接更新
|
||||
if (mPrevAPStatus != status){
|
||||
autopilotStatusAnimchanged(status);
|
||||
}
|
||||
// if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == mPrevAPStatus) {
|
||||
// if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE == status) {
|
||||
// // 2->1
|
||||
//// AIAssist.getInstance(getContext()).speakTTSVoice("已进入人工驾驶模式");
|
||||
// } else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE == status) {
|
||||
// // 2->0
|
||||
//// AIAssist.getInstance(getContext()).speakTTSVoice("自动驾驶已停止,请人工接管");
|
||||
// }
|
||||
// }
|
||||
mPrevAPStatus = status;
|
||||
});
|
||||
}
|
||||
@@ -276,8 +270,6 @@ public class TaxiPassengerBaseFragment extends MvpFragment<TaxiPassengerBaseFrag
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 显示或者隐藏乘客可点击自动驾驶页面
|
||||
* 乘客验证成功,页面显示,按钮置于不可点击
|
||||
@@ -383,6 +375,7 @@ public class TaxiPassengerBaseFragment extends MvpFragment<TaxiPassengerBaseFrag
|
||||
|
||||
@Override
|
||||
public void onClickCallback() {
|
||||
//todo 点击开始自动驾驶按钮
|
||||
|
||||
mPresenter.startAutopilot();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
package com.mogo.och.taxi.passenger.ui;
|
||||
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.content.Context;
|
||||
import android.graphics.drawable.AnimationDrawable;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.animation.LinearInterpolator;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.mogo.eagle.core.utilcode.util.ToastUtils;
|
||||
import com.mogo.och.common.module.wigets.OCHBorderShadowLayout;
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
|
||||
import com.mogo.och.taxi.passenger.R;
|
||||
import com.mogo.och.taxi.passenger.callback.ITPClickStartAutopilotCallback;
|
||||
|
||||
@@ -19,7 +22,12 @@ import com.mogo.och.taxi.passenger.callback.ITPClickStartAutopilotCallback;
|
||||
public class TaxiPassengerStartAutopilotView extends RelativeLayout implements View.OnClickListener {
|
||||
|
||||
private TextView mStartAutopilotBtn;
|
||||
private ImageView mAutopilotImage;
|
||||
private ITPClickStartAutopilotCallback mClickCallback;
|
||||
public boolean isStarting = false;
|
||||
private ObjectAnimator autopilotLoadingAnimator;
|
||||
private AnimationDrawable animationDrawable;
|
||||
private static final long TIMER_START_AUTOPILOT_INTERVAL = 10 * 1000L;
|
||||
|
||||
public TaxiPassengerStartAutopilotView(Context context) {
|
||||
super(context);
|
||||
@@ -37,6 +45,7 @@ public class TaxiPassengerStartAutopilotView extends RelativeLayout implements V
|
||||
private void initView(Context context) {
|
||||
LayoutInflater.from(context).inflate(R.layout.taxi_p_start_autopilot_view, this, true);
|
||||
mStartAutopilotBtn = findViewById(R.id.taxi_p_start_autopilot);
|
||||
mAutopilotImage = findViewById(R.id.taxi_p_autopilot_iv);
|
||||
mStartAutopilotBtn.setOnClickListener(this);
|
||||
}
|
||||
|
||||
@@ -47,11 +56,88 @@ public class TaxiPassengerStartAutopilotView extends RelativeLayout implements V
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (v.getId() == R.id.taxi_p_start_autopilot){
|
||||
ToastUtils.showShort("等待接口。。。。");
|
||||
//开启动画和自动驾驶
|
||||
if (mClickCallback != null) mClickCallback.onClickCallback();
|
||||
}
|
||||
}
|
||||
|
||||
public void updateStartAutopilotBtnStatus(boolean isClickable){
|
||||
if (mStartAutopilotBtn == null) return;
|
||||
mStartAutopilotBtn.setClickable(isClickable);
|
||||
mAutopilotImage.setVisibility(GONE);
|
||||
mStartAutopilotBtn.setText(getResources().getString(R.string.taxi_p_start_autopilot_txt));
|
||||
if (isClickable){ //可点击状态下UI
|
||||
startAutopilotAnimatorDrawable(true);
|
||||
}else {// 不可点击状态下 UI
|
||||
startAutopilotAnimatorDrawable(false);
|
||||
}
|
||||
}
|
||||
|
||||
public void startAutopilotAnimatorDrawable(boolean isStart){
|
||||
if (isStart){
|
||||
if (animationDrawable == null) {
|
||||
mStartAutopilotBtn.setBackground(getResources().getDrawable(R.drawable.anmi_flow));
|
||||
animationDrawable = (AnimationDrawable) mStartAutopilotBtn.getBackground();
|
||||
}
|
||||
if (animationDrawable.isRunning()) {
|
||||
return;
|
||||
}
|
||||
animationDrawable.selectDrawable(0);
|
||||
animationDrawable.start();
|
||||
}else {
|
||||
if (animationDrawable != null) {
|
||||
animationDrawable.selectDrawable(0);
|
||||
animationDrawable.stop();
|
||||
}
|
||||
mStartAutopilotBtn.setBackground(getResources().getDrawable(R.drawable.taxi_autopilot_bg_selector));
|
||||
animationDrawable = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void startOrStopLoadingAnim(boolean start) {
|
||||
if (start) {
|
||||
isStarting = true;
|
||||
mStartAutopilotBtn.setText(getResources().getString(R.string.taxi_p_start_autopilot_loading));
|
||||
mStartAutopilotBtn.setTextColor(getResources().getColor(R.color.taxi_autopilot_text_color_normal));
|
||||
mAutopilotImage.setImageResource(R.drawable.taxi_p_ic_autopilot_loading);
|
||||
if (autopilotLoadingAnimator == null) {
|
||||
autopilotLoadingAnimator = ObjectAnimator.ofFloat(mAutopilotImage,
|
||||
"rotation", 0f, 360f);
|
||||
}
|
||||
autopilotLoadingAnimator.setInterpolator(new LinearInterpolator());
|
||||
autopilotLoadingAnimator.setRepeatCount(-1);//无限循环
|
||||
autopilotLoadingAnimator.setStartDelay(100);
|
||||
autopilotLoadingAnimator.setDuration(1000);//设置持续时间
|
||||
autopilotLoadingAnimator.start();//动画开始
|
||||
startingAutopilotCountDown();
|
||||
} else {
|
||||
isStarting = false;
|
||||
if (autopilotLoadingAnimator != null) {
|
||||
autopilotLoadingAnimator.end();
|
||||
mAutopilotImage.clearAnimation();
|
||||
autopilotLoadingAnimator = null;
|
||||
}
|
||||
updateStartAutopilotBtnStatus(true);
|
||||
}
|
||||
}
|
||||
|
||||
public void onAutopilotStatusSuccess(){
|
||||
startOrStopLoadingAnim(false);
|
||||
}
|
||||
|
||||
public void onAutopilotStatusFailure(){
|
||||
startOrStopLoadingAnim(false);
|
||||
}
|
||||
|
||||
private void startingAutopilotCountDown() {
|
||||
UiThreadHandler.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() { //未启动成功10s后做处理
|
||||
if (isStarting){ //判断动画是否在进行
|
||||
startOrStopLoadingAnim(false);
|
||||
}
|
||||
|
||||
}
|
||||
},TIMER_START_AUTOPILOT_INTERVAL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
package com.mogo.och.taxi.passenger.utils;
|
||||
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClientConfig;
|
||||
import com.mogo.commons.debug.DebugConfig;
|
||||
import com.mogo.eagle.core.data.app.AppConfigInfo;
|
||||
import com.mogo.eagle.core.function.call.analytics.AnalyticsManager;
|
||||
import com.mogo.eagle.core.utilcode.util.DateTimeUtils;
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
|
||||
import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* OCH Taxi埋点工具
|
||||
*
|
||||
* Created on 2022/3/24
|
||||
*/
|
||||
public class TaxiPassengerAnalyticsManager {
|
||||
|
||||
private static final class SingletonHolder {
|
||||
private static final TaxiPassengerAnalyticsManager INSTANCE = new TaxiPassengerAnalyticsManager();
|
||||
}
|
||||
|
||||
public static TaxiPassengerAnalyticsManager getInstance() {
|
||||
return TaxiPassengerAnalyticsManager.SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private String mStartAutopilotKey;
|
||||
private HashMap<String, Object> mStartAutopilotParams = new HashMap<>();
|
||||
|
||||
private Runnable startAutopilotRunnable = () -> {
|
||||
// 15s内未开启,上报失败埋点
|
||||
mStartAutopilotParams.put(TaxiPassengerConst.EVENT_PARAM_START_RESULT, false);
|
||||
AnalyticsManager.INSTANCE.track(mStartAutopilotKey, mStartAutopilotParams);
|
||||
};
|
||||
|
||||
/**
|
||||
* 触发'开启自动驾驶'埋点流程
|
||||
* 开启自动驾驶,15s内成功则发送成功埋点,否则发送失败埋点
|
||||
* @param restart false(点击'开始服务'启动)/true(接管后点击'自动驾驶'按钮启动)
|
||||
* @param send 是否直接发送埋点(15s内开启成功则直接发送成功埋点)
|
||||
*/
|
||||
public void triggerStartAutopilotEvent(
|
||||
boolean restart, boolean send, String startName, String endName, String orderNo) {
|
||||
mStartAutopilotKey = restart ?
|
||||
TaxiPassengerConst.EVENT_KEY_RESTART_AUTOPILOT : TaxiPassengerConst.EVENT_KEY_START_SERVICE;
|
||||
String sn = MoGoAiCloudClientConfig.getInstance().getSn();
|
||||
String plateNum = AppConfigInfo.INSTANCE.getPlateNumber();
|
||||
String dateTime = DateTimeUtils.getTimeText(
|
||||
System.currentTimeMillis(), DateTimeUtils.yyyy_MM_dd_HH_mm_ss);
|
||||
|
||||
mStartAutopilotParams.put(TaxiPassengerConst.EVENT_PARAM_SN, sn);
|
||||
mStartAutopilotParams.put(TaxiPassengerConst.EVENT_PARAM_PLATE_NUM, TextUtils.isEmpty(plateNum) ? "" : plateNum);
|
||||
mStartAutopilotParams.put(TaxiPassengerConst.EVENT_PARAM_ENV_ONLINE,
|
||||
DebugConfig.getNetMode() == DebugConfig.NET_MODE_RELEASE ? true : false);
|
||||
mStartAutopilotParams.put(TaxiPassengerConst.EVENT_PARAM_TIME, dateTime);
|
||||
mStartAutopilotParams.put(TaxiPassengerConst.EVENT_PARAM_START_NAME, startName);
|
||||
mStartAutopilotParams.put(TaxiPassengerConst.EVENT_PARAM_END_NAME, endName);
|
||||
mStartAutopilotParams.put(TaxiPassengerConst.EVENT_PARAM_ORDER_NUMBER, orderNo);
|
||||
|
||||
if (send) {
|
||||
// 开启成功,上报埋点
|
||||
if (startAutopilotRunnable != null &&
|
||||
UiThreadHandler.getsUiHandler().hasCallbacks(startAutopilotRunnable)) {
|
||||
UiThreadHandler.removeCallbacks(startAutopilotRunnable);
|
||||
}
|
||||
mStartAutopilotParams.put(TaxiPassengerConst.EVENT_PARAM_START_RESULT, true);
|
||||
AnalyticsManager.INSTANCE.track(mStartAutopilotKey, mStartAutopilotParams);
|
||||
} else {
|
||||
UiThreadHandler.postDelayed(startAutopilotRunnable, TaxiPassengerConst.LOOP_PERIOD_15S);
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 2.3 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.3 KiB |
@@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:oneshot="false">
|
||||
<item android:drawable="@drawable/anim_flow_00000" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00001" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00002" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00003" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00004" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00005" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00006" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00007" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00008" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00009" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00010" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00011" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00012" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00013" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00014" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00015" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00016" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00017" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00018" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00019" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00020" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00021" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00022" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00023" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00024" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00025" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00026" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00027" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00028" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00029" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00030" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00031" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00032" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00033" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00034" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00035" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00036" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00037" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00038" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00039" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00040" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00041" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00042" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00043" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00044" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00045" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00046" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00047" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00048" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00049" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00050" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00051" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00052" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00053" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00054" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00055" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00056" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00057" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00058" android:duration="100"></item>
|
||||
<item android:drawable="@drawable/anim_flow_00059" android:duration="100"></item>
|
||||
</animation-list>
|
||||
@@ -33,6 +33,15 @@
|
||||
android:textColor="@android:color/white"
|
||||
android:elevation="5dp"
|
||||
android:background="@drawable/taxi_p_start_autopilot_txt_btn_bg"/>
|
||||
<ImageView
|
||||
android:id="@+id/taxi_p_autopilot_iv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginTop="@dimen/dp_16"
|
||||
android:layout_marginLeft="@dimen/dp_16"
|
||||
android:src="@drawable/taxi_p_ic_autopilot_loading"
|
||||
/>
|
||||
</com.mogo.och.common.module.wigets.OCHBorderShadowLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -33,4 +33,5 @@
|
||||
<string name="tv_delete">删除</string>
|
||||
|
||||
<string name="taxi_p_start_autopilot_txt">点击开始</string>
|
||||
<string name="taxi_p_start_autopilot_loading">启动中</string>
|
||||
</resources>
|
||||
@@ -1,17 +0,0 @@
|
||||
package com.mogo.och.taxi.bean;
|
||||
|
||||
/**
|
||||
* Created by pangfan on 2021/8/19
|
||||
*
|
||||
* 验证手机号后四位同时流转订单状态
|
||||
*/
|
||||
public class TaxiCheckPhoneUpdateOrderReqBean {
|
||||
|
||||
public String orderNo;
|
||||
public String phone;
|
||||
|
||||
public TaxiCheckPhoneUpdateOrderReqBean(String orderNo, String phone) {
|
||||
this.orderNo = orderNo;
|
||||
this.phone = phone;
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,6 @@ import com.mogo.eagle.core.data.BaseData;
|
||||
*
|
||||
* 查询订单返回数据结构
|
||||
*/
|
||||
public class TaxiCheckPhoneBaseRespBean extends BaseData {
|
||||
public class TaxiDataBaseRespBean extends BaseData {
|
||||
public Object data;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.mogo.och.taxi.bean;
|
||||
|
||||
/**
|
||||
* Created by pangfan on 2021/8/19
|
||||
* 司机端准备好或者乘客已验证上车请求参数
|
||||
*/
|
||||
public class TaxiOrPassengerReadyReqBean {
|
||||
|
||||
public String orderNo;
|
||||
public String sn;
|
||||
public TaxiOrPassengerReadyReqBean.Result loc;
|
||||
|
||||
public static class Result {
|
||||
public Double lat;
|
||||
public Double lon;
|
||||
}
|
||||
|
||||
public TaxiOrPassengerReadyReqBean(String sn, String orderNo, TaxiOrPassengerReadyReqBean.Result point) {
|
||||
this.sn = sn;
|
||||
this.orderNo = orderNo;
|
||||
this.loc = point;
|
||||
}
|
||||
}
|
||||
@@ -45,4 +45,7 @@ public interface ITaxiOrderStatusCallback {
|
||||
|
||||
// 未抢到预约单
|
||||
void onGrabOrderFailed(OrderQueryRespBean.Result order);
|
||||
|
||||
// 司机已确认开启自动驾驶环境
|
||||
void onDriverHasCheckedPilotCondition(boolean isBoarded);
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@ import com.amap.api.maps.model.LatLng;
|
||||
import com.elegant.network.utils.GsonUtil;
|
||||
import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager;
|
||||
import com.mogo.cloud.commons.utils.CoordinateUtils;
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClientConfig;
|
||||
import com.mogo.commons.debug.DebugConfig;
|
||||
import com.mogo.eagle.core.data.BaseData;
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters;
|
||||
@@ -31,7 +30,6 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListen
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.Logger;
|
||||
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr;
|
||||
import com.mogo.eagle.core.utilcode.mogo.toast.TipToast;
|
||||
import com.mogo.eagle.core.utilcode.util.NetworkUtils;
|
||||
import com.mogo.eagle.core.utilcode.util.ToastUtils;
|
||||
import com.mogo.map.navi.IMogoCarLocationChangedListener2;
|
||||
@@ -50,7 +48,8 @@ import com.mogo.och.taxi.bean.OrdersInServiceQueryRespBean;
|
||||
import com.mogo.och.taxi.bean.OrdersListQueryRespBean;
|
||||
import com.mogo.och.taxi.bean.OrdersNewBookingQueryRespBean;
|
||||
import com.mogo.och.taxi.bean.QueryOrderRouteResp;
|
||||
import com.mogo.och.taxi.bean.TaxiCheckPhoneBaseRespBean;
|
||||
import com.mogo.och.taxi.bean.TaxiDataBaseRespBean;
|
||||
import com.mogo.och.taxi.bean.TaxiOrPassengerReadyReqBean;
|
||||
import com.mogo.och.taxi.callback.ITaxiADASStatusCallback;
|
||||
import com.mogo.och.taxi.callback.ITaxiCarStatusCallback;
|
||||
import com.mogo.och.taxi.callback.ITaxiControllerStatusCallback;
|
||||
@@ -77,11 +76,9 @@ import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.exceptions.UndeliverableException;
|
||||
import io.reactivex.functions.Consumer;
|
||||
import io.reactivex.plugins.RxJavaPlugins;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
import mogo.telematics.pad.MessagePad;
|
||||
import mogo_msg.MogoReportMsg;
|
||||
|
||||
@@ -183,12 +180,12 @@ public class TaxiModel {
|
||||
Thread.currentThread().getUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), e);
|
||||
return;
|
||||
}
|
||||
CallerLogger.INSTANCE.d(M_TAXI + TAG,"Undeliverable exception");
|
||||
CallerLogger.INSTANCE.d(M_TAXI + TAG, "Undeliverable exception");
|
||||
}
|
||||
});
|
||||
|
||||
if (NetworkUtils.isConnected(mContext)) {
|
||||
// startOrStopOrderLoop(mOCHCarStatus == 1);
|
||||
queryAutopilotStatus();
|
||||
queryCarStatus();
|
||||
}
|
||||
}
|
||||
@@ -267,13 +264,13 @@ public class TaxiModel {
|
||||
CallerLogger.INSTANCE.d(M_TAXI + TAG, "changeCarStatus:" + mOCHCarStatus);
|
||||
startOrStopOrderLoop(mOCHCarStatus == 1);
|
||||
String role = "";
|
||||
if (TaxiDriverRoleEnum.DEMO.getCode() == data.data.purpose){
|
||||
if (TaxiDriverRoleEnum.DEMO.getCode() == data.data.purpose) {
|
||||
role = TaxiConst.DEMO_USER;
|
||||
}else if (TaxiDriverRoleEnum.TEST.getCode() == data.data.purpose){
|
||||
} else if (TaxiDriverRoleEnum.TEST.getCode() == data.data.purpose) {
|
||||
role = TaxiConst.TEST_USER;
|
||||
}
|
||||
if (mCarStatusCallback != null) {
|
||||
mCarStatusCallback.onCarStatusChanged(mOCHCarStatus == 1 , role);
|
||||
mCarStatusCallback.onCarStatusChanged(mOCHCarStatus == 1, role);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -283,7 +280,7 @@ public class TaxiModel {
|
||||
public void onError() {
|
||||
if (!NetworkUtils.isConnected(mContext)) {
|
||||
ToastUtils.showShort(mContext.getString(R.string.network_error_tip));
|
||||
}else {
|
||||
} else {
|
||||
ToastUtils.showShort(mContext.getString(R.string.request_error_tip));
|
||||
}
|
||||
// queryCarStatus();
|
||||
@@ -318,7 +315,7 @@ public class TaxiModel {
|
||||
public void onError() {
|
||||
if (!NetworkUtils.isConnected(mContext)) {
|
||||
ToastUtils.showShort(mContext.getString(R.string.network_error_tip));
|
||||
}else {
|
||||
} else {
|
||||
ToastUtils.showShort(mContext.getString(R.string.request_error_tip));
|
||||
}
|
||||
}
|
||||
@@ -496,7 +493,7 @@ public class TaxiModel {
|
||||
public void onError() {
|
||||
if (!NetworkUtils.isConnected(mContext)) {
|
||||
ToastUtils.showShort(mContext.getString(R.string.network_error_tip));
|
||||
}else {
|
||||
} else {
|
||||
ToastUtils.showShort(mContext.getString(R.string.request_error_tip));
|
||||
}
|
||||
}
|
||||
@@ -525,7 +522,7 @@ public class TaxiModel {
|
||||
public void onError() {
|
||||
if (!NetworkUtils.isConnected(mContext)) {
|
||||
ToastUtils.showShort(mContext.getString(R.string.network_error_tip));
|
||||
}else {
|
||||
} else {
|
||||
ToastUtils.showShort(mContext.getString(R.string.request_error_tip));
|
||||
}
|
||||
}
|
||||
@@ -579,7 +576,7 @@ public class TaxiModel {
|
||||
public void onError() {
|
||||
if (!NetworkUtils.isConnected(mContext)) {
|
||||
ToastUtils.showShort(mContext.getString(R.string.network_error_tip));
|
||||
}else {
|
||||
} else {
|
||||
ToastUtils.showShort(mContext.getString(R.string.request_error_tip));
|
||||
}
|
||||
}
|
||||
@@ -602,10 +599,10 @@ public class TaxiModel {
|
||||
@Override
|
||||
public void onSuccess(OrdersNewBookingQueryRespBean data) {
|
||||
if (data != null && data.code == 0
|
||||
&& data.data != null && data.data.orders !=null
|
||||
&& data.data != null && data.data.orders != null
|
||||
&& data.data.orders.size() > 0) {
|
||||
// 本地无新到单,且本次新到单id与上次收到的新单id不同时:显示本次新到单
|
||||
if (mNewBookingOrder == null ) {
|
||||
if (mNewBookingOrder == null) {
|
||||
for (String orderNo : data.data.orders) {
|
||||
if (!mPrevOrderNo.equals(orderNo)) {
|
||||
queryNewBookingContent(orderNo);
|
||||
@@ -673,7 +670,7 @@ public class TaxiModel {
|
||||
public void onError() {
|
||||
if (!NetworkUtils.isConnected(mContext)) {
|
||||
ToastUtils.showShort(mContext.getString(R.string.network_error_tip));
|
||||
}else {
|
||||
} else {
|
||||
ToastUtils.showShort(mContext.getString(R.string.request_error_tip));
|
||||
}
|
||||
}
|
||||
@@ -767,7 +764,7 @@ public class TaxiModel {
|
||||
public void onError() {
|
||||
if (!NetworkUtils.isConnected(mContext)) {
|
||||
ToastUtils.showShort(mContext.getString(R.string.network_error_tip));
|
||||
}else {
|
||||
} else {
|
||||
ToastUtils.showShort(mContext.getString(R.string.request_error_tip));
|
||||
}
|
||||
}
|
||||
@@ -779,6 +776,53 @@ public class TaxiModel {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 司机端确认可开始自动驾驶
|
||||
*/
|
||||
public void confirmAutopilotConditionByDriver() {
|
||||
if (mCurrentOCHOrder == null) return;
|
||||
TaxiOrPassengerReadyReqBean.Result result = new TaxiOrPassengerReadyReqBean.Result();
|
||||
result.lat = mLatitude;
|
||||
result.lon = mLongitude;
|
||||
TaxiServiceManager.getInstance().confirmAutopilotConditionByDriver(mContext,
|
||||
mCurrentOCHOrder.orderNo,
|
||||
result,
|
||||
new TaxiServiceCallback<TaxiDataBaseRespBean>(){
|
||||
|
||||
@Override
|
||||
public void onSuccess(TaxiDataBaseRespBean data) {
|
||||
updateAutopilotStatus(data.code == 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFail(int code, String msg) {
|
||||
updateAutopilotStatus(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void updateAutopilotStatus(boolean isBoarded){
|
||||
if (mOrderStatusCallback != null){
|
||||
mOrderStatusCallback.onDriverHasCheckedPilotCondition(isBoarded);
|
||||
}
|
||||
}
|
||||
|
||||
public void queryAutopilotStatus(){
|
||||
if (mCurrentOCHOrder == null) return;
|
||||
TaxiServiceManager.getInstance().queryAutopilotStatus(mContext, mCurrentOCHOrder.orderNo,
|
||||
new TaxiServiceCallback<TaxiDataBaseRespBean>() {
|
||||
@Override
|
||||
public void onSuccess(TaxiDataBaseRespBean data) {
|
||||
updateAutopilotStatus(data.code == 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFail(int code, String msg) {
|
||||
updateAutopilotStatus(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 取消当前新到预约单
|
||||
public void cancelNewBookingOrder() {
|
||||
mNewBookingOrder = null;
|
||||
@@ -837,6 +881,7 @@ public class TaxiModel {
|
||||
|
||||
/**
|
||||
* 以当前订单为基础,开启自动驾驶
|
||||
*
|
||||
* @param isRestart 开启自动驾驶
|
||||
*/
|
||||
@ChainLog(
|
||||
@@ -914,9 +959,6 @@ public class TaxiModel {
|
||||
}
|
||||
|
||||
CallerLogger.INSTANCE.i(M_TAXI + TAG, "judgeStartStation() distance = " + distance);
|
||||
// if (mOrderStatusCallback != null && distance >= 0) {
|
||||
// mOrderStatusCallback.onCurrentOrderDistToStartChanged((long) distance, 0);
|
||||
// }
|
||||
|
||||
if (distance > TaxiConst.ARRIVE_AT_START_STATION_DISTANCE) {
|
||||
distance = CoordinateUtils.calculateLineDistance(startLon, startLat,
|
||||
@@ -998,9 +1040,6 @@ public class TaxiModel {
|
||||
if (getCurOrderStatus() == TaxiOrderStatusEnum.OnTheWayToStart) {
|
||||
judgeStartStation(location);
|
||||
}
|
||||
// else if (getCurOrderStatus() == OrderStatusEnum.OnTheWayToEndStation) {
|
||||
// calculateTravelDistance(location);
|
||||
// }
|
||||
}
|
||||
mLongitude = location.getLongitude();
|
||||
mLatitude = location.getLatitude();
|
||||
@@ -1066,7 +1105,9 @@ public class TaxiModel {
|
||||
&& state != mPrevAPStatus) {
|
||||
// 当高频返回autopilot 2时,不重复调用订单状态变更
|
||||
mPrevAPStatus = state; // 每个状态单独赋值,解决无订单时已经是2的状态导致的新订单来时无法进入此逻辑更新状态
|
||||
updateOCHOrderStatus(TaxiOrderStatusEnum.OnTheWayToEnd);
|
||||
|
||||
// updateOCHOrderStatus(TaxiOrderStatusEnum.OnTheWayToEnd);
|
||||
startServicePilotDone();
|
||||
|
||||
TaxiAnalyticsManager.getInstance().triggerStartAutopilotEvent(false, true,
|
||||
mCurrentOCHOrder.startSiteAddr, mCurrentOCHOrder.endSiteAddr, mCurrentOCHOrder.orderNo);
|
||||
@@ -1138,7 +1179,7 @@ public class TaxiModel {
|
||||
|
||||
@Override
|
||||
public void onAutopilotRotting(MessagePad.GlobalPathResp routeList) {
|
||||
if (null != routeList && routeList.getWayPointsList().size() > 0){
|
||||
if (null != routeList && routeList.getWayPointsList().size() > 0) {
|
||||
updateOrderRoute(routeList.getWayPointsList());
|
||||
updateOrderRouteInfo(routeList.getWayPointsList());
|
||||
}
|
||||
@@ -1148,11 +1189,12 @@ public class TaxiModel {
|
||||
|
||||
/**
|
||||
* 上报订单全路径规划数据
|
||||
*
|
||||
* @param models
|
||||
*/
|
||||
public void updateOrderRoute(List<MessagePad.Location> models) {
|
||||
if (null == mCurrentOCHOrder) return;
|
||||
List<OrderRouteUpdateReqBean.Result> points = coordinateConverterWgsToGcjList(mContext,models);
|
||||
List<OrderRouteUpdateReqBean.Result> points = coordinateConverterWgsToGcjList(mContext, models);
|
||||
TaxiServiceManager.getInstance().updateOrderRoute(mContext, mCurrentOCHOrder.orderNo
|
||||
, points, new TaxiServiceCallback<BaseData>() {
|
||||
@Override
|
||||
@@ -1186,6 +1228,7 @@ public class TaxiModel {
|
||||
|
||||
/**
|
||||
* 计算全路径长度,以及实时更新剩余距离,剩余时间,预计时间
|
||||
*
|
||||
* @param models
|
||||
*/
|
||||
public void updateOrderRouteInfo(List<MessagePad.Location> models) {
|
||||
@@ -1194,14 +1237,14 @@ public class TaxiModel {
|
||||
Logger.d(M_TAXI + TAG, "--------计算出sumLength开始---------- ");
|
||||
|
||||
//转换成高德坐标系
|
||||
mRoutePoints = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjListCommon(mContext,models);
|
||||
mRoutePoints = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjListCommon(mContext, models);
|
||||
startDynamicCalculateRouteInfo();
|
||||
}
|
||||
|
||||
public void startDynamicCalculateRouteInfo(){
|
||||
Logger.d(M_TAXI + TAG, "--------mCurrentOCHOrder---------- "+mCurrentOCHOrder);
|
||||
public void startDynamicCalculateRouteInfo() {
|
||||
Logger.d(M_TAXI + TAG, "--------mCurrentOCHOrder---------- " + mCurrentOCHOrder);
|
||||
|
||||
if (mCurrentOCHOrder != null && mRoutePoints.size() == 0){//根据orderNo去查询
|
||||
if (mCurrentOCHOrder != null && mRoutePoints.size() == 0) {//根据orderNo去查询
|
||||
queryOrderRouteList(mCurrentOCHOrder.orderNo);
|
||||
}
|
||||
|
||||
@@ -1212,30 +1255,30 @@ public class TaxiModel {
|
||||
/**
|
||||
* 实时计算当前剩余里程和时间
|
||||
*/
|
||||
public void dynamicCalculateRouteInfo(){
|
||||
public void dynamicCalculateRouteInfo() {
|
||||
List<LatLng> lastPoints = CoordinateCalculateRouteUtil
|
||||
.getRemainPointListByCompare(mRoutePoints,mLongitude,mLatitude);
|
||||
.getRemainPointListByCompare(mRoutePoints, mLongitude, mLatitude);
|
||||
|
||||
float lastSumLength = 0;
|
||||
|
||||
if (lastPoints.size() == 1){ //只是最后一个点,计算当前位置和最后一个点的距离
|
||||
if (lastPoints.size() == 1) { //只是最后一个点,计算当前位置和最后一个点的距离
|
||||
lastSumLength = CoordinateUtils.calculateLineDistance(
|
||||
lastPoints.get(0).longitude, lastPoints.get(0).latitude,
|
||||
mLongitude, mLatitude);
|
||||
}else {
|
||||
} else {
|
||||
lastSumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(lastPoints);
|
||||
}
|
||||
|
||||
double lastTime = lastSumLength / TaxiConst.TAXI_AVERAGE_SPEED * 3.6 ; //秒
|
||||
double lastTime = lastSumLength / TaxiConst.TAXI_AVERAGE_SPEED * 3.6; //秒
|
||||
Logger.d(M_TAXI + "dynamicCalculateRouteInfo"
|
||||
, "---lastSumLength: "+lastSumLength+"----lastTime : "+lastTime);
|
||||
, "---lastSumLength: " + lastSumLength + "----lastTime : " + lastTime);
|
||||
|
||||
mCurrentOCHOrder.decreaseTravelDistance(lastSumLength);
|
||||
if (mOrderStatusCallback != null) {
|
||||
mOrderStatusCallback.onCurrentOrderDistToEndChanged((long) lastSumLength, (long) lastTime);
|
||||
}
|
||||
|
||||
reportOrderRemain((long)lastSumLength,(long)lastTime);
|
||||
reportOrderRemain((long) lastSumLength, (long) lastTime);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1268,6 +1311,7 @@ public class TaxiModel {
|
||||
|
||||
/**
|
||||
* 开始轮询计算剩余里程和时间
|
||||
*
|
||||
* @param isStart
|
||||
*/
|
||||
public void startOrStopCalculateRouteInfo(boolean isStart) {
|
||||
@@ -1282,6 +1326,7 @@ public class TaxiModel {
|
||||
|
||||
/**
|
||||
* 上报订单剩余里程和时间 单位:KM, M, 单位:分钟
|
||||
*
|
||||
* @param lastSumLength
|
||||
* @param duration
|
||||
*/
|
||||
@@ -1289,33 +1334,57 @@ public class TaxiModel {
|
||||
if (mCurrentOCHOrder == null) return;
|
||||
TaxiServiceManager.getInstance().reportOrderRemain(mContext, mCurrentOCHOrder.orderNo
|
||||
, lastSumLength, duration, new TaxiServiceCallback<BaseData>() {
|
||||
@Override
|
||||
public void onSuccess(BaseData data) {
|
||||
@Override
|
||||
public void onSuccess(BaseData data) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFail(int code, String msg) {
|
||||
@Override
|
||||
public void onFail(int code, String msg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 调试使用,没有乘客屏时可使用此按钮跳过乘客验证
|
||||
* 司机端可确认乘客已上车,调用后,后台将订单置为乘客已上车状态
|
||||
*/
|
||||
public void jumpPassengerCheckDone() {
|
||||
if (mCurrentOCHOrder == null
|
||||
|| mCurrentOCHOrder.orderStatus != TaxiOrderStatusEnum.ArriveAtStart.getCode()
|
||||
|| mCurrentOCHOrder.passengerPhone == null || mCurrentOCHOrder.passengerPhone.length() < 5) {
|
||||
ToastUtils.showShort("订单状态不匹配该操作或者手机号有误!");
|
||||
|| mCurrentOCHOrder.orderStatus != TaxiOrderStatusEnum.ArriveAtStart.getCode()) {
|
||||
ToastUtils.showShort("订单状态不匹配该操作或者订单为空!");
|
||||
return;
|
||||
}
|
||||
TaxiServiceManager.getInstance().checkPhoneAndUpdateOrderStatus(mContext
|
||||
, mCurrentOCHOrder.orderNo, mCurrentOCHOrder.passengerPhone.substring(mCurrentOCHOrder.passengerPhone.length() -4)
|
||||
, new TaxiServiceCallback<TaxiCheckPhoneBaseRespBean>() {
|
||||
TaxiOrPassengerReadyReqBean.Result result = new TaxiOrPassengerReadyReqBean.Result();
|
||||
result.lat = mLatitude;
|
||||
result.lon = mLongitude;
|
||||
TaxiServiceManager.getInstance().updatePassengerHasBoardedStatus(mContext
|
||||
, mCurrentOCHOrder.orderNo
|
||||
, result
|
||||
, new TaxiServiceCallback<TaxiDataBaseRespBean>() {
|
||||
@Override
|
||||
public void onSuccess(TaxiCheckPhoneBaseRespBean data) {
|
||||
public void onSuccess(TaxiDataBaseRespBean data) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFail(int code, String msg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void startServicePilotDone(){
|
||||
if (mCurrentOCHOrder == null) return;
|
||||
|
||||
TaxiOrPassengerReadyReqBean.Result result = new TaxiOrPassengerReadyReqBean.Result();
|
||||
result.lat = mLatitude;
|
||||
result.lon = mLongitude;
|
||||
TaxiServiceManager.getInstance().updatePassengerHasBoardedStatus(mContext
|
||||
, mCurrentOCHOrder.orderNo
|
||||
, result
|
||||
, new TaxiServiceCallback<TaxiDataBaseRespBean>() {
|
||||
@Override
|
||||
public void onSuccess(TaxiDataBaseRespBean data) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -19,8 +19,8 @@ import com.mogo.och.taxi.bean.OrdersListQueryReqBean;
|
||||
import com.mogo.och.taxi.bean.OrdersListQueryRespBean;
|
||||
import com.mogo.och.taxi.bean.OrdersNewBookingQueryRespBean;
|
||||
import com.mogo.och.taxi.bean.QueryOrderRouteResp;
|
||||
import com.mogo.och.taxi.bean.TaxiCheckPhoneBaseRespBean;
|
||||
import com.mogo.och.taxi.bean.TaxiCheckPhoneUpdateOrderReqBean;
|
||||
import com.mogo.och.taxi.bean.TaxiDataBaseRespBean;
|
||||
import com.mogo.och.taxi.bean.TaxiOrPassengerReadyReqBean;
|
||||
import com.mogo.och.taxi.bean.UpdateOrderDisAndTimeReqBean;
|
||||
|
||||
import io.reactivex.Observable;
|
||||
@@ -227,13 +227,48 @@ interface TaxiServiceApiNew {
|
||||
, @Header("ticket") String ticket, @Query("orderNo") String orderNo);
|
||||
|
||||
/**
|
||||
* 提交用户输入的手机后4位、并进行状态扭转 用于调试跳过乘客屏使用
|
||||
* 司机端跳过乘客验证,订单状态流转为乘客已上车
|
||||
* @param data
|
||||
* @return
|
||||
*/
|
||||
@Headers( {"Content-type:application/json;charset=UTF-8"} )
|
||||
@POST( "/autopilot-car-hailing/order/v2/vehicle/taxi/passenger/verification/phone" )
|
||||
Observable<TaxiCheckPhoneBaseRespBean> checkPhoneAndUpdateOrderStatus(@Header ("appId") String appId
|
||||
, @Header("ticket") String ticket, @Body TaxiCheckPhoneUpdateOrderReqBean data);
|
||||
@POST( "/autopilot-car-hailing/cab/flow/v1/driver/taxi/ready/passenger" )
|
||||
Observable<TaxiDataBaseRespBean> updatePassengerHasBoardedStatus(@Header ("appId") String appId
|
||||
, @Header("ticket") String ticket, @Body TaxiOrPassengerReadyReqBean data);
|
||||
|
||||
/**
|
||||
* 司机端确认可开启自动驾驶
|
||||
* @param appId
|
||||
* @param ticket
|
||||
* @param data
|
||||
* @return
|
||||
*/
|
||||
@Headers( {"Content-type:application/json;charset=UTF-8"} )
|
||||
@POST( "/autopilot-car-hailing/cab/flow/v1/driver/taxi/ready/pilot" )
|
||||
Observable<TaxiDataBaseRespBean> confirmAutopilotConditionByDriver(@Header ("appId") String appId
|
||||
, @Header("ticket") String ticket,@Body TaxiOrPassengerReadyReqBean data);
|
||||
|
||||
/**
|
||||
* 查询司机是否已确认可开启自动驾驶
|
||||
* @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<TaxiDataBaseRespBean> 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/startServicePilot" )
|
||||
Observable<TaxiDataBaseRespBean> startServicePilotDone(@Header ("appId") String appId
|
||||
, @Header("ticket") String ticket,@Body TaxiOrPassengerReadyReqBean data);
|
||||
}
|
||||
|
||||
@@ -29,8 +29,8 @@ import com.mogo.och.taxi.bean.OrdersListQueryReqBean;
|
||||
import com.mogo.och.taxi.bean.OrdersListQueryRespBean;
|
||||
import com.mogo.och.taxi.bean.OrdersNewBookingQueryRespBean;
|
||||
import com.mogo.och.taxi.bean.QueryOrderRouteResp;
|
||||
import com.mogo.och.taxi.bean.TaxiCheckPhoneBaseRespBean;
|
||||
import com.mogo.och.taxi.bean.TaxiCheckPhoneUpdateOrderReqBean;
|
||||
import com.mogo.och.taxi.bean.TaxiDataBaseRespBean;
|
||||
import com.mogo.och.taxi.bean.TaxiOrPassengerReadyReqBean;
|
||||
import com.mogo.och.taxi.bean.UpdateOrderDisAndTimeReqBean;
|
||||
import com.mogo.och.taxi.constant.TaxiConst;
|
||||
|
||||
@@ -347,16 +347,53 @@ public class TaxiServiceManager {
|
||||
.subscribe(getSubscribeImpl(context,callback,"queryOrderRoute"));
|
||||
}
|
||||
|
||||
public void checkPhoneAndUpdateOrderStatus(Context context, String orderNo,String phone
|
||||
,TaxiServiceCallback<TaxiCheckPhoneBaseRespBean> callback){
|
||||
|
||||
mOCHTaxiServiceApi.checkPhoneAndUpdateOrderStatus(
|
||||
public void confirmAutopilotConditionByDriver(Context context, String orderNo
|
||||
, TaxiOrPassengerReadyReqBean.Result loc
|
||||
, TaxiServiceCallback<TaxiDataBaseRespBean> callback){
|
||||
mOCHTaxiServiceApi.confirmAutopilotConditionByDriver(
|
||||
MoGoAiCloudClientConfig.getInstance().getServiceAppId()
|
||||
,MoGoAiCloudClientConfig.getInstance().getToken()
|
||||
,new TaxiCheckPhoneUpdateOrderReqBean(orderNo,phone))
|
||||
,new TaxiOrPassengerReadyReqBean(MoGoAiCloudClientConfig.getInstance().getSn()
|
||||
,orderNo,loc))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(getSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus"));
|
||||
.subscribe(getSubscribeImpl(context,callback,"confirmAutopilotConditionByDriver"));
|
||||
}
|
||||
|
||||
public void queryAutopilotStatus(Context context, String orderNo,
|
||||
TaxiServiceCallback<TaxiDataBaseRespBean> callback){
|
||||
mOCHTaxiServiceApi.queryPilotStatus(MoGoAiCloudClientConfig.getInstance().getServiceAppId()
|
||||
,MoGoAiCloudClientConfig.getInstance().getToken()
|
||||
,orderNo)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(getSubscribeImpl(context,callback,"queryAutopilotStatus"));
|
||||
}
|
||||
|
||||
public void updatePassengerHasBoardedStatus(Context context, String orderNo
|
||||
, TaxiOrPassengerReadyReqBean.Result loc
|
||||
, TaxiServiceCallback<TaxiDataBaseRespBean> callback){
|
||||
|
||||
mOCHTaxiServiceApi.updatePassengerHasBoardedStatus(
|
||||
MoGoAiCloudClientConfig.getInstance().getServiceAppId()
|
||||
,MoGoAiCloudClientConfig.getInstance().getToken()
|
||||
,new TaxiOrPassengerReadyReqBean(MoGoAiCloudClientConfig.getInstance().getSn()
|
||||
,orderNo,loc))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(getSubscribeImpl(context, callback, "updatePassengerHasBoardedStatus"));
|
||||
}
|
||||
|
||||
public void startServicePilotDone(Context context, String orderNo
|
||||
, TaxiOrPassengerReadyReqBean.Result loc
|
||||
, TaxiServiceCallback<TaxiDataBaseRespBean> callback){
|
||||
mOCHTaxiServiceApi.startServicePilotDone(MoGoAiCloudClientConfig.getInstance().getServiceAppId()
|
||||
,MoGoAiCloudClientConfig.getInstance().getToken()
|
||||
,new TaxiOrPassengerReadyReqBean(MoGoAiCloudClientConfig.getInstance().getSn()
|
||||
,orderNo,loc))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(getSubscribeImpl(context, callback, "startServicePilotDone"));
|
||||
}
|
||||
|
||||
private <T extends BaseData> SubscribeImpl getSubscribeImpl(
|
||||
|
||||
@@ -65,7 +65,6 @@ public class TaxiPresenter extends Presenter<TaxiFragment> implements ITaxiADASS
|
||||
TaxiModel.getInstance().setCarStatusCallback(this);
|
||||
TaxiModel.getInstance().setControllerStatusCallback(this);
|
||||
TaxiModel.getInstance().setOrderStatusCallback(this);
|
||||
// TaxiModel.getInstance().setMoGoAutopilotPlanningListener(this);
|
||||
}
|
||||
|
||||
private void releaseListeners() {
|
||||
@@ -73,7 +72,6 @@ public class TaxiPresenter extends Presenter<TaxiFragment> implements ITaxiADASS
|
||||
TaxiModel.getInstance().setCarStatusCallback(null);
|
||||
TaxiModel.getInstance().setControllerStatusCallback(null);
|
||||
TaxiModel.getInstance().setOrderStatusCallback(null);
|
||||
// TaxiModel.getInstance().setMoGoAutopilotPlanningListener(null);
|
||||
}
|
||||
|
||||
private void runOnUIThread( Runnable executor ) {
|
||||
@@ -102,6 +100,13 @@ public class TaxiPresenter extends Presenter<TaxiFragment> implements ITaxiADASS
|
||||
TaxiModel.getInstance().jumpPassengerCheckDone();
|
||||
}
|
||||
|
||||
/**
|
||||
* 司机确认车辆环境可开启自动驾驶
|
||||
*/
|
||||
public void confirmAutopilotConditionByDriver() {
|
||||
TaxiModel.getInstance().confirmAutopilotConditionByDriver();
|
||||
}
|
||||
|
||||
// 更新出车/收车状态
|
||||
public void updateCarStatus() {
|
||||
TaxiModel.getInstance().updateCarStatus();
|
||||
@@ -260,6 +265,11 @@ public class TaxiPresenter extends Presenter<TaxiFragment> implements ITaxiADASS
|
||||
runOnUIThread(() -> mView.onGrabOrderFailed(order));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDriverHasCheckedPilotCondition(boolean isBoarded) {
|
||||
runOnUIThread(() -> mView.onPassengerBoardedStatus(isBoarded));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVRModeChanged(boolean isVRMode) {
|
||||
runOnUIThread(() -> mView.switchVRFlatMode(isVRMode));
|
||||
@@ -274,8 +284,4 @@ public class TaxiPresenter extends Presenter<TaxiFragment> implements ITaxiADASS
|
||||
});
|
||||
}
|
||||
}
|
||||
// @Override
|
||||
// public void routeResult(List<AutopilotRouteInfo.RouteModels> models) {
|
||||
// if (models != null && models.size() > 0) mView.routeResult(models);
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -92,6 +92,7 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
|
||||
groupTestPanel = findViewById(R.id.groupTestPanel);
|
||||
ctvAutopilotStatus = findViewById(R.id.module_mogo_och_autopilot_status);
|
||||
ctvAutopilotStatus.setBackground(getResources().getDrawable(R.drawable.taxi_autopilot_bg_selector));
|
||||
ctvAutopilotStatus.setTag(false);
|
||||
mAutopilotImage = findViewById(R.id.module_och_autopilot_iv);
|
||||
mAutopilotTv = findViewById(R.id.module_och_autopilot_tv);
|
||||
flStationPanelContainer = findViewById(R.id.module_mogo_och_station_panel_container);
|
||||
@@ -155,18 +156,13 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
|
||||
|
||||
// mBadcaseBtn的visible显示逻辑在showBadcaseEntrance内处理
|
||||
mBadcaseBtn = findViewById(R.id.module_och_taxi_badcase_iv);
|
||||
// CallerHmiManager.INSTANCE.registerBadCaseCallback(
|
||||
// () -> { // onShow()
|
||||
// return mBadcaseBtn; },
|
||||
// () -> { // onHide()
|
||||
// return null; });
|
||||
|
||||
if (mBadcaseBtn != null) {
|
||||
CallerDevaToolsManager.INSTANCE.initBadCase(mBadcaseBtn, null, null);
|
||||
if (!HmiBuildConfig.isShowBadCaseView) {
|
||||
CallerAutopilotRecordListenerManager.INSTANCE.addListener(TAG, this);
|
||||
}
|
||||
}
|
||||
|
||||
//设置升级小红点提示 默认隐藏
|
||||
mUpgradeTipIv = findViewById(R.id.module_och_taxi_upgrade_red_tip);
|
||||
CallerHmiManager.INSTANCE.registerUpgradeTipsCallback(() -> mUpgradeTipIv);
|
||||
@@ -176,14 +172,14 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
|
||||
@Override
|
||||
public void onClickImpl(View v) {
|
||||
// 如果能自动驾驶,就自动驾驶,不能就提示
|
||||
if (CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() !=
|
||||
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) {
|
||||
restartAutopilot();
|
||||
}else {
|
||||
if (CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() ==
|
||||
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE){
|
||||
ToastUtils.showShort(getResources().getString(R.string.module_och_taxi_auto_disable_tip));
|
||||
}else if (!(boolean)ctvAutopilotStatus.getTag()){
|
||||
ToastUtils.showShort(getResources().getString(R.string.module_och_taxi_auto_disable_tip1));
|
||||
}else {
|
||||
restartAutopilot();
|
||||
}
|
||||
// TODO: 2021/11/27 通过开启结果更新ui
|
||||
// onAutopilotStatusChanged(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -301,6 +297,10 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
|
||||
});
|
||||
}
|
||||
|
||||
public void onPassengerBoardedStatus(boolean isBoarded){
|
||||
ctvAutopilotStatus.setTag(isBoarded);
|
||||
}
|
||||
|
||||
private AnimationDrawable animationDrawable;
|
||||
|
||||
public void AutopilotStatusAnimchanged(int status) {
|
||||
@@ -418,25 +418,6 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
|
||||
},TIMER_START_AUTOPILOT_INTERVAL);
|
||||
}
|
||||
|
||||
/**
|
||||
* 隐藏【自动驾驶】按钮
|
||||
*/
|
||||
public void hideAutopilotBiz() {
|
||||
getActivity().runOnUiThread(() -> {
|
||||
// ctvAutopilotStatus.setVisibility(View.GONE);
|
||||
// slidePanelView.setVisibility(View.GONE);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 展示【自动驾驶】按钮
|
||||
*/
|
||||
public void showAutopilotBiz() {
|
||||
getActivity().runOnUiThread(() -> {
|
||||
ctvAutopilotStatus.setVisibility(View.VISIBLE);
|
||||
});
|
||||
}
|
||||
|
||||
public void hidPanel() {
|
||||
getActivity().runOnUiThread(() -> {
|
||||
flStationPanelContainer.setVisibility(View.GONE);
|
||||
@@ -484,16 +465,6 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
|
||||
public void onMapVisualAngleChanged(VisualAngleMode visualAngleMode) {
|
||||
//todo ui 切换
|
||||
}
|
||||
// private void hideHMI() {
|
||||
// // 控制 脉速表 显示状态
|
||||
// CallerHmiManager.INSTANCE.setSpeedChartViewVisibility(View.GONE);
|
||||
// // 控制 自动驾驶按钮 显示状态
|
||||
// CallerHmiManager.INSTANCE.setAutopilotStatusViewVisibility(View.GONE);
|
||||
// // 控制 切换视角按钮 显示状态
|
||||
// CallerHmiManager.INSTANCE.setPerspectiveSwitchViewVisibility(View.GONE);
|
||||
// // 控制 车辆检检测按钮 示状态
|
||||
// CallerHmiManager.INSTANCE.setCheckStatusViewVisibility(View.GONE);
|
||||
// }
|
||||
|
||||
protected void showNaviToStartStationFragment(boolean isShow) {
|
||||
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
|
||||
|
||||
@@ -60,6 +60,7 @@ public class TaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implement
|
||||
private double mOrderStartStationLng = 0;
|
||||
private volatile int mTtsLessThan200Tip = 0;//离终点200米提示播报
|
||||
private OrderQueryRespBean.Result mCurrentOrder = null;
|
||||
private boolean isFirstStartAutopilotDone = true;
|
||||
|
||||
public static TaxiBeingServerdOrdersFragment newInstance(Activity activity, TaxiFragment taxiFragment) {
|
||||
mActivity = activity;
|
||||
@@ -331,8 +332,9 @@ public class TaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implement
|
||||
dis = NumberFormatUtil.formatLong((double)meters / 1000);
|
||||
}
|
||||
}
|
||||
int min = (int)Math.ceil((double)timeInSecond/ 60f);
|
||||
String strHtml2 = "<font color=\"#CAD6FF\">里程 </font>" + "<b><font color=\"#FFFFFF\">" + dis + "</font></b>" + "<font color=\"#CAD6FF\"> "+disUnit+"</font>"
|
||||
+ "<font color=\"#CAD6FF\">,剩余 </font>" + "<b><font color=\"#FFFFFF\">" + (int)Math.ceil((double)timeInSecond/ 60f) + "</font></b>" + "<font color=\"#CAD6FF\"> 分钟</font>";
|
||||
+ "<font color=\"#CAD6FF\">,剩余 </font>" + "<b><font color=\"#FFFFFF\">" + min + "</font></b>" + "<font color=\"#CAD6FF\"> 分钟</font>";
|
||||
|
||||
if (mContentModule3 != null && mContentModule3.getVisibility() == View.VISIBLE) { //前往上车点
|
||||
|
||||
@@ -343,6 +345,12 @@ public class TaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implement
|
||||
speekVoice200mTipsOnce();
|
||||
}
|
||||
mDistanceAndTime2.setText(Html.fromHtml(strHtml2));
|
||||
if (isFirstStartAutopilotDone){
|
||||
showNotice(String.format(getResources()
|
||||
.getString(R.string.module_och_taxi_order_server_start_auto_tip),
|
||||
dis,min));
|
||||
isFirstStartAutopilotDone = false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -381,16 +389,13 @@ public class TaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implement
|
||||
|
||||
private void startOrEndService() {
|
||||
if (mCurrentOrder == null) return;
|
||||
if (TaxiOrderStatusEnum.ArriveAtEnd.getCode() == mCurrentOrder.orderStatus) {//点击了完成服务,结束订单并更新订单信息
|
||||
if (TaxiOrderStatusEnum.ArriveAtStart.getCode() == mCurrentOrder.orderStatus){ //到达乘客上车点,司机可跳过乘客屏认证
|
||||
mTaxiFragment.jumpPassengerCheckDone();
|
||||
}else if (TaxiOrderStatusEnum.UserArriveAtStart.getCode() == mCurrentOrder.orderStatus) {//点击此按钮,说明车辆已准备好开始自动驾驶
|
||||
mTaxiFragment.confirmAutopilotConditionByDriver();
|
||||
}else if (TaxiOrderStatusEnum.ArriveAtEnd.getCode() == mCurrentOrder.orderStatus) {//点击了完成服务,结束订单并更新订单信息
|
||||
mTaxiFragment.completeOrderService(TaxiOrderStatusEnum.JourneyCompleted);
|
||||
showNotice(getResources().getString(R.string.module_och_taxi_order_server_completed_tip));
|
||||
return;
|
||||
} else if (TaxiOrderStatusEnum.UserArriveAtStart.getCode() == mCurrentOrder.orderStatus) {//点击服务,开启自动驾驶
|
||||
mTaxiFragment.startAutoPilot();
|
||||
showNotice(getResources().getString(R.string.module_och_taxi_order_server_start_auto_tip));
|
||||
return;
|
||||
}else if (TaxiOrderStatusEnum.ArriveAtStart.getCode() == mCurrentOrder.orderStatus){ //到达乘客上车点,司机可跳过乘客屏认证
|
||||
mTaxiFragment.jumpPassengerCheckDone();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -412,6 +417,7 @@ public class TaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implement
|
||||
mOrderCancel.setVisibility(View.VISIBLE);
|
||||
showNotice(mActivity.getString(R.string.module_och_taxi_new_order));
|
||||
mTtsLessThan200Tip = 0;
|
||||
isFirstStartAutopilotDone = true;
|
||||
startNaviToStartStation(false, mOrderStartStationLat, mOrderStartStationLng);
|
||||
showOrHideNavi(true);
|
||||
setOrRemoveMapMaker(true, TaxiConst.TAXI_START_MAP_MAKER,order.startSitePoint,R.raw.star_marker);
|
||||
@@ -420,6 +426,7 @@ public class TaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implement
|
||||
case Cancel:
|
||||
mCurrentOrder = null;
|
||||
mTtsLessThan200Tip = 0;
|
||||
isFirstStartAutopilotDone = true;
|
||||
mOrderCancel.setVisibility(View.VISIBLE);
|
||||
showNotice(mActivity.getString(R.string.module_och_taxi_order_cancel));
|
||||
showOrHideNavi(false);
|
||||
@@ -430,6 +437,7 @@ public class TaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implement
|
||||
case ArriveAtStart:
|
||||
case UserArriveAtStart:
|
||||
mTtsLessThan200Tip = 0;
|
||||
isFirstStartAutopilotDone = true;
|
||||
mOrderCancel.setVisibility(View.VISIBLE);
|
||||
if (TaxiOrderStatusEnum.UserArriveAtStart.getCode() == ochStatus.getCode()){
|
||||
showNotice(mActivity.getString(R.string.module_och_taxi_order_status_ph_text_check_success));
|
||||
@@ -458,6 +466,7 @@ public class TaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implement
|
||||
case JourneyCompleted:
|
||||
mCurrentOrder = null;
|
||||
mTtsLessThan200Tip = 0;
|
||||
isFirstStartAutopilotDone = true;
|
||||
mOrderCancel.setVisibility(View.GONE);
|
||||
showNotice("感谢您使用蘑菇智行,再见~");
|
||||
showOrHideNavi(false);
|
||||
|
||||
@@ -59,8 +59,10 @@ public class TaxiFragment extends BaseTaxiTabFragment<TaxiFragment, TaxiPresente
|
||||
|
||||
@Override
|
||||
public void restartAutopilot() {
|
||||
// 在自动驾驶中,才会有重新开启自动驾驶的操作
|
||||
if (mPresenter.getCurOrderStatus() == TaxiOrderStatusEnum.OnTheWayToEnd && !isStarting) {
|
||||
// 在自动驾驶中,或者自己确认车辆环境可开启自动驾驶 则可点击
|
||||
if ((mPresenter.getCurOrderStatus() == TaxiOrderStatusEnum.OnTheWayToEnd ||
|
||||
mPresenter.getCurOrderStatus() == TaxiOrderStatusEnum.UserArriveAtStart)
|
||||
&& !isStarting) {
|
||||
CallerLogger.INSTANCE.d(M_TAXI + TAG, "restartAutopilot");
|
||||
mPresenter.startAutoPilot(true);
|
||||
startOrStopLoadingAnim(true);
|
||||
@@ -225,6 +227,10 @@ public class TaxiFragment extends BaseTaxiTabFragment<TaxiFragment, TaxiPresente
|
||||
}
|
||||
}
|
||||
|
||||
public void confirmAutopilotConditionByDriver(){
|
||||
mPresenter.confirmAutopilotConditionByDriver();
|
||||
}
|
||||
|
||||
public void jumpPassengerCheckDone(){
|
||||
mPresenter.jumpPassengerCheckDone();
|
||||
}
|
||||
@@ -351,8 +357,11 @@ public class TaxiFragment extends BaseTaxiTabFragment<TaxiFragment, TaxiPresente
|
||||
findViewById(R.id.test_bar_to_end).setOnClickListener(v -> {
|
||||
TaxiModel.getInstance().setArriveAtEndStation();
|
||||
});
|
||||
findViewById(R.id.test_bar_on_the_way_to_end1).setOnClickListener(v -> {
|
||||
TaxiModel.getInstance().confirmAutopilotConditionByDriver();
|
||||
});
|
||||
findViewById(R.id.test_bar_on_the_way_to_end).setOnClickListener(v -> {
|
||||
showNotice("自动驾驶已启动,请系好安全带");
|
||||
// showNotice("自动驾驶已启动,请系好安全带");
|
||||
if (!isStarting){
|
||||
mPresenter.startAutoPilot(false);
|
||||
startOrStopLoadingAnim(true);
|
||||
@@ -382,5 +391,4 @@ public class TaxiFragment extends BaseTaxiTabFragment<TaxiFragment, TaxiPresente
|
||||
testBar.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -47,13 +47,21 @@
|
||||
android:onClick="testToStart"
|
||||
android:text="到达上车点"
|
||||
android:textSize="12sp" />
|
||||
<Button
|
||||
android:id="@+id/test_bar_on_the_way_to_end1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="12sp"
|
||||
android:onClick="testWayToEnd"
|
||||
android:text="确认可开启服务"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/test_bar_on_the_way_to_end"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="12sp"
|
||||
android:onClick="testWayToEnd"
|
||||
android:text="开始服务"/>
|
||||
android:text="开启自动驾驶按钮"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/test_bar_to_end"
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
<string name="module_och_taxi_order_arrive_end_200m_tip">即将到达目的地,请拿好随身物品,准备下车</string>
|
||||
<string name="module_och_taxi_order_auto_arrive_end_tip">您好,我们已到达目的地,本次体验结束。车辆停稳,请带好随身物品,谨防遗漏。感谢您的乘坐</string>
|
||||
<string name="module_och_taxi_auto_disable_tip">自动驾驶状态为0不可用</string>
|
||||
<string name="module_och_taxi_auto_disable_tip1">司机端未确认可以开启自动驾驶</string>
|
||||
|
||||
<string name="network_error_tip">网络异常,请稍后重试</string>
|
||||
<string name="request_error_tip">请求出现异常,请稍后重试</string>
|
||||
|
||||
Reference in New Issue
Block a user