Merge remote-tracking branch 'origin/dev2' into dev2

This commit is contained in:
tongchenfei
2021-01-26 20:32:56 +08:00
11 changed files with 199 additions and 67 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

@@ -6,6 +6,7 @@ import android.text.TextUtils;
import com.mogo.commons.data.BaseData;
import com.mogo.commons.network.SubscribeImpl;
import com.mogo.commons.network.Utils;
import com.mogo.map.MogoLatLng;
import com.mogo.map.navi.IMogoCarLocationChangedListener2;
import com.mogo.module.common.MogoApisHandler;
@@ -463,8 +464,8 @@ class MogoOCHTaxiModel {
}
@Override
public void onStateChanged(int state, String reason) {
public void onStateChanged( int state, String reason ) {
OCHTaxiUiController.getInstance().onAutoPilotStatusChanged( state, reason );
}
}
@@ -480,7 +481,7 @@ class MogoOCHTaxiModel {
if ( mOCHTaxiServiceApi == null ) {
mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi().create( OCHTaxiServiceApi.class, HostConst.OCH_DOMAIN );
}
mOCHTaxiServiceApi.updateOrderStatus( new OCHTaxiOrderStatus( mCurrentOCHOrder.orderNo, orderStatus.getCode() ) )
mOCHTaxiServiceApi.updateOrderStatus( new OCHTaxiOrderStatus( Utils.getSn(), mCurrentOCHOrder.orderNo, orderStatus.getCode() ) )
.subscribeOn( Schedulers.io() )
.observeOn( AndroidSchedulers.mainThread() )
.subscribe( new SubscribeImpl< BaseData >( RequestOptions.create( mContext ) ) {
@@ -522,7 +523,7 @@ class MogoOCHTaxiModel {
if ( mOCHTaxiServiceApi == null ) {
mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi().create( OCHTaxiServiceApi.class, HostConst.OCH_DOMAIN );
}
mOCHTaxiServiceApi.queryOrder( new OCHTaxiOrderStatus( orderNo, OCHOrderStatus.None.getCode() ) )
mOCHTaxiServiceApi.queryOrder( new OCHTaxiOrderStatus( Utils.getSn(), orderNo, OCHOrderStatus.None.getCode() ) )
.subscribeOn( Schedulers.io() )
.observeOn( AndroidSchedulers.mainThread() )
.subscribe( new SubscribeImpl< OCHTaxiOrderResponse2 >( RequestOptions.create( mContext ) ) {

View File

@@ -29,6 +29,16 @@ class OCHTaxiOrderResponse implements Parcelable {
// 站点
public List< OCHTaxiStation > drivingRoutes;
/**
* @param distance
*/
public void decreaseTravelDistance( double distance ) {
travelDistance -= ( ( float ) distance / 1000f );
if ( travelDistance < 0 ) {
travelDistance = 0;
}
}
public static class OCHTaxiStation implements Parcelable {
public String siteId;
public String siteName;

View File

@@ -5,14 +5,19 @@ public
* @author congtaowang
* @since 2021/1/15
*
* 修改网约车-出租车订单状态的数据结构
* 修改/查询网约车-出租车订单状态的数据结构
*/
class OCHTaxiOrderStatus {
public String sn;// 不排除本地没有缓存订单号的情况
public String orderNo;
public int orderDispatchType;
public OCHTaxiOrderStatus( String orderNo, int orderDispatchType ) {
public OCHTaxiOrderStatus( String sn,
String orderNo,
int orderDispatchType ) {
this.sn = sn;
this.orderNo = orderNo;
this.orderDispatchType = orderDispatchType;
}

View File

@@ -1,21 +1,29 @@
package com.mogo.och.taxi.ui;
import android.location.Location;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.mogo.map.MogoLatLng;
import com.mogo.map.navi.IMogoCarLocationChangedListener2;
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.CoordinateUtils;
import com.mogo.utils.TipToast;
import com.mogo.utils.UiThreadHandler;
import com.mogo.utils.logger.Logger;
public
@@ -26,7 +34,10 @@ public
* 网约车-出租车UI
*/
class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > implements OCHTaxiView,
IMogoStatusChangedListener, IMogoOCHTaxiArriveCallback {
IMogoStatusChangedListener,
IMogoOCHTaxiArriveCallback,
IMogoADASAutoPilotStatusChangedListener,
IMogoCarLocationChangedListener2 {
public static final String TAG = "OCHTaxiFragment";
@@ -51,7 +62,7 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
@Override
public void restartAutopilot() {
// todo 重新开始自动驾驶
MogoOCHTaxiModel.getInstance().startAutoPilot();
}
@Override
@@ -63,7 +74,7 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
mDistance = findViewById( R.id.module_och_taxi_order_distance );
initListeners();
initOrderStatus();
updateOrderStatus();
if ( MogoApisHandler.getInstance()
.getApis()
.getStatusManagerApi()
@@ -80,6 +91,11 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
.getStatusManagerApi()
.registerStatusChangedListener( TAG, StatusDescriptor.VR_MODE, this );
OCHTaxiUiController.getInstance().setOCHTaxiArriveCallback( this );
OCHTaxiUiController.getInstance().setAutoPilotStatusChangedListener( this );
MogoApisHandler.getInstance()
.getApis()
.getRegisterCenterApi()
.registerCarLocationChangedListener( TAG, this );
}
@NonNull
@@ -113,12 +129,11 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
}
}
private void initOrderStatus() {
if ( MogoOCHTaxiModel.getInstance().checkCurrentOCHOrder() ) {
mStartStationName.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().startStation );
mEndStationName.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().endStation );
mDistance.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().travelDistance + " km" );
}
/**
* 初始化订单信息
*/
private void updateOrderStatus() {
updateOrderBaseStatusInfo();
if ( MogoOCHTaxiModel.getInstance().isArriveAtEndStation() ) {
Logger.d( TAG, "已经达到终点" );
slidePanelView.setVisibility( View.VISIBLE );
@@ -133,7 +148,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 {
slidePanelView.setVisibility( View.GONE );
}
slidePanelView.setText( getString( R.string.module_och_taxi_arrive_at_start_station ) );
}
} else if ( MogoOCHTaxiModel.getInstance().checkCurrentOCHOrder() ) {
@@ -143,23 +162,34 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
}
}
/**
* 更新订单基本信息
*/
private void updateOrderBaseStatusInfo() {
if ( MogoOCHTaxiModel.getInstance().checkCurrentOCHOrder() ) {
mStartStationName.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().startStation );
mEndStationName.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().endStation );
mDistance.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().travelDistance + " km" );
}
}
@Override
public void onArriveAtStartStation() {
Logger.d( TAG, "通知达到起点" );
initOrderStatus();
updateOrderStatus();
}
@Override
public void onTheWay2StartStation() {
Logger.d( TAG, "去往上车站点" );
initOrderStatus();
updateOrderStatus();
}
@Override
public void onArriveAtEndStation() {
Logger.d( TAG, "通知达到终点" );
onAutopilotStatusChanged( false );
initOrderStatus();
updateOrderStatus();
MogoOCHTaxiModel.getInstance().updateOCHOrderStatus( OCHOrderStatus.ArriveAtEndStation, new OCHOrderStatusCallback() {
@Override
public void onSuccess( Object data ) {
@@ -177,19 +207,23 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
Logger.d( TAG, "更新状态失败2" );
}
} );
MogoApisHandler.getInstance()
.getApis()
.getRegisterCenterApi()
.unregisterCarLocationChangedListener( TAG, this );
}
@Override
public void onTheWay2EndStation() {
Logger.d( TAG, "通知去往终点" );
onAutopilotStatusChanged( true );
initOrderStatus();
updateOrderStatus();
}
@Override
public void onUserArriveAtStartStation() {
Logger.d( TAG, "通知乘客已上车" );
initOrderStatus();
updateOrderStatus();
}
@Override
@@ -200,6 +234,11 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
.getStatusManagerApi()
.unregisterStatusChangedListener( TAG, StatusDescriptor.VR_MODE, this );
OCHTaxiUiController.getInstance().setOCHTaxiArriveCallback( null );
OCHTaxiUiController.getInstance().setAutoPilotStatusChangedListener( null );
MogoApisHandler.getInstance()
.getApis()
.getRegisterCenterApi()
.unregisterCarLocationChangedListener( TAG, this );
}
@Override
@@ -233,24 +272,77 @@ 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 onAutoPilotStatusChanged( int status, String reason ) {
Logger.d( TAG, "status = %s, reason = %s", status, reason );
if ( status == IMogoAdasOCHCallback.STATUS_AUTOPILOT_RUNNING ) {
resetOCHTaxiOrderAutopilotStatus();
} else {
TipToast.shortTip( reason );
updateOrderStatus();
}
}
/**
* 收到自动驾驶通知的成功状态之后,设置本地状态及服务端状态
*/
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" );
}
} );
@Override
public void onError() {
Logger.d( TAG, "更新状态失败2" );
}
} );
}
@Override
public void onCarLocationChanged( MogoLatLng latLng ) {
}
private Location mLocation;
@Override
public void onCarLocationChanged2( Location location ) {
OCHTaxiUiController.getInstance().runOnUIThread( () -> {
calculateTravelDistance( location );
} );
}
/**
* 根据位置信息计算当前剩余距离
*
* @param location
*/
private void calculateTravelDistance( Location location ) {
if ( location == null ) {
return;
}
if ( mLocation == null ) {
mLocation = location;
}
double distance = CoordinateUtils.calculateLineDistance(
location.getLongitude(), location.getLatitude(),
mLocation.getLongitude(), mLocation.getLatitude()
);
if ( MogoOCHTaxiModel.getInstance().checkCurrentOCHOrder() ) {
MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().decreaseTravelDistance( distance );
updateOrderBaseStatusInfo();
}
}
}

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,9 +96,17 @@ class OCHTaxiUiController implements IMogoOCHTaxiArriveCallback {
this.mOCHTaxiArriveCallback = OCHTaxiArriveCallback;
}
public void setAutoPilotStatusChangedListener( IMogoADASAutoPilotStatusChangedListener autoPilotStatusChangedListener ) {
this.mAutoPilotStatusChangedListener = autoPilotStatusChangedListener;
}
@Override
public void onTheWay2StartStation() {
runOnUIThread( () -> {
if ( mOCHTaxiArriveCallback != null ) {
mOCHTaxiArriveCallback.onTheWay2StartStation();
}
} );
}
@Override
@@ -135,7 +145,7 @@ class OCHTaxiUiController implements IMogoOCHTaxiArriveCallback {
} );
}
private void runOnUIThread( Runnable executor ) {
public void runOnUIThread( Runnable executor ) {
if ( executor == null ) {
return;
}
@@ -146,4 +156,12 @@ class OCHTaxiUiController implements IMogoOCHTaxiArriveCallback {
}
}
@Override
public void onAutoPilotStatusChanged( int status, String reason ) {
runOnUIThread( () -> {
if ( mAutoPilotStatusChangedListener != null ) {
mAutoPilotStatusChangedListener.onAutoPilotStatusChanged( status, reason );
}
} );
}
}

