添加自动驾驶状态切换逻辑、异常状态处理

This commit is contained in:
wangcongtao
2021-01-26 19:14:08 +08:00
parent 366107226d
commit 85526c021c
4 changed files with 82 additions and 24 deletions

View File

@@ -0,0 +1,13 @@
package com.mogo.och.taxi;
public
/**
* @author congtaowang
* @since 2021/1/26
*
* adas 可自动驾驶状态切换逻辑
*/
interface IMogoADASAutoPilotStatusChangedListener {
void onAutoPilotStatusChanged( int status, String reason );
}

View File

@@ -463,8 +463,8 @@ class MogoOCHTaxiModel {
}
@Override
public void onStateChanged(int state, String reason) {
public void onStateChanged( int state, String reason ) {
OCHTaxiUiController.getInstance().onAutoPilotStatusChanged( state, reason );
}
}

View File

@@ -3,21 +3,27 @@ package com.mogo.och.taxi.ui;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.och.BaseOchFragment;
import com.mogo.och.taxi.IMogoADASAutoPilotStatusChangedListener;
import com.mogo.och.taxi.IMogoOCHTaxiArriveCallback;
import com.mogo.och.taxi.MogoOCHTaxiModel;
import com.mogo.och.taxi.OCHOrderStatus;
import com.mogo.och.taxi.OCHOrderStatusCallback;
import com.mogo.och.taxi.R;
import com.mogo.och.view.SlidePanelView;
import com.mogo.service.adas.IMogoAdasOCHCallback;
import com.mogo.service.statusmanager.IMogoStatusChangedListener;
import com.mogo.service.statusmanager.StatusDescriptor;
import com.mogo.utils.TipToast;
import com.mogo.utils.logger.Logger;
import java.util.UUID;
public
/**
* @author congtaowang
@@ -26,7 +32,9 @@ public
* 网约车-出租车UI
*/
class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > implements OCHTaxiView,
IMogoStatusChangedListener, IMogoOCHTaxiArriveCallback {
IMogoStatusChangedListener,
IMogoOCHTaxiArriveCallback,
IMogoADASAutoPilotStatusChangedListener {
public static final String TAG = "OCHTaxiFragment";
@@ -51,7 +59,7 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
@Override
public void restartAutopilot() {
// todo 重新开始自动驾驶
MogoOCHTaxiModel.getInstance().startAutoPilot();
}
@Override
@@ -80,6 +88,7 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
.getStatusManagerApi()
.registerStatusChangedListener( TAG, StatusDescriptor.VR_MODE, this );
OCHTaxiUiController.getInstance().setOCHTaxiArriveCallback( this );
OCHTaxiUiController.getInstance().setAutoPilotStatusChangedListener( this );
}
@NonNull
@@ -133,7 +142,11 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
mOrderStatus.setText( "已到达上车地点,等待乘客上车" );
if ( MogoOCHTaxiModel.getInstance().isUserArriveAtStartStation() ) {
Logger.d( TAG, "乘客已上车" );
slidePanelView.setVisibility( View.VISIBLE );
if ( MogoApisHandler.getInstance().getApis().getAdasControllerApi().getAutopilotStatus() == IMogoAdasOCHCallback.STATUS_AUTOPILOT_ENABLE ) {
slidePanelView.setVisibility( View.VISIBLE );
} else if ( MogoApisHandler.getInstance().getApis().getAdasControllerApi().getAutopilotStatus() == IMogoAdasOCHCallback.STATUS_AUTOPILOT_DISABLE ) {
slidePanelView.setVisibility( View.GONE );
}
slidePanelView.setText( getString( R.string.module_och_taxi_arrive_at_start_station ) );
}
} else if ( MogoOCHTaxiModel.getInstance().checkCurrentOCHOrder() ) {
@@ -200,6 +213,7 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
.getStatusManagerApi()
.unregisterStatusChangedListener( TAG, StatusDescriptor.VR_MODE, this );
OCHTaxiUiController.getInstance().setOCHTaxiArriveCallback( null );
OCHTaxiUiController.getInstance().setAutoPilotStatusChangedListener( null );
}
@Override
@@ -233,24 +247,41 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
} else if ( MogoOCHTaxiModel.getInstance().isUserArriveAtStartStation()
&& !MogoOCHTaxiModel.getInstance().isOnTheWay2EndStation() ) {
MogoOCHTaxiModel.getInstance().startAutoPilot();
MogoOCHTaxiModel.getInstance().setOnTheWay2EndStation( true );
MogoOCHTaxiModel.getInstance().updateOCHOrderStatus( OCHOrderStatus.OnTheWayToEndStation, new OCHOrderStatusCallback() {
@Override
public void onSuccess( Object data ) {
Logger.d( TAG, "更新状态成功" );
}
@Override
public void onFail() {
Logger.d( TAG, "更新状态失败" );
}
@Override
public void onError() {
Logger.d( TAG, "更新状态失败2" );
}
} );
}
}
@Override
public void onAutoPilotStatusChanged( int status, String reason ) {
Logger.d( TAG, "status = %s, reason = %s", status, reason );
TipToast.shortTip( reason );
if ( status == IMogoAdasOCHCallback.STATUS_AUTOPILOT_RUNNING ) {
resetOCHTaxiOrderAutopilotStatus();
} else {
initOrderStatus();
}
}
/**
* 收到自动驾驶通知的成功状态之后,设置本地状态及服务端状态
*/
private void resetOCHTaxiOrderAutopilotStatus() {
MogoOCHTaxiModel.getInstance().setOnTheWay2EndStation( true );
MogoOCHTaxiModel.getInstance().updateOCHOrderStatus( OCHOrderStatus.OnTheWayToEndStation, new OCHOrderStatusCallback() {
@Override
public void onSuccess( Object data ) {
Logger.d( TAG, "更新状态成功" );
}
@Override
public void onFail() {
Logger.d( TAG, "更新状态失败" );
}
@Override
public void onError() {
Logger.d( TAG, "更新状态失败2" );
}
} );
}
}

View File

@@ -7,6 +7,7 @@ import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import com.mogo.och.taxi.IMogoADASAutoPilotStatusChangedListener;
import com.mogo.och.taxi.IMogoOCHTaxiArriveCallback;
import com.mogo.och.taxi.MogoOCHTaxiModel;
import com.mogo.utils.UiThreadHandler;
@@ -19,7 +20,7 @@ public
*
* 控制UI显示
*/
class OCHTaxiUiController implements IMogoOCHTaxiArriveCallback {
class OCHTaxiUiController implements IMogoOCHTaxiArriveCallback, IMogoADASAutoPilotStatusChangedListener {
private static final String TAG = "OCHTaxiUiController";
@@ -28,6 +29,7 @@ class OCHTaxiUiController implements IMogoOCHTaxiArriveCallback {
private int mContainerId;
private IMogoOCHTaxiArriveCallback mOCHTaxiArriveCallback;
private IMogoADASAutoPilotStatusChangedListener mAutoPilotStatusChangedListener;
private OCHTaxiUiController() {
}
@@ -94,6 +96,10 @@ class OCHTaxiUiController implements IMogoOCHTaxiArriveCallback {
this.mOCHTaxiArriveCallback = OCHTaxiArriveCallback;
}
public void setAutoPilotStatusChangedListener( IMogoADASAutoPilotStatusChangedListener autoPilotStatusChangedListener ) {
this.mAutoPilotStatusChangedListener = autoPilotStatusChangedListener;
}
@Override
public void onTheWay2StartStation() {
@@ -146,4 +152,12 @@ class OCHTaxiUiController implements IMogoOCHTaxiArriveCallback {
}
}
@Override
public void onAutoPilotStatusChanged( int status, String reason ) {
runOnUIThread( () -> {
if ( mAutoPilotStatusChangedListener != null ) {
mAutoPilotStatusChangedListener.onAutoPilotStatusChanged( status, reason );
}
} );
}
}