From 49874015aa498554aa858c4430352b35123ad6a7 Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Tue, 26 Jan 2021 18:26:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0adas=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=EF=BC=8C=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E9=A9=BE=E9=A9=B6=E5=BC=82=E5=B8=B8=E7=8A=B6=E6=80=81=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/gradle.xml | 1 + .../java/com/mogo/och/bus/OchBusProvider.java | 8 +-- .../och/bus/adapter/OchBusStationAdapter.java | 29 +++++++-- .../mogo/och/bus/fragment/OchBusFragment.java | 13 ++++ .../och/bus/presenter/OchBusPresenter.java | 31 +++++++-- .../och/bus/view/VerticalDashLineView.java | 64 +++++++++++++++++++ ...e_mogo_och_bus_station_green_dash_line.xml | 3 + ...dule_mogo_och_bus_station_v_green_dash.xml | 4 +- .../main/res/layout/item_och_bus_station.xml | 6 +- .../src/main/res/values/colors.xml | 8 +++ .../com/mogo/och/taxi/MogoOCHTaxiModel.java | 5 ++ .../com/mogo/och/taxi/ui/OCHTaxiFragment.java | 5 ++ .../java/com/mogo/och/BaseOchFragment.java | 57 +++++++++++++---- config.gradle | 2 +- .../service/adas/IMogoADASController.java | 2 + .../service/adas/IMogoAdasOCHCallback.java | 21 ++++++ .../service/impl/adas/MogoADASController.java | 17 +++++ 17 files changed, 246 insertions(+), 30 deletions(-) create mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/VerticalDashLineView.java diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 771c1f74d7..740794bd48 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -89,6 +89,7 @@ diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/OchBusProvider.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/OchBusProvider.java index e8c49b8e8b..fcd71674c3 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/OchBusProvider.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/OchBusProvider.java @@ -39,23 +39,23 @@ public class OchBusProvider implements IMogoOCH { public void init(Context context) { MogoApisHandler.getInstance().getApis().getStatusManagerApi().registerStatusChangedListener("OchBus", StatusDescriptor.VR_MODE, statusChangedListener); MogoApisHandler.getInstance().getApis().getStatusManagerApi().registerStatusChangedListener("OchBus", StatusDescriptor.TOP_VIEW, statusChangedListener); - MogoApisHandler.getInstance().getApis().getSocketManagerApi(context).registerOnMessageListener(401017,messageListener); + MogoApisHandler.getInstance().getApis().getSocketManagerApi(context).registerOnMessageListener(401017, messageListener); } private void showFragment() { if (busFragment == null) { - Logger.d(TAG,"准备add fragment======"); + Logger.d(TAG, "准备add fragment======"); busFragment = new OchBusFragment(); activity.getSupportFragmentManager().beginTransaction().add(containerId, busFragment).commit(); return; } - Logger.d(TAG,"准备show fragment"); + Logger.d(TAG, "准备show fragment"); activity.getSupportFragmentManager().beginTransaction().show(busFragment).commit(); } private void hideFragment() { if (busFragment != null) { - Logger.d(TAG,"准备hide fragment"); + Logger.d(TAG, "准备hide fragment"); activity.getSupportFragmentManager().beginTransaction().hide(busFragment).commit(); } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/adapter/OchBusStationAdapter.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/adapter/OchBusStationAdapter.java index 652fcd132f..287805d84b 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/adapter/OchBusStationAdapter.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/adapter/OchBusStationAdapter.java @@ -1,6 +1,7 @@ package com.mogo.och.bus.adapter; import android.content.Context; +import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -13,6 +14,8 @@ import androidx.recyclerview.widget.RecyclerView; import com.mogo.och.bus.R; import com.mogo.och.bus.bean.OchBusStation; import com.mogo.och.bus.constant.OchBusConst; +import com.mogo.och.bus.view.VerticalDashLineView; +import com.mogo.utils.logger.Logger; import java.util.ArrayList; import java.util.List; @@ -23,7 +26,6 @@ import java.util.List; * @author tongchenfei */ public class OchBusStationAdapter extends RecyclerView.Adapter { - private final Context context; private final List stationList = new ArrayList<>(); private int currentStation; @@ -53,17 +55,36 @@ public class OchBusStationAdapter extends RecyclerView.Adapter implements IMogoA // } } + public void restartAutopilot(){ + MogoApisHandler.getInstance().getApis().getAdasControllerApi().aiCloudToAdasData(currentAutopilot); + } + private RemoteControlAutoPilotParameters currentAutopilot; public void autoDriveToNextStation() { if (currentStationIndex >= stationList.size() - 1) { // 当前站是最后一站,结束当前行程 @@ -119,11 +123,11 @@ public class OchBusPresenter extends Presenter implements IMogoA OchBusStation nextStation = stationList.get(currentStationIndex + 1); currentStation.setIsCurrentSite(STATION_STATUS_LEAVING); nextStation.setIsCurrentSite(STATION_STATUS_ARRIVING); - RemoteControlAutoPilotParameters parameters = new RemoteControlAutoPilotParameters(); - parameters.startLatLon = new RemoteControlAutoPilotParameters.AutoPilotLonLat(currentStation.getLat(), currentStation.getLon()); - parameters.endLatLon = new RemoteControlAutoPilotParameters.AutoPilotLonLat(nextStation.getLat(), nextStation.getLon()); - parameters.vehicleType = VEHICAL_TYPE; - MogoApisHandler.getInstance().getApis().getAdasControllerApi().aiCloudToAdasData(parameters); + currentAutopilot = new RemoteControlAutoPilotParameters(); + currentAutopilot.startLatLon = new RemoteControlAutoPilotParameters.AutoPilotLonLat(currentStation.getLat(), currentStation.getLon()); + currentAutopilot.endLatLon = new RemoteControlAutoPilotParameters.AutoPilotLonLat(nextStation.getLat(), nextStation.getLon()); + currentAutopilot.vehicleType = VEHICAL_TYPE; + MogoApisHandler.getInstance().getApis().getAdasControllerApi().aiCloudToAdasData(currentAutopilot); RequestBody request = RequestBody.create(MediaType.get("application/json"), GsonUtil.jsonFromObject(new OchBusLeaveStationRequest(Utils.getSn(), currentStation.getSiteId()))); MogoApisHandler.getInstance().getApis().getNetworkApi() @@ -185,4 +189,21 @@ public class OchBusPresenter extends Presenter implements IMogoA mView.refreshBusStations(stationList); } } + + @Override + public void onStateChanged(int state, String reason) { + switch (state) { + case IMogoAdasOCHCallback.STATUS_AUTOPILOT_ENABLE: + mView.onAutopilotEnableChange(true); + mView.onAutopilotStatusChanged(false); + break; + case IMogoAdasOCHCallback.STATUS_AUTOPILOT_RUNNING: + mView.onAutopilotEnableChange(true); + mView.onAutopilotStatusChanged(true); + break; + default: + mView.onAutopilotEnableChange(false); + break; + } + } } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/VerticalDashLineView.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/VerticalDashLineView.java new file mode 100644 index 0000000000..250d4a41b6 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/VerticalDashLineView.java @@ -0,0 +1,64 @@ +package com.mogo.och.bus.view; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.DashPathEffect; +import android.graphics.LinearGradient; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.Shader; +import android.util.AttributeSet; +import android.view.View; + +import androidx.annotation.Nullable; + +/** + * 垂直虚线 + * + * @author tongchenfei + */ +public class VerticalDashLineView extends View { + public VerticalDashLineView(Context context) { + this(context,null); + } + + public VerticalDashLineView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs,0); + } + + public VerticalDashLineView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + private final Paint linePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Path dashPath = new Path(); + + private void init(){ + linePaint.setColor(Color.GREEN); + linePaint.setStyle(Paint.Style.STROKE); + linePaint.setStrokeWidth(2); + linePaint.setPathEffect(new DashPathEffect(new float[]{5, 5}, 0)); + } + + public void setGradient(int startColor, int endColor) { + LinearGradient linearGradient = new LinearGradient(0, 0, getWidth(), getHeight(), startColor, endColor, Shader.TileMode.CLAMP); + linePaint.setShader(linearGradient); + invalidate(); + } + + public void setColor(int color) { + linePaint.setShader(null); + linePaint.setColor(color); + invalidate(); + } + + @Override + protected void onDraw(Canvas canvas) { + dashPath.reset(); + dashPath.moveTo((float) getWidth()/2, 0); + dashPath.lineTo((float) getWidth()/2,getHeight()); + canvas.drawPath(dashPath,linePaint); + } +} diff --git a/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_green_dash_line.xml b/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_green_dash_line.xml index ede7dd747d..e8584b47ff 100644 --- a/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_green_dash_line.xml +++ b/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_green_dash_line.xml @@ -6,4 +6,7 @@ android:dashGap="5px" android:dashWidth="5px" android:color="@color/module_mogo_och_bus_current_station_notice_text_color" /> + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_v_green_dash.xml b/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_v_green_dash.xml index d184a7bf11..969b501621 100644 --- a/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_v_green_dash.xml +++ b/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_v_green_dash.xml @@ -1,6 +1,8 @@ - + - - #FF51649D #FF8299EB + #51649D + #427d8e + #1FA7FF + #3FC281 + #427d8e + #3FC281 + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java index b8956f2f0a..59715d5686 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java @@ -461,6 +461,11 @@ class MogoOCHTaxiModel { mIsArriveAtEndStation = true; OCHTaxiUiController.getInstance().onArriveAtEndStation(); } + + @Override + public void onStateChanged(int state, String reason) { + + } } /** diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java index 89c15ecbf8..8ad87aa483 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java @@ -49,6 +49,11 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i return R.layout.module_och_taxi_panel; } + @Override + public void restartAutopilot() { + // todo 重新开始自动驾驶 + } + @Override protected void initViews() { super.initViews(); diff --git a/OCH/mogo-och/src/main/java/com/mogo/och/BaseOchFragment.java b/OCH/mogo-och/src/main/java/com/mogo/och/BaseOchFragment.java index a96c5bbd5d..d64f21d9c4 100644 --- a/OCH/mogo-och/src/main/java/com/mogo/och/BaseOchFragment.java +++ b/OCH/mogo-och/src/main/java/com/mogo/och/BaseOchFragment.java @@ -6,19 +6,21 @@ import android.widget.CheckedTextView; import android.widget.FrameLayout; import android.widget.TextView; -import androidx.fragment.app.Fragment; - import com.mogo.commons.mvp.IView; import com.mogo.commons.mvp.MvpFragment; import com.mogo.commons.mvp.Presenter; import com.mogo.module.common.MogoApisHandler; +import com.mogo.module.common.view.OnPreventFastClickListener; import com.mogo.och.view.FrameAnimImageView; import com.mogo.och.view.SlidePanelView; +import com.mogo.service.adas.IMogoAdasOCHCallback; import com.mogo.service.statusmanager.IMogoStatusChangedListener; import com.mogo.service.statusmanager.StatusDescriptor; /** * 网约车基础Fragment,主要负责布局通用界面,处理站点面板和通话面板互斥情况 + *

+ * 部分业务放在了此处处理 * * @author tongchenfei */ @@ -32,10 +34,13 @@ public abstract class BaseOchFragment> e private final SlidePanelView.OnSlidePanelMoveToEndListener onSlideToEndListener = () -> { // 此处做一个代理,处理一下共有情况 - hideSlidePanel(); - hideNotice(); - if (getSlidePanelOnEndListener() != null) { - getSlidePanelOnEndListener().moveToEnd(); + // 判断一下当前是否可以自动驾驶 + if (MogoApisHandler.getInstance().getApis().getAdasControllerApi().getAutopilotStatus() != IMogoAdasOCHCallback.STATUS_AUTOPILOT_DISABLE) { + hideSlidePanel(); + hideNotice(); + if (getSlidePanelOnEndListener() != null) { + getSlidePanelOnEndListener().moveToEnd(); + } } }; @@ -56,17 +61,30 @@ public abstract class BaseOchFragment> e slidePanelView.setOnSlidePanelMoveToEndListener(onSlideToEndListener); fivNoticeHead.setAnimRes(sHappy1); + ctvAutopilotStatus.setOnClickListener(new OnPreventFastClickListener() { + @Override + public void onClickImpl(View v) { + // 如果能自动驾驶,就自动驾驶,不能就提示 + if (MogoApisHandler.getInstance().getApis().getAdasControllerApi().getAutopilotStatus() != IMogoAdasOCHCallback.STATUS_AUTOPILOT_DISABLE) { + restartAutopilot(); + } + } + }); + checkCallView(MogoApisHandler.getInstance().getApis().getStatusManagerApi().isCallViewShow()); MogoApisHandler.getInstance().getApis().getStatusManagerApi().registerStatusChangedListener("Och", StatusDescriptor.CALL_VIEW, callViewListener); + if (MogoApisHandler.getInstance().getApis().getAdasControllerApi().getAutopilotStatus() == IMogoAdasOCHCallback.STATUS_AUTOPILOT_DISABLE) { + hideAutopilotBiz(); + } } - private void checkCallView(boolean isShown){ + private void checkCallView(boolean isShown) { if (flStationPanelContainer == null) { return; } if (isShown) { flStationPanelContainer.setTranslationY(131f); - }else{ + } else { flStationPanelContainer.setTranslationY(0f); } } @@ -76,7 +94,7 @@ public abstract class BaseOchFragment> e slidePanelView.setVisibility(View.VISIBLE); } - public void hideSlidePanel(){ + public void hideSlidePanel() { slidePanelView.setVisibility(View.GONE); } @@ -87,7 +105,7 @@ public abstract class BaseOchFragment> e fivNoticeHead.startAnim(); } - public void hideNotice(){ + public void hideNotice() { tvNotice.setVisibility(View.GONE); fivNoticeHead.setVisibility(View.GONE); fivNoticeHead.stopAnim(); @@ -95,13 +113,24 @@ public abstract class BaseOchFragment> e /** * 改变自动驾驶状态 + * * @param isInAutopilot true - 在自动驾驶中 false - 不在自动驾驶中 */ public void onAutopilotStatusChanged(boolean isInAutopilot) { ctvAutopilotStatus.setChecked(isInAutopilot); } - public SlidePanelView.OnSlidePanelMoveToEndListener getSlidePanelOnEndListener(){ + public void hideAutopilotBiz() { + ctvAutopilotStatus.setVisibility(View.GONE); + slidePanelView.setVisibility(View.GONE); + } + + public void showAutopilotBiz() { + ctvAutopilotStatus.setVisibility(View.VISIBLE); + slidePanelView.setVisibility(View.VISIBLE); + } + + public SlidePanelView.OnSlidePanelMoveToEndListener getSlidePanelOnEndListener() { return null; } @@ -119,10 +148,16 @@ public abstract class BaseOchFragment> e /** * 获取站点面板view,在{@link #initViews()}时候添加到container中 + * * @return 站点面板view */ public abstract int getStationPanelViewId(); + /** + * 重新开启自动驾驶 + */ + public abstract void restartAutopilot(); + private final int[] sHappy1 = { R.drawable.ic_happy1_00000, R.drawable.ic_happy1_00001, diff --git a/config.gradle b/config.gradle index 2d94a623cc..08bb382f78 100644 --- a/config.gradle +++ b/config.gradle @@ -157,7 +157,7 @@ ext { gpssimulatordebug : "com.mogo.module:module-gps-simulator-debug:${MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION}", gpssimulatornoop : "com.mogo.module:module-gps-simulator-noop:${MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION}", - adasapi : "com.zhidao.autopilot.support:adas:1.0.6.7", + adasapi : "com.zhidao.autopilot.support:adas:1.0.6.8", adasconfigapi : "com.zhidao.adasconfig:adasconfig:1.1.5.2", // 个人中心的SDK diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java index 5e6f15a468..46c43bf744 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java @@ -141,4 +141,6 @@ public interface IMogoADASController extends IProvider { void removeAdasOCHCallback(); void onAutopilotArriveLike( int type ); + + int getAutopilotStatus(); } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoAdasOCHCallback.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoAdasOCHCallback.java index e65edcaab0..08cde96f3c 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoAdasOCHCallback.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoAdasOCHCallback.java @@ -11,5 +11,26 @@ public */ interface IMogoAdasOCHCallback { + /** + * 不可自动驾驶 + */ + int STATUS_AUTOPILOT_DISABLE = 0; + /** + * 可自动驾驶 + */ + int STATUS_AUTOPILOT_ENABLE = 1; + /** + * 自动驾驶中 + */ + int STATUS_AUTOPILOT_RUNNING = 2; + + void onArriveAt( AdasOCHData data ); + + /** + * 自动驾驶状态发生改变 + * @param state {@link #STATUS_AUTOPILOT_DISABLE} + * @param reason 不能自动驾驶的原因 + */ + void onStateChanged(int state, String reason); } diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java index f9e0556a24..af2b2c9a58 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java @@ -47,6 +47,7 @@ import com.zhidao.autopilot.support.api.AutopilotServiceManage; import com.zhidao.autopilot.support.api.IAutopilotServiceStatusListener; import com.zhidao.autopilot.support.api.IAutopolitDataCallBack; import com.zhidao.autopilotservice.model.AdasAIDLAutopilotArriveModel; +import com.zhidao.autopilotservice.model.AdasAIDLAutopilotStateModel; import com.zhidao.support.adas.high.OnAdasListener; import com.zhidao.support.adas.high.bean.CarStateInfo; import com.zhidao.support.adas.high.bean.RectInfo; @@ -350,6 +351,11 @@ public class MogoADASController implements IMogoADASController { mMogoAdasCarDataCallback.onAdasCarDataCallback( stateInfo ); } } + + @Override + public void notifyAutopilotState(AdasAIDLAutopilotStateModel autopilotStateModel) { + + } }; AutopilotServiceManage.getInstance().registerAutopilotDataListener( mAutopolitDataCallBack ); } @@ -656,4 +662,15 @@ public class MogoADASController implements IMogoADASController { ); } } + + @Override + public int getAutopilotStatus() { + int status = IMogoAdasOCHCallback.STATUS_AUTOPILOT_DISABLE; + try { + AutopilotServiceManage.getInstance().autopilotStateCall().getState(); + } catch (Exception e) { + e.printStackTrace(); + } + return status; + } }