View File

@@ -76,7 +76,7 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
}
// 暂时只显示车辆
if ( isCarType( recognizedListResult.type ) ) {
if ( !isCarType( recognizedListResult.type ) ) {
continue;
}
@@ -113,9 +113,13 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
interval -= 25;
marker.startSmoothInMs( points, interval );
}
marker.setRotateAngle( ( ( float ) recognizedListResult.heading ) );
marker.setPosition( recognizedListResult.lat, recognizedListResult.lon );
} else {
marker.setPosition( recognizedListResult.lat, recognizedListResult.lon );
}
// marker.setRotateAngle( ( ( float ) recognizedListResult.heading ) );
// marker.setPosition( recognizedListResult.lat, recognizedListResult.lon );
}
showSelfSpeed( mContext,
marker,
@@ -181,7 +185,7 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
}
private int getVrModel() {
return R.raw.carred;
return R.raw.cargrey;
}
}

View File

@@ -94,12 +94,12 @@ class BaseDrawer {
protected boolean isCarType( int type ) {
AdasRecognizedType recognizedType = AdasRecognizedType.valueFrom( type );
if ( recognizedType != AdasRecognizedType.classIdCar
|| recognizedType != AdasRecognizedType.classIdTrafficBus
|| recognizedType != AdasRecognizedType.classIdTrafficTruck ) {
return false;
if ( recognizedType == AdasRecognizedType.classIdCar
|| recognizedType == AdasRecognizedType.classIdTrafficBus
|| recognizedType == AdasRecognizedType.classIdTrafficTruck ) {
return true;
}
return true;
return false;
}

View File

@@ -1,22 +1,16 @@
package com.mogo.module.common.drawer;
import android.content.Context;
import android.graphics.Color;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.map.MogoLatLng;
import com.mogo.map.location.MogoLocation;
import com.mogo.map.marker.IMogoMarker;
import com.mogo.map.marker.IMogoMarkerClickListener;
import com.mogo.map.marker.MogoMarkerOptions;
import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.map.uicontroller.MapCameraPosition;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.R;
import com.mogo.module.common.api.CallChatApi;
@@ -151,7 +145,7 @@ class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClickListen
// 暂时只显示车辆
if ( TextUtils.isEmpty( cloudRoadData.getSn() ) ) {
if ( isCarType( cloudRoadData.getType() ) ) {
if ( !isCarType( cloudRoadData.getType() ) ) {
continue;
}
}
@@ -192,12 +186,12 @@ class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClickListen
if ( lastPosition != null ) {
if ( lastPosition.equals( cloudRoadData ) ) {
if ( ( ( int ) cloudRoadData.getSpeed() ) == 0 ) {
MapCameraPosition position = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().getMapCameraPosition();
if ( position != null ) {
marker.setRotateAngle( 360 - ( float ) cloudRoadData.getHeading() - position.getBearing() );
} else {
marker.setRotateAngle( 360 - ( float ) cloudRoadData.getHeading() );
}
// MapCameraPosition position = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().getMapCameraPosition();
// if ( position != null ) {
// marker.setRotateAngle( 360 - ( float ) cloudRoadData.getHeading() - position.getBearing() );
// } else {
// }
marker.setRotateAngle( ( ( float ) cloudRoadData.getHeading() ) );
}
Logger.d( TAG, "保持位置 - %s", uniqueKey );
// marker.setPosition( lastPosition.getLat(), lastPosition.getLon() );
@@ -222,12 +216,7 @@ class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClickListen
Logger.d( TAG, "平滑移动 - %s duration = %s", uniqueKey, interval2 );
}
} else {
MapCameraPosition position = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().getMapCameraPosition();
if ( position != null ) {
marker.setRotateAngle( 360 - ( float ) cloudRoadData.getHeading() - position.getBearing() );
} else {
marker.setRotateAngle( 360 - ( float ) cloudRoadData.getHeading() );
}
marker.setRotateAngle( ( float ) cloudRoadData.getHeading() );
marker.setPosition( cloudRoadData.getLat(), cloudRoadData.getLon() );
}
showSelfSpeed( mContext, marker, cloudRoadData.getSpeed(), mIsVrMode );
@@ -349,9 +338,9 @@ class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClickListen
private int getVrModel( CloudRoadData data ) {
switch ( data.getFromType() ) {
case CloudRoadData.FROM_ADAS:
// return R.raw.taxi;
return R.raw.cargrey;
case CloudRoadData.FROM_ROAD_UNIT:
// return R.raw.bus;
return R.raw.cargreen;
case CloudRoadData.FROM_MY_LOCATION:
default:
return R.raw.carblue;