diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoADASAutoPilotStatusChangedListener.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoADASAutoPilotStatusChangedListener.java new file mode 100644 index 0000000000..944f331d2c --- /dev/null +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoADASAutoPilotStatusChangedListener.java @@ -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 ); +} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java index 59715d5686..42859e80c4 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java @@ -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 ); } } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java index 8ad87aa483..c66b86c7ea 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java @@ -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" ); + } + } ); + } } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java index 62bd07a80a..4af734c67a 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java @@ -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 ); + } + } ); + } }