diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoOCHTaxiArriveCallback.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoOCHTaxiArriveCallback.java
new file mode 100644
index 0000000000..ba52e18eb9
--- /dev/null
+++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoOCHTaxiArriveCallback.java
@@ -0,0 +1,21 @@
+package com.mogo.och.taxi;
+
+public
+/**
+ * @author congtaowang
+ * @since 2021/1/18
+ *
+ * 网约车-出租车到站回调
+ */
+interface IMogoOCHTaxiArriveCallback {
+
+ /**
+ * 到达起始站
+ */
+ void onArriveAtStartStation();
+
+ /**
+ * 到达终点站
+ */
+ void onArriveAtEndStation();
+}
diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxi.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxi.java
index a3bc4e8e96..03c16687f8 100644
--- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxi.java
+++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxi.java
@@ -7,6 +7,7 @@ import androidx.fragment.app.FragmentActivity;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.och.IMogoOCH;
import com.mogo.och.OCHConstants;
+import com.mogo.och.taxi.ui.OCHTaxiUiController;
import com.mogo.utils.logger.Logger;
public
@@ -23,12 +24,12 @@ class MogoOCHTaxi implements IMogoOCH {
@Override
public void init( FragmentActivity activity, int containerId ) {
-
+ MogoOCHTaxiModel.getInstance().init( activity.getApplicationContext() );
+ OCHTaxiUiController.getInstance().init( activity, containerId );
}
@Override
public void init( Context context ) {
Logger.d( TAG, "init" );
- MogoOCHTaxiModel.getInstance().init( context );
}
}
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 51ec78a1ee..c795639559 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
@@ -1,18 +1,25 @@
package com.mogo.och.taxi;
import android.content.Context;
+import android.location.Location;
+import android.text.TextUtils;
import com.mogo.commons.data.BaseData;
import com.mogo.commons.network.SubscribeImpl;
+import com.mogo.map.MogoLatLng;
+import com.mogo.map.navi.IMogoCarLocationChangedListener2;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.constants.HostConst;
+import com.mogo.och.taxi.ui.OCHTaxiUiController;
import com.mogo.service.adas.IMogoAdasOCHCallback;
import com.mogo.service.adas.RemoteControlAutoPilotParameters;
import com.mogo.service.adas.entity.AdasOCHData;
import com.mogo.service.connection.IMogoOnMessageListener;
+import com.mogo.utils.CoordinateUtils;
import com.mogo.utils.logger.Logger;
import com.mogo.utils.network.RequestOptions;
import com.mogo.utils.network.utils.GsonUtil;
+import com.mogo.utils.storage.SharedPrefsMgr;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
@@ -29,9 +36,6 @@ class MogoOCHTaxiModel {
private static final String TAG = "MogoOCHTaxiModel";
private static volatile MogoOCHTaxiModel sInstance;
- private Context mContext;
- private OCHTaxiResponse mCurrentOCHOrder;
- private OCHArriveNotifyCallback mNotifyCallback;
private MogoOCHTaxiModel() {
}
@@ -47,9 +51,33 @@ class MogoOCHTaxiModel {
return sInstance;
}
+ /**
+ * 订单信息
+ */
+ public static final String SP_KEY_OCH_TAXI_ORDER = "SP_KEY_OCH_TAXI_ORDER";
+
+ /**
+ * 是否已开启自动驾驶
+ */
+ public static final String SP_KEY_START_AUTO_PILOT = "SP_KEY_START_AUTO_PILOT";
+
private OrderMsgListener mOrderMsgListener;
private OrderStatusMsgListener mOrderStatusMsgListener;
private OCHTaxiServiceApi mOCHTaxiServiceApi;
+ private Context mContext;
+ private OCHTaxiResponse mCurrentOCHOrder;
+ private OCHArriveNotifyCallback mNotifyCallback;
+ private IMogoCarLocationChangedListener2 mCarLocationChangedListener2;
+
+ /**
+ * 是否达到起始站点
+ */
+ private boolean mIsArriveAtStartStation = false;
+
+ /**
+ * 是否达到终点
+ */
+ private boolean mIsArriveAtEndStation = false;
private Object readResolve() {
// 阻止反序列化,必须实现 Serializable 接口
@@ -72,8 +100,71 @@ class MogoOCHTaxiModel {
.getAdasControllerApi()
.addAdasOCHCallback( mNotifyCallback = new OCHArriveNotifyCallback() );
+ // 订单恢复
+// String orderInfo = SharedPrefsMgr.getInstance( mContext ).getString( SP_KEY_OCH_TAXI_ORDER );
+// if ( !TextUtils.isEmpty( orderInfo ) ) {
+// mCurrentOCHOrder = GsonUtil.objectFromJson( orderInfo, OCHTaxiResponse.class );
+// if ( mCurrentOCHOrder == null ) {
+// return;
+// }
+// if ( !isAutoPilotStarted() ) {
+// mOrderMsgListener.onMsgReceived( mCurrentOCHOrder );
+// }
+// }
}
+ /**
+ * 自车定位
+ */
+ private class LocationListener implements IMogoCarLocationChangedListener2 {
+
+ @Override
+ public void onCarLocationChanged2( Location location ) {
+ onLocationChanged( location );
+ }
+
+ @Override
+ public void onCarLocationChanged( MogoLatLng latLng ) {
+
+ }
+ }
+
+ /**
+ * 位置变化时,通过围栏(5M)判断,是否到达起点
+ *
+ * @param location
+ */
+ private void onLocationChanged( Location location ) {
+ if ( location == null ) {
+ return;
+ }
+ if ( !checkCurrentOCHOrder() ) {
+ return;
+ }
+ if ( mIsArriveAtStartStation ) {
+ unregisterCarLocationListener();
+ return;
+ }
+ OCHTaxiResponse.OCHTaxiStation station = mCurrentOCHOrder.drivingRoutes.get( 0 );//起点
+ double distance = CoordinateUtils.calculateLineDistance( station.lon, station.lat, location.getLongitude(), location.getLatitude() );
+ if ( distance <= 5 ) {
+ mIsArriveAtStartStation = true;
+ unregisterCarLocationListener();
+ OCHTaxiUiController.getInstance().onArriveAtStartStation();
+ return;
+ }
+ }
+
+ /**
+ * 是否已到达起始站
+ */
+ public boolean isArriveAtStartStation() {
+ return mIsArriveAtStartStation;
+ }
+
+ /**
+ * 后端长链推送通知新订单
+ */
private class OrderMsgListener implements IMogoOnMessageListener< OCHTaxiResponse > {
@Override
public Class< OCHTaxiResponse > target() {
@@ -82,10 +173,65 @@ class MogoOCHTaxiModel {
@Override
public void onMsgReceived( OCHTaxiResponse obj ) {
+ if ( mCurrentOCHOrder != null ) {
+ Logger.e( TAG, "有订单尚未结束" );
+ return;
+ }
mCurrentOCHOrder = obj;
+ cacheOrderInfo2Native( mCurrentOCHOrder );
+ Location location = MogoApisHandler.getInstance()
+ .getApis()
+ .getMapServiceApi()
+ .getNavi( mContext )
+ .getCarLocation2();
+ onLocationChanged( location );
+ if ( !isArriveAtStartStation() ) {
+ registerCarLocationListener();
+ }
+ OCHTaxiUiController.getInstance().addFragment();
}
}
+ /**
+ * 保存订单到本地,避免车机重启丢失数据
+ *
+ * @param obj
+ */
+ private void cacheOrderInfo2Native( OCHTaxiResponse obj ) {
+ if ( obj == null ) {
+ return;
+ }
+ SharedPrefsMgr.getInstance( mContext )
+ .putString( SP_KEY_OCH_TAXI_ORDER, GsonUtil.jsonFromObject( obj ) );
+ }
+
+ /**
+ * 达到起始站围栏监听
+ */
+ private void registerCarLocationListener() {
+ MogoApisHandler.getInstance()
+ .getApis()
+ .getRegisterCenterApi()
+ .registerCarLocationChangedListener( TAG,
+ mCarLocationChangedListener2 == null ? mCarLocationChangedListener2 = new LocationListener() : mCarLocationChangedListener2 );
+ }
+
+ /**
+ * 注销到达起始站围栏监听
+ */
+ private void unregisterCarLocationListener() {
+ if ( mCarLocationChangedListener2 == null ) {
+ return;
+ }
+ MogoApisHandler.getInstance()
+ .getApis()
+ .getRegisterCenterApi()
+ .unregisterCarLocationChangedListener( TAG, mCarLocationChangedListener2 );
+ }
+
+ /**
+ * 后端长链推送通知订单状态被改变
+ */
private class OrderStatusMsgListener implements IMogoOnMessageListener< OCHTaxiOrderStatusResponse > {
@Override
@@ -110,14 +256,29 @@ class MogoOCHTaxiModel {
}
}
+ /**
+ * 自动驾驶本地通知订单到站
+ */
private class OCHArriveNotifyCallback implements IMogoAdasOCHCallback {
@Override
public void onArriveAt( AdasOCHData data ) {
-
+ if ( data == null ) {
+ return;
+ }
+ if ( mIsArriveAtEndStation ) {
+ return;
+ }
+ if ( !checkCurrentOCHOrder() ) {
+ return;
+ }
+ mIsArriveAtEndStation = true;
+ OCHTaxiUiController.getInstance().onArriveAtEndStation();
}
}
/**
+ * 更新订单状态
+ *
* @param orderStatus 订单状态
*/
public void updateOCHOrderStatus( OCHOrderStatus orderStatus, OCHOrderStatusCallback callback ) {
@@ -160,19 +321,34 @@ class MogoOCHTaxiModel {
} );
}
+ /**
+ * 清除订单信息
+ */
public void clearCurrentOCHOrder() {
mCurrentOCHOrder = null;
+ mIsArriveAtStartStation = false;
+ mIsArriveAtEndStation = false;
+ SharedPrefsMgr.getInstance( mContext ).remove( SP_KEY_OCH_TAXI_ORDER );
+ markAutoPilotStartedStatus( false );
}
- private boolean checkCurrentOCHOrder() {
+ /**
+ * 检测当前订单
+ *
+ * @return
+ */
+ public boolean checkCurrentOCHOrder() {
if ( mCurrentOCHOrder != null
- && mCurrentOCHOrder.drivingRoute != null
- && mCurrentOCHOrder.drivingRoute.size() >= 2 ) {
+ && mCurrentOCHOrder.drivingRoutes != null
+ && mCurrentOCHOrder.drivingRoutes.size() >= 2 ) {
return true;
}
return false;
}
+ /**
+ * 以当前订单为基础,开启自动驾驶
+ */
public void startAutoPilot() {
if ( !checkCurrentOCHOrder() ) {
Logger.e( TAG, "no order or order is empty." );
@@ -180,12 +356,40 @@ class MogoOCHTaxiModel {
}
RemoteControlAutoPilotParameters parameters = new RemoteControlAutoPilotParameters();
parameters.vehicleType = mCurrentOCHOrder.orderType;
- parameters.startLatLon = new RemoteControlAutoPilotParameters.AutoPilotLonLat( mCurrentOCHOrder.drivingRoute.get( 0 ).lat, mCurrentOCHOrder.drivingRoute.get( 0 ).lon );
- parameters.endLatLon = new RemoteControlAutoPilotParameters.AutoPilotLonLat( mCurrentOCHOrder.drivingRoute.get( 1 ).lat, mCurrentOCHOrder.drivingRoute.get( 1 ).lon );
+ parameters.startLatLon = new RemoteControlAutoPilotParameters.AutoPilotLonLat( mCurrentOCHOrder.drivingRoutes.get( 0 ).lat, mCurrentOCHOrder.drivingRoutes.get( 0 ).lon );
+ parameters.endLatLon = new RemoteControlAutoPilotParameters.AutoPilotLonLat( mCurrentOCHOrder.drivingRoutes.get( 1 ).lat, mCurrentOCHOrder.drivingRoutes.get( 1 ).lon );
MogoApisHandler.getInstance()
.getApis()
.getAdasControllerApi()
.aiCloudToAdasData( parameters );
+ markAutoPilotStartedStatus( true );
Logger.d( TAG, "start autopilot with parameter: %s", GsonUtil.jsonFromObject( parameters ) );
}
+
+ /**
+ * 标记开启自动驾驶
+ *
+ * @param started
+ */
+ private void markAutoPilotStartedStatus( boolean started ) {
+ SharedPrefsMgr.getInstance( mContext ).putBoolean( SP_KEY_START_AUTO_PILOT, started );
+ }
+
+ /**
+ * 判断已开启自动驾驶
+ *
+ * @return
+ */
+ private boolean isAutoPilotStarted() {
+ return SharedPrefsMgr.getInstance( mContext ).getBoolean( SP_KEY_START_AUTO_PILOT, false );
+ }
+
+ /**
+ * 获取当前订单
+ *
+ * @return
+ */
+ public OCHTaxiResponse getCurrentOCHOrder() {
+ return mCurrentOCHOrder;
+ }
}
diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiResponse.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiResponse.java
index c86248dd9c..f809ba5b03 100644
--- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiResponse.java
+++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiResponse.java
@@ -1,5 +1,8 @@
package com.mogo.och.taxi;
+import android.os.Parcel;
+import android.os.Parcelable;
+
import java.util.List;
public
@@ -9,7 +12,7 @@ public
*
* 描述
*/
-class OCHTaxiResponse {
+class OCHTaxiResponse implements Parcelable {
// 订单号
public String orderNo;
@@ -24,12 +27,101 @@ class OCHTaxiResponse {
// 起始站目的站距离km
public double travelDistance;
// 站点
- public List< OCHTaxiStation > drivingRoute;
+ public List< OCHTaxiStation > drivingRoutes;
- public static class OCHTaxiStation {
+ public static class OCHTaxiStation implements Parcelable {
public int siteId;
public String siteName;
public double lon;
public double lat;
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel( Parcel dest, int flags ) {
+ dest.writeInt( this.siteId );
+ dest.writeString( this.siteName );
+ dest.writeDouble( this.lon );
+ dest.writeDouble( this.lat );
+ }
+
+ public OCHTaxiStation() {
+ }
+
+ protected OCHTaxiStation( Parcel in ) {
+ this.siteId = in.readInt();
+ this.siteName = in.readString();
+ this.lon = in.readDouble();
+ this.lat = in.readDouble();
+ }
+
+ public static final Creator< OCHTaxiStation > CREATOR = new Creator< OCHTaxiStation >() {
+ @Override
+ public OCHTaxiStation createFromParcel( Parcel source ) {
+ return new OCHTaxiStation( source );
+ }
+
+ @Override
+ public OCHTaxiStation[] newArray( int size ) {
+ return new OCHTaxiStation[size];
+ }
+ };
+ }
+
+ public OCHTaxiResponse() {
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel( Parcel dest, int flags ) {
+ dest.writeString( this.orderNo );
+ dest.writeInt( this.orderType );
+ dest.writeString( this.startStation );
+ dest.writeString( this.endStation );
+ dest.writeInt( this.orderDispatchType );
+ dest.writeDouble( this.travelDistance );
+ dest.writeTypedList( this.drivingRoutes );
+ }
+
+ protected OCHTaxiResponse( Parcel in ) {
+ this.orderNo = in.readString();
+ this.orderType = in.readInt();
+ this.startStation = in.readString();
+ this.endStation = in.readString();
+ this.orderDispatchType = in.readInt();
+ this.travelDistance = in.readDouble();
+ this.drivingRoutes = in.createTypedArrayList( OCHTaxiStation.CREATOR );
+ }
+
+ public static final Creator< OCHTaxiResponse > CREATOR = new Creator< OCHTaxiResponse >() {
+ @Override
+ public OCHTaxiResponse createFromParcel( Parcel source ) {
+ return new OCHTaxiResponse( source );
+ }
+
+ @Override
+ public OCHTaxiResponse[] newArray( int size ) {
+ return new OCHTaxiResponse[size];
+ }
+ };
+
+ @Override
+ public String toString() {
+ return "OCHTaxiResponse{" +
+ "orderNo='" + orderNo + '\'' +
+ ", orderType=" + orderType +
+ ", startStation='" + startStation + '\'' +
+ ", endStation='" + endStation + '\'' +
+ ", orderDispatchType=" + orderDispatchType +
+ ", travelDistance=" + travelDistance +
+ ", drivingRoutes=" + drivingRoutes +
+ '}';
}
}
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
new file mode 100644
index 0000000000..d312055aff
--- /dev/null
+++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java
@@ -0,0 +1,118 @@
+package com.mogo.och.taxi.ui;
+
+import android.os.Bundle;
+import android.widget.Button;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+
+import com.mogo.commons.mvp.MvpFragment;
+import com.mogo.module.common.MogoApisHandler;
+import com.mogo.och.taxi.IMogoOCHTaxiArriveCallback;
+import com.mogo.och.taxi.MogoOCHTaxiModel;
+import com.mogo.och.taxi.R;
+import com.mogo.service.statusmanager.IMogoStatusChangedListener;
+import com.mogo.service.statusmanager.StatusDescriptor;
+import com.mogo.utils.logger.Logger;
+
+public
+/**
+ * @author congtaowang
+ * @since 2021/1/18
+ *
+ * 网约车-出租车UI
+ */
+class OCHTaxiFragment extends MvpFragment< OCHTaxiView, OCHTaxiPresenter > implements OCHTaxiView,
+ IMogoStatusChangedListener, IMogoOCHTaxiArriveCallback {
+
+ public static final String TAG = "OCHTaxiFragment";
+
+ public static OCHTaxiFragment newInstance() {
+
+ Bundle args = new Bundle();
+
+ OCHTaxiFragment fragment = new OCHTaxiFragment();
+ fragment.setArguments( args );
+ return fragment;
+ }
+
+ private TextView orderInfo;
+ private Button autoPilot;
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.module_och_taxi_fragment;
+ }
+
+ @Override
+ protected void initViews() {
+
+ orderInfo = findViewById( R.id.orderInfo );
+ autoPilot = findViewById( R.id.autoPilot );
+ orderInfo.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().toString() );
+ autoPilot.setOnClickListener( view -> {
+ MogoOCHTaxiModel.getInstance().startAutoPilot();
+ } );
+
+ if ( MogoApisHandler.getInstance()
+ .getApis()
+ .getStatusManagerApi()
+ .isVrMode() ) {
+ vrMode();
+ } else {
+ flatMode();
+ }
+ initListeners();
+ }
+
+ private void initListeners() {
+ MogoApisHandler.getInstance()
+ .getApis()
+ .getStatusManagerApi()
+ .registerStatusChangedListener( TAG, StatusDescriptor.VR_MODE, this );
+ OCHTaxiUiController.getInstance().setOCHTaxiArriveCallback( this );
+ }
+
+ @NonNull
+ @Override
+ protected OCHTaxiPresenter createPresenter() {
+ return new OCHTaxiPresenter( this );
+ }
+
+ @Override
+ public void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) {
+ if ( isTrue ) {
+ vrMode();
+ } else {
+ flatMode();
+ }
+ }
+
+ private void vrMode() {
+
+ }
+
+ private void flatMode() {
+
+ }
+
+ @Override
+ public void onArriveAtStartStation() {
+ Logger.d( TAG, "达到起点" );
+ }
+
+ @Override
+ public void onArriveAtEndStation() {
+ Logger.d( TAG, "达到终点" );
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ MogoApisHandler.getInstance()
+ .getApis()
+ .getStatusManagerApi()
+ .unregisterStatusChangedListener( TAG, StatusDescriptor.VR_MODE, this );
+ OCHTaxiUiController.getInstance().setOCHTaxiArriveCallback( null );
+ }
+}
diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiPresenter.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiPresenter.java
new file mode 100644
index 0000000000..477e9df753
--- /dev/null
+++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiPresenter.java
@@ -0,0 +1,34 @@
+package com.mogo.och.taxi.ui;
+
+import androidx.annotation.NonNull;
+import androidx.lifecycle.LifecycleOwner;
+
+import com.mogo.commons.mvp.Presenter;
+import com.mogo.utils.logger.Logger;
+
+public
+/**
+ * @author congtaowang
+ * @since 2021/1/18
+ *
+ * 描述
+ */
+class OCHTaxiPresenter extends Presenter< OCHTaxiView > {
+
+ private static final String TAG = "OCHTaxiPresenter";
+
+ public OCHTaxiPresenter( OCHTaxiView view ) {
+ super( view );
+ }
+
+ @Override
+ public void onCreate( @NonNull LifecycleOwner owner ) {
+ super.onCreate( owner );
+ Logger.d( TAG, "网约车-出租车拿到订单" );
+ }
+
+ @Override
+ public void onDestroy( @NonNull LifecycleOwner owner ) {
+ super.onDestroy( owner );
+ }
+}
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
new file mode 100644
index 0000000000..ca89842633
--- /dev/null
+++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java
@@ -0,0 +1,119 @@
+package com.mogo.och.taxi.ui;
+
+import android.os.Looper;
+
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.fragment.app.FragmentManager;
+
+import com.mogo.och.taxi.IMogoOCHTaxiArriveCallback;
+import com.mogo.och.taxi.MogoOCHTaxiModel;
+import com.mogo.utils.UiThreadHandler;
+import com.mogo.utils.logger.Logger;
+
+public
+/**
+ * @author congtaowang
+ * @since 2021/1/18
+ *
+ * 控制UI显示
+ */
+class OCHTaxiUiController implements IMogoOCHTaxiArriveCallback {
+
+ private static final String TAG = "OCHTaxiUiController";
+
+ private static volatile OCHTaxiUiController sInstance;
+ private FragmentActivity mActivity;
+ private int mContainerId;
+
+ private IMogoOCHTaxiArriveCallback mOCHTaxiArriveCallback;
+
+ private OCHTaxiUiController() {
+ }
+
+ public static OCHTaxiUiController getInstance() {
+ if ( sInstance == null ) {
+ synchronized ( OCHTaxiUiController.class ) {
+ if ( sInstance == null ) {
+ sInstance = new OCHTaxiUiController();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ private Object readResolve() {
+ // 阻止反序列化,必须实现 Serializable 接口
+ return sInstance;
+ }
+
+ public void init( FragmentActivity activity, int containerId ) {
+ mActivity = activity;
+ mContainerId = containerId;
+ addFragment();
+ }
+
+ public void addFragment() {
+
+ if ( Looper.myLooper() != Looper.getMainLooper() ) {
+ UiThreadHandler.post( () -> {
+ addFragmentImpl();
+ } );
+ } else {
+ addFragmentImpl();
+ }
+
+ }
+
+ private void addFragmentImpl() {
+ if ( !MogoOCHTaxiModel.getInstance().checkCurrentOCHOrder() ) {
+ return;
+ }
+ Fragment fragment = null;
+ FragmentManager fragmentManager = mActivity.getSupportFragmentManager();
+ fragment = fragmentManager.findFragmentByTag( OCHTaxiFragment.TAG );
+ if ( fragment == null ) {
+ fragment = OCHTaxiFragment.newInstance();
+ }
+ mActivity.getSupportFragmentManager()
+ .beginTransaction()
+ .replace( mContainerId, fragment, OCHTaxiFragment.TAG )
+ .commitNowAllowingStateLoss();
+
+ Logger.d( TAG, "add fragment" );
+ }
+
+ public void removeFragment() {
+ Fragment fragment = null;
+ FragmentManager fragmentManager = mActivity.getSupportFragmentManager();
+ fragment = fragmentManager.findFragmentByTag( OCHTaxiFragment.TAG );
+ if ( fragment == null ) {
+ return;
+ }
+ fragmentManager.beginTransaction()
+ .remove( fragment )
+ .commitNowAllowingStateLoss();
+ }
+
+ public void setOCHTaxiArriveCallback( IMogoOCHTaxiArriveCallback OCHTaxiArriveCallback ) {
+ this.mOCHTaxiArriveCallback = OCHTaxiArriveCallback;
+ }
+
+ public IMogoOCHTaxiArriveCallback getOCHTaxiArriveCallback() {
+ return mOCHTaxiArriveCallback;
+ }
+
+ @Override
+ public void onArriveAtStartStation() {
+ if ( mOCHTaxiArriveCallback != null ) {
+ mOCHTaxiArriveCallback.onArriveAtEndStation();
+ }
+ }
+
+ @Override
+ public void onArriveAtEndStation() {
+ if ( mOCHTaxiArriveCallback != null ) {
+ mOCHTaxiArriveCallback.onArriveAtEndStation();
+ }
+ }
+}
diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiView.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiView.java
new file mode 100644
index 0000000000..ba9377c8fe
--- /dev/null
+++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiView.java
@@ -0,0 +1,13 @@
+package com.mogo.och.taxi.ui;
+
+import com.mogo.commons.mvp.IView;
+
+public
+/**
+ * @author congtaowang
+ * @since 2021/1/18
+ *
+ * 描述
+ */
+interface OCHTaxiView extends IView {
+}
diff --git a/OCH/mogo-och-taxi/src/main/res/layout/module_och_taxi_fragment.xml b/OCH/mogo-och-taxi/src/main/res/layout/module_och_taxi_fragment.xml
new file mode 100644
index 0000000000..efa9185d26
--- /dev/null
+++ b/OCH/mogo-och-taxi/src/main/res/layout/module_och_taxi_fragment.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/CarSeries.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/CarSeries.java
index 94703ac3a5..90e1e2122c 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/CarSeries.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/CarSeries.java
@@ -21,7 +21,7 @@ public class CarSeries {
if ( invokeFlag ) {
return isF8xxSeries;
}
- isF8xxSeries = DebugConfig.getProductFlavor().startsWith( "f8" );
+ isF8xxSeries = DebugConfig.getProductFlavor().startsWith( "f" );
invokeFlag = true;
return isF8xxSeries;
}
diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenterHandler.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenterHandler.java
index 56c9e0eb01..facba033cc 100644
--- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenterHandler.java
+++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenterHandler.java
@@ -33,7 +33,7 @@ public class MogoRegisterCenterHandler implements IMogoRegisterCenter {
private Map< String, IMogoLocationListener > mLocation = new HashMap<>();
private Map< String, IMogoMarkerClickListener > mMarker = new HashMap<>();
private Map< String, IMogoAimlessModeListener > mAimless = new HashMap<>();
- private Map< String, IMogoCarLocationChangedListener > mCarLocations = new HashMap<>();
+ private Map< String, IMogoCarLocationChangedListener > mCarLocations = new ConcurrentHashMap<>();
private Map< String, IMogoADASControlStatusChangedListener > mADAS = new HashMap<>();
private MogoRegisterCenterHandler() {
@@ -190,7 +190,7 @@ public class MogoRegisterCenterHandler implements IMogoRegisterCenter {
}
@Override
- public Iterator getAdasControlStatusChangedListeners(){
+ public Iterator< IMogoADASControlStatusChangedListener > getAdasControlStatusChangedListeners() {
return mADAS.values().iterator();
}
}
diff --git a/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml b/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml
index cf39291154..6712a3a36d 100644
--- a/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml
+++ b/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml
@@ -92,5 +92,4 @@
android:layout_width="match_parent"
android:layout_height="match_parent" />
-
\ No newline at end of file