diff --git a/OCH/mogo-och-bus/build.gradle b/OCH/mogo-och-bus/build.gradle index eea68114f8..4de0719cb7 100644 --- a/OCH/mogo-och-bus/build.gradle +++ b/OCH/mogo-och-bus/build.gradle @@ -51,6 +51,7 @@ dependencies { implementation rootProject.ext.dependencies.rxjava implementation rootProject.ext.dependencies.rxandroid + compileOnly rootProject.ext.dependencies.recyclerviewadapterhelper implementation project(":OCH:mogo-och-common-module") diff --git a/OCH/mogo-och-bus/src/main/AndroidManifest.xml b/OCH/mogo-och-bus/src/main/AndroidManifest.xml index 0e09e1a997..76856fd226 100644 --- a/OCH/mogo-och-bus/src/main/AndroidManifest.xml +++ b/OCH/mogo-och-bus/src/main/AndroidManifest.xml @@ -13,7 +13,7 @@ /> + android:screenOrientation="landscape" /> \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusOperationStatusResponse.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusOperationStatusResponse.java deleted file mode 100644 index 744fbac9c5..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusOperationStatusResponse.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.mogo.och.bus.bean; - -import com.mogo.eagle.core.data.BaseData; - -/** - * @author congtaowang - * @since 2021/3/22 - * - * 小巴车运营状态返回参数 - */ -public class BusOperationStatusResponse extends BaseData { - - public Result data; - - public static class Result { - - public int serviceStatus;//0:已收车,1:已出车 - - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusQueryLineTaskResponse.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusQueryLineTaskResponse.java new file mode 100644 index 0000000000..4911c3cf99 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusQueryLineTaskResponse.java @@ -0,0 +1,19 @@ +package com.mogo.och.bus.bean; + +import com.mogo.eagle.core.data.BaseData; + +import java.util.List; + +/** + * @author: wangmingjun + * @date: 2022/2/9 + */ +public class BusQueryLineTaskResponse extends BaseData { + + public List data; + + public static class Result { + public int id; + public long taskStartTime; + } +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusQueryLinesResponse.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusQueryLinesResponse.java index 99ead6ee0e..17540e3eed 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusQueryLinesResponse.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusQueryLinesResponse.java @@ -19,5 +19,9 @@ public class BusQueryLinesResponse extends BaseData { public String startSiteName;//始发站名称 public String endSiteName;//终点名称 + public boolean open;//true 打开状态 false + public boolean haveTask; + + public List taskList; } } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusResetDrivingLineRequest.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusResetDrivingLineRequest.java index c27264694f..6ab70768f9 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusResetDrivingLineRequest.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusResetDrivingLineRequest.java @@ -9,10 +9,10 @@ import com.mogo.commons.network.Utils; */ public class BusResetDrivingLineRequest { public String sn; - public int lineId; //切换到的线路id + public int taskId; //切换到的线路id - public BusResetDrivingLineRequest(int lineId) { - sn = MoGoAiCloudClientConfig.getInstance().getSn(); - this.lineId = lineId; + public BusResetDrivingLineRequest(int taskId) { + this.sn = MoGoAiCloudClientConfig.getInstance().getSn(); + this.taskId = taskId; } } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IBusLinesCallback.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IBusLinesCallback.java index b181736278..74cac63aa3 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IBusLinesCallback.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IBusLinesCallback.java @@ -1,5 +1,6 @@ package com.mogo.och.bus.callback; +import com.mogo.och.bus.bean.BusQueryLineTaskResponse; import com.mogo.och.bus.bean.BusQueryLinesResponse; /** @@ -9,4 +10,5 @@ import com.mogo.och.bus.bean.BusQueryLinesResponse; public interface IBusLinesCallback { void onBusLinesChange(BusQueryLinesResponse lines); void onChangeLineIdSuccess(); + void onBusLineTasks(BusQueryLineTaskResponse o, int position); } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/ICarOperationStatusCallback.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/ICarOperationStatusCallback.java deleted file mode 100644 index d414f71e2c..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/ICarOperationStatusCallback.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.mogo.och.bus.callback; - -/** - * @author: wangmingjun - * @date: 2021/10/22 - */ -public interface ICarOperationStatusCallback { - void changeOperationStatus(boolean changeStatus); -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IRefreshBusStationsCallback.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IRefreshBusStationsCallback.java index 758fd4b0bf..95292ef6a6 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IRefreshBusStationsCallback.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IRefreshBusStationsCallback.java @@ -14,6 +14,9 @@ public interface IRefreshBusStationsCallback { int arrivingOrArrivedIndex, boolean isArrived); + /** + * 结束清理一遍、选择任务后清理一遍 + */ void clearBusStationsMarkers(); void updateEmptyUi(); diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/LineAndTaskStatusManager.kt b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/LineAndTaskStatusManager.kt new file mode 100644 index 0000000000..577445a2d6 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/LineAndTaskStatusManager.kt @@ -0,0 +1,21 @@ +package com.mogo.och.bus.constant + +object LineAndTaskStatusManager { + var lineId: Int? = null//线路id + var taskId: Int? = null//任务id + + + @JvmStatic + fun setLineAndTaskId(lineId: Int?,taskId: Int?){ + this.lineId = lineId + this.taskId = taskId + } + @JvmStatic + fun hasLineAndTaskId():Boolean{ + if(lineId!=null&& taskId!=null){ + return true + }else{ + return false + } + } +} \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java index adbbf2c0eb..9a33fcdc06 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java @@ -111,8 +111,6 @@ public abstract class BaseBusTabFragment return R.layout.bus_base_fragment; } - private View panelView; - @Override protected void initViews() { groupTestPanel = findViewById(R.id.groupTestPanel); @@ -131,7 +129,7 @@ public abstract class BaseBusTabFragment flSpeed = (FrameLayout) findViewById(R.id.fl_speed); mTrafficDataView = (TrafficDataView) findViewById(R.id.bus_arc); - panelView = LayoutInflater.from(getContext()).inflate(getStationPanelViewId(), flStationPanelContainer); + LayoutInflater.from(getContext()).inflate(getStationPanelViewId(), flStationPanelContainer); slidePanelView.setOnSlidePanelMoveToEndListener(onSlideToEndListener); mSwitchMapModeLayout = findViewById(R.id.bus_switch_model_layout); @@ -287,10 +285,6 @@ public abstract class BaseBusTabFragment MogoApisHandler.getInstance().getApis().getRegisterCenterApi().registerMogoMapListener(TYPE_ENTRANCE, this); } - protected void onChangeOperationStatus() { - - } - /** * 展示滑动按钮 * @@ -428,22 +422,6 @@ public abstract class BaseBusTabFragment }); } - public void hidPanel() { - getActivity().runOnUiThread(() -> { - flStationPanelContainer.setVisibility(View.GONE); - }); - } - - public void showPanel() { - getActivity().runOnUiThread(() -> { - flStationPanelContainer.setVisibility(View.VISIBLE); - }); - } - - public View getPanelView() { - return panelView; - } - public SlidePanelView.OnSlidePanelMoveToEndListener getSlidePanelOnEndListener() { return null; } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BusFragment.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BusFragment.java index edae3fb2cc..b8866b5898 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BusFragment.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BusFragment.java @@ -3,17 +3,20 @@ package com.mogo.och.bus.fragment; import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS; import android.content.Intent; +import android.os.Bundle; import android.view.View; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.Group; +import androidx.annotation.Nullable; +import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.voice.AIAssist; import com.mogo.eagle.core.data.map.CenterLine; -import com.mogo.eagle.core.data.temp.EventBusOperation; +import com.mogo.eagle.core.data.temp.EventLogout; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; @@ -30,6 +33,8 @@ import com.mogo.och.bus.presenter.BusPresenter; import com.mogo.och.bus.ui.BusStationCommonItem; import com.mogo.och.bus.ui.BusSwitchLineActivity; import com.mogo.och.bus.view.SlidePanelView; +import com.mogo.och.common.module.biz.constant.OchCommonConst; +import com.mogo.och.common.module.biz.provider.LoginService; import com.mogo.och.common.module.utils.OCHThreadPoolManager; import com.mogo.och.common.module.wigets.OCHCommitDialog; @@ -60,11 +65,28 @@ public class BusFragment extends BaseBusTabFragment private BusStationCommonItem secondStationItem; private BusStationCommonItem thirdStationItem; + private LoginService loginService; + @Override public String getTagName() { return "BusFragment"; } + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + loginService = (LoginService) ARouter.getInstance().build(OchCommonConst.LOGINSERVICE).navigation(); + if(loginService!=null){ + loginService.registerFragment(this, getPresenter()); + } + } + @Override + public void onDestroyView() { + super.onDestroyView(); + loginService.unRegisterFragment(); + loginService = null; + } + @Override protected void initViews() { super.initViews(); @@ -88,13 +110,9 @@ public class BusFragment extends BaseBusTabFragment } @Subscribe(threadMode = ThreadMode.MAIN) - public void onClickChangeOperationStatus(EventBusOperation eventBusOperation){ - if (eventBusOperation.getId() == 0){ // 查询 - mPresenter.queryOperationStatus(); - }else if (eventBusOperation.getId() == 1){ // 出车/收车切换 - CallerLogger.INSTANCE.d(M_BUS + TAG,"bus出车/收车"); - onChangeOperationStatus(); - } + public void changeOverview(EventLogout eventLogout){ + CallerLogger.INSTANCE.d(M_BUS + TAG,"changeOverview Event消息去登出"); + mPresenter.logout(); } @Override @@ -386,37 +404,6 @@ public class BusFragment extends BaseBusTabFragment } } - @Override - protected void onChangeOperationStatus() { - super.onChangeOperationStatus(); - mPresenter.onChangeOperationStatus(); - } - - /** - * 修改经营状态 - * - * @param launch true-收车,false-出车 - */ - public void changeOperationStatus(boolean launch) { - isOperationStatus = launch; - - CallerHmiManager.INSTANCE.changeBusOperationStatus(launch); - - if (launch) { - // 出车的时候重制站点状态 - mPresenter.queryBusRoutes(); - tvArrived.setVisibility(View.VISIBLE); - showPanel(); - } else { - AIAssist.getInstance(getContext()).speakTTSVoice("已收车"); - tvArrived.setVisibility(View.GONE); - hideSlidePanel(); - hidPanel(); - //移除起点终点 - clearBusStationsMarkers(); - } - } - public void clearBusStationsMarkers(){ CallerLogger.INSTANCE.d(M_BUS + TAG,"clearBusStationsMarkers()"); if (null != startStation) { @@ -521,7 +508,7 @@ public class BusFragment extends BaseBusTabFragment @Override public void cancel() { - + closeLineConfirmDialog.dismiss(); } }); closeLineConfirmDialog.show(); diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusLineModel.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusLineModel.java index 0d79156db8..96e3308475 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusLineModel.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusLineModel.java @@ -4,12 +4,15 @@ import android.content.Context; import com.mogo.commons.AbsMogoApplication; import com.mogo.eagle.core.utilcode.util.NetworkUtils; +import com.mogo.eagle.core.utilcode.util.SharedPrefs; import com.mogo.eagle.core.utilcode.util.ToastUtils; +import com.mogo.och.bus.bean.BusQueryLineTaskResponse; import com.mogo.och.bus.bean.BusQueryLinesResponse; import com.mogo.och.bus.bean.BusRoutesResponse; import com.mogo.och.bus.callback.IBusLinesCallback; import com.mogo.och.bus.net.BusServiceManager; import com.mogo.och.bus.net.IBusServiceCallback; +import com.mogo.och.bus.ui.BusSwitchLineActivity; /** * @author: wangmingjun @@ -63,10 +66,41 @@ public class BusLineModel { }); } - public void commitSwitchLineId(int lineId){ - BusServiceManager.getInstance().switchLine(mContext,lineId, new IBusServiceCallback() { + /** + * 通过线路id 查询线路排班表 + * @param lineId + * @param position 位置 + */ + public void queryBusLineTasksById(int lineId, int position){ + BusServiceManager.getInstance().queryBusTaskByLineId(mContext, String.valueOf(lineId),new IBusServiceCallback() { + @Override + public void onSuccess(BusQueryLineTaskResponse data) { + if (null == data && mBusLinesCallback != null) { + mBusLinesCallback.onBusLineTasks(null,position); + return; + } + + if (mBusLinesCallback != null){ + mBusLinesCallback.onBusLineTasks(data,position); + } + } + + @Override + public void onFail(String failMsg) { + if (!NetworkUtils.isConnected(mContext)) { + ToastUtils.showShort("网络异常,请稍后重试"); + }else { + ToastUtils.showShort("查询所有绑定路线失败:"+failMsg); + } + } + }); + } + + public void commitSwitchLineId(int taskId,int lineId){ + BusServiceManager.getInstance().switchLine(mContext,taskId, new IBusServiceCallback() { @Override public void onSuccess(BusRoutesResponse o) { + SharedPrefs.getInstance(mContext).putInt(BusSwitchLineActivity.LASTCOMMITLINEID,lineId); if (mBusLinesCallback != null){ mBusLinesCallback.onChangeLineIdSuccess(); } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java index 30203d9076..f383ba0917 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java @@ -15,6 +15,7 @@ import android.text.TextUtils; import androidx.annotation.NonNull; +import com.alibaba.android.arouter.launcher.ARouter; import com.amap.api.maps.model.LatLng; import com.elegant.network.utils.GsonUtil; import com.mogo.cloud.commons.utils.CoordinateUtils; @@ -30,13 +31,11 @@ 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.utilcode.mogo.logger.CallerLogger; -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; import com.mogo.eagle.core.utilcode.util.NetworkUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.map.navi.IMogoCarLocationChangedListener2; import com.mogo.module.common.MogoApisHandler; -import com.mogo.och.bus.bean.BusOperationStatusResponse; import com.mogo.och.bus.bean.BusOrderBean; import com.mogo.och.bus.bean.BusOrdersResponse; import com.mogo.och.bus.bean.BusRoutePlanningUpdateReqBean; @@ -44,7 +43,6 @@ import com.mogo.och.bus.bean.BusRoutesResponse; import com.mogo.och.bus.bean.BusRoutesResult; import com.mogo.och.bus.bean.BusStationBean; import com.mogo.och.bus.bean.QueryLeaveAwayPassengersResponse; -import com.mogo.och.bus.callback.ICarOperationStatusCallback; import com.mogo.och.bus.callback.IBusControllerStatusCallback; import com.mogo.och.bus.callback.IRefreshBusStationsCallback; import com.mogo.och.bus.callback.ISlidePannelHideCallback; @@ -54,6 +52,8 @@ import com.mogo.och.bus.net.IBusServiceCallback; import com.mogo.och.bus.presenter.BusModelLoopManager; import com.mogo.och.bus.util.BusAnalyticsManager; import com.mogo.och.bus.util.BusTrajectoryManager; +import com.mogo.och.common.module.biz.constant.OchCommonConst; +import com.mogo.och.common.module.biz.provider.LoginService; import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; import com.mogo.och.common.module.utils.DateTimeUtil; import com.mogo.och.common.module.utils.PinYinUtil; @@ -86,10 +86,7 @@ public class BusOrderModel { private final String TAG = BusOrderModel.class.getSimpleName(); private int currentLineId = -1; private int backgroundCurrentStationIndex = 0;//A->B 此处值是A站点索引 - /** - * 运营状态、后端更具运营状态来判断车辆是否派单 - */ - private boolean mIsWorking = false; + private static volatile BusOrderModel sInstance; public double mLongitude = 0; public double mLatitude = 0; @@ -107,7 +104,6 @@ public class BusOrderModel { private static final int MSG_QUERY_BUS_STATION = 1001; private static final long QUERY_BUS_STATION_DELAY = 5000; - private ICarOperationStatusCallback carOperationStatusCallback; private IRefreshBusStationsCallback refreshBusStationsCallback; private ISlidePannelHideCallback slidePannelHideCallback; private IBusControllerStatusCallback mControllerStatusCallback; //Model->Presenter:VR mode等 @@ -118,6 +114,8 @@ public class BusOrderModel { private volatile boolean isArrivedStation = false; + private LoginService loginService; + private final Handler handler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { @@ -146,6 +144,7 @@ public class BusOrderModel { public void init() { mContext = AbsMogoApplication.getApp(); + loginService = (LoginService) ARouter.getInstance().build(OchCommonConst.LOGINSERVICE).navigation(); // 2021/10/20 衡阳小巴业务,使用LenovoPad时需要此app自己获取坐标并上传 String productFlavor = DebugConfig.getProductFlavor(); if (productFlavor != null && productFlavor.contains("fPadLenovoOchBus")) { @@ -203,10 +202,6 @@ public class BusOrderModel { startLoopBusOrders(); } - public void setCarOperationStatusCallback(ICarOperationStatusCallback callback){ - this.carOperationStatusCallback = callback; - } - public void setRefreshBusStationsCallback(IRefreshBusStationsCallback callback){ this.refreshBusStationsCallback = callback; } @@ -354,6 +349,7 @@ public class BusOrderModel { //自动驾驶路线规划接口 CallerAutopilotPlanningListenerManager.INSTANCE.removeListener(moGoAutopilotPlanningListener); + loginService = null; } private Object readResolve() { @@ -720,34 +716,10 @@ public class BusOrderModel { }); } - /** - * 收车 - */ - public void stopTakeOrder(){ - BusServiceManager.getInstance().stopTakeOrder(mContext, new IBusServiceCallback() { - @Override - public void onSuccess(BaseData o) { - mIsWorking = !mIsWorking; - closeBeautificationMode(); - carOperationStatusCallback.changeOperationStatus(isWorking()); - startOrStopOrderLoop(mIsWorking); - BusTrajectoryManager.getInstance().stopTrajReqLoop(); - } - @Override - public void onFail(String failMsg) { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort("网络异常,请稍后重试"); - }else { - ToastUtils.showShort("收车失败:"+failMsg); - } - } - }); - } - /** * 关闭美化模式 */ - private void closeBeautificationMode() { + public void closeBeautificationMode() { if (FunctionBuildConfig.isDemoMode) {//收车结束美化 FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = false; CallerAutoPilotManager.INSTANCE.setIgnoreConditionDraw(false); @@ -756,60 +728,6 @@ public class BusOrderModel { } } - /** - * 出车 - */ - public void startTakeOrder(){ - BusServiceManager.getInstance().startTakeOrder(mContext, new IBusServiceCallback() { - @Override - public void onSuccess(BaseData o) { - mIsWorking = !mIsWorking; - startOrStopOrderLoop(mIsWorking); - if ( stationList != null && stationList.size() > 0 ) { - AIAssist.getInstance( mContext ).speakTTSVoice( "车辆已整备完毕,请前往" - + stationList.get( backgroundCurrentStationIndex ).getName() + "站点" ); - } - carOperationStatusCallback.changeOperationStatus(isWorking()); - queryBusRoutes(); - } - @Override - public void onFail(String failMsg) { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort("网络异常,请稍后重试"); - }else { - ToastUtils.showShort("出车失败:"+failMsg); - } - } - }); - } - - /** - * 查询运营状态 - */ - public void queryOperationStatus() { - CallerLogger.INSTANCE.d( M_BUS + TAG, "查询运营状态"); - BusServiceManager.getInstance().queryOperationStatus(mContext - , new IBusServiceCallback() { - @Override - public void onSuccess(BusOperationStatusResponse o) { - if ( o.data != null ) { - mIsWorking = o.data.serviceStatus == 1; - CallerLogger.INSTANCE.d( M_BUS + TAG, "查询运营状态 result.status: " + o.data.serviceStatus); - startOrStopOrderLoop(mIsWorking); - } - carOperationStatusCallback.changeOperationStatus(isWorking()); - } - @Override - public void onFail(String failMsg) { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort("网络异常,请稍后重试"); - }else { - ToastUtils.showShort("出车收车状态查询:"+failMsg); - } - } - }); - } - /** * 开启自动驾驶到下一站 */ @@ -950,18 +868,6 @@ public class BusOrderModel { AIAssist.getInstance( mContext ).speakTTSVoice( builder.toString() ); } - /** - * 修改小巴运营状态 - */ - public void onChangeOperationStatus() { - CallerLogger.INSTANCE.d( M_BUS + TAG, "修改小巴运营状态"); - if (isWorking()){//收车 - stopTakeOrder(); - }else {//出车 - startTakeOrder(); - } - } - /** * 行程结束 */ @@ -1003,10 +909,6 @@ public class BusOrderModel { }); } - public boolean isWorking() { - return mIsWorking; - } - /** * 到站 * @param data @@ -1063,7 +965,7 @@ public class BusOrderModel { }); } - private void startOrStopOrderLoop(boolean start) { + public void startOrStopOrderLoop(boolean start) { CallerLogger.INSTANCE.d(M_BUS + TAG, "startOrStopOrderLoop() " + start); if (start) { BusModelLoopManager.getInstance().startHeartbeatLoop(); @@ -1072,6 +974,11 @@ public class BusOrderModel { } } + // 登出 + public void logout() { + loginService.loginOut(mLatitude,mLongitude); + } + public void triggerStartServiceEvent(boolean isRestart, boolean send) { if (stationList == null || backgroundCurrentStationIndex >= stationList.size()-1) { return; diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/BusServiceManager.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/BusServiceManager.java index edcfe36f6f..f7a2cecde5 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/BusServiceManager.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/BusServiceManager.java @@ -11,12 +11,11 @@ import com.mogo.eagle.core.network.RequestOptions; import com.mogo.eagle.core.network.SubscribeImpl; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.och.bus.bean.BusCloseTaskRequest; +import com.mogo.och.bus.bean.BusQueryLineTaskResponse; import com.mogo.och.bus.bean.BusQueryLinesResponse; import com.mogo.och.bus.bean.BusRoutePlanningUpdateReqBean; import com.mogo.och.bus.bean.BusRoutesResponse; import com.mogo.och.bus.bean.CarHeartbeatReqBean; -import com.mogo.och.bus.bean.BusOperationStatusRequest; -import com.mogo.och.bus.bean.BusOperationStatusResponse; import com.mogo.och.bus.bean.BusOrdersResponse; import com.mogo.och.bus.bean.BusQueryLineStationsRequest; import com.mogo.och.bus.bean.BusResetDrivingLineRequest; @@ -72,12 +71,12 @@ public class BusServiceManager { /** * 重置线路站点 * @param context - * @param lineId + * @param taskId * @param callback */ - public void switchLine(Context context, int lineId, IBusServiceCallback callback){ + public void switchLine(Context context, int taskId, IBusServiceCallback callback){ mService.switchLine(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken(),new BusResetDrivingLineRequest(lineId)) + ,MoGoAiCloudClientConfig.getInstance().getToken(),new BusResetDrivingLineRequest(taskId)) .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) .subscribe(getSubscribeImpl(context,callback,"debugResetStationStatus")); } @@ -159,48 +158,7 @@ public class BusServiceManager { .subscribe(getSubscribeImpl(context,callback,"queryStationLeaveAwayPassengers")); } - /** - * 收车 - * @param context - * @param callback - */ - public void stopTakeOrder(Context context, IBusServiceCallback callback){ - mService.stopTakeOrder(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,new BusOperationStatusRequest(BusOrderModel.getInstance().mLongitude - , BusOrderModel.getInstance().mLatitude)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context,callback,"stopTakeOrder")); - } - /** - * 出车 - * @param context - * @param callback - */ - public void startTakeOrder(Context context, IBusServiceCallback callback){ - mService.startTakeOrder(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,new BusOperationStatusRequest(BusOrderModel.getInstance().mLongitude - , BusOrderModel.getInstance().mLatitude)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context,callback,"startTakeOrder")); - } - - /** - * 查询出车/收车状态 - * @param context - * @param callback - */ - public void queryOperationStatus(Context context, IBusServiceCallback callback){ - mService.queryOperationStatus(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken(),MoGoAiCloudClientConfig.getInstance().getSn()) - .subscribeOn( Schedulers.io() ) - .observeOn( AndroidSchedulers.mainThread() ) - .subscribe(getSubscribeImpl(context,callback,"queryOperationStatus")); - } /** * 查询小巴车订单 @@ -224,6 +182,15 @@ public class BusServiceManager { .subscribe(getSubscribeImpl(context,callback,"queryBusLines")); } + public void queryBusTaskByLineId(Context context,String lineId,IBusServiceCallback callback){ + mService.queryBusTaskByLineId(MoGoAiCloudClientConfig.getInstance().getServiceAppId() + ,MoGoAiCloudClientConfig.getInstance().getToken() + ,lineId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(getSubscribeImpl(context,callback,"queryBusLines")); + } + public void updateOrderRoute(Context context,int lineId, int startSiteId, int endSiteId , List< BusRoutePlanningUpdateReqBean.Result > points , IBusServiceCallback callback){ diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IBusApiService.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IBusApiService.java index a2fdb90796..2a1a465ebe 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IBusApiService.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IBusApiService.java @@ -3,12 +3,12 @@ import com.mogo.eagle.core.data.BaseData; import com.mogo.och.bus.bean.BusCloseTaskRequest; import com.mogo.och.bus.bean.BusOperationStatusRequest; import com.mogo.och.bus.bean.BusOrdersResponse; +import com.mogo.och.bus.bean.BusQueryLineTaskResponse; import com.mogo.och.bus.bean.BusQueryLinesResponse; import com.mogo.och.bus.bean.BusRoutePlanningUpdateReqBean; import com.mogo.och.bus.bean.BusRoutesResponse; import com.mogo.och.bus.bean.CarHeartbeatReqBean; import com.mogo.och.bus.bean.BusQueryLineStationsRequest; -import com.mogo.och.bus.bean.BusOperationStatusResponse; import com.mogo.och.bus.bean.QueryLeaveAwayPassengersRequest; import com.mogo.och.bus.bean.QueryLeaveAwayPassengersResponse; import com.mogo.och.bus.bean.BusResetDrivingLineRequest; @@ -45,11 +45,10 @@ public interface IBusApiService { /** * @param request 请求参数{"destLine":1,"sn":"F803EB2046PZD00229"} 这个接口是重置bus线路的, 不是重置线路中站点的 * @return 返回值是重置后的车站列表 + * 开始路线 */ @Headers( {"Content-Type:application/json;charset=UTF-8"} ) -// @POST( "/autopilot-car-hailing/car/v2/bus/drivingLine/reset" ) - @POST( "/autopilot-car-hailing/car/v2/driver/bus/drivingLine/reset" ) -// @POST( "/mock/268/autopilot-car-hailing/bus/api/drivingLine/reset" ) + @POST( "/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/startTask" ) Observable switchLine(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusResetDrivingLineRequest request); /** @@ -88,39 +87,6 @@ public interface IBusApiService { // @POST("/mock/268/autopilot-car-hailing/bus/api/driving/siteArrivedOrders") Observable< QueryLeaveAwayPassengersResponse > queryStationLeaveAwayPassengers(@Header ("appId") String appId,@Header("ticket") String ticket,@Body QueryLeaveAwayPassengersRequest request); - /** - * 出车 - * @param request - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) -// @POST("/autopilot-car-hailing/car/v2/bus/startTakeOrder") - @POST("/autopilot-car-hailing/car/v2/driver/bus/startTakeOrder") -// @POST("/mock/268/autopilot-car-hailing/bus/api/startTakeOrder") - Observable startTakeOrder(@Header ("appId") String appId,@Header("ticket") String ticket,@Body BusOperationStatusRequest request); - - /** - * 收车 - * @param request - * @return - */ - @Headers({"Content-type:application/json;charset=UTF-8"}) -// @POST("/autopilot-car-hailing/car/v2/bus/stopTakeOrder") - @POST("/autopilot-car-hailing/car/v2/driver/bus/stopTakeOrder") -// @POST("/mock/268/autopilot-car-hailing/bus/api/stopTakeOrder") - Observable stopTakeOrder(@Header ("appId") String appId,@Header("ticket") String ticket,@Body BusOperationStatusRequest request); - - /** - * 查询小巴出车/收车状态 - * @param sn - * @return - */ - @Headers({"Content-type:application/json;charset=UTF-8"}) -// @GET("/autopilot-car-hailing/car/v2/bus/takeOrderStatus/query") - @GET("/autopilot-car-hailing/car/v2/driver/bus/takeOrderStatus/query") -// @GET("/mock/268/autopilot-car-hailing/bus/api/takeOrderStatus/query") - Observable queryOperationStatus(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn); - @Headers({"Content-type:application/json;charset=UTF-8"}) // @GET("/autopilot-car-hailing/order/v2/bus/servicingOrders/query") @GET("/autopilot-car-hailing/order/v2/driver/bus/servicingOrders/query") @@ -144,10 +110,20 @@ public interface IBusApiService { * @param sn * @return */ -// @GET("/autopilot-car-hailing/line/v2/driver/bindLine/query") @GET("/autopilot-car-hailing/line/v2/driver/bus/bindLine/query") Observable queryBusLines(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn); + /** + * 查询路线当天的任务 + * @param appId + * @param ticket + * @param lineId 线路id + * @return + */ + @GET("/autopilot-car-hailing/line/v2/driver/bus/task/query") + Observable queryBusTaskByLineId(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("lineId") String lineId); + + @Headers( {"Content-type:application/json;charset=UTF-8"} ) @POST( "/autopilot-car-hailing/location/v2/driver/bus/saveLineCoordinate" ) Observable updateOrderRoute(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusRoutePlanningUpdateReqBean data); @@ -165,6 +141,8 @@ public interface IBusApiService { */ @Headers( {"Content-type:application/json;charset=UTF-8"} ) @POST("/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/abortTask") + Observable resetCurrentLineStatus(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusResetLineStatusRequest data); + @POST("/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/abortTask") Observable abortTask(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusCloseTaskRequest data); /** diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusLinePresenter.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusLinePresenter.java index bafd9f298b..7f1a70a0d1 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusLinePresenter.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusLinePresenter.java @@ -7,18 +7,26 @@ import androidx.lifecycle.LifecycleOwner; import com.mogo.commons.mvp.Presenter; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.och.bus.bean.BusQueryLineTaskResponse; import com.mogo.och.bus.bean.BusQueryLinesResponse; import com.mogo.och.bus.callback.IBusLinesCallback; import com.mogo.och.bus.model.BusLineModel; import com.mogo.och.bus.model.BusOrderModel; import com.mogo.och.bus.ui.BusSwitchLineView; +import java.util.concurrent.TimeUnit; + +import io.reactivex.Observable; +import io.reactivex.disposables.Disposable; + /** * @author: wangmingjun * @date: 2022/2/9 */ public class BusLinePresenter extends Presenter implements IBusLinesCallback { + private Disposable subscribe; + public BusLinePresenter(BusSwitchLineView view) { super(view); BusLineModel.getInstance().init(); @@ -61,8 +69,21 @@ public class BusLinePresenter extends Presenter implements IB BusLineModel.getInstance().queryBusLines(); } - public void commitSwitchLineId(int lineId){ - BusLineModel.getInstance().commitSwitchLineId(lineId); + public void queryBusLineTasks(int lineId, int position,boolean close){ + if(subscribe!=null&&!subscribe.isDisposed()){ + subscribe.dispose(); + } + if(close){ + return; + } + BusLineModel.getInstance().queryBusLineTasksById(lineId,position); + subscribe = Observable.interval(5, TimeUnit.SECONDS).subscribe(aLong -> { + BusLineModel.getInstance().queryBusLineTasksById(lineId,position); + }); + } + + public void commitSwitchLineId(int taskId,int lineId){ + BusLineModel.getInstance().commitSwitchLineId(taskId,lineId); } public void removeListener(){ @@ -76,5 +97,14 @@ public class BusLinePresenter extends Presenter implements IB @Override public void onDestroy(@NonNull LifecycleOwner owner) { super.onDestroy(owner); + if(subscribe!=null&&!subscribe.isDisposed()){ + subscribe.dispose(); + } + } + + + @Override + public void onBusLineTasks(BusQueryLineTaskResponse o, int position) { + mView.onBusLineTasks(o,position); } } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java index 89d48ed70c..cff599cca5 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java @@ -17,13 +17,16 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.och.bus.bean.BusStationBean; -import com.mogo.och.bus.callback.ICarOperationStatusCallback; import com.mogo.och.bus.callback.IBusControllerStatusCallback; import com.mogo.och.bus.callback.IRefreshBusStationsCallback; import com.mogo.och.bus.callback.ISlidePannelHideCallback; +import com.mogo.och.bus.constant.LineAndTaskStatusManager; import com.mogo.och.bus.fragment.BusFragment; import com.mogo.och.bus.model.BusOrderModel; import com.mogo.och.bus.util.BusTrajectoryManager; +import com.mogo.och.common.module.biz.bean.DriverStatusQueryRespBean; +import com.mogo.och.common.module.biz.callback.ILoginCallback; +import com.zhidao.socket.utils.LoginStatusUtil; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,8 @@ import system_master.SystemStatusInfo; * @author tongchenfei */ public class BusPresenter extends Presenter - implements ICarOperationStatusCallback, IRefreshBusStationsCallback, ISlidePannelHideCallback - , IMoGoAutopilotStatusListener, IBusControllerStatusCallback { + implements IRefreshBusStationsCallback, ISlidePannelHideCallback + , IMoGoAutopilotStatusListener, IBusControllerStatusCallback, ILoginCallback { private static final String TAG = "BusPresenter"; @@ -60,7 +63,6 @@ public class BusPresenter extends Presenter @Override public void onCreate(@NonNull LifecycleOwner owner) { super.onCreate(owner); - queryOperationStatus(); BusOrderModel.getInstance().queryBusRoutes(); initModelListener(); } @@ -73,14 +75,12 @@ public class BusPresenter extends Presenter } public void initModelListener() { - BusOrderModel.getInstance().setCarOperationStatusCallback(this); BusOrderModel.getInstance().setRefreshBusStationsCallback(this); BusOrderModel.getInstance().setSlidePannelHideCallback(this); BusOrderModel.getInstance().setControllerStatusCallback(this); } public void releaseListener() { - BusOrderModel.getInstance().setCarOperationStatusCallback(null); BusOrderModel.getInstance().setRefreshBusStationsCallback(null); BusOrderModel.getInstance().setSlidePannelHideCallback(null); BusOrderModel.getInstance().setControllerStatusCallback(null); @@ -90,6 +90,8 @@ public class BusPresenter extends Presenter BusOrderModel.getInstance().queryBusRoutes(); } + public void resetCurrentLineStatus() { + BusOrderModel.getInstance().resetCurrentLineStatus(); public void queryOperationStatus(){ BusOrderModel.getInstance().queryOperationStatus(); } @@ -112,15 +114,9 @@ public class BusPresenter extends Presenter } } - public void onChangeOperationStatus() { - BusOrderModel.getInstance().onChangeOperationStatus(); - } - - @Override - public void changeOperationStatus(boolean changeStatus) { - if (mView != null) { - runOnUIThread(() -> mView.changeOperationStatus(changeStatus)); - } + // 登出 + public void logout() { + BusOrderModel.getInstance().logout(); } // @Override @@ -318,5 +314,27 @@ public class BusPresenter extends Presenter @Override public void onAutopilotStatusRespByQuery(@NonNull SystemStatusInfo.StatusInfo status) { + } + @Override + public void loginSuccess(DriverStatusQueryRespBean data) { + LineAndTaskStatusManager.setLineAndTaskId(data.data.lineId,data.data.taskId); + if(LoginStatusUtil.isLogin()){ + BusOrderModel.getInstance().startOrStopOrderLoop(true); + }else { + BusTrajectoryManager.getInstance().stopTrajReqLoop(); + BusOrderModel.getInstance().startOrStopOrderLoop(false); + BusTrajectoryManager.getInstance().stopTrajReqLoop(); + clearBusStationsMarkers(); + mView.hideSlidePanel(); + BusOrderModel.getInstance().closeBeautificationMode(); + } + if(LineAndTaskStatusManager.hasLineAndTaskId()){ + BusOrderModel.getInstance().queryBusRoutes(); + } + } + + @Override + public void loginFail(boolean isLogin) { + } } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusSwitchLineActivity.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusSwitchLineActivity.java deleted file mode 100644 index 847071ba49..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusSwitchLineActivity.java +++ /dev/null @@ -1,299 +0,0 @@ -package com.mogo.och.bus.ui; - -import android.content.Context; -import android.graphics.Point; -import android.os.Bundle; -import android.text.TextUtils; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.Window; -import android.view.WindowManager; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.mogo.commons.mvp.MvpActivity; -import com.mogo.eagle.core.utilcode.util.ToastUtils; -import com.mogo.och.bus.R; -import com.mogo.och.bus.bean.BusQueryLinesResponse; -import com.mogo.och.bus.presenter.BusLinePresenter; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author: wangmingjun - * @date: 2022/2/8 - */ -public class BusSwitchLineActivity extends MvpActivity - implements View.OnClickListener, BusSwitchLineView { - - private ImageView mClose; - private ConstraintLayout mNoDatasView; - private RecyclerView mLinesListView; - private TextView mLineCommitBtn; - private SwitchLineAdapter mAdapter; - private List mData = new ArrayList<>(); - private int mSelectLineId = -1; - - @Override - protected int getLayoutId() { - return R.layout.activity_bus_switch_line; - } - - @NonNull - @Override - protected BusLinePresenter createPresenter() { - return new BusLinePresenter(this); - } - - @Override - protected void initViews() { - initWH(); - initView(); - } - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - initDatas(); - } - - /** - * 初始化view - */ - private void initView() { - mClose = findViewById(R.id.switch_line_close); - mClose.setOnClickListener(this); - mNoDatasView = findViewById(R.id.no_order_data_view); - - mLineCommitBtn = findViewById(R.id.switch_line_btn_commit); - mLineCommitBtn.setOnClickListener(this); - - mLinesListView = findViewById(R.id.switch_line_rv); - mLinesListView.setLayoutManager(new LinearLayoutManager(this)); - mAdapter = new SwitchLineAdapter(getApplicationContext(),mData); - mLinesListView.setAdapter(mAdapter); - //设置item 点击事件 - mAdapter.setOnLineItemClickListener(new LineItemClickListener() { - @Override - public void onItemClick(int position) { - if (mData.size() > position && !TextUtils.isEmpty(mData.get(position).startSiteName ) - && !TextUtils.isEmpty(mData.get(position).endSiteName)){ - mSelectLineId = mData.get(position).lineId; - }else { - mSelectLineId = -1; - } - } - }); - } - - /** - * 设置布局宽高 - */ - private void initWH() { - - Window window = getWindow(); - - WindowManager.LayoutParams params = window.getAttributes(); - WindowManager windowManager = (WindowManager)getSystemService(Context.WINDOW_SERVICE); - Point point = new Point(); - windowManager.getDefaultDisplay().getSize(point);//用于获取屏幕高度 - - params.width = (int)(point.x * 0.375); - params.height = ViewGroup.LayoutParams.MATCH_PARENT; - window.setAttributes(params); - window.setGravity(Gravity.LEFT|Gravity.BOTTOM); - } - - /** - * 初始化数据 - */ - private void initDatas() { - mPresenter.queryBusLines(); - } - - /** - * 查询返回绑定路线集合 - * @param data - */ - @Override - public void onBusLinesChange(BusQueryLinesResponse data){ - if (null == data){ - showNoData(true); - return; - } - if (data.data != null && data.data.size() > 0){ - showNoData(false); - mData.clear(); - mData.addAll(data.data); - mAdapter.notifyDataSetChanged(); - changeCommitBtnBg(); - }else { - showNoData(true); - } - } - - /** - * 根据路线选中情况设置提交按钮样式 - */ - private void changeCommitBtnBg() { - for (int i=0; i -1){ - mPresenter.commitSwitchLineId(mSelectLineId); - }else { - finish(); - } - return; - } - } - - @Override - protected void onDestroy() { - super.onDestroy(); - } - - /** - * 路线列表adapter - */ - static class SwitchLineAdapter extends RecyclerView.Adapter{ - - private Context mContext; - private List mData; - // RecyclerView设置点击事件 - private LineItemClickListener mItemClickListener ; - private int clickPos = -1; - - public SwitchLineAdapter(Context context, List data){ - mContext = context; - mData = data; - } - - @NonNull - @Override - public SwitchLineViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = LayoutInflater.from(mContext).inflate(R.layout.bus_switch_line_list_item - ,parent,false); - SwitchLineViewHolder viewHolder = new SwitchLineViewHolder(view); - return viewHolder; - } - - @Override - public void onBindViewHolder(@NonNull SwitchLineViewHolder holder, int position) { - BusQueryLinesResponse.Result line = mData.get(position); - holder.lineName.setText(mContext.getString(R.string.bus_switch_line_name)+" "+line.name); - holder.lineStartName.setText(mContext.getString(R.string.bus_line_start)+" "+line.startSiteName); - holder.lineEndName.setText(mContext.getString(R.string.bus_line_end)+" "+line.endSiteName); - - //设置item点击事件 - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (mItemClickListener != null){ - mItemClickListener.onItemClick(position); - clickPos = position; - notifyDataSetChanged(); - } - } - }); - //选中绑定 - if (clickPos > -1){ - if (clickPos == position){ - holder.selectIv.setImageResource(R.drawable.bus_selected_btn); - }else { - holder.selectIv.setImageResource(R.drawable.bus_unselect_btn); - } - }else { - if (line.choose == 1){//1:绑定 2:未绑定 默认绑定 - if (mItemClickListener != null) { - mItemClickListener.onItemClick(position); - } - holder.selectIv.setImageResource(R.drawable.bus_selected_btn); - }else { - holder.selectIv.setImageResource(R.drawable.bus_unselect_btn); - } - } - - } - - @Override - public int getItemCount() { - return mData.size(); - } - public void setOnLineItemClickListener(LineItemClickListener itemClickListener){ - this.mItemClickListener = itemClickListener ; - - } - } - - static class SwitchLineViewHolder extends RecyclerView.ViewHolder{ - - private ImageView selectIv; - private TextView lineName; //线路名称 - private TextView lineStartName; //起点 - private TextView lineEndName; //终点 - - public SwitchLineViewHolder(@NonNull View itemView) { - super(itemView); - selectIv = itemView.findViewById(R.id.switch_line_item_select_iv); - lineName = itemView.findViewById(R.id.switch_line_name); - lineStartName = itemView.findViewById(R.id.switch_line_start_station); - lineEndName = itemView.findViewById(R.id.switch_line_end_station); - } - } - - public interface LineItemClickListener { - void onItemClick(int position) ; - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusSwitchLineActivity.kt b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusSwitchLineActivity.kt new file mode 100644 index 0000000000..976bc2711e --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusSwitchLineActivity.kt @@ -0,0 +1,210 @@ +package com.mogo.och.bus.ui + +import android.graphics.Point +import android.os.Bundle +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.ImageView +import android.widget.TextView +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.mogo.commons.mvp.MvpActivity +import com.mogo.eagle.core.utilcode.util.SharedPrefs +import com.mogo.och.bus.presenter.BusLinePresenter +import com.mogo.och.bus.ui.adapter.SwitchLineAdapter +import com.mogo.och.bus.bean.BusQueryLinesResponse +import com.mogo.och.bus.ui.adapter.OpenItemAnimator +import com.mogo.module.common.view.SpacesItemDecoration +import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.och.bus.R +import com.mogo.och.bus.bean.BusQueryLineTaskResponse +import java.util.ArrayList + +/** + * @author: wangmingjun + * @date: 2022/2/8 + */ +class BusSwitchLineActivity : MvpActivity(), + View.OnClickListener, BusSwitchLineView { + + companion object{ + const val LASTCOMMITLINEID = "lastcommitlineid" + } + + private lateinit var mClose: ImageView + private lateinit var mNoDatasView: ConstraintLayout + private lateinit var mLinesListView: RecyclerView + private lateinit var mLineCommitBtn: TextView + private lateinit var mAdapter: SwitchLineAdapter + private lateinit var linearLayoutManager:LinearLayoutManager + private val mData: MutableList = ArrayList() + override fun getLayoutId(): Int { + return R.layout.activity_bus_switch_line + } + + override fun createPresenter(): BusLinePresenter { + return BusLinePresenter(this) + } + + override fun initViews() { + initWH() + initView() + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + initDatas() + } + + /** + * 初始化view + */ + private fun initView() { + mClose = findViewById(R.id.switch_line_close) + mClose.setOnClickListener(this) + mNoDatasView = findViewById(R.id.no_order_data_view) + mLineCommitBtn = findViewById(R.id.switch_line_btn_commit) + mLineCommitBtn.setOnClickListener(this) + mLinesListView = findViewById(R.id.switch_line_rv) + linearLayoutManager = LinearLayoutManager(this) + mLinesListView.setLayoutManager(linearLayoutManager) + mLinesListView.setItemAnimator(OpenItemAnimator()) + mAdapter = SwitchLineAdapter(applicationContext, mData) + mLinesListView.addItemDecoration(SpacesItemDecoration(4)) + mLinesListView.setAdapter(mAdapter) + //设置item 点击事件 + mAdapter.setOnLineItemClickListener(object :SwitchLineAdapter.LineItemClickListener{ + override fun onItemClick(position: Int, close: Boolean) { + mPresenter?.queryBusLineTasks(mData[position].lineId, position, close) + } + }) + } + + /** + * 设置布局宽高 + */ + private fun initWH() { + val window = window + val params = window.attributes + val windowManager = getSystemService(WINDOW_SERVICE) as WindowManager + val point = Point() + windowManager.defaultDisplay.getSize(point) //用于获取屏幕高度 + params.width = (point.x * 0.375).toInt() + params.height = ViewGroup.LayoutParams.MATCH_PARENT + window.attributes = params + window.setGravity(Gravity.START or Gravity.BOTTOM) + } + + /** + * 初始化数据 + */ + private fun initDatas() { + mPresenter?.queryBusLines() + } + + /** + * 查询返回绑定路线集合 + * @param data + */ + override fun onBusLinesChange(data: BusQueryLinesResponse?) { + if (null == data) { + showNoData(true) + return + } + var lastCommitLineid = SharedPrefs.getInstance(this).getInt(LASTCOMMITLINEID, -1) + if (data.data != null && data.data.size > 0) { + showNoData(false) + mData.clear() + mData.addAll(data.data) + mAdapter.notifyDataSetChanged() + if(lastCommitLineid>0){ + mData.forEachIndexed { index, line -> + if(line.lineId==lastCommitLineid){ + line.open = true + mPresenter?.queryBusLineTasks(line.lineId,index,false) + return + } + } + } + } else { + showNoData(true) + } + } + + override fun onChangeLineIdSuccess() { + ToastUtils.showLong(resources.getString(R.string.bus_change_line_commit_tip_s)) + mPresenter?.queryBusRoutes() + mAdapter.setOnLineItemClickListener(null) + mPresenter?.removeListener() + finish() + } + + override fun onBusLineTasks(lineTaskInfo: BusQueryLineTaskResponse?, position: Int) { + val result = mData[position] + if (result.taskList == null) { + result.taskList = ArrayList() + } + if (lineTaskInfo == null) { + result.haveTask = true + // 打开操作 + mAdapter.notifyItemChanged(position) + } else { + if (lineTaskInfo.data == null || lineTaskInfo.data.isEmpty()) { + result.haveTask = true + lineTaskInfo.data = ArrayList() + } + if (lineTaskInfo.data.size != result.taskList.size) { // 不相等有变动 重新赋值 + result.taskList.clear() + result.taskList.addAll(lineTaskInfo.data) + // 打开操作 + mAdapter.notifyItemChanged(position) + if(position==mData.size-1||position==mData.size-2){ + linearLayoutManager.stackFromEnd = true + }else{ + linearLayoutManager.stackFromEnd = false + } + mLinesListView.scrollToPosition(position) + } + } + } + + /** + * 有无数据UI显示 + * @param b + */ + private fun showNoData(b: Boolean) { + if (b) { + mLinesListView.visibility = View.GONE + mLineCommitBtn.visibility = View.GONE + mNoDatasView.visibility = View.VISIBLE + } else { + mLinesListView.visibility = View.VISIBLE + mLineCommitBtn.visibility = View.VISIBLE + mNoDatasView.visibility = View.GONE + } + } + + override fun onClick(v: View) { + //关闭dialog + if (v.id == R.id.switch_line_close) { + finish() + return + } + //切换路线提交 + if (v.id == R.id.switch_line_btn_commit) { + if(mAdapter.checkLineId!=-1&&mAdapter.checkTaskId!=-1){ + mPresenter?.commitSwitchLineId(mAdapter.checkTaskId,mAdapter.checkLineId) + }else{ + ToastUtils.showLong("请选择时间") + } + } + } + + override fun onDestroy() { + mPresenter!!.removeListener() + super.onDestroy() + } +} \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusSwitchLineView.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusSwitchLineView.java index febd6429b1..e71474dcc7 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusSwitchLineView.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusSwitchLineView.java @@ -1,6 +1,7 @@ package com.mogo.och.bus.ui; import com.mogo.commons.mvp.IView; +import com.mogo.och.bus.bean.BusQueryLineTaskResponse; import com.mogo.och.bus.bean.BusQueryLinesResponse; /** @@ -11,5 +12,7 @@ public interface BusSwitchLineView extends IView { void onBusLinesChange(BusQueryLinesResponse data); void onChangeLineIdSuccess(); + + void onBusLineTasks(BusQueryLineTaskResponse o, int position); } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/adapter/OpenItemAnimator.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/adapter/OpenItemAnimator.java new file mode 100644 index 0000000000..1571739e3b --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/adapter/OpenItemAnimator.java @@ -0,0 +1,655 @@ +package com.mogo.och.bus.ui.adapter; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.TimeInterpolator; +import android.animation.ValueAnimator; +import android.view.View; +import android.view.ViewPropertyAnimator; + +import androidx.annotation.NonNull; +import androidx.core.view.ViewCompat; +import androidx.recyclerview.widget.DefaultItemAnimator; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.SimpleItemAnimator; + +import java.util.ArrayList; +import java.util.List; + +/** + * This implementation of {@link RecyclerView.ItemAnimator} provides basic + * animations on remove, add, and move events that happen to the items in + * a RecyclerView. RecyclerView uses a DefaultItemAnimator by default. + * + * @see RecyclerView#setItemAnimator(RecyclerView.ItemAnimator) + */ +public class OpenItemAnimator extends DefaultItemAnimator { + private static final boolean DEBUG = false; + + private static TimeInterpolator sDefaultInterpolator; + + private ArrayList mPendingRemovals = new ArrayList<>(); + private ArrayList mPendingAdditions = new ArrayList<>(); + private ArrayList mPendingMoves = new ArrayList<>(); + private ArrayList mPendingChanges = new ArrayList<>(); + + ArrayList> mAdditionsList = new ArrayList<>(); + ArrayList> mMovesList = new ArrayList<>(); + ArrayList> mChangesList = new ArrayList<>(); + + ArrayList mAddAnimations = new ArrayList<>(); + ArrayList mMoveAnimations = new ArrayList<>(); + ArrayList mRemoveAnimations = new ArrayList<>(); + ArrayList mChangeAnimations = new ArrayList<>(); + + private static class MoveInfo { + public RecyclerView.ViewHolder holder; + public int fromX, fromY, toX, toY; + + MoveInfo(RecyclerView.ViewHolder holder, int fromX, int fromY, int toX, int toY) { + this.holder = holder; + this.fromX = fromX; + this.fromY = fromY; + this.toX = toX; + this.toY = toY; + } + } + + private static class ChangeInfo { + public RecyclerView.ViewHolder oldHolder, newHolder; + public int fromX, fromY, toX, toY; + private ChangeInfo(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder) { + this.oldHolder = oldHolder; + this.newHolder = newHolder; + } + + ChangeInfo(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, + int fromX, int fromY, int toX, int toY) { + this(oldHolder, newHolder); + this.fromX = fromX; + this.fromY = fromY; + this.toX = toX; + this.toY = toY; + } + + @Override + public String toString() { + return "ChangeInfo{" + + "oldHolder=" + oldHolder + + ", newHolder=" + newHolder + + ", fromX=" + fromX + + ", fromY=" + fromY + + ", toX=" + toX + + ", toY=" + toY + + '}'; + } + } + + @Override + public void runPendingAnimations() { + boolean removalsPending = !mPendingRemovals.isEmpty(); + boolean movesPending = !mPendingMoves.isEmpty(); + boolean changesPending = !mPendingChanges.isEmpty(); + boolean additionsPending = !mPendingAdditions.isEmpty(); + if (!removalsPending && !movesPending && !additionsPending && !changesPending) { + // nothing to animate + return; + } + // First, remove stuff + for (RecyclerView.ViewHolder holder : mPendingRemovals) { + animateRemoveImpl(holder); + } + mPendingRemovals.clear(); + // Next, move stuff + if (movesPending) { + final ArrayList moves = new ArrayList<>(); + moves.addAll(mPendingMoves); + mMovesList.add(moves); + mPendingMoves.clear(); + Runnable mover = new Runnable() { + @Override + public void run() { + for (MoveInfo moveInfo : moves) { + animateMoveImpl(moveInfo.holder, moveInfo.fromX, moveInfo.fromY, + moveInfo.toX, moveInfo.toY); + } + moves.clear(); + mMovesList.remove(moves); + } + }; + if (removalsPending) { + View view = moves.get(0).holder.itemView; + ViewCompat.postOnAnimationDelayed(view, mover, getRemoveDuration()); + } else { + mover.run(); + } + } + // Next, change stuff, to run in parallel with move animations + if (changesPending) { + final ArrayList changes = new ArrayList<>(); + changes.addAll(mPendingChanges); + mChangesList.add(changes); + mPendingChanges.clear(); + Runnable changer = new Runnable() { + @Override + public void run() { + for (ChangeInfo change : changes) { + animateChangeImpl(change); + } + changes.clear(); + mChangesList.remove(changes); + } + }; + if (removalsPending) { + RecyclerView.ViewHolder holder = changes.get(0).oldHolder; + ViewCompat.postOnAnimationDelayed(holder.itemView, changer, getRemoveDuration()); + } else { + changer.run(); + } + } + // Next, add stuff + if (additionsPending) { + final ArrayList additions = new ArrayList<>(); + additions.addAll(mPendingAdditions); + mAdditionsList.add(additions); + mPendingAdditions.clear(); + Runnable adder = new Runnable() { + @Override + public void run() { + for (RecyclerView.ViewHolder holder : additions) { + animateAddImpl(holder); + } + additions.clear(); + mAdditionsList.remove(additions); + } + }; + if (removalsPending || movesPending || changesPending) { + long removeDuration = removalsPending ? getRemoveDuration() : 0; + long moveDuration = movesPending ? getMoveDuration() : 0; + long changeDuration = changesPending ? getChangeDuration() : 0; + long totalDelay = removeDuration + Math.max(moveDuration, changeDuration); + View view = additions.get(0).itemView; + ViewCompat.postOnAnimationDelayed(view, adder, totalDelay); + } else { + adder.run(); + } + } + } + + @Override + public boolean animateRemove(final RecyclerView.ViewHolder holder) { + resetAnimation(holder); + mPendingRemovals.add(holder); + return true; + } + + private void animateRemoveImpl(final RecyclerView.ViewHolder holder) { + final View view = holder.itemView; + final ViewPropertyAnimator animation = view.animate(); + mRemoveAnimations.add(holder); + animation.setDuration(getRemoveDuration()).alpha(0).setListener( + new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animator) { + dispatchRemoveStarting(holder); + } + + @Override + public void onAnimationEnd(Animator animator) { + animation.setListener(null); + view.setAlpha(1); + dispatchRemoveFinished(holder); + mRemoveAnimations.remove(holder); + dispatchFinishedWhenDone(); + } + }).start(); + } + + @Override + public boolean animateAdd(final RecyclerView.ViewHolder holder) { + resetAnimation(holder); + holder.itemView.setAlpha(0); + mPendingAdditions.add(holder); + return true; + } + + void animateAddImpl(final RecyclerView.ViewHolder holder) { + final View view = holder.itemView; + final ViewPropertyAnimator animation = view.animate(); + mAddAnimations.add(holder); + animation.alpha(1).setDuration(getAddDuration()) + .setListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animator) { + dispatchAddStarting(holder); + } + + @Override + public void onAnimationCancel(Animator animator) { + view.setAlpha(1); + } + + @Override + public void onAnimationEnd(Animator animator) { + animation.setListener(null); + dispatchAddFinished(holder); + mAddAnimations.remove(holder); + dispatchFinishedWhenDone(); + } + }).start(); + } + + @Override + public boolean animateMove(final RecyclerView.ViewHolder holder, int fromX, int fromY, + int toX, int toY) { + final View view = holder.itemView; + fromX += (int) holder.itemView.getTranslationX(); + fromY += (int) holder.itemView.getTranslationY(); + resetAnimation(holder); + int deltaX = toX - fromX; + int deltaY = toY - fromY; + if (deltaX == 0 && deltaY == 0) { + dispatchMoveFinished(holder); + return false; + } + if (deltaX != 0) { + view.setTranslationX(-deltaX); + } + if (deltaY != 0) { + view.setTranslationY(-deltaY); + } + mPendingMoves.add(new MoveInfo(holder, fromX, fromY, toX, toY)); + return true; + } + + void animateMoveImpl(final RecyclerView.ViewHolder holder, int fromX, int fromY, int toX, int toY) { + final View view = holder.itemView; + final int deltaX = toX - fromX; + final int deltaY = toY - fromY; + if (deltaX != 0) { + view.animate().translationX(0); + } + if (deltaY != 0) { + view.animate().translationY(0); + } + // TODO: make EndActions end listeners instead, since end actions aren't called when + // vpas are canceled (and can't end them. why?) + // need listener functionality in VPACompat for this. Ick. + final ViewPropertyAnimator animation = view.animate(); + mMoveAnimations.add(holder); + animation.setDuration(getMoveDuration()).setListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animator) { + dispatchMoveStarting(holder); + } + + @Override + public void onAnimationCancel(Animator animator) { + if (deltaX != 0) { + view.setTranslationX(0); + } + if (deltaY != 0) { + view.setTranslationY(0); + } + } + + @Override + public void onAnimationEnd(Animator animator) { + animation.setListener(null); + dispatchMoveFinished(holder); + mMoveAnimations.remove(holder); + dispatchFinishedWhenDone(); + } + }).start(); + } + + @Override + public boolean animateChange(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, + int fromX, int fromY, int toX, int toY) { + if (oldHolder == newHolder) { + // Don't know how to run change animations when the same view holder is re-used. + // run a move animation to handle position changes. + return animateMove(oldHolder, fromX, fromY, toX, toY); + } + final float prevTranslationX = oldHolder.itemView.getTranslationX(); + final float prevTranslationY = oldHolder.itemView.getTranslationY(); + final float prevAlpha = oldHolder.itemView.getAlpha(); + resetAnimation(oldHolder); + int deltaX = (int) (toX - fromX - prevTranslationX); + int deltaY = (int) (toY - fromY - prevTranslationY); + // recover prev translation state after ending animation + oldHolder.itemView.setTranslationX(prevTranslationX); + oldHolder.itemView.setTranslationY(prevTranslationY); + oldHolder.itemView.setAlpha(prevAlpha); + if (newHolder != null) { + // carry over translation values + resetAnimation(newHolder); + newHolder.itemView.setTranslationX(-deltaX); + newHolder.itemView.setTranslationY(-deltaY); + newHolder.itemView.setAlpha(0); + } + mPendingChanges.add(new ChangeInfo(oldHolder, newHolder, fromX, fromY, toX, toY)); + return true; + } + + void animateChangeImpl(final ChangeInfo changeInfo) { + final RecyclerView.ViewHolder holder = changeInfo.oldHolder; + final View view = holder == null ? null : holder.itemView; + final RecyclerView.ViewHolder newHolder = changeInfo.newHolder; + final View newView = newHolder != null ? newHolder.itemView : null; + if (view != null) { + final ViewPropertyAnimator oldViewAnim = view.animate().setDuration( + getChangeDuration()); + mChangeAnimations.add(changeInfo.oldHolder); + oldViewAnim.translationX(changeInfo.toX - changeInfo.fromX); + oldViewAnim.translationY(changeInfo.toY - changeInfo.fromY); + oldViewAnim.alpha(0).setListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animator) { + dispatchChangeStarting(changeInfo.oldHolder, true); + } + + @Override + public void onAnimationEnd(Animator animator) { + oldViewAnim.setListener(null); + view.setAlpha(1); + view.setTranslationX(0); + view.setTranslationY(0); + dispatchChangeFinished(changeInfo.oldHolder, true); + mChangeAnimations.remove(changeInfo.oldHolder); + dispatchFinishedWhenDone(); + } + }).start(); + } + if (newView != null) { + final ViewPropertyAnimator newViewAnimation = newView.animate(); + mChangeAnimations.add(changeInfo.newHolder); + newViewAnimation.translationX(0).translationY(0).setDuration(getChangeDuration()) + .alpha(1).setListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animator) { + dispatchChangeStarting(changeInfo.newHolder, false); + } + @Override + public void onAnimationEnd(Animator animator) { + newViewAnimation.setListener(null); + newView.setAlpha(1); + newView.setTranslationX(0); + newView.setTranslationY(0); + dispatchChangeFinished(changeInfo.newHolder, false); + mChangeAnimations.remove(changeInfo.newHolder); + dispatchFinishedWhenDone(); + } + }).start(); + } + } + + private void endChangeAnimation(List infoList, RecyclerView.ViewHolder item) { + for (int i = infoList.size() - 1; i >= 0; i--) { + ChangeInfo changeInfo = infoList.get(i); + if (endChangeAnimationIfNecessary(changeInfo, item)) { + if (changeInfo.oldHolder == null && changeInfo.newHolder == null) { + infoList.remove(changeInfo); + } + } + } + } + + private void endChangeAnimationIfNecessary(ChangeInfo changeInfo) { + if (changeInfo.oldHolder != null) { + endChangeAnimationIfNecessary(changeInfo, changeInfo.oldHolder); + } + if (changeInfo.newHolder != null) { + endChangeAnimationIfNecessary(changeInfo, changeInfo.newHolder); + } + } + private boolean endChangeAnimationIfNecessary(ChangeInfo changeInfo, RecyclerView.ViewHolder item) { + boolean oldItem = false; + if (changeInfo.newHolder == item) { + changeInfo.newHolder = null; + } else if (changeInfo.oldHolder == item) { + changeInfo.oldHolder = null; + oldItem = true; + } else { + return false; + } + item.itemView.setAlpha(1); + item.itemView.setTranslationX(0); + item.itemView.setTranslationY(0); + dispatchChangeFinished(item, oldItem); + return true; + } + + @Override + public void endAnimation(RecyclerView.ViewHolder item) { + final View view = item.itemView; + // this will trigger end callback which should set properties to their target values. + view.animate().cancel(); + // TODO if some other animations are chained to end, how do we cancel them as well? + for (int i = mPendingMoves.size() - 1; i >= 0; i--) { + MoveInfo moveInfo = mPendingMoves.get(i); + if (moveInfo.holder == item) { + view.setTranslationY(0); + view.setTranslationX(0); + dispatchMoveFinished(item); + mPendingMoves.remove(i); + } + } + endChangeAnimation(mPendingChanges, item); + if (mPendingRemovals.remove(item)) { + view.setAlpha(1); + dispatchRemoveFinished(item); + } + if (mPendingAdditions.remove(item)) { + view.setAlpha(1); + dispatchAddFinished(item); + } + + for (int i = mChangesList.size() - 1; i >= 0; i--) { + ArrayList changes = mChangesList.get(i); + endChangeAnimation(changes, item); + if (changes.isEmpty()) { + mChangesList.remove(i); + } + } + for (int i = mMovesList.size() - 1; i >= 0; i--) { + ArrayList moves = mMovesList.get(i); + for (int j = moves.size() - 1; j >= 0; j--) { + MoveInfo moveInfo = moves.get(j); + if (moveInfo.holder == item) { + view.setTranslationY(0); + view.setTranslationX(0); + dispatchMoveFinished(item); + moves.remove(j); + if (moves.isEmpty()) { + mMovesList.remove(i); + } + break; + } + } + } + for (int i = mAdditionsList.size() - 1; i >= 0; i--) { + ArrayList additions = mAdditionsList.get(i); + if (additions.remove(item)) { + view.setAlpha(1); + dispatchAddFinished(item); + if (additions.isEmpty()) { + mAdditionsList.remove(i); + } + } + } + + // animations should be ended by the cancel above. + //noinspection PointlessBooleanExpression,ConstantConditions + if (mRemoveAnimations.remove(item) && DEBUG) { + throw new IllegalStateException("after animation is cancelled, item should not be in " + + "mRemoveAnimations list"); + } + + //noinspection PointlessBooleanExpression,ConstantConditions + if (mAddAnimations.remove(item) && DEBUG) { + throw new IllegalStateException("after animation is cancelled, item should not be in " + + "mAddAnimations list"); + } + + //noinspection PointlessBooleanExpression,ConstantConditions + if (mChangeAnimations.remove(item) && DEBUG) { + throw new IllegalStateException("after animation is cancelled, item should not be in " + + "mChangeAnimations list"); + } + + //noinspection PointlessBooleanExpression,ConstantConditions + if (mMoveAnimations.remove(item) && DEBUG) { + throw new IllegalStateException("after animation is cancelled, item should not be in " + + "mMoveAnimations list"); + } + dispatchFinishedWhenDone(); + } + + private void resetAnimation(RecyclerView.ViewHolder holder) { + if (sDefaultInterpolator == null) { + sDefaultInterpolator = new ValueAnimator().getInterpolator(); + } + holder.itemView.animate().setInterpolator(sDefaultInterpolator); + endAnimation(holder); + } + + @Override + public boolean isRunning() { + return (!mPendingAdditions.isEmpty() + || !mPendingChanges.isEmpty() + || !mPendingMoves.isEmpty() + || !mPendingRemovals.isEmpty() + || !mMoveAnimations.isEmpty() + || !mRemoveAnimations.isEmpty() + || !mAddAnimations.isEmpty() + || !mChangeAnimations.isEmpty() + || !mMovesList.isEmpty() + || !mAdditionsList.isEmpty() + || !mChangesList.isEmpty()); + } + + /** + * Check the state of currently pending and running animations. If there are none + * pending/running, call {@link #dispatchAnimationsFinished()} to notify any + * listeners. + */ + void dispatchFinishedWhenDone() { + if (!isRunning()) { + dispatchAnimationsFinished(); + } + } + + @Override + public void endAnimations() { + int count = mPendingMoves.size(); + for (int i = count - 1; i >= 0; i--) { + MoveInfo item = mPendingMoves.get(i); + View view = item.holder.itemView; + view.setTranslationY(0); + view.setTranslationX(0); + dispatchMoveFinished(item.holder); + mPendingMoves.remove(i); + } + count = mPendingRemovals.size(); + for (int i = count - 1; i >= 0; i--) { + RecyclerView.ViewHolder item = mPendingRemovals.get(i); + dispatchRemoveFinished(item); + mPendingRemovals.remove(i); + } + count = mPendingAdditions.size(); + for (int i = count - 1; i >= 0; i--) { + RecyclerView.ViewHolder item = mPendingAdditions.get(i); + item.itemView.setAlpha(1); + dispatchAddFinished(item); + mPendingAdditions.remove(i); + } + count = mPendingChanges.size(); + for (int i = count - 1; i >= 0; i--) { + endChangeAnimationIfNecessary(mPendingChanges.get(i)); + } + mPendingChanges.clear(); + if (!isRunning()) { + return; + } + + int listCount = mMovesList.size(); + for (int i = listCount - 1; i >= 0; i--) { + ArrayList moves = mMovesList.get(i); + count = moves.size(); + for (int j = count - 1; j >= 0; j--) { + MoveInfo moveInfo = moves.get(j); + RecyclerView.ViewHolder item = moveInfo.holder; + View view = item.itemView; + view.setTranslationY(0); + view.setTranslationX(0); + dispatchMoveFinished(moveInfo.holder); + moves.remove(j); + if (moves.isEmpty()) { + mMovesList.remove(moves); + } + } + } + listCount = mAdditionsList.size(); + for (int i = listCount - 1; i >= 0; i--) { + ArrayList additions = mAdditionsList.get(i); + count = additions.size(); + for (int j = count - 1; j >= 0; j--) { + RecyclerView.ViewHolder item = additions.get(j); + View view = item.itemView; + view.setAlpha(1); + dispatchAddFinished(item); + additions.remove(j); + if (additions.isEmpty()) { + mAdditionsList.remove(additions); + } + } + } + listCount = mChangesList.size(); + for (int i = listCount - 1; i >= 0; i--) { + ArrayList changes = mChangesList.get(i); + count = changes.size(); + for (int j = count - 1; j >= 0; j--) { + endChangeAnimationIfNecessary(changes.get(j)); + if (changes.isEmpty()) { + mChangesList.remove(changes); + } + } + } + + cancelAll(mRemoveAnimations); + cancelAll(mMoveAnimations); + cancelAll(mAddAnimations); + cancelAll(mChangeAnimations); + + dispatchAnimationsFinished(); + } + + void cancelAll(List viewHolders) { + for (int i = viewHolders.size() - 1; i >= 0; i--) { + viewHolders.get(i).itemView.animate().cancel(); + } + } + + /** + * {@inheritDoc} + *

+ * If the payload list is not empty, DefaultItemAnimator returns true. + * When this is the case: + *

    + *
  • If you override {@link #animateChange(RecyclerView.ViewHolder, RecyclerView.ViewHolder, int, int, int, int)}, both + * ViewHolder arguments will be the same instance. + *
  • + *
  • + * If you are not overriding {@link #animateChange(RecyclerView.ViewHolder, RecyclerView.ViewHolder, int, int, int, int)}, + * then DefaultItemAnimator will call {@link #animateMove(RecyclerView.ViewHolder, int, int, int, int)} and + * run a move animation instead. + *
  • + *
+ */ + @Override + public boolean canReuseUpdatedViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, + @NonNull List payloads) { + return !payloads.isEmpty() || super.canReuseUpdatedViewHolder(viewHolder, payloads); + } +} \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/adapter/SwitchLineAdapter.kt b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/adapter/SwitchLineAdapter.kt new file mode 100644 index 0000000000..44d5a0fe25 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/adapter/SwitchLineAdapter.kt @@ -0,0 +1,157 @@ +package com.mogo.och.bus.ui.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.appcompat.widget.AppCompatTextView +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.mogo.och.bus.R +import com.mogo.och.bus.bean.BusQueryLinesResponse +import com.mogo.och.bus.ui.adapter.SwitchLineAdapter.SwitchLineViewHolder + +/** + * 路线列表adapter + */ +class SwitchLineAdapter( + private val mContext: Context, + private val mData: List +) : RecyclerView.Adapter() { + companion object{ + const val TAG = "SwitchLineAdapter" + } + // RecyclerView设置点击事件 + private var mItemClickListener: LineItemClickListener? = null + var checkLineId:Int = -1 + var checkTaskId:Int = -1 + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): SwitchLineViewHolder { + val view = LayoutInflater.from(mContext).inflate( + R.layout.bus_switch_line_list_item, parent, false + ) + return SwitchLineViewHolder(view) + } + + override fun onBindViewHolder(holder: SwitchLineViewHolder, position: Int) { + val currentPosition = holder.bindingAdapterPosition + val line = mData[currentPosition] + holder.lineName.text = line.name + holder.lineEndName.text = mContext.getString(R.string.bus_line_goto_end, line.endSiteName) + holder.rvLineTask.layoutManager = GridLayoutManager(mContext, 3) + val switchLineTaskAdapter = SwitchLineTaskAdapter( + mContext, + checkTaskId, + line.taskList, + object : SwitchLineTaskAdapter.TaskItemClickListener { + override fun onItemClick(position: Int,isCheck:Boolean) { + if(isCheck) { + checkLineId = line.lineId + checkTaskId = line.taskList[position].id + }else{ + checkLineId=-1 + checkTaskId=-1 + } + } + }) + holder.rvLineTask.adapter = switchLineTaskAdapter + holder.rvLineTask.isFocusableInTouchMode = false + holder.actvShowMore.visibility = View.VISIBLE + + if(line.open){ + if(line.taskList==null||line.taskList.isEmpty()){ + holder.actvShowMore.text = mContext.getString(R.string.bus_switch_line_no_task) + holder.vLineTask.visibility = View.GONE + holder.rvLineTask.visibility = View.GONE + holder.selectIv.visibility = View.INVISIBLE + holder.itemView.setBackgroundResource(R.drawable.bus_shape_select_line_item_bg_normal) + }else { + holder.actvShowMore.text = mContext.getString(R.string.bus_switch_line_select_task) + holder.vLineTask.visibility = View.VISIBLE + holder.rvLineTask.visibility = View.VISIBLE + holder.selectIv.visibility = View.VISIBLE + holder.itemView.setBackgroundResource(R.drawable.bus_shape_select_line_item_bg_selected) + holder.selectIv.apply { + pivotX = 9.5f + pivotY = 17f + rotation = 90f + } + } + }else{ + if(line.haveTask){ + holder.actvShowMore.text = mContext.getString(R.string.bus_switch_line_no_task) + holder.vLineTask.visibility = View.GONE + holder.rvLineTask.visibility = View.GONE + holder.selectIv.visibility = View.INVISIBLE + holder.itemView.setBackgroundResource(R.drawable.bus_shape_select_line_item_bg_normal) + }else { + holder.actvShowMore.text = mContext.getString(R.string.bus_switch_line_select_task) + holder.vLineTask.visibility = View.GONE + holder.rvLineTask.visibility = View.GONE + holder.selectIv.visibility = View.VISIBLE + holder.itemView.setBackgroundResource(R.drawable.bus_shape_select_line_item_bg_normal) + holder.selectIv.apply { + pivotX = 9.5f + pivotY = 17f + rotation = 0f + } + } + } + + + //设置item点击事件 + holder.itemView.setOnClickListener { + if(holder.actvShowMore.text==mContext.getString(R.string.bus_switch_line_no_task)){ + return@setOnClickListener + } + mData.forEachIndexed { index, result -> + if(result.open){ + result.open = false; + notifyItemChanged(index) + if(result.taskList!=null) { + result.taskList.clear() + } + if(index==currentPosition){// 点击当前已经打开的item 去关闭定时网络请求 + mItemClickListener?.onItemClick(currentPosition,true) + return@setOnClickListener + } + } + } + mItemClickListener?.onItemClick(currentPosition,false) + line.open = holder.rvLineTask.visibility == View.GONE + } + } + + override fun getItemCount(): Int { + return mData.size + } + + fun setOnLineItemClickListener(itemClickListener: LineItemClickListener?) { + mItemClickListener = itemClickListener + } + + class SwitchLineViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val selectIv: ImageView + val lineName: AppCompatTextView//线路名称 + val lineEndName: AppCompatTextView //终点 + val actvShowMore: AppCompatTextView //选择时间 + val rvLineTask: RecyclerView// 排班时间 + val vLineTask: View// 白色分割线 + + init { + selectIv = itemView.findViewById(R.id.switch_line_item_select_iv) + lineName = itemView.findViewById(R.id.switch_line_name) + lineEndName = itemView.findViewById(R.id.switch_line_end_station) + rvLineTask = itemView.findViewById(R.id.rv_line_task_list) + vLineTask = itemView.findViewById(R.id.v_line_task) + actvShowMore = itemView.findViewById(R.id.actv_show_more) + } + } + + interface LineItemClickListener { + fun onItemClick(position: Int,close:Boolean) + } +} \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/adapter/SwitchLineTaskAdapter.kt b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/adapter/SwitchLineTaskAdapter.kt new file mode 100644 index 0000000000..8183e0efd4 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/adapter/SwitchLineTaskAdapter.kt @@ -0,0 +1,76 @@ +package com.mogo.och.bus.ui.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.mogo.eagle.core.utilcode.util.TimeUtils +import com.mogo.och.bus.R +import com.mogo.och.bus.bean.BusQueryLineTaskResponse +import com.mogo.och.bus.ui.adapter.SwitchLineTaskAdapter.SwitchLineTaskViewHolder + +/** + * 路线列表adapter + */ +class SwitchLineTaskAdapter( + private val mContext: Context, + private var checkTaskId:Int, + private val mData: List?, + private val mTaskItemClickListener: TaskItemClickListener? +) : RecyclerView.Adapter() { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SwitchLineTaskViewHolder { + val view = LayoutInflater.from(mContext).inflate( + R.layout.bus_switch_line_list_task_item, parent, false + ) + return SwitchLineTaskViewHolder(view) + } + + override fun onBindViewHolder(holder: SwitchLineTaskViewHolder, position: Int) { + val currentPosition = holder.bindingAdapterPosition + val task = mData!![currentPosition] + val taskStartTime = TimeUtils.millis2String(task.taskStartTime, "HH:mm") + holder.lineTask.text = taskStartTime + if(checkTaskId==task.id){ + holder.lineTask.setBackgroundResource(R.drawable.bus_shape_select_line_item_time_bg_selected) + }else{ + holder.lineTask.setBackgroundResource(R.drawable.bus_shape_select_line_item_time_bg) + } + holder.lineTask.setOnClickListener { + if(checkTaskId==task.id){ + checkTaskId = -1 + mTaskItemClickListener?.onItemClick(currentPosition,false) + }else { + resetOther() + checkTaskId = task.id + mTaskItemClickListener?.onItemClick(currentPosition,true) + } + notifyItemChanged(currentPosition) + } + } + + private fun resetOther() { + mData?.forEachIndexed { index, result -> + if(result.id==checkTaskId){ + checkTaskId = -1 + notifyItemChanged(index) + } + } + } + + override fun getItemCount(): Int { + return mData?.size ?: 0 + } + + class SwitchLineTaskViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val lineTask: TextView // 时间 + init { + lineTask = itemView.findViewById(R.id.actv_line_task) + } + } + + interface TaskItemClickListener { + fun onItemClick(position: Int,isCheck:Boolean) + } +} \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusTrajectoryManager.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusTrajectoryManager.java index 85654e2853..94ad2be2d1 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusTrajectoryManager.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusTrajectoryManager.java @@ -6,10 +6,10 @@ import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.GsonUtils; -import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.och.bus.bean.BusRoutesResult; import com.mogo.och.bus.constant.BusConst; import com.mogo.och.bus.model.BusOrderModel; +import com.zhidao.socket.utils.LoginStatusUtil; import java.util.concurrent.TimeUnit; @@ -50,7 +50,7 @@ public class BusTrajectoryManager { */ public void syncTrajectoryInfo() { BusRoutesResult routesResult = BusOrderModel.getInstance().getBusRoutesResult(); - if (BusOrderModel.getInstance().isWorking() && routesResult != null + if (LoginStatusUtil.isLogin() && routesResult != null && BusOrderModel.getInstance().getCurrentStationIndex() == 0 && !BusOrderModel.getInstance().isGoingToNextStation()) { CallerLogger.INSTANCE.d(M_BUS + TAG, "syncTrajectoryInfo() start."); diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_line_task_arrow.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_line_task_arrow.png new file mode 100644 index 0000000000..b32f0693a6 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_line_task_arrow.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable/bus_shape_select_line_item_bg_normal.xml b/OCH/mogo-och-bus/src/main/res/drawable/bus_shape_select_line_item_bg_normal.xml new file mode 100644 index 0000000000..272e718cce --- /dev/null +++ b/OCH/mogo-och-bus/src/main/res/drawable/bus_shape_select_line_item_bg_normal.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/drawable/bus_shape_select_line_item_bg_selected.xml b/OCH/mogo-och-bus/src/main/res/drawable/bus_shape_select_line_item_bg_selected.xml new file mode 100644 index 0000000000..e5faafb27b --- /dev/null +++ b/OCH/mogo-och-bus/src/main/res/drawable/bus_shape_select_line_item_bg_selected.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/drawable/bus_shape_select_line_item_time_bg.xml b/OCH/mogo-och-bus/src/main/res/drawable/bus_shape_select_line_item_time_bg.xml new file mode 100644 index 0000000000..ee8088637c --- /dev/null +++ b/OCH/mogo-och-bus/src/main/res/drawable/bus_shape_select_line_item_time_bg.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/drawable/bus_shape_select_line_item_time_bg_selected.xml b/OCH/mogo-och-bus/src/main/res/drawable/bus_shape_select_line_item_time_bg_selected.xml new file mode 100644 index 0000000000..e2b482ee5f --- /dev/null +++ b/OCH/mogo-och-bus/src/main/res/drawable/bus_shape_select_line_item_time_bg_selected.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/drawable/bus_switch_line_btn_commit.xml b/OCH/mogo-och-bus/src/main/res/drawable/bus_switch_line_btn_commit.xml index 324b9ece10..43f6d7af60 100644 --- a/OCH/mogo-och-bus/src/main/res/drawable/bus_switch_line_btn_commit.xml +++ b/OCH/mogo-och-bus/src/main/res/drawable/bus_switch_line_btn_commit.xml @@ -1,16 +1,10 @@ - - - - - - - - - - - \ No newline at end of file + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/drawable/bus_switch_line_btn_un_commit.xml b/OCH/mogo-och-bus/src/main/res/drawable/bus_switch_line_btn_un_commit.xml deleted file mode 100644 index d0ea7fa041..0000000000 --- a/OCH/mogo-och-bus/src/main/res/drawable/bus_switch_line_btn_un_commit.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/layout/activity_bus_switch_line.xml b/OCH/mogo-och-bus/src/main/res/layout/activity_bus_switch_line.xml index 91d2b5134d..e5d7b2d7f5 100644 --- a/OCH/mogo-och-bus/src/main/res/layout/activity_bus_switch_line.xml +++ b/OCH/mogo-och-bus/src/main/res/layout/activity_bus_switch_line.xml @@ -3,6 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" + xmlns:tools="http://schemas.android.com/tools" android:background="@color/bus_switch_line_bg"> + android:background="@drawable/bus_switch_line_btn_commit"/> + app:layout_goneMarginTop="@dimen/module_mogo_och_station_panel_container_margin_top_no_call" /> + android:background="@drawable/bus_shape_select_line_item_bg_normal"> + + + android:layout_marginEnd="@dimen/dp_80" + android:background="@drawable/bus_line_task_arrow" + app:layout_constraintBottom_toTopOf="@+id/v_line_task" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" /> - + android:textSize="@dimen/dp_46" + android:textStyle="bold" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:text="@string/bus_switch_line_name" /> - - - - - - - - - + app:layout_constraintBottom_toTopOf="@+id/v_line_task" + app:layout_constraintStart_toStartOf="@+id/switch_line_name" + app:layout_constraintTop_toBottomOf="@+id/switch_line_name" + tools:text="@string/bus_switch_line_end" /> + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/layout/bus_switch_line_list_task_item.xml b/OCH/mogo-och-bus/src/main/res/layout/bus_switch_line_list_task_item.xml new file mode 100644 index 0000000000..07cb6d0eec --- /dev/null +++ b/OCH/mogo-och-bus/src/main/res/layout/bus_switch_line_list_task_item.xml @@ -0,0 +1,18 @@ + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/values/colors.xml b/OCH/mogo-och-bus/src/main/res/values/colors.xml index 90e66e5a88..137af8caff 100644 --- a/OCH/mogo-och-bus/src/main/res/values/colors.xml +++ b/OCH/mogo-och-bus/src/main/res/values/colors.xml @@ -45,7 +45,9 @@ #FFFFE198 #FFFF9B00 #59FFFFFF - + + #B9C3E9 + #8E9DD4 #2B6EFF #00FFF8 diff --git a/OCH/mogo-och-bus/src/main/res/values/strings.xml b/OCH/mogo-och-bus/src/main/res/values/strings.xml index 0755243dd0..575d4cbd76 100644 --- a/OCH/mogo-och-bus/src/main/res/values/strings.xml +++ b/OCH/mogo-och-bus/src/main/res/values/strings.xml @@ -5,7 +5,9 @@ 启动成功 启动失败 自动驾驶 - 路线列表 + 任务列表 + 暂无任务 + 选择时间 路线: 起点: 终点: @@ -17,6 +19,7 @@ 当前车辆无路线\n请联系运营人员绑定 起点: 终点: + 往%1$s方向 更换路线成功 更换路线失败 diff --git a/OCH/mogo-och-bus/src/main/res/xml/bus_switch_line_list_item_scene.xml b/OCH/mogo-och-bus/src/main/res/xml/bus_switch_line_list_item_scene.xml new file mode 100644 index 0000000000..76ec386d95 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/res/xml/bus_switch_line_list_item_scene.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-common-module/build.gradle b/OCH/mogo-och-common-module/build.gradle index 1f74335527..927d871c22 100644 --- a/OCH/mogo-och-common-module/build.gradle +++ b/OCH/mogo-och-common-module/build.gradle @@ -1,6 +1,8 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' +apply plugin: 'kotlin-kapt' +apply plugin: 'com.alibaba.arouter' android { compileSdkVersion 31 @@ -14,6 +16,22 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles "consumer-rules.pro" + //ARouter apt 参数 + kapt { + useBuildCache = false + arguments { + arg("AROUTER_MODULE_NAME", project.getName()) + } + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = "1.8" } buildTypes { @@ -34,6 +52,10 @@ dependencies { androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' implementation rootProject.ext.dependencies.amapnavi3dmap + implementation rootProject.ext.dependencies.rxandroid + + implementation rootProject.ext.dependencies.arouter + kapt rootProject.ext.dependencies.aroutercompiler if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { implementation rootProject.ext.dependencies.mogoutils diff --git a/OCH/mogo-och-common-module/src/debug/java/com/mogo/och/common/module/utils/CollectionUtils.java b/OCH/mogo-och-common-module/src/debug/java/com/mogo/och/common/module/utils/CollectionUtils.java new file mode 100644 index 0000000000..a8ae762168 --- /dev/null +++ b/OCH/mogo-och-common-module/src/debug/java/com/mogo/och/common/module/utils/CollectionUtils.java @@ -0,0 +1,48 @@ +package com.mogo.och.common.module.utils; + +import com.mogo.cloud.network.OkHttpFactory; + +import java.lang.reflect.Field; +import java.util.List; + +import okhttp3.Interceptor; +import okhttp3.OkHttpClient; + +public class CollectionUtils { + public static void setInterceptor(){ + OkHttpClient okHttpClient = OkHttpFactory.Companion.getOkHttpClient(); + List interceptors = okHttpClient.interceptors(); + Field pro = getDeclaredField(interceptors, "list"); + pro.setAccessible(true); + List modifyerList = null; + try { + modifyerList = (List) pro.get(interceptors); + modifyerList.add(new SimpleInterceptor()); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + /** + * 获得名为field的字段 + * @Description:如果本身找不到去父类寻找 + * @param object + * @param fieldName + * @return Field + * @author luhao + * @since:2019年2月26日 下午4:06:16 + */ + public static Field getDeclaredField(Object object, String fieldName){ + Field field = null ; + Class clazz = object.getClass() ; + for(; clazz != Object.class ; clazz = clazz.getSuperclass()) { + try { + field = clazz.getDeclaredField(fieldName) ; + return field ; + } catch (Exception e) { + //这里甚么都不要做!并且这里的异常必须这样写,不能抛出去。 + //如果这里的异常打印或者往外抛,则就不会执行clazz = clazz.getSuperclass(),最后就不会进入到父类中了 + } + } + return null; + } +} diff --git a/OCH/mogo-och-common-module/src/debug/java/com/mogo/och/common/module/utils/SimpleInterceptor.kt b/OCH/mogo-och-common-module/src/debug/java/com/mogo/och/common/module/utils/SimpleInterceptor.kt new file mode 100644 index 0000000000..5bacbfe0d7 --- /dev/null +++ b/OCH/mogo-och-common-module/src/debug/java/com/mogo/och/common/module/utils/SimpleInterceptor.kt @@ -0,0 +1,75 @@ +package com.mogo.och.common.module.utils + +import android.util.Log +import okhttp3.* + +class SimpleInterceptor: Interceptor { + var first = true; + override fun intercept(chain: Interceptor.Chain): Response { + val original = chain.request() + val encodedPath = original.url().encodedPath() + Log.e("SimpleInterceptor",original.method()+ encodedPath+original.url().encodedQuery()) + when (encodedPath) { + "/autopilot-car-hailing/operation/v1/driver/bus/loginStatus" -> { + val builder = Response.Builder() + val create:ResponseBody + if(first) { + create = ResponseBody.create( + MediaType.parse("application/json"), + "{\"code\":0,\"msg\":\"\",\"data\":{\"servingStatus\":0,\"driverStatus\":1,\"orderNo\":\"12111\",\"purpose\":1,\"sn\":\"fjsdlfjslf\",\"plateNumber\":\"车牌号\",\"phone\":\"18811539480\",\"lineId\":\"线路id\",\"taskId\":\"任务id\"}}" + ) + first = false + }else{ + create = ResponseBody.create( + MediaType.parse("application/json"), + "{\"code\":0,\"msg\":\"\",\"data\":{\"servingStatus\":0,\"driverStatus\":0,\"orderNo\":\"12111\",\"purpose\":1,\"sn\":\"fjsdlfjslf\",\"plateNumber\":\"车牌号\",\"phone\":\"18811539480\",\"lineId\":\"线路id\",\"taskId\":\"任务id\"}}" + ) + first = true + } + builder.code(200) + builder.request(original) + builder.protocol(Protocol.HTTP_1_1) + builder.message("") + return builder.body(create).build() + } + "/autopilot-car-hailing/line/v2/driver/bus/task/query" -> { + val builder = Response.Builder() + val create = ResponseBody.create(MediaType.parse("application/json"), "{\"code\":0,\"msg\":\"\",\"data\":[{\"id\":1,\"taskStartTime\":1663722000000},{\"id\":2,\"taskStartTime\":1663725600000},{\"id\":3,\"taskStartTime\":1663729200000},{\"id\":4,\"taskStartTime\":1663732800000},{\"id\":5,\"taskStartTime\":1663736400000},{\"id\":6,\"taskStartTime\":1663740000000},{\"id\":7,\"taskStartTime\":1663743600000},{\"id\":8,\"taskStartTime\":1663747200000},{\"id\":9,\"taskStartTime\":1663750800000},{\"id\":10,\"taskStartTime\":1663754400000}]}") + builder.code(200) + builder.request(original) + builder.protocol(Protocol.HTTP_1_1) + builder.message("") + return builder.body(create).build() + } + "/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/startTask" -> { + val builder = Response.Builder() + val create = ResponseBody.create(MediaType.parse("application/json"), "{\"code\":0,\"msg\":\"\",\"data\":null}") + builder.code(200) + builder.request(original) + builder.protocol(Protocol.HTTP_1_1) + builder.message("") + return builder.body(create).build() + } + "/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/endOperation" -> { + val builder = Response.Builder() + val create = ResponseBody.create(MediaType.parse("application/json"), "{\"code\":0,\"msg\":\"\",\"data\":null}") + builder.code(200) + builder.request(original) + builder.protocol(Protocol.HTTP_1_1) + builder.message("") + return builder.body(create).build() + } + "/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/startOperation" -> { + val builder = Response.Builder() + val create = ResponseBody.create(MediaType.parse("application/json"), "{\"code\":0,\"msg\":\"\",\"data\":null}") + builder.code(200) + builder.request(original) + builder.protocol(Protocol.HTTP_1_1) + builder.message("") + return builder.body(create).build() + } + else -> {} + } + return chain.proceed(original) + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/DriverStatusQueryRespBean.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/bean/DriverStatusQueryRespBean.java similarity index 65% rename from OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/DriverStatusQueryRespBean.java rename to OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/bean/DriverStatusQueryRespBean.java index ac630c9ecf..0b8692ae59 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/DriverStatusQueryRespBean.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/bean/DriverStatusQueryRespBean.java @@ -1,4 +1,4 @@ -package com.mogo.och.taxi.bean; +package com.mogo.och.common.module.biz.bean; import com.mogo.eagle.core.data.BaseData; @@ -15,5 +15,11 @@ public class DriverStatusQueryRespBean extends BaseData { public int driverStatus; //1登录,0登出 public String orderNo; public int purpose; // 1 运营, 2 测试, 3演示 + + public String sn; + public String plateNumber;//车牌号 + public String phone;//手机号 + public Integer lineId;//线路id + public Integer taskId;//任务id } } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/TaxiLoginReqBean.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/bean/TaxiLoginReqBean.java similarity index 81% rename from OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/TaxiLoginReqBean.java rename to OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/bean/TaxiLoginReqBean.java index 0591d3f878..ebe1fa2731 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/TaxiLoginReqBean.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/bean/TaxiLoginReqBean.java @@ -1,8 +1,8 @@ -package com.mogo.och.taxi.bean; +package com.mogo.och.common.module.biz.bean; /** - * Created by pangfan on 2021/8/19 - * 司机端准备好或者乘客已验证上车请求参数 + * Created by yangyakun on 2021/8/19 + * 通过手机号验证码登录 */ public class TaxiLoginReqBean { diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/TaxiLoginRespBean.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/bean/TaxiLoginRespBean.java similarity index 54% rename from OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/TaxiLoginRespBean.java rename to OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/bean/TaxiLoginRespBean.java index c1265a9be3..9cda2a96c6 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/TaxiLoginRespBean.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/bean/TaxiLoginRespBean.java @@ -1,14 +1,14 @@ -package com.mogo.och.taxi.bean; +package com.mogo.och.common.module.biz.bean; import com.mogo.eagle.core.data.BaseData; /** - * Created by pangfan on 2021/8/19 - * 司机端准备好或者乘客已验证上车请求参数 + * Created by yangyakun on 2021/8/19 + * 通过验证码登录 */ public class TaxiLoginRespBean extends BaseData { - public TaxiLoginRespBean.Result data; + public Result data; public static class Result { public Double lat; diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/TaxiLoginSmsReqBean.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/bean/TaxiLoginSmsReqBean.java similarity index 54% rename from OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/TaxiLoginSmsReqBean.java rename to OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/bean/TaxiLoginSmsReqBean.java index 3a4d4d7a4f..3c246bc153 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/TaxiLoginSmsReqBean.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/bean/TaxiLoginSmsReqBean.java @@ -1,8 +1,8 @@ -package com.mogo.och.taxi.bean; +package com.mogo.och.common.module.biz.bean; /** - * Created by pangfan on 2021/8/19 - * 司机端准备好或者乘客已验证上车请求参数 + * Created by yyk on 2021/8/19 + * 获取验证码 */ public class TaxiLoginSmsReqBean { diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/TaxiLogoutReqBean.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/bean/TaxiLogoutReqBean.java similarity index 77% rename from OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/TaxiLogoutReqBean.java rename to OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/bean/TaxiLogoutReqBean.java index ced9b2eddb..22e63dd838 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/TaxiLogoutReqBean.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/bean/TaxiLogoutReqBean.java @@ -1,8 +1,8 @@ -package com.mogo.och.taxi.bean; +package com.mogo.och.common.module.biz.bean; /** - * Created by pangfan on 2021/8/19 - * 司机端准备好或者乘客已验证上车请求参数 + * Created by yyk on 2021/8/19 + * 登出请求参数 */ public class TaxiLogoutReqBean { public String sn; diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/callback/ILoginCallback.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/callback/ILoginCallback.java new file mode 100644 index 0000000000..481a2cd75b --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/callback/ILoginCallback.java @@ -0,0 +1,9 @@ +package com.mogo.och.common.module.biz.callback; + +import com.mogo.och.common.module.biz.bean.DriverStatusQueryRespBean; + +public interface ILoginCallback { + void loginSuccess(DriverStatusQueryRespBean data); + + void loginFail(boolean isLogin); +} diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/callback/ILoginViewCallback.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/callback/ILoginViewCallback.kt new file mode 100644 index 0000000000..033e900e77 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/callback/ILoginViewCallback.kt @@ -0,0 +1,13 @@ +package com.mogo.och.common.module.biz.callback + +interface ILoginViewCallback { + /** + * 展示登录页面 + */ + fun showLoginDialogFragment() + + /** + * 隐藏登录页面 + */ + fun hideLoginDialogFragment() +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/callback/ITaxiLoginCallback.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/callback/ITaxiLoginCallback.java similarity index 58% rename from OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/callback/ITaxiLoginCallback.java rename to OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/callback/ITaxiLoginCallback.java index a8f35171cb..5cbca0d853 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/callback/ITaxiLoginCallback.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/callback/ITaxiLoginCallback.java @@ -1,11 +1,4 @@ -package com.mogo.och.taxi.callback; - -import androidx.annotation.NonNull; - -import com.mogo.och.taxi.bean.OrderQueryRespBean; -import com.mogo.och.taxi.bean.OrderQueryRouteInfoRespBean; - -import java.util.List; +package com.mogo.och.common.module.biz.callback; /** * Created on 2021/9/8 diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/constant/LoginStatusManager.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/constant/LoginStatusManager.kt new file mode 100644 index 0000000000..8f290529b7 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/constant/LoginStatusManager.kt @@ -0,0 +1,38 @@ +package com.mogo.och.common.module.biz.constant + +object LoginStatusManager { + /** + * 登录状态 + */ + private var loginStatus: TaxiLoginStatusEnum = TaxiLoginStatusEnum.None + + @JvmStatic + fun setLoginStatus(status: Int) { + when (status) { + 0 -> { + this.loginStatus = TaxiLoginStatusEnum.Logout + } + 1 -> { + this.loginStatus = TaxiLoginStatusEnum.Login + } + else -> { + this.loginStatus = TaxiLoginStatusEnum.None + } + } + } + @JvmStatic + fun setLoginStatus(loginStatus: TaxiLoginStatusEnum) { + this.loginStatus = loginStatus + } + @JvmStatic + fun getLoginStatus(): TaxiLoginStatusEnum { + return loginStatus + } + @JvmStatic + fun isLogin():Boolean { + if(loginStatus== TaxiLoginStatusEnum.Login){ + return true + } + return false + } +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/constant/OchCommonConst.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/constant/OchCommonConst.kt new file mode 100644 index 0000000000..6e1891710e --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/constant/OchCommonConst.kt @@ -0,0 +1,30 @@ +package com.mogo.och.common.module.biz.constant + +import com.mogo.commons.debug.DebugConfig + +/** + * Created on 2021/12/6 + */ +class OchCommonConst { + companion object { + + private const val BASE_URL_OCH_DEV = "http://tech-dev.zhidaohulian.com" + private const val BASE_URL_OCH_QA = "https://tech-qa.zhidaohulian.com" + private const val BASE_URL_OCH_RELEASE = "https://tech.zhidaohulian.com" + + @JvmStatic + fun getBaseUrl(): String { + return when (DebugConfig.getNetMode()) { + DebugConfig.NET_MODE_DEV, DebugConfig.NET_MODE_DEMO -> BASE_URL_OCH_DEV + DebugConfig.NET_MODE_QA -> BASE_URL_OCH_QA + DebugConfig.NET_MODE_RELEASE -> BASE_URL_OCH_RELEASE + else -> BASE_URL_OCH_RELEASE + } + } + // token 失效 重新获取token + const val WAIT_TAKEN = 100046 + + const val LOGINSERVICE = "/ochbiz/common/login" + + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/TaxiLoginStatusEnum.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/constant/TaxiLoginStatusEnum.kt similarity index 90% rename from OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/TaxiLoginStatusEnum.kt rename to OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/constant/TaxiLoginStatusEnum.kt index 5e19782f5e..451196d777 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/TaxiLoginStatusEnum.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/constant/TaxiLoginStatusEnum.kt @@ -1,4 +1,4 @@ -package com.mogo.och.taxi.constant +package com.mogo.och.common.module.biz.constant /** * Created on 2022/08/19 diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiLoginModel.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/model/OchCommonLoginModel.kt similarity index 75% rename from OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiLoginModel.kt rename to OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/model/OchCommonLoginModel.kt index bdef0b53fd..b9874084bc 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiLoginModel.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/model/OchCommonLoginModel.kt @@ -1,21 +1,21 @@ -package com.mogo.och.taxi.model +package com.mogo.och.common.module.biz.model import android.annotation.SuppressLint import android.content.Context import com.mogo.eagle.core.data.BaseData import com.mogo.eagle.core.utilcode.util.NetworkUtils -import com.mogo.och.taxi.model.TaxiLoginModel -import com.mogo.och.taxi.callback.ITaxiLoginCallback -import com.mogo.module.common.MogoApisHandler -import com.mogo.map.navi.IMogoCarLocationChangedListener2 -import com.mogo.och.taxi.network.TaxiServiceManager -import com.mogo.och.taxi.network.TaxiServiceCallback +import com.mogo.eagle.core.utilcode.util.SharedPrefs import com.mogo.eagle.core.utilcode.util.ToastUtils -import com.mogo.och.taxi.R -import com.mogo.och.taxi.bean.TaxiLoginReqBean -import com.mogo.och.taxi.bean.TaxiLoginRespBean -import com.mogo.och.taxi.constant.TaxiLoginStatusEnum -import com.mogo.och.taxi.utils.StatusManager +import com.mogo.map.navi.IMogoCarLocationChangedListener2 +import com.mogo.module.common.MogoApisHandler +import com.mogo.och.common.module.R +import com.mogo.och.common.module.biz.bean.TaxiLoginReqBean +import com.mogo.och.common.module.biz.bean.TaxiLoginRespBean +import com.mogo.och.common.module.biz.callback.ITaxiLoginCallback +import com.mogo.och.common.module.biz.constant.TaxiLoginStatusEnum +import com.mogo.och.common.module.biz.constant.LoginStatusManager +import com.mogo.och.common.module.biz.network.OchCommonServiceCallback +import com.mogo.och.common.module.biz.network.OchCommonServiceManager /** * Created by pangfan on 2021/8/19 @@ -24,7 +24,7 @@ import com.mogo.och.taxi.utils.StatusManager * 网约车 - 出租车业务逻辑处理 */ @SuppressLint("StaticFieldLeak") -object TaxiLoginModel{ +object OchCommonLoginModel{ private val TAG = "TaxiLoginModel" private var mContext: Context? = null @@ -34,10 +34,7 @@ object TaxiLoginModel{ fun init(context: Context) { mContext = context.applicationContext // 达到起始站围栏监听 - MogoApisHandler.getInstance() - .apis - .registerCenterApi - .registerCarLocationChangedListener(TAG, mCarLocationChangedListener2) + MogoApisHandler.getInstance().apis.registerCenterApi.registerCarLocationChangedListener(TAG, mCarLocationChangedListener2) } fun hasInit():Boolean{ @@ -73,8 +70,8 @@ object TaxiLoginModel{ * 获取手机验证码 */ fun getPhoneCode(phone: String?) { - TaxiServiceManager.getInstance().getPhoneCode(mContext, phone, - object : TaxiServiceCallback { + OchCommonServiceManager.getInstance().getPhoneCode(mContext, phone, + object : OchCommonServiceCallback { override fun onSuccess(data: BaseData?) { if (null != data && 0 == data.code) { // 获取验证码成功 @@ -103,13 +100,16 @@ object TaxiLoginModel{ fun gotoLogin(phone: String, code: String) { val location4Login = TaxiLoginReqBean.Location4Login(mLatitude, mLongitude) - TaxiServiceManager.getInstance().gotoLoginBycode(mContext, phone, code, location4Login, - object : TaxiServiceCallback { + OchCommonServiceManager.getInstance().gotoLoginBycode(mContext, phone, code, location4Login, + object : OchCommonServiceCallback { override fun onSuccess(data: TaxiLoginRespBean?) { if (null != data && 0 == data.code) { // 获取验证码成功 ToastUtils.showShort(mContext?.getString(R.string.module_och_taxi_login_login_success)) - StatusManager.setLoginStatus(TaxiLoginStatusEnum.Login) + LoginStatusManager.setLoginStatus(TaxiLoginStatusEnum.Login) + mContext?.let { + SharedPrefs.getInstance(it).putString("och_account",phone) + } iTaxiLoginCallback?.loginSuccess() } else { if (data != null) { diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/model/OchCommonLoginStatusDefaultModel.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/model/OchCommonLoginStatusDefaultModel.kt new file mode 100644 index 0000000000..10348b6b2b --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/model/OchCommonLoginStatusDefaultModel.kt @@ -0,0 +1,44 @@ +package com.mogo.och.common.module.biz.model + +import android.annotation.SuppressLint +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.util.SharedPrefs +import com.mogo.och.common.module.biz.bean.DriverStatusQueryRespBean +import com.mogo.och.common.module.biz.callback.ILoginCallback +import com.mogo.och.common.module.biz.callback.ILoginViewCallback +import com.mogo.och.common.module.biz.constant.LoginStatusManager + +@SuppressLint("StaticFieldLeak") +object OchCommonLoginStatusDefaultModel : OchCommonLoginStatusModel() { + + + const val TAG = "OchCommonLoginStatusDefaultModel" + + + var loginCallback: ILoginCallback? = null + var loginViewCallback: ILoginViewCallback? = null + + override fun loginSuccess(data: DriverStatusQueryRespBean?) { + CallerLogger.d(SceneConstant.M_TAXI + TAG, "loginSuccess:${LoginStatusManager.isLogin()}") + if (LoginStatusManager.isLogin()) { + SharedPrefs.getInstance(mContext).putString("och_account", data?.data?.phone) + loginViewCallback?.hideLoginDialogFragment() + } else { + SharedPrefs.getInstance(mContext).putString("och_account", "") + loginViewCallback?.showLoginDialogFragment() + } + loginCallback?.loginSuccess(data) + } + + override fun loginFail(isLogin: Boolean) { + CallerLogger.d(SceneConstant.M_TAXI + TAG, "loginFail:$isLogin") + if (isLogin) { + loginViewCallback?.hideLoginDialogFragment() + } else { + loginViewCallback?.showLoginDialogFragment() + } + loginCallback?.loginFail(isLogin) + } + +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/model/OchCommonLoginStatusModel.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/model/OchCommonLoginStatusModel.java new file mode 100644 index 0000000000..0b1e9f0bfb --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/model/OchCommonLoginStatusModel.java @@ -0,0 +1,128 @@ +package com.mogo.och.common.module.biz.model; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI; + +import android.content.Context; + +import com.mogo.commons.AbsMogoApplication; +import com.mogo.eagle.core.data.BaseData; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.util.NetworkUtils; +import com.mogo.eagle.core.utilcode.util.ToastUtils; +import com.mogo.och.common.module.R; +import com.mogo.och.common.module.biz.bean.DriverStatusQueryRespBean; +import com.mogo.och.common.module.biz.bean.TaxiLogoutReqBean; +import com.mogo.och.common.module.biz.constant.LoginStatusManager; +import com.mogo.och.common.module.biz.constant.OchCommonConst; +import com.mogo.och.common.module.biz.network.OchCommonServiceCallback; +import com.mogo.och.common.module.biz.network.OchCommonServiceManager; +import com.mogo.och.common.module.utils.ToastUtilsOch; + +import java.util.concurrent.TimeUnit; + +import io.reactivex.Observable; +import io.reactivex.disposables.Disposable; + +public abstract class OchCommonLoginStatusModel { + + private static final String TAG = "OchCommonLoginStatusModel"; + + protected Context mContext; + + private Disposable subscribe; + + + public void init() { + mContext = AbsMogoApplication.getApp(); + queryCarStatus(); + } + + protected abstract void loginSuccess(DriverStatusQueryRespBean data); + + protected abstract void loginFail(boolean isLogin); + + /** + * 接单状态和登录状态查询 + * 1、初始化查询 + * 2、错误重试 + * 3、错误重试 + * 4、登出后重试 + * 5、变更出车状态查下 + * 6、变更出车状态查下 + * 7、网络状态变更后查询 + * 8、登录页面关闭后查下状态 + */ + public void queryCarStatus() { + OchCommonServiceManager.getInstance().queryDriverServiceStatus(mContext, + new OchCommonServiceCallback() { + @Override + public void onSuccess(DriverStatusQueryRespBean data) { + if (null != data && 0 == data.code) { + LoginStatusManager.setLoginStatus(data.data.driverStatus); + CallerLogger.INSTANCE.d(M_TAXI + TAG, "changeCarStatus:" + LoginStatusManager.getLoginStatus()); + loginSuccess(data); + } + } + + @Override + public void onError() { + if (!NetworkUtils.isConnected(mContext)) { + ToastUtils.showShort(mContext.getString(R.string.network_error_tip)); + } else { + ToastUtils.showShort(mContext.getString(R.string.request_error_tip)); + } + subscribe = Observable.timer(5, TimeUnit.SECONDS).subscribe(aLong -> { + queryCarStatus(); + }); + } + + @Override + public void onFail(int code, String msg) { + ToastUtilsOch.showWithCodeMessage(code,msg); + if(code== OchCommonConst.WAIT_TAKEN){ + subscribe = Observable.timer(3, TimeUnit.SECONDS).subscribe(aLong -> { + queryCarStatus(); + }); + }else { + loginFail(LoginStatusManager.isLogin()); + } + } + }); + } + + // 登出 + public void logout(double mLatitude,double mLongitude) { + TaxiLogoutReqBean.Location4Login location4Login = new TaxiLogoutReqBean.Location4Login(mLatitude, mLongitude); + OchCommonServiceManager.getInstance().logout(mContext,location4Login, + new OchCommonServiceCallback() { + @Override + public void onSuccess(BaseData data) { + if (null != data && 0 == data.code) { + loginFail(false); + queryCarStatus(); + } + } + + @Override + public void onError() { + if (!NetworkUtils.isConnected(mContext)) { + ToastUtils.showShort(mContext.getString(R.string.network_error_tip)); + } else { + ToastUtils.showShort(mContext.getString(R.string.request_error_tip)); + } + } + + @Override + public void onFail(int code, String msg) { + ToastUtilsOch.showWithCodeMessage(code,msg); + } + }); + } + + public void release() { + if(subscribe!=null&&!subscribe.isDisposed()){ + subscribe.dispose(); + } + } + +} diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/OchCommonServiceApiNew.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/OchCommonServiceApiNew.java new file mode 100644 index 0000000000..d31f624578 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/OchCommonServiceApiNew.java @@ -0,0 +1,81 @@ +package com.mogo.och.common.module.biz.network; +import com.mogo.eagle.core.data.BaseData; +import com.mogo.och.common.module.biz.bean.DriverStatusQueryRespBean; +import com.mogo.och.common.module.biz.bean.TaxiLoginReqBean; +import com.mogo.och.common.module.biz.bean.TaxiLoginRespBean; +import com.mogo.och.common.module.biz.bean.TaxiLoginSmsReqBean; +import com.mogo.och.common.module.biz.bean.TaxiLogoutReqBean; + +import io.reactivex.Observable; +import retrofit2.http.Body; +import retrofit2.http.GET; +import retrofit2.http.Header; +import retrofit2.http.Headers; +import retrofit2.http.POST; +import retrofit2.http.Path; +import retrofit2.http.Query; + +/** + * Created by pangfan on 2021/8/19 + * + * 网约车-出租车接口定义 + */ +interface OchCommonServiceApiNew { + /** + * 获取手机验证码 + * + * @return + */ + @Headers( {"Content-type:application/json;charset=UTF-8"} ) + @POST( "/autopilot-car-hailing/driver/v2/driver/taxi/sendSms" ) + Observable getPhoneCode(@Header("appId") String appId + , @Header("ticket") String ticket, @Body TaxiLoginSmsReqBean 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/startOperation" ) + Observable gotoLoginBycode4Taxi(@Header("appId") String appId + , @Header("ticket") String ticket, @Body TaxiLoginReqBean data); + + /** + * 通过验证码登录 + * @param appId + * @param ticket + * @param data + * @return + */ + @Headers( {"Content-type:application/json;charset=UTF-8"} ) + @POST( "/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/startOperation" ) + Observable gotoLoginBycode4Bus(@Header("appId") String appId + , @Header("ticket") String ticket, @Body TaxiLoginReqBean data); + /** + * 登出接口 + */ + @Headers({"Content-type:application/json;charset=UTF-8"}) + @POST("/autopilot-car-hailing/cab/flow/v1/driver/taxi/endOperation") + Observable logout4Taxi(@Header("appId") String appId, @Header("ticket") String ticket, + @Body TaxiLogoutReqBean data); + /** + * 登出接口 + */ + @Headers({"Content-type:application/json;charset=UTF-8"}) + @POST("/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/endOperation") + Observable logout4Bus(@Header("appId") String appId, @Header("ticket") String ticket, + @Body TaxiLogoutReqBean data); + + /** + * 接单状态和登录状态查询 出租车司机端、小巴车司机端、小巴车乘客端 + * @param sn + * @return + */ + @Headers( {"Content-type:application/json;charset=UTF-8"} ) + @GET( "/autopilot-car-hailing/operation/v1/driver/{flavor}/loginStatus") + Observable queryDriverServiceStatusAndLoginStatus(@Path(value = "flavor",encoded = true) String flavor,@Header ("appId") String appId + , @Header("ticket") String ticket, @Query("sn") String sn); + +} diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/OchCommonServiceCallback.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/OchCommonServiceCallback.java new file mode 100644 index 0000000000..8433def5f0 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/OchCommonServiceCallback.java @@ -0,0 +1,18 @@ +package com.mogo.och.common.module.biz.network; + +/** + * @author congtaowang + * @since 2021/1/15 + * + * 修改订单状态回调接口 + */ +public interface OchCommonServiceCallback< T > { + + void onSuccess(T data); + + void onFail(int code, String msg); + + default void onError() { + + } +} diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/OchCommonServiceManager.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/OchCommonServiceManager.java new file mode 100644 index 0000000000..ecc0129cfe --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/OchCommonServiceManager.java @@ -0,0 +1,187 @@ +package com.mogo.och.common.module.biz.network; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI; + +import android.content.Context; + +import com.mogo.cloud.passport.MoGoAiCloudClient; +import com.mogo.cloud.passport.MoGoAiCloudClientConfig; +import com.mogo.commons.debug.DebugConfig; +import com.mogo.eagle.core.data.BaseData; +import com.mogo.eagle.core.network.MoGoRetrofitFactory; +import com.mogo.eagle.core.network.RequestOptions; +import com.mogo.eagle.core.network.SubscribeImpl; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.och.common.module.biz.bean.DriverStatusQueryRespBean; +import com.mogo.och.common.module.biz.bean.TaxiLoginReqBean; +import com.mogo.och.common.module.biz.bean.TaxiLoginRespBean; +import com.mogo.och.common.module.biz.bean.TaxiLoginSmsReqBean; +import com.mogo.och.common.module.biz.bean.TaxiLogoutReqBean; +import com.mogo.och.common.module.biz.constant.OchCommonConst; + +import io.reactivex.Observable; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.schedulers.Schedulers; + +/** + * Created by pangfan on 2021/8/19 + */ +public class OchCommonServiceManager { + private static final String TAG = OchCommonServiceManager.class.getSimpleName(); + + private static final class SingletonHolder { + private static final OchCommonServiceManager INSTANCE = new OchCommonServiceManager(); + } + + public static OchCommonServiceManager getInstance() { + return SingletonHolder.INSTANCE; + } + + private OchCommonServiceApiNew mOCHTaxiServiceApi; + + private OchCommonServiceManager() { + if (mOCHTaxiServiceApi == null){ + mOCHTaxiServiceApi = MoGoRetrofitFactory.getInstance(OchCommonConst.getBaseUrl()).create(OchCommonServiceApiNew.class); + } + } + + /** + * 获取手机验证码 + * @param context + * @param callback + */ + public void getPhoneCode(Context context, String phone, + OchCommonServiceCallback callback) { + mOCHTaxiServiceApi.getPhoneCode(MoGoAiCloudClientConfig.getInstance().getServiceAppId() + , MoGoAiCloudClientConfig.getInstance().getToken() + , new TaxiLoginSmsReqBean(phone)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(getSubscribeImpl(context, callback, "getPhoneCode")); + } + /** + * 通过验证码登录 + * @param context + * @param callback + */ + public void gotoLoginBycode(Context context, String phone, String code, + TaxiLoginReqBean.Location4Login location4Login, + OchCommonServiceCallback callback) { + String sn = MoGoAiCloudClientConfig.getInstance().getSn(); + Observable taxiLoginRespBeanObservable = null; + switch (DebugConfig.getProductFlavor()) { + case "fPadLenovoOchTaxi": {//出租车司机 + taxiLoginRespBeanObservable = mOCHTaxiServiceApi.gotoLoginBycode4Taxi(MoGoAiCloudClientConfig.getInstance().getServiceAppId() + , MoGoAiCloudClientConfig.getInstance().getToken() + , new TaxiLoginReqBean(phone, code, sn, location4Login)); + break; + } + case "fPadLenovoOchBus": {//小巴车司机 + taxiLoginRespBeanObservable = mOCHTaxiServiceApi.gotoLoginBycode4Bus(MoGoAiCloudClientConfig.getInstance().getServiceAppId() + , MoGoAiCloudClientConfig.getInstance().getToken() + , new TaxiLoginReqBean(phone, code, sn, location4Login)); + break; + } + } + if (taxiLoginRespBeanObservable != null) { + taxiLoginRespBeanObservable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) + .subscribe(getSubscribeImpl(context, callback, "gotoLoginBycode")); + } + } + + /** + * 登出 + */ + public void logout(Context context, TaxiLogoutReqBean.Location4Login location4Login, OchCommonServiceCallback callback) { + Observable logout = null; + switch (DebugConfig.getProductFlavor()) { + case "fPadLenovoOchTaxi": {//出租车司机 + logout = mOCHTaxiServiceApi.logout4Taxi( + MoGoAiCloudClientConfig.getInstance().getServiceAppId(), + MoGoAiCloudClientConfig.getInstance().getToken(), + new TaxiLogoutReqBean(MoGoAiCloudClientConfig.getInstance().getSn(), location4Login)); + break; + } + case "fPadLenovoOchBus": {//小巴车司机 + logout = mOCHTaxiServiceApi.logout4Bus( + MoGoAiCloudClientConfig.getInstance().getServiceAppId(), + MoGoAiCloudClientConfig.getInstance().getToken(), + new TaxiLogoutReqBean(MoGoAiCloudClientConfig.getInstance().getSn(), location4Login)); + break; + } + } + if (logout != null) { + logout.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) + .subscribe(getSubscribeImpl(context, callback, "logout")); + } + } + + /** + * 接单状态和登录状态查询 + * + * @param context + * @param callback + */ + public void queryDriverServiceStatus(Context context, + OchCommonServiceCallback callback) { + if (MoGoAiCloudClientConfig.getInstance().getToken().isEmpty()) { + callback.onFail(OchCommonConst.WAIT_TAKEN, "等待令牌中请稍等"); + MoGoAiCloudClient.getInstance().refreshToken(); + return; + } + String flavor = ""; + switch (DebugConfig.getProductFlavor()) { + case "fPadLenovoOchTaxi": {//出租车司机 + flavor = "taxi"; + break; + } + case "fPadLenovoOchBus": {//小巴车司机 + flavor = "bus"; + break; + } + case "fPadLenovoOchBusPassenger": {//小巴车乘客 + flavor = "bus/passenger"; + break; + } + } + mOCHTaxiServiceApi.queryDriverServiceStatusAndLoginStatus(flavor, MoGoAiCloudClientConfig.getInstance().getServiceAppId() + , MoGoAiCloudClientConfig.getInstance().getToken() + , MoGoAiCloudClientConfig.getInstance().getSn()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(getSubscribeImpl(context, callback, "queryDriverServiceStatus")); + } + + + private SubscribeImpl getSubscribeImpl( + Context context, OchCommonServiceCallback callback, String apiName) { + return new SubscribeImpl(RequestOptions.create(context)) { + @Override + public void onSuccess(T o) { + super.onSuccess(o); + CallerLogger.INSTANCE.d(M_TAXI + TAG, apiName + ": onSuccess() " + o.msg); + if (callback != null) { + callback.onSuccess(o); + } + } + + @Override + public void onError(Throwable e) { + super.onError(e); + CallerLogger.INSTANCE.e(M_TAXI + TAG, apiName + ": onError() " + e.getMessage()); + if (callback != null) { + callback.onError(); + } + } + + @Override + public void onError(String message, int code) { + super.onError(message, code); + CallerLogger.INSTANCE.e(M_TAXI + TAG, String.format(apiName + ": onError() code = %d; message = %s;", code, message)); + if (callback != null) { + callback.onFail(code, message); + } + } + }; + } +} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiLoginPresenter.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/presenter/OchCommonLoginPresenter.kt similarity index 79% rename from OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiLoginPresenter.kt rename to OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/presenter/OchCommonLoginPresenter.kt index 1497683ddc..49b8446a77 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiLoginPresenter.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/presenter/OchCommonLoginPresenter.kt @@ -1,4 +1,4 @@ -package com.mogo.och.taxi.presenter +package com.mogo.och.common.module.biz.presenter import androidx.lifecycle.LifecycleOwner import com.mogo.commons.AbsMogoApplication @@ -7,10 +7,10 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.util.RegexUtils import com.mogo.eagle.core.utilcode.util.ToastUtils -import com.mogo.och.taxi.R -import com.mogo.och.taxi.callback.ITaxiLoginCallback -import com.mogo.och.taxi.model.TaxiLoginModel -import com.mogo.och.taxi.ui.TaxiLoginDialogFragment +import com.mogo.och.common.module.R +import com.mogo.och.common.module.biz.ui.TaxiLoginDialogFragment +import com.mogo.och.common.module.biz.callback.ITaxiLoginCallback +import com.mogo.och.common.module.biz.model.OchCommonLoginModel import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable @@ -23,7 +23,7 @@ import java.util.concurrent.TimeUnit * * 描述 */ -class TaxiLoginPresenter(view: TaxiLoginDialogFragment?) : +class OchCommonLoginPresenter(view: TaxiLoginDialogFragment?) : Presenter(view), ITaxiLoginCallback { private var countDownDisposable: Disposable? = null @@ -33,12 +33,12 @@ class TaxiLoginPresenter(view: TaxiLoginDialogFragment?) : } private fun initListeners() { - TaxiLoginModel.init(AbsMogoApplication.getApp()) - TaxiLoginModel.setiTaxiLoginCallback(this) + OchCommonLoginModel.init(AbsMogoApplication.getApp()) + OchCommonLoginModel.setiTaxiLoginCallback(this) } fun getPhoneCode(phone:String){ - if(!TaxiLoginModel.hasInit()){ + if(!OchCommonLoginModel.hasInit()){ initListeners() } if (!RegexUtils.isMobileExact(phone)) { @@ -46,7 +46,7 @@ class TaxiLoginPresenter(view: TaxiLoginDialogFragment?) : mView?.inputPhoneError() return } - TaxiLoginModel.getPhoneCode(phone) + OchCommonLoginModel.getPhoneCode(phone) } override fun onCreate(owner: LifecycleOwner) { @@ -58,7 +58,7 @@ class TaxiLoginPresenter(view: TaxiLoginDialogFragment?) : override fun onDestroy(owner: LifecycleOwner) { super.onDestroy(owner) - TaxiLoginModel.release() + OchCommonLoginModel.release() countDownDisposable?.let { if (!it.isDisposed) { it.dispose() @@ -67,7 +67,7 @@ class TaxiLoginPresenter(view: TaxiLoginDialogFragment?) : } companion object { - private val TAG = TaxiLoginPresenter::class.java.simpleName + private val TAG = OchCommonLoginPresenter::class.java.simpleName } override fun getPhoneCodeSuccess() { @@ -94,7 +94,7 @@ class TaxiLoginPresenter(view: TaxiLoginDialogFragment?) : } fun gotoLogin(phone: String, code: String) { - if(!TaxiLoginModel.hasInit()){ + if(!OchCommonLoginModel.hasInit()){ initListeners() } if (!RegexUtils.isMobileExact(phone)) { @@ -107,6 +107,6 @@ class TaxiLoginPresenter(view: TaxiLoginDialogFragment?) : return } mView?.closeSoftInput() - TaxiLoginModel.gotoLogin(phone,code) + OchCommonLoginModel.gotoLogin(phone,code) } } \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/presenter/OchCommonLoginStatusDefaultPresenter.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/presenter/OchCommonLoginStatusDefaultPresenter.kt new file mode 100644 index 0000000000..a4c77ec190 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/presenter/OchCommonLoginStatusDefaultPresenter.kt @@ -0,0 +1,48 @@ +package com.mogo.och.common.module.biz.presenter + +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleObserver +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.OnLifecycleEvent +import com.mogo.och.common.module.biz.callback.ILoginCallback +import com.mogo.och.common.module.biz.callback.ILoginViewCallback +import com.mogo.och.common.module.biz.model.OchCommonLoginStatusDefaultModel + +/** + * @author yangyakun + * @since 2020-09-19 + */ +class OchCommonLoginStatusDefaultPresenter : LifecycleObserver { + private var isFirstShow = true + + @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) + fun onCreate(owner: LifecycleOwner) { + OchCommonLoginStatusDefaultModel.init() + } + + @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) + fun onResume(owner: LifecycleOwner) { + if (isFirstShow) { + isFirstShow = false + } else { + queryLoginStatus() + } + } + @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) + fun onDestory(owner: LifecycleOwner) { + OchCommonLoginStatusDefaultModel.release() + } + + fun queryLoginStatus() { + OchCommonLoginStatusDefaultModel.queryCarStatus() + } + + fun logOut(mLatitude:Double,mLongitude:Double){ + OchCommonLoginStatusDefaultModel.logout(mLatitude, mLongitude) + } + + fun setLoginCallback(loginCallback: ILoginCallback?,loginViewCallback: ILoginViewCallback?){ + OchCommonLoginStatusDefaultModel.loginCallback = loginCallback + OchCommonLoginStatusDefaultModel.loginViewCallback = loginViewCallback + } +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/provider/LoginService.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/provider/LoginService.kt new file mode 100644 index 0000000000..a311da107f --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/provider/LoginService.kt @@ -0,0 +1,29 @@ +package com.mogo.och.common.module.biz.provider + +import androidx.fragment.app.Fragment +import com.alibaba.android.arouter.facade.template.IProvider +import com.mogo.och.common.module.biz.callback.ILoginCallback + +interface LoginService : IProvider { + /** + * 注册页面 + * @param fragment 主页面 + * @param callback 回调 + */ + fun registerFragment(fragment: Fragment?,loginCallback: ILoginCallback?) + + fun unRegisterFragment() + + /** + * 查询登录状态 + */ + fun queryLoginStatus():Boolean + + fun queryLoginStatusByNet() + + /** + * 登出 + */ + fun loginOut(mLatitude:Double,mLongitude:Double) + +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/provider/LoginServiceImpl.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/provider/LoginServiceImpl.kt new file mode 100644 index 0000000000..352fa57e6b --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/provider/LoginServiceImpl.kt @@ -0,0 +1,110 @@ +package com.mogo.och.common.module.biz.provider + +import android.content.Context +import android.content.DialogInterface +import androidx.fragment.app.DialogFragment +import androidx.fragment.app.Fragment +import com.alibaba.android.arouter.facade.annotation.Route +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.util.AppStateManager.currentActivity +import com.mogo.och.common.module.biz.callback.ILoginCallback +import com.mogo.och.common.module.biz.callback.ILoginViewCallback +import com.mogo.och.common.module.biz.constant.LoginStatusManager +import com.mogo.och.common.module.biz.constant.OchCommonConst +import com.mogo.och.common.module.biz.presenter.OchCommonLoginStatusDefaultPresenter +import com.mogo.och.common.module.biz.ui.TaxiLoginDialogFragment +import com.mogo.och.common.module.biz.ui.TaxiLoginDialogFragment.Companion.newInstance +import java.lang.ref.WeakReference + +@Route(path = OchCommonConst.LOGINSERVICE) +class LoginServiceImpl : LoginService,ILoginViewCallback { + + companion object{ + const val TAG = "LoginServiceImpl" + } + + private var fragment: Fragment?=null + private var taxiLoginDialogFragment: WeakReference? = null + private var presenter: OchCommonLoginStatusDefaultPresenter?=null + + override fun init(context: Context) { + + } + + override fun registerFragment(fragment: Fragment?,loginCallback: ILoginCallback?) { + presenter = OchCommonLoginStatusDefaultPresenter() + this.fragment = fragment + presenter?.let { + it.setLoginCallback(loginCallback, this) + this.fragment?.lifecycle?.addObserver(it) + } + + } + + override fun unRegisterFragment() { + this.presenter?.let { + it.setLoginCallback(null,null) + this.fragment?.lifecycle?.removeObserver(it) + } + this.fragment = null + } + + + override fun showLoginDialogFragment() { + fragment?.let { + CallerHmiManager.hideToolsView() + val parentFragmentManager = it.parentFragmentManager + val fragmentByTag: Fragment? = parentFragmentManager.findFragmentByTag(TAG) + if (fragmentByTag is DialogFragment) { + if (fragmentByTag.dialog != null && fragmentByTag.dialog!!.isShowing) { + return + } + if (fragmentByTag.dialog != null && fragmentByTag.isAdded) { + if (currentActivity() == null) { // 没有在当前应用内 在启动页面关闭应用 + d(SceneConstant.M_TAXI + TAG, "showLoginDialogFragment 权限验证") + return + } + } + } + + if (taxiLoginDialogFragment?.get() == null) { + taxiLoginDialogFragment = WeakReference(newInstance()) + } + val taxiLoginDialog = taxiLoginDialogFragment?.get() + if (taxiLoginDialog != null) { + if (taxiLoginDialog.dialog != null && taxiLoginDialog.dialog!!.isShowing) { + return + } + if (taxiLoginDialog.isAdded) { //解决方法就是添加这行代码,如果已经添加了,就移除掉然后再show,就不会出现Fragment already added的错误了。 + parentFragmentManager.beginTransaction().remove(taxiLoginDialog) + .commitAllowingStateLoss() + } + d(SceneConstant.M_TAXI + TAG, "showLoginDialogFragment 展示登录界面") + taxiLoginDialog.show(parentFragmentManager, TAG) + taxiLoginDialog.setOnDismissListener(DialogInterface.OnDismissListener { dialog: DialogInterface? -> + taxiLoginDialogFragment?.clear() + presenter?.queryLoginStatus() + }) + } + } + } + override fun hideLoginDialogFragment() { + d(SceneConstant.M_TAXI + TAG, "hideLoginDialogFragment 隐藏登录界面") + if (taxiLoginDialogFragment?.get() != null) { + taxiLoginDialogFragment?.get()?.dismissAllowingStateLoss() + } + } + override fun queryLoginStatus():Boolean { + return LoginStatusManager.isLogin() + } + + override fun queryLoginStatusByNet() { + presenter?.queryLoginStatus() + } + + override fun loginOut(mLatitude:Double,mLongitude:Double) { + presenter?.logOut(mLatitude,mLongitude) + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiLoginDialogFragment.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/ui/TaxiLoginDialogFragment.kt similarity index 96% rename from OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiLoginDialogFragment.kt rename to OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/ui/TaxiLoginDialogFragment.kt index 19da74fbae..b08e15472d 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiLoginDialogFragment.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/ui/TaxiLoginDialogFragment.kt @@ -1,4 +1,4 @@ -package com.mogo.och.taxi.ui +package com.mogo.och.common.module.biz.ui import android.content.DialogInterface import android.graphics.Rect @@ -15,7 +15,6 @@ import androidx.core.widget.addTextChangedListener import androidx.fragment.app.DialogFragment import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentTransaction -import com.mogo.cloud.passport.MoGoAiCloudClient import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.commons.mvp.MvpDialogFragment import com.mogo.eagle.core.utilcode.kotlin.onClick @@ -23,16 +22,15 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.util.BarUtils import com.mogo.eagle.core.utilcode.util.KeyboardUtils -import com.mogo.och.taxi.R -import com.mogo.och.taxi.constant.TaxiConst -import com.mogo.och.taxi.presenter.TaxiLoginPresenter +import com.mogo.och.common.module.R +import com.mogo.och.common.module.biz.presenter.OchCommonLoginPresenter /** * @author: yangyakun * @date: 2022/8/15 */ -class TaxiLoginDialogFragment : MvpDialogFragment(), +class TaxiLoginDialogFragment : MvpDialogFragment(), DialogInterface.OnKeyListener { lateinit var clMain: ConstraintLayout @@ -169,8 +167,8 @@ class TaxiLoginDialogFragment : MvpDialogFragment + #2961F2 + #14FF0000 + #FF0000 + #666666 + #86A5F7 + #111533 + #878890 + #EF262C + #4D000000 + #3B4577 \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/res/values/strings.xml b/OCH/mogo-och-common-module/src/main/res/values/strings.xml new file mode 100644 index 0000000000..f2d52ad1eb --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/res/values/strings.xml @@ -0,0 +1,17 @@ + + + + 欢迎您登录 + 登录 + 获取验证码 + 请输入验证码 + 获取验证码成功 + 登录成功 + 请输入正确的手机号 + 请输入正确的验证码 + 请输入手机号 + 请输入手机号 + + 网络异常,请稍后重试 + 请求出现异常,请稍后重试 + \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/res/values/styles.xml b/OCH/mogo-och-common-module/src/main/res/values/styles.xml index d983a865a0..ccbb7c934e 100644 --- a/OCH/mogo-och-common-module/src/main/res/values/styles.xml +++ b/OCH/mogo-och-common-module/src/main/res/values/styles.xml @@ -1,5 +1,23 @@ - + + + diff --git a/OCH/mogo-och-common-module/src/test/java/com/mogo/och/common/module/ExampleUnitTest.kt b/OCH/mogo-och-common-module/src/test/java/com/mogo/och/common/module/ExampleUnitTest.kt index 76f5f67a00..b10afe9aa9 100644 --- a/OCH/mogo-och-common-module/src/test/java/com/mogo/och/common/module/ExampleUnitTest.kt +++ b/OCH/mogo-och-common-module/src/test/java/com/mogo/och/common/module/ExampleUnitTest.kt @@ -1,8 +1,8 @@ package com.mogo.och.common.module -import org.junit.Test - +import com.zhidao.thirdlogin.utils.Aes import org.junit.Assert.* +import org.junit.Test /** * Example local unit test, which will execute on the development machine (host). @@ -13,5 +13,11 @@ class ExampleUnitTest { @Test fun addition_isCorrect() { assertEquals(4, 2 + 2) + + val json = "{\"device\":\"03cdfec225781de0\",\"time\":" + System.currentTimeMillis() + "}" + val IVS = "tqXMOa6g2w3S4sso+DqCfKAHRNA5jg3Mzp45e33zHFA=" + val KEY = "y5VajBH+sTHonJP2a5Uh6uDZcK0fxNB5ORHmbg9B3V0=" + val encrypt: String = Aes.encrypt(json, KEY, IVS, "UTF-8") + println(encrypt) } } \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.java index f052794c40..5af7ed7006 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.java @@ -54,7 +54,7 @@ public class TaxiPassengerServiceManager { * @return */ private String getDriverAppSn(){ - return CallerTelematicManager.INSTANCE.getServerToken(); + return "X20202206092431156"; } /** diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/TaxiPassengerArrivedView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/TaxiPassengerArrivedView.kt index b3335b40ee..55a3ba0a59 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/TaxiPassengerArrivedView.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/TaxiPassengerArrivedView.kt @@ -177,7 +177,7 @@ class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener { tvFeel.text = "" rvCommentList.visibility = View.INVISIBLE btnSubmit.visibility = View.INVISIBLE - clCommentContain.getLayoutParams().height = 657 + clCommentContain.getLayoutParams().height = 748 clCommentContain.requestLayout() super.onDetachedFromWindow() subscribe?.let { @@ -305,7 +305,7 @@ class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener { private fun startChangeHeightAnimarion() { // 815 除了 点评的高度 - val resizeAnimation = ResizeAnimation(clCommentContain,832+rvCommentList.height, clCommentContain.height) + val resizeAnimation = ResizeAnimation(clCommentContain,923+rvCommentList.height, clCommentContain.height) resizeAnimation.duration = 300 resizeAnimation.setAnimationListener(object :Animation.AnimationListener{ override fun onAnimationStart(animation: Animation?) { diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_end_panel.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_end_panel.xml index f07f9b6bb4..2a5872ee2b 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_end_panel.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_end_panel.xml @@ -44,7 +44,7 @@ @@ -57,6 +57,7 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + Presenter回调:接单车状态变更 登录状态变更 */ public interface ITaxiCarStatusCallback { - void onCarStatusChanged(boolean inOperation,String role); void onServiceDataUpdate(long dailyTimeDuration, long dailyOrderNum); - void onCarLoginStatusChange(boolean isLogin); } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/TaxiConst.kt b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/TaxiConst.kt index 41a1280592..2a399bb339 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/TaxiConst.kt +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/TaxiConst.kt @@ -81,6 +81,5 @@ class TaxiConst { const val TIMER_START_AUTOPILOT_INTERVAL = 20 * 1000L - const val WAIT_TAKEN = 100046 } } \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/TaxtServingStatusManager.kt b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/TaxtServingStatusManager.kt new file mode 100644 index 0000000000..7a42236e8b --- /dev/null +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/TaxtServingStatusManager.kt @@ -0,0 +1,38 @@ +package com.mogo.och.taxi.constant + +object TaxtServingStatusManager { + + /** + * 接单状态 + */ + private var openOrderStatus: TaxiOpenOrderStatusEnum = TaxiOpenOrderStatusEnum.None + + // region 是否可用接单 + @JvmStatic + fun isOpeningOrderStatus():Boolean{ + if(openOrderStatus==TaxiOpenOrderStatusEnum.Ordering){ + return true + } + return false + } + @JvmStatic + fun setOpenOrderStatus(status: Int) { + when (status) { + 0 -> { + this.openOrderStatus = TaxiOpenOrderStatusEnum.UnOrdering + } + 1 -> { + this.openOrderStatus = TaxiOpenOrderStatusEnum.Ordering + } + else -> { + this.openOrderStatus = TaxiOpenOrderStatusEnum.None + } + } + } + @JvmStatic + fun getOpenOrderStatus(): TaxiOpenOrderStatusEnum { + return openOrderStatus + } + + //endregion +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java index 5431beaf87..5362bf5930 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java @@ -13,6 +13,7 @@ import android.net.ConnectivityManager; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.alibaba.android.arouter.launcher.ARouter; import com.amap.api.maps.model.LatLng; import com.elegant.network.utils.GsonUtil; import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager; @@ -33,12 +34,14 @@ import com.mogo.eagle.core.utilcode.util.NetworkUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.map.navi.IMogoCarLocationChangedListener2; import com.mogo.module.common.MogoApisHandler; +import com.mogo.och.common.module.biz.constant.LoginStatusManager; +import com.mogo.och.common.module.biz.constant.OchCommonConst; +import com.mogo.och.common.module.biz.provider.LoginService; import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; import com.mogo.och.common.module.utils.PinYinUtil; import com.mogo.och.common.module.utils.ToastUtilsOch; import com.mogo.och.taxi.R; import com.mogo.och.taxi.bean.DriverServiceDataRespBean; -import com.mogo.och.taxi.bean.DriverStatusQueryRespBean; import com.mogo.och.taxi.bean.OrderGrabRespBean; import com.mogo.och.taxi.bean.OrderGrabStatusQueryRespBean; import com.mogo.och.taxi.bean.OrderQueryRespBean; @@ -49,19 +52,17 @@ 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.TaxiDataBaseRespBean; -import com.mogo.och.taxi.bean.TaxiLogoutReqBean; 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; import com.mogo.och.taxi.callback.ITaxiOrderStatusCallback; -import com.mogo.och.taxi.constant.TaxiDriverRoleEnum; import com.mogo.och.taxi.constant.TaxiConst; import com.mogo.och.taxi.constant.TaxiOrderStatusEnum; import com.mogo.och.taxi.constant.TaxiOrderTypeEnum; +import com.mogo.och.taxi.constant.TaxtServingStatusManager; import com.mogo.och.taxi.network.TaxiServiceCallback; import com.mogo.och.taxi.network.TaxiServiceManager; -import com.mogo.och.taxi.utils.StatusManager; import com.mogo.och.taxi.utils.TaxiAnalyticsManager; import com.mogo.och.taxi.utils.OrderUtil; import com.mogo.aicloud.services.socket.IMogoLifecycleListener; @@ -78,10 +79,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.concurrent.TimeUnit; -import io.reactivex.Observable; -import io.reactivex.disposables.Disposable; import io.reactivex.exceptions.UndeliverableException; import io.reactivex.functions.Consumer; import io.reactivex.plugins.RxJavaPlugins; @@ -118,7 +116,6 @@ public class TaxiModel { private ITaxiCarStatusCallback mCarStatusCallback; //Model->Presenter:接单状态、登录状态和司机今日接单状态 private ITaxiControllerStatusCallback mControllerStatusCallback; //Model->Presenter:VR mode等 private ITaxiOrderStatusCallback mOrderStatusCallback; //Model->Presenter:订单变更 - private Disposable subscribe; private volatile boolean isRestartAutopilot = false; @@ -126,6 +123,8 @@ public class TaxiModel { private double mLongitude, mLatitude; + private LoginService loginService; + private TaxiModel() { } @@ -148,6 +147,7 @@ public class TaxiModel { public void init(Context context) { mContext = context.getApplicationContext(); initListeners(); + loginService = (LoginService) ARouter.getInstance().build(OchCommonConst.LOGINSERVICE).navigation(); // IMogoServiceApis apis = MogoApisHandler.getInstance().getApis(); // apis.getSocketManagerApi(mContext).init(mContext, DebugConfig.getSocketAppId()); @@ -192,16 +192,13 @@ public class TaxiModel { CallerLogger.INSTANCE.d(M_TAXI + TAG, "Undeliverable exception"); } }); - queryCarStatus(); } public void release() { startOrStopOrderLoop(false); startOrStopCalculateRouteInfo(false); releaseListeners(); - if(subscribe!=null&&!subscribe.isDisposed()){ - subscribe.dispose(); - } + loginService = null; } private void initListeners() { @@ -247,7 +244,7 @@ public class TaxiModel { CallerAutopilotPlanningListenerManager.INSTANCE.removeListener(moGoAutopilotPlanningListener); } - private void startOrStopOrderLoop(boolean start) { + public void startOrStopOrderLoop(boolean start) { CallerLogger.INSTANCE.d(M_TAXI + TAG, "startOrStopOrderLoop() " + start); if (start) { TaxiModelLoopManager.getInstance().startInAndWaitOrdersLoop(); @@ -260,82 +257,18 @@ public class TaxiModel { } } - /** - * 接单状态和登录状态查询 - * 1、初始化查下状态 - * 2、点击更新接单状态 如果是初始化状态就查下状态 - * 3、点击更新接单状态后 查询状态 - * 4、网络状态波动时 查询状态 - * 5、登出后更新状态 - */ - public void queryCarStatus() { - TaxiServiceManager.getInstance().queryDriverServiceStatus(mContext, - new TaxiServiceCallback() { - @Override - public void onSuccess(DriverStatusQueryRespBean data) { - if (null != data && 0 == data.code) { - StatusManager.setLoginStatus(data.data.driverStatus); - StatusManager.setOpenOrderStatus(data.data.servingStatus); - //更新view - CallerLogger.INSTANCE.d(M_TAXI + TAG, "changeCarStatus:" + StatusManager.getLoginStatus()); - startOrStopOrderLoop(StatusManager.isLogin()&&StatusManager.isOpeningOrderStatus()); - if(mCarStatusCallback!=null) { - mCarStatusCallback.onCarLoginStatusChange(StatusManager.isLogin()); - } - String role = ""; - if (TaxiDriverRoleEnum.DEMO.getCode() == data.data.purpose) { - role = TaxiConst.DEMO_USER; - } else if (TaxiDriverRoleEnum.TEST.getCode() == data.data.purpose) { - role = TaxiConst.TEST_USER; - } - if (mCarStatusCallback != null) { - mCarStatusCallback.onCarStatusChanged(StatusManager.isOpeningOrderStatus(), role); - } - - } - } - - @Override - public void onError() { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort(mContext.getString(R.string.network_error_tip)); - } else { - ToastUtils.showShort(mContext.getString(R.string.request_error_tip)); - } - subscribe = Observable.timer(5, TimeUnit.SECONDS).subscribe(aLong -> { - queryCarStatus(); - }); - } - - @Override - public void onFail(int code, String msg) { - ToastUtilsOch.showWithCodeMessage(code,msg); - if(code==TaxiConst.WAIT_TAKEN){ - subscribe = Observable.timer(3, TimeUnit.SECONDS).subscribe(aLong -> { - queryCarStatus(); - }); - }else { - if (mCarStatusCallback != null) { - mCarStatusCallback.onCarLoginStatusChange(StatusManager.isLogin()); - } - } - } - }); - } - //更新接单状态 public void updateCarStatus() { - if(!StatusManager.isLogin()){ - queryCarStatus(); + if(!LoginStatusManager.isLogin()){ + loginService.queryLoginStatusByNet(); return; } - TaxiServiceManager.getInstance().changeOrderServing(mContext,StatusManager.isOpeningOrderStatus(), + TaxiServiceManager.getInstance().changeOrderServing(mContext,TaxtServingStatusManager.isOpeningOrderStatus(), new TaxiServiceCallback() { @Override public void onSuccess(BaseData data) { if (null != data && 0 == data.code) { - //StatusManager.changeOrderStatus(); - queryCarStatus(); + loginService.queryLoginStatusByNet(); } } @@ -1001,8 +934,8 @@ public class TaxiModel { CallerLogger.INSTANCE.d(M_TAXI + TAG, "onIntentReceived = %s", intentStr); if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intentStr)) { if (NetworkUtils.isConnected(mContext)) { - startOrStopOrderLoop(StatusManager.isLogin()&&StatusManager.isOpeningOrderStatus()); - queryCarStatus(); + startOrStopOrderLoop(LoginStatusManager.isLogin()&&TaxtServingStatusManager.isOpeningOrderStatus()); + loginService.queryLoginStatusByNet(); } } } @@ -1579,30 +1512,6 @@ public class TaxiModel { // 登出 public void logout() { - TaxiLogoutReqBean.Location4Login location4Login = new TaxiLogoutReqBean.Location4Login(mLatitude, mLongitude); - TaxiServiceManager.getInstance().logout(mContext,location4Login, - new TaxiServiceCallback() { - @Override - public void onSuccess(BaseData data) { - if (null != data && 0 == data.code) { - mCarStatusCallback.onCarLoginStatusChange(false); - queryCarStatus(); - } - } - - @Override - public void onError() { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort(mContext.getString(R.string.network_error_tip)); - } else { - ToastUtils.showShort(mContext.getString(R.string.request_error_tip)); - } - } - - @Override - public void onFail(int code, String msg) { - ToastUtilsOch.showWithCodeMessage(code,msg); - } - }); + loginService.loginOut(mLatitude,mLongitude); } } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/TaxiServiceApiNew.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/TaxiServiceApiNew.java index 8b29d4039d..cbb3885cf6 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/TaxiServiceApiNew.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/TaxiServiceApiNew.java @@ -2,7 +2,6 @@ package com.mogo.och.taxi.network; import com.mogo.eagle.core.data.BaseData; import com.mogo.och.taxi.bean.CarHeartbeatReqBean; import com.mogo.och.taxi.bean.DriverServiceDataRespBean; -import com.mogo.och.taxi.bean.DriverStatusQueryRespBean; import com.mogo.och.taxi.bean.DriverStatusUpdateReqBean; import com.mogo.och.taxi.bean.OrderCancelReqBean; import com.mogo.och.taxi.bean.OrderGrabReqBean; @@ -20,10 +19,6 @@ 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.TaxiDataBaseRespBean; -import com.mogo.och.taxi.bean.TaxiLoginReqBean; -import com.mogo.och.taxi.bean.TaxiLoginRespBean; -import com.mogo.och.taxi.bean.TaxiLoginSmsReqBean; -import com.mogo.och.taxi.bean.TaxiLogoutReqBean; import com.mogo.och.taxi.bean.TaxiOrPassengerReadyReqBean; import com.mogo.och.taxi.bean.UpdateOrderDisAndTimeReqBean; @@ -290,35 +285,6 @@ interface TaxiServiceApiNew { Observable orderCompleted(@Header ("appId") String appId , @Header("ticket") String ticket,@Body TaxiOrPassengerReadyReqBean data); - - /** - * 获取手机验证码 - * - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) -// @GET( "/autopilot-car-hailing/api/v1/driver/serviceStatus/query" ) - @POST( "/autopilot-car-hailing/driver/v2/driver/taxi/sendSms" ) - Observable getPhoneCode(@Header ("appId") String appId - ,@Header("ticket") String ticket,@Body TaxiLoginSmsReqBean 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/startOperation" ) - Observable gotoLoginBycode(@Header ("appId") String appId - , @Header("ticket") String ticket, @Body TaxiLoginReqBean data); - /** - * 登出接口 - */ - @Headers({"Content-type:application/json;charset=UTF-8"}) - @POST("/autopilot-car-hailing/cab/flow/v1/driver/taxi/endOperation") - Observable logout(@Header ("appId") String appId,@Header("ticket") String ticket, - @Body TaxiLogoutReqBean data); /** * 暂停接单 * @param data @@ -339,15 +305,4 @@ interface TaxiServiceApiNew { @POST( "/autopilot-car-hailing/cab/flow/v1/driver/taxi/resetOrderServing" ) Observable resetOrderServing(@Header ("appId") String appId,@Header("ticket") String ticket ,@Body DriverStatusUpdateReqBean data); - /** - * 接单状态和登录状态查询 - * @param sn - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) -// @GET( "/autopilot-car-hailing/api/v1/driver/serviceStatus/query" ) - @GET( "/autopilot-car-hailing/operation/v1/driver/taxi/loginStatus" ) - Observable queryDriverServiceStatusAndLoginStatus(@Header ("appId") String appId - ,@Header("ticket") String ticket,@Query("sn") String sn); - } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/TaxiServiceManager.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/TaxiServiceManager.java index 333ca64fd9..5c209c7b87 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/TaxiServiceManager.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/TaxiServiceManager.java @@ -4,7 +4,6 @@ import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAX import android.content.Context; -import com.mogo.cloud.passport.MoGoAiCloudClient; import com.mogo.cloud.passport.MoGoAiCloudClientConfig; import com.mogo.eagle.core.data.BaseData; import com.mogo.eagle.core.network.MoGoRetrofitFactory; @@ -13,7 +12,6 @@ import com.mogo.eagle.core.network.SubscribeImpl; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.och.taxi.bean.CarHeartbeatReqBean; import com.mogo.och.taxi.bean.DriverServiceDataRespBean; -import com.mogo.och.taxi.bean.DriverStatusQueryRespBean; import com.mogo.och.taxi.bean.DriverStatusUpdateReqBean; import com.mogo.och.taxi.bean.OrderCancelReqBean; import com.mogo.och.taxi.bean.OrderGrabReqBean; @@ -31,10 +29,6 @@ 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.TaxiDataBaseRespBean; -import com.mogo.och.taxi.bean.TaxiLoginReqBean; -import com.mogo.och.taxi.bean.TaxiLoginRespBean; -import com.mogo.och.taxi.bean.TaxiLoginSmsReqBean; -import com.mogo.och.taxi.bean.TaxiLogoutReqBean; import com.mogo.och.taxi.bean.TaxiOrPassengerReadyReqBean; import com.mogo.och.taxi.bean.UpdateOrderDisAndTimeReqBean; import com.mogo.och.taxi.constant.TaxiConst; @@ -263,26 +257,6 @@ public class TaxiServiceManager { .subscribe(getSubscribeImpl(context, callback, "updateDriverServiceStatus")); } - /** - * 接单状态和登录状态查询 - * @param context - * @param callback - */ - public void queryDriverServiceStatus(Context context, - TaxiServiceCallback callback) { - if(MoGoAiCloudClientConfig.getInstance().getToken().isEmpty()){ - callback.onFail(TaxiConst.WAIT_TAKEN,"等待令牌中请稍等"); - MoGoAiCloudClient.getInstance().refreshToken(); - return; - } - mOCHTaxiServiceApi.queryDriverServiceStatusAndLoginStatus(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,MoGoAiCloudClientConfig.getInstance().getSn()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "queryDriverServiceStatus")); - } - /** * 车机端上传心跳数据(只在出车状态时上传):包含高德坐标系经纬度 * @param context @@ -455,52 +429,6 @@ public class TaxiServiceManager { } - /** - * 获取手机验证码 - * @param context - * @param callback - */ - public void getPhoneCode(Context context,String phone, - TaxiServiceCallback callback) { - mOCHTaxiServiceApi.getPhoneCode(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - , MoGoAiCloudClientConfig.getInstance().getToken() - , new TaxiLoginSmsReqBean(phone)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "getPhoneCode")); - } - /** - * 通过验证码登录 - * @param context - * @param callback - */ - public void gotoLoginBycode(Context context, String phone, String code, - TaxiLoginReqBean.Location4Login location4Login, - TaxiServiceCallback callback) { - String sn = MoGoAiCloudClientConfig.getInstance().getSn(); - mOCHTaxiServiceApi.gotoLoginBycode(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - , MoGoAiCloudClientConfig.getInstance().getToken() - , new TaxiLoginReqBean(phone, code, sn, location4Login)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "gotoLoginBycode")); - } - - /** - * 登出 - */ - public void logout(Context context, TaxiLogoutReqBean.Location4Login location4Login, TaxiServiceCallback callback) { - mOCHTaxiServiceApi.logout( - MoGoAiCloudClientConfig.getInstance().getServiceAppId(), - MoGoAiCloudClientConfig.getInstance().getToken(), - new TaxiLogoutReqBean(MoGoAiCloudClientConfig.getInstance().getSn(), location4Login)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "logout")); - } - - - private SubscribeImpl getSubscribeImpl( Context context, TaxiServiceCallback callback, String apiName) { return new SubscribeImpl(RequestOptions.create(context)) { diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiPresenter.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiPresenter.java index deaafcc374..3478be286d 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiPresenter.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiPresenter.java @@ -15,7 +15,11 @@ import com.mogo.commons.mvp.Presenter; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.och.common.module.biz.bean.DriverStatusQueryRespBean; +import com.mogo.och.common.module.biz.callback.ILoginCallback; +import com.mogo.och.common.module.biz.constant.LoginStatusManager; import com.mogo.och.taxi.constant.TaxiConst; +import com.mogo.och.taxi.constant.TaxiDriverRoleEnum; import com.mogo.och.taxi.constant.TaxiOrderStatusEnum; import com.mogo.och.taxi.bean.OrderQueryRespBean; import com.mogo.och.taxi.bean.OrderQueryRouteInfoRespBean; @@ -23,6 +27,7 @@ import com.mogo.och.taxi.callback.ITaxiADASStatusCallback; import com.mogo.och.taxi.callback.ITaxiCarStatusCallback; import com.mogo.och.taxi.callback.ITaxiControllerStatusCallback; import com.mogo.och.taxi.callback.ITaxiOrderStatusCallback; +import com.mogo.och.taxi.constant.TaxtServingStatusManager; import com.mogo.och.taxi.model.TaxiModel; import com.mogo.och.taxi.ui.TaxiFragment; @@ -37,11 +42,10 @@ import java.util.List; * 描述 */ public class TaxiPresenter extends Presenter implements ITaxiADASStatusCallback, - ITaxiCarStatusCallback, ITaxiOrderStatusCallback, ITaxiControllerStatusCallback { + ITaxiCarStatusCallback, ITaxiOrderStatusCallback, ITaxiControllerStatusCallback, ILoginCallback { private static final String TAG = TaxiPresenter.class.getSimpleName(); - private boolean isFirstShow = true; private int preAutopilotStatus = 0; public TaxiPresenter(TaxiFragment view) { @@ -64,16 +68,6 @@ public class TaxiPresenter extends Presenter implements ITaxiADASS TaxiModel.getInstance().release(); } - @Override - public void onResume(@NonNull LifecycleOwner owner) { - super.onResume(owner); - if(isFirstShow){ - isFirstShow = false; - }else { - TaxiModel.getInstance().queryCarStatus(); - } - } - private void initListeners() { TaxiModel.getInstance().setADASStatusCallback(this); TaxiModel.getInstance().setCarStatusCallback(this); @@ -120,13 +114,6 @@ public class TaxiPresenter extends Presenter implements ITaxiADASS TaxiModel.getInstance().jumpPassengerCheckDone(); } - /** - * 登录成功后查询登录状态 - */ - public void queryLoginStatus() { - TaxiModel.getInstance().queryCarStatus(); - } - /** * 司机确认车辆环境可开启自动驾驶 */ @@ -225,25 +212,11 @@ public class TaxiPresenter extends Presenter implements ITaxiADASS preAutopilotStatus = IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING; } - @Override - public void onCarStatusChanged(boolean inOperation, String role) { - runOnUIThread(() -> mView.updateOperationStatus(inOperation,role)); - } - @Override public void onServiceDataUpdate(long dailyTimeDuration, long dailyOrderNum) { runOnUIThread(() -> mView.onServiceDataUpdate(dailyTimeDuration,dailyOrderNum)); } - @Override - public void onCarLoginStatusChange(boolean isLogin) { - if(isLogin){ - mView.hideLoginDialogFragment(); - }else { - mView.showLoginDialogFragment(); - } - } - @Override public void onOrdersInServiceChanged(@NonNull @NotNull List inServiceList) { @@ -344,4 +317,29 @@ public class TaxiPresenter extends Presenter implements ITaxiADASS }); } } + + @Override + public void loginSuccess(DriverStatusQueryRespBean data) { + //设置 接单状态 + TaxtServingStatusManager.setOpenOrderStatus(data.data.servingStatus); + //设置 是否启动订单轮训 + TaxiModel.getInstance().startOrStopOrderLoop(LoginStatusManager.isLogin()&&TaxtServingStatusManager.isOpeningOrderStatus()); + + // 设置当前用户角色 + String role = ""; + if (TaxiDriverRoleEnum.DEMO.getCode() == data.data.purpose) { + role = TaxiConst.DEMO_USER; + } else if (TaxiDriverRoleEnum.TEST.getCode() == data.data.purpose) { + role = TaxiConst.TEST_USER; + } + String finalRole = role; + runOnUIThread(() -> { + mView.updateOperationStatus(TaxtServingStatusManager.isOpeningOrderStatus(), finalRole); + }); + } + + @Override + public void loginFail(boolean isLogin) { + + } } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java index 6db1b97582..d7b7c97a7e 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java @@ -13,15 +13,14 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentTransaction; +import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.eagle.core.data.temp.EventLogout; -import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.eagle.core.utilcode.util.AppStateManager; import com.mogo.module.common.MogoApisHandler; +import com.mogo.och.common.module.biz.constant.OchCommonConst; +import com.mogo.och.common.module.biz.provider.LoginService; import com.mogo.och.taxi.R; import com.mogo.och.taxi.constant.TaxiOrderStatusEnum; import com.mogo.och.taxi.bean.OrderQueryRespBean; @@ -58,10 +57,19 @@ public class TaxiFragment extends BaseTaxiTabFragment taxiLoginDialogFragment = null; private WeakReference personalDialogFragment = null; protected double mCurLatitude = 0.0; protected double mCurLongitude = 0.0; + private LoginService loginService; + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + loginService = (LoginService) ARouter.getInstance().build(OchCommonConst.LOGINSERVICE).navigation(); + if(loginService!=null){ + loginService.registerFragment(this, getPresenter()); + } + } @Nullable @Override @@ -163,6 +171,8 @@ public class TaxiFragment extends BaseTaxiTabFragment(TaxiLoginDialogFragment.newInstance()); - } - TaxiLoginDialogFragment taxiLoginDialog = taxiLoginDialogFragment.get(); - if(taxiLoginDialog!=null) { - if (taxiLoginDialog.getDialog() != null && taxiLoginDialog.getDialog().isShowing()) { - return; - } - if (taxiLoginDialog.isAdded()) {//解决方法就是添加这行代码,如果已经添加了,就移除掉然后再show,就不会出现Fragment already added的错误了。 - getParentFragmentManager().beginTransaction().remove(taxiLoginDialog).commitAllowingStateLoss(); - } - CallerLogger.INSTANCE.d(M_TAXI + TAG,"showLoginDialogFragment 展示登录界面"); - taxiLoginDialog.show(getParentFragmentManager(), TaxiLoginDialogFragment.Companion.getTAG()); - taxiLoginDialog.setOnDismissListener(dialog -> { - taxiLoginDialogFragment.clear(); - mPresenter.queryLoginStatus(); - }); - } - } - public void hideLoginDialogFragment(){ - CallerLogger.INSTANCE.d(M_TAXI + TAG,"hideLoginDialogFragment 隐藏登录界面"); - if(taxiLoginDialogFragment!=null&&taxiLoginDialogFragment.get()!=null){ - taxiLoginDialogFragment.get().dismissAllowingStateLoss(); - } - } - private void testRouteInfoUpload() { TPRouteDataTestUtils.converToRouteData(); } - /** - * Taxi调试信息:订单、线路、轨迹等信息 - * - * START - */ + //region Taxi调试信息:订单、线路、轨迹等信息 private View testBar; private TextView testCurOrderId; private TextView testCurLineId; @@ -477,7 +441,6 @@ public class TaxiFragment extends BaseTaxiTabFragment { - this.loginStatus = TaxiLoginStatusEnum.Logout - } - 1 -> { - this.loginStatus = TaxiLoginStatusEnum.Login - } - else -> { - this.loginStatus = TaxiLoginStatusEnum.None - } - } - } - @JvmStatic - fun setLoginStatus(loginStatus: TaxiLoginStatusEnum) { - this.loginStatus = loginStatus - } - @JvmStatic - fun getLoginStatus(): TaxiLoginStatusEnum { - return loginStatus - } - @JvmStatic - fun isLogin():Boolean { - if(loginStatus==TaxiLoginStatusEnum.Login){ - return true - } - return false - } - // region 是否可用接单 - @JvmStatic - fun isOpeningOrderStatus():Boolean{ - if(openOrderStatus==TaxiOpenOrderStatusEnum.Ordering){ - return true - } - return false - } - @JvmStatic - fun setOpenOrderStatus(status: Int) { - when (status) { - 0 -> { - this.openOrderStatus = TaxiOpenOrderStatusEnum.UnOrdering - } - 1 -> { - this.openOrderStatus = TaxiOpenOrderStatusEnum.Ordering - } - else -> { - this.openOrderStatus = TaxiOpenOrderStatusEnum.None - } - } - } - @JvmStatic - fun getOpenOrderStatus(): TaxiOpenOrderStatusEnum { - return openOrderStatus - } - - //endregion -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi-2560x1600/taxi_ic_login_bg.webp b/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi-2560x1600/taxi_ic_login_bg.webp deleted file mode 100644 index 7af7432551..0000000000 Binary files a/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi-2560x1600/taxi_ic_login_bg.webp and /dev/null differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/taxi_ic_login_bg.webp b/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/taxi_ic_login_bg.webp deleted file mode 100644 index 7af7432551..0000000000 Binary files a/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/taxi_ic_login_bg.webp and /dev/null differ diff --git a/OCH/mogo-och-taxi/src/main/res/values/colors.xml b/OCH/mogo-och-taxi/src/main/res/values/colors.xml index 743794b7f8..3aa7cfc710 100644 --- a/OCH/mogo-och-taxi/src/main/res/values/colors.xml +++ b/OCH/mogo-och-taxi/src/main/res/values/colors.xml @@ -25,14 +25,4 @@ #657EE2 - #2961F2 - #14FF0000 - #FF0000 - #666666 - #86A5F7 - #111533 - #878890 - #EF262C - #4D000000 - \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/res/values/strings.xml b/OCH/mogo-och-taxi/src/main/res/values/strings.xml index 1a370dcaa7..891e3168a3 100644 --- a/OCH/mogo-och-taxi/src/main/res/values/strings.xml +++ b/OCH/mogo-och-taxi/src/main/res/values/strings.xml @@ -32,17 +32,6 @@ 自动驾驶状态为0不可用 司机端未确认可以开启自动驾驶 - 欢迎您登录 - 登录 - 获取验证码 - 请输入验证码 - 获取验证码成功 - 登录成功 - 请输入正确的手机号 - 请输入正确的验证码 - 请输入手机号 - 请输入手机号 - 网络异常,请稍后重试 请求出现异常,请稍后重试 \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/res/values/styles.xml b/OCH/mogo-och-taxi/src/main/res/values/styles.xml index ec73feaae9..bd2964b922 100644 --- a/OCH/mogo-och-taxi/src/main/res/values/styles.xml +++ b/OCH/mogo-och-taxi/src/main/res/values/styles.xml @@ -23,22 +23,4 @@ - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index d7334c8151..afb3ab9496 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -33,19 +33,19 @@ if (!isAndroidTestBuild()) { apply plugin: 'apm-plugin' } -//if (!isAndroidTestBuild()) { -// apply plugin: 'bytex.threadOpt' -// thread_opt { -// enable true -// enableInDebug true -// logLevel "DEBUG" -// //白名单中的类不进行替换 +if (!isAndroidTestBuild()) { + apply plugin: 'bytex.threadOpt' + thread_opt { + enable true + enableInDebug true + logLevel "DEBUG" + //白名单中的类不进行替换 // white_list = [ // 'leakcanary.*', // 'com.loc.*' // ] -// } -//} + } +} //if (!isAndroidTestBuild()) { // /** diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index c472f0a6d4..ee39bc7a34 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -3,14 +3,14 @@ package com.mogo.launcher; import com.mogo.eagle.core.function.main.MainMoGoApplication; import android.content.Context; -//import androidx.annotation.NonNull; +import androidx.annotation.NonNull; import com.mogo.eagle.core.utilcode.mogo.logger.LogLevel; import com.mogo.eagle.core.utilcode.mogo.logger.Logger; import com.mogo.launcher.crash.CrashSystem; -//import com.mogo.thread.ext.core.ThreadManager; -//import com.mogo.thread.ext.core.config.ThreadConfig; -// -//import java.util.concurrent.ThreadPoolExecutor; +import com.mogo.thread.ext.core.ThreadManager; +import com.mogo.thread.ext.core.config.ThreadConfig; + +import java.util.concurrent.ThreadPoolExecutor; /** * @author congtaowang @@ -23,36 +23,40 @@ public class MogoApplication extends MainMoGoApplication { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); -// ThreadConfig.Builder builder = new ThreadConfig.Builder().listener(new ThreadConfig.TaskExecuteListener() { -// @Override -// public boolean isEnabled() { -// return true; // 如果返回true,会有后续的回调;如果返回false, 不会有后续的回调 -// } + ThreadConfig.Builder builder = new ThreadConfig.Builder().listener(new ThreadConfig.TaskExecuteListener() { + @Override + public boolean isEnabled() { + return true; // 如果返回true,会有后续的回调;如果返回false, 不会有后续的回调 + } + + @Override + public void onExecutorBefore(@NonNull Runnable runnable, @NonNull ThreadConfig.TaskType type) { + //每个任务执行前回调 +// if (type == ThreadConfig.TaskType.HandlerThread) { // -// @Override -// public void onExecutorBefore(@NonNull Runnable runnable) { -// //每个任务执行前回调 -// } // -// @Override -// public void onExecutorAfter(@NonNull Runnable runnable) { -// //每个任务执行后回调 -// } -// -// /** -// * @param core 线程池的核心数 -// * @param max 线程池的最大线程数 -// * @param active 线程池正在活跃的任务数 -// * @param completed 线程池已完成的任务数 -// */ -// @Override -// public void onExecutorStateChanged(@NonNull ThreadPoolExecutor pool, int core, int max, int active, long completed) { -// //线程池在执行过程,状态变化回调 -// //Log.d("POOL", "core:" + core + ";max:" + max + ";active:" + active + ";completed:" + completed); -// } -// }); -// builder.loggable(false); -// ThreadManager.INSTANCE.init(builder); +// } + } + + @Override + public void onExecutorAfter(@NonNull Runnable runnable, @NonNull ThreadConfig.TaskType type) { + //每个任务执行后回调 + } + + /** + * @param core 线程池的核心数 + * @param max 线程池的最大线程数 + * @param active 线程池正在活跃的任务数 + * @param completed 线程池已完成的任务数 + */ + @Override + public void onExecutorStateChanged(@NonNull ThreadPoolExecutor pool, int core, int max, int active, long completed) { + //线程池在执行过程,状态变化回调 + //Log.d("POOL", "core:" + core + ";max:" + max + ";active:" + active + ";completed:" + completed); + } + }); + builder.loggable(false); + ThreadManager.INSTANCE.init(builder); } @Override diff --git a/build.gradle b/build.gradle index 786ea8b61e..a1ad739077 100644 --- a/build.gradle +++ b/build.gradle @@ -34,7 +34,7 @@ buildscript { classpath "com.mogo.cloud:hook:${HOOK_LOG_VERSION}" classpath "com.mogo.cloud:bizconfig:${BIZCONFIG_VERSION}" classpath 'com.volcengine:apm_insight_plugin:1.4.1' - classpath 'com.mogo.thread.opt:plg:2.2.12' + classpath 'com.mogo.thread.opt:plg:3.0.0' classpath 'com.mogo.cloud:systrace:1.0.1' classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18' classpath 'com.mogo.sticky:service:1.0.8' diff --git a/config.gradle b/config.gradle index b2b2ca68d5..67ef959049 100644 --- a/config.gradle +++ b/config.gradle @@ -234,7 +234,10 @@ ext { //========================= Koom ====================== koomnative : "com.kuaishou.koom:koom-native-leak-static:2.2.0", - koomxhook : "com.kuaishou.koom:xhook-static:2.2.0" + koomxhook : "com.kuaishou.koom:xhook-static:2.2.0", + + //========================= Koom ====================== + recyclerviewadapterhelper : "io.github.cymchad:BaseRecyclerViewAdapterHelper:3.0.4" ] android = [ launcherApplicationId : "com.mogo.launcher", diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt index 9174f7da53..65d1aa08fa 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt @@ -1,5 +1,6 @@ package com.mogo.eagle.core.function.autopilot.adapter +import android.location.Location import chassis.VehicleStateOuterClass import com.mogo.eagle.core.data.app.AppConfigInfo import com.mogo.eagle.core.data.config.FunctionBuildConfig @@ -48,6 +49,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPointCloudList import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager.invokeAutopilotRecordResult import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotVehicleStateListenerManager import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager +import com.mogo.map.navi.MogoCarLocationChangedListenerRegister import com.zhidao.support.adas.high.AdasManager import com.zhidao.support.adas.high.OnAdasListener import com.zhidao.support.adas.high.bean.AutopilotAbility @@ -77,12 +79,12 @@ class MoGoAdasListenerImpl : OnAdasListener { //车前引导线 @ChainLog( - linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_TRAJECTORY, - linkCode = CHAIN_LINK_ADAS, - endpoint = PAD, - nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_TRAJECTORY, - paramIndexes = [0, 1], - clientPkFileName = "sn" + linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_TRAJECTORY, + linkCode = CHAIN_LINK_ADAS, + endpoint = PAD, + nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_TRAJECTORY, + paramIndexes = [0, 1], + clientPkFileName = "sn" ) override fun onTrajectory(header: MessagePad.Header, trajectory: MessagePad.Trajectory?) { if (HdMapBuildConfig.isMapLoaded) { @@ -94,16 +96,16 @@ class MoGoAdasListenerImpl : OnAdasListener { //感知物体 @ChainLog( - linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_DATA_TRACKED, - linkCode = CHAIN_LINK_ADAS, - endpoint = PAD, - nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_RECT_DATA, - paramIndexes = [0, 1], - clientPkFileName = "sn" + linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_DATA_TRACKED, + linkCode = CHAIN_LINK_ADAS, + endpoint = PAD, + nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_RECT_DATA, + paramIndexes = [0, 1], + clientPkFileName = "sn" ) override fun onTrackedObjects( - header: MessagePad.Header, - trackedObjects: MessagePad.TrackedObjects + header: MessagePad.Header, + trackedObjects: MessagePad.TrackedObjects ) { if (HdMapBuildConfig.isMapLoaded) { invokeAutopilotIdentifyDataUpdate(trackedObjects.objsList as List?) @@ -112,12 +114,12 @@ class MoGoAdasListenerImpl : OnAdasListener { //自车定位信息 @ChainLog( - linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_GNSSINFO, - linkCode = CHAIN_LINK_ADAS, - endpoint = PAD, - nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_CAR_STATE, - paramIndexes = [0, 1], - clientPkFileName = "sn" + linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_GNSSINFO, + linkCode = CHAIN_LINK_ADAS, + endpoint = PAD, + nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_CAR_STATE, + paramIndexes = [0, 1], + clientPkFileName = "sn" ) override fun onGnssInfo(header: MessagePad.Header, gnssInfo: MessagePad.GnssInfo?) { invokeAutopilotCarStateData(gnssInfo) @@ -127,9 +129,9 @@ class MoGoAdasListenerImpl : OnAdasListener { CallerMapUIServiceManager.getMapUIController()?.syncLocation2Map(gnssInfo) // 同步更新经纬度和系统时间至 AutoPilotStatusListener CallerAutoPilotStatusListenerManager.updateAutoPilotLatLon( - gnssInfo.satelliteTime, - gnssInfo.longitude, - gnssInfo.latitude + gnssInfo.satelliteTime, + gnssInfo.longitude, + gnssInfo.latitude ) } } @@ -137,16 +139,16 @@ class MoGoAdasListenerImpl : OnAdasListener { //自车状态(底盘),车灯等。 @ChainLog( - linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_VEHICLE, - linkCode = CHAIN_LINK_ADAS, - endpoint = PAD, - nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_VEHICLE, - paramIndexes = [0, 1], - clientPkFileName = "sn" + linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_VEHICLE, + linkCode = CHAIN_LINK_ADAS, + endpoint = PAD, + nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_VEHICLE, + paramIndexes = [0, 1], + clientPkFileName = "sn" ) override fun onVehicleState( - header: MessagePad.Header, - vehicleState: VehicleStateOuterClass.VehicleState? + header: MessagePad.Header, + vehicleState: VehicleStateOuterClass.VehicleState? ) { if (vehicleState != null) { @@ -172,16 +174,16 @@ class MoGoAdasListenerImpl : OnAdasListener { //自动驾驶状态 @ChainLog( - linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT, - linkCode = CHAIN_LINK_ADAS, - endpoint = PAD, - nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_STATUS, - paramIndexes = [0, 1], - clientPkFileName = "sn" + linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT, + linkCode = CHAIN_LINK_ADAS, + endpoint = PAD, + nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_STATUS, + paramIndexes = [0, 1], + clientPkFileName = "sn" ) override fun onAutopilotState( - header: MessagePad.Header, - autopilotState: MessagePad.AutopilotState? + header: MessagePad.Header, + autopilotState: MessagePad.AutopilotState? ) { if (autopilotState != null) { //工控机模拟时间 @@ -216,16 +218,16 @@ class MoGoAdasListenerImpl : OnAdasListener { //监控 @ChainLog( - linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT, - linkCode = CHAIN_LINK_ADAS, - endpoint = PAD, - nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_GUARDIAN, - paramIndexes = [0, 1], - clientPkFileName = "sn" + linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT, + linkCode = CHAIN_LINK_ADAS, + endpoint = PAD, + nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_GUARDIAN, + paramIndexes = [0, 1], + clientPkFileName = "sn" ) override fun onReportMessage( - header: MessagePad.Header, - mogoReportMessage: MogoReportMsg.MogoReportMessage? + header: MessagePad.Header, + mogoReportMessage: MogoReportMsg.MogoReportMessage? ) { if (HdMapBuildConfig.isMapLoaded) { invokeAutopilotGuardian(mogoReportMessage) @@ -234,27 +236,27 @@ class MoGoAdasListenerImpl : OnAdasListener { //感知红绿灯 @ChainLog( - linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_TRAFFIC_LIGHT, - linkCode = CHAIN_LINK_ADAS, - endpoint = PAD, - nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_TRAFFIC_LIGHT, - paramIndexes = [0, 1], - clientPkFileName = "sn" + linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_TRAFFIC_LIGHT, + linkCode = CHAIN_LINK_ADAS, + endpoint = PAD, + nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_TRAFFIC_LIGHT, + paramIndexes = [0, 1], + clientPkFileName = "sn" ) override fun onPerceptionTrafficLight( - header: MessagePad.Header?, - trafficLights: TrafficLightOuterClass.TrafficLights? + header: MessagePad.Header?, + trafficLights: TrafficLightOuterClass.TrafficLights? ) { if (trafficLights != null) { CallerAutopilotIdentifyListenerManager.invokeAutopilotPerceptionTrafficLight( - trafficLights + trafficLights ) } } override fun onPredictionObstacleTrajectory( - header: MessagePad.Header?, - predictionObjects: Prediction.mPredictionObjects? + header: MessagePad.Header?, + predictionObjects: Prediction.mPredictionObjects? ) { //他车轨迹预测 } @@ -272,16 +274,16 @@ class MoGoAdasListenerImpl : OnAdasListener { //planning障碍物 @ChainLog( - linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_PLANNING_OBJECTS, - linkCode = CHAIN_LINK_ADAS, - endpoint = PAD, - nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_PLANNING_OBJECTS, - paramIndexes = [0, 1], - clientPkFileName = "sn" + linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_PLANNING_OBJECTS, + linkCode = CHAIN_LINK_ADAS, + endpoint = PAD, + nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_PLANNING_OBJECTS, + paramIndexes = [0, 1], + clientPkFileName = "sn" ) override fun onPlanningObjects( - header: MessagePad.Header?, - planningObjects: MessagePad.PlanningObjects + header: MessagePad.Header?, + planningObjects: MessagePad.PlanningObjects ) { if (HdMapBuildConfig.isMapLoaded) { invokeAutopilotIdentifyPlanningObj(planningObjects.objsList as List) @@ -289,24 +291,24 @@ class MoGoAdasListenerImpl : OnAdasListener { } override fun onBasicInfoReq( - header: MessagePad.Header, - basicInfoReq: MessagePad.BasicInfoReq? + header: MessagePad.Header, + basicInfoReq: MessagePad.BasicInfoReq? ) { invokeAutopilotSNRequest() } //工控机基础配置信息 @ChainLog( - linkChainLog = CHAIN_LINK_LOG_CONNECT_STATUS, - linkCode = CHAIN_LINK_ADAS, - endpoint = PAD, - nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_CAR_CONFIG, - paramIndexes = [0, 1], - clientPkFileName = "sn" + linkChainLog = CHAIN_LINK_LOG_CONNECT_STATUS, + linkCode = CHAIN_LINK_ADAS, + endpoint = PAD, + nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_CAR_CONFIG, + paramIndexes = [0, 1], + clientPkFileName = "sn" ) override fun onCarConfigResp( - header: MessagePad.Header, - carConfigResp: MessagePad.CarConfigResp? + header: MessagePad.Header, + carConfigResp: MessagePad.CarConfigResp? ) { if (HdMapBuildConfig.isMapLoaded && carConfigResp != null) { AppConfigInfo.plateNumber = carConfigResp.plateNumber//车牌号 @@ -318,16 +320,16 @@ class MoGoAdasListenerImpl : OnAdasListener { //全局路径规划 @ChainLog( - linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT, - linkCode = CHAIN_LINK_ADAS, - endpoint = PAD, - nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_ROUTE, - paramIndexes = [0, 1], - clientPkFileName = "sn" + linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT, + linkCode = CHAIN_LINK_ADAS, + endpoint = PAD, + nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_ROUTE, + paramIndexes = [0, 1], + clientPkFileName = "sn" ) override fun onGlobalPathResp( - header: MessagePad.Header, - globalPathResp: MessagePad.GlobalPathResp? + header: MessagePad.Header, + globalPathResp: MessagePad.GlobalPathResp? ) { if (HdMapBuildConfig.isMapLoaded) { invokeAutopilotRotting(globalPathResp) @@ -336,16 +338,16 @@ class MoGoAdasListenerImpl : OnAdasListener { //数据采集,badCase @ChainLog( - linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT, - linkCode = CHAIN_LINK_ADAS, - endpoint = PAD, - nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_RECORD, - paramIndexes = [0, 1], - clientPkFileName = "sn" + linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT, + linkCode = CHAIN_LINK_ADAS, + endpoint = PAD, + nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_RECORD, + paramIndexes = [0, 1], + clientPkFileName = "sn" ) override fun onRecordResult( - header: MessagePad.Header, - recordPanel: RecordPanelOuterClass.RecordPanel? + header: MessagePad.Header, + recordPanel: RecordPanelOuterClass.RecordPanel? ) { if (recordPanel != null) { invokeAutopilotRecordResult(recordPanel) @@ -367,16 +369,16 @@ class MoGoAdasListenerImpl : OnAdasListener { //到站回调 @ChainLog( - linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT, - linkCode = CHAIN_LINK_ADAS, - endpoint = PAD, - nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_ARRIVE, - paramIndexes = [0, 1], - clientPkFileName = "sn" + linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT, + linkCode = CHAIN_LINK_ADAS, + endpoint = PAD, + nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_ARRIVE, + paramIndexes = [0, 1], + clientPkFileName = "sn" ) override fun onArrivalNotification( - header: MessagePad.Header, - arrivalNotification: MessagePad.ArrivalNotification? + header: MessagePad.Header, + arrivalNotification: MessagePad.ArrivalNotification? ) { if (HdMapBuildConfig.isMapLoaded) { invokeArriveAtStation(arrivalNotification) @@ -385,16 +387,16 @@ class MoGoAdasListenerImpl : OnAdasListener { //状态查询应答 @ChainLog( - linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT, - linkCode = CHAIN_LINK_ADAS, - endpoint = PAD, - nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_STATUS_QUERY_RESP, - paramIndexes = [0, 1], - clientPkFileName = "sn" + linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT, + linkCode = CHAIN_LINK_ADAS, + endpoint = PAD, + nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_STATUS_QUERY_RESP, + paramIndexes = [0, 1], + clientPkFileName = "sn" ) override fun onStatusQueryResp( - header: MessagePad.Header?, - statusInfo: SystemStatusInfo.StatusInfo? + header: MessagePad.Header?, + statusInfo: SystemStatusInfo.StatusInfo? ) { invokeAutopilotStatusRespByQuery(statusInfo) } @@ -403,8 +405,8 @@ class MoGoAdasListenerImpl : OnAdasListener { * 数据采集配置应答 */ override fun onRecordDataConfigResp( - header: MessagePad.Header?, - config: MessagePad.RecordDataConfig? + header: MessagePad.Header?, + config: MessagePad.RecordDataConfig? ) { } @@ -413,16 +415,16 @@ class MoGoAdasListenerImpl : OnAdasListener { * planning决策状态, 透传 */ @ChainLog( - linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_PLANNING_ACTIONS, - linkCode = CHAIN_LINK_ADAS, - endpoint = PAD, - nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_PLANNING_ACTIONS, - paramIndexes = [0, 1], - clientPkFileName = "sn" + linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_PLANNING_ACTIONS, + linkCode = CHAIN_LINK_ADAS, + endpoint = PAD, + nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_PLANNING_ACTIONS, + paramIndexes = [0, 1], + clientPkFileName = "sn" ) override fun onPlanningActionMsg( - header: MessagePad.Header?, - planningActionMsg: MessagePad.PlanningActionMsg? + header: MessagePad.Header?, + planningActionMsg: MessagePad.PlanningActionMsg? ) { planningActionMsg?.let { invokePNCActions(it) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index ba754a638d..bcc57eb412 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -402,11 +402,6 @@ class MoGoHmiFragment : MvpFragment(), mViewNotificationProvider = provider } - - override fun changeBusOperationStatus(isOut: Boolean) { - busOperationStatus?.changerOperationStatus(isOut) - } - override fun setBusOperationView(view: IOchBusView) { busOperationStatus = view busOperationStatus?.showBusOperation() @@ -1379,6 +1374,7 @@ class MoGoHmiFragment : MvpFragment(), HmiBuildConfig.isShowSnBindingView = isOpen } + private var takeOver = false /** * 工控机监控节点上报 @@ -1386,31 +1382,6 @@ class MoGoHmiFragment : MvpFragment(), override fun onAutopilotGuardian(guardianInfo: MogoReportMsg.MogoReportMessage?) { ThreadUtils.runOnUiThread { guardianInfo?.let { - when (it.code) { - EXIT_AUTOPILOT_FOR_PLANNING, - EXIT_AUTOPILOT_FOR_LOCATION, - EXIT_AUTOPILOT_FOR_CHASSIS, - EXIT_AUTOPILOT_FOR_DISTANCE -> { - showWarningV2X( - EventTypeEnum.TAKE_OVER_EVENT.poiType, - EventTypeEnum.TAKE_OVER_EVENT.content, - EventTypeEnum.TAKE_OVER_EVENT.tts, - EventTypeEnum.TAKE_OVER_EVENT.poiType, - object : IMoGoWarningStatusListener { - override fun onShow() { - clTakeOverView.visibility = View.VISIBLE - } - - override fun onDismiss() { - clTakeOverView.visibility = View.GONE - } - }, - true, - 6000L - ) - } - } - if (reportList.size > 49) { reportList.removeLast() } @@ -1423,6 +1394,38 @@ class MoGoHmiFragment : MvpFragment(), ) reportListFloatWindow?.refreshData(reportList) + if(FunctionBuildConfig.isDemoMode){ + return@let + } + if(takeOver){ + return@let + } + when (it.code) { + EXIT_AUTOPILOT_FOR_PLANNING, + EXIT_AUTOPILOT_FOR_LOCATION, + EXIT_AUTOPILOT_FOR_CHASSIS, + EXIT_AUTOPILOT_FOR_DISTANCE -> { + showWarningV2X( + EventTypeEnum.TAKE_OVER_EVENT.poiType, + EventTypeEnum.TAKE_OVER_EVENT.content, + EventTypeEnum.TAKE_OVER_EVENT.tts, + EventTypeEnum.TAKE_OVER_EVENT.poiType, + object : IMoGoWarningStatusListener { + override fun onShow() { + takeOver = true + clTakeOverView.visibility = View.VISIBLE + } + + override fun onDismiss() { + takeOver = false + clTakeOverView.visibility = View.GONE + } + }, + true, + 6000L + ) + } + } } } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt index 384af51e4f..adc7747c96 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt @@ -9,6 +9,7 @@ import android.graphics.Color import android.os.Build import android.text.Html import android.util.AttributeSet +import android.util.Log import android.view.LayoutInflater import android.view.View import android.widget.* @@ -21,7 +22,6 @@ import androidx.recyclerview.widget.LinearLayoutManager import chassis.Chassis import com.mogo.cloud.passport.MoGoAiCloudClient import com.mogo.cloud.passport.MoGoAiCloudClientConfig -import com.mogo.commons.AbsMogoApplication import com.mogo.commons.debug.DebugConfig import com.mogo.eagle.core.data.app.AppConfigInfo import com.mogo.eagle.core.data.autopilot.* @@ -57,7 +57,6 @@ import com.mogo.eagle.core.function.call.map.CallerSmpManager import com.mogo.eagle.core.function.call.obu.CallerOBUManager import com.mogo.eagle.core.function.call.obu.CallerObuListenerManager import com.mogo.eagle.core.function.call.setting.CallerMoGoUiSettingManager -import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.hmi.ui.logcatch.ILogViewListener import com.mogo.eagle.core.function.hmi.ui.logcatch.LogInfoView @@ -633,33 +632,20 @@ class DebugSettingView @JvmOverloads constructor( } - // 初始化 GSP数据源 数据 rgGpsProvider.check( when (FunctionBuildConfig.gpsProvider) { - 0 -> { - R.id.rbGpsProviderAndroid - } - 1 -> { - R.id.rbGpsProviderRTK - } - 2 -> { - R.id.rbGpsProviderOBU - } + 0 -> R.id.rbGpsProviderAndroid + 1 -> R.id.rbGpsProviderRTK + 2 -> R.id.rbGpsProviderOBU else -> R.id.rbGpsProviderAndroid } ) rgGpsProvider.setOnCheckedChangeListener { _, checkedId -> when (checkedId) { - R.id.rbGpsProviderAndroid -> { - FunctionBuildConfig.gpsProvider = 0 - } - R.id.rbGpsProviderRTK -> { - FunctionBuildConfig.gpsProvider = 1 - } - R.id.rbGpsProviderOBU -> { - FunctionBuildConfig.gpsProvider = 2 - } + R.id.rbGpsProviderAndroid -> FunctionBuildConfig.gpsProvider = 0 + R.id.rbGpsProviderRTK -> FunctionBuildConfig.gpsProvider = 1 + R.id.rbGpsProviderOBU -> FunctionBuildConfig.gpsProvider = 2 } } @@ -690,22 +676,18 @@ class DebugSettingView @JvmOverloads constructor( trackerIPCProvider.check( when (FunctionBuildConfig.trackerIPCProvider) { 0 -> R.id.trackerIPCUnion - 1 -> R.id.trackerIPCObu - 2 -> R.id.trackerIPCV2N + 1 -> R.id.trackerIPC + 2 -> R.id.trackerIPCObu + 3 -> R.id.trackerIPCV2I else -> R.id.trackerIPCUnion } ) - trackerProvider.setOnCheckedChangeListener{ _, checkedId -> - when(checkedId){ - R.id.trackerIPCUnion -> { - FunctionBuildConfig.trackerIPCProvider = 0 - } - R.id.trackerIPCObu -> { - FunctionBuildConfig.trackerIPCProvider = 1 - } - R.id.trackerIPCV2N -> { - FunctionBuildConfig.trackerIPCProvider = 2 - } + trackerIPCProvider.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.trackerIPCUnion -> FunctionBuildConfig.trackerIPCProvider = 0 + R.id.trackerIPC -> FunctionBuildConfig.trackerIPCProvider = 1 + R.id.trackerIPCObu -> FunctionBuildConfig.trackerIPCProvider = 2 + R.id.trackerIPCV2I -> FunctionBuildConfig.trackerIPCProvider = 3 } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt index 141becc292..26c294afd6 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt @@ -14,7 +14,6 @@ import com.mogo.commons.debug.DebugConfig import com.mogo.eagle.core.data.app.AppConfigInfo import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo import com.mogo.eagle.core.data.bindingcar.IPCUpgradeStateInfo -import com.mogo.eagle.core.data.temp.EventBusOperation import com.mogo.eagle.core.data.temp.EventLogout import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotCarConfigListener import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener @@ -160,14 +159,15 @@ class AutoPilotAndCheckView @JvmOverloads constructor( actvLoginout.onClick { EventBus.getDefault().post(EventLogout()) } + actvLoginout.visibility = View.VISIBLE + CallerHmiManager.setBusOperationView(toolBusOperationView) when (DebugConfig.getProductFlavor()) { "fPadLenovoOchTaxi" -> { - actvLoginout.visibility = View.VISIBLE + //出租车司机 } "fPadLenovoOchBus" ->{ - CallerHmiManager.setBusOperationView(toolBusOperationView) - EventBus.getDefault().post(EventBusOperation(0)) + //小巴车司机 } else -> { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/BusOperationView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/BusOperationView.kt index bfc83e98b9..37709763dd 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/BusOperationView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/BusOperationView.kt @@ -4,9 +4,10 @@ import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater import android.view.View -import com.mogo.eagle.core.data.temp.EventBusOperation import com.mogo.eagle.core.function.api.hmi.view.IOchBusView import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.utilcode.util.SharedPrefs +import com.mogo.eagle.core.utilcode.util.StringUtils import kotlinx.android.synthetic.main.view_och_bus_operation.view.* import org.greenrobot.eventbus.EventBus @@ -18,11 +19,13 @@ class BusOperationView @JvmOverloads constructor( context: Context?, attrs: AttributeSet? = null, defStyleAttr: Int = 0) - : IOchBusView(context, attrs, defStyleAttr), View.OnClickListener { + : IOchBusView(context, attrs, defStyleAttr) { init { LayoutInflater.from(context).inflate(R.layout.view_och_bus_operation,this,true) - ochBusOperationStatus.setOnClickListener(this) + context?.let { + actvAccountPhone.text = SharedPrefs.getInstance(it).getString("account","") + } } override fun showBusOperation() { @@ -30,14 +33,29 @@ class BusOperationView @JvmOverloads constructor( } override fun changerOperationStatus(isOut: Boolean) { - if (isOut){ - ochBusOperationStatusCTV.text = "收车" - }else{ - ochBusOperationStatusCTV.text = "出车" + + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + context?.let { + actvAccountPhone.text = phoneMask(SharedPrefs.getInstance(it).getString("och_account","")) } } - override fun onClick(v: View?) { - EventBus.getDefault().post(EventBusOperation(1)) + + /** + * 用户电话号码的打码隐藏加星号加* + * 一般都是中间四位 + * @return 处理完成的手机号码 + */ + fun phoneMask(phone: String?): String? { + var res = "" + if (!StringUtils.isEmpty(phone)&&phone?.length==11) { + val stringBuilder = StringBuilder(phone) + res = stringBuilder.replace(3, 7, "****").toString() + } + return res } + } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_account_head.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_account_head.png new file mode 100755 index 0000000000..c9de0b61b9 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_account_head.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml index 88f719956b..fe20f404b3 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml @@ -17,24 +17,34 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> + + + app:layout_constraintTop_toBottomOf="@+id/toolBusOperationView" /> + app:layout_constraintStart_toStartOf="@+id/tv_check_title" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toBottomOf="@+id/v_second_group"> + app:layout_constraintStart_toEndOf="@+id/v_second_group" + app:layout_constraintTop_toTopOf="@+id/v_second_group" + app:layout_constraintBottom_toBottomOf="@+id/v_second_group" + /> - - + + @@ -1811,12 +1821,12 @@ android:textSize="@dimen/dp_24" /> diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_och_bus_operation.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_och_bus_operation.xml index 267d9a844a..6507f81358 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_och_bus_operation.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_och_bus_operation.xml @@ -1,17 +1,17 @@ - - - \ No newline at end of file + android:layout_marginTop="40px"/> + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml index 44111ae8da..958c053241 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml @@ -23,7 +23,7 @@ 调试面板 录包设置 车速设置 - 出收车状态 + 账户信息 系统运行 关机 重启 diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/identify/IdentifyOriginDataDrawer.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/identify/IdentifyOriginDataDrawer.kt index 343bbd8449..d4c3e3d62b 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/identify/IdentifyOriginDataDrawer.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/identify/IdentifyOriginDataDrawer.kt @@ -1,21 +1,14 @@ package com.mogo.eagle.core.function.map.identify import android.annotation.SuppressLint -import android.text.TextUtils import androidx.collection.ArraySet import com.mogo.commons.AbsMogoApplication -import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo -import com.mogo.eagle.core.data.config.FunctionBuildConfig -import com.mogo.eagle.core.data.enums.TrafficTypeEnum import com.mogo.eagle.core.data.traffic.TrafficData -import com.mogo.eagle.core.data.traffic.threatLevelColor -import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener -import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.w import com.mogo.map.MogoMarkerManager import com.mogo.module.common.MogoApisHandler -import mogo.telematics.pad.MessagePad -import mogo.telematics.pad.MessagePad.* +import mogo.telematics.pad.MessagePad.PlanningObject +import mogo.telematics.pad.MessagePad.TrackedObject import java.util.concurrent.ConcurrentHashMap /** @@ -23,20 +16,12 @@ import java.util.concurrent.ConcurrentHashMap * @date 2021/10/19 10:45 上午 * 域控制器识别信息绘制 */ -class IdentifyOriginDataDrawer : Identify, IMoGoAutopilotStatusListener { +class IdentifyOriginDataDrawer : Identify { companion object { private const val TAG = "IdentifyDataDrawer" } - init { - // 添加 ADAS状态 监听 - CallerAutoPilotStatusListenerManager.addListener(TAG, this) - } - - @Volatile - private var mAutopilotStatus: Int = 0 //自动驾驶状态 - /** * 上一帧数据的缓存 */ @@ -54,58 +39,13 @@ class IdentifyOriginDataDrawer : Identify, IMoGoAutopilotStatusListener { @SuppressLint("NewApi") private val mFilterTrafficData = HashMap() - /** - * planning 感知物预警缓存,用于重置color状态 - */ - private val pncWarningTrafficData = ConcurrentHashMap() - - /** - * obu 感知物预警缓存,用于重置color状态 - */ - private val obuWarningTrafficData = ConcurrentHashMap() - @SuppressLint("NewApi") - override fun renderPlanningWarningObj(planningObjects: List?) { - pncWarningTrafficData.clear() - if (FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData || mAutopilotStatus == 2) { - if (planningObjects == null) { - return - } - planningObjects.forEach { planningObj -> - val trackId = planningObj.uuid.toString() - if (mMarkersCaches.containsKey(trackId)) { - val trackObj = mMarkersCaches[trackId] - if (planningObj.type == 0) { - //0是leading障碍物,障碍物车身红色提示 - trackObj?.let { - pncWarningTrafficData[trackId] = PlanningTrack( - "#D65D5AFF", - CallerAutoPilotStatusListenerManager.getCurWgs84SatelliteTime() - ) - } - } else if (planningObj.type == 1) { - //1是避障和择机的障碍物,障碍物车身黄色提示 - trackObj?.let { - pncWarningTrafficData[trackId] = PlanningTrack( - "#E4DD94FF", - CallerAutoPilotStatusListenerManager.getCurWgs84SatelliteTime() - ) - } - } - } - } - } + override fun renderPlanningWarningObj(planningObjects: List?) { + WarningHelper.renderPlanningOriginWarningObj(planningObjects, mMarkersCaches) } override fun renderOBUWarningObj(exist: Boolean, obuTrafficData: TrafficData) { - if (obuTrafficData.uuid.isNullOrEmpty()) { - return - } - if (exist) { - obuWarningTrafficData[obuTrafficData.uuid!!] = obuTrafficData - } else { - obuWarningTrafficData.remove(obuTrafficData.uuid!!) - } + WarningHelper.renderOBUWarningObj(exist, obuTrafficData) } /** @@ -129,7 +69,7 @@ class IdentifyOriginDataDrawer : Identify, IMoGoAutopilotStatusListener { //清除缓存 for (data in resultList) { if (trafficDataUuidList.size > 0 && trafficDataUuidList.contains("" + data.uuid)) { - if (!FunctionBuildConfig.isDrawUnknownIdentifyData && data.type == TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI.type) { + if (TrackerSourceHelper.filterData(data)) { continue } trafficDataUuidList.remove("" + data.uuid) @@ -165,7 +105,7 @@ class IdentifyOriginDataDrawer : Identify, IMoGoAutopilotStatusListener { trafficDataUuidList.clear() for (data in trafficData) { // 过滤掉未知感知数据 - if (!FunctionBuildConfig.isDrawUnknownIdentifyData && data.type == TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI.type) { + if (TrackerSourceHelper.filterData(data)) { continue } var temp: TrackedObject = data @@ -173,38 +113,8 @@ class IdentifyOriginDataDrawer : Identify, IMoGoAutopilotStatusListener { //首次过来的数据不添加,首次未添加的感知物在调用完绘制方法后再塞入cache map val cacheData = mMarkersCaches[uuid] if (cacheData != null) { - - //OBU数据颜色标记 - val first = data.trackedSourceList.stream() - .filter { trackedSource: TrackedSource -> trackedSource.source == 4 } - .findFirst() - if (first.isPresent) { - val subFirst = first.get().subSourceList.stream() - .filter { subSource: SubSource -> subSource.source == 1 } - .findFirst() - if (subFirst.isPresent) { - val subID = subFirst.get().id - if (!TextUtils.isEmpty(subID)) { - temp = data.toBuilder().setColor("#36D3FE").build() - if (obuWarningTrafficData.containsKey(subID)) { - temp = data.toBuilder() - .setColor(obuWarningTrafficData[subID]!!.threatLevelColor()) - .build() - } - } - } - } - - //预警颜色变化 - if (pncWarningTrafficData.containsKey(uuid)) { - val planningTrack = pncWarningTrafficData[uuid] - if (!timeOut(planningTrack!!.time)) { - temp = data.toBuilder().setColor(planningTrack.color).build() - } else { - pncWarningTrafficData.remove(uuid) - } - } - + val color = TrackerSourceHelper.getDefaultColor(data) + temp = data.toBuilder().setColor(color).build() mFilterTrafficData[uuid] = temp } mMarkersCaches[uuid] = temp @@ -223,17 +133,7 @@ class IdentifyOriginDataDrawer : Identify, IMoGoAutopilotStatusListener { .removeMarker(uuid) } trafficDataUuidList.clear() - pncWarningTrafficData.clear() - } - - override fun onAutopilotStatusResponse(autoPilotStatusInfo: AutopilotStatusInfo) { - mAutopilotStatus = autoPilotStatusInfo.state - } - - private fun timeOut(time: Double): Boolean { - val duration = - (CallerAutoPilotStatusListenerManager.getCurWgs84SatelliteTime() * 1000).toLong() - (time * 1000).toLong() - return duration >= 500 + WarningHelper.clear() } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/identify/TrackManager.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/identify/TrackManager.java index dfccf31eb5..c5b5a301f3 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/identify/TrackManager.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/identify/TrackManager.java @@ -9,8 +9,6 @@ import androidx.annotation.RequiresApi; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import com.mogo.commons.AbsMogoApplication; -import com.mogo.eagle.core.data.config.FunctionBuildConfig; -import com.mogo.eagle.core.data.enums.TrafficTypeEnum; import com.mogo.eagle.core.data.traffic.TrafficData; import com.mogo.eagle.core.data.traffic.TrafficDataKt; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; @@ -22,7 +20,6 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import mogo.telematics.pad.MessagePad; @@ -64,57 +61,13 @@ public class TrackManager { @SuppressLint("NewApi") private final HashMap mFilterTrafficData = new HashMap<>(); - //感知物预警各自先以帧数更新保持,不做同一个集合的融合处理(以卫星时间做判断先后,可能会出现不同ip节点间的回溯问题) - /** - * planning 感知物预警缓存,用于重置color状态 - */ - private final ConcurrentHashMap pncWarningTrafficData = new ConcurrentHashMap<>(); - - /** - * obu 感知物预警缓存,用于重置color状态 - */ - private final ConcurrentHashMap obuWarningTrafficData = new ConcurrentHashMap<>(); - @SuppressLint("NewApi") public synchronized void renderPlanningWarningObj(List planningObjects) { - pncWarningTrafficData.clear(); - //处于美化模式或者自动驾驶状态下展示 - if (FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData || CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() == 2) { - if (planningObjects == null) { - return; - } - planningObjects.forEach(planningObj -> { - String trackId = "" + planningObj.getUuid(); - if (mMarkersCaches.containsKey(trackId)) { - TrackObj trackObj = mMarkersCaches.get(trackId); - if (trackObj == null) { - return; - } - if (planningObj.getType() == 0) { - pncWarningTrafficData.put(trackId, new PlanningTrack( - "#D65D5AFF", - CallerAutoPilotStatusListenerManager.INSTANCE.getCurWgs84SatelliteTime() - )); - } else if (planningObj.getType() == 1) { - pncWarningTrafficData.put(trackId, new PlanningTrack( - "#E4DD94FF", - CallerAutoPilotStatusListenerManager.INSTANCE.getCurWgs84SatelliteTime() - )); - } - } - }); - } + WarningHelper.INSTANCE.renderPlanningWarningObj(planningObjects, mMarkersCaches); } public synchronized void renderOBUWarningObj(boolean exist, TrafficData obuTrafficData) { - if (obuTrafficData.getUuid() == null || obuTrafficData.getUuid().isEmpty()) { - return; - } - if (exist) { - obuWarningTrafficData.put(obuTrafficData.getUuid(), obuTrafficData); - } else { - obuWarningTrafficData.remove(obuTrafficData.getUuid()); - } + WarningHelper.INSTANCE.renderOBUWarningObj(exist, obuTrafficData); } /** @@ -126,39 +79,14 @@ public class TrackManager { mFilterTrafficData.clear(); //进入过滤机制的感知物体,首先从缓存队列中进行查找 uuid for (MessagePad.TrackedObject data : trafficData) { - if (!FunctionBuildConfig.isDrawUnknownIdentifyData && data.getType() == TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI.getType()) { + if (TrackerSourceHelper.INSTANCE.filterData(data)) { continue; } String uuid = "" + data.getUuid(); TrackObj trackObj = mMarkersCaches.get(uuid); - //OBU数据颜色标记 - Optional first = data.getTrackedSourceList().stream() - .filter(trackedSource -> trackedSource.getSource() == 4).findFirst(); - if (first.isPresent()) { - Optional subFirst = first.get().getSubSourceList().stream().filter(subSource -> subSource.getSource() == 1).findFirst(); - if (subFirst.isPresent()) { - String subID = subFirst.get().getId(); - if (!TextUtils.isEmpty(subID)) { - data = data.toBuilder().setColor("#36D3FE").build(); - if (obuWarningTrafficData.containsKey(subID)) { - data = data.toBuilder() - .setColor(TrafficDataKt.threatLevelColor(obuWarningTrafficData.get(subID))) - .build(); - } - } - } - } - - // 判断物体是否与预警信息 - if (pncWarningTrafficData.containsKey(uuid)) { - PlanningTrack planningTrack = pncWarningTrafficData.get(uuid); - if (planningTrack != null && !timeOut(planningTrack.getTime())) { - data = data.toBuilder().setColor(planningTrack.getColor()).build(); - } else { - pncWarningTrafficData.remove(uuid); - } - } + String color = TrackerSourceHelper.INSTANCE.getDefaultColor(data); + data = data.toBuilder().setColor(color).build(); if (trackObj != null) { trackObj.updateObj(data); @@ -178,7 +106,7 @@ public class TrackManager { if (cache != null) { //相对静止物体并且非obu数据,则不改变,为感知融合同位置物体,使用缓存数据做覆盖 if (cacheTrack.relativeStatic()) { - if(data.getColor()!= null && !data.getColor().isEmpty()){ + if (data.getColor() != null && !data.getColor().isEmpty()) { cache = cache.toBuilder().setColor(data.getColor()).build(); } data = cache; @@ -206,7 +134,7 @@ public class TrackManager { //过滤现有元素 for (MessagePad.TrackedObject data : resultList) { String uuid = "" + data.getUuid(); - if (!FunctionBuildConfig.isDrawUnknownIdentifyData && data.getType() == TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI.getType()) { + if (TrackerSourceHelper.INSTANCE.filterData(data)) { continue; } if (trafficDataUuid.size() > 0) { @@ -234,13 +162,8 @@ public class TrackManager { @SuppressLint("NewApi") public void clearAll() { trafficDataUuid.clear(); - pncWarningTrafficData.clear(); + WarningHelper.INSTANCE.clear(); mMarkersCaches.forEach((uuid, trackObj) -> removeKey(uuid)); } - private Boolean timeOut(Double time) { - long duration = (long) (CallerAutoPilotStatusListenerManager.INSTANCE.getCurWgs84SatelliteTime() * 1000) - (long) (time * 1000); - return duration >= 500; - } - } diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/identify/TrackerSourceHelper.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/identify/TrackerSourceHelper.kt new file mode 100644 index 0000000000..470b3068b6 --- /dev/null +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/identify/TrackerSourceHelper.kt @@ -0,0 +1,135 @@ +package com.mogo.eagle.core.function.map.identify + +import android.annotation.SuppressLint +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.enums.TrafficTypeEnum +import mogo.telematics.pad.MessagePad.* + +object TrackerSourceHelper { + + @SuppressLint("NewApi") + fun filterData(data: TrackedObject): Boolean { + if (!FunctionBuildConfig.isDrawUnknownIdentifyData + && data.type == TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI.type + ) { + return true + } + var trackIPCFilter = true + when (FunctionBuildConfig.trackerIPCProvider) { + 0 -> trackIPCFilter = false + 1 -> if (isIPC(data)) { + trackIPCFilter = false + } + 2 -> { + if (isObu(data).second) { + trackIPCFilter = false + } + } + 3 -> { + if (isV2I(data).second) { + trackIPCFilter = false + } + } + } + return trackIPCFilter + } + + fun getDefaultColor(data: TrackedObject): String { + var color = "" + if (!FunctionBuildConfig.isDrawUnknownIdentifyData + && data.type == TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI.type + ) { + return "" + } + + if (isV2I(data).second) { + color = "#00AEFF" + } + + //等级最高 + if (isObu(data).second) { + color = "#36D3FE" + // obu预警 + isObu(data).first?.let { + val obuColor = WarningHelper.getObuColor(it.id) + if (obuColor.isNotBlank()) { + color = obuColor + } + } + } + + // pnc预警 + val pncColor = WarningHelper.getPncColor(data.uuid.toString()) + if (pncColor.isNotBlank()) { + color = pncColor + } + return color + } + + /** + * 过滤所有 工控感知数据 all match + */ + @SuppressLint("NewApi") + fun isIPC(data: TrackedObject): Boolean { + val source = data.trackedSourceList.stream().allMatch { + it.source != 4 + } + return source + } + + /** + * any match 任何一个匹配到OBU,则认为是存在obu数据 + */ + @SuppressLint("NewApi") + fun isObu(data: TrackedObject): Pair { + val source = data.trackedSourceList.stream().anyMatch { + it.source == 4 + } + if (source) { + val first = data.trackedSourceList.stream() + .filter { trackedSource: TrackedSource -> trackedSource.source == 4 }.findFirst() + if (first.isPresent) { + val subObu = first.get().subSourceList.stream().anyMatch { + it.source == 1 + } + if (subObu) { + val subFirst = first.get().subSourceList.stream() + .filter { subSource: SubSource -> subSource.source == 1 } + .findFirst() + if (subFirst.isPresent) { + return Pair(subFirst.get(), true) + } + } + } + } + return Pair(null, false) + } + + /** + * 过滤所有 v2i 感知数据 all match + */ + @SuppressLint("NewApi") + fun isV2I(data: TrackedObject): Pair { + val source = data.trackedSourceList.stream().allMatch { + it.source == 4 + } + if (source) { + val first = data.trackedSourceList.stream() + .filter { trackedSource: TrackedSource -> trackedSource.source == 4 }.findFirst() + if (first.isPresent) { + val subV2I = first.get().subSourceList.stream().allMatch { + it.source == 6 + } + if (subV2I) { + val subFirst = first.get().subSourceList.stream() + .filter { subSource: SubSource -> subSource.source == 6 } + .findFirst() + if (subFirst.isPresent) { + return Pair(subFirst.get(), true) + } + } + } + } + return Pair(null, false) + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/identify/WarningHelper.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/identify/WarningHelper.kt new file mode 100644 index 0000000000..f7f70ccb05 --- /dev/null +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/identify/WarningHelper.kt @@ -0,0 +1,148 @@ +package com.mogo.eagle.core.function.map.identify + +import android.annotation.SuppressLint +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.traffic.TrafficData +import com.mogo.eagle.core.data.traffic.threatLevelColor +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.getCurWgs84SatelliteTime +import mogo.telematics.pad.MessagePad +import mogo.telematics.pad.MessagePad.PlanningObject +import java.util.concurrent.ConcurrentHashMap +import java.util.function.Consumer + +object WarningHelper { + + //感知物预警各自先以帧数更新保持,不做同一个集合的融合处理(以卫星时间做判断先后,可能会出现不同ip节点间的回溯问题) + /** + * planning 感知物预警缓存,用于重置color状态 + */ + private val pncWarningBeautyTrafficData = ConcurrentHashMap() + + /** + * planning 感知物预警缓存,用于重置color状态 + */ + private val pncWarningOriginTrafficData = ConcurrentHashMap() + + /** + * obu 感知物预警缓存,用于重置color状态 + */ + private val obuWarningTrafficData = ConcurrentHashMap() + + @SuppressLint("NewApi") + fun renderPlanningWarningObj( + planningObjects: List?, + mMarkersCaches: ConcurrentHashMap + ) { + pncWarningBeautyTrafficData.clear() + //处于美化模式或者自动驾驶状态下展示 + if (FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData || getAutoPilotStatusInfo().state == 2) { + if (planningObjects == null) { + return + } + planningObjects.forEach(Consumer { planningObj: PlanningObject -> + val trackId = "" + planningObj.uuid + if (mMarkersCaches.containsKey(trackId)) { + mMarkersCaches[trackId] ?: return@Consumer + if (planningObj.type == 0) { //0是leading障碍物,障碍物车身红色提示 + pncWarningBeautyTrafficData[trackId] = PlanningTrack( + "#D65D5AFF", + getCurWgs84SatelliteTime() + ) + } else if (planningObj.type == 1) { //1是避障和择机的障碍物,障碍物车身黄色提示 + pncWarningBeautyTrafficData[trackId] = PlanningTrack( + "#E4DD94FF", + getCurWgs84SatelliteTime() + ) + } + } + }) + } + } + + @SuppressLint("NewApi") + fun renderPlanningOriginWarningObj( + planningObjects: List?, + mMarkersCaches: ConcurrentHashMap + ) { + pncWarningOriginTrafficData.clear() + //处于美化模式或者自动驾驶状态下展示 + if (FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData || getAutoPilotStatusInfo().state == 2) { + if (planningObjects == null) { + return + } + planningObjects.forEach(Consumer { planningObj: PlanningObject -> + val trackId = "" + planningObj.uuid + if (mMarkersCaches.containsKey(trackId)) { + mMarkersCaches[trackId] ?: return@Consumer + if (planningObj.type == 0) { //0是leading障碍物,障碍物车身红色提示 + pncWarningOriginTrafficData[trackId] = PlanningTrack( + "#D65D5AFF", + getCurWgs84SatelliteTime() + ) + } else if (planningObj.type == 1) { //1是避障和择机的障碍物,障碍物车身黄色提示 + pncWarningOriginTrafficData[trackId] = PlanningTrack( + "#E4DD94FF", + getCurWgs84SatelliteTime() + ) + } + } + }) + } + } + + fun renderOBUWarningObj(exist: Boolean, obuTrafficData: TrafficData) { + if (obuTrafficData.uuid == null || obuTrafficData.uuid!!.isEmpty()) { + return + } + if (exist) { + obuWarningTrafficData[obuTrafficData.uuid!!] = obuTrafficData + } else { + obuWarningTrafficData.remove(obuTrafficData.uuid) + } + } + + fun getObuColor(uuid: String): String { + if (obuWarningTrafficData.containsKey(uuid)) { + return obuWarningTrafficData[uuid]!!.threatLevelColor() + } + return "" + } + + fun getPncColor(uuid: String): String { + if (FunctionBuildConfig.isBeautyMode) { + // 判断物体是否有预警信息 + if (pncWarningBeautyTrafficData.containsKey(uuid)) { + val planningTrack = pncWarningBeautyTrafficData[uuid] + if (planningTrack != null && !timeOut(planningTrack.time)) { + return planningTrack.color + } else { + pncWarningBeautyTrafficData.remove(uuid) + } + } + return "" + } else { + // 判断物体是否有预警信息 + if (pncWarningOriginTrafficData.containsKey(uuid)) { + val planningTrack = pncWarningOriginTrafficData[uuid] + if (planningTrack != null && !timeOut(planningTrack.time)) { + return planningTrack.color + } else { + pncWarningOriginTrafficData.remove(uuid) + } + } + return "" + } + } + + fun clear() { + pncWarningBeautyTrafficData.clear() + pncWarningOriginTrafficData.clear() + obuWarningTrafficData.clear() + } + + private fun timeOut(time: Double): Boolean { + val duration = (getCurWgs84SatelliteTime() * 1000).toLong() - (time * 1000).toLong() + return duration >= 500 + } +} \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt index 4f12272c8f..ed2b6943ae 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt @@ -80,7 +80,7 @@ object FunctionBuildConfig { var debugTrackerProvider = 0 /** - * 感知物识别使用的数据来源 0 = 默认输出 1 = 只显示工控硬件数据感知来源 2 = 只显示V2V数据来源 3 = 只显示V2N数据来源 + * 感知物识别使用的数据来源 0 = 默认输出 1 = 只显示工控硬件数据感知来源 2 = 只显示V2V数据来源 3 = 只显示V2I数据来源 */ @Volatile @JvmField diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/temp/EventBusOperation.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/temp/EventBusOperation.kt deleted file mode 100644 index 3aefda4737..0000000000 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/temp/EventBusOperation.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.mogo.eagle.core.data.temp - -/** - * @author: wangmingjun - * @date: 2022/8/23 - */ -class EventBusOperation constructor(var id:Int -) { - -} \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt index 5921a99347..61b818993d 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt @@ -257,7 +257,5 @@ interface IMoGoWaringProvider : IMoGoHmiViewProxy { fun showVideoDialog(infList: List) - fun changeBusOperationStatus(isOut:Boolean) - fun setBusOperationView(view:IOchBusView) } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt index 2f8411528c..4b81da2533 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt @@ -397,13 +397,6 @@ object CallerHmiManager : CallerBase() { waringProviderApi?.showVideoDialog(infList) } - /** - * bus出车/收车状态设置 - * true : 显示收车; false:显示出车 - */ - fun changeBusOperationStatus(isOut: Boolean) { - waringProviderApi?.changeBusOperationStatus(isOut) - } /** * 设置 bus出车/收车View diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java index fa71aec7a7..6a64322c93 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java @@ -744,15 +744,6 @@ public class AMapViewWrapper implements IMogoMapView, mainHandler.removeCallbacks(mLocationTask); mainHandler.post(mLocationTask); } - Location sysLocation = new Location(location.getProvider()); - sysLocation.setAltitude(location.getAltitude()); - sysLocation.setLatitude(location.getLat()); - sysLocation.setLongitude(location.getLon()); - sysLocation.setProvider(location.getProvider()); - sysLocation.setAccuracy(location.getAcceleration()); - sysLocation.setTime(location.duration); - sysLocation.setBearing((float) location.getHeading()); - sysLocation.setSpeed(location.getSpeed()); // 将有效经纬度暂存本地,提供给下一次的Http-DNS使用,防止首次请求位置获取不到 if (location.getLat() > 0 && location.getLon() > 0) { @@ -766,6 +757,17 @@ public class AMapViewWrapper implements IMogoMapView, .putString(SharedPrefsConstants.LOCATION_LONGITUDE, String.valueOf(location.getLon())); } + // 同步给各个模块 + Location sysLocation = new Location(location.getProvider()); + sysLocation.setAltitude(location.getAltitude()); + sysLocation.setLatitude(location.getLat()); + sysLocation.setLongitude(location.getLon()); + sysLocation.setProvider(location.getProvider()); + sysLocation.setAccuracy(location.getAcceleration()); + sysLocation.setTime(location.duration); + sysLocation.setBearing((float) location.getHeading()); + sysLocation.setSpeed(location.getSpeed()); + if (MogoCarLocationChangedListenerRegister.getInstance().getListener() != null) { MogoCarLocationChangedListenerRegister.getInstance().getListener().onCarLocationChanged2(sysLocation); } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/EventTypeEnum.kt b/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/EventTypeEnum.kt index 7521d0ac83..2f9a527d69 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/EventTypeEnum.kt +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/EventTypeEnum.kt @@ -363,8 +363,8 @@ enum class EventTypeEnum( tts = "" ), - TYPE_VIP_IDENTIFICATION("10022", "", "", R.drawable.icon_warning_v2x_vip_turn_light, "VIP车辆优先通行", "已为您变灯请优先通行"), - TYPE_VIP_ERROR_IDENTIFICATION("10023", "", "", R.drawable.icon_warning_v2x_vip_turn_light, "请求失败,", "请求失败请稍后重试"), + TYPE_VIP_IDENTIFICATION("10022", "", "", R.drawable.icon_warning_v2x_vip_turn_light, "VIP车辆优先通行", "已为您变灯,请优先通行"), + TYPE_VIP_ERROR_IDENTIFICATION("10023", "", "", R.drawable.icon_warning_v2x_vip_turn_light, "请求失败,", "请求失败,请稍后重试"), TYPE_OPTIMAL_ROUTE_RECOMMEND("2000", "", "", R.drawable.icon_warning_v2x_optimal_route, "为您推荐最优路线", "已为您选择最优路线");