loadAllWeltDataInfo();
+}
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/BaseSweeperTabFragment.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/BaseSweeperTabFragment.java
new file mode 100644
index 0000000000..3cab0a8613
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/BaseSweeperTabFragment.java
@@ -0,0 +1,611 @@
+package com.mogo.och.sweepercloud.fragment;
+
+import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_SWEEPER;
+
+import android.os.Bundle;
+import android.os.Parcelable;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.constraintlayout.widget.Group;
+import androidx.fragment.app.FragmentTransaction;
+
+import com.amap.api.maps.model.LatLng;
+import com.elegant.network.utils.GsonUtil;
+import com.google.protobuf.TextFormat;
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.commons.mvp.IView;
+import com.mogo.commons.mvp.MvpFragment;
+import com.mogo.commons.mvp.Presenter;
+import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters;
+import com.mogo.eagle.core.data.config.FunctionBuildConfig;
+import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager;
+import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager;
+import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager;
+import com.mogo.eagle.core.function.call.hmi.CallerHmiManager;
+import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager;
+import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxBubbleView;
+import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxButtonView;
+import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxListView;
+import com.mogo.eagle.core.function.view.MapBizView;
+import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
+import com.mogo.eagle.core.utilcode.mogo.view.OnPreventFastClickListener;
+import com.mogo.eagle.core.utilcode.util.ThreadUtils;
+import com.mogo.eagle.core.utilcode.util.ToastUtils;
+import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
+import com.mogo.map.listener.IMogoMapListener;
+import com.mogo.map.listener.MogoMapListenerHandler;
+import com.mogo.map.marker.IMogoMarkerManager;
+import com.mogo.map.uicontroller.IMogoMapUIController;
+import com.mogo.map.uicontroller.VisualAngleMode;
+import com.mogo.och.common.module.manager.OCHAdasAbilityManager;
+import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil;
+import com.mogo.och.common.module.utils.PinYinUtil;
+import com.mogo.och.sweepercloud.R;
+import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean;
+import com.mogo.och.sweepercloud.callback.ISweeperTaskDataToFragmentCallback;
+import com.mogo.och.sweepercloud.callback.IWeltMapSwitchToSmallCallback;
+import com.mogo.och.sweepercloud.database.bean.WeltDataBean;
+import com.mogo.och.sweepercloud.util.AutopilotModeConfigManager;
+import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils;
+import com.mogo.och.sweepercloud.view.SweeperTrafficDataView;
+import com.mogo.och.sweepercloud.view.WeltSmallMapView;
+import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+
+import mogo.telematics.pad.MessagePad;
+
+/**
+ * 网约车基础Fragment,主要负责布局通用界面,处理站点面板和通话面板互斥情况
+ *
+ * 部分业务放在了此处处理
+ *
+ * @author tongchenfei
+ */
+public abstract class BaseSweeperTabFragment> extends MvpFragment implements IMogoMapListener,
+ IWeltMapSwitchToSmallCallback, View.OnTouchListener {
+
+ private static final String TAG = "BaseSweeperTabFragment";
+ //地图放大缩小
+ private ImageView mSwitchMapModeImage;
+ //设置信息面板
+ protected ImageView mSettingBtn;
+ //安全员问题上报面板
+ protected ImageView mCardBtn;
+ //道路状况上报面板
+ protected ImageView mAICollectBtn;
+ //任务列表面板
+ private FrameLayout flTaskListPanelContainer;
+ private MapBizView mapBizView;
+ private Group groupTestPanel;
+ //清扫车车辆基本信息 速度 档位 转向灯 红绿灯等
+ private SweeperTrafficDataView mTrafficDataView;
+ //作业任务贴边数据展示图
+ private WeltSmallMapView mMapWeltView;
+ //任务作业全览图
+ private WeltMapOverViewFragment mWeltMapOverViewFragment;
+ private FrameLayout mFlWeltMapOverView;
+ private DriverMsgBoxButtonView mViewDriverMsgBoxButton;
+ private DriverMsgBoxListView mViewDriverMsgBoxList;
+ private DriverMsgBoxBubbleView mViewDriverMsgBoxBubble;
+ private ArrayList mWeltDataBeanList;//存储贴边数据
+ private ArrayList mSubTaskCoordinates;//存储当前大任务的所有子任务起点和终点
+ // 当前子任务的终点坐标
+ protected LatLng mCurrentTaskEndStation;
+ private ArrayList mRouteList;//存储任务的坐标轨迹
+ private String mProgress;
+ private ISweeperTaskDataToFragmentCallback mTaskDataToFragmentCallback;
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.sweeper_base_fragment;
+ }
+
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ return true;
+ }
+
+ @Override
+ protected void initViews() {
+ mapBizView = findViewById(R.id.mapBizView);
+ groupTestPanel = findViewById(R.id.groupTestPanel);
+ flTaskListPanelContainer = findViewById(R.id.module_mogo_och_task_list_container);
+ mTrafficDataView = findViewById(R.id.sweeper_arc);
+ LayoutInflater.from(getContext()).inflate(getTaskListPanelViewId(), flTaskListPanelContainer);
+ mSwitchMapModeImage = findViewById(R.id.sweeper_switch_model_icon);
+ mSettingBtn = findViewById(R.id.sweeper_setting_model_icon);
+ mCardBtn = findViewById(R.id.sweeper_card_model_icon);
+ mAICollectBtn = findViewById(R.id.sweeper_collect_model_icon);
+ mMapWeltView = findViewById(R.id.sweeper_task_welt_small_map);
+ mFlWeltMapOverView = findViewById(R.id.sweeper_welt_map_overview);
+ initListener();
+ //设置消息盒子
+ setMessageBox();
+ //设置左下角四个按钮监听事件
+ setBottomBtnListener();
+ // 模拟 下发启动自驾命令
+ findViewById(R.id.btnStartAutopilot).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (!FunctionBuildConfig.isDemoMode && !OCHAdasAbilityManager.getInstance().getAutopilotAbilityStatus()) {
+ ToastUtils.showLong(OCHAdasAbilityManager.getInstance().getAutopilotUnAbilityReason() + ", 请稍候重试");
+ return;
+ }
+ new AutopilotModeConfigManager(new AutopilotModeConfigManager.OnReadAutopilotModeConfigListener() {
+ @Override
+ public void onReadFailed(String err) {
+ ThreadUtils.runOnUiThread(() -> {
+ ToastUtils.showLong("读取失败=" + err);
+ });
+ }
+
+ @Override
+ public void onParseFailed(String err) {
+ ToastUtils.showLong("解析失败=" + err);
+ }
+
+ @Override
+ public void onParse(MessagePad.SetAutopilotModeReq bean) {
+ ToastUtils.showLong("下发命令\n" + TextFormat.printer().escapingNonAscii(false).printToString(bean));
+ AutopilotControlParameters parameters = new AutopilotControlParameters();
+ MessagePad.RouteInfo routeInfo = bean.getRouteInfo();
+ if (routeInfo.getRouteID() > 0) {
+ parameters.routeID = routeInfo.getRouteID();
+ }
+ parameters.routeName = routeInfo.getRouteName();
+ parameters.startName = routeInfo.getStartName();//拼音
+ parameters.endName = routeInfo.getEndName();//拼音
+ parameters.startLatLon = new AutopilotControlParameters
+ .AutoPilotLonLat(routeInfo.getStartLocation().getLatitude(), routeInfo.getStartLocation().getLongitude());
+ parameters.endLatLon = new AutopilotControlParameters
+ .AutoPilotLonLat(routeInfo.getEndLocation().getLatitude(), routeInfo.getEndLocation().getLongitude());
+ parameters.vehicleType = 10;
+ MessagePad.Line line = routeInfo.getLine();
+ parameters.autoPilotLine = new AutopilotControlParameters.AutoPilotLine(
+ line.getLineId(),
+ line.getTrajUrl(), line.getTrajMd5(),
+ line.getStopUrl(), line.getStopMd5(),
+ line.getTimestamp(), line.getVehicleModel(),
+ line.getTrajUrlDpqp(), line.getTrajMd5Dpqp(),
+ line.getStopUrlDpqp(), line.getStopMd5Dpqp(),
+ line.getTimestampDpqp());
+ CallerAutoPilotControlManager.INSTANCE.startAutoPilot(parameters);
+ }
+ }).read();
+ }
+ });
+ // 模拟 查询当前任务
+ findViewById(R.id.btnQueryCurrentTask).setOnClickListener(view ->
+ SweeperCloudTaskUtils.mockQueryCurrentTaskInfo()
+ );
+ // 模拟 云端发送任务
+ findViewById(R.id.btnSendTask).setOnClickListener(view -> {
+ SweeperCloudTaskUtils.mockSendCloudTaskInfo(SweeperCloudTask.MessageType.CloudPushTask);
+ UiThreadHandler.postDelayed(() -> {
+ debugEndSubTask();
+ }, 5000);
+
+ }
+
+ );
+ // 模拟 云端发送子任务确认
+ findViewById(R.id.btnSendSubTaskConfirm).setOnClickListener(view ->
+ SweeperCloudTaskUtils.mockSendCloudSubTaskConfirm()
+ );
+
+ // 模拟 云端请求结束大任务
+ findViewById(R.id.btnSendEndTask).setOnClickListener(view ->
+ SweeperCloudTaskUtils.mockSendCloudBigTaskEnd()
+ );
+ // 模拟 云端发送子任务状态
+ findViewById(R.id.btnSendSubtaskStatus).setOnClickListener(view ->
+ SweeperCloudTaskUtils.mockSendCloudUpdateSubTaskStatus()
+ );
+ // 模拟 云端发送大任务状态
+ findViewById(R.id.btnSendTaskStatus).setOnClickListener(view ->
+ SweeperCloudTaskUtils.mockSendCloudBigTaskStatus()
+ );
+ mTrafficDataView.getSpeedImage().setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ debugTestBar();
+ return false;
+ }
+ });
+ }
+
+ private void updateSwitchMapIcon() {
+ IMogoMapUIController controller = CallerMapUIServiceManager.INSTANCE.getMapUIController();
+ if (controller != null) {
+ if (controller.getCurrentMapVisualAngle().isLongSight()) {
+ mSwitchMapModeImage.setImageResource(R.drawable.sweeper_switch_map_big_selector);
+ } else if (controller.getCurrentMapVisualAngle().isMediumSight()) {
+ mSwitchMapModeImage.setImageResource(R.drawable.sweeper_switch_map_small_selector);
+ } else {
+ mSwitchMapModeImage.setImageResource(R.drawable.sweeper_switch_map_small_selector);
+ }
+ }
+ }
+
+ /**
+ * 设置任务进度
+ *
+ * @param progress
+ */
+ protected void setTaskProgress(String progress) {
+ ThreadUtils.runOnUiThread(() -> {
+ mMapWeltView.setTaskProgress(progress);
+ mProgress = progress;
+ if (mTaskDataToFragmentCallback != null) {
+ mTaskDataToFragmentCallback.setProgress(progress);
+ }
+ });
+ }
+
+ @Override
+ protected void initViews(Bundle savedInstanceState) {
+ super.initViews(savedInstanceState);
+ mapBizView.onCreate(savedInstanceState);
+ mMapWeltView.onCreateView(savedInstanceState);
+ }
+
+ public void setAutoState(int state) {
+ mTrafficDataView.setAutoState(state);
+ }
+
+ /**
+ * 消息盒子
+ */
+ private void setMessageBox() {
+ mViewDriverMsgBoxButton = findViewById(R.id.viewDriverMsgBoxButton);
+ mViewDriverMsgBoxList = findViewById(R.id.viewDriverMsgBoxList);
+ mViewDriverMsgBoxBubble = findViewById(R.id.viewDriverMsgBoxBubble);
+ //消息盒子
+ mViewDriverMsgBoxButton.setClickListener(show -> {
+ if (show) {
+ mViewDriverMsgBoxList.setVisibility(View.VISIBLE);
+ mViewDriverMsgBoxList.notifyData();
+ mViewDriverMsgBoxBubble.setVisibility(View.GONE);
+ mViewDriverMsgBoxBubble.isShowData(false);
+ } else {
+ mViewDriverMsgBoxList.setVisibility(View.GONE);
+ mViewDriverMsgBoxBubble.setVisibility(View.VISIBLE);
+ mViewDriverMsgBoxBubble.isShowData(true);
+ }
+ });
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ mMapWeltView.onPause();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ mapBizView.onResume();
+ mMapWeltView.onResume();
+ }
+
+ @Override
+ public void onSaveInstanceState(@NonNull Bundle outState) {
+ super.onSaveInstanceState(outState);
+ mapBizView.onSaveInstanceState(outState);
+ }
+
+ @Override
+ public void onLowMemory() {
+ super.onLowMemory();
+ mapBizView.onLowMemory();
+ }
+
+ @Override
+ public void onDestroyView() {
+ mapBizView.onDestroy();
+ super.onDestroyView();
+ CallerAutopilotRecordListenerManager.INSTANCE.removeListener(TAG);
+ }
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ view.setOnTouchListener(this);
+
+ }
+
+ private void initListener() {
+ MogoMapListenerHandler.Companion.getMogoMapListenerHandler().registerHostMapListener(TAG, this);
+ mMapWeltView.getSwitchToBig().setOnClickListener((v) -> {
+ showOrHideOverMapViewFragment(true);
+ });
+ }
+
+ /**
+ * 清扫车任务列表面板view,在{@link #initViews()}时候添加到container中
+ *
+ * @return 站点面板view
+ */
+ public abstract int getTaskListPanelViewId();
+
+
+ /**
+ * 迈速表实时更新
+ *
+ * @param newSpeed
+ */
+ public void updateSpeedView(float newSpeed) {
+ int speed = (int) (Math.abs(newSpeed) * 3.6F); // 倒车时工控机反馈定位信息中speed为负值
+ if (mTrafficDataView != null) {
+ mTrafficDataView.updateSpeedWithValue(speed);
+ }
+ }
+
+ /**
+ * 车辆基本信息View
+ *
+ * @return
+ */
+ public SweeperTrafficDataView getTrafficDataView() {
+ return mTrafficDataView;
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ mMapWeltView.onDestroy();
+ MogoMapListenerHandler.Companion.getMogoMapListenerHandler().unregisterHostMapListener(TAG);
+ }
+
+ @Override
+ public void onMapVisualAngleChanged(VisualAngleMode visualAngleMode) {
+ if (visualAngleMode.isMediumSight()) {
+ mSwitchMapModeImage.setVisibility(View.VISIBLE);
+ } else if (visualAngleMode.isLongSight()) {
+ mSwitchMapModeImage.setVisibility(View.VISIBLE);
+ } else if (visualAngleMode.isCloseSight()) {
+ mSwitchMapModeImage.setVisibility(View.GONE);
+ }
+ }
+
+ /**
+ * sweeper调试面板打开关闭
+ */
+ public void debugTestBar() {
+ if (groupTestPanel.getVisibility() == View.VISIBLE) {
+ groupTestPanel.setVisibility(View.GONE);
+ } else {
+ groupTestPanel.setVisibility(View.VISIBLE);
+ }
+ }
+
+ /**
+ * 底部四个按钮监听
+ * 1.地图放大缩小
+ * 2.设置面板
+ * 3.安全员问题上报面板
+ * 4.道路状况上报面板
+ */
+ private void setBottomBtnListener() {
+ updateSwitchMapIcon();
+ mSwitchMapModeImage.setOnClickListener(new OnPreventFastClickListener() {
+ @Override
+ public void onClickImpl(View v) {
+ IMogoMapUIController controller = CallerMapUIServiceManager.INSTANCE.getMapUIController();
+ IMogoMarkerManager markerManager = CallerMapUIServiceManager.INSTANCE.getMarkerManager(AbsMogoApplication.getApp());
+ if (controller != null && markerManager != null) {
+ //切换地图的远近视图
+ if (controller.getCurrentMapVisualAngle().isLongSight()) {
+ // 2.11.0去掉
+// MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).visibleAllMarkers();
+ controller.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
+ mSwitchMapModeImage.setImageResource(R.drawable.sweeper_switch_map_small_selector);
+ } else if (controller.getCurrentMapVisualAngle().isMediumSight()) {
+ // 2.11.0去掉
+// MogoMarkerManager.getInstance(AbsMogoApplication.getApp())
+// .inVisibleWithoutMarkers(DataTypes.TYPE_MARKER_ADAS, BusConst.TYPE_MARKER_BUS_ORDER);
+ controller.changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null);
+ mSwitchMapModeImage.setImageResource(R.drawable.sweeper_switch_map_big_selector);
+ } else {
+ // 2.11.0去掉
+// MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).visibleAllMarkers();
+ controller.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
+ mSwitchMapModeImage.setImageResource(R.drawable.sweeper_switch_map_big_selector);
+ }
+ }
+ }
+ });
+ mSettingBtn.setOnClickListener(v -> {
+ // TODO: 2021/12/9
+ CallerHmiManager.INSTANCE.showToolsView();
+ });
+ if (mCardBtn != null) {
+ CallerDevaToolsManager.INSTANCE.initBadCase(mCardBtn);
+ }
+ if (mAICollectBtn != null) {
+ CallerDevaToolsManager.INSTANCE.initAiCollect(mAICollectBtn);
+ }
+ }
+
+ /**
+ * 设置作业任务全览图隐藏或者显示
+ *
+ * @param isShow
+ */
+ public void showOrHideOverMapViewFragment(boolean isShow) {
+ FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
+ if (isShow) {
+ mFlWeltMapOverView.setVisibility(View.VISIBLE);
+ if (mWeltMapOverViewFragment == null) {
+ mWeltMapOverViewFragment = mWeltMapOverViewFragment.newInstance(
+ (IWeltMapSwitchToSmallCallback) this,
+ mCurrentTaskEndStation,
+ mWeltDataBeanList,
+ mSubTaskCoordinates,
+ mRouteList,
+ mProgress,
+ (SweeperFragment) this);
+ }
+ if (mWeltMapOverViewFragment.isHidden()) {
+ transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
+ .show(mWeltMapOverViewFragment).commitAllowingStateLoss();
+ return;
+ }
+ if (mWeltMapOverViewFragment.isAdded()) {
+ transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
+ .show(mWeltMapOverViewFragment).commitAllowingStateLoss();
+ return;
+ }
+ transaction
+ .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
+ .add(R.id.sweeper_welt_map_overview, mWeltMapOverViewFragment)
+ .show(mWeltMapOverViewFragment).commitAllowingStateLoss();
+ } else {
+ mFlWeltMapOverView.setVisibility(View.GONE);
+ if (mWeltMapOverViewFragment != null) {
+ transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE)
+ .hide(mWeltMapOverViewFragment).commitAllowingStateLoss();
+ }
+ }
+ }
+
+ @Override
+ public void onWeltMapSwitchToSmall() {
+ showOrHideOverMapViewFragment(false);
+ }
+
+ /**
+ * 设置贴边数据到地图
+ *
+ * @param weltDataBeans
+ */
+ public void setWeltDataToMap(ArrayList weltDataBeans, Boolean isWeltData, String distance) {
+ mWeltDataBeanList = weltDataBeans;
+ ThreadUtils.getSinglePool().execute(new Runnable() {
+ @Override
+ public void run() {
+ if (mMapWeltView != null) {
+ mMapWeltView.setWeltData(weltDataBeans, isWeltData, distance);
+ }
+ if (mTaskDataToFragmentCallback != null) {
+ mTaskDataToFragmentCallback.setWeltData(weltDataBeans, distance);
+ }
+ }
+ });
+ }
+
+ public void setTaskListCoordinatesLatLng(ArrayList subTaskCoordinates) {
+ this.mSubTaskCoordinates = subTaskCoordinates;
+ if (mMapWeltView != null) {
+ mMapWeltView.setTaskListCoordinatesLatLng(subTaskCoordinates);
+ }
+ if (mTaskDataToFragmentCallback != null) {
+ mTaskDataToFragmentCallback.setTaskListCoordinatesLatLng(subTaskCoordinates);
+ }
+ }
+
+ /**
+ * 设置当前任务终点
+ *
+ * @param subTaskCoordinate
+ */
+ public void setCurrentTaskEndMarker(LatLng subTaskCoordinate) {
+ if (mMapWeltView != null) {
+ mMapWeltView.setCurrentTaskCoordinatesLatLng(subTaskCoordinate);
+ }
+ if (mTaskDataToFragmentCallback != null) {
+ mTaskDataToFragmentCallback.setCurrentTaskCoordinatesLatLng(subTaskCoordinate);
+ }
+ }
+
+ /**
+ * 清除marker标记和任务路线数据
+ */
+ public void clearAllMarkerAndPolyline() {
+ if (mMapWeltView != null) {
+ mMapWeltView.clearAllMarkerAndPolyline();
+ }
+ if (mTaskDataToFragmentCallback != null) {
+ mTaskDataToFragmentCallback.clearAllMarkerAndPolyline();
+ }
+ }
+
+ /**
+ * 设置任务轨迹点数据
+ */
+ public void setTaskRouteList(ArrayList routeList) {
+ mRouteList = routeList;
+ ThreadUtils.getSinglePool().execute(() -> {
+ mMapWeltView.setRouteList(routeList);
+ if (mTaskDataToFragmentCallback != null) {
+ mTaskDataToFragmentCallback.setRouteList(routeList);
+ }
+ });
+ }
+
+ public static String format(double value) {
+ BigDecimal bd = new BigDecimal(value);
+ bd = bd.setScale(2, RoundingMode.HALF_UP);
+ return bd.toString();
+ }
+
+ public void setTaskDataToFragmentCallback(ISweeperTaskDataToFragmentCallback mTaskDataToFragmentCallback) {
+ this.mTaskDataToFragmentCallback = mTaskDataToFragmentCallback;
+ }
+
+ /**
+ * 结束子任务
+ */
+ public void debugEndSubTask() {
+ ArrayList resultArrayList = tempData();
+ setTaskRouteList(resultArrayList);
+ UiThreadHandler.postDelayed(() -> {
+ ArrayList routeList = tempData1();
+ ArrayList weltDataBeans = new ArrayList<>();
+ ArrayList subTaskCoordinates = new ArrayList<>();
+ for (int i = 0; i < routeList.size(); i++) {
+ WeltDataBean weltDataBean = new WeltDataBean();
+ weltDataBean.setLocLon(routeList.get(i).longitude);
+ weltDataBean.setLocLat(routeList.get(i).latitude);
+ weltDataBean.setWeltDistance(Math.random() * 50);
+ weltDataBeans.add(weltDataBean);
+ subTaskCoordinates.add(new LatLng(routeList.get(i).latitude, routeList.get(i).longitude));
+ }
+ setTaskListCoordinatesLatLng(subTaskCoordinates);
+ setWeltDataToMap(weltDataBeans, true, format(Math.random() * 50));
+ }, 2000);
+ }
+
+ private ArrayList tempData() {
+ ArrayList results = new ArrayList<>();
+ results.add(getRoute(112.56970669282785, 26.8175674285121));
+ results.add(getRoute(112.57154905962457, 26.81762377130161));
+ results.add(getRoute(112.57723562917293, 26.819769721883098));
+ return results;
+ }
+
+ private ArrayList tempData1() {
+ ArrayList results = new ArrayList<>();
+ results.add(getRoute(112.56970669282785, 26.8175674285121));
+ results.add(getRoute(112.57154905962457, 26.81762377130161));
+ results.add(getRoute(112.57723562917293, 26.819769721883098));
+ return results;
+ }
+
+ private SweeperRoutePlanningUpdateReqBean.Result getRoute(double longitude, double latitude) {
+ LatLng latLng = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(AbsMogoApplication.getApp(), longitude, latitude);
+ SweeperRoutePlanningUpdateReqBean.Result result = new SweeperRoutePlanningUpdateReqBean.Result();
+ result.latitude = latLng.latitude;
+ result.longitude = latLng.longitude;
+ return result;
+ }
+}
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/BaseSweeperUIFragment.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/BaseSweeperUIFragment.java
new file mode 100644
index 0000000000..e220d1a777
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/BaseSweeperUIFragment.java
@@ -0,0 +1,50 @@
+package com.mogo.och.sweepercloud.fragment;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+
+/**
+ * @author: wangmingjun
+ * @date: 2021/9/9
+ */
+public abstract class BaseSweeperUIFragment extends Fragment {
+ private View mRootView;
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ if (mRootView == null) {
+ mRootView = inflater.inflate(getLayoutId(), container, false);
+ } else {
+ ViewGroup viewGroup = (ViewGroup) mRootView.getParent();
+ if (viewGroup != null) {
+ viewGroup.removeView(mRootView);
+ }
+ }
+ initViews(mRootView);
+ initViews(savedInstanceState);
+ return mRootView;
+ }
+ /**
+ * 布局资源
+ *
+ * @return
+ */
+ protected abstract int getLayoutId();
+
+ protected abstract void initViews(View view);
+
+ protected void initViews(Bundle savedInstanceState) {
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ mRootView = null;
+ }
+}
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/SweeperAmapNaviFragment.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/SweeperAmapNaviFragment.java
new file mode 100644
index 0000000000..e05d396e95
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/SweeperAmapNaviFragment.java
@@ -0,0 +1,230 @@
+package com.mogo.och.sweepercloud.fragment;
+
+import android.os.Bundle;
+import android.view.View;
+
+import com.amap.api.navi.AMapNaviViewListener;
+import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
+import com.mogo.och.common.module.map.AmapNaviToDestinationModel;
+import com.mogo.och.common.module.map.CommonAmapNaviVIew;
+import com.mogo.och.common.module.map.ICommonNaviChangedCallback;
+import com.mogo.och.sweepercloud.R;
+
+import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI;
+
+/**
+ * @author: wangmingjun
+ * @date: 2021/11/30
+ */
+public class SweeperAmapNaviFragment extends BaseSweeperUIFragment implements AMapNaviViewListener {
+
+ private CommonAmapNaviVIew mAMapNaviView;
+ private ICommonNaviChangedCallback mNaviToStartInfoCallback;
+ public static SweeperAmapNaviFragment newInstance() {
+
+ Bundle args = new Bundle();
+
+ SweeperAmapNaviFragment fragment = new SweeperAmapNaviFragment();
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.sweeper_amap_navi_view;
+ }
+
+ @Override
+ protected void initViews(View view) {
+ mAMapNaviView = view.findViewById(R.id.navi_view);
+ }
+
+ @Override
+ protected void initViews(Bundle savedInstanceState) {
+ super.initViews(savedInstanceState);
+ if (mAMapNaviView != null)
+ mAMapNaviView.onCreate(savedInstanceState);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ if (mAMapNaviView != null)
+ mAMapNaviView.onResume();
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ if (mAMapNaviView != null)
+ mAMapNaviView.onPause();
+ }
+
+ @Override
+ public void onHiddenChanged(boolean hidden) {
+ super.onHiddenChanged(hidden);
+ if (hidden) { //不在最前端界面显示
+ if (mAMapNaviView != null){
+ mAMapNaviView.onPause();
+ }
+ } else { //重新显示到最前端
+ if (mAMapNaviView != null){
+ mAMapNaviView.onResume();
+ }
+ }
+ }
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+
+ AmapNaviToDestinationModel.getInstance(getContext()).setVoiceIsMute(false);
+ if (mAMapNaviView != null){
+ mAMapNaviView.onDestroy();
+ }
+
+ if (mNaviToStartInfoCallback != null){
+ mNaviToStartInfoCallback = null;
+ }
+ }
+
+ @Override
+ public void onNaviSetting() {
+ //底部导航设置点击回调
+ }
+
+ @Override
+ public void onNaviCancel() {
+ }
+
+ @Override
+ public void onNaviMapMode(int naviMode) {
+ //导航态车头模式,0:车头朝上状态;1:正北朝上模式。
+ }
+
+ @Override
+ public void onNaviTurnClick() {
+ //转弯view的点击回调
+ }
+
+ @Override
+ public void onNextRoadClick() {
+ //下一个道路View点击回调
+ }
+
+
+ @Override
+ public void onScanViewButtonClick() {
+ //全览按钮点击回调
+ }
+
+
+ @Override
+ public void onLockMap(boolean isLock) {
+ //锁地图状态发生变化时回调
+ }
+
+ @Override
+ public void onNaviViewLoaded() {
+ CallerLogger.INSTANCE.d(M_TAXI + "wlx", "导航页面加载成功");
+ CallerLogger.INSTANCE.d(M_TAXI + "wlx", "请不要使用AMapNaviView.getMap().setOnMapLoadedListener();会overwrite导航SDK内部画线逻辑");
+ }
+
+ @Override
+ public void onMapTypeChanged(int i) {
+
+ }
+
+ @Override
+ public void onNaviViewShowMode(int i) {
+
+ }
+
+ @Override
+ public boolean onNaviBackClick() {
+ return false;
+ }
+
+ /**
+ * 车道信息说明:
+ *
+ * 0xFF, 无对应车道
+ * 0, 直行
+ * 1, 左转
+ * 2, 直行+左转
+ * 3, 右转
+ * 4, 直行+右转
+ * 5, 左掉头
+ * 6, 左转+右转
+ * 7, 直行+左转+右转
+ * 8, 右掉头
+ * 9, 直行+左掉头
+ * 10, 直行+右掉头
+ * 11, 左转+左掉头
+ * 12, 右转+右掉头
+ * 13, 直行+扩展
+ * 14, 左转+左掉头+扩展
+ * 15, 保留
+ * 16, 直行+左转+左掉头
+ * 17, 右转+左掉头
+ * 18, 左转+右转+左掉头
+ * 19, 直行+右转+左掉头
+ * 20, 左转+右掉头
+ * 21, 公交车道
+ * 22, 空车道
+ * 23 可变车道
+ */
+
+ String[] array = {
+ "直行车道"
+ , "左转车道"
+ , "左转或直行车道"
+ , "右转车道"
+ , "右转或直行车道"
+ , "左掉头车道"
+ , "左转或者右转车道"
+ , " 左转或右转或直行车道"
+ , "右转掉头车道"
+ , "直行或左转掉头车道"
+ , "直行或右转掉头车道"
+ , "左转或左掉头车道"
+ , "右转或右掉头车道"
+ , "直行并且车道扩展"
+ , "左转+左掉头+扩展"
+ , "不可以选择该车道"
+ , "直行+左转+左掉头车道"
+ , "右转+左掉头"
+ , "左转+右转+左掉头"
+ , "直行+右转+左掉头"
+ , "左转+右掉头"
+ , "公交车道"
+ , "空车道"
+ , "可变车道"
+ };
+
+ String[] actions = {
+ "直行"
+ , "左转"
+ , "左转或直行"
+ , "右转"
+ , "右转或这行"
+ , "左掉头"
+ , "左转或者右转"
+ , " 左转或右转或直行"
+ , "右转掉头"
+ , "直行或左转掉头"
+ , "直行或右转掉头"
+ , "左转或左掉头"
+ , "右转或右掉头"
+ , "直行并且车道扩展"
+ , "左转+左掉头+扩展"
+ , "不可以选择"
+ , "直行+左转+左掉头"
+ , "右转+左掉头"
+ , "左转+右转+左掉头"
+ , "直行+右转+左掉头"
+ , "左转+右掉头"
+ , "公交车道"
+ , "空车道"
+ , "可变车道"
+ };
+}
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/SweeperFragment.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/SweeperFragment.kt
new file mode 100644
index 0000000000..a59f2c0fd7
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/SweeperFragment.kt
@@ -0,0 +1,587 @@
+package com.mogo.och.sweepercloud.fragment
+
+import android.os.Bundle
+import android.view.View
+import androidx.lifecycle.lifecycleScope
+import chassis.ChassisStatesOuterClass
+import com.amap.api.maps.model.LatLng
+import com.elegant.utils.UiThreadHandler
+import com.mogo.eagle.core.data.map.MogoLocation
+import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener.Companion.STATUS_AUTOPILOT_ENABLE
+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.ToastUtils
+import com.mogo.och.common.module.voice.VoiceNotice.showNotice
+import com.mogo.och.sweepercloud.R
+import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean
+import com.mogo.och.sweepercloud.callback.SweeperCloudDialogClickListener
+import com.mogo.och.sweepercloud.database.MyDataBase
+import com.mogo.och.sweepercloud.presenter.SweeperPresenter
+import com.mogo.och.sweepercloud.ui.dialog.SweeperCloudDialog
+import com.mogo.och.sweepercloud.ui.dialog.SweeperCloudLoadingDialog
+import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createConfirmStartSubTaskDialog
+import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createReceivedTaskInfoDialog
+import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createSweeperTaskEndDialog
+import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createSweeperTaskNormalEndDialog
+import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.printMessage
+import com.mogo.och.sweepercloud.view.SweeperCurrentTaskInfoView
+import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask
+import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable
+import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon
+import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask
+import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.SubTaskInfo
+import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.TaskModel
+import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus
+import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm
+import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop
+import kotlinx.android.synthetic.main.fragment_och_sweeper.*
+import kotlinx.android.synthetic.main.sweeper_no_data_common_view.*
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+
+/**
+ * 清扫车主界面
+ */
+class SweeperFragment : BaseSweeperTabFragment() {
+
+ companion object {
+ const val TAG = "SweeperFragment"
+ }
+
+ private var mSubMutableList: MutableList? = null
+ private var mCleanSystemState: ChassisStatesOuterClass.SweeperFuTianTaskSystemStates? = null
+ private var mLocation: MogoLocation? = null
+ private var mTaskInfo: SweeperTask.TaskInfo? = null
+ private var mSubTaskType: TaskModel = TaskModel.DEFAULT_MODEL //1:自动驾驶子任务 2:人工驾驶子任务 -1:未知任务类型
+ private var mCurrentSubTaskInfo: SubTaskInfo? = null//当前正在执行的子任务
+ private val mLoadingDialog: SweeperCloudLoadingDialog by lazy { SweeperCloudLoadingDialog(requireContext()) }
+ private var mDialog: SweeperCloudDialog? = null
+
+ override fun getTagName(): String {
+ return "SweepersFragment"
+ }
+
+ override fun initViews() {
+ super.initViews()
+ initListener()
+ sweeper_cl_work_mode.setTrafficDataView(trafficDataView)
+ }
+
+ override fun createPresenter(): SweeperPresenter {
+ return SweeperPresenter(this)
+ }
+
+ override fun onActivityCreated(savedInstanceState: Bundle?) {
+ super.onActivityCreated(savedInstanceState)
+ mPresenter?.getCurrentTask()
+ }
+
+ override fun getTaskListPanelViewId(): Int {
+ return R.layout.fragment_och_sweeper
+ }
+
+ /**
+ * 设置当前任务信息列表是否显示
+ */
+ private fun setShowCurrentTaskPanelView(isShow: Boolean) {
+ if (isShow) {
+ sweeper_current_task_view.visibility = View.VISIBLE
+ noTaskDataView.visibility = View.GONE
+ } else {
+ sweeper_current_task_view.visibility = View.GONE
+ noTaskDataView.visibility = View.VISIBLE
+ }
+ }
+
+ /**
+ * VR模式切换
+ *
+ * @param isVRMode
+ */
+ fun onVRModeChanged(isVRMode: Boolean) {
+ if (mRootView != null) {
+ mRootView.visibility = if (isVRMode) View.VISIBLE else View.GONE
+ }
+ }
+
+ fun hideOchSweeper() {}
+
+ /**
+ * 设置各种监听事件
+ */
+ private fun initListener() {
+ getCurrentView().getAutoBtn().setOnClickListener {
+ //前置条件 (1)必须处于人工驾驶状态 (2)必须有正在执行的子任务,且子任务类型为自动驾驶子任务 才能请求云端进入自驾
+ mCurrentSubTaskInfo?.let {
+ if (mPresenter?.autopilotState == STATUS_AUTOPILOT_ENABLE && it.taskModel == TaskModel.AUTO) {
+ mLoadingDialog.showLoading()
+ mPresenter?.sendSweeperAutopilotBootable(mTaskInfo?.taskId, it.subTaskId, it.lineId.toLong())
+ }
+ }
+ }
+ }
+
+ fun onSweeperFutianCleanSystemState(cleanSystemState: ChassisStatesOuterClass.SweeperFuTianTaskSystemStates) {
+ mCleanSystemState = cleanSystemState
+ sweeper_cl_work_mode.setSweeperFutianCleanSystemState(mSubTaskType, cleanSystemState)
+ }
+
+ /**
+ * 当前位置经纬度
+ */
+ fun setCurrentLocation(location: MogoLocation) {
+ this.mLocation = location
+ }
+
+ /**
+ * 大任务中所有子任务起终点集合
+ */
+ private fun addTaskData() {
+ lifecycleScope.launch(Dispatchers.IO) {
+ mSubMutableList?.let { subList ->
+ if (subList.size <= 0) {
+ return@launch
+ }
+ val dataList = ArrayList()
+ for (index in subList.indices) {
+ val startLocation = subList[index].startLocation
+ val startLatLng = LatLng(startLocation.latitude, startLocation.longitude)
+ dataList.add(index, startLatLng)
+ val endLocation = subList[index].endLocation
+ val endLatLng = LatLng(endLocation.latitude, endLocation.longitude)
+ dataList.add(index + 1, endLatLng)
+ }
+ setTaskListCoordinatesLatLng(dataList)
+ }
+ }
+ }
+
+ /**
+ * 设置当前子任务终点
+ */
+ private fun setEndStationMarker(position: Int) {
+ lifecycleScope.launch(Dispatchers.IO) {
+ mSubMutableList?.let { subList ->
+ val endPoint = subList[position - 1].endLocation
+ val endLatLng = LatLng(endPoint.latitude, endPoint.longitude)
+ super.mCurrentTaskEndStation = endLatLng
+ setCurrentTaskEndMarker(endLatLng)
+ }
+ }
+ }
+
+ /**
+ * 设置云端任务信息
+ */
+ fun onSweeperCloudTask(messageType: SweeperCloudTask.MessageType, taskInfo: SweeperTask.TaskInfo?) {
+ this.mTaskInfo = taskInfo
+ this.mSubMutableList = taskInfo?.subListList
+ CallerLogger.d(SceneConstant.M_SWEEPER + TAG, taskInfo?.let { printMessage(it) })
+ if (taskInfo == null || this.mSubMutableList == null) {
+ resetTaskInfoPanel()
+ return
+ }
+ //主动拉取云端正在执行的任务,有则直接在任务列表展示
+ if (messageType == SweeperCloudTask.MessageType.PadSendGetTaskReq) {
+ getCurrentView().setData(taskInfo, getCurrentPosition())
+ setShowCurrentTaskPanelView(true)
+ addTaskData()
+ mPresenter?.isHasTaskInfo(true)
+ } else {//云端下发的任务信息需要弹窗接取
+ if (taskInfo.isPop) {//是否需要弹窗确认
+ receivedTaskInfoDialog()
+ } else {
+ mPresenter?.sendSweeperStartTaskResp(taskInfo.taskId, SweeperTask.StartTaskCode.RECEIVED)
+ setShowCurrentTaskPanelView(true)
+ getCurrentView().setData(taskInfo)
+ addTaskData()
+ mPresenter?.isHasTaskInfo(true)
+ //延时2秒再上报确认接取任务,防止时间太短跟收到任务指令冲突
+ UiThreadHandler.postDelayed({ mPresenter?.sendSweeperStartTaskResp(taskInfo.taskId, SweeperTask.StartTaskCode.MANUAL_CONFIRM) }, 2000)
+ }
+ //设置任务进度
+ this.mSubMutableList?.let {
+ setTaskProgress("0/${it.size}")
+ }
+ }
+ }
+
+ /**
+ * 根据云端同步的子任务状态,更新列表中任务状态
+ */
+ fun onSweeperUpdateSubTaskStatus(taskId: String, subTaskId: String, subTaskStatus: SweeperCommon.TaskStatus) {
+ mLoadingDialog.hideLoading()
+ updateSubTaskInfo(taskId, subTaskId, subTaskStatus)
+ }
+
+ /**
+ * 子任务确认时,更新子任务信息
+ */
+ private fun updateSubTaskInfo(taskId: String, subTaskId: String, subTaskStatus: SweeperCommon.TaskStatus) {
+ mTaskInfo?.let {
+ //如果云端要更新的任务和本地缓存任务不是同一个,在无法更新子任务状态
+ if (taskId != it.taskId) {
+ return
+ }
+ mSubMutableList?.let { subTaskList ->
+ for (index in 0 until subTaskList.size) {
+ if (subTaskList[index].subTaskId == subTaskId) {
+ val subBuilder = subTaskList[index].toBuilder()
+ subBuilder.taskStatus = subTaskStatus
+ if (subTaskStatus == SweeperCommon.TaskStatus.RUNNING) {
+ mCurrentSubTaskInfo = subBuilder.build()
+ //更新当前正在执行的任务状态
+ updateCurrentSubTaskInfo(index + 1)
+ } else {
+ mCurrentSubTaskInfo = null
+ }
+ //判断是否结束子任务
+ if (subTaskStatus == SweeperCommon.TaskStatus.FINISHED) {
+ //已完成的计入任务进度,未完成的不计入
+ ToastUtils.showLong("任务完成")
+ showNotice("任务完成")
+ }
+ val builder = it.toBuilder()
+ builder.setSubList(index, subBuilder.build())
+ mTaskInfo = builder.build()
+ mSubMutableList = mTaskInfo?.subListList
+ getCurrentView().setData(mTaskInfo, index)
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * 云端请求结束大任务
+ */
+ fun onSweeperCloudTaskStop(taskId: String, stopTaskType: SweeperTaskStop.StopTaskType, isPop: Boolean) {
+ mTaskInfo?.let {
+ //如果云端要更新的任务和本地缓存任务不是同一个,在无法结束任务
+ if (taskId != it.taskId) {
+ return
+ }
+ if (isPop) {
+ sweeperCloudTaskStopDialog(taskId, stopTaskType, it)
+ } else {
+ mPresenter?.sendSweeperStopTaskResp(taskId, SweeperTaskStop.StopTaskCode.MANUAL_CONFIRM)
+ }
+ }
+
+ }
+
+ /**
+ * 结束任务弹窗处理
+ */
+ private fun sweeperCloudTaskStopDialog(taskId: String, stopTaskType: SweeperTaskStop.StopTaskType, taskInfo: SweeperTask.TaskInfo) {
+ mLoadingDialog.hideLoading()
+ val timeout: String = getTimeSpent(taskInfo.taskEndTime)
+ //数据重复导致连续弹窗
+ if (mDialog != null && mDialog!!.isShowing) {
+ return
+ }
+ if (stopTaskType == SweeperTaskStop.StopTaskType.NORMAL) {
+ mPresenter?.isHasTaskInfo(false)
+ mDialog = sweeperCloudTaskNormalEndDialog()
+ showNotice("任务已结束")
+ } else {
+ mDialog = createSweeperTaskEndDialog(context, object : SweeperCloudDialogClickListener {
+ override fun onConfirm() {
+ mPresenter?.sendSweeperStopTaskResp(taskId, SweeperTaskStop.StopTaskCode.MANUAL_CONFIRM)
+ mLoadingDialog.showLoading()
+ //ToastUtils.showLong("确认")
+ }
+
+ override fun onRefuseOrEnd() {
+ mPresenter?.sendSweeperStopTaskResp(taskId, SweeperTaskStop.StopTaskCode.MANUAL_REFUSE)
+ mLoadingDialog.showLoading()
+ //ToastUtils.showLong("拒绝")
+ }
+
+ override fun onCountDownStop() {
+ mPresenter?.sendSweeperStopTaskResp(taskId, SweeperTaskStop.StopTaskCode.OVER_TIME)
+ mLoadingDialog.showLoading()
+ //ToastUtils.showLong("倒计时")
+ }
+
+ override fun onNext() {
+ }
+
+ }, stopTaskType, timeout)
+ }
+ mDialog?.show()
+ }
+
+ /**
+ * 大任务结束弹窗
+ */
+ private fun sweeperCloudTaskNormalEndDialog(): SweeperCloudDialog? {
+ return createSweeperTaskNormalEndDialog(context, object : SweeperCloudDialogClickListener {
+ override fun onConfirm() {
+ ToastUtils.showLong("任务已结束")
+ resetTaskInfoPanel()
+ }
+
+ override fun onRefuseOrEnd() {
+
+ }
+
+ override fun onCountDownStop() {
+ ToastUtils.showLong("任务已结束")
+ resetTaskInfoPanel()
+ }
+
+ override fun onNext() {
+
+ }
+
+ })
+ }
+
+ /**
+ * 云端同步大任务状态
+ */
+ fun onSweeperCloudBigTaskStatus(taskId: String, subTaskStatus: SweeperBigTaskStatus.BigTaskStatus) {
+ //隐藏loading
+ mLoadingDialog.hideLoading()
+ mTaskInfo?.let {
+ //如果云端要更新的任务和本地缓存任务不是同一个,在无法进行任务列表状态更新
+ if (it.taskId != taskId) {
+ return
+ }
+ //大任务处于取消状态 异常状态pad端都显示无任务列表
+ if (subTaskStatus == SweeperBigTaskStatus.BigTaskStatus.CANCLE || subTaskStatus == SweeperBigTaskStatus.BigTaskStatus.ABNORMAL || subTaskStatus == SweeperBigTaskStatus.BigTaskStatus.FINISHED) {
+ mPresenter?.isHasTaskInfo(false)
+ //数据重复导致连续弹窗
+ if (mDialog != null && mDialog!!.isShowing) {
+ return
+ }
+ mDialog = sweeperCloudTaskNormalEndDialog()
+ mDialog?.show()
+ showNotice("任务已结束")
+ }
+ }
+ }
+
+ /**
+ * pad请求云端进入自动驾驶回调
+ */
+ fun onSweeperCloudAutopilotBootable(taskId: String, subTaskId: String, isBootableResp: SweeperBootable.IsBootableResp) {
+ mLoadingDialog.hideLoading()
+ //如果云端要更新的任务和本地缓存任务不是同一个,在无法进行任务列表状态更新
+ mTaskInfo?.let {
+ if (it.taskId != taskId) {
+ return
+ }
+ if (isBootableResp.code == SweeperCommon.Code.SUCCEED) {
+ ToastUtils.showLong("上报云控成功")
+ } else {
+ ToastUtils.showLong("上报云控失败")
+ }
+ }
+ }
+
+ /**
+ * 重置任务面板为无数据状态
+ */
+ private fun resetTaskInfoPanel() {
+ //清除任务缓存数据
+ mPresenter?.clearRouteList()
+ lifecycleScope.launch(Dispatchers.IO) {
+ //清除任务地图绘制标记和作业路线
+ clearAllMarkerAndPolyline()
+ //清除贴边数据缓存
+ MyDataBase.getInstance().weltDataDao.deleteAllWeltData()
+ }
+ setShowCurrentTaskPanelView(false)
+ mTaskInfo = null
+ mCurrentSubTaskInfo = null
+ mSubMutableList = null
+ mSubTaskType = TaskModel.DEFAULT_MODEL
+ setTaskProgress("0")
+ }
+
+ /**
+ *
+ * 获取当前正在执行的子任务在列表中的位置
+ */
+ private fun getCurrentPosition(): Int {
+ mSubMutableList = mTaskInfo?.subListList
+ mSubMutableList?.apply {
+ for (index in 0 until size) {
+ if (get(index).taskStatus == SweeperCommon.TaskStatus.RUNNING) {
+ mCurrentSubTaskInfo = get(index)
+ updateCurrentSubTaskInfo(index + 1)
+ return index
+ }
+ }
+ }
+ return -1
+ }
+
+ /**
+ * 根据子任务id获取子任务信息
+ */
+ private fun bySubTaskIdFindSubTaskInfo(subTaskId: String): SubTaskInfo? {
+ mSubMutableList = mTaskInfo?.subListList
+ mSubMutableList?.apply {
+ for (index in 0 until size) {
+ if (get(index).subTaskId == subTaskId) {
+ return get(index)
+ }
+ }
+ }
+ return null
+ }
+
+ /**
+ * 更新当前子任务信息
+ */
+ private fun updateCurrentSubTaskInfo(position: Int) {
+ mCurrentSubTaskInfo?.let {
+ mSubTaskType = it.taskModel
+ mPresenter?.setSubtask(it.subTaskId, it.taskModel, it.lineId)
+ setEndStationMarker(position)
+ //设置任务进度
+ this.mSubMutableList?.apply {
+ setTaskProgress("${position}/${size}")
+ }
+ }
+ }
+
+ /**
+ * 设置路线轨迹
+ */
+ override fun setTaskRouteList(routeList: ArrayList) {
+ super.setTaskRouteList(routeList)
+ }
+
+ private fun getCurrentView(): SweeperCurrentTaskInfoView = sweeper_current_task_view
+
+
+ fun handleSubTaskInfoDialog(taskId: String, subTaskId: String, isPop: Boolean) {
+ if (mTaskInfo == null) return
+ if (mTaskInfo?.taskId != taskId) return
+ val subInfo = bySubTaskIdFindSubTaskInfo(subTaskId)
+ subInfo?.let {
+ if (isPop) {
+ showSubTaskInfoDialog(taskId, subTaskId, it)
+ } else {
+ mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.MANUAL_CONFIRM)
+ //mPresenter?.setPreLineId(-1)
+ updateSubTaskInfo(taskId, subTaskId, SweeperCommon.TaskStatus.RUNNING)
+ }
+ }
+ }
+
+ /**
+ * 云控下发子任务确认弹窗
+ */
+ private fun showSubTaskInfoDialog(taskId: String, subTaskId: String, subTaskInfo: SubTaskInfo) {
+ mLoadingDialog.hideLoading()
+ if (mTaskInfo == null) return
+ if (mTaskInfo?.taskId != taskId) return
+ //数据重复导致连续弹窗
+ if (mDialog != null && mDialog!!.isShowing) {
+ return
+ }
+ mDialog = createConfirmStartSubTaskDialog(context, object : SweeperCloudDialogClickListener {
+ override fun onConfirm() {
+ //ToastUtils.showLong("确认")
+ mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.MANUAL_CONFIRM)
+ //mPresenter?.setPreLineId(-1)
+ updateSubTaskInfo(taskId, subTaskId, SweeperCommon.TaskStatus.RUNNING)
+ mLoadingDialog.showLoading()
+ }
+
+ override fun onRefuseOrEnd() {
+ //ToastUtils.showLong("结束")
+ mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.MANUAL_REFUSE_ALL)
+ mLoadingDialog.showLoading()
+ }
+
+ override fun onCountDownStop() {
+ //ToastUtils.showLong("倒计时结束")
+ mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.OVER_TIME)
+ mLoadingDialog.showLoading()
+ }
+
+ override fun onNext() {
+ //ToastUtils.showLong("下一个")
+ mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.MANUAL_REFUSE_SINGLE)
+ mLoadingDialog.showLoading()
+ }
+
+ }, subTaskInfo)
+ mDialog?.show()
+ showNotice("请确认是否执行任务")
+ }
+
+ /**
+ * 接取云端任务弹窗
+ */
+ private fun receivedTaskInfoDialog() {
+ mTaskInfo?.let {
+ mPresenter?.sendSweeperStartTaskResp(it.taskId, SweeperTask.StartTaskCode.RECEIVED)
+ //数据重复导致连续弹窗
+ if (mDialog != null && mDialog!!.isShowing) {
+ return
+ }
+ mDialog = createReceivedTaskInfoDialog(context, object : SweeperCloudDialogClickListener {
+ override fun onConfirm() {
+ //ToastUtils.showLong("确认")
+ mPresenter?.sendSweeperStartTaskResp(it.taskId, SweeperTask.StartTaskCode.MANUAL_CONFIRM)
+ setShowCurrentTaskPanelView(true)
+ getCurrentView().setData(it)
+ mLoadingDialog.showLoading()
+ addTaskData()
+ mPresenter?.isHasTaskInfo(true)
+ }
+
+ override fun onRefuseOrEnd() {
+ //ToastUtils.showLong("拒绝")
+ mPresenter?.sendSweeperStartTaskResp(it.taskId, SweeperTask.StartTaskCode.MANUAL_REFUSE)
+ mLoadingDialog.showLoading()
+ resetTaskInfoPanel()
+ }
+
+ override fun onCountDownStop() {
+ //ToastUtils.showLong("倒计时结束")
+ resetTaskInfoPanel()
+ mPresenter?.sendSweeperStartTaskResp(it.taskId, SweeperTask.StartTaskCode.OVER_TIME)
+ mLoadingDialog.showLoading()
+ }
+
+ override fun onNext() {
+
+ }
+
+ }, it)
+ mDialog?.show()
+ showNotice("请确认是否接取任务")
+ }
+
+ }
+
+ /**
+ * 计算任务超时时间
+ */
+ private fun getTimeSpent(taskEndTime: Long): String {
+
+ val timeLag: Long = System.currentTimeMillis() - taskEndTime
+ //天
+ val day: Long = timeLag / (24 * 60 * 60 * 1000)
+ //小时
+ val hour = (timeLag / (60 * 60 * 1000) - day * 24)
+ //分钟
+ val minute = ((timeLag / (60 * 1000)) - day * 24 * 60 - hour * 60)
+
+ if (day >= 1) {
+ return "${day}天${hour}时${minute}分钟"
+ }
+ if (hour >= 1) {
+ return "${hour}时${minute}分钟"
+ }
+ return "${minute}分钟"
+ }
+}
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/WeltMapOverViewFragment.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/WeltMapOverViewFragment.kt
new file mode 100644
index 0000000000..de471c94b8
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/WeltMapOverViewFragment.kt
@@ -0,0 +1,129 @@
+package com.mogo.och.sweepercloud.fragment
+
+import android.os.Bundle
+import com.amap.api.maps.model.LatLng
+import com.mogo.commons.mvp.BaseFragment
+import com.mogo.och.sweepercloud.R
+import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean
+import com.mogo.och.sweepercloud.callback.ISweeperTaskDataToFragmentCallback
+import com.mogo.och.sweepercloud.callback.IWeltMapSwitchToSmallCallback
+import com.mogo.och.sweepercloud.database.bean.WeltDataBean
+import kotlinx.android.synthetic.main.fragment_welt_map_overview.*
+import kotlinx.android.synthetic.main.sweeper_welt_map_overview.*
+
+/**
+ * 作业任务全览图
+ */
+class WeltMapOverViewFragment : BaseFragment(), ISweeperTaskDataToFragmentCallback {
+ private var mIWeltMapSwitchToSmallCallBack: IWeltMapSwitchToSmallCallback? = null
+ private var mFragment: SweeperFragment? = null
+ override fun getLayoutId(): Int = R.layout.fragment_welt_map_overview
+ override fun getTagName(): String {
+ return "WeltMapOverViewFragment"
+ }
+
+ override fun initViews() {
+
+ }
+ fun setWeltMapSwitchToSmallCallBack(iWeltMapSwitchToSmallCallback: IWeltMapSwitchToSmallCallback){
+ this.mIWeltMapSwitchToSmallCallBack=iWeltMapSwitchToSmallCallback
+ }
+ fun setSweeperFragment(fragment: SweeperFragment){
+ this.mFragment=fragment
+ mFragment?.setTaskDataToFragmentCallback(this)
+ }
+ override fun initViews(savedInstanceState: Bundle?) {
+ super.initViews(savedInstanceState)
+ weltMapOverView?.onCreateView(savedInstanceState)
+ sweeperSwitchToSmall.setOnClickListener {
+ mIWeltMapSwitchToSmallCallBack?.onWeltMapSwitchToSmall()
+ }
+ val bundle = arguments
+ if (bundle != null) {
+ val latLngs = bundle.getSerializable("subTaskCoordinates") as? ArrayList
+ val latLng = bundle.getParcelable("subTaskEndCoordinates")
+ val weltDataList = bundle.getSerializable("weltDataList") as? ArrayList
+ val routeList = bundle.getSerializable("routeList") as? ArrayList
+ val progress = bundle.getString("progress")
+ routeList?.let {
+ weltMapOverView?.setRouteList(it)
+ }
+ latLng?.let {
+ setCurrentTaskCoordinatesLatLng(it)
+ }
+ latLngs?.let {
+ setTaskListCoordinatesLatLng(it)
+ }
+ weltDataList?.let {
+ setWeltData(it,"0.0cm")
+ }
+ progress?.let {
+ weltMapOverView?.setProgress(progress)
+ }
+ }
+
+ }
+
+ companion object {
+ @JvmStatic
+ fun newInstance(
+ mIWeltMapSwitchToSmallCallBack: IWeltMapSwitchToSmallCallback,
+ mCurrentTaskEndStation:LatLng?,
+ weltDataList: ArrayList?,
+ latLngs: ArrayList?,
+ routeList: ArrayList?,
+ progress:String?,
+ sweeperFragment: SweeperFragment
+ ): WeltMapOverViewFragment {
+ val args = Bundle()
+ args.putSerializable("weltDataList", weltDataList)
+ args.putSerializable("subTaskCoordinates", latLngs)
+ args.putParcelable("subTaskEndCoordinates", mCurrentTaskEndStation)
+ args.putSerializable("routeList", routeList)
+ args.putString("progress", progress)
+ val fragment = WeltMapOverViewFragment()
+ fragment.setWeltMapSwitchToSmallCallBack(mIWeltMapSwitchToSmallCallBack)
+ fragment.setSweeperFragment(sweeperFragment)
+ fragment.arguments = args
+ return fragment
+ }
+ }
+
+ override fun onPause() {
+ super.onPause()
+ weltMapOverView?.onPause()
+ }
+
+ override fun onResume() {
+ super.onResume()
+ weltMapOverView?.onResume()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ weltMapOverView?.onDestroy()
+ }
+ override fun setTaskListCoordinatesLatLng(coordinatesLatLng: java.util.ArrayList) {
+ weltMapOverView?.setTaskListCoordinatesLatLng(coordinatesLatLng)
+ }
+
+ override fun setCurrentTaskCoordinatesLatLng(coordinatesLatLng: LatLng) {
+ weltMapOverView?.setCurrentTaskCoordinatesLatLng(coordinatesLatLng)
+ }
+
+ override fun clearAllMarkerAndPolyline() {
+ weltMapOverView?.clearAllMarkerAndPolyline()
+ }
+
+ override fun setProgress(progress: String) {
+ weltMapOverView?.setProgress(progress)
+ }
+
+ override fun setRouteList(routeList: java.util.ArrayList) {
+ weltMapOverView?.setRouteList(routeList)
+ }
+
+ override fun setWeltData(weltDatas: java.util.ArrayList?, distance: String) {
+ weltMapOverView?.setWeltData(weltDatas,true,distance)
+ }
+}
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java
new file mode 100644
index 0000000000..bcacdb6ffb
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java
@@ -0,0 +1,661 @@
+package com.mogo.och.sweepercloud.model;
+
+import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_SWEEPER;
+import static com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.printMessage;
+
+import android.content.Context;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.amap.api.maps.model.LatLng;
+import com.mogo.cloud.passport.MoGoAiCloudClientConfig;
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.commons.module.status.IMogoStatusChangedListener;
+import com.mogo.commons.module.status.MogoStatusManager;
+import com.mogo.commons.module.status.StatusDescriptor;
+import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo;
+import com.mogo.eagle.core.data.map.MogoLocation;
+import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener;
+import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener;
+import com.mogo.eagle.core.function.api.autopilot.IMoGoPlanningRottingListener;
+import com.mogo.eagle.core.function.api.autopilot.IMoGoSweeperFutianCleanSystemListener;
+import com.mogo.eagle.core.function.api.autopilot.IMoGoSweeperFutianCloudTaskListener;
+import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager;
+import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager;
+import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager;
+import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager;
+import com.mogo.eagle.core.function.call.autopilot.CallerSweeperFutianCleanSystemListenerManager;
+import com.mogo.eagle.core.function.call.autopilot.CallerSweeperFutianCloudTaskListenerManager;
+import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
+import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
+import com.mogo.och.common.module.manager.OCHAdasAbilityManager;
+import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil;
+import com.mogo.och.common.module.utils.NumberFormatUtil;
+import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean;
+import com.mogo.och.sweepercloud.callback.ISweeperCloudTaskCallback;
+import com.mogo.och.sweepercloud.callback.ISweeperControllerStatusCallback;
+import com.mogo.och.sweepercloud.constant.SweeperConst;
+import com.mogo.och.sweepercloud.database.MyDataBase;
+import com.mogo.och.sweepercloud.database.bean.WeltDataBean;
+import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils;
+import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask;
+import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable;
+import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask;
+import com.zhjt.mogo.adas.data.sweeper.task.SweeperTaskSuspendResume;
+import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus;
+import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm;
+import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus;
+import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import chassis.ChassisStatesOuterClass;
+import io.reactivex.exceptions.UndeliverableException;
+import io.reactivex.functions.Consumer;
+import io.reactivex.plugins.RxJavaPlugins;
+import mogo.telematics.pad.MessagePad;
+import mogo_msg.MogoReportMsg;
+import planning.RoboSweeperTaskIndexOuterClass;
+import system_master.SystemStatusInfo;
+
+/**
+ * @author congtaowang
+ * @since 2021/3/23
+ *
+ * 清扫车任务管理
+ */
+public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IMoGoAutopilotStatusListener, IMoGoSweeperFutianCleanSystemListener {
+ private final String TAG = SweeperTaskModel.class.getSimpleName();
+ private static volatile SweeperTaskModel sInstance;
+ public double mLongitude = 0;
+ public double mLatitude = 0;
+ private Context mContext;
+ private ISweeperControllerStatusCallback mControllerStatusCallback; //Model->Presenter:VR mode等
+ private ISweeperCloudTaskCallback mSweeperTaskCallback;
+ ArrayList points = new ArrayList<>();//全路径信息
+ private SweeperTask.TaskModel mSubTaskType = SweeperTask.TaskModel.DEFAULT_MODEL; //1自动驾驶 2.人工驾驶 0:无效值
+ private int mCurrentLineId = 0; //当前路线id
+ private int mPreLineId = -1;//上一次存储的路线id
+ //自动驾驶状态
+ private int mAutopilotState = IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE;
+ //当前子任务id
+ private String mSubTaskId = "";
+ // 清扫模式回调时间间隔
+ private static final long VEHICLE_STATE_INTERVAL_MILLIS = 500L;
+ // 清扫模式当前时间戳
+ private long mVehicleStateCurrentTimeMillis;
+ // 贴边数据回调时间间隔
+ private static final long WELT_DATA_INTERVAL_MILLIS = 1000L;
+ // 贴边数据当前时间戳
+ private long mWeltDataCurrentTimeMillis;
+
+ // 轨迹数据回调时间间隔
+ private static final long ROUTE_DATA_INTERVAL_MILLIS = 1000L;
+ // 轨迹数据当前时间戳
+ private long mRouteDataCurrentTimeMillis;
+
+ private String longitude;//经度
+
+ private String latitude;//纬度
+
+ private boolean isHasTaskInfo = false;//判断是否有任务数据
+
+ //用于对应messageType和reqNo绑定在一起,保证请求的reqNo和响应的reqNo一致
+ private HashMap msgTypeAndReqNo = new HashMap<>();
+
+ public static SweeperTaskModel getInstance() {
+ if (sInstance == null) {
+ synchronized (SweeperTaskModel.class) {
+ if (sInstance == null) {
+ sInstance = new SweeperTaskModel();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ private SweeperTaskModel() {
+
+ }
+
+ public void init() {
+ mContext = AbsMogoApplication.getApp();
+ // 定位监听
+ CallerChassisLocationGCJ02ListenerManager.INSTANCE.addListener(TAG, mMapLocationListener);
+
+ MogoStatusManager.getInstance().registerStatusChangedListener(TAG, StatusDescriptor.VR_MODE, mMogoStatusChangedListener);
+
+ //自动驾驶路线规划接口
+ CallerPlanningRottingListenerManager.INSTANCE.addListener(TAG, moGoAutopilotPlanningListener);
+
+ //添加清扫车云控任务回调监听
+ CallerSweeperFutianCloudTaskListenerManager.INSTANCE.addListener(TAG, this);
+
+ //自动驾驶状态监听
+ CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, this);
+
+ //清扫车模式和贴边数据回调监听
+ CallerSweeperFutianCleanSystemListenerManager.INSTANCE.addListener(TAG, this);
+
+ //2022.1.28
+ // 调用Disposable.dispose() 时候会出现InterruptedException 导致出现崩溃
+ // The exception could not be delivered to the consumer because it has already canceled/disposed
+ // the flow or the excTeption has nowhere to go to begin with
+ RxJavaPlugins.setErrorHandler(new Consumer() {
+ @Override
+ public void accept(Throwable e) {
+ if (e instanceof UndeliverableException) {
+ e = e.getCause();
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "UndeliverableException");
+ }
+ if ((e instanceof IOException)) {//
+ // fine, irrelevant network problem or API that throws on cancellation
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "IOException");
+ return;
+ }
+ if (e instanceof InterruptedException) {
+ // fine, some blocking code was interrupted by a dispose call
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "InterruptedException");
+ return;
+ }
+ if ((e instanceof NullPointerException) || (e instanceof IllegalArgumentException)) {
+ // that's likely a bug in the application
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "NullPointerException or IllegalArgumentException");
+ Thread.currentThread().getUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), e);
+ return;
+ }
+ if (e instanceof IllegalStateException) {
+ // that's a bug in RxJava or in a custom operator
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "IllegalStateException");
+ Thread.currentThread().getUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), e);
+ return;
+ }
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "Undeliverable exception");
+ }
+ });
+ }
+
+
+ public void setControllerStatusCallback(ISweeperControllerStatusCallback callback) {
+ this.mControllerStatusCallback = callback;
+ }
+
+ public void setSweeperTaskCallback(ISweeperCloudTaskCallback callback) {
+ this.mSweeperTaskCallback = callback;
+ }
+
+ private final IMoGoPlanningRottingListener moGoAutopilotPlanningListener = new IMoGoPlanningRottingListener() {
+
+ @Override
+ public void onAutopilotRotting(MessagePad.GlobalPathResp routeList) {
+ if (null != routeList && routeList.getWayPointsList() != null && routeList.getWayPointsList().size() > 0) {
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotRotting: " + printMessage(routeList));
+
+ // MAP返回路线信息,在1秒内返回了2次,这里加上数据过滤
+ long current = System.currentTimeMillis();
+ if (current - mRouteDataCurrentTimeMillis <= ROUTE_DATA_INTERVAL_MILLIS) {
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotRotting: interval <=" + ROUTE_DATA_INTERVAL_MILLIS + " data is abandon");
+ return;
+ }
+ mRouteDataCurrentTimeMillis = current;
+
+ if (mCurrentLineId != mPreLineId) {//判断是否同一条路线
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotRotting: mCurrentLineId" + mCurrentLineId + "mPreLineId:" + mPreLineId);
+ mPreLineId = mCurrentLineId;
+ points.addAll(coordinateConverterWgsToGcjList(mContext, routeList.getWayPointsList()));
+ if (mSweeperTaskCallback != null) {
+ mSweeperTaskCallback.setRouteList(points);
+ }
+ }
+ }
+ }
+
+ };
+
+ public void setSubtask(String subTaskId, SweeperTask.TaskModel subTaskType, int currentLineId) {
+ this.mSubTaskId = subTaskId;
+ this.mSubTaskType = subTaskType;
+ this.mCurrentLineId = currentLineId;
+ }
+
+ /**
+ * 清除路线缓存数据
+ */
+ public void clearRouteList() {
+ points.clear();
+ mSubTaskType = SweeperTask.TaskModel.UNRECOGNIZED;
+ mCurrentLineId = 0;
+ mPreLineId = -1;
+ }
+
+ /**
+ * 重新设置上一次的lineId,防止同一个轨迹,同一个lineid时不绘制轨迹
+ */
+ public void setPreLineId(int preLineId) {
+ this.mPreLineId = preLineId;
+ }
+
+ /**
+ * 判断是否有任务数据
+ */
+ public void isHasTaskInfo(boolean isHasTaskInfo) {
+ this.isHasTaskInfo = isHasTaskInfo;
+ }
+
+ /**
+ * 获取自动开始状态
+ */
+ public int getAutopilotState() {
+ return this.mAutopilotState;
+ }
+
+ public static List coordinateConverterWgsToGcjList(Context mContext,
+ List mogoLatLngList) {
+ List points = new ArrayList<>();
+ for (MessagePad.Location m : mogoLatLngList) {
+ LatLng mogoLatLng = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(mContext, m);
+ SweeperRoutePlanningUpdateReqBean.Result result = new SweeperRoutePlanningUpdateReqBean.Result();
+ result.latitude = mogoLatLng.latitude;
+ result.longitude = mogoLatLng.longitude;
+ points.add(result);
+ }
+ return points;
+ }
+
+ public void release() {
+ MogoStatusManager.getInstance().unregisterStatusChangedListener(TAG, StatusDescriptor.VR_MODE, mMogoStatusChangedListener);
+ // 注销定位监听
+ CallerChassisLocationGCJ02ListenerManager.INSTANCE.removeListener(TAG);
+ //自动驾驶路线规划接口
+ CallerPlanningRottingListenerManager.INSTANCE.removeListener(moGoAutopilotPlanningListener);
+ OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(null);
+ }
+
+ private Object readResolve() {
+ // 阻止反序列化,必须实现 Serializable 接口
+ return sInstance;
+ }
+
+ private final IMogoStatusChangedListener mMogoStatusChangedListener = new IMogoStatusChangedListener() {
+ // VR mode变更回调
+ @Override
+ public void onStatusChanged(StatusDescriptor descriptor, boolean isTrue) {
+ if (StatusDescriptor.VR_MODE == descriptor) {
+ if (mControllerStatusCallback != null) {
+ mControllerStatusCallback.onVRModeChanged(isTrue);
+ }
+ }
+ }
+ };
+ // 自车定位
+ private final IMoGoChassisLocationGCJ02Listener mMapLocationListener = new IMoGoChassisLocationGCJ02Listener() {
+ @Override
+ public void onChassisLocationGCJ02(@Nullable MogoLocation gnssInfo) {
+ if (null == gnssInfo) return;
+ if (mControllerStatusCallback != null) {
+ mControllerStatusCallback.onCarLocationChanged(gnssInfo);
+ }
+ if (mSubTaskType == SweeperTask.TaskModel.MANUAL) {//收集人工驾驶子任务坐标点
+ addCoordinates(gnssInfo);
+ return;
+ }
+ }
+ };
+
+ /**
+ * 根据当前定位收集人工驾驶子任务轨迹点
+ *
+ * @param mogoLatLng
+ */
+ private void addCoordinates(MogoLocation mogoLatLng) {
+ String tempLongitude = NumberFormatUtil.cutOutNumber(mogoLatLng.getLongitude(), 5);
+ String tempLatitude = NumberFormatUtil.cutOutNumber(mogoLatLng.getLatitude(), 5);
+ //用于过滤车是否停在原地,经纬度相同的情况
+ if (!tempLongitude.equals(mLongitude) && !tempLatitude.equals(mLatitude)) {
+ mLongitude = mogoLatLng.getLongitude();
+ mLatitude = mogoLatLng.getLatitude();
+ SweeperRoutePlanningUpdateReqBean.Result result = new SweeperRoutePlanningUpdateReqBean.Result();
+ result.latitude = mogoLatLng.getLatitude();
+ result.longitude = mogoLatLng.getLongitude();
+ points.add(result);
+ if (mSweeperTaskCallback != null) {
+ mSweeperTaskCallback.setRouteList(points);
+ }
+ }
+ }
+
+ @Override
+ public void onSweeperFutianCloudTask(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime,
+ SweeperTask.TaskInfo taskInfo) {
+
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG,
+ "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " onSweeperFutianCloudTask:" + (taskInfo == null ? "null" : printMessage(taskInfo)) + " mSweeperTaskCallback:" + mSweeperTaskCallback);
+ if (mSweeperTaskCallback != null) {
+ msgTypeAndReqNo.put(messageType.getNumber(), reqNo);
+ mSweeperTaskCallback.onSweeperCloudTask(messageType, taskInfo);
+ }
+ }
+
+ @Override
+ public void onSweeperFutianCloudTaskConfirm(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime,
+ SweeperTaskConfirm.TaskConfirm taskConfirm) {
+
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " +
+ "onSweeperFutianCloudTaskConfirm:" + printMessage(taskConfirm));
+ if (mSweeperTaskCallback != null && taskConfirm != null) {
+ msgTypeAndReqNo.put(messageType.getNumber(), reqNo);
+ mSweeperTaskCallback.onSweeperCloudTaskConfirm(taskConfirm.getTaskId(), taskConfirm.getSubTaskId(), taskConfirm.getIsPop());
+ }
+ }
+
+ @Override
+ public void onSweeperFutianCloudTaskStatus(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime,
+ SweeperTaskStatus.TaskStatusPush taskStatusPush) {
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " +
+ "onSweeperFutianCloudTaskStatus:" + printMessage(taskStatusPush));
+ if (mSweeperTaskCallback != null && taskStatusPush != null) {
+ msgTypeAndReqNo.put(messageType.getNumber(), reqNo);
+ mSweeperTaskCallback.onSweeperCloudTaskStatus(taskStatusPush.getTaskId(), taskStatusPush.getSubTaskId(), taskStatusPush.getTaskStatus());
+ }
+ }
+
+ @Override
+ public void onSweeperFutianCloudTaskStop(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime,
+ SweeperTaskStop.StopTaskReq stopTaskReq) {
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " +
+ "onSweeperFutianCloudTaskStop:" + printMessage(stopTaskReq));
+ if (mSweeperTaskCallback != null && stopTaskReq != null) {
+ msgTypeAndReqNo.put(messageType.getNumber(), reqNo);
+ mSweeperTaskCallback.onSweeperCloudTaskStop(stopTaskReq.getTaskId(), stopTaskReq.getType(), stopTaskReq.getIsPop());
+ }
+ }
+
+ @Override
+ public void onSweeperFutianCloudTaskSuspendResume(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime,
+ SweeperTaskSuspendResume.SuspendResumeTaskResp suspendResumeTaskResp) {
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " +
+ "onSweeperFutianCloudTaskSuspendResume:" + printMessage(suspendResumeTaskResp));
+ if (mSweeperTaskCallback != null && suspendResumeTaskResp != null) {
+ msgTypeAndReqNo.put(messageType.getNumber(), reqNo);
+ mSweeperTaskCallback.onSweeperCloudTaskSuspendResume(messageType, suspendResumeTaskResp.getTaskId(),
+ suspendResumeTaskResp.getSubTaskId(), suspendResumeTaskResp.getCode());
+ }
+ }
+
+ @Override
+ public void onSweeperFutianCloudBootable(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime,
+ SweeperBootable.IsBootableResp isBootableResp) {
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " +
+ "onSweeperFutianCloudBootable:" + printMessage(isBootableResp));
+ if (mSweeperTaskCallback != null && isBootableResp != null) {
+ msgTypeAndReqNo.put(messageType.getNumber(), reqNo);
+ mSweeperTaskCallback.onSweeperCloudBootable(isBootableResp.getTaskId(), isBootableResp.getSubTaskId(), isBootableResp);
+ }
+ }
+
+ @Override
+ public void onSweeperFutianCloudBigTaskStatus(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime,
+ SweeperBigTaskStatus.BigTaskStatusPush bigTaskStatusPush) {
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " +
+ "onSweeperFutianCloudBigTaskStatus:" + printMessage(bigTaskStatusPush));
+ if (mSweeperTaskCallback != null && bigTaskStatusPush != null) {
+ msgTypeAndReqNo.put(messageType.getNumber(), reqNo);
+ mSweeperTaskCallback.onSweeperCloudBigTaskStatus(bigTaskStatusPush.getTaskId(), bigTaskStatusPush.getTaskStatus());
+ }
+ }
+
+ @Override
+ public void onSweeperFutianCleanSystemState(@NonNull ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState) {
+ if (cleanSystemState == null) {
+ return;
+ }
+ long current = System.currentTimeMillis();
+ if (current - mVehicleStateCurrentTimeMillis <= VEHICLE_STATE_INTERVAL_MILLIS) {
+ return;
+ }
+ mVehicleStateCurrentTimeMillis = current;
+ // CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianCleanSystemState:" + printMessage(cleanSystemState));
+ if (mSweeperTaskCallback != null) {
+ mSweeperTaskCallback.onSweeperFutianCleanSystemState(cleanSystemState);
+ }
+ }
+
+ @Override
+ public void onSweeperFutianTaskIndexData(@NonNull RoboSweeperTaskIndexOuterClass.RoboSweeperTaskIndex roboSweeperTaskIndex) {
+ if (roboSweeperTaskIndex == null) {
+ return;
+ }
+
+ long current = System.currentTimeMillis();
+ if (current - mWeltDataCurrentTimeMillis <= WELT_DATA_INTERVAL_MILLIS) {
+ return;
+ }
+ mWeltDataCurrentTimeMillis = current;
+
+ //没有任务数据时,不处理贴边
+ if (!isHasTaskInfo) {
+ return;
+ }
+
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG,
+ "mSubTaskType:" + mSubTaskType + "+ onSweeperFutianTaskIndexData:" + printMessage(roboSweeperTaskIndex));
+ handleWeltData(roboSweeperTaskIndex);
+ }
+
+ /**
+ * 贴边数据处理
+ */
+ private void handleWeltData(RoboSweeperTaskIndexOuterClass.RoboSweeperTaskIndex roboSweeperTaskIndex) {
+ String tempLongitude = NumberFormatUtil.cutOutNumber(roboSweeperTaskIndex.getLocLon(), 6);
+ String tempLatitude = NumberFormatUtil.cutOutNumber(roboSweeperTaskIndex.getLocLat(), 6);
+ //用于过滤车是否停在原地,经纬度相同的情况
+ if (!tempLongitude.equals(longitude) && !tempLatitude.equals(latitude)) {
+ latitude = NumberFormatUtil.cutOutNumber(roboSweeperTaskIndex.getLocLat(), 6);
+ longitude = NumberFormatUtil.cutOutNumber(roboSweeperTaskIndex.getLocLon(), 6);
+ //保存贴边数据到数据库中
+ WeltDataBean weltDataBean = new WeltDataBean();
+ //把wgs坐标系坐标转换成gcj坐标
+ LatLng latLng = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(AbsMogoApplication.getApp(), roboSweeperTaskIndex.getLocLon(),
+ roboSweeperTaskIndex.getLocLat());
+ weltDataBean.setLocLon(latLng.longitude);
+ weltDataBean.setLocLat(latLng.latitude);
+ int edgeCleanState = roboSweeperTaskIndex.getEdgeCleanState();
+ if (edgeCleanState == 0 ||
+ (mSubTaskType == SweeperTask.TaskModel.MANUAL)) {
+ //人工子任务 当前因为云控需求时MAP不能获取任务状态,在人工子任务时还是返回的上一个任务的贴边数据
+ // 所以 20230529 暂时过滤掉,待后面MAP修改后这里可删除,这里人工子任务默认都是非贴边
+ weltDataBean.setWeltDistance(SweeperConst.NONWELT);
+ } else {
+ weltDataBean.setWeltDistance(roboSweeperTaskIndex.getDistToRefEdgePoint());
+ }
+ weltDataBean.setCleanMode(roboSweeperTaskIndex.getCleanMode());
+ weltDataBean.setCleanDirection(roboSweeperTaskIndex.getCleanDirection());
+ weltDataBean.setCleanIntensity(roboSweeperTaskIndex.getCleanIntensity());
+ weltDataBean.setSubTaskId(mSubTaskId);
+ MyDataBase.getInstance().getWeltDataDao().insert(weltDataBean);
+ String distance;
+ if (roboSweeperTaskIndex.getDistToRefEdgePoint() >= 1.0) {//大于等于1m
+ distance = format(roboSweeperTaskIndex.getDistToRefEdgePoint()) + "m";
+ } else {//小于1m
+ distance = Math.round(roboSweeperTaskIndex.getDistToRefEdgePoint() * 100) + "cm";//m->cm 四舍五入到整数
+ }
+ if (mSweeperTaskCallback != null) {
+ mSweeperTaskCallback.setWeltDataToMap((ArrayList) MyDataBase.getInstance().getWeltDataDao().loadAllWeltDataInfo(),
+ true, distance);
+ }
+ }
+ }
+
+ public static String format(double value) {
+ BigDecimal bd = new BigDecimal(value);
+ bd = bd.setScale(2, RoundingMode.HALF_UP);
+ return bd.toString();
+ }
+
+ /**
+ * 获取当前正在执行的任务
+ */
+ public void getCurrentTask() {
+ SweeperTask.GetTaskReq.Builder builder = SweeperTask.GetTaskReq.newBuilder();
+ builder.setSn(getDriverSn());
+ String reqNo = SweeperCloudTaskUtils.getRequestId();
+ SweeperTask.GetTaskReq getTaskReq = builder.build();
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG,
+ "getCurrentTask:" + printMessage(getTaskReq) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.PadSendGetTaskReq.getNumber());
+ getAutoPilotControlManager().sendSweeperGetTaskReq(reqNo, getTaskReq);
+ }
+
+ /**
+ * 接取任务响应
+ */
+ public void sendSweeperStartTaskResp(String taskId, SweeperTask.StartTaskCode code) {
+ SweeperTask.StartTaskResp.Builder builder = SweeperTask.StartTaskResp.newBuilder();
+ builder.setSn(getDriverSn());
+ builder.setTaskId(taskId);
+ builder.setCode(code);
+ SweeperTask.StartTaskResp startTaskResp = builder.build();
+ String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTask.getNumber());
+ getAutoPilotControlManager().sendSweeperStartTaskResp(reqNo, startTaskResp);
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG,
+ "sendSweeperStartTaskResp:" + printMessage(startTaskResp) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.CloudPushTask.getNumber());
+ }
+
+ /**
+ * 子任务开始确认
+ */
+ public void sendSweeperTaskConfirmResp(String taskId, String subTaskId, SweeperTaskConfirm.TaskConfirmCode code) {
+ SweeperTaskConfirm.TaskConfirmResp.Builder builder = SweeperTaskConfirm.TaskConfirmResp.newBuilder();
+ builder.setSn(getDriverSn());
+ builder.setTaskId(taskId);
+ builder.setSubTaskId(subTaskId);
+ builder.setCode(code);
+ SweeperTaskConfirm.TaskConfirmResp taskConfirmResp = builder.build();
+ String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTaskConfirm.getNumber());
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG,
+ "sendSweeperTaskConfirmResp" + printMessage(taskConfirmResp) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.CloudPushTaskConfirm.getNumber());
+ getAutoPilotControlManager().sendSweeperTaskConfirmResp(reqNo, taskConfirmResp);
+ }
+
+ /**
+ * 大任务结束确认
+ *
+ * @param taskId
+ * @param code
+ */
+ public void sendSweeperStopTaskResp(String taskId, SweeperTaskStop.StopTaskCode code) {
+ SweeperTaskStop.StopTaskResp.Builder builder = SweeperTaskStop.StopTaskResp.newBuilder();
+ builder.setSn(getDriverSn());
+ builder.setTaskId(taskId);
+ builder.setCode(code);
+ SweeperTaskStop.StopTaskResp stopTaskResp = builder.build();
+ String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTaskStop.getNumber());
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG,
+ "sendSweeperStopTaskResp" + printMessage(stopTaskResp) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.CloudPushTaskStop.getNumber());
+ getAutoPilotControlManager().sendSweeperStopTaskResp(reqNo, stopTaskResp);
+ }
+
+ /**
+ * pad上报是否可以进自驾
+ *
+ * @param taskId
+ * @param subTaskId
+ * @param lineId
+ */
+ public void sendSweeperAutopilotBootable(String taskId, String subTaskId, long lineId) {
+ SweeperBootable.IsBootable.Builder builder = SweeperBootable.IsBootable.newBuilder();
+ builder.setSn(getDriverSn());
+ builder.setTaskId(taskId);
+ builder.setSubTaskId(subTaskId);
+ builder.setLineId(lineId);
+ SweeperBootable.IsBootable isBootable = builder.build();
+ String reqNo = SweeperCloudTaskUtils.getRequestId();
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG,
+ "sendSweeperAutopilotBootable" + printMessage(isBootable) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.PadSendBootable.getNumber());
+ getAutoPilotControlManager().sendSweeperAutopilotBootable(reqNo, isBootable);
+ // TODO: 2023/5/16
+ //SweeperCloudTaskUtils.mockSendCloudBootable();
+ }
+
+ public CallerAutoPilotControlManager getAutoPilotControlManager() {
+ return CallerAutoPilotControlManager.INSTANCE;
+ }
+
+ public String getDriverSn() {
+ return MoGoAiCloudClientConfig.getInstance().getSn();
+ }
+
+ @Override
+ public void onAutopilotStatusResponse(@NonNull AutopilotStatusInfo autoPilotStatusInfo) {
+ //CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotStatusResponse state:" + autoPilotStatusInfo.getState());
+ this.mAutopilotState = autoPilotStatusInfo.getState();
+ if (mControllerStatusCallback != null) {
+ mControllerStatusCallback.onAutopilotState(autoPilotStatusInfo.getState());
+ }
+ switch (autoPilotStatusInfo.getState()) {
+ case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE://不可自动驾驶
+ break;
+ case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE://人工驾驶
+ break;
+ case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING://自动驾驶中
+ break;
+ case IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING://平行驾驶
+ break;
+ default:
+ break;
+ }
+ }
+
+ @Override
+ public void onAutopilotArriveAtStation(@Nullable MessagePad.ArrivalNotification arrivalNotification) {
+
+ }
+
+ @Override
+ public void onAutopilotSNRequest() {
+
+ }
+
+ @Override
+ public void onAutopilotGuardian(@Nullable MogoReportMsg.MogoReportMessage guardianInfo) {
+
+ }
+
+ @Override
+ public void onAutopilotIpcConnectStatusChanged(int status, @Nullable String reason) {
+ if (status == 0x00) {//判断工控机重连后,获取当前正在执行的子任务,延时10秒,防止工控机连接上时SN为空
+ UiThreadHandler.postDelayed(() -> {
+ getCurrentTask();
+ }, 10000);
+ }
+ //CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotIpcConnectStatusChanged status:" + status + " reason:" + reason);
+ }
+
+ @Override
+ public void onAutopilotStatusRespByQuery(@NonNull SystemStatusInfo.StatusInfo status) {
+ // CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotStatusRespByQuery status:" + status.getSysState().getNumber());
+ }
+
+ @Override
+ public void onAutopilotRouteLineId(long lineId) {
+
+ }
+
+ /**
+ * 云控数据异常或者工控机传递数据异常
+ *
+ * @param bytes
+ */
+ @Override
+ public void onSweeperFutianCloudTaskUnknown(@NonNull byte[] bytes) {
+ String string = new String(bytes, StandardCharsets.UTF_8);
+ CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianCloudTaskUnknown:" + string);
+ }
+
+}
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/presenter/SweeperPresenter.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/presenter/SweeperPresenter.java
new file mode 100644
index 0000000000..c454c5e66f
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/presenter/SweeperPresenter.java
@@ -0,0 +1,228 @@
+package com.mogo.och.sweepercloud.presenter;
+
+
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.commons.mvp.Presenter;
+import com.mogo.eagle.core.data.map.MogoLocation;
+import com.mogo.eagle.core.function.call.autopilot.CallerSweeperFutianCleanSystemListenerManager;
+import com.mogo.eagle.core.utilcode.util.ThreadUtils;
+import com.mogo.och.common.module.manager.OCHAdasAbilityManager;
+import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean;
+import com.mogo.och.sweepercloud.callback.ISweeperControllerStatusCallback;
+import com.mogo.och.sweepercloud.callback.ISweeperCloudTaskCallback;
+import com.mogo.och.sweepercloud.callback.ISweeperTaskRouteCallback;
+import com.mogo.och.sweepercloud.database.bean.WeltDataBean;
+import com.mogo.och.sweepercloud.fragment.SweeperFragment;
+import com.mogo.och.sweepercloud.model.SweeperTaskModel;
+import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask;
+import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable;
+import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon;
+import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask;
+import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus;
+import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm;
+import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop;
+
+
+import java.util.ArrayList;
+
+import androidx.annotation.NonNull;
+import androidx.lifecycle.LifecycleOwner;
+import chassis.ChassisStatesOuterClass;
+
+/**
+ * 网约车小巴
+ *
+ * @author tongchenfei
+ */
+public class SweeperPresenter extends Presenter
+ implements ISweeperControllerStatusCallback,
+ ISweeperCloudTaskCallback, ISweeperTaskRouteCallback {
+
+ private static final String TAG = "SweeperPresenter";
+
+ public SweeperPresenter(SweeperFragment view) {
+ super(view);
+ SweeperTaskModel.getInstance().init();
+ OCHAdasAbilityManager.getInstance().init(AbsMogoApplication.getApp());
+ }
+
+ @Override
+ public void onCreate(@NonNull LifecycleOwner owner) {
+ super.onCreate(owner);
+ initModelListener();
+ }
+
+ @Override
+ public void onDestroy(@NonNull LifecycleOwner owner) {
+ super.onDestroy(owner);
+ SweeperTaskModel.getInstance().release();
+ releaseListener();
+ }
+
+ public void initModelListener() {
+ SweeperTaskModel.getInstance().setControllerStatusCallback(this);
+ SweeperTaskModel.getInstance().setSweeperTaskCallback(this);
+ }
+
+ public void releaseListener() {
+ SweeperTaskModel.getInstance().setControllerStatusCallback(null);
+ SweeperTaskModel.getInstance().setSweeperTaskCallback(null);
+ CallerSweeperFutianCleanSystemListenerManager.INSTANCE.removeListener(TAG);
+ }
+
+ @Override
+ public void onVRModeChanged(boolean isVRMode) {
+ ThreadUtils.runOnUiThread(() -> mView.onVRModeChanged(isVRMode));
+ }
+
+ @Override
+ public void onCarLocationChanged(MogoLocation location) {
+ if (null != location) {
+ ThreadUtils.runOnUiThread(() -> mView.updateSpeedView((float) location.getGnssSpeed()));
+ ThreadUtils.runOnUiThread(() -> mView.setCurrentLocation(location));
+ }
+ }
+
+ @Override
+ public void onAutopilotState(int state) {
+ ThreadUtils.runOnUiThread(() -> mView.setAutoState(state));
+ }
+
+ /**
+ * 获取自动驾驶状态
+ *
+ * @return
+ */
+ public int getAutopilotState() {
+ return SweeperTaskModel.getInstance().getAutopilotState();
+ }
+
+ /**
+ * 清除路线缓存数据
+ */
+ public void clearRouteList() {
+ SweeperTaskModel.getInstance().clearRouteList();
+ }
+
+ /**
+ * 设置当前子任务信息
+ */
+ public void setSubtask(String subTaskId, SweeperTask.TaskModel subTaskType, int currentLineId) {
+ SweeperTaskModel.getInstance().setSubtask(subTaskId, subTaskType, currentLineId);
+ }
+
+ /**
+ * 判断是否有任务数据
+ */
+ public void isHasTaskInfo(boolean isHasTaskInfo) {
+ SweeperTaskModel.getInstance().isHasTaskInfo(isHasTaskInfo);
+ }
+
+ /**
+ * 设置上一个任务的lineId
+ * @param preLineId
+ */
+ public void setPreLineId(int preLineId) {
+ SweeperTaskModel.getInstance().setPreLineId(preLineId);
+ }
+
+ /**
+ * 获取当前正在执行的任务
+ */
+ public void getCurrentTask() {
+ SweeperTaskModel.getInstance().getCurrentTask();
+ }
+
+ /**
+ * 接取任务弹窗响应
+ *
+ * @param taskId
+ * @param code
+ */
+ public void sendSweeperStartTaskResp(String taskId, SweeperTask.StartTaskCode code) {
+ SweeperTaskModel.getInstance().sendSweeperStartTaskResp(taskId, code);
+ }
+
+ /**
+ * 子任务弹窗确认
+ *
+ * @param taskId
+ * @param subTaskId
+ * @param code
+ */
+ public void sendSweeperTaskConfirmResp(String taskId, String subTaskId, SweeperTaskConfirm.TaskConfirmCode code) {
+ SweeperTaskModel.getInstance().sendSweeperTaskConfirmResp(taskId, subTaskId, code);
+ }
+
+ /**
+ * 大任务结束弹窗确认
+ *
+ * @param taskId
+ * @param code
+ */
+ public void sendSweeperStopTaskResp(String taskId, SweeperTaskStop.StopTaskCode code) {
+ SweeperTaskModel.getInstance().sendSweeperStopTaskResp(taskId, code);
+ }
+
+ /**
+ * pad上报是否可以进自驾
+ *
+ * @param taskId
+ * @param subTaskId
+ * @param lineId
+ */
+ public void sendSweeperAutopilotBootable(String taskId, String subTaskId, long lineId) {
+ SweeperTaskModel.getInstance().sendSweeperAutopilotBootable(taskId, subTaskId, lineId);
+ }
+
+ @Override
+ public void setRouteList(@NonNull ArrayList routeList) {
+ mView.setTaskRouteList(routeList);
+ }
+
+ @Override
+ public void onSweeperCloudTask(@NonNull SweeperCloudTask.MessageType messageType, SweeperTask.TaskInfo taskInfo) {
+ ThreadUtils.runOnUiThread(() -> mView.onSweeperCloudTask(messageType, taskInfo));
+ }
+
+ @Override
+ public void onSweeperCloudTaskConfirm(@NonNull String taskId, @NonNull String subTaskId, boolean isPop) {
+ ThreadUtils.runOnUiThread(() -> mView.handleSubTaskInfoDialog(taskId, subTaskId, isPop));
+ }
+
+ @Override
+ public void onSweeperCloudTaskStatus(@NonNull String taskId, @NonNull String subTaskId, SweeperCommon.TaskStatus subTaskStatus) {
+ ThreadUtils.runOnUiThread(() -> mView.onSweeperUpdateSubTaskStatus(taskId, subTaskId, subTaskStatus));
+ }
+
+ @Override
+ public void onSweeperCloudTaskStop(@NonNull String taskId, SweeperTaskStop.StopTaskType stopTaskType, boolean isPop) {
+ ThreadUtils.runOnUiThread(() -> mView.onSweeperCloudTaskStop(taskId, stopTaskType, isPop));
+ }
+
+ @Override
+ public void onSweeperCloudTaskSuspendResume(@NonNull SweeperCloudTask.MessageType messageType, @NonNull String taskId,
+ @NonNull String subTaskId, SweeperCommon.Code code) {
+
+ }
+
+ @Override
+ public void onSweeperCloudBootable(@NonNull String taskId, @NonNull String subTaskId, SweeperBootable.IsBootableResp isBootableResp) {
+ ThreadUtils.runOnUiThread(() -> mView.onSweeperCloudAutopilotBootable(taskId, subTaskId, isBootableResp));
+ }
+
+ @Override
+ public void onSweeperCloudBigTaskStatus(@NonNull String taskId, SweeperBigTaskStatus.BigTaskStatus subTaskStatus) {
+ ThreadUtils.runOnUiThread(() -> mView.onSweeperCloudBigTaskStatus(taskId, subTaskStatus));
+ }
+
+ @Override
+ public void setWeltDataToMap(@NonNull ArrayList weltDataBeans, boolean isWeltData, @NonNull String distance) {
+ ThreadUtils.runOnUiThread(() -> mView.setWeltDataToMap(weltDataBeans, isWeltData, distance));
+ }
+
+ @Override
+ public void onSweeperFutianCleanSystemState(@NonNull ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState) {
+ ThreadUtils.runOnUiThread(() -> mView.onSweeperFutianCleanSystemState(cleanSystemState));
+ }
+}
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/receiver/TestSweeperBroadcastReceiver.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/receiver/TestSweeperBroadcastReceiver.java
new file mode 100644
index 0000000000..29a82c69ab
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/receiver/TestSweeperBroadcastReceiver.java
@@ -0,0 +1,42 @@
+package com.mogo.och.sweepercloud.receiver;
+
+import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
+import com.mogo.och.sweepercloud.constant.SweeperConst;
+
+/**
+ * 测试小巴车的场景
+ *
+ * @author donghongyu
+ * @date 4/26/21 12:08 PM
+ */
+public class TestSweeperBroadcastReceiver extends BroadcastReceiver {
+ private static final String TAG = "TestBusBroadcastReceiver";
+
+ private Context mContext;
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ try {
+ this.mContext = context;
+ int sceneType = intent.getIntExtra(SweeperConst.BROADCAST_TEST_SWEEPER_CONTROL_TYPE_EXTRA_KEY, 0);
+ CallerLogger.INSTANCE.d(M_BUS + TAG, "sceneType:" + sceneType);
+
+ // 分发场景
+ dispatchSceneTest(sceneType);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void dispatchSceneTest(int sceneType) {
+
+ }
+
+
+}
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/SweeperOperatePanelView.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/SweeperOperatePanelView.java
new file mode 100644
index 0000000000..741b9a9e6e
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/SweeperOperatePanelView.java
@@ -0,0 +1,1097 @@
+package com.mogo.och.sweepercloud.ui;
+
+import static com.mogo.och.sweepercloud.util.SweeperFutianCmdUtil.CLEAN_DIRECTION_BOTH_SIDE;
+import static com.mogo.och.sweepercloud.util.SweeperFutianCmdUtil.CLEAN_DIRECTION_LEFT_SIDE;
+import static com.mogo.och.sweepercloud.util.SweeperFutianCmdUtil.CLEAN_DIRECTION_RIGHT_SIDE;
+import static com.mogo.och.sweepercloud.util.SweeperFutianCmdUtil.CLEAN_INTENSITY_STRAND;
+import static com.mogo.och.sweepercloud.util.SweeperFutianCmdUtil.CLEAN_INTENSITY_STRONG;
+import static com.mogo.och.sweepercloud.util.SweeperFutianCmdUtil.CLEAN_MODE_PURE_DRAW;
+import static com.mogo.och.sweepercloud.util.SweeperFutianCmdUtil.CLEAN_MODE_PURE_SWEEP;
+import static com.mogo.och.sweepercloud.util.SweeperFutianCmdUtil.CLEAN_MODE_PURE_WASH;
+import static com.mogo.och.sweepercloud.util.SweeperFutianCmdUtil.CLEAN_MODE_WASH_SWEEP;
+
+import android.animation.ObjectAnimator;
+import android.content.Context;
+import android.os.Handler;
+import android.os.Message;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.animation.LinearInterpolator;
+import android.widget.CheckedTextView;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager;
+import com.mogo.eagle.core.utilcode.mogo.view.OnPreventFastClickListener;
+import com.mogo.eagle.core.utilcode.util.ToastUtils;
+import com.mogo.och.sweepercloud.R;
+import com.mogo.och.sweepercloud.callback.ICleaningModeStateCallback;
+import com.mogo.och.sweepercloud.constant.OperateStateEnum;
+import com.mogo.och.sweepercloud.util.SweeperFutianCmdUtil;
+import com.mogo.och.sweepercloud.view.NoTouchConstraintLayout;
+import com.mogo.och.sweepercloud.callback.ICleaningModeStateCallback;
+import com.mogo.och.sweepercloud.util.SweeperFutianCmdUtil;
+import com.mogo.och.sweepercloud.view.NoTouchConstraintLayout;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+
+import chassis.ChassisStatesOuterClass;
+import chassis.SpecialVehicleTaskCmdOuterClass;
+
+import static com.mogo.och.sweepercloud.util.SweeperFutianCmdUtil.CLEAN_DIRECTION_CLOSE;
+import static com.mogo.och.sweepercloud.util.SweeperFutianCmdUtil.CLEAN_MODE_CLOSE;
+import static com.mogo.och.sweepercloud.util.SweeperFutianCmdUtil.CLEAN_WORK_CLOSE;
+import static com.mogo.och.sweepercloud.util.SweeperFutianCmdUtil.CLEAN_WORK_OPEN;
+
+/**
+ * 清扫车操作面板View
+ */
+public class SweeperOperatePanelView extends LinearLayout {
+
+ private static final String TAG = "SweeperOperatePanelView";
+ private static final int CMD_EXECUTE_TIMEOUT_SECONDS = 30;
+ private static final int CMD_EXECUTE_MOCK_SUCCESS_SECONDS = 3;
+ private boolean isFirst = false;
+
+ CheckedTextView mBtnCleanWorkOpenClose;//开关
+ CheckedTextView mBtnCleanModePureSweep;//纯扫
+ CheckedTextView mBtnCleanModePureWash;//纯洗
+ CheckedTextView mBtnCleanModeSweepWash;//洗扫
+ CheckedTextView mBtnCleanModePureAbsorption;//纯吸
+ CheckedTextView mBtnCleanDirectionLeftSide;//左侧
+ CheckedTextView mBtnCleanDirectionRightSide;//右侧
+ CheckedTextView mBtnCleanDirectionBothSide;//两侧
+ CheckedTextView mBtnCleanIntensityStandard;//普通
+ CheckedTextView mBtnCleanIntensityStrong;//强力
+ FrameLayout mLoadingContainer;//loading container
+ TextView mLoadingHint;//loading 文本提示
+ ImageView mLoadingView;//loading 转圈动画
+ NoTouchConstraintLayout mWorkmodePanelRootView;
+
+ // 作业模式相关操作按钮的id
+ List cleanModeBtnViewIds = Arrays.asList(
+ R.id.btn_clean_mode_pure_sweep,
+ R.id.btn_clean_mode_pure_wash,
+ R.id.btn_clean_mode_sweep_wash,
+ R.id.btn_clean_mode_pure_absorption);
+
+ // 作业模式相关操作按钮,对应命令参数值
+ HashMap cleanModeBtnAndCmdValueMap = new HashMap() {
+ {
+ put(R.id.btn_clean_mode_pure_sweep, SweeperFutianCmdUtil.CLEAN_MODE_PURE_SWEEP);
+ put(R.id.btn_clean_mode_pure_wash, SweeperFutianCmdUtil.CLEAN_MODE_PURE_WASH);
+ put(R.id.btn_clean_mode_sweep_wash, SweeperFutianCmdUtil.CLEAN_MODE_WASH_SWEEP);
+ put(R.id.btn_clean_mode_pure_absorption, SweeperFutianCmdUtil.CLEAN_MODE_PURE_DRAW);
+ }
+ };
+
+ // 清扫方向相关操作按钮的id
+ List cleanDirectionBtnViewIds = Arrays.asList(
+ R.id.btn_clean_direction_left_side,
+ R.id.btn_clean_direction_right_side,
+ R.id.btn_clean_direction_both_side);
+
+ // 清扫方向相关按钮操作,对应命令参数值
+ HashMap cleanDirectionBtnAndCmdValueMap = new HashMap() {
+ {
+ put(R.id.btn_clean_direction_left_side, SweeperFutianCmdUtil.CLEAN_DIRECTION_LEFT_SIDE);
+ put(R.id.btn_clean_direction_right_side, SweeperFutianCmdUtil.CLEAN_DIRECTION_RIGHT_SIDE);
+ put(R.id.btn_clean_direction_both_side, SweeperFutianCmdUtil.CLEAN_DIRECTION_BOTH_SIDE);
+ }
+ };
+
+ // 作业强度相关按钮操作
+ List cleanIntensityBtnViewIds = Arrays.asList(
+ R.id.btn_clean_intensity_standard,
+ R.id.btn_clean_intensity_strong);
+
+ // 作业强度相关按钮操作,对应命令参数值
+ HashMap cleanIntensityBtnAndCmdValueMap = new HashMap() {
+ {
+ put(R.id.btn_clean_intensity_standard, SweeperFutianCmdUtil.CLEAN_INTENSITY_STRAND);
+ put(R.id.btn_clean_intensity_strong, SweeperFutianCmdUtil.CLEAN_INTENSITY_STRONG);
+ }
+ };
+ private boolean isSelectPureSweepMode = false;//用于标注是否选中纯扫
+
+ private ICleaningModeStateCallback cleaningModeStateCallback;
+
+ private OperateStateEnum operateStateEnum = OperateStateEnum.SYNCING_STATUS;
+
+ private ObjectAnimator objectAnimator;
+
+ private static ChassisStatesOuterClass.SweeperFuTianTaskSystemStates mCurrentCleanSystemState;//当前作业模式
+
+ public SweeperOperatePanelView(Context context) {
+ super(context);
+ }
+
+ public SweeperOperatePanelView(Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ initView(context);
+ }
+
+ public SweeperOperatePanelView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ initView(context);
+ }
+
+ public SweeperOperatePanelView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ initView(context);
+ }
+
+ private void initView(Context context) {
+ LayoutInflater.from(context).inflate(R.layout.sweeper_operate_panel_view, this, true);
+ mBtnCleanWorkOpenClose = (CheckedTextView) findViewById(R.id.btn_clean_work_open_close);
+ mWorkmodePanelRootView = (NoTouchConstraintLayout) findViewById(R.id.work_mode_panel_root_view);
+ mBtnCleanModePureSweep = (CheckedTextView) findViewById(R.id.btn_clean_mode_pure_sweep);
+ mBtnCleanModePureWash = (CheckedTextView) findViewById(R.id.btn_clean_mode_pure_wash);
+ mBtnCleanModeSweepWash = (CheckedTextView) findViewById(R.id.btn_clean_mode_sweep_wash);
+ mBtnCleanModePureAbsorption = (CheckedTextView) findViewById(R.id.btn_clean_mode_pure_absorption);
+ mBtnCleanDirectionLeftSide = (CheckedTextView) findViewById(R.id.btn_clean_direction_left_side);
+ mBtnCleanDirectionRightSide = (CheckedTextView) findViewById(R.id.btn_clean_direction_right_side);
+ mBtnCleanDirectionBothSide = (CheckedTextView) findViewById(R.id.btn_clean_direction_both_side);
+ mBtnCleanIntensityStandard = (CheckedTextView) findViewById(R.id.btn_clean_intensity_standard);
+ mBtnCleanIntensityStrong = (CheckedTextView) findViewById(R.id.btn_clean_intensity_strong);
+ mLoadingContainer = findViewById(R.id.loading_hint_container);
+ mLoadingHint = findViewById(R.id.loading_hint);
+ mLoadingView = findViewById(R.id.loading_view);
+ initViewListener();
+ }
+
+ private void initViewListener() {
+ setClickListener(mBtnCleanWorkOpenClose, (v) -> onCleanWorkBtnClick());
+ setClickListener(mBtnCleanModePureSweep, (v) -> onCleanModeBtnClick(v));
+ setClickListener(mBtnCleanModePureWash, (v) -> onCleanModeBtnClick(v));
+ setClickListener(mBtnCleanModeSweepWash, (v) -> onCleanModeBtnClick(v));
+ setClickListener(mBtnCleanModePureAbsorption, (v) -> onCleanModeBtnClick(v));
+ setClickListener(mBtnCleanDirectionLeftSide, (v) -> onCleanDirectionBtnClick(v));
+ setClickListener(mBtnCleanDirectionRightSide, (v) -> onCleanDirectionBtnClick(v));
+ setClickListener(mBtnCleanDirectionBothSide, (v) -> onCleanDirectionBtnClick(v));
+ setClickListener(mBtnCleanIntensityStandard, (v) -> onCleanIntensityBtnClick(v));
+ setClickListener(mBtnCleanIntensityStrong, (v) -> onCleanIntensityBtnClick(v));
+ }
+
+ /**
+ * 清扫任务开关按钮点击事件
+ */
+ private void onCleanWorkBtnClick() {
+ // 是否是 关闭 操作
+ boolean isCloseAction = mBtnCleanWorkOpenClose.isChecked();
+ CmdRequestCallback cmdRequestCallback = new CmdRequestCallback() {
+ @Override
+ public void onSendCmd() {
+ showLoadingMask(CMD_EXECUTE_TIMEOUT_SECONDS);
+ }
+
+ @Override
+ public void onCountDownTick(int seconds) {
+ updateLoadingCountDown(seconds);
+ }
+
+ @Override
+ public boolean onCheckIfCmdSuccess(ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState) {
+ boolean success = false;
+ if (cleanSystemState == null) {
+ return success;
+ }
+ if (isCloseAction) {
+ success = !cleanSystemState.getSecuMotWorkSts();
+ } else {
+ success = cleanSystemState.getSecuMotWorkSts();
+ }
+ return success;
+ }
+
+ @Override
+ public void onCmdSuccess() {
+ if (isCloseAction) {
+ mBtnCleanWorkOpenClose.setText("打开");
+ mBtnCleanWorkOpenClose.setChecked(false);
+ toggleCleanModeBtnsStatus(false);
+ toggleCleanDirectionBtnsStatus(false);
+ toggleCleanIntensityBtnsStatus(false);
+ } else {
+ mBtnCleanWorkOpenClose.setText("关闭");
+ mBtnCleanWorkOpenClose.setChecked(true);
+ toggleCleanModeBtnsStatus(true);
+ }
+ hideLoadingMask();
+ showCmdExecuteSuccessToast();
+ }
+
+ @Override
+ public void onCmdFailed() {
+ }
+
+ @Override
+ public void onCmdTimeout() {
+ //按钮样式恢复原样
+ if (isCloseAction) {
+ mBtnCleanWorkOpenClose.setText("关闭");
+ mBtnCleanWorkOpenClose.setChecked(true);
+ } else {
+ mBtnCleanWorkOpenClose.setText("打开");
+ mBtnCleanWorkOpenClose.setChecked(false);
+ }
+ hideLoadingMask();
+ showCmdExecuteTimeoutToast();
+ }
+ };
+ if (isCloseAction) {
+ //关闭操作,点击时需要弹框提示确认后,关闭
+ sendSweeperCmd(
+ SweeperFutianCmdUtil.buildCleanWorkStopCmd(),
+ cmdRequestCallback
+ , CMD_EXECUTE_TIMEOUT_SECONDS);
+ } else {
+ //打开操作,点击时打开
+ sendSweeperCmd(
+ SweeperFutianCmdUtil.buildCleanWorkStartCmd(),
+ cmdRequestCallback,
+ CMD_EXECUTE_TIMEOUT_SECONDS);
+ }
+ }
+
+ /**
+ * 作业模式按钮点击事件
+ *
+ * @param currentClickView
+ */
+ private void onCleanModeBtnClick(final View currentClickView) {
+ CheckedTextView currentChoosedModeBtnView = null;
+ for (Integer viewId : cleanModeBtnViewIds) {
+ CheckedTextView view = (CheckedTextView) findViewById(viewId);
+ if (view.isChecked()) {
+ currentChoosedModeBtnView = view;
+ break;
+ }
+ }
+ boolean isClickCurrentChoosedModeBtn = currentChoosedModeBtnView != null
+ && currentChoosedModeBtnView.getId() == currentClickView.getId();
+ //是否纯吸View
+ boolean isPureAbsorptionClick = currentClickView.getId() == R.id.btn_clean_mode_pure_absorption;
+ //是否纯洗View
+ boolean isPureWashClick = currentClickView.getId() == R.id.btn_clean_mode_pure_wash;
+ //是否纯扫View
+ boolean isPureSweepClick = currentClickView.getId() == R.id.btn_clean_mode_pure_sweep;
+ //是否洗扫View
+ boolean isWashSweepClick = currentClickView.getId() == R.id.btn_clean_mode_sweep_wash;
+ CmdRequestCallback cmdRequestCallback = new CmdRequestCallback() {
+ @Override
+ public void onSendCmd() {
+ showLoadingMask(CMD_EXECUTE_TIMEOUT_SECONDS);
+ }
+
+ @Override
+ public void onCountDownTick(int seconds) {
+ updateLoadingCountDown(seconds);
+ }
+
+ @Override
+ public boolean onCheckIfCmdSuccess(ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState) {
+ boolean success = false;
+ if (cleanSystemState == null) {
+ return success;
+ }
+ // 洗扫
+ boolean clean_mode_wash_sweep = cleanSystemState.getSecuModWashSweepSts();
+ // 纯洗
+ boolean clean_mode_pure_wash = cleanSystemState.getSecuModWashSts();
+ // 纯吸
+ boolean clean_mode_pure_draw = cleanSystemState.getSecuWorkTonSts();
+ // 纯扫 模式判断:不是另外其他3个模式,同时有清扫方向,说明开启了纯扫模式
+ boolean clean_mode_pure_sweep = SweeperFutianCmdUtil.checkIfCleanModePureSweep(cleanSystemState);
+ // 关闭作业模式(实际执行了3个操作: 关闭作业模式 关闭清扫方向 切换标准强度,实际以关闭作业模式成功为准)
+ boolean clean_mode_close = !clean_mode_wash_sweep
+ && !clean_mode_pure_wash
+ && !clean_mode_pure_draw
+ && !clean_mode_pure_sweep;
+
+ if (isClickCurrentChoosedModeBtn && clean_mode_close) {// 关闭放第一判断
+ success = clean_mode_close;
+ isSelectPureSweepMode = false;
+ } else if (isPureSweepClick) {
+ //success = clean_mode_pure_sweep;
+ //纯扫 这个模式实际在福田清扫车上没有这个按钮,只是发送指令给特种车端,默认此命令肯定是正确的
+ success = true;
+ isSelectPureSweepMode = true;
+ } else if (isPureWashClick) {
+ success = clean_mode_pure_wash;
+ isSelectPureSweepMode = false;
+ } else if (isWashSweepClick) {
+ success = clean_mode_wash_sweep;
+ isSelectPureSweepMode = false;
+ } else if (isPureAbsorptionClick) {
+ success = clean_mode_pure_draw;
+ isSelectPureSweepMode = false;
+ }
+ return success;
+ }
+
+ @Override
+ public void onCmdSuccess() {
+ ((CheckedTextView) currentClickView).setChecked(!isClickCurrentChoosedModeBtn);
+ toggleCleanModeBtnsByChoosedViewId(currentClickView.getId(), isClickCurrentChoosedModeBtn);
+ if (isClickCurrentChoosedModeBtn) {
+ toggleCleanDirectionBtnsStatus(false);
+ toggleCleanIntensityBtnsStatus(false);
+ } else {
+ // 如果是纯吸,没有设置清扫方向,同时自动设置作业强度为标准
+ if (isPureAbsorptionClick) {
+ toggleCleanDirectionBtnsStatus(false);
+ setCleanIntensityStandard();
+ } else {
+ toggleCleanDirectionBtnsStatus(true);
+ toggleCleanIntensityBtnsStatus(false);
+ }
+ }
+ hideLoadingMask();
+ showCmdExecuteSuccessToast();
+ }
+
+ @Override
+ public void onCmdFailed() {
+ }
+
+ @Override
+ public void onCmdTimeout() {
+ ((CheckedTextView) currentClickView).setChecked(isClickCurrentChoosedModeBtn);
+ hideLoadingMask();
+ showCmdExecuteTimeoutToast();
+ }
+ };
+
+ if (isClickCurrentChoosedModeBtn) {
+ //当前已选择模式的按钮,取消当前模式,并关闭清扫方向
+ sendSweeperCmd(
+ SweeperFutianCmdUtil.buildCleanModeCloseCmd(),
+ cmdRequestCallback,
+ CMD_EXECUTE_TIMEOUT_SECONDS);
+ } else {
+ //开启新的作业模式,直接发送命令(纯吸需要一并设置作业强度为标准)
+ int cmdValue = cleanModeBtnAndCmdValueMap.get(currentClickView.getId());
+ sendSweeperCmd(
+ isPureAbsorptionClick ? SweeperFutianCmdUtil.buildCleanModePureDrawCmd()
+ : SweeperFutianCmdUtil.buildCleanModeCmd(cmdValue),
+ cmdRequestCallback,
+ CMD_EXECUTE_TIMEOUT_SECONDS);
+ }
+ }
+
+ private void onCleanDirectionBtnClick(final View currentClickView) {
+ CheckedTextView currentChoosedDirectionBtnView = null;
+ for (Integer viewId : cleanDirectionBtnViewIds) {
+ CheckedTextView view = (CheckedTextView) findViewById(viewId);
+ if (view.isChecked()) {
+ currentChoosedDirectionBtnView = view;
+ break;
+ }
+ }
+ boolean isClickCurrentChoosedDirectionBtn = currentChoosedDirectionBtnView != null
+ && currentChoosedDirectionBtnView.getId() == currentClickView.getId();
+
+ boolean isLeftSide = currentClickView.getId() == R.id.btn_clean_direction_left_side;
+ boolean isRightSide = currentClickView.getId() == R.id.btn_clean_direction_right_side;
+ boolean isBothSide = currentClickView.getId() == R.id.btn_clean_direction_both_side;
+ CmdRequestCallback cmdRequestCallback = new CmdRequestCallback() {
+ @Override
+ public void onSendCmd() {
+ showLoadingMask(CMD_EXECUTE_TIMEOUT_SECONDS);
+ }
+
+ @Override
+ public void onCountDownTick(int seconds) {
+ updateLoadingCountDown(seconds);
+ }
+
+ @Override
+ public boolean onCheckIfCmdSuccess(ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState) {
+ boolean success = false;
+ if (cleanSystemState == null) {
+ return success;
+ }
+ // 左侧
+ boolean clean_direction_left_side = cleanSystemState.getSecuWorkLeftSts();
+ // 右侧
+ boolean clean_direction_right_side = cleanSystemState.getSecuWorkRightSts();
+ // 两侧
+ boolean clean_direction_both_side = cleanSystemState.getSecuWorkOnBothsidesSts();
+ // 关闭清扫方向(实际执行了2个操作:关闭清扫方向 切换标准强度,实际以关闭清扫方向成功为准)
+ boolean clean_direction_close = !clean_direction_left_side && !clean_direction_right_side
+ && !clean_direction_both_side;
+
+ if (isClickCurrentChoosedDirectionBtn && clean_direction_close) {//关闭放第一判断
+ success = clean_direction_close;
+ } else if (isLeftSide) {
+ success = clean_direction_left_side;
+ } else if (isRightSide) {
+ success = clean_direction_right_side;
+ } else if (isBothSide) {
+ success = clean_direction_both_side;
+ }
+ return success;
+ }
+
+ @Override
+ public void onCmdSuccess() {
+ ((CheckedTextView) currentClickView).setChecked(!isClickCurrentChoosedDirectionBtn);
+ toggleCleanDirectionBtnsByChoosedViewId(currentClickView.getId(), isClickCurrentChoosedDirectionBtn);
+ if (isClickCurrentChoosedDirectionBtn) {
+ toggleCleanIntensityBtnsStatus(false);
+ } else {
+ toggleCleanIntensityBtnsStatus(true);
+ // 一并设置作业强度为标准
+ setCleanIntensityStandard();
+ }
+ hideLoadingMask();
+ showCmdExecuteSuccessToast();
+ }
+
+ @Override
+ public void onCmdFailed() {
+ }
+
+ @Override
+ public void onCmdTimeout() {
+ ((CheckedTextView) currentClickView).setChecked(isClickCurrentChoosedDirectionBtn);
+ hideLoadingMask();
+ showCmdExecuteTimeoutToast();
+ }
+ };
+ if (isClickCurrentChoosedDirectionBtn) {
+ //当前已选择模式的按钮,取消当前模式,重置作业强度为标准,并置灰作业强度按钮
+ sendSweeperCmd(
+ SweeperFutianCmdUtil.buildCleanDirectionCloseCmd(),
+ cmdRequestCallback,
+ CMD_EXECUTE_TIMEOUT_SECONDS);
+ } else {
+ //开启新的作业模式,直接发送命令(作业强度默认为标准)
+ int cmdValue = cleanDirectionBtnAndCmdValueMap.get(currentClickView.getId());
+ sendSweeperCmd(
+ SweeperFutianCmdUtil.buildCleanDirectionCmd(cmdValue),
+ cmdRequestCallback,
+ CMD_EXECUTE_TIMEOUT_SECONDS);
+ }
+ }
+
+ private void onCleanIntensityBtnClick(final View currentClickView) {
+ CheckedTextView currentChoosedModeBtnView = null;
+ for (Integer viewId : cleanIntensityBtnViewIds) {
+ CheckedTextView view = (CheckedTextView) findViewById(viewId);
+ if (view.isChecked()) {
+ currentChoosedModeBtnView = view;
+ break;
+ }
+ }
+ boolean isClickCurrentChoosedModeBtn = currentChoosedModeBtnView != null
+ && currentChoosedModeBtnView.getId() == currentClickView.getId();
+ //作业强度如果已经选中,则重复点击时不需要再重复发送指令
+ if (isClickCurrentChoosedModeBtn) {
+ return;
+ }
+ boolean isStandardBtnClick = currentClickView.getId() == R.id.btn_clean_intensity_standard;
+ boolean isStrongBtnClick = currentClickView.getId() == R.id.btn_clean_intensity_strong;
+ CmdRequestCallback cmdRequestCallback = new CmdRequestCallback() {
+ @Override
+ public void onSendCmd() {
+ showLoadingMask(CMD_EXECUTE_TIMEOUT_SECONDS);
+ }
+
+ @Override
+ public void onCountDownTick(int seconds) {
+ updateLoadingCountDown(seconds);
+ }
+
+ @Override
+ public boolean onCheckIfCmdSuccess(ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState) {
+ boolean success = false;
+ if (cleanSystemState == null) {
+ return success;
+ }
+ boolean clean_intensity_standard = cleanSystemState.getSecuWorkStandSts();
+ boolean clean_intensity_strong = cleanSystemState.getSecuWorkStrongSts();
+ if (isStandardBtnClick) {
+ success = clean_intensity_standard;
+ } else if (isStrongBtnClick) {
+ success = clean_intensity_strong;
+ }
+ return success;
+ }
+
+ @Override
+ public void onCmdSuccess() {
+ ((CheckedTextView) currentClickView).setChecked(true);
+ if (isStandardBtnClick) {
+ setCleanIntensityStandard();
+ } else {
+ setCleanIntensityStrong();
+ }
+ hideLoadingMask();
+ showCmdExecuteSuccessToast();
+ }
+
+ @Override
+ public void onCmdFailed() {
+ }
+
+ @Override
+ public void onCmdTimeout() {
+ ((CheckedTextView) currentClickView).setChecked(false);
+ hideLoadingMask();
+ showCmdExecuteTimeoutToast();
+ }
+ };
+ int cmdValue = cleanIntensityBtnAndCmdValueMap.get(currentClickView.getId());
+ sendSweeperCmd(
+ SweeperFutianCmdUtil.buildCleanIntensityCmd(cmdValue),
+ cmdRequestCallback,
+ CMD_EXECUTE_TIMEOUT_SECONDS);
+ }
+
+ /**
+ * 作业模式按钮状态切换-置灰/开启 按钮
+ *
+ * @param enable
+ */
+ private void toggleCleanModeBtnsStatus(boolean enable) {
+ for (Integer viewId : cleanModeBtnViewIds) {
+ CheckedTextView view = (CheckedTextView) findViewById(viewId);
+ view.setEnabled(enable);
+ view.setChecked(false);
+ }
+ }
+
+ /**
+ * 作业模式按钮状态切换-将当前点击按钮之外的其他按钮 置灰或开启
+ *
+ * @param choosedBtnId
+ * @param enable
+ */
+ private void toggleCleanModeBtnsByChoosedViewId(int choosedBtnId, boolean enable) {
+ for (Integer viewId : cleanModeBtnViewIds) {
+ CheckedTextView view = (CheckedTextView) findViewById(viewId);
+ if (view.getId() != choosedBtnId) {
+ view.setEnabled(enable);
+ view.setChecked(false);
+ }
+ }
+ }
+
+ /**
+ * 清扫方向按钮状态切换-置灰/开启 按钮
+ *
+ * @param enable
+ */
+ private void toggleCleanDirectionBtnsStatus(boolean enable) {
+ for (Integer viewId : cleanDirectionBtnViewIds) {
+ CheckedTextView view = (CheckedTextView) findViewById(viewId);
+ view.setEnabled(enable);
+ view.setChecked(false);
+ }
+ }
+
+ /**
+ * 清扫方向按钮状态切换-将当前点击按钮之外的其他按钮 置灰或开启
+ *
+ * @param choosedBtnId
+ * @param enable
+ */
+ private void toggleCleanDirectionBtnsByChoosedViewId(int choosedBtnId, boolean enable) {
+ for (Integer viewId : cleanDirectionBtnViewIds) {
+ CheckedTextView view = (CheckedTextView) findViewById(viewId);
+ if (view.getId() != choosedBtnId) {
+ view.setEnabled(enable);
+ view.setChecked(false);
+ }
+ }
+ }
+
+ /**
+ * 作业强度按钮状态切换-置灰/开启 按钮
+ *
+ * @param enable
+ */
+ private void toggleCleanIntensityBtnsStatus(boolean enable) {
+ for (Integer viewId : cleanIntensityBtnViewIds) {
+ CheckedTextView view = (CheckedTextView) findViewById(viewId);
+ view.setEnabled(enable);
+ view.setChecked(false);
+ }
+ }
+
+ /**
+ * 设置作业强度-标准
+ */
+ private void setCleanIntensityStandard() {
+ mBtnCleanIntensityStandard.setChecked(true);
+ mBtnCleanIntensityStandard.setEnabled(true);
+ mBtnCleanIntensityStrong.setChecked(false);
+ mBtnCleanIntensityStrong.setEnabled(true);
+ }
+
+ /**
+ * 设置作业强度-加强
+ */
+ private void setCleanIntensityStrong() {
+ mBtnCleanIntensityStandard.setChecked(false);
+ mBtnCleanIntensityStandard.setEnabled(true);
+ mBtnCleanIntensityStrong.setChecked(true);
+ mBtnCleanIntensityStrong.setEnabled(true);
+ }
+
+ /**
+ * 发送命令后等待时,展示loading
+ *
+ * @param timeout
+ */
+ private void showLoadingMask(int timeout) {
+ mLoadingContainer.setVisibility(View.VISIBLE);
+ mWorkmodePanelRootView.setInterceptTouchEvent(true);
+ if (timeout < 0) {//状态同步中
+ mLoadingHint.setText("状态同步中,请稍后");
+ mLoadingView.setVisibility(View.GONE);
+ } else {
+ mLoadingHint.setText(timeout + "s");
+ mLoadingView.setVisibility(View.VISIBLE);
+ startRotation();
+ }
+ if (cleaningModeStateCallback != null && timeout > 0) {
+ operateStateEnum = OperateStateEnum.STARTING_STATUS;
+ cleaningModeStateCallback.cleaningModeState(operateStateEnum, mCurrentCleanSystemState, isSelectPureSweepMode);
+ }
+ }
+
+ /**
+ * 隐藏loading
+ */
+ private void hideLoadingMask() {
+ mSweeperOperateCmdHandler.removeMessages(MSG_CMD_EXECUTE_COUNT_DOWN);
+ mLoadingContainer.setVisibility(View.GONE);
+ mWorkmodePanelRootView.setInterceptTouchEvent(false);
+ }
+
+ /**
+ * 更新loading中倒计时
+ *
+ * @param timeout
+ */
+ private void updateLoadingCountDown(int timeout) {
+ mLoadingHint.setText(timeout + "s");
+ }
+
+ /**
+ * 命令执行成功toast
+ */
+ private void showCmdExecuteSuccessToast() {
+ if (cleaningModeStateCallback != null) {
+ operateStateEnum = OperateStateEnum.SUCCESS_STATUS;
+ cleaningModeStateCallback.cleaningModeState(operateStateEnum, mCurrentCleanSystemState, isSelectPureSweepMode);
+ }
+ //停止旋转动画
+ stopRotation();
+ ToastUtils.showLong("设备已响应,操作成功");
+ }
+
+ /**
+ * 命令执行超时toast
+ */
+ private void showCmdExecuteTimeoutToast() {
+ if (cleaningModeStateCallback != null) {
+ operateStateEnum = OperateStateEnum.FAIL_STATUS;
+ cleaningModeStateCallback.cleaningModeState(operateStateEnum, mCurrentCleanSystemState, isSelectPureSweepMode);
+ }
+ //停止旋转动画
+ stopRotation();
+ ToastUtils.showLong("超时未响应,操作失败");
+ }
+
+ private void setClickListener(View view, OnClickListener listener) {
+ view.setOnClickListener(new OnPreventFastClickListener() {
+ @Override
+ public void onClickImpl(View v) {
+ listener.onClick(v);
+ }
+ });
+ }
+
+ public void setSweeperFutianCleanSystemState(ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState,
+ ICleaningModeStateCallback cleaningModeStateCallback) {
+ this.cleaningModeStateCallback = cleaningModeStateCallback;
+ // 有命令正在执行
+ if (mCurrentCmdRequestCallback != null) {
+ Log.d(TAG, "getSecuWorkLeftSts = " + cleanSystemState.getSecuWorkLeftSts());
+ if (mCurrentCmdRequestCallback.onCheckIfCmdSuccess(cleanSystemState)) {
+ mCurrentCmdRequestCallback.onCmdSuccess();
+ mCurrentCmdRequestCallback = null;
+ }
+ }
+ //正在上装中或者上装失败,则不更新面板内容
+ if (operateStateEnum == OperateStateEnum.STARTING_STATUS) {
+ return;
+ }
+ if (!isFirst) {
+ isFirst = true;
+ onSyncVehicleStateCallBack(cleanSystemState);
+ }
+ }
+
+ /**
+ * 设置是否展示状态同步中
+ *
+ * @param operateState
+ */
+ public void showSyncing(OperateStateEnum operateState) {
+ if (operateState == OperateStateEnum.SYNCING_STATUS) {
+ syncVehicleStateAndRecoverOperatePanelStates();
+ isFirst = false;
+ } else {
+ hideLoadingMask();
+ }
+ }
+
+ /**
+ * 等待同步底盘数据,并根据底盘数据恢复操作面板中按钮的状态
+ */
+ private synchronized void syncVehicleStateAndRecoverOperatePanelStates() {
+ // show sync loading
+ showLoadingMask(-1);
+ }
+
+ private synchronized void onSyncVehicleStateCallBack(ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState) {
+ if (cleanSystemState == null) return;
+ // 清扫作业开启状态(以电机状态为true代表Open成功,实际控制端控制步骤为:1.发送远程控制上装指令 2.发送电机启动指令)
+ boolean clean_open_requirement = cleanSystemState.getSecuMotWorkSts();
+ // 作业模式状态
+ // 洗扫
+ boolean clean_mode_wash_sweep = cleanSystemState.getSecuModWashSweepSts();
+ // 纯洗
+ boolean clean_mode_pure_wash = cleanSystemState.getSecuModWashSts();
+ // 纯吸
+ boolean clean_mode_pure_draw = cleanSystemState.getSecuWorkTonSts();
+
+ // 清扫方向状态
+ // 左侧
+ boolean clean_direction_left_side = cleanSystemState.getSecuWorkLeftSts();
+ // 右侧
+ boolean clean_direction_right_side = cleanSystemState.getSecuWorkRightSts();
+ // 两侧
+ boolean clean_direction_both_side = cleanSystemState.getSecuWorkOnBothsidesSts();
+
+ // 纯扫 模式判断:不是另外其他3个模式,同时有清扫方向,说明开启了纯扫模式
+ boolean clean_mode_pure_sweep = SweeperFutianCmdUtil.checkIfCleanModePureSweep(cleanSystemState);
+
+ // 作业强度状态
+ boolean clean_intensity_standard = cleanSystemState.getSecuWorkStandSts();
+ boolean clean_intensity_strong = cleanSystemState.getSecuWorkStrongSts();
+ if (clean_open_requirement) {
+ // 打开状态
+ mBtnCleanWorkOpenClose.setText("关闭");
+ mBtnCleanWorkOpenClose.setChecked(true);
+ } else {
+ // 关闭状态
+ mBtnCleanWorkOpenClose.setText("打开");
+ mBtnCleanWorkOpenClose.setChecked(false);
+ }
+ if (clean_mode_pure_sweep) {
+ //纯扫
+ mBtnCleanModePureSweep.setChecked(true);
+ mBtnCleanModePureSweep.setEnabled(true);
+ toggleCleanModeBtnsByChoosedViewId(R.id.btn_clean_mode_pure_sweep, false);
+ } else if (clean_mode_pure_wash) {
+ //纯洗
+ mBtnCleanModePureWash.setChecked(true);
+ mBtnCleanModePureWash.setEnabled(true);
+ toggleCleanModeBtnsByChoosedViewId(R.id.btn_clean_mode_pure_wash, false);
+ } else if (clean_mode_wash_sweep) {
+ //洗扫
+ mBtnCleanModeSweepWash.setChecked(true);
+ mBtnCleanModeSweepWash.setEnabled(true);
+ toggleCleanModeBtnsByChoosedViewId(R.id.btn_clean_mode_sweep_wash, false);
+ } else if (clean_mode_pure_draw) {
+ //纯吸,需要disable作业方向
+ mBtnCleanModePureAbsorption.setChecked(true);
+ mBtnCleanModePureAbsorption.setEnabled(true);
+ toggleCleanModeBtnsByChoosedViewId(R.id.btn_clean_mode_pure_absorption, false);
+ toggleCleanDirectionBtnsStatus(false);
+ }
+
+ if (!clean_mode_pure_draw) {// 非纯吸模式才有清扫方向
+ if (clean_direction_left_side) {
+ mBtnCleanDirectionLeftSide.setChecked(true);
+ mBtnCleanDirectionLeftSide.setEnabled(true);
+ toggleCleanDirectionBtnsByChoosedViewId(R.id.btn_clean_direction_left_side, false);
+ } else if (clean_direction_right_side) {
+ mBtnCleanDirectionRightSide.setChecked(true);
+ mBtnCleanDirectionRightSide.setEnabled(true);
+ toggleCleanDirectionBtnsByChoosedViewId(R.id.btn_clean_direction_right_side, false);
+ } else if (clean_direction_both_side) {
+ mBtnCleanDirectionBothSide.setChecked(true);
+ mBtnCleanDirectionBothSide.setEnabled(true);
+ toggleCleanDirectionBtnsByChoosedViewId(R.id.btn_clean_direction_both_side, false);
+ }
+ }
+ if (clean_intensity_standard) {
+ setCleanIntensityStandard();
+ } else if (clean_intensity_strong) {
+ setCleanIntensityStrong();
+ }
+ hideLoadingMask();
+ }
+
+ /**
+ * 发送清扫车相关作业命令
+ *
+ * @param fuTianCleanCmd
+ * @param cmdRequestCallback
+ * @param timeout
+ */
+ private void sendSweeperCmd(
+ SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd fuTianCleanCmd,
+ CmdRequestCallback cmdRequestCallback,
+ int timeout) {
+ // 设置当前请求的回调
+ mCurrentCmdRequestCallback = cmdRequestCallback;
+ // onSendCmd
+ mCurrentCmdRequestCallback.onSendCmd();
+ // 发送命令
+ CallerAutoPilotControlManager.INSTANCE.sendSweeperFuTianTaskCmd(fuTianCleanCmd);
+ // log发送命令
+ logSweeperCmdValue(fuTianCleanCmd);
+ // 开启倒计时
+ Message msg = Message.obtain();
+ msg.what = MSG_CMD_EXECUTE_COUNT_DOWN;
+ msg.obj = timeout;
+ mSweeperOperateCmdHandler.sendMessage(msg);
+ // Mock Cmd Success
+ //mockCleanModeSuccess(fuTianCleanCmd);
+ }
+
+ private void mockSendCmdSuccess() {
+ Message successMsg = Message.obtain();
+ successMsg.what = MSG_CMD_EXECUTE_MOCK_SUCCESS;
+ mSweeperOperateCmdHandler.sendMessageDelayed(successMsg, 1000L * CMD_EXECUTE_MOCK_SUCCESS_SECONDS);
+ }
+
+ private void logSweeperCmdValue(SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd taskCmd) {
+ SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd roboSweeperFutianCleanCmd = taskCmd.getRoboSweeperFutianCleanCmd();
+ int clean_open_requirement = roboSweeperFutianCleanCmd.getCleanOpenRequirement();
+ int clean_mode_requirement = roboSweeperFutianCleanCmd.getCleanModeRequirement();
+ int clean_direction_requirement = roboSweeperFutianCleanCmd.getCleanDirectionRequirement();
+ int clean_intensity_requirement = roboSweeperFutianCleanCmd.getCleanIntensityRequirement();
+ Log.d(TAG, "---- sendSweeperFuTianTaskCmd ----"
+ + "[clean_open_requirement = " + clean_open_requirement + "],"
+ + "[clean_mode_requirement = " + clean_mode_requirement + "],"
+ + "[clean_direction_requirement = " + clean_direction_requirement + "],"
+ + "[clean_intensity_requirement = " + clean_intensity_requirement + "]"
+ );
+ }
+
+ private final static SweeperOperateCmdHandler mSweeperOperateCmdHandler = new SweeperOperateCmdHandler();
+ private static CmdRequestCallback mCurrentCmdRequestCallback;//发送命令后的回调
+ private static final int MSG_CMD_EXECUTE_COUNT_DOWN = 10001;
+ private static final int MSG_CMD_EXECUTE_MOCK_SUCCESS = 10002;
+
+ /**
+ * 执行命令时倒计时的Handler
+ */
+ static class SweeperOperateCmdHandler extends Handler {
+
+ @Override
+ public void handleMessage(@NonNull Message msg) {
+ super.handleMessage(msg);
+ if (msg.what == MSG_CMD_EXECUTE_COUNT_DOWN) {
+ int seconds = (int) msg.obj;
+ if (seconds > 0) {
+ if (mCurrentCmdRequestCallback != null) {
+ mCurrentCmdRequestCallback.onCountDownTick(seconds);
+ }
+ Message newMsg = Message.obtain();
+ newMsg.what = MSG_CMD_EXECUTE_COUNT_DOWN;
+ newMsg.obj = seconds - 1;
+ mSweeperOperateCmdHandler.sendMessageDelayed(newMsg, 1000L);
+ } else {
+ if (mCurrentCmdRequestCallback != null) {
+ mCurrentCmdRequestCallback.onCmdTimeout();
+ mCurrentCmdRequestCallback = null;
+ }
+ removeMessages(MSG_CMD_EXECUTE_COUNT_DOWN);
+ }
+ } else if (msg.what == MSG_CMD_EXECUTE_MOCK_SUCCESS) {
+ if (mCurrentCmdRequestCallback != null) {
+ if (mCurrentCmdRequestCallback.onCheckIfCmdSuccess(mCurrentCleanSystemState)) {
+ mCurrentCmdRequestCallback.onCmdSuccess();
+ mCurrentCmdRequestCallback = null;
+ }
+ }
+ removeMessages(MSG_CMD_EXECUTE_COUNT_DOWN);
+ }
+ }
+ }
+
+ interface CmdRequestCallback {
+ void onSendCmd();
+
+ void onCountDownTick(int senonds);
+
+ boolean onCheckIfCmdSuccess(ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState);
+
+ void onCmdSuccess();
+
+ void onCmdFailed();
+
+ void onCmdTimeout();
+ }
+
+ /**
+ * 开始旋转
+ */
+ private void startRotation() {
+ if (objectAnimator == null) {
+ objectAnimator = ObjectAnimator.ofFloat(mLoadingView, "rotation", 0, 360f);
+ objectAnimator.setDuration(1500);
+ objectAnimator.setRepeatCount(-1);
+ objectAnimator.setInterpolator(new LinearInterpolator());
+ objectAnimator.start();
+ }
+ }
+
+ /**
+ * 停止旋转
+ */
+ private void stopRotation() {
+ if (objectAnimator != null && objectAnimator.isRunning()) {
+ objectAnimator.end();
+ objectAnimator = null;
+ }
+ }
+
+ /**
+ * 模拟指令操作成功
+ */
+ private void mockCleanModeSuccess(SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd fuTianTaskCmd) {
+ ChassisStatesOuterClass.SweeperFuTianTaskSystemStates.Builder builder = ChassisStatesOuterClass.SweeperFuTianTaskSystemStates.newBuilder();
+ chassis.SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd fuTianCleanCmd = fuTianTaskCmd.getRoboSweeperFutianCleanCmd();
+ if (fuTianCleanCmd.getCleanOpenRequirement() == SweeperFutianCmdUtil.CLEAN_WORK_OPEN) {//打开
+ builder.setSecuMotWorkSts(true);
+ builder.setSecuModWashSweepSts(false);
+ builder.setSecuModWashSts(false);
+ builder.setSecuWorkTonSts(false);
+ builder.setSecuWorkOnBothsidesSts(false);
+ builder.setSecuWorkLeftSts(false);
+ builder.setSecuWorkRightSts(false);
+ builder.setSecuWorkStandSts(true);
+ builder.setSecuWorkStrongSts(false);
+ mCurrentCleanSystemState = builder.build();
+ mockSendCmdSuccess();
+ return;
+ } else if (fuTianCleanCmd.getCleanOpenRequirement() == SweeperFutianCmdUtil.CLEAN_WORK_CLOSE) {//关闭
+ builder.setSecuModWashSweepSts(false);
+ builder.setSecuModWashSts(false);
+ builder.setSecuWorkTonSts(false);
+ builder.setSecuWorkOnBothsidesSts(false);
+ builder.setSecuWorkLeftSts(false);
+ builder.setSecuWorkRightSts(false);
+ builder.setSecuWorkStandSts(true);
+ builder.setSecuWorkStrongSts(false);
+ builder.setSecuMotWorkSts(false);
+ mCurrentCleanSystemState = builder.build();
+ mockSendCmdSuccess();
+ return;
+ }
+ if (fuTianCleanCmd.getCleanModeRequirement() == SweeperFutianCmdUtil.CLEAN_MODE_PURE_SWEEP) {//纯扫
+ builder.setSecuModWashSweepSts(false);
+ builder.setSecuModWashSts(false);
+ builder.setSecuWorkTonSts(false);
+ mCurrentCleanSystemState = builder.build();
+ mockSendCmdSuccess();
+ return;
+ } else if (fuTianCleanCmd.getCleanModeRequirement() == SweeperFutianCmdUtil.CLEAN_MODE_WASH_SWEEP) {//洗扫
+ builder.setSecuModWashSweepSts(!mCurrentCleanSystemState.getSecuModWashSweepSts());
+ mCurrentCleanSystemState = builder.build();
+ mockSendCmdSuccess();
+ return;
+ } else if (fuTianCleanCmd.getCleanModeRequirement() == SweeperFutianCmdUtil.CLEAN_MODE_PURE_WASH) {//纯洗
+ builder.setSecuModWashSts(!mCurrentCleanSystemState.getSecuModWashSts());
+ mCurrentCleanSystemState = builder.build();
+ mockSendCmdSuccess();
+ return;
+ } else if (fuTianCleanCmd.getCleanModeRequirement() == SweeperFutianCmdUtil.CLEAN_MODE_PURE_DRAW) {//纯吸
+ builder.setSecuWorkTonSts(!mCurrentCleanSystemState.getSecuWorkTonSts());
+ builder.setSecuWorkStandSts(true);
+ builder.setSecuWorkOnBothsidesSts(false);
+ builder.setSecuWorkLeftSts(false);
+ builder.setSecuWorkRightSts(false);
+ mCurrentCleanSystemState = builder.build();
+ mockSendCmdSuccess();
+ return;
+ } else if (fuTianCleanCmd.getCleanModeRequirement() == SweeperFutianCmdUtil.CLEAN_MODE_CLOSE) {
+ builder.setSecuModWashSweepSts(false);
+ builder.setSecuModWashSts(false);
+ builder.setSecuWorkTonSts(false);
+ builder.setSecuWorkOnBothsidesSts(false);
+ builder.setSecuWorkLeftSts(false);
+ builder.setSecuWorkRightSts(false);
+ builder.setSecuWorkStandSts(true);
+ builder.setSecuWorkStrongSts(false);
+ mCurrentCleanSystemState = builder.build();
+ mockSendCmdSuccess();
+ return;
+ }
+ if (fuTianCleanCmd.getCleanDirectionRequirement() == SweeperFutianCmdUtil.CLEAN_DIRECTION_BOTH_SIDE) {//两侧
+ builder.setSecuWorkOnBothsidesSts(!mCurrentCleanSystemState.getSecuWorkOnBothsidesSts());
+ builder.setSecuWorkStandSts(true);
+ builder.setSecuWorkStrongSts(false);
+ mCurrentCleanSystemState = builder.build();
+ mockSendCmdSuccess();
+ return;
+ } else if (fuTianCleanCmd.getCleanDirectionRequirement() == SweeperFutianCmdUtil.CLEAN_DIRECTION_LEFT_SIDE) {//左侧
+ builder.setSecuWorkLeftSts(!mCurrentCleanSystemState.getSecuWorkLeftSts());
+ builder.setSecuWorkStandSts(true);
+ builder.setSecuWorkStrongSts(false);
+ mCurrentCleanSystemState = builder.build();
+ mockSendCmdSuccess();
+ return;
+ } else if (fuTianCleanCmd.getCleanDirectionRequirement() == SweeperFutianCmdUtil.CLEAN_DIRECTION_RIGHT_SIDE) {//右侧
+ builder.setSecuWorkRightSts(!mCurrentCleanSystemState.getSecuWorkRightSts());
+ builder.setSecuWorkStandSts(true);
+ builder.setSecuWorkStrongSts(false);
+ mCurrentCleanSystemState = builder.build();
+ mockSendCmdSuccess();
+ return;
+ } else if (fuTianCleanCmd.getCleanDirectionRequirement() == SweeperFutianCmdUtil.CLEAN_DIRECTION_CLOSE) {
+ builder.setSecuWorkLeftSts(false);
+ builder.setSecuWorkRightSts(false);
+ builder.setSecuWorkOnBothsidesSts(false);
+ builder.setSecuWorkStandSts(true);
+ builder.setSecuWorkStrongSts(false);
+ mCurrentCleanSystemState = builder.build();
+ mockSendCmdSuccess();
+ return;
+ }
+ if (fuTianCleanCmd.getCleanIntensityRequirement() == SweeperFutianCmdUtil.CLEAN_INTENSITY_STRAND) {
+ builder.setSecuWorkStrongSts(true);
+ builder.setSecuWorkStandSts(false);
+ mCurrentCleanSystemState = builder.build();
+ mockSendCmdSuccess();
+ return;
+ } else if (fuTianCleanCmd.getCleanIntensityRequirement() == SweeperFutianCmdUtil.CLEAN_INTENSITY_STRONG) {
+ builder.setSecuWorkStandSts(true);
+ builder.setSecuWorkStrongSts(false);
+ mCurrentCleanSystemState = builder.build();
+ mockSendCmdSuccess();
+ }
+
+ }
+
+}
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/dialog/SweeperCloudDialog.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/dialog/SweeperCloudDialog.kt
new file mode 100644
index 0000000000..23deab9621
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/dialog/SweeperCloudDialog.kt
@@ -0,0 +1,133 @@
+package com.mogo.och.sweepercloud.ui.dialog
+
+import android.animation.ObjectAnimator
+import android.animation.ValueAnimator
+import android.content.Context
+import android.view.View
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.lifecycle.LifecycleObserver
+import com.mogo.eagle.core.function.hmi.dialog.BaseFloatDialog
+import com.mogo.eagle.core.utilcode.util.ClickUtils
+import com.mogo.och.sweepercloud.R
+import com.mogo.och.sweepercloud.callback.SweeperCloudDialogClickListener
+import com.mogo.och.sweepercloud.view.CountDownView
+
+/**
+ * 清扫车云控任务dialog基类
+ */
+ class SweeperCloudDialog : BaseFloatDialog, LifecycleObserver {
+ private var commonTitle: TextView? = null //标题
+ private var commonLeft: TextView? = null//底部左边按钮
+ private var commonMiddle: TextView? = null //底部中间按钮
+ private var commonRight: TextView? = null //底部右边按钮
+ private var commonCountDown: CountDownView? = null //倒计时
+ private var commonContent: TextView? = null //内容
+ private var commonTip: TextView? = null //文本提示
+ private var countDownImage: ImageView? = null //内容
+ private var objectAnimator: ObjectAnimator? = null
+
+ constructor(builder: Builder, context: Context) : super(context) {
+ commonTitle?.text = builder.titleStr
+ commonContent?.text = builder.contentStr
+ if (builder.tipStr == "") {
+ commonTip?.visibility = View.GONE
+ } else {
+ commonTip?.text = builder.tipStr
+ }
+ if (builder.leftStr == "") {
+ commonLeft?.visibility = View.GONE
+ } else {
+ commonLeft?.text = builder.leftStr
+ }
+ if (builder.middleStr == "") {
+ commonMiddle?.visibility = View.GONE
+ } else {
+ commonMiddle?.text = builder.middleStr
+ }
+ if (builder.rightStr == "") {
+ commonRight?.visibility = View.GONE
+ } else {
+ commonRight?.text = builder.rightStr
+ }
+ if (builder.countDownTime == 0) {
+ commonCountDown?.visibility = View.GONE
+ } else {
+ commonCountDown?.startCountDown(builder.countDownTime)
+ }
+ commonLeft?.setOnClickListener {
+ //防止重复点击
+ if(ClickUtils.isFastClick()){
+ builder.listener?.onConfirm()
+ objectAnimator?.cancel()
+ commonCountDown?.stopCountDown()
+ dismiss()
+ }
+ }
+ commonMiddle?.setOnClickListener {
+ //防止重复点击
+ if(ClickUtils.isFastClick()){
+ builder.listener?.onNext()
+ objectAnimator?.cancel()
+ commonCountDown?.stopCountDown()
+ dismiss()
+ }
+ }
+ commonRight?.setOnClickListener {
+ //防止重复点击
+ if(ClickUtils.isFastClick()){
+ builder.listener?.onRefuseOrEnd()
+ objectAnimator?.cancel()
+ commonCountDown?.stopCountDown()
+ dismiss()
+ }
+ }
+ commonCountDown?.setCountDownListener(object : CountDownView.CountDownListener {
+ override fun stop() {
+ builder.listener?.onCountDownStop()
+ objectAnimator?.cancel()
+ commonCountDown?.stopCountDown()
+ dismiss()
+ }
+
+ })
+ countDownImage?.let { startAnima(it) }
+ }
+
+ init {
+ setContentView(R.layout.dialog_sweeper_cloud_view)
+ setCanceledOnTouchOutside(false)
+ commonTitle = findViewById(R.id.sweeper_cloud_title)
+ commonContent = findViewById(R.id.sweeper_cloud_content)
+ commonTip = findViewById(R.id.sweeper_cloud_tip)
+ commonLeft = findViewById(R.id.sweeper_cloud_left)
+ commonMiddle = findViewById(R.id.sweeper_cloud_middle)
+ commonRight = findViewById(R.id.sweeper_cloud_right)
+ countDownImage = findViewById(R.id.sweeper_cloud_imageview)
+ commonCountDown = findViewById(R.id.sweeper_cloud_countdown)
+ }
+ class Builder {
+ var titleStr: String = ""
+ var contentStr: String = ""
+ var tipStr: String = ""
+ var leftStr: String = ""
+ var middleStr: String = ""
+ var rightStr: String = ""
+ var countDownTime: Int = 0
+ var listener: SweeperCloudDialogClickListener? = null
+ fun build(context: Context): SweeperCloudDialog {
+ return SweeperCloudDialog(this, context)
+ }
+ }
+ /**
+ * 启动动画
+ */
+ private fun startAnima(imageView: ImageView) {
+ objectAnimator = ObjectAnimator.ofFloat(imageView, "rotation", 0f, 359f)
+ objectAnimator?.repeatCount = ValueAnimator.INFINITE
+ objectAnimator?.duration = 1500
+ objectAnimator?.interpolator = LinearInterpolator()
+ objectAnimator?.start()
+ }
+}
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/dialog/SweeperCloudLoadingDialog.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/dialog/SweeperCloudLoadingDialog.kt
new file mode 100644
index 0000000000..3321382705
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/dialog/SweeperCloudLoadingDialog.kt
@@ -0,0 +1,75 @@
+package com.mogo.och.sweepercloud.ui.dialog
+
+import android.animation.ObjectAnimator
+import android.content.Context
+import android.view.animation.LinearInterpolator
+import androidx.lifecycle.LifecycleObserver
+import com.elegant.utils.UiThreadHandler
+import com.mogo.eagle.core.function.hmi.dialog.BaseFloatDialog
+import com.mogo.eagle.core.utilcode.util.ToastUtils
+import com.mogo.och.sweepercloud.R
+import kotlinx.android.synthetic.main.dialog_sweeper_cloud_loading.*
+
+/**
+ * loading
+ */
+class SweeperCloudLoadingDialog : BaseFloatDialog, LifecycleObserver {
+ private var objectAnimator: ObjectAnimator? = null
+ private val mLoadingView by lazy { dialog_loading_view }
+ private val mLoadingText by lazy { dialog_loading_text }
+ private var mRunnable:Runnable= Runnable {
+ ToastUtils.showLong("超时未响应,操作失败")
+ hideLoading()
+ }
+
+ constructor(context: Context) : super(context)
+
+ init {
+ setContentView(R.layout.dialog_sweeper_cloud_loading)
+ setCanceledOnTouchOutside(false)
+ }
+
+ /**
+ * 开始旋转
+ */
+ private fun startRotation() {
+ objectAnimator = ObjectAnimator.ofFloat(mLoadingView, "rotation", -720f, 0f)
+ objectAnimator?.let {
+ it.duration = 3000
+ it.repeatCount = -1
+ it.interpolator = LinearInterpolator()
+ it.start()
+ }
+ }
+
+ /**
+ * 停止旋转
+ */
+ private fun stopRotation() {
+ objectAnimator?.let {
+ if (it.isRunning) {
+ it.end()
+ objectAnimator = null
+ }
+ }
+ }
+
+ /**
+ * 显示dialog
+ */
+ fun showLoading() {
+ mLoadingText.text = "加载中..."
+ startRotation()
+ show()
+ UiThreadHandler.getsUiHandler().postDelayed(mRunnable, 15000L)
+ }
+
+ /**
+ * 隐藏dialog
+ */
+ fun hideLoading() {
+ UiThreadHandler.getsUiHandler().removeCallbacks(mRunnable)
+ stopRotation()
+ dismiss()
+ }
+}
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/dialog/SweeperManualDrivingDialog.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/dialog/SweeperManualDrivingDialog.kt
new file mode 100644
index 0000000000..52e21df88c
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/dialog/SweeperManualDrivingDialog.kt
@@ -0,0 +1,70 @@
+package com.mogo.och.sweepercloud.ui.dialog
+
+import android.content.Context
+import android.widget.TextView
+import androidx.lifecycle.LifecycleObserver
+import com.mogo.eagle.core.function.hmi.dialog.BaseFloatDialog
+import com.mogo.och.sweepercloud.R
+
+/**
+ * 不带带有title, tip,confirm,cancel的dialog
+ */
+class SweeperManualDrivingDialog: BaseFloatDialog, LifecycleObserver {
+
+ private var commonConfirm : TextView? = null
+ private var commonTips : TextView? = null
+
+ private var clickListener: ClickListener? = null
+
+ constructor(builder: Builder,context: Context) : super(context) {
+ commonTips?.text = builder.tipsStr
+ commonConfirm?.text = builder.confirmStr
+ }
+
+ init{
+ setContentView(R.layout.dialog_sweeper_manual_driving)
+
+ setCanceledOnTouchOutside(false)
+
+ commonConfirm = findViewById(R.id.sweeper_common_confirm)
+ commonTips = findViewById(R.id.sweeper_common_tips)
+
+ commonConfirm?.setOnClickListener{
+ clickListener?.confirm()
+ dismiss()
+ }
+ }
+
+ fun setClickListener(clickListener: ClickListener) {
+ this.clickListener = clickListener
+ }
+
+ fun showUpgradeDialog(){
+ if(isShowing){
+ return
+ }
+ show()
+ }
+
+ interface ClickListener{
+ fun confirm()
+ }
+
+ class Builder{
+ var tipsStr:String = ""
+ var confirmStr:String = ""
+ fun tips(tips: String) : Builder{
+ this.tipsStr = tips
+ return this
+ }
+
+ fun confirmStr(commit: String) : Builder{
+ this.confirmStr = commit
+ return this
+ }
+ fun build(context: Context): SweeperManualDrivingDialog? {
+ return SweeperManualDrivingDialog(this,context)
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/dialog/SweeperNoTitleCommonDialog.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/dialog/SweeperNoTitleCommonDialog.kt
new file mode 100644
index 0000000000..a2b41f4592
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/dialog/SweeperNoTitleCommonDialog.kt
@@ -0,0 +1,85 @@
+package com.mogo.och.sweepercloud.ui.dialog
+
+import android.content.Context
+import android.widget.TextView
+import androidx.lifecycle.LifecycleObserver
+import com.mogo.eagle.core.function.hmi.dialog.BaseFloatDialog
+import com.mogo.och.sweepercloud.R
+
+/**
+ * 不带带有title, tip,confirm,cancel的dialog
+ */
+class SweeperNoTitleCommonDialog: BaseFloatDialog, LifecycleObserver {
+
+ private var commonConfirm : TextView? = null
+ private var commonCancel : TextView? = null
+ private var commonTips : TextView? = null
+
+ private var clickListener: ClickListener? = null
+
+ constructor(builder: Builder,context: Context) : super(context) {
+ commonTips?.text = builder.tipsStr
+ commonCancel?.text = builder.cancelStr
+ commonConfirm?.text = builder.confirmStr
+ }
+
+ init{
+ setContentView(R.layout.dialog_sweeper_no_title)
+
+ setCanceledOnTouchOutside(true)
+
+ commonConfirm = findViewById(R.id.sweeper_common_confirm)
+ commonCancel = findViewById(R.id.sweeper_common_cancel)
+ commonTips = findViewById(R.id.sweeper_common_tips)
+
+ commonConfirm?.setOnClickListener{
+ clickListener?.confirm()
+ dismiss()
+ }
+ commonCancel?.setOnClickListener {
+ clickListener?.cancel()
+ dismiss()
+ }
+ }
+
+ fun setClickListener(clickListener: ClickListener) {
+ this.clickListener = clickListener
+ }
+
+ fun showUpgradeDialog(){
+ if(isShowing){
+ return
+ }
+ show()
+ }
+
+ interface ClickListener{
+ fun confirm()
+ fun cancel()
+ }
+
+ class Builder{
+ var tipsStr:String = ""
+ var confirmStr:String = ""
+ var cancelStr:String = ""
+ fun tips(tips: String) : Builder{
+ this.tipsStr = tips
+ return this
+ }
+
+ fun confirmStr(commit: String) : Builder{
+ this.confirmStr = commit
+ return this
+ }
+
+ fun cancelStr(cancel: String) : Builder{
+ this.cancelStr = cancel
+ return this
+ }
+
+ fun build(context: Context): SweeperNoTitleCommonDialog? {
+ return SweeperNoTitleCommonDialog(this,context)
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/popwindow/SweeperOperatePanelPopWindow.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/popwindow/SweeperOperatePanelPopWindow.kt
new file mode 100644
index 0000000000..4db379e1ac
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/popwindow/SweeperOperatePanelPopWindow.kt
@@ -0,0 +1,59 @@
+package com.mogo.och.sweepercloud.ui.popwindow
+
+import android.content.Context
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import android.widget.PopupWindow
+import chassis.ChassisStatesOuterClass
+import com.mogo.och.sweepercloud.R
+import com.mogo.och.sweepercloud.callback.ICleaningModeStateCallback
+import com.mogo.och.sweepercloud.constant.OperateStateEnum
+import com.mogo.och.sweepercloud.ui.SweeperOperatePanelView
+
+/**
+ * 清扫车面板浮窗
+ */
+class SweeperOperatePanelPopWindow : PopupWindow{
+
+ private var mOperatePanelView: SweeperOperatePanelView? = null
+
+ constructor(context: Context) : super(context) {
+ init(context)
+ }
+ private fun init(context: Context) {
+ setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ mOperatePanelView = LayoutInflater.from(context).inflate(R.layout.sweeper_popwindow_operate_panel, null) as SweeperOperatePanelView?
+ width = ViewGroup.LayoutParams.WRAP_CONTENT
+ height = ViewGroup.LayoutParams.WRAP_CONTENT
+ contentView = mOperatePanelView
+ }
+
+ /**
+ * 设置清扫模式数据
+ */
+ fun setCleanSystemState(
+ cleanSystemState: ChassisStatesOuterClass.SweeperFuTianTaskSystemStates?,
+ cleaningModeStateCallback: ICleaningModeStateCallback
+ ) {
+ mOperatePanelView?.setSweeperFutianCleanSystemState(cleanSystemState, cleaningModeStateCallback)
+ }
+
+ /**.
+ *
+ * 设置是否让popWindow消失
+ */
+ fun setIsOutsideTouchable(isOutsideTouchable:Boolean){
+ this.isFocusable = isOutsideTouchable
+ this.isOutsideTouchable = isOutsideTouchable
+ this.isTouchable=isOutsideTouchable
+ }
+
+ /**
+ * 设置是否展示状态同步中
+ */
+ fun showSyncing(operateState: OperateStateEnum){
+ mOperatePanelView?.showSyncing(operateState)
+ }
+}
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/AutopilotModeConfigManager.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/AutopilotModeConfigManager.java
new file mode 100644
index 0000000000..f828af22a5
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/AutopilotModeConfigManager.java
@@ -0,0 +1,127 @@
+package com.mogo.och.sweepercloud.util;
+
+import android.os.Environment;
+import android.text.TextUtils;
+import android.util.Pair;
+
+import com.google.protobuf.InvalidProtocolBufferException;
+import com.google.protobuf.util.JsonFormat;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import mogo.telematics.pad.MessagePad;
+
+/**
+ * 读取启动自动驾驶配置
+ */
+public class AutopilotModeConfigManager {
+ private final static String TAG = AutopilotModeConfigManager.class.getSimpleName();
+ private final AtomicBoolean isReadConfig = new AtomicBoolean(false);
+ private OnReadAutopilotModeConfigListener listener;
+
+
+ public interface OnReadAutopilotModeConfigListener {
+ void onReadFailed(String err);//文件不存在或读取失败
+
+ void onParseFailed(String err);//配置文件解析失败
+
+ void onParse(MessagePad.SetAutopilotModeReq bean);//解析完成
+ }
+
+ public AutopilotModeConfigManager(OnReadAutopilotModeConfigListener listener) {
+ this.listener = listener;
+ }
+
+
+ public void registerListener(OnReadAutopilotModeConfigListener listener) {
+ this.listener = listener;
+ }
+
+ public void unregisterListener() {
+ listener = null;
+ }
+
+ /**
+ * 读取配置文件
+ *
+ * @return 是否调用成功
+ */
+ public boolean read() {
+ if (!isReadConfig.get()) {
+ isReadConfig.set(true);
+ Runnable runnable = new Runnable() {
+ @Override
+ public void run() {
+ Pair config = readFilesToString(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "AutopilotModeConfig.json"));
+ if (TextUtils.isEmpty(config.first)) {
+ if (listener != null) {
+ listener.onReadFailed(config.second);
+ }
+ } else {
+ MessagePad.SetAutopilotModeReq.Builder builder = MessagePad.SetAutopilotModeReq.newBuilder();
+ String err = null;
+ try {
+ JsonFormat.parser().ignoringUnknownFields().merge(config.first, builder);
+ } catch (InvalidProtocolBufferException e) {
+ e.printStackTrace();
+ err = e.getMessage();
+ }
+ if (TextUtils.isEmpty(err)) {
+ MessagePad.SetAutopilotModeReq bean = builder.build();
+ if (listener != null) {
+ listener.onParse(bean);
+ }
+ } else {
+ if (listener != null) {
+ listener.onParseFailed(err);
+ }
+ }
+ }
+ isReadConfig.set(false);
+ }
+ };
+ new Thread(runnable).start();
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @param file
+ * @return first:读取到的内容 second:失败信息
+ */
+ private Pair readFilesToString(File file) {
+ InputStream inputStream = null;
+ String err = null;
+ try {
+ inputStream = new FileInputStream(file);
+ byte[] buffer = new byte[1024];
+ int length = -1;
+ StringBuilder stringBuilder = new StringBuilder();
+ while ((length = inputStream.read(buffer)) != -1) {
+ stringBuilder.append(new String(buffer, 0, length));
+ }
+ return new Pair(stringBuilder.toString(), err);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ err = e.toString();
+ } catch (IOException e) {
+ e.printStackTrace();
+ err = e.toString();
+ } finally {
+ if (inputStream != null) {
+ try {
+ inputStream.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ return new Pair(null, err);
+ }
+}
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperAnalyticsManager.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperAnalyticsManager.java
new file mode 100644
index 0000000000..91b5820710
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperAnalyticsManager.java
@@ -0,0 +1,149 @@
+package com.mogo.och.sweepercloud.util;
+
+import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_SWEEPER;
+
+import android.os.Build;
+import android.text.TextUtils;
+
+import com.mogo.cloud.passport.MoGoAiCloudClientConfig;
+import com.mogo.commons.debug.DebugConfig;
+import com.mogo.commons.utils.MogoAnalyticUtils;
+import com.mogo.eagle.core.data.app.AppConfigInfo;
+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;
+import com.mogo.eagle.core.utilcode.util.DateTimeUtils;
+import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
+import com.mogo.och.sweepercloud.constant.SweeperConst;
+
+import java.util.HashMap;
+
+/**
+ * OCH sweeper埋点工具
+ *
+ * Created on 2022/3/24
+ */
+public class SweeperAnalyticsManager {
+
+ private static final class SingletonHolder {
+ private static final SweeperAnalyticsManager INSTANCE = new SweeperAnalyticsManager();
+ }
+
+ public static SweeperAnalyticsManager getInstance() {
+ return SweeperAnalyticsManager.SingletonHolder.INSTANCE;
+ }
+
+ private String mStartAutopilotKey;
+ private HashMap mStartAutopilotParams = new HashMap<>();
+
+ private Runnable startAutopilotRunnable = () -> {
+ // 15s内未开启,上报失败埋点
+ triggerStartAutopilotFailureEvent("", "15s后app等待超时");
+ };
+
+ public void triggerStartAutopilotFailureEventByAdas(String failCode, String failMsg){
+ removeWaitingCallback();
+ triggerStartAutopilotFailureEvent(failCode, failMsg);
+ }
+
+ private void triggerStartAutopilotFailureEvent(String failCode, String failMsg){
+ if (mStartAutopilotParams.isEmpty()) return;
+
+ CallerLogger.INSTANCE.e( M_SWEEPER + "triggerStartAutopilotFailureEvent", failMsg );
+
+ if (CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() !=
+ IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING){
+ mStartAutopilotParams.put(SweeperConst.EVENT_PARAM_START_FAILURE_CODE, failCode);
+ mStartAutopilotParams.put(SweeperConst.EVENT_PARAM_START_FAILURE_MSG, failMsg);
+ }
+ mStartAutopilotParams.put(SweeperConst.EVENT_PARAM_START_RESULT
+ , CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() ==
+ IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING);
+
+ MogoAnalyticUtils.INSTANCE.track(mStartAutopilotKey, mStartAutopilotParams);
+
+ clearStartAutopilotParams();//清空参数数据,防止误传
+ }
+
+ private void removeWaitingCallback() {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ if (startAutopilotRunnable != null) {
+ UiThreadHandler.removeCallbacks(startAutopilotRunnable);
+ }
+ }
+ }
+
+ public void clearStartAutopilotFailureMSG(){
+ mStartAutopilotParams.put(SweeperConst.EVENT_PARAM_START_FAILURE_CODE, "");
+ mStartAutopilotParams.put(SweeperConst.EVENT_PARAM_START_FAILURE_MSG, "");
+ }
+
+ private void clearStartAutopilotParams(){
+ mStartAutopilotParams.clear();
+ }
+
+ /**
+ * 触发'开启自动驾驶'埋点流程
+ * 开启自动驾驶,15s内成功则发送成功埋点,否则发送失败埋点
+ * @param restart false(点击'滑动出发'启动)/true(接管后点击'自动驾驶'按钮启动)
+ * @param send 是否直接发送埋点(15s内开启成功则直接发送成功埋点)
+ */
+ public void triggerStartAutopilotEvent(
+ boolean restart, boolean send, String startName, String endName, int lineId) {
+ mStartAutopilotKey = restart ?
+ SweeperConst.EVENT_KEY_RESTART_AUTOPILOT : SweeperConst.EVENT_KEY_START_SERVICE;
+ String sn = MoGoAiCloudClientConfig.getInstance().getSn();
+ String plateNum = AppConfigInfo.INSTANCE.getPlateNumber();
+ String dateTime = DateTimeUtils.getTimeText(
+ System.currentTimeMillis(), DateTimeUtils.yyyy_MM_dd_HH_mm_ss);
+
+ mStartAutopilotParams.put(SweeperConst.EVENT_PARAM_SN, sn);
+ mStartAutopilotParams.put(SweeperConst.EVENT_PARAM_PLATE_NUM, TextUtils.isEmpty(plateNum) ? "" : plateNum);
+ mStartAutopilotParams.put(SweeperConst.EVENT_PARAM_ENV_ONLINE,
+ DebugConfig.getNetMode() == DebugConfig.NET_MODE_RELEASE ? true : false);
+ mStartAutopilotParams.put(SweeperConst.EVENT_PARAM_TIME, dateTime);
+ mStartAutopilotParams.put(SweeperConst.EVENT_PARAM_START_NAME, startName);
+ mStartAutopilotParams.put(SweeperConst.EVENT_PARAM_END_NAME, endName);
+ mStartAutopilotParams.put(SweeperConst.EVENT_PARAM_LINE_ID, lineId);
+
+ if (send) {
+ if (mStartAutopilotParams.isEmpty()) return;
+ // 开启成功,上报埋点
+ clearStartAutopilotFailureMSG();
+ removeWaitingCallback();
+ mStartAutopilotParams.put(SweeperConst.EVENT_PARAM_START_RESULT, true);
+ MogoAnalyticUtils.INSTANCE.track(mStartAutopilotKey, mStartAutopilotParams);
+
+ clearStartAutopilotParams();//清空参数数据,防止误传
+ } else {
+ UiThreadHandler.postDelayed(startAutopilotRunnable, SweeperConst.LOOP_PERIOD_15S);
+ }
+ }
+
+ /**
+ * 触发"无法开启自驾已知异常"埋点
+ * @param startName
+ * @param endName
+ * @param lineId
+ */
+ public void triggerUnableStartAPReasonEvent(String startName, String endName, int lineId,
+ String reason) {
+ String sn = MoGoAiCloudClientConfig.getInstance().getSn();
+ String plateNum = AppConfigInfo.INSTANCE.getPlateNumber();
+ String dateTime = DateTimeUtils.getTimeText(
+ System.currentTimeMillis(), DateTimeUtils.yyyy_MM_dd_HH_mm_ss);
+
+ HashMap params = new HashMap<>();
+
+ params.put(SweeperConst.EVENT_PARAM_SN, sn);
+ params.put(SweeperConst.EVENT_PARAM_PLATE_NUM, TextUtils.isEmpty(plateNum) ? "" : plateNum);
+ params.put(SweeperConst.EVENT_PARAM_ENV_ONLINE,
+ DebugConfig.getNetMode() == DebugConfig.NET_MODE_RELEASE ? true : false);
+ params.put(SweeperConst.EVENT_PARAM_TIME, dateTime);
+ params.put(SweeperConst.EVENT_PARAM_START_NAME, startName);
+ params.put(SweeperConst.EVENT_PARAM_END_NAME, endName);
+ params.put(SweeperConst.EVENT_PARAM_LINE_ID, lineId);
+ params.put(SweeperConst.EVENT_PARAM_UNABLE_START_REASON, reason);
+ MogoAnalyticUtils.INSTANCE.track(SweeperConst.EVENT_KEY_AP_UNABLE_START_REASON, params);
+ }
+}
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperCloudTaskUtils.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperCloudTaskUtils.kt
new file mode 100644
index 0000000000..25fb456c39
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperCloudTaskUtils.kt
@@ -0,0 +1,348 @@
+package com.mogo.och.sweepercloud.util
+
+import android.content.Context
+import com.elegant.utils.UiThreadHandler
+import com.google.protobuf.MessageOrBuilder
+import com.google.protobuf.TextFormat
+import com.mogo.cloud.passport.MoGoAiCloudClientConfig
+import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
+import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
+import com.mogo.och.common.module.utils.DateTimeUtil
+import com.mogo.och.common.module.voice.VoiceNotice
+import com.mogo.och.sweepercloud.callback.SweeperCloudDialogClickListener
+import com.mogo.och.sweepercloud.model.SweeperTaskModel
+import com.mogo.och.sweepercloud.ui.dialog.SweeperCloudDialog
+import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask.MessageType
+import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable
+import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon
+import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.*
+import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus
+import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus.BigTaskStatus
+import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm.TaskConfirm
+import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus
+import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop
+import java.util.*
+
+object SweeperCloudTaskUtils {
+ const val TAG = "SweeperCloudTaskUtils"
+
+ /**
+ * 模拟发送查询当前任务的请求
+ */
+ @JvmStatic
+ fun mockQueryCurrentTaskInfo() {
+// UiThreadHandler.getsUiHandler().postDelayed({
+// mockSendCloudTaskInfo(MessageType.PadSendGetTaskReq)
+// },1000)
+ SweeperTaskModel.getInstance().getCurrentTask()
+ }
+
+ /**
+ * 模拟云控发送任务给pad
+ */
+ @JvmStatic
+ fun mockSendCloudTaskInfo(messageType: MessageType) {
+ val builder = TaskInfo.newBuilder()
+ builder.sn = getDriverSn()
+ builder.taskId = "10"
+ builder.taskName = "烟台清扫车作业任务"
+ builder.currentTime = System.currentTimeMillis()
+ builder.taskStartTime = 1683507615000
+ builder.taskEndTime = 1683540015000
+ //第一个子任务
+ val subBuilder0 = SubTaskInfo.newBuilder()
+ subBuilder0.subTaskId = "1"
+ subBuilder0.subTaskName = "海水浴场-佛兴禅寺(前岛贴右)"
+ subBuilder0.taskModel = TaskModel.AUTO
+ subBuilder0.taskStatus = SweeperCommon.TaskStatus.TO_START
+ val startLocation0 = Location.newBuilder()
+ startLocation0.siteName = "自动驾驶子任务起点0"
+ startLocation0.wgsLongitude =112.56970262448544
+ startLocation0.wgsLatitude = 26.817567832504274
+ startLocation0.longitude = 112.57493487730413
+ startLocation0.latitude = 26.81397095451884
+ subBuilder0.startLocation = startLocation0.build()
+ val endLocation0 = Location.newBuilder()
+ endLocation0.siteName = "自动驾驶子任务终点0"
+ endLocation0.wgsLongitude = 112.57723562874442
+ endLocation0.wgsLatitude = 26.819769725304003
+ endLocation0.longitude = 112.5824598556873
+ endLocation0.latitude = 26.81616501438377
+ subBuilder0.endLocation = endLocation0.build()
+ subBuilder0.lineId = 123
+ subBuilder0.lineName = "测试路线0"
+ builder.addSubList(subBuilder0.build())
+ //第二个子任务
+// val subBuilder1 = SubTaskInfo.newBuilder()
+// subBuilder1.subTaskId = "2"
+// subBuilder1.subTaskName = "佛兴禅寺-海水浴场(前岛贴左)"
+// subBuilder1.taskModel = TaskModel.AUTO
+// subBuilder1.taskStatus = SweeperCommon.TaskStatus.TO_START
+// val startLocation1 = Location.newBuilder()
+// startLocation1.siteName = "自动驾驶子任务起点1"
+// startLocation1.wgsLongitude = 112.57723562874442
+// startLocation1.wgsLatitude = 26.819769725304003
+// startLocation1.longitude = 112.5824598556873
+// startLocation1.latitude = 26.81616501438377
+// subBuilder1.startLocation = startLocation1.build()
+// val endLocation1 = Location.newBuilder()
+// endLocation1.siteName = "自动驾驶子任务终点1"
+// endLocation1.wgsLongitude = 112.56970262448544
+// endLocation1.wgsLatitude = 26.817567832504274
+// endLocation1.longitude = 112.57493487730413
+// endLocation1.latitude = 26.81397095451884
+// subBuilder1.endLocation = endLocation1.build()
+// subBuilder1.lineId = 124
+// subBuilder1.lineName = "测试路线1"
+// builder.addSubList(subBuilder1.build())
+// //第三个子任务
+// val subBuilder2 = SubTaskInfo.newBuilder()
+// subBuilder2.subTaskId = "3"
+// subBuilder2.subTaskName = "海水浴场-佛兴禅寺(前岛贴左)"
+// subBuilder2.taskModel = TaskModel.MANUAL
+// subBuilder2.taskStatus = SweeperCommon.TaskStatus.TO_START
+// val startLocation2 = Location.newBuilder()
+// startLocation2.siteName = "人工驾驶子任务起点2"
+// startLocation2.wgsLongitude = 121.31344761929978
+// startLocation2.wgsLatitude = 37.53205755535642
+// startLocation2.longitude = 121.3185679517558
+// startLocation2.latitude = 37.5329694887952
+// subBuilder2.startLocation = startLocation2.build()
+// val endLocation2 = Location.newBuilder()
+// endLocation2.siteName = "人工驾驶子任务终点2"
+// endLocation2.wgsLongitude = 121.4551205070834
+// endLocation2.wgsLatitude = 37.47936696980237
+// endLocation2.longitude = 121.46030960742117
+// endLocation2.latitude = 37.48032689641474
+// subBuilder2.endLocation = endLocation2.build()
+// subBuilder2.lineId = 125
+// subBuilder2.lineName = "测试路线2"
+// builder.addSubList(subBuilder2.build())
+// //第四个子任务
+// val subBuilder3 = SubTaskInfo.newBuilder()
+// subBuilder3.subTaskId = "4"
+// subBuilder3.subTaskName = "海水浴场-佛兴禅寺(前岛贴左第四个任务)"
+// subBuilder3.taskModel = TaskModel.MANUAL
+// subBuilder3.taskStatus = SweeperCommon.TaskStatus.TO_START
+// val startLocation3 = Location.newBuilder()
+// startLocation3.siteName = "人工驾驶子任务起点3"
+// startLocation3.wgsLongitude = 121.31344761929978
+// startLocation3.wgsLatitude = 37.53205755535642
+// startLocation3.longitude = 121.3185679517558
+// startLocation3.latitude = 37.5329694887952
+// subBuilder3.startLocation = startLocation3.build()
+// val endLocation3 = Location.newBuilder()
+// endLocation3.siteName = "人工驾驶子任务终点3"
+// endLocation3.wgsLongitude = 121.4551205070834
+// endLocation3.wgsLatitude = 37.47936696980237
+// endLocation3.longitude = 121.46030960742117
+// endLocation3.latitude = 37.48032689641474
+// subBuilder3.endLocation = endLocation3.build()
+// subBuilder3.lineId = 126
+// subBuilder3.lineName = "测试路线3"
+// builder.addSubList(subBuilder3.build())
+ SweeperTaskModel.getInstance().onSweeperFutianCloudTask(
+ messageType,
+ "${System.currentTimeMillis()}",
+ System.currentTimeMillis(),
+ builder.build()
+ )
+ CallerLogger.d(SceneConstant.M_SWEEPER + TAG, "messageType:" + messageType.number + "taskInfo:" + printMessage(builder.build()))
+ }
+
+ /**
+ * 模拟云控发送子任务开始确认信息
+ */
+ @JvmStatic
+ fun mockSendCloudSubTaskConfirm() {
+ val builder = TaskConfirm.newBuilder()
+ builder.sn = getDriverSn()
+ builder.taskId = "10"
+ builder.subTaskId = "1"
+ SweeperTaskModel.getInstance().onSweeperFutianCloudTaskConfirm(
+ MessageType.CloudPushTaskConfirm, "${System.currentTimeMillis()}",
+ System.currentTimeMillis(), builder.build()
+ )
+ }
+
+ /**
+ * 模拟下发更新子任务状态指令
+ */
+ @JvmStatic
+ fun mockSendCloudUpdateSubTaskStatus() {
+ val builder = SweeperTaskStatus.TaskStatusPush.newBuilder()
+ builder.sn = getDriverSn()
+ builder.taskId = "10"
+ builder.subTaskId = "1"
+ builder.taskStatus = SweeperCommon.TaskStatus.RUNNING
+ SweeperTaskModel.getInstance().onSweeperFutianCloudTaskStatus(
+ MessageType.CloudPushTaskStatus, "${System.currentTimeMillis()}",
+ System.currentTimeMillis(), builder.build()
+ )
+ }
+
+ /**
+ * 模拟云端发送大任务结束
+ */
+ @JvmStatic
+ fun mockSendCloudBigTaskEnd() {
+ val builder = SweeperTaskStop.StopTaskReq.newBuilder()
+ builder.sn = getDriverSn()
+ builder.taskId = "10"
+ builder.type = SweeperTaskStop.StopTaskType.ADVANCE
+ SweeperTaskModel.getInstance().onSweeperFutianCloudTaskStop(
+ MessageType.CloudPushTaskStop, "${System.currentTimeMillis()}",
+ System.currentTimeMillis(), builder.build()
+ )
+ }
+
+ /**
+ * 模拟云端发送大任务状态给pad
+ */
+ @JvmStatic
+ fun mockSendCloudBigTaskStatus() {
+ val builder = SweeperBigTaskStatus.BigTaskStatusPush.newBuilder()
+ builder.sn = getDriverSn()
+ builder.taskId = "10"
+ builder.taskStatus = BigTaskStatus.FINISHED
+ builder.systemTime = System.currentTimeMillis()
+ SweeperTaskModel.getInstance().onSweeperFutianCloudBigTaskStatus(
+ MessageType.CloudPushBigTaskStatus, "${System.currentTimeMillis()}",
+ System.currentTimeMillis(), builder.build()
+ )
+ }
+
+ /**
+ * 模拟云端发送是否可以启动自驾
+ */
+ @JvmStatic
+ fun mockSendCloudBootable() {
+ val builder = SweeperBootable.IsBootableResp.newBuilder()
+ builder.sn = getDriverSn()
+ builder.taskId = "10"
+ builder.subTaskId = "1"
+ builder.code = SweeperCommon.Code.SUCCEED
+ UiThreadHandler.getsUiHandler().postDelayed({
+ SweeperTaskModel.getInstance().onSweeperFutianCloudBootable(
+ MessageType.PadSendBootable, "${System.currentTimeMillis()}",
+ System.currentTimeMillis(), builder.build()
+ )
+ }, 10000)
+ }
+
+ private fun getDriverSn(): String? {
+ return MoGoAiCloudClientConfig.getInstance().sn
+ }
+
+ /**
+ * 创建接收任务弹窗
+ */
+ @JvmStatic
+ fun createReceivedTaskInfoDialog(context: Context?, listener: SweeperCloudDialogClickListener?, taskInfo: TaskInfo): SweeperCloudDialog? {
+ var builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
+ val startCalendar = DateTimeUtil.formatLongToCalendar(taskInfo.taskStartTime)
+ val endCalendar = DateTimeUtil.formatLongToCalendar(taskInfo.taskEndTime)
+ builder.titleStr = "任务接取"
+ builder.contentStr = "请确认是否接取${taskInfo.taskName}"
+ builder.tipStr = "(任务时间${DateTimeUtil.formatCalendarToString(startCalendar, DateTimeUtil.HH_mm)}-${
+ DateTimeUtil.formatCalendarToString(
+ endCalendar,
+ DateTimeUtil.HH_mm
+ )
+ })"
+ builder.leftStr = "确认"
+ builder.middleStr = ""
+ builder.rightStr = "拒绝"
+ builder.countDownTime = 15
+ builder.listener = listener
+ return context?.let { it1 -> builder.build(it1) }
+ }
+
+ /**
+ * 创建确认开始子任务弹窗
+ */
+ @JvmStatic
+ fun createConfirmStartSubTaskDialog(
+ context: Context?,
+ listener: SweeperCloudDialogClickListener?,
+ subTaskInfo: SubTaskInfo
+ ): SweeperCloudDialog? {
+ var builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
+ builder.titleStr = "任务确认"
+ builder.contentStr = "请确认是否执行${subTaskInfo.subTaskName}"
+ builder.tipStr =
+ if (subTaskInfo.taskModel == TaskModel.MANUAL) "[需手动驾驶至终点${subTaskInfo.endLocation.siteName}]" else "[自动驾驶至终点${subTaskInfo.endLocation.siteName}]"
+ builder.leftStr = "确认"
+ builder.middleStr = "下一个"
+ builder.rightStr = "结束"
+ builder.countDownTime = 15
+ builder.listener = listener
+ return context?.let { it1 -> builder.build(it1) }
+ }
+
+ /**
+ * 创建结束任务弹窗
+ */
+ @JvmStatic
+ fun createSweeperTaskEndDialog(
+ context: Context?,
+ listener: SweeperCloudDialogClickListener?,
+ stopTaskType: SweeperTaskStop.StopTaskType,
+ timeoutStr: String
+ ): SweeperCloudDialog? {
+ var builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
+ builder.titleStr = "任务结束"
+ when (stopTaskType) {
+ //任务提前结束
+ SweeperTaskStop.StopTaskType.ADVANCE -> {
+ builder.contentStr = "云端请求终止任务,请确认"
+ builder.tipStr = "【确认后请接管停车】"
+ builder.leftStr = "确认"
+ builder.middleStr = ""
+ builder.rightStr = "拒绝"
+ VoiceNotice.showNotice("云端请求终止任务,请确认")
+ }
+ //任务超时结束
+ SweeperTaskStop.StopTaskType.TIMEOUT -> {
+ builder.contentStr = "任务已超时${timeoutStr},请确认是否结束"
+ builder.tipStr = "【结束后请接管停车】"
+ builder.leftStr = "确认"
+ builder.middleStr = ""
+ builder.rightStr = "拒绝"
+ VoiceNotice.showNotice("任务已超时${timeoutStr},请确认是否结束")
+ }
+ }
+ builder.countDownTime = 15
+ builder.listener = listener
+ return context?.let { it1 -> builder.build(it1) }
+ }
+
+ /**
+ * 任务正常结束弹窗
+ */
+ @JvmStatic
+ fun createSweeperTaskNormalEndDialog(
+ context: Context?,
+ listener: SweeperCloudDialogClickListener?
+ ): SweeperCloudDialog? {
+ var builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
+ builder.titleStr = "任务结束"
+ builder.contentStr = "任务已完成,干的漂亮!"
+ builder.tipStr = ""
+ builder.leftStr = "确认"
+ builder.middleStr = ""
+ builder.rightStr = ""
+ builder.countDownTime = 10
+ builder.listener = listener
+ return context?.let { it1 -> builder.build(it1) }
+ }
+
+ @JvmStatic
+ fun printMessage(message: MessageOrBuilder): String {
+ return "\n"+TextFormat.printer().escapingNonAscii(false).printToString(message)
+ }
+ @JvmStatic
+ fun getRequestId():String{
+ return UUID.randomUUID().toString()
+ }
+}
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperFutianCmdUtil.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperFutianCmdUtil.java
new file mode 100644
index 0000000000..35e2a0963b
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperFutianCmdUtil.java
@@ -0,0 +1,202 @@
+package com.mogo.och.sweepercloud.util;
+
+import chassis.ChassisStatesOuterClass;
+import chassis.SpecialVehicleTaskCmdOuterClass;
+
+/**
+ * 清扫车-福田,构建业务命令数据的工具类
+ */
+public class SweeperFutianCmdUtil {
+ public static final int CLEAN_WORK_OPEN = 1; //清扫作业-开启
+ public static final int CLEAN_WORK_CLOSE = 2;//清扫作业-关闭
+ public static final int CLEAN_MODE_PURE_SWEEP = 1;//作业模式-纯扫
+ public static final int CLEAN_MODE_WASH_SWEEP = 2;//作业模式-洗扫
+ public static final int CLEAN_MODE_PURE_WASH = 3;//作业模式-纯洗
+ public static final int CLEAN_MODE_PURE_DRAW = 4;//作业模式-纯吸
+ public static final int CLEAN_MODE_CLOSE = 5;//作业模式-关闭
+ public static final int CLEAN_DIRECTION_BOTH_SIDE = 1;//清扫方向-两侧
+ public static final int CLEAN_DIRECTION_LEFT_SIDE = 2;//清扫方向-左侧
+ public static final int CLEAN_DIRECTION_RIGHT_SIDE = 3;//清扫方向-右侧
+ public static final int CLEAN_DIRECTION_CLOSE = 4;//清扫方向-关闭
+ public static final int CLEAN_INTENSITY_STRAND = 1;//作业强度-标准
+ public static final int CLEAN_INTENSITY_STRONG = 2;//作业强度-加强
+
+ /**
+ * 清扫作业:打开
+ *
+ * @return
+ */
+ public static SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd buildCleanWorkStartCmd() {
+ return buildCleanWorkCmd(CLEAN_WORK_OPEN);
+ }
+
+ /**
+ * 清扫作业:关闭
+ *
+ * @return
+ */
+ public static SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd buildCleanWorkStopCmd() {
+ return buildCleanWorkCmd(CLEAN_WORK_CLOSE);
+ }
+
+
+ private static SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd buildCleanWorkCmd(int startOrStop) {
+ SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.Builder builder = SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.newBuilder();
+ builder.setCleanOpenRequirement(startOrStop);
+ return buildTaskCmd(builder.build());
+ }
+
+ /**
+ * 作业模式:传入具体的模式对应的值
+ *
+ * @param value
+ * @return
+ */
+ public static SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd buildCleanModeCmd(int value) {
+ SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.Builder builder = SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.newBuilder();
+ builder.setCleanModeRequirement(value);
+ return buildTaskCmd(builder.build());
+ }
+
+ /**
+ * 作业模式:纯吸
+ *
+ * @return
+ */
+ public static SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd buildCleanModePureDrawCmd() {
+ SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.Builder builder = SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.newBuilder();
+ builder.setCleanModeRequirement(CLEAN_MODE_PURE_DRAW);
+ //不用设置作业方向,自动设置作业强度为:标准
+ builder.setCleanIntensityRequirement(CLEAN_INTENSITY_STRAND);
+ return buildTaskCmd(builder.build());
+ }
+
+ /**
+ * 作业模式:关闭作业模式
+ *
+ * @return
+ */
+ public static SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd buildCleanModeCloseCmd() {
+ SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.Builder builder = SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.newBuilder();
+ builder.setCleanModeRequirement(CLEAN_MODE_CLOSE);
+ //关闭清扫方向,待下次在选择
+ builder.setCleanDirectionRequirement(CLEAN_DIRECTION_CLOSE);
+ //自动设置作业强度为:标准
+ builder.setCleanIntensityRequirement(CLEAN_INTENSITY_STRAND);
+ return buildTaskCmd(builder.build());
+ }
+
+ /**
+ * 作业方向:根据具体的方向传入具体的值
+ *
+ * @param value
+ * @return
+ */
+ public static SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd buildCleanDirectionCmd(int value) {
+ SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.Builder builder = SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.newBuilder();
+ builder.setCleanDirectionRequirement(value);
+ builder.setCleanIntensityRequirement(CLEAN_INTENSITY_STRAND);
+ // 同时作业强度默认:标准
+ return buildTaskCmd(builder.build());
+ }
+
+ /**
+ * 作业方向:关闭作业方向
+ *
+ * @return
+ */
+ public static SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd buildCleanDirectionCloseCmd() {
+ SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.Builder builder = SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.newBuilder();
+ builder.setCleanDirectionRequirement(CLEAN_DIRECTION_CLOSE);
+ //重置作业强度为标准
+ builder.setCleanIntensityRequirement(CLEAN_INTENSITY_STRAND);
+ return buildTaskCmd(builder.build());
+ }
+
+ /**
+ * 作业强度:传入具体的值
+ *
+ * @param value
+ * @return
+ */
+ public static SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd buildCleanIntensityCmd(int value) {
+ SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.Builder builder = SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.newBuilder();
+ builder.setCleanIntensityRequirement(value);
+ return buildTaskCmd(builder.build());
+ }
+
+ private static SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd buildTaskCmd(
+ SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd fuTianCleanCmd) {
+ return SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd.newBuilder()
+ .setRoboSweeperFutianCleanCmd(fuTianCleanCmd).build();
+ }
+
+ /**
+ * 判断是否有作业模式
+ * @param cleanSystemState
+ * @return true:没有作业模式 false:有作业模式
+ */
+ public static boolean checkIfCleanMode(ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState){
+ return (!cleanSystemState.getSecuModWashSweepSts()&&!cleanSystemState.getSecuModWashSts()&&!cleanSystemState.getSecuWorkTonSts())&&
+ (!cleanSystemState.getSecuWorkLeftSts()&&!cleanSystemState.getSecuWorkRightSts()&&!cleanSystemState.getSecuWorkOnBothsidesSts());
+ }
+
+ /**
+ * 判断是否有清扫方向
+ * @param cleanSystemState
+ * @return true:没有清扫方向 false:有清扫方向
+ */
+ public static boolean checkIfCleanDirection(ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState){
+ return !cleanSystemState.getSecuWorkLeftSts()&&!cleanSystemState.getSecuWorkRightSts()&&!cleanSystemState.getSecuWorkOnBothsidesSts();
+ }
+ /**
+ * 判断是否有作业强度
+ * @param cleanSystemState
+ * @return true:没有作业强度 false:有作业强度
+ */
+ public static boolean checkIfCleanIntensity(ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState){
+ return !cleanSystemState.getSecuWorkStandSts()&&!cleanSystemState.getSecuWorkStrongSts();
+ }
+ /**
+ * 判断是否纯扫模式
+ *
+ * @param cleanSystemState
+ * @return
+ */
+ public static boolean checkIfCleanModePureSweep(ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState) {
+ // 作业模式状态
+ // 洗扫
+ boolean clean_mode_wash_sweep = cleanSystemState.getSecuModWashSweepSts();
+ // 纯洗
+ boolean clean_mode_pure_wash = cleanSystemState.getSecuModWashSts();
+ // 纯吸
+ boolean clean_mode_pure_draw = cleanSystemState.getSecuWorkTonSts();
+
+ // 清扫方向状态
+ // 左侧
+ boolean clean_direction_left_side = cleanSystemState.getSecuWorkLeftSts();
+ // 右侧
+ boolean clean_direction_right_side = cleanSystemState.getSecuWorkRightSts();
+ // 两侧
+ boolean clean_direction_both_side = cleanSystemState.getSecuWorkOnBothsidesSts();
+
+ // 纯扫 模式判断:不是另外其他3个模式,同时有清扫方向,说明开启了纯扫模式
+ boolean clean_mode_pure_sweep = (clean_direction_left_side || clean_direction_right_side || clean_direction_both_side)
+ && (!clean_mode_wash_sweep && !clean_mode_pure_wash && !clean_mode_pure_draw);
+ return clean_mode_pure_sweep;
+ }
+ /**
+ * 构建底盘Mock数据
+ *
+ * @return
+ */
+ public static ChassisStatesOuterClass.SweeperFuTianTaskSystemStates buildSweeperFuTionCleanSystemStateMockData() {
+ ChassisStatesOuterClass.SweeperFuTianTaskSystemStates.Builder builder = ChassisStatesOuterClass.SweeperFuTianTaskSystemStates.newBuilder();
+ builder.setSecuMotWorkSts(true);
+ builder.setSecuModWashSts(true);
+ builder.setSecuWorkOnBothsidesSts(true);
+ builder.setSecuWorkStrongSts(true);
+ return builder.build();
+ }
+
+}
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperMapAssetStyleUtil.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperMapAssetStyleUtil.java
new file mode 100644
index 0000000000..57d39a354b
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperMapAssetStyleUtil.java
@@ -0,0 +1,61 @@
+package com.mogo.och.sweepercloud.util;
+
+
+import android.content.Context;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * @author donghongyu
+ * @date 12/18/20 5:37 PM
+ */
+public class SweeperMapAssetStyleUtil {
+
+ public static byte[] getAssetsStyle(Context context,String fileName) {
+ byte[] buffer1 = null;
+ InputStream is1 = null;
+ try {
+ is1 = context.getResources().getAssets().open(fileName); //eg. over_view_style.data
+ int lenght1 = is1.available();
+ buffer1 = new byte[lenght1];
+ is1.read(buffer1);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ if (is1 != null) {
+ is1.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return buffer1;
+ }
+
+
+ public static byte[] getAssetsExtraStyle(Context context, String fileName) {
+ byte[] buffer1 = null;
+ InputStream is1 = null;
+ try {
+ is1 = context.getResources().getAssets().open(fileName); //eg. over_view_style_extra.data
+ int lenght1 = is1.available();
+ buffer1 = new byte[lenght1];
+ is1.read(buffer1);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ if (is1 != null) {
+ is1.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return buffer1;
+ }
+
+
+}
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/CountDownView.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/CountDownView.kt
new file mode 100644
index 0000000000..5790ef8072
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/CountDownView.kt
@@ -0,0 +1,65 @@
+package com.mogo.och.sweepercloud.view
+
+import android.content.Context
+import android.os.Handler
+import android.os.Message
+import android.util.AttributeSet
+import androidx.appcompat.widget.AppCompatTextView
+/**
+ * 倒计时View
+ */
+class CountDownView : AppCompatTextView, Handler.Callback {
+ private val mHandler = Handler(this)
+ private var mCountDownTime = DEFAULT_COUNT_DOWN_TIME
+ private var listener: CountDownListener? = null
+
+ constructor(context: Context?) : super(context!!) {}
+ constructor(context: Context?, attrs: AttributeSet?) : super(context!!, attrs) {}
+ constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context!!, attrs, defStyleAttr) {}
+
+ override fun handleMessage(message: Message): Boolean {
+ if (message.what == MSG_COUNT_DOWN) {
+ mCountDownTime--
+ if (mCountDownTime > 0) {
+ text = "$mCountDownTime"
+ mHandler.sendEmptyMessageDelayed(MSG_COUNT_DOWN, DEFAULT_COUNT_DOWN_DELAY)
+ } else {
+ stopCountDown()
+ listener?.stop()
+ }
+ }
+ return false
+ }
+
+ fun setCountDownListener(listener: CountDownListener?) {
+ this.listener = listener
+ }
+
+ /**
+ * 启动倒计时
+ */
+ fun startCountDown(countDownTime:Int) {
+ mHandler.removeMessages(MSG_COUNT_DOWN)
+ text = "$countDownTime"
+ mCountDownTime=countDownTime
+ mHandler.sendEmptyMessageDelayed(MSG_COUNT_DOWN, DEFAULT_COUNT_DOWN_DELAY)
+ }
+
+ /**
+ * 停止倒计时
+ */
+ fun stopCountDown() {
+ mHandler.removeMessages(MSG_COUNT_DOWN)
+ text = null
+ }
+
+ interface CountDownListener {
+ fun stop()
+ }
+
+ companion object {
+ private const val DEFAULT_COUNT_DOWN_TIME = 15
+ private const val MSG_COUNT_DOWN = 1001
+ private const val DEFAULT_COUNT_DOWN_DELAY = 1000L
+ }
+}
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/FontAdaptionTextView.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/FontAdaptionTextView.java
new file mode 100644
index 0000000000..816baff142
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/FontAdaptionTextView.java
@@ -0,0 +1,47 @@
+package com.mogo.och.sweepercloud.view;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.widget.TextView;
+
+public class FontAdaptionTextView extends TextView {
+ public FontAdaptionTextView(Context context) {
+ super(context);
+ }
+
+ public FontAdaptionTextView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public FontAdaptionTextView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ if (getMeasuredWidth() != 0) {
+
+ //判断View字体行数
+ if (getLayout().getLineCount() > 1) {
+ //获取view内部间隔
+ int l = getPaddingLeft();
+ int r = getPaddingRight();
+ float pp = 0;
+ //计算字符串长度
+ for (int i = 0; i < getLayout().getLineCount(); i++) {
+ pp = pp + l + r + getLayout().getLineWidth(i);
+ }
+
+ //计算view的宽度与字符串长度的比例
+ float f = getMeasuredWidth() / pp;
+ //获取缩放后的字体高度
+ float s = getTextSize() * f;
+ //设置控件字体大小
+ setTextSize(TypedValue.COMPLEX_UNIT_PX, s);
+ }
+ }
+ }
+
+}
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/LegendItemView.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/LegendItemView.kt
new file mode 100644
index 0000000000..b5598dce04
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/LegendItemView.kt
@@ -0,0 +1,32 @@
+package com.mogo.och.sweepercloud.view
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.widget.LinearLayout
+import com.mogo.och.sweepercloud.R
+import kotlinx.android.synthetic.main.sweeper_item_legend.view.*
+
+/**
+ * 任务路线全览图图例
+ */
+class LegendItemView:LinearLayout {
+ constructor(context: Context) : super(context) {}
+ constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
+ initView(context)
+ }
+ constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {}
+ constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) {}
+
+ private fun initView(context: Context) {
+ LayoutInflater.from(context).inflate(R.layout.sweeper_item_legend, this)
+ }
+
+ /**
+ * 设置数据
+ */
+ fun setData(resId:Int,text:String){
+ sweeperLegendIcon.setImageResource(resId)
+ sweeperLegendText.text = text
+ }
+}
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/NoTouchConstraintLayout.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/NoTouchConstraintLayout.java
new file mode 100644
index 0000000000..0e5714b7cf
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/NoTouchConstraintLayout.java
@@ -0,0 +1,45 @@
+package com.mogo.och.sweepercloud.view;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+
+import androidx.constraintlayout.widget.ConstraintLayout;
+
+/**
+ * 强制拦截所有touch时间的约束布局
+ *
+ * @author tongchenfei
+ */
+public class NoTouchConstraintLayout extends ConstraintLayout {
+ private boolean interceptTouchEvent = false;
+
+ public NoTouchConstraintLayout(Context context) {
+ super(context);
+ }
+
+ public NoTouchConstraintLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public NoTouchConstraintLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @Override
+ public boolean onInterceptTouchEvent(MotionEvent ev) {
+ if (interceptTouchEvent) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * 设置事件拦截
+ *
+ * @param interceptTouchEvent
+ */
+ public void setInterceptTouchEvent(boolean interceptTouchEvent) {
+ this.interceptTouchEvent = interceptTouchEvent;
+ }
+}
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/NoTouchFrameLayout.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/NoTouchFrameLayout.java
new file mode 100644
index 0000000000..10ff08d760
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/NoTouchFrameLayout.java
@@ -0,0 +1,30 @@
+package com.mogo.och.sweepercloud.view;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.widget.FrameLayout;
+
+/**
+ * 强制拦截所有touch时间的约束布局
+ *
+ * @author tongchenfei
+ */
+public class NoTouchFrameLayout extends FrameLayout {
+ public NoTouchFrameLayout(Context context) {
+ super(context);
+ }
+
+ public NoTouchFrameLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public NoTouchFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @Override
+ public boolean onInterceptTouchEvent(MotionEvent ev) {
+ return false;
+ }
+}
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SubTaskView.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SubTaskView.kt
new file mode 100644
index 0000000000..32559b6bdc
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SubTaskView.kt
@@ -0,0 +1,48 @@
+package com.mogo.och.sweepercloud.view
+
+import android.content.Context
+import android.graphics.Color
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.view.View
+import androidx.constraintlayout.widget.ConstraintLayout
+import com.mogo.och.sweepercloud.R
+import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon
+import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.SubTaskInfo
+import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.TaskModel
+import kotlinx.android.synthetic.main.sweeper_subtask_view.view.*
+
+/**
+ * 子任务View
+ */
+class SubTaskView : ConstraintLayout {
+ constructor(context: Context) : super(context) {}
+ constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
+ initView(context)
+ }
+ constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {}
+ constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) {}
+
+ private fun initView(context: Context) {
+ LayoutInflater.from(context).inflate(R.layout.sweeper_subtask_view, this)
+ }
+
+ /**
+ * 设置子任务信息
+ */
+ fun setData(taskInfo: SubTaskInfo,isLastTask: Boolean = false) {
+ tvSubTaskName.text = taskInfo.subTaskName
+ tvSubTaskName.setTextColor(if (taskInfo.taskStatus==SweeperCommon.TaskStatus.RUNNING) Color.parseColor("#3BD2FF") else Color.parseColor("#FFFFFF"))
+ if (taskInfo.taskModel == TaskModel.MANUAL) {//人工驾驶子任务
+ ivManualDriving.visibility = View.VISIBLE
+ } else {
+ ivManualDriving.visibility = View.GONE
+ }
+ if (taskInfo.taskStatus==SweeperCommon.TaskStatus.RUNNING) {
+ ivSubTask.setImageResource(R.drawable.sweeper_icon_select_subtask)
+ } else {
+ ivSubTask.setImageResource(R.drawable.sweeper_icon_not_select_subtask)
+ }
+ ivRightDownArrow.visibility = if (isLastTask) View.GONE else View.VISIBLE
+ }
+}
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperCurrentTaskInfoView.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperCurrentTaskInfoView.kt
new file mode 100644
index 0000000000..3bdbcea852
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperCurrentTaskInfoView.kt
@@ -0,0 +1,128 @@
+package com.mogo.och.sweepercloud.view
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.view.View
+import android.widget.TextView
+import androidx.constraintlayout.widget.ConstraintLayout
+import com.mogo.och.common.module.utils.DateTimeUtil
+import com.mogo.och.sweepercloud.R
+import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon.TaskStatus
+import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.SubTaskInfo
+import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.TaskInfo
+import kotlinx.android.synthetic.main.sweeper_current_task_info.view.*
+
+/**
+ * 清扫车当前任务信息展示
+ */
+class SweeperCurrentTaskInfoView : ConstraintLayout {
+ private val TAG: String = "SweeperCurrentTaskInfoView"
+
+ //当前任务操作菜单
+ private var listTask: List? = null
+
+ constructor(context: Context) : super(context) {}
+ constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
+ initView(context)
+ }
+
+ constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {}
+ constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) {}
+
+ private fun initView(context: Context) {
+ LayoutInflater.from(context).inflate(R.layout.sweeper_current_task_info, this)
+ setSubTaskState(false)
+ }
+
+ fun getAutoBtn(): TextView {
+ return tvStartAuto
+ }
+
+ /**
+ * 设置当前任务数据
+ */
+ fun setData(
+ subTaskBean: TaskInfo?,
+ currentPosition: Int = -1
+ ) {
+ subTaskBean?.apply {
+ this@SweeperCurrentTaskInfoView.listTask = subListList
+ tvTaskName.text = taskName
+ val calendarStart = DateTimeUtil.formatLongToCalendar(taskStartTime)
+ val calendarEnd = DateTimeUtil.formatLongToCalendar(taskEndTime)
+ tvTaskTime.text = "${DateTimeUtil.formatCalendarToString(calendarStart, DateTimeUtil.HH_mm)}-${
+ DateTimeUtil.formatCalendarToString(
+ calendarEnd,
+ DateTimeUtil.HH_mm
+ )
+ }"
+ }
+ listTask?.let {
+ //特殊处理当前暂无执行中任务的情况
+ if (currentPosition == -1) {
+ setSubTaskState(false)
+ setCurrentData(currentPosition + 1)
+ } else {
+ setSubTaskState(it[currentPosition].taskStatus == TaskStatus.RUNNING)
+ setCurrentData(currentPosition)
+ }
+ }
+ }
+
+ /**
+ * 设置子任务的状态
+ */
+ private fun setSubTaskState(isWorking: Boolean) {
+ if (isWorking) {
+ tvTaskState.text = "正在作业"
+ tvTaskState.setBackgroundResource(R.drawable.bg_shape_task_state_working)
+ } else {
+ tvTaskState.text = "暂未准备"
+ tvTaskState.setBackgroundResource(R.drawable.bg_shape_task_state_not_ready)
+ }
+ }
+
+ /**
+ * 填充数据
+ */
+ private fun setCurrentData(currentPosition: Int) {
+ listTask?.let {
+ if (it.size == 1) {
+ preSubTask.setData(it[currentPosition], isLastTask = true)
+ currentSubTask.visibility = View.INVISIBLE
+ lastSubTask.visibility = View.INVISIBLE
+ } else if (it.size == 2) {
+ if (currentPosition == 0) {
+ preSubTask.setData(it[currentPosition])
+ currentSubTask.setData(it[1], isLastTask = true)
+ } else {
+ preSubTask.setData(it[currentPosition - 1])
+ currentSubTask.setData(it[currentPosition], isLastTask = true)
+ }
+ preSubTask.visibility = View.VISIBLE
+ currentSubTask.visibility = View.VISIBLE
+ lastSubTask.visibility = View.GONE
+ } else {
+ preSubTask.visibility = View.VISIBLE
+ currentSubTask.visibility = View.VISIBLE
+ lastSubTask.visibility = View.VISIBLE
+ //当前正在执行的任务是第一个子任务
+ if (currentPosition == 0) {
+ preSubTask.setData(it[currentPosition])
+ currentSubTask.setData(it[1])
+ lastSubTask.setData(it[2], isLastTask = true)
+ //当前正在执行的任务是最后一个子任务
+ } else if (currentPosition == it.size - 1) {
+ preSubTask.setData(it[currentPosition - 2])
+ currentSubTask.setData(it[currentPosition - 1])
+ lastSubTask.setData(it[currentPosition], isLastTask = true)
+ } else {
+ preSubTask.setData(it[currentPosition - 1])
+ currentSubTask.setData(it[currentPosition])
+ lastSubTask.setData(it[currentPosition + 1], isLastTask = true)
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperLimitingVelocityView.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperLimitingVelocityView.kt
new file mode 100644
index 0000000000..f7c2dff777
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperLimitingVelocityView.kt
@@ -0,0 +1,59 @@
+package com.mogo.och.sweepercloud.view
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.view.View
+import android.widget.LinearLayout
+import com.mogo.eagle.core.data.enums.DataSourceType
+import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener
+import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener.Companion.LimitingVelocityView_TAG
+import com.mogo.eagle.core.function.api.datacenter.union.ILimitingVelocityListener
+import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager
+import com.mogo.eagle.core.function.call.v2x.CallerLimitingVelocityListenerManager
+import com.mogo.eagle.core.utilcode.util.ThreadUtils
+import com.mogo.och.sweepercloud.R
+import kotlinx.android.synthetic.main.sweeper_limiting_speed.view.*
+
+class SweeperLimitingVelocityView(
+ context: Context,
+ attrs: AttributeSet? = null,
+) : LinearLayout(context, attrs), ILimitingVelocityListener, IViewControlListener {
+
+ companion object {
+ private const val TAG = "SweeperLimitingVelocityView"
+ }
+
+ init {
+ LayoutInflater.from(context).inflate(R.layout.sweeper_limiting_speed, this, true)
+ }
+
+ override fun onAttachedToWindow() {
+ super.onAttachedToWindow()
+ CallerLimitingVelocityListenerManager.addListener(TAG, this)
+ CallerHmiViewControlListenerManager.addListener(LimitingVelocityView_TAG, this)
+ }
+
+ override fun onLimitingVelocityChange(limitingVelocity: Int, sourceType: DataSourceType) {
+ ThreadUtils.runOnUiThread {
+ if (limitingVelocity > 0) {
+ this.visibility = View.VISIBLE
+ tvLimitingVelocity.text = "$limitingVelocity"
+ } else {
+ this.visibility = View.GONE
+ }
+ }
+ }
+
+ override fun visible(v: Int) {
+ super.visible(v)
+ this.visibility = v
+ }
+
+ override fun onDetachedFromWindow() {
+ super.onDetachedFromWindow()
+ CallerLimitingVelocityListenerManager.removeListener(TAG)
+ CallerHmiViewControlListenerManager.removeListener(LimitingVelocityView_TAG)
+ }
+
+}
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperTrafficDataView.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperTrafficDataView.kt
new file mode 100644
index 0000000000..6ee2639db7
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperTrafficDataView.kt
@@ -0,0 +1,196 @@
+package com.mogo.och.sweepercloud.view
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.constraintlayout.widget.ConstraintLayout
+import chassis.Chassis.GearPosition
+import chassis.Chassis.LightSwitch
+import chassis.ChassisStatesOuterClass.BMSSystemStates
+import chassis.ChassisStatesOuterClass.SweeperFuTianTaskSystemStates
+import com.elegant.utils.UiThreadHandler
+import com.mogo.eagle.core.function.api.autopilot.*
+import com.mogo.eagle.core.function.call.autopilot.*
+import com.mogo.eagle.core.function.hmi.ui.widget.TapPositionView
+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.ThreadUtils
+import com.mogo.och.sweepercloud.R
+import planning.RoboSweeperTaskIndexOuterClass
+import kotlin.math.roundToInt
+
+/**
+ * 车辆基本信息:方向盘下方的档位 转向灯 限速 速度 电量 水量
+ */
+class SweeperTrafficDataView : ConstraintLayout,
+ IMoGoBatteryManagementSystemListener,
+ IMoGoChassisLamplightListener,
+ IMoGoChassisGearStateListener,
+ IMoGoSweeperFutianCleanSystemListener {
+ private var tapPositionView //方向盘下方的档位
+ : TapPositionView? = null
+ private var speedImage //速度图标
+ : ImageView? = null
+ private var speedTextView //速度值
+ : TextView? = null
+ private var sweeperAutoState //自动驾驶状态
+ : TextView? = null
+ private var tvBattery //电量百分比展示
+ : TextView? = null
+ private var ivBgWaterWarning //水位预警背景图
+ : ImageView? = null
+ private var ivWater //水位图标
+ : ImageView? = null
+
+ private val TAG = "SweeperTrafficDataView"
+
+ // 底盘数据回调时间间隔
+ private val VEHICLE_STATE_INTERVAL_MILLIS = 500L
+
+ // 当前时间戳
+ private var mCurrentTimeWaterMillis: Long = 0
+
+ private var mCurrentTimeBatteryMillis: Long = 0
+
+ constructor(context: Context) : super(context) {}
+ constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
+ initView(context)
+ }
+
+ constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {}
+ constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) {}
+
+ private fun initView(context: Context) {
+ LayoutInflater.from(context).inflate(R.layout.sweeper_traffic_data, this)
+ tapPositionView = findViewById(R.id.sweeperTrafficPosition)
+ speedImage = findViewById(R.id.sweeperSpeedImage)
+ speedTextView = findViewById(R.id.sweeperSpeedText)
+ sweeperAutoState = findViewById(R.id.sweeperAutoState)
+ tvBattery = findViewById(R.id.tvBattery)
+ ivBgWaterWarning = findViewById(R.id.sweeperIvBgWaterWarning)
+ ivWater = findViewById(R.id.sweeperIvWater)
+ }
+
+ override fun onAttachedToWindow() {
+ super.onAttachedToWindow()
+ //电量
+ CallerBatteryManagementSystemListenerManager.addListener(TAG, this)
+ //转向灯
+ CallerChassisLamplightListenerManager.addListener(TAG, this)
+ //档位
+ CallerChassisGearStateListenerManager.addListener(TAG, this)
+ //清扫车相关数据接口
+ CallerSweeperFutianCleanSystemListenerManager.addListener(TAG, this)
+ }
+
+ override fun onDetachedFromWindow() {
+ super.onDetachedFromWindow()
+ CallerBatteryManagementSystemListenerManager.removeListener(TAG)
+ CallerChassisLamplightListenerManager.removeListener(TAG)
+ CallerChassisGearStateListenerManager.removeListener(TAG)
+ CallerSweeperFutianCleanSystemListenerManager.removeListener(TAG)
+ }
+
+ override fun onSweeperFutianTaskIndexData(roboSweeperTaskIndex: RoboSweeperTaskIndexOuterClass.RoboSweeperTaskIndex) {}
+ override fun onSweeperFutianCleanSystemState(cleanSystemState: SweeperFuTianTaskSystemStates) {
+ val current = System.currentTimeMillis()
+ if (current - mCurrentTimeWaterMillis <= VEHICLE_STATE_INTERVAL_MILLIS) {
+ return
+ }
+ mCurrentTimeWaterMillis = current
+ d(SceneConstant.M_SWEEPER + TAG, "水位:${cleanSystemState.hasSecuCleanWaterTankLow()}")
+ UiThreadHandler.post {
+ if (cleanSystemState.hasSecuCleanWaterTankLow()) { //清水箱水位低不能清洗作业报警信号
+ ivBgWaterWarning?.visibility = VISIBLE
+ ivWater?.isSelected = true
+ } else {
+ ivBgWaterWarning?.visibility = GONE
+ ivWater?.isSelected = false
+ }
+ }
+
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onBatteryManagementSystemStates(states: BMSSystemStates) {
+ val current = System.currentTimeMillis()
+ if (current - mCurrentTimeBatteryMillis <= VEHICLE_STATE_INTERVAL_MILLIS) {
+ return
+ }
+ mCurrentTimeBatteryMillis = current
+ d(SceneConstant.M_SWEEPER + TAG, "电量:${states.bmsSoc}")
+ UiThreadHandler.post {
+ tvBattery?.text = "${states.bmsSoc.roundToInt()}%"
+ }
+ }
+
+ /**
+ * 车辆转向灯
+ * @param directionLight
+ */
+ override fun onAutopilotLightSwitchData(lightSwitch: LightSwitch?) {
+ //转向灯状态 0是正常 1是左转 2是右转
+ }
+
+ /**
+ * 设置自动驾驶状态
+ */
+ fun setAutoState(state: Int) {
+ when (state) {
+ //不可自动驾驶
+ IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE -> {
+ sweeperAutoState?.text="自动驾驶"
+ sweeperAutoState?.setBackgroundResource(R.drawable.icon_not_auto)
+ }
+ //人工驾驶
+ IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE -> {
+ sweeperAutoState?.text="人工驾驶"
+ sweeperAutoState?.setBackgroundResource(R.drawable.icon_auto)
+ }
+ //自动驾驶中
+ IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING -> {
+ sweeperAutoState?.text="自动驾驶"
+ sweeperAutoState?.setBackgroundResource(R.drawable.icon_auto)
+ }
+ //平行驾驶
+ IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING -> {
+ sweeperAutoState?.text="平行驾驶"
+ sweeperAutoState?.setBackgroundResource(R.drawable.icon_auto)
+ }
+ }
+ }
+
+ /**
+ * 刹车灯
+ * @param brakeLight
+ */
+ override fun onAutopilotBrakeLightData(brakeLight: Boolean) {
+ d(TAG, "刹车灯:$brakeLight")
+ }
+
+ /**
+ * 方向盘下方的档位
+ * @param gear
+ */
+ override fun onAutopilotGearData(gear: GearPosition) {
+ d(TAG, "司机屏档位$gear")
+ ThreadUtils.runOnUiThread {
+ tapPositionView?.updateWithGear(gear)
+ }
+ }
+
+ fun getSpeedImage(): ImageView? {
+ return speedImage
+ }
+
+ /**
+ * 速度设置
+ */
+ fun updateSpeedWithValue(newSpeed: Int) {
+ speedTextView?.text = newSpeed.toString()
+ speedImage?.setBackgroundResource(if (newSpeed > 60) R.drawable.sweeper_traffic_data_speed_warning else R.drawable.sweeper_bg_traffic_data_speed)
+ }
+}
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperTrafficLightView.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperTrafficLightView.kt
new file mode 100644
index 0000000000..96a5af1933
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperTrafficLightView.kt
@@ -0,0 +1,148 @@
+package com.mogo.och.sweepercloud.view
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.widget.LinearLayout
+import com.mogo.eagle.core.data.enums.DataSourceType
+import com.mogo.eagle.core.data.enums.TrafficLightEnum
+import com.mogo.eagle.core.function.api.datacenter.union.IMoGoTrafficLightListener
+import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager
+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.UiThreadHandler
+import com.mogo.och.sweepercloud.R
+import kotlinx.android.synthetic.main.sweeper_traffic_light_view.view.*
+
+/**
+ * 清扫车:红绿灯view-
+ *
+ * Created on 2022/3/29
+ */
+class SweeperTrafficLightView @JvmOverloads constructor(
+ context: Context?,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0
+) : LinearLayout(context, attrs, defStyleAttr), IMoGoTrafficLightListener {
+
+ companion object {
+ private const val TAG = "SweeperTrafficLightView"
+ }
+
+ private var mCurrentLightId = TrafficLightEnum.BLACK
+
+ init {
+ init(context)
+ }
+
+ private fun init(context: Context?) {
+ LayoutInflater.from(context).inflate(R.layout.sweeper_traffic_light_view, this, true)
+ }
+
+ override fun onAttachedToWindow() {
+ super.onAttachedToWindow()
+ CallerTrafficLightListenerManager.addListener(TAG, this)
+ }
+
+ override fun onDetachedFromWindow() {
+ super.onDetachedFromWindow()
+ CallerTrafficLightListenerManager.removeListener(TAG)
+ }
+
+ /**
+ * 展示红绿灯预警
+ *
+ * @param checkLightId 0-都是默认,1-红,2-黄,3-绿
+ * @param lightSource 1:云端下发;2:自车感知
+ */
+ override fun showTrafficLight(checkLightId: TrafficLightEnum, lightSource: DataSourceType) {
+ mCurrentLightId = checkLightId
+ updateTrafficLightIcon(checkLightId)
+ CallerLogger.d(SceneConstant.M_SWEEPER + TAG,"灯态类型:"+checkLightId.name +" 灯态来源:"+DataSourceType.getName(lightSource))
+ }
+
+ /**
+ * 关闭红绿灯预警展示,并重制灯态
+ */
+ override fun disableTrafficLight() {
+ UiThreadHandler.post {
+ mCurrentLightId = TrafficLightEnum.BLACK
+ sweeper_traffic_light_iv.setImageResource(R.drawable.sweeper_light_gay_nor)
+ sweeper_traffic_light_time_tv.text = ""
+ this@SweeperTrafficLightView.visibility = VISIBLE
+ CallerLogger.d(SceneConstant.M_SWEEPER + TAG,"灯态类型:disableTrafficLight")
+ }
+ }
+
+ /**
+ * @param redNum 红灯倒计时
+ * @param yellowNum 黄灯倒计时
+ * @param greenNum 绿灯倒计时
+ */
+ override fun changeCountdownTrafficLightNum(redNum: Int, yellowNum: Int, greenNum: Int) {
+ when (mCurrentLightId) {
+ TrafficLightEnum.RED -> changeCountdownRed(redNum)
+ TrafficLightEnum.YELLOW -> changeCountdownYellow(yellowNum)
+ TrafficLightEnum.GREEN -> changeCountdownGreen(greenNum)
+ else -> UiThreadHandler.post { sweeper_traffic_light_time_tv.text = "" }
+ }
+ }
+
+ override fun changeCountdownRed(redNum: Int) {
+ UiThreadHandler.post {
+ if (redNum > 0) {
+ sweeper_traffic_light_time_tv.text = redNum.toString()
+ } else {
+ sweeper_traffic_light_time_tv.text = ""
+ }
+ }
+ }
+
+ override fun changeCountdownGreen(greenNum: Int) {
+ UiThreadHandler.post {
+ if (greenNum > 0) {
+ sweeper_traffic_light_time_tv.text = greenNum.toString()
+ } else {
+ sweeper_traffic_light_time_tv.text = ""
+ }
+ }
+ }
+
+ override fun changeCountdownYellow(yellowNum: Int) {
+ UiThreadHandler.post {
+ if (yellowNum > 0) {
+ sweeper_traffic_light_time_tv.text = yellowNum.toString()
+ } else {
+ sweeper_traffic_light_time_tv.text = ""
+ }
+ }
+ }
+
+ /**
+ * 更新红绿灯icon
+ *
+ * @param lightId 0-都是默认,1-红,2-黄,3-绿
+ */
+ private fun updateTrafficLightIcon(lightId: TrafficLightEnum) {
+ UiThreadHandler.post {
+ when (lightId) {
+ TrafficLightEnum.RED -> {
+ sweeper_traffic_light_iv.setImageResource(R.drawable.sweeper_light_red_nor)
+ this@SweeperTrafficLightView.visibility = VISIBLE
+ }
+ TrafficLightEnum.YELLOW -> {
+ sweeper_traffic_light_iv.setImageResource(R.drawable.sweeper_lightyellow_nor)
+ this@SweeperTrafficLightView.visibility = VISIBLE
+ }
+ TrafficLightEnum.GREEN -> {
+ sweeper_traffic_light_iv.setImageResource(R.drawable.sweeper_light_green_nor)
+ this@SweeperTrafficLightView.visibility = VISIBLE
+ }
+ else -> {
+ sweeper_traffic_light_iv.setImageResource(R.drawable.sweeper_light_gay_nor)
+ this@SweeperTrafficLightView.visibility = VISIBLE
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperWorkModeView.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperWorkModeView.kt
new file mode 100644
index 0000000000..08dd7f348c
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperWorkModeView.kt
@@ -0,0 +1,180 @@
+package com.mogo.och.sweepercloud.view
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.view.View
+import androidx.constraintlayout.widget.ConstraintLayout
+import chassis.ChassisStatesOuterClass.SweeperFuTianTaskSystemStates
+import com.elegant.utils.UiThreadHandler
+import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
+import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
+import com.mogo.och.sweepercloud.R
+import com.mogo.och.sweepercloud.callback.ICleaningModeStateCallback
+import com.mogo.och.sweepercloud.constant.OperateStateEnum
+import com.mogo.och.sweepercloud.ui.popwindow.SweeperOperatePanelPopWindow
+import com.mogo.och.sweepercloud.util.SweeperFutianCmdUtil
+import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.TaskModel
+import kotlinx.android.synthetic.main.sweeper_work_mode.view.*
+
+/**
+ * 清扫车模式信息展示
+ */
+class SweeperWorkModeView : ConstraintLayout,ICleaningModeStateCallback {
+
+ private var isSelectPureSweepMode: Boolean = false
+ private val TAG = "SweeperWorkModeView"
+ //清扫模式选择面板
+ private var mOperatePanelPopWindow: SweeperOperatePanelPopWindow? = null
+
+ private var operateState: OperateStateEnum=OperateStateEnum.SYNCING_STATUS
+
+ constructor(context: Context) : super(context) {}
+ constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
+ initView(context)
+ }
+
+ constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {}
+ constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) {}
+
+ private fun initView(context: Context) {
+ LayoutInflater.from(context).inflate(R.layout.sweeper_work_mode, this)
+ mOperatePanelPopWindow = SweeperOperatePanelPopWindow(context)
+ setShowOrHideCleanSystemState(OperateStateEnum.SYNCING_STATUS,null)
+ }
+
+ /**
+ * 设置view
+ */
+ fun setTrafficDataView(trafficDataView: SweeperTrafficDataView){
+ //清扫模式选择面板打开关闭处理
+ ivOpenOperatePanel.setOnClickListener {
+ if (mOperatePanelPopWindow?.isShowing != true) {
+ mOperatePanelPopWindow?.showAsDropDown(
+ trafficDataView,
+ resources.getDimension(R.dimen.dp_600).toInt(),
+ 0
+ )
+ UiThreadHandler.postDelayed({
+ d(SceneConstant.M_SWEEPER + TAG, "operateState:"+operateState.code)
+ mOperatePanelPopWindow?.showSyncing(operateState)
+
+ },300)
+ } else {
+ mOperatePanelPopWindow?.dismiss()
+ }
+ }
+ }
+ /**
+ * 设置清扫模式面板
+ */
+ fun setSweeperFutianCleanSystemState(taskType: TaskModel, cleanSystemState: SweeperFuTianTaskSystemStates?) {
+ // TODO:传递清扫车底盘数据给上装面板
+ //mOperatePanelPopWindow?.setCleanSystemState(cleanSystemState, this@SweeperWorkModeView)
+ if (this.operateState.code==OperateStateEnum.STARTING_STATUS.code){
+ return
+ }
+ //如果状态是同步中,在底盘首次回调时把状态强制修改成成功
+ if (this.operateState.code==OperateStateEnum.SYNCING_STATUS.code){
+ this.operateState=OperateStateEnum.SUCCESS_STATUS
+ d(SceneConstant.M_SWEEPER + TAG, "SystemState operateState:"+operateState.code)
+ }
+ //清扫车暂未选择清扫模式或者任务类型是人工驾驶子任务,则暂无清扫模式
+ if (SweeperFutianCmdUtil.checkIfCleanMode(cleanSystemState) || taskType==TaskModel.MANUAL||taskType==TaskModel.DEFAULT_MODEL) {
+ setShowOrHideCleanSystemState(OperateStateEnum.NO_STATUS, cleanSystemState)
+ } else {
+ setShowOrHideCleanSystemState(OperateStateEnum.SUCCESS_STATUS, cleanSystemState)
+ }
+ }
+
+ /**
+ * 设置清扫模式状态显示和隐藏
+ */
+ private fun setShowOrHideCleanSystemState(operateState: OperateStateEnum, cleanSystemState: SweeperFuTianTaskSystemStates?) {
+ when (operateState.code) {
+ OperateStateEnum.SYNCING_STATUS.code -> {
+ groupWorkModelPanel?.visibility = View.GONE
+ tvNoDataDesc?.visibility = View.VISIBLE
+ tvNoDataDesc?.text = "状态同步中,请稍后"
+ mOperatePanelPopWindow?.setIsOutsideTouchable(true)
+ }
+ OperateStateEnum.FAIL_STATUS.code -> {
+ groupWorkModelPanel?.visibility = View.GONE
+ tvNoDataDesc?.visibility = View.VISIBLE
+ tvNoDataDesc?.text = "上装启动失败"
+ mOperatePanelPopWindow?.setIsOutsideTouchable(true)
+ }
+ OperateStateEnum.STARTING_STATUS.code -> {
+ groupWorkModelPanel?.visibility = View.GONE
+ tvNoDataDesc?.visibility = View.VISIBLE
+ tvNoDataDesc?.text = "上装启动中..."
+ mOperatePanelPopWindow?.setIsOutsideTouchable(false)
+ }
+ OperateStateEnum.NO_STATUS.code -> {
+ groupWorkModelPanel?.visibility = View.GONE
+ tvNoDataDesc?.visibility = View.VISIBLE
+ tvNoDataDesc?.text = "暂无"
+ mOperatePanelPopWindow?.setIsOutsideTouchable(true)
+ }
+ else -> {
+ groupWorkModelPanel?.visibility = View.VISIBLE
+ tvNoDataDesc?.visibility = View.GONE
+ setCleanModeData(cleanSystemState)
+ mOperatePanelPopWindow?.setIsOutsideTouchable(true)
+ }
+
+ }
+ }
+
+ override fun cleaningModeState(operateState: OperateStateEnum, cleanSystemState: SweeperFuTianTaskSystemStates?, isSelectPureSweepMode: Boolean) {
+ this.isSelectPureSweepMode = isSelectPureSweepMode
+ this.operateState=operateState
+ setShowOrHideCleanSystemState(operateState, cleanSystemState)
+ }
+
+ /**
+ * 设置清扫模式数据
+ */
+ private fun setCleanModeData(cleanSystemState: SweeperFuTianTaskSystemStates?) {
+ if (isSelectPureSweepMode) {
+ tvCleaningMode?.text = "纯扫模式"
+ groupWorkModelPanel?.visibility = View.VISIBLE
+ tvNoDataDesc?.visibility = View.GONE
+ } else {
+ if (SweeperFutianCmdUtil.checkIfCleanMode(cleanSystemState)) {
+ groupWorkModelPanel?.visibility = View.GONE
+ tvNoDataDesc?.visibility = View.VISIBLE
+ tvNoDataDesc?.text = "暂无"
+ return
+ } else {
+ groupWorkModelPanel?.visibility = View.VISIBLE
+ tvNoDataDesc?.visibility = View.GONE
+ // 作业模式
+ if (cleanSystemState?.secuModWashSweepSts == true) tvCleaningMode?.text = "洗扫模式"
+ if (cleanSystemState?.secuModWashSts == true) tvCleaningMode?.text = "纯洗模式"
+ if (cleanSystemState?.secuWorkTonSts == true) tvCleaningMode?.text = "纯吸模式"
+ if (SweeperFutianCmdUtil.checkIfCleanModePureSweep(cleanSystemState)) tvCleaningMode?.text = "纯扫模式"
+ }
+ }
+ //清扫方向
+ if (SweeperFutianCmdUtil.checkIfCleanDirection(cleanSystemState)) {
+ tvCleaningDirection.visibility = View.GONE
+ } else {
+ tvCleaningDirection.visibility = View.VISIBLE
+ // 左侧
+ if (cleanSystemState?.secuWorkLeftSts == true) tvCleaningDirection?.text = "左侧"
+ // 右侧
+ if (cleanSystemState?.secuWorkRightSts == true) tvCleaningDirection?.text = "右侧"
+ // 两侧
+ if (cleanSystemState?.secuWorkOnBothsidesSts == true) tvCleaningDirection?.text = "两侧"
+ }
+ if (SweeperFutianCmdUtil.checkIfCleanIntensity(cleanSystemState)) {
+ tvCleaningIntensity.visibility = View.GONE
+ } else {
+ tvCleaningIntensity.visibility = View.VISIBLE
+ // 作业强度
+ if (cleanSystemState?.secuWorkStandSts == true) tvCleaningIntensity?.text = "标准"
+ if (cleanSystemState?.secuWorkStrongSts == true) tvCleaningIntensity?.text = "强力"
+ }
+ }
+}
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/TurnSignalView.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/TurnSignalView.kt
new file mode 100644
index 0000000000..59bbe0788d
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/TurnSignalView.kt
@@ -0,0 +1,90 @@
+package com.mogo.och.sweepercloud.view
+
+import android.animation.AnimatorSet
+import android.animation.ObjectAnimator
+import android.content.Context
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.view.View
+import android.widget.ImageView
+import android.widget.LinearLayout
+import chassis.Chassis
+import com.mogo.och.sweepercloud.R
+import kotlinx.android.synthetic.main.sweeper_turn_signal.view.*
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.launch
+
+class TurnSignalView : LinearLayout {
+ constructor(context: Context?) : super(context) {}
+ constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
+ initView(context)
+ }
+
+ private var init: Boolean = false
+
+ constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
+ context,
+ attrs,
+ defStyleAttr
+ ) {
+ }
+
+ constructor(
+ context: Context?,
+ attrs: AttributeSet?,
+ defStyleAttr: Int,
+ defStyleRes: Int
+ ) : super(context, attrs, defStyleAttr, defStyleRes) {
+ }
+
+ private fun initView(context: Context) {
+ LayoutInflater.from(context).inflate(R.layout.sweeper_turn_signal, this)
+ init = true
+ }
+
+ /**
+ * 转向灯动画
+ */
+ fun setTurnLight(directionLight: Chassis.LightSwitch?) {
+ GlobalScope.launch(Dispatchers.Main) {
+ if (!init) {
+ return@launch
+ }
+ //根据左右进行显示和隐藏,实际要判断每个来的时间和频度
+ when (directionLight) {
+ Chassis.LightSwitch.LIGHT_LEFT -> { //左转向
+ leftSelectImage.visibility = View.VISIBLE
+ rightSelectImage.visibility = View.GONE
+ rightSelectImage.clearAnimation()
+ setAnimation(leftSelectImage)
+ }
+ Chassis.LightSwitch.LIGHT_RIGHT -> { //右转向
+ leftSelectImage.visibility = View.GONE
+ rightSelectImage.visibility = View.VISIBLE
+ leftSelectImage.clearAnimation()
+ setAnimation(rightSelectImage)
+ }
+ else -> { //消失
+ leftSelectImage.clearAnimation()
+ rightSelectImage.clearAnimation()
+ leftSelectImage.visibility = View.GONE
+ rightSelectImage.visibility = View.GONE
+ }
+ }
+ }
+ }
+
+ //实现图片闪烁效果
+ private fun setAnimation(imageView: ImageView) {
+ val animationSet = AnimatorSet()
+ val valueAnimator = ObjectAnimator.ofFloat(imageView, "alpha", 0f, 1.0f)
+ val valueAnimatorDisappare = ObjectAnimator.ofFloat(imageView, "alpha", 1.0f, 0f)
+ valueAnimator.duration = 1000
+ valueAnimatorDisappare.duration = 800
+ valueAnimator.repeatCount = -1
+ valueAnimatorDisappare.repeatCount = -1
+ animationSet.playTogether(valueAnimatorDisappare, valueAnimator)
+ animationSet.start()
+ }
+}
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/VerticalDashLineView.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/VerticalDashLineView.java
new file mode 100644
index 0000000000..bc6aae4605
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/VerticalDashLineView.java
@@ -0,0 +1,64 @@
+package com.mogo.och.sweepercloud.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/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/WeltMapOverView.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/WeltMapOverView.kt
new file mode 100644
index 0000000000..5f157e0d67
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/WeltMapOverView.kt
@@ -0,0 +1,342 @@
+package com.mogo.och.sweepercloud.view
+
+import android.content.Context
+import android.graphics.Color
+import android.os.Bundle
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.view.View
+import android.widget.ImageView
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.content.ContextCompat
+import com.amap.api.maps.AMap
+import com.amap.api.maps.CameraUpdateFactory
+import com.amap.api.maps.model.*
+import com.mogo.eagle.core.data.map.MogoLocation
+import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener
+import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
+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.CoordinateUtils
+import com.mogo.eagle.core.utilcode.util.ThreadUtils
+import com.mogo.och.sweepercloud.R
+import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean
+import com.mogo.och.sweepercloud.constant.SweeperConst
+import com.mogo.och.sweepercloud.database.bean.WeltDataBean
+import com.mogo.och.sweepercloud.util.SweeperMapAssetStyleUtil
+import kotlinx.android.synthetic.main.sweeper_welt_map_overview.view.*
+
+
+/**
+ * 作业任务全览图
+ */
+class WeltMapOverView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener {
+ private var mTaskCoordinatesLatLng: MutableList = mutableListOf() //当前大任务的所有起终点集合
+ private var mCarMarker: Marker? = null
+ private var mAMap: AMap? = null
+ private var mWeltPolylines: Polyline? = null
+ private var mRoutePolylines: Polyline?=null
+// private val mLineMarkers: MutableList = mutableListOf()
+ private var mEndStationMarker: Marker? = null
+ private var mFirst: Boolean = false
+
+ //清扫车任务地图
+ private val TAG = "WeltMapOverView"
+
+ constructor(context: Context) : super(context) {}
+ constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
+ initView(context)
+ }
+
+ constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {}
+
+ constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) {}
+
+ private fun initView(context: Context) {
+ LayoutInflater.from(context).inflate(R.layout.sweeper_welt_map_overview, this)
+ initAMapView()
+ // 注册定位监听
+ CallerChassisLocationGCJ02ListenerManager.addListener(TAG, this)
+ CallerChassisLocationGCJ02ListenerManager.setListenerHz(TAG,5)
+ }
+
+ private fun initAMapView() {
+ mAMap = sweeperTextureMapView.map
+ // 地图文字标注
+ mAMap?.showMapText(true)
+ //显示3D建筑物
+ mAMap?.showBuildings(true)
+ // 设置导航地图模式,aMap是地图控制器对象。
+ mAMap?.mapType = AMap.MAP_TYPE_NIGHT
+ // 关闭显示实时路况图层,aMap是地图控制器对象。
+ mAMap?.isTrafficEnabled = false
+ // 设置 锚点 图标
+ mCarMarker = mAMap?.addMarker(
+ MarkerOptions()
+ .icon(BitmapDescriptorFactory.fromResource(R.drawable.sweeper_car_big))
+ .anchor(0.5f, 0.5f)
+ )
+ // 设置地图的样式
+ val uiSettings = mAMap?.uiSettings
+ uiSettings?.isZoomControlsEnabled = false // 地图缩放级别的交换按钮
+ uiSettings?.setAllGesturesEnabled(false) // 所有手势
+ uiSettings?.isMyLocationButtonEnabled = false // 显示默认的定位按钮
+ uiSettings?.setLogoBottomMargin(-150) //设置Logo下边界距离屏幕底部的边距,设置为负值即可
+ // 加载自定义样式
+ val customMapStyleOptions = CustomMapStyleOptions()
+ .setEnable(true)
+ .setStyleData(SweeperMapAssetStyleUtil.getAssetsStyle(context, "map_style.data"))
+ .setStyleExtraData(SweeperMapAssetStyleUtil.getAssetsExtraStyle(context, "map_style_extra.data"))
+ // 设置自定义样式
+ mAMap?.setCustomMapStyle(customMapStyleOptions)
+ //mAMap?.moveCamera(CameraUpdateFactory.zoomTo(15f))
+ mAMap?.setOnMapLoadedListener(AMap.OnMapLoadedListener {
+ //mAMap?.moveCamera(CameraUpdateFactory.zoomTo(15f))
+ CallerLogger.d(SceneConstant.M_SWEEPER + TAG, "WeltView---onMapLoaded")
+ // 加载自定义样式
+ val customMapStyleOptions = CustomMapStyleOptions()
+ .setEnable(true)
+ .setStyleData(SweeperMapAssetStyleUtil.getAssetsStyle(context, "map_style.data"))
+ .setStyleExtraData(SweeperMapAssetStyleUtil.getAssetsExtraStyle(context, "map_style_extra.data"))
+ // 设置自定义样式
+ mAMap?.setCustomMapStyle(customMapStyleOptions)
+ // 实时路况图层关闭,必须添加在loaded结束之后,其他位置不生效
+ mAMap?.isTrafficEnabled = false
+ mAMap?.showBuildings(true)
+ })
+ }
+
+ /**
+ * 添加画线颜色值
+ */
+ private fun getRouteColorList(weltData: MutableList):MutableList {
+ val colorList= mutableListOf()
+ var nextWeltDataBean:WeltDataBean?=null
+ for (i in weltData.indices) {
+ val weltDataBean = weltData[i]
+ if(i+110){
+ colorList.add(Color.TRANSPARENT)
+ continue
+ }
+ }
+ if (weltDataBean.weltDistance == SweeperConst.NONWELT) {//非贴边
+ colorList.add(ContextCompat.getColor(context,R.color.sweeper_236299))
+ } else if (weltDataBean.weltDistance < 0) {
+ colorList.add(ContextCompat.getColor(context,R.color.sweeper_c22101))
+ } else if (weltDataBean.weltDistance >= 0 && weltDataBean.weltDistance < 0.1) {
+ colorList.add(ContextCompat.getColor(context,R.color.sweeper_4dffa4))
+ } else if (weltDataBean.weltDistance >= 0.1 && weltDataBean.weltDistance < 0.2) {
+ colorList.add(ContextCompat.getColor(context,R.color.sweeper_ffdd4d))
+ } else if (weltDataBean.weltDistance >= 0.2) {
+ colorList.add(ContextCompat.getColor(context,R.color.sweeper_ff912b))
+ }
+ }
+ return colorList
+ }
+
+ override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) {
+ ThreadUtils.getSinglePool().run {
+ mogoLocation?.let { gnssInfo ->
+ val currentLatLng = LatLng(gnssInfo.latitude, gnssInfo.longitude)
+ //更新车辆位置
+ mCarMarker?.rotateAngle = (360 - gnssInfo.heading).toFloat()
+ mCarMarker?.position = currentLatLng
+ mCarMarker?.setToTop()
+ //圈定地图显示范围
+ val boundsBuilder = LatLngBounds.Builder()
+ if (mTaskCoordinatesLatLng.size > 0) {
+ //存放经纬度
+ for (i in mTaskCoordinatesLatLng.indices) {
+ val latLng = mTaskCoordinatesLatLng[i]
+ boundsBuilder.include(latLng)
+ }
+ }
+ mRoutePolylines?.points?.forEach {latLng->
+ boundsBuilder.include(latLng)
+ }
+ boundsBuilder.include(currentLatLng)
+ mAMap?.moveCamera(CameraUpdateFactory.newLatLngBoundsRect(boundsBuilder.build(), 100, 100, 100, 100))
+
+ }
+ }
+ }
+
+ /**
+ * 根据贴边数据绘制任务路线
+ */
+ fun drawablePolyline(weltDatas: MutableList?) {
+ weltDatas?.let {
+ val colorList=getRouteColorList(it)
+ val coordinatesLatLngs= mutableListOf()
+ for (i in it.indices) {
+ coordinatesLatLngs.add(LatLng(it[i].locLat,it[i].locLon))
+ }
+ if (coordinatesLatLngs.size > 2) {
+ //设置线段纹理
+ mWeltPolylines?.remove()
+ val polylineOptions = PolylineOptions()
+ polylineOptions.addAll(coordinatesLatLngs)
+ polylineOptions.width(14f) //线段宽度
+ polylineOptions.isUseTexture = false
+ polylineOptions.lineCapType(PolylineOptions.LineCapType.LineCapSquare)
+ polylineOptions.colorValues(colorList)
+ polylineOptions.visible(true)
+ // 绘制线
+ mWeltPolylines = mAMap?.addPolyline(polylineOptions)
+ }
+ }
+ }
+
+ /**
+ * 绘制起点和终点的marker
+ */
+ private fun drawStartAndEndMarker(startPoint: LatLng, endPoint: LatLng) {
+// val startMarker = mAMap?.addMarker(MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.sweeper_big_start_maker_icon)))
+// startMarker?.position = startPoint
+// mLineMarkers.add(startMarker)
+// val endMarker = mAMap?.addMarker(MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.sweeper_big_end_maker_icon)))
+// endMarker?.position = endPoint
+// mLineMarkers.add(endMarker)
+ }
+
+ private fun drawEndMarker(endPoint: LatLng){
+ mEndStationMarker?.remove()
+ mEndStationMarker = mAMap?.addMarker(MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.sweeper_big_end_maker_icon)))
+ mEndStationMarker?.position = endPoint
+ }
+
+ /**
+ * 清除所有标记和路线
+ */
+ fun clearAllMarkerAndPolyline() {
+// for (i in mLineMarkers.indices) {
+// mLineMarkers[i]?.isVisible = false
+// mLineMarkers[i]?.remove()
+// }
+ mEndStationMarker?.remove()
+ mWeltPolylines?.remove()
+ mRoutePolylines?.remove()
+// mLineMarkers.clear()
+ //mFirst = false
+ //showOrHiddenLegendData(false)
+ }
+
+ /**
+ * 设置贴边数据
+ */
+ fun setWeltData(weltDatas: MutableList?, isWeltData: Boolean, distance: String?) {
+ drawablePolyline(weltDatas)
+ ThreadUtils.runOnUiThread {
+ distance?.let {
+ setDistance(it)
+ }
+ }
+ //if (!mFirst && isWeltData) {
+ // mFirst = true
+ // showOrHiddenLegendData(true)
+ //}
+ }
+
+ /**
+ * 任务轨迹数据
+ */
+ fun setRouteList(routeList: ArrayList) {
+ val routeCoordinatesLatLngs= mutableListOf()
+ for (i in routeList.indices) {
+ routeCoordinatesLatLngs.add(LatLng(routeList[i].latitude,routeList[i].longitude))
+ }
+ ThreadUtils.runOnUiThread {
+ drawRouteListPolyline(routeCoordinatesLatLngs)
+ }
+ }
+
+ private fun drawRouteListPolyline(routeList: MutableList) {
+ mRoutePolylines?.remove()
+ val polylineOptions = PolylineOptions()
+ polylineOptions.width(14f) //线段宽度
+ polylineOptions.isUseTexture = false
+ polylineOptions.lineCapType(PolylineOptions.LineCapType.LineCapSquare)
+ polylineOptions.color(ContextCompat.getColor(context,R.color.sweeper_3ba1cc))
+ polylineOptions.addAll(routeList)
+ polylineOptions.visible(true)
+ mRoutePolylines=mAMap?.addPolyline(polylineOptions)
+ }
+
+ /**
+ * 设置当前大任务的所有子任务起终点集合
+ */
+ fun setTaskListCoordinatesLatLng(coordinatesLatLng: MutableList) {
+ ThreadUtils.runOnUiThread {
+ this.mTaskCoordinatesLatLng = coordinatesLatLng
+ if (mTaskCoordinatesLatLng.size > 0) {
+ drawStartAndEndMarker(mTaskCoordinatesLatLng[0], mTaskCoordinatesLatLng[mTaskCoordinatesLatLng.size - 1])
+ }
+ }
+ }
+ /**
+ * 设置当前任务终点
+ */
+ fun setCurrentTaskCoordinatesLatLng(coordinatesLatLng: LatLng) {
+ ThreadUtils.runOnUiThread {
+ drawEndMarker(coordinatesLatLng)
+ }
+ }
+
+ /**
+ * 设置图例数据
+ */
+ private fun showOrHiddenLegendData(isShow: Boolean) {
+ groupLegend.visibility = if (isShow) View.VISIBLE else View.GONE
+ sweeperLegend1.setData(R.drawable.sweeper_legend1, "a<0")
+ sweeperLegend2.setData(R.drawable.sweeper_legend2, "0≤a<10")
+ sweeperLegend3.setData(R.drawable.sweeper_legend3, "10≤a<20")
+ sweeperLegend4.setData(R.drawable.sweeper_legend4, "a≥20")
+ sweeperLegend5.setData(R.drawable.sweeper_legend5, "非贴边")
+ sweeperLegend6.setData(R.drawable.sweeper_legend6, "未经过")
+ }
+
+ private fun setDistance(distance: String) {
+ taskWeltDistanceTv.text="贴边:${distance}"
+ }
+
+ fun setProgress(progress: String?) {
+ progress?.let {
+ if ("0" == progress) {
+ taskProgressTv.visibility = View.GONE
+ taskWeltDistanceTv.visibility = View.GONE
+ showOrHiddenLegendData(false)
+ } else {
+ taskProgressTv.visibility = View.VISIBLE
+ taskWeltDistanceTv.visibility = View.VISIBLE
+ taskProgressTv.text = it
+ showOrHiddenLegendData(true)
+ }
+ }
+ }
+ fun onCreateView(savedInstanceState: Bundle?) {
+ sweeperTextureMapView.onCreate(savedInstanceState)
+ }
+
+ fun onResume() {
+ sweeperTextureMapView.onResume()
+ }
+
+ fun onPause() {
+ sweeperTextureMapView.onPause()
+ }
+
+ fun onDestroy() {
+ sweeperTextureMapView.onDestroy()
+ }
+
+ fun getSweeperSwitchToSmall(): ImageView {
+ return sweeperSwitchToSmall
+ }
+}
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/WeltSmallMapView.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/WeltSmallMapView.kt
new file mode 100644
index 0000000000..4db516bb7a
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/WeltSmallMapView.kt
@@ -0,0 +1,304 @@
+package com.mogo.och.sweepercloud.view
+
+import android.content.Context
+import android.graphics.Color
+import android.os.Bundle
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.view.View
+import android.widget.ImageView
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.content.ContextCompat
+import com.amap.api.maps.AMap
+import com.amap.api.maps.CameraUpdateFactory
+import com.amap.api.maps.model.*
+import com.mogo.eagle.core.data.map.MogoLocation
+import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener
+import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
+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.CoordinateUtils
+import com.mogo.eagle.core.utilcode.util.ThreadUtils
+import com.mogo.och.sweepercloud.R
+import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean
+import com.mogo.och.sweepercloud.constant.SweeperConst
+import com.mogo.och.sweepercloud.database.bean.WeltDataBean
+import com.mogo.och.sweepercloud.util.SweeperMapAssetStyleUtil
+import kotlinx.android.synthetic.main.sweeper_welt_small_map_view.view.*
+
+
+/**
+ * 作业任务小地图
+ */
+class WeltSmallMapView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener {
+ private var mTaskCoordinatesLatLng: MutableList = mutableListOf() //当前大任务的所有起终点集合
+ private var mCarMarker: Marker? = null
+ private var mAMap: AMap? = null
+ private var mWeltPolylines: Polyline? = null
+ private var mRoutePolylines: Polyline?=null
+// private val mLineMarkers: MutableList = mutableListOf()
+ private var endStationMarker:Marker? = null
+
+ //清扫车任务地图
+ private val TAG = "WeltMapView"
+
+ constructor(context: Context) : super(context) {}
+ constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
+ initView(context)
+ }
+
+ constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {}
+ constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) {}
+
+ private fun initView(context: Context) {
+ LayoutInflater.from(context).inflate(R.layout.sweeper_welt_small_map_view, this)
+ initAMapView()
+ // 注册定位监听
+ CallerChassisLocationGCJ02ListenerManager.addListener(TAG, this)
+ CallerChassisLocationGCJ02ListenerManager.setListenerHz(TAG,5)
+ }
+
+ override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) {
+ d(SceneConstant.M_SWEEPER + TAG, "mogoLocation:$mogoLocation")
+ ThreadUtils.getSinglePool().run {
+ mogoLocation?.let {
+ val currentLatLng = LatLng(it.latitude, it.longitude)
+ drawCarMarker(mogoLocation)
+ //圈定地图显示范围
+ val boundsBuilder = LatLngBounds.Builder()
+ if (mTaskCoordinatesLatLng.size > 0) {
+ //存放经纬度
+ for (i in mTaskCoordinatesLatLng.indices) {
+ boundsBuilder.include(mTaskCoordinatesLatLng[i])
+ }
+ }
+ mRoutePolylines?.points?.forEach {latLng->
+ boundsBuilder.include(latLng)
+ }
+ boundsBuilder.include(currentLatLng)
+ mAMap!!.moveCamera(CameraUpdateFactory.newLatLngBoundsRect(boundsBuilder.build(), 100, 100, 100, 100))
+ }
+ }
+ }
+
+ /**
+ * 绘制自车
+ *
+ * @param location
+ */
+ private fun drawCarMarker(location: MogoLocation?) {
+ if (location == null) return
+ val currentLatLng = LatLng(location.latitude, location.longitude)
+ //更新车辆位置
+ if (mCarMarker != null) {
+ mCarMarker!!.rotateAngle = (360 - location.heading).toFloat()
+ mCarMarker!!.position = currentLatLng
+ mCarMarker!!.setToTop()
+ }
+ }
+
+ private fun initAMapView() {
+ mAMap = sweeperSmallTextureMapView?.map
+ // 地图文字标注
+ mAMap?.showMapText(true)
+ // 设置导航地图模式,aMap是地图控制器对象。
+ mAMap?.mapType = AMap.MAP_TYPE_NIGHT
+ // 关闭显示实时路况图层,aMap是地图控制器对象。
+ mAMap?.isTrafficEnabled = false
+ // 设置 锚点 图标
+ mCarMarker = mAMap?.addMarker(
+ MarkerOptions()
+ .icon(BitmapDescriptorFactory.fromResource(R.drawable.sweeper_car_small))
+ .anchor(0.5f, 0.5f)
+ )
+ // 设置地图的样式
+ val uiSettings = mAMap?.uiSettings
+ uiSettings?.isZoomControlsEnabled = false // 地图缩放级别的交换按钮
+ uiSettings?.setAllGesturesEnabled(false) // 所有手势
+ uiSettings?.isMyLocationButtonEnabled = false // 显示默认的定位按钮
+ uiSettings?.setLogoBottomMargin(-150) //设置Logo下边界距离屏幕底部的边距,设置为负值即可
+ // 加载自定义样式
+ val customMapStyleOptions = CustomMapStyleOptions()
+ .setEnable(true)
+ .setStyleData(SweeperMapAssetStyleUtil.getAssetsStyle(context, "map_style.data"))
+ .setStyleExtraData(SweeperMapAssetStyleUtil.getAssetsExtraStyle(context, "map_style_extra.data"))
+ // 设置自定义样式
+ mAMap?.setCustomMapStyle(customMapStyleOptions)
+ mAMap?.setOnMapLoadedListener(AMap.OnMapLoadedListener {
+ d(SceneConstant.M_SWEEPER + TAG, "WeltView---onMapLoaded")
+ // 加载自定义样式
+ val customMapStyleOptions = CustomMapStyleOptions()
+ .setEnable(true)
+ .setStyleData(SweeperMapAssetStyleUtil.getAssetsStyle(context, "map_style.data"))
+ .setStyleExtraData(SweeperMapAssetStyleUtil.getAssetsExtraStyle(context, "map_style_extra.data"))
+ // 设置自定义样式
+ mAMap?.setCustomMapStyle(customMapStyleOptions)
+ mAMap?.setPointToCenter(sweeperSmallTextureMapView.width / 2, sweeperSmallTextureMapView.height / 2)
+ })
+ }
+
+ /**
+ * 根据贴边数据绘制任务路线
+ */
+ private fun drawablePolyline(weltDatas: MutableList?) {
+ weltDatas?.let {
+ val colorList = getRouteColorList(it)
+ val coordinatesLatLngs = mutableListOf()
+ for (i in it.indices) {
+ coordinatesLatLngs.add(LatLng(it[i].locLat,it[i].locLon))
+ }
+ if (coordinatesLatLngs.size > 2) {
+ //设置线段纹理
+ mWeltPolylines?.remove()
+ val polylineOptions = PolylineOptions()
+ polylineOptions.addAll(coordinatesLatLngs)
+ polylineOptions.width(14f) //线段宽度
+ polylineOptions.isUseTexture = false
+ polylineOptions.lineCapType(PolylineOptions.LineCapType.LineCapSquare)
+ polylineOptions.colorValues(colorList)
+ polylineOptions.visible(true)
+ // 绘制线
+ mWeltPolylines = mAMap?.addPolyline(polylineOptions)
+ }
+ }
+ }
+
+ /**
+ * 添加画线颜色值
+ */
+ private fun getRouteColorList(weltData: MutableList): MutableList {
+ val colorList = mutableListOf()
+ var nextWeltDataBean:WeltDataBean?=null
+ for (i in weltData.indices) {
+ val weltDataBean = weltData[i]
+ if(i+110){
+ colorList.add(Color.TRANSPARENT)
+ continue
+ }
+ }
+
+ if (weltDataBean.weltDistance == SweeperConst.NONWELT) {//非贴边
+ colorList.add(ContextCompat.getColor(context,R.color.sweeper_236299))
+ } else if (weltDataBean.weltDistance < 0) {
+ colorList.add(ContextCompat.getColor(context,R.color.sweeper_c22101))
+ } else if (weltDataBean.weltDistance >= 0 && weltDataBean.weltDistance < 0.1) {
+ colorList.add(ContextCompat.getColor(context,R.color.sweeper_4dffa4))
+ } else if (weltDataBean.weltDistance >= 0.1 && weltDataBean.weltDistance < 0.2) {
+ colorList.add(ContextCompat.getColor(context,R.color.sweeper_ffdd4d))
+ } else if (weltDataBean.weltDistance >= 0.2) {
+ colorList.add(ContextCompat.getColor(context,R.color.sweeper_ff912b))
+ }
+ }
+ return colorList
+ }
+
+ /**
+ * 设置当前大任务的所有子任务起终点集合
+ */
+ fun setTaskListCoordinatesLatLng(coordinatesLatLng: MutableList) {
+ ThreadUtils.runOnUiThread {
+ this.mTaskCoordinatesLatLng = coordinatesLatLng
+ }
+ }
+
+ /**
+ * 设置当前任务的终点
+ */
+ fun setCurrentTaskCoordinatesLatLng(coordinatesLatLng: LatLng) {
+ ThreadUtils.runOnUiThread {
+ endStationMarker?.remove()
+ endStationMarker = mAMap?.addMarker(MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.sweeper_small_end_marker_icon)))
+ endStationMarker?.position = coordinatesLatLng
+ }
+ }
+
+ /**
+ * 清除所有标记和路线
+ */
+ fun clearAllMarkerAndPolyline() {
+ endStationMarker?.remove()
+ mWeltPolylines?.remove()
+ mRoutePolylines?.remove()
+ }
+
+ fun getSwitchToBig(): ImageView = sweeperSwitchToBig
+ /**
+ * 设置贴边数据
+ */
+ fun setWeltData(weltDatas: MutableList, isWeltData: Boolean, distance: String) {
+ drawablePolyline(weltDatas)
+ ThreadUtils.runOnUiThread {
+ setWeltDistance(distance)
+ }
+ }
+
+ /**
+ * 设置贴边距离
+ */
+ private fun setWeltDistance(distance: String) {
+ taskWeltDistanceTv.text = "贴边:${distance}"
+ }
+
+ /**
+ * 设置任务轨迹数据
+ */
+ fun setRouteList(routeList: ArrayList) {
+ val routeCoordinatesLatLngs = mutableListOf()
+ for (i in routeList.indices) {
+ routeCoordinatesLatLngs.add(LatLng(routeList[i].latitude, routeList[i].longitude))
+ }
+ ThreadUtils.runOnUiThread {
+ drawRouteListPolyline(routeCoordinatesLatLngs)
+ }
+ }
+
+ private fun drawRouteListPolyline(routeList: MutableList) {
+ mRoutePolylines?.remove()
+ val polylineOptions = PolylineOptions()
+ polylineOptions.addAll(routeList)
+ polylineOptions.width(14f) //线段宽度
+ polylineOptions.isUseTexture = false
+ polylineOptions.lineCapType(PolylineOptions.LineCapType.LineCapSquare)
+ polylineOptions.color(ContextCompat.getColor(context,R.color.sweeper_3ba1cc))
+ polylineOptions.visible(true)
+ mRoutePolylines=mAMap?.addPolyline(polylineOptions)
+ }
+
+ /**
+ * 设置任务进度
+ */
+ fun setTaskProgress(progress: String?) {
+ if (progress == "0") {
+ taskWeltDistanceTv.visibility = View.GONE
+ taskProgressTv.visibility = View.GONE
+ } else {
+ taskWeltDistanceTv.visibility = View.VISIBLE
+ taskProgressTv.visibility = View.VISIBLE
+ taskProgressTv.text = progress
+ }
+
+ }
+
+ fun onCreateView(savedInstanceState: Bundle?) {
+ sweeperSmallTextureMapView?.onCreate(savedInstanceState)
+ }
+
+ fun onResume() {
+ sweeperSmallTextureMapView?.onResume()
+ }
+
+ fun onPause() {
+ sweeperSmallTextureMapView?.onPause()
+ }
+
+ fun onDestroy() {
+ sweeperSmallTextureMapView?.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/bg_shape_work_mode.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/bg_shape_work_mode.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/bg_shape_work_mode.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/bg_shape_work_mode.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/bg_sweeper_operate_panel.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/bg_sweeper_operate_panel.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/bg_sweeper_operate_panel.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/bg_sweeper_operate_panel.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/icon_ai_normal.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_ai_normal.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/icon_ai_normal.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_ai_normal.png
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_auto.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_auto.png
new file mode 100755
index 0000000000..b76ce3dd2b
Binary files /dev/null and b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_auto.png differ
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/icon_battery.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_battery.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/icon_battery.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_battery.png
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_manual_driving.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_manual_driving.png
new file mode 100755
index 0000000000..8e1fa65d96
Binary files /dev/null and b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_manual_driving.png differ
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/icon_message_box.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_message_box.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/icon_message_box.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_message_box.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/icon_message_box_pressed.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_message_box_pressed.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/icon_message_box_pressed.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_message_box_pressed.png
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_not_auto.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_not_auto.png
new file mode 100755
index 0000000000..3cb8679a55
Binary files /dev/null and b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_not_auto.png differ
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/icon_right_down_arrow.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_right_down_arrow.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/icon_right_down_arrow.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_right_down_arrow.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/icon_water_level_warning.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_water_level_warning.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/icon_water_level_warning.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_water_level_warning.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/icon_water_nor.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_water_nor.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/icon_water_nor.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_water_nor.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/icon_water_select.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_water_select.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/icon_water_select.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_water_select.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/no_task_data.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/no_task_data.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/no_task_data.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/no_task_data.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_base_slide_block.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_base_slide_block.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_base_slide_block.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_base_slide_block.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_bg_traffic_data.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_bg_traffic_data.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_bg_traffic_data.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_bg_traffic_data.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_bg_traffic_data_speed.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_bg_traffic_data_speed.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_bg_traffic_data_speed.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_bg_traffic_data_speed.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_big_end_maker_icon.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_big_end_maker_icon.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_big_end_maker_icon.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_big_end_maker_icon.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_big_start_maker_icon.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_big_start_maker_icon.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_big_start_maker_icon.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_big_start_maker_icon.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_car_big.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_car_big.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_car_big.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_car_big.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_car_small.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_car_small.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_car_small.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_car_small.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_card_normal.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_card_normal.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_card_normal.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_card_normal.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_card_pressed.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_card_pressed.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_card_pressed.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_card_pressed.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_clean_mode_icon.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_clean_mode_icon.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_clean_mode_icon.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_clean_mode_icon.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_close_navi_icon.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_close_navi_icon.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_close_navi_icon.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_close_navi_icon.png
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_cloud_loading.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_cloud_loading.png
new file mode 100644
index 0000000000..0c2d84f448
Binary files /dev/null and b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_cloud_loading.png differ
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_cloud_rotate.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_cloud_rotate.png
new file mode 100755
index 0000000000..3e49a07b00
Binary files /dev/null and b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_cloud_rotate.png differ
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_cloud_rotation.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_cloud_rotation.png
new file mode 100644
index 0000000000..9f33e0d8dd
Binary files /dev/null and b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_cloud_rotation.png differ
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_cloud_rotation_background.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_cloud_rotation_background.png
new file mode 100755
index 0000000000..8d3650e9ba
Binary files /dev/null and b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_cloud_rotation_background.png differ
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_collect_normal.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_collect_normal.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_collect_normal.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_collect_normal.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_collect_pressed.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_collect_pressed.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_collect_pressed.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_collect_pressed.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_full_screen_icon.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_full_screen_icon.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_full_screen_icon.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_full_screen_icon.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_ai_select.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_icon_ai_select.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_ai_select.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_icon_ai_select.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_bad_case_normal.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_icon_bad_case_normal.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_bad_case_normal.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_icon_bad_case_normal.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_bad_case_select.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_icon_bad_case_select.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_bad_case_select.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_icon_bad_case_select.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_msg_box_close.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_icon_msg_box_close.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_msg_box_close.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_icon_msg_box_close.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_msg_box_open.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_icon_msg_box_open.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_msg_box_open.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_icon_msg_box_open.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_not_select_subtask.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_icon_not_select_subtask.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_not_select_subtask.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_icon_not_select_subtask.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_select_subtask.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_icon_select_subtask.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_select_subtask.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_icon_select_subtask.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_light_gay_nor.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_light_gay_nor.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_light_gay_nor.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_light_gay_nor.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_light_green_nor.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_light_green_nor.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_light_green_nor.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_light_green_nor.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_light_red_nor.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_light_red_nor.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_light_red_nor.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_light_red_nor.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_lightyellow_nor.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_lightyellow_nor.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_lightyellow_nor.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_lightyellow_nor.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_line.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_line.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_line.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_line.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_loading_nor.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_loading_nor.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_loading_nor.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_loading_nor.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_navi_refresh.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_navi_refresh.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_navi_refresh.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_navi_refresh.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_och_dot_line.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_och_dot_line.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_och_dot_line.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_och_dot_line.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_setting_btn_bg.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_setting_btn_bg.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_setting_btn_bg.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_setting_btn_bg.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_setting_normal.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_setting_normal.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_setting_normal.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_setting_normal.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_setting_pressed.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_setting_pressed.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_setting_pressed.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_setting_pressed.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_small_end_marker_icon.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_small_end_marker_icon.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_small_end_marker_icon.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_small_end_marker_icon.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_small_start_marker_icon.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_small_start_marker_icon.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_small_start_marker_icon.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_small_start_marker_icon.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_switch_map_big_normal.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_switch_map_big_normal.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_switch_map_big_normal.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_switch_map_big_normal.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_switch_map_big_pressed.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_switch_map_big_pressed.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_switch_map_big_pressed.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_switch_map_big_pressed.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_switch_map_long.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_switch_map_long.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_switch_map_long.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_switch_map_long.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_switch_map_medium.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_switch_map_medium.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_switch_map_medium.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_switch_map_medium.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_switch_map_small_normal.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_switch_map_small_normal.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_switch_map_small_normal.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_switch_map_small_normal.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_switch_map_small_pressed.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_switch_map_small_pressed.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_switch_map_small_pressed.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_switch_map_small_pressed.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_task_list_left_select_icon.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_task_list_left_select_icon.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_task_list_left_select_icon.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_task_list_left_select_icon.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_task_not_working.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_task_not_working.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_task_not_working.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_task_not_working.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_task_working.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_task_working.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_task_working.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_task_working.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_traffic_data_speed_warning.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_traffic_data_speed_warning.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_traffic_data_speed_warning.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_traffic_data_speed_warning.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_unselect_btn.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_unselect_btn.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_unselect_btn.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_unselect_btn.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/turn_signal_left_nor.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/turn_signal_left_nor.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/turn_signal_left_nor.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/turn_signal_left_nor.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/turn_signal_left_select.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/turn_signal_left_select.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/turn_signal_left_select.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/turn_signal_left_select.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/turn_signal_right_nor.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/turn_signal_right_nor.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/turn_signal_right_nor.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/turn_signal_right_nor.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/turn_signal_right_select.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/turn_signal_right_select.png
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/turn_signal_right_select.png
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/turn_signal_right_select.png
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/bg_bubble.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_bubble.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/bg_bubble.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_bubble.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/bg_shape_clean_mode.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_clean_mode.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/bg_shape_clean_mode.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_clean_mode.xml
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_dialog_cloud_view.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_dialog_cloud_view.xml
new file mode 100644
index 0000000000..a0f105b0ac
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_dialog_cloud_view.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/bg_shape_dialog_no_title.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_dialog_no_title.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/bg_shape_dialog_no_title.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_dialog_no_title.xml
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_left_bottom_round.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_left_bottom_round.xml
new file mode 100644
index 0000000000..5d247295b3
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_left_bottom_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/bg_shape_left_right_bottom_round.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_left_right_bottom_round.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/bg_shape_left_right_bottom_round.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_left_right_bottom_round.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/bg_shape_right_bottom_round.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_right_bottom_round.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/bg_shape_right_bottom_round.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_right_bottom_round.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/bg_shape_task_panel.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_task_panel.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/bg_shape_task_panel.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_task_panel.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/bg_shape_task_state_not_ready.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_task_state_not_ready.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/bg_shape_task_state_not_ready.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_task_state_not_ready.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/bg_shape_task_state_working.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_task_state_working.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/bg_shape_task_state_working.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_task_state_working.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/bg_shape_welt_panel.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_welt_panel.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/bg_shape_welt_panel.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_welt_panel.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_close.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_sweeper_operate_panel_btn_close.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_close.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_sweeper_operate_panel_btn_close.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_default.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_sweeper_operate_panel_btn_default.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_default.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_sweeper_operate_panel_btn_default.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_disabled.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_sweeper_operate_panel_btn_disabled.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_disabled.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_sweeper_operate_panel_btn_disabled.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_open.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_sweeper_operate_panel_btn_open.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_open.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_sweeper_operate_panel_btn_open.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_pressed.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_sweeper_operate_panel_btn_pressed.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_pressed.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_sweeper_operate_panel_btn_pressed.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/bg_task_menu.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_task_menu.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/bg_task_menu.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_task_menu.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/icon_more.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/icon_more.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/icon_more.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/icon_more.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_ai_collect_selector.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_ai_collect_selector.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_ai_collect_selector.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_ai_collect_selector.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_bad_case_selector.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_bad_case_selector.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_bad_case_selector.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_bad_case_selector.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_bg_waring_limiting_velocity.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_bg_waring_limiting_velocity.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_bg_waring_limiting_velocity.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_bg_waring_limiting_velocity.xml
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_cloud_rotation_layer.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_cloud_rotation_layer.xml
new file mode 100644
index 0000000000..b4793b37ad
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_cloud_rotation_layer.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_collect_selector.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_collect_selector.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_collect_selector.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_collect_selector.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_legend1.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_legend1.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_legend1.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_legend1.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_legend2.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_legend2.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_legend2.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_legend2.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_legend3.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_legend3.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_legend3.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_legend3.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_legend4.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_legend4.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_legend4.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_legend4.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_legend5.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_legend5.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_legend5.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_legend5.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_legend6.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_legend6.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_legend6.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_legend6.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_list_left_top_line.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_list_left_top_line.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_list_left_top_line.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_list_left_top_line.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_message_box.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_message_box.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_message_box.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_message_box.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_operate_panel_btn1_bg_selector.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_operate_panel_btn1_bg_selector.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_operate_panel_btn1_bg_selector.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_operate_panel_btn1_bg_selector.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_operate_panel_btn2_bg_selector.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_operate_panel_btn2_bg_selector.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_operate_panel_btn2_bg_selector.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_operate_panel_btn2_bg_selector.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_operation_status_bg.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_operation_status_bg.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_operation_status_bg.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_operation_status_bg.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_operation_status_bg_selector.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_operation_status_bg_selector.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_operation_status_bg_selector.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_operation_status_bg_selector.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_operation_status_select_bg.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_operation_status_select_bg.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_operation_status_select_bg.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_operation_status_select_bg.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_oprate_panel_cancel_btn.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_oprate_panel_cancel_btn.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_oprate_panel_cancel_btn.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_oprate_panel_cancel_btn.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_oprate_panel_reset_btn.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_oprate_panel_reset_btn.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_oprate_panel_reset_btn.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_oprate_panel_reset_btn.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_panel_anchor_bkg.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_panel_anchor_bkg.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_panel_anchor_bkg.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_panel_anchor_bkg.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_panel_bkg.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_panel_bkg.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_panel_bkg.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_panel_bkg.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_refresh.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_refresh.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_refresh.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_refresh.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_selector_msg_box.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_selector_msg_box.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_selector_msg_box.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_selector_msg_box.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_setting_selector.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_setting_selector.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_setting_selector.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_setting_selector.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_station_green_dash_line.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_station_green_dash_line.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_station_green_dash_line.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_station_green_dash_line.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_station_v_green_dash.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_station_v_green_dash.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_station_v_green_dash.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_station_v_green_dash.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_switch_card_selector.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_switch_card_selector.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_switch_card_selector.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_switch_card_selector.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_switch_map_bg.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_switch_map_bg.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_switch_map_bg.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_switch_map_bg.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_switch_map_big_selector.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_switch_map_big_selector.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_switch_map_big_selector.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_switch_map_big_selector.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_switch_map_small_selector.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_switch_map_small_selector.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_switch_map_small_selector.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_switch_map_small_selector.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_task_dividing_line1_selector.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_task_dividing_line1_selector.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_task_dividing_line1_selector.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_task_dividing_line1_selector.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_task_dividing_line2_selector.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_task_dividing_line2_selector.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_task_dividing_line2_selector.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_task_dividing_line2_selector.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_task_list_selected.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_upload_autopoiltstate.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_task_list_selected.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_upload_autopoiltstate.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_water_selector.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_water_selector.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_water_selector.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_water_selector.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/turn_signal_left_selector.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/turn_signal_left_selector.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/turn_signal_left_selector.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/turn_signal_left_selector.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/turn_signal_right_selector.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/turn_signal_right_selector.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/turn_signal_right_selector.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/drawable/turn_signal_right_selector.xml
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/layout/dialog_sweeper_cloud_loading.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/dialog_sweeper_cloud_loading.xml
new file mode 100644
index 0000000000..c2154df812
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/res/layout/dialog_sweeper_cloud_loading.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/layout/dialog_sweeper_cloud_view.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/dialog_sweeper_cloud_view.xml
new file mode 100644
index 0000000000..a0b0c6a17b
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/res/layout/dialog_sweeper_cloud_view.xml
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/dialog_sweeper_manual_driving.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/dialog_sweeper_manual_driving.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/layout/dialog_sweeper_manual_driving.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/layout/dialog_sweeper_manual_driving.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/dialog_sweeper_no_title.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/dialog_sweeper_no_title.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/layout/dialog_sweeper_no_title.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/layout/dialog_sweeper_no_title.xml
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/layout/fragment_och_sweeper.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/fragment_och_sweeper.xml
new file mode 100644
index 0000000000..0c276dceb1
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/res/layout/fragment_och_sweeper.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/layout/fragment_welt_map_overview.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/fragment_welt_map_overview.xml
new file mode 100644
index 0000000000..b59e5e23eb
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/res/layout/fragment_welt_map_overview.xml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_amap_navi_view.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_amap_navi_view.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/layout/sweeper_amap_navi_view.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_amap_navi_view.xml
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_base_fragment.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_base_fragment.xml
new file mode 100644
index 0000000000..f600703e61
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_base_fragment.xml
@@ -0,0 +1,269 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_current_task_info.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_current_task_info.xml
new file mode 100644
index 0000000000..9466b14dee
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_current_task_info.xml
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_item_legend.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_item_legend.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/layout/sweeper_item_legend.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_item_legend.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_item_task_info.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_item_task_info.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/layout/sweeper_item_task_info.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_item_task_info.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_limiting_speed.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_limiting_speed.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/layout/sweeper_limiting_speed.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_limiting_speed.xml
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_no_data_common_view.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_no_data_common_view.xml
new file mode 100644
index 0000000000..44030efcc0
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_no_data_common_view.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_operate_panel_view.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_operate_panel_view.xml
new file mode 100644
index 0000000000..5312020968
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_operate_panel_view.xml
@@ -0,0 +1,298 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_popwindow_operate_panel.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_popwindow_operate_panel.xml
new file mode 100644
index 0000000000..037aee6855
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_popwindow_operate_panel.xml
@@ -0,0 +1,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_subtask_view.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_subtask_view.xml
new file mode 100644
index 0000000000..c6e2fad4a0
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_subtask_view.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_task_menu.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_task_menu.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/layout/sweeper_task_menu.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_task_menu.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_test_bar_view.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_test_bar_view.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/layout/sweeper_test_bar_view.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_test_bar_view.xml
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_traffic_data.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_traffic_data.xml
new file mode 100644
index 0000000000..17e9645c22
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_traffic_data.xml
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_traffic_light_view.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_traffic_light_view.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/layout/sweeper_traffic_light_view.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_traffic_light_view.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_turn_signal.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_turn_signal.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/layout/sweeper_turn_signal.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_turn_signal.xml
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_welt_map_overview.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_welt_map_overview.xml
new file mode 100644
index 0000000000..e51070b285
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_welt_map_overview.xml
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_welt_small_map_view.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_welt_small_map_view.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/layout/sweeper_welt_small_map_view.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_welt_small_map_view.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_work_mode.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_work_mode.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/layout/sweeper_work_mode.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_work_mode.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/values/attrs.xml b/OCH/sweeper/sweeper-cloud/src/main/res/values/attrs.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/values/attrs.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/values/attrs.xml
diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/values/colors.xml b/OCH/sweeper/sweeper-cloud/src/main/res/values/colors.xml
new file mode 100644
index 0000000000..6701ff7dec
--- /dev/null
+++ b/OCH/sweeper/sweeper-cloud/src/main/res/values/colors.xml
@@ -0,0 +1,65 @@
+
+
+ #FF1FA7FF
+ #FFFFFFFF
+ #FFFFFFFF
+ #FF51649D
+ #7F8299EB
+
+ #51649D
+ #427d8e
+ #1FA7FF
+ #3FC281
+ #427d8e
+ #3FC281
+
+ #FFFFFF
+ #99FFFFFF
+ #FF52BBFF
+
+ #BF30334C
+ #fff
+ #f1f1f1
+
+ #7DE261
+ #FF2B2B
+ #E3BC59
+ #FFF
+ #256BFF
+ #FFFFFF
+
+ #DB3137
+ #3E77F6
+ #323C6F
+
+ #19FFFFFF
+ #FFFFFF
+
+ #FFFFA28B
+ #FFDA1100
+ #FF60FFD3
+ #FF006D43
+ #FFFFE198
+ #FFFF9B00
+
+ #7DE261
+ #f00
+ #BF30334C
+ #548DB8
+ #1FA7FF
+ #3769B5
+ #BF30334C
+
+
+ #C22101
+
+ #4DFFA4
+
+ #FFDD4D
+
+ #FF912B
+
+ #236299
+
+ #3BA1CC
+
\ No newline at end of file
diff --git a/OCH/mogo-och-sweeper/src/main/res/values/dimens.xml b/OCH/sweeper/sweeper-cloud/src/main/res/values/dimens.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/values/dimens.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/values/dimens.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/values/strings.xml b/OCH/sweeper/sweeper-cloud/src/main/res/values/strings.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/values/strings.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/values/strings.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/values/style.xml b/OCH/sweeper/sweeper-cloud/src/main/res/values/style.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/values/style.xml
rename to OCH/sweeper/sweeper-cloud/src/main/res/values/style.xml
diff --git a/OCH/mogo-och-sweeper/src/test/java/com/mogo/och/sweeper/ExampleUnitTest.kt b/OCH/sweeper/sweeper-cloud/src/test/java/com/mogo/och/sweeper/ExampleUnitTest.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/test/java/com/mogo/och/sweeper/ExampleUnitTest.kt
rename to OCH/sweeper/sweeper-cloud/src/test/java/com/mogo/och/sweeper/ExampleUnitTest.kt
diff --git a/OCH/sweeper/sweeper/.gitignore b/OCH/sweeper/sweeper/.gitignore
new file mode 100644
index 0000000000..42afabfd2a
--- /dev/null
+++ b/OCH/sweeper/sweeper/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/build.gradle b/OCH/sweeper/sweeper/build.gradle
new file mode 100644
index 0000000000..30fb36674e
--- /dev/null
+++ b/OCH/sweeper/sweeper/build.gradle
@@ -0,0 +1,68 @@
+apply plugin: 'com.android.library'
+apply plugin: 'com.alibaba.arouter'
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-android-extensions'
+
+android {
+ compileSdkVersion rootProject.ext.android.compileSdkVersion
+ // buildToolsVersion rootProject.ext.android.buildToolsVersion
+ defaultConfig {
+ minSdkVersion rootProject.ext.android.minSdkVersion
+ targetSdkVersion rootProject.ext.android.targetSdkVersion
+ versionCode Integer.valueOf(VERSION_CODE)
+ versionName getValueFromRootProperties("${project.name.replace("-", "_").toUpperCase()}_VERSION")
+
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles "consumer-rules.pro"
+
+ javaCompileOptions {
+ annotationProcessorOptions {
+ arguments = [AROUTER_MODULE_NAME: project.getName(),"room.schemaLocation": "$projectDir/schemas".toString()]
+ }
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ lintOptions {
+ abortOnError false
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ debug {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: "libs", include: ["*.jar"])
+ implementation rootProject.ext.dependencies.kotlinstdlibjdk7
+ implementation rootProject.ext.dependencies.androidxappcompat
+ implementation rootProject.ext.dependencies.arouter
+ annotationProcessor rootProject.ext.dependencies.aroutercompiler
+ implementation rootProject.ext.dependencies.androidxconstraintlayout
+ implementation rootProject.ext.dependencies.amapnavi3dmap
+
+ implementation rootProject.ext.dependencies.rxjava
+ implementation rootProject.ext.dependencies.rxandroid
+ implementation rootProject.ext.dependencies.androidxrecyclerview
+ implementation rootProject.ext.dependencies.androidxcardview
+ implementation rootProject.ext.dependencies.androidxroomruntime
+ annotationProcessor rootProject.ext.dependencies.androidxroomcompiler
+
+ implementation project(":OCH:mogo-och-common-module")
+ compileOnly project(":libraries:mogo-map")
+
+}
+
+apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/gradle.properties b/OCH/sweeper/sweeper/gradle.properties
new file mode 100644
index 0000000000..6153f2df71
--- /dev/null
+++ b/OCH/sweeper/sweeper/gradle.properties
@@ -0,0 +1,3 @@
+GROUP=com.mogo.och
+POM_ARTIFACT_ID=och-sweeper
+VERSION_CODE=1
diff --git a/app_ipc_monitoring/proguard-rules.pro b/OCH/sweeper/sweeper/proguard-rules.pro
similarity index 85%
rename from app_ipc_monitoring/proguard-rules.pro
rename to OCH/sweeper/sweeper/proguard-rules.pro
index f10712073b..481bb43481 100644
--- a/app_ipc_monitoring/proguard-rules.pro
+++ b/OCH/sweeper/sweeper/proguard-rules.pro
@@ -18,9 +18,4 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
-#-renamesourcefileattribute SourceFile
-
-#-----MogoMap-----
--keep class com.mogo.map.MogoNavi{
- private ();
-}
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/androidTest/java/com/mogo/och/sweeper/ExampleInstrumentedTest.kt b/OCH/sweeper/sweeper/src/androidTest/java/com/mogo/och/sweeper/ExampleInstrumentedTest.kt
new file mode 100644
index 0000000000..ccebc3709a
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/androidTest/java/com/mogo/och/sweeper/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package com.mogo.och.sweeper
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("com.mogo.och.sweeper", appContext.packageName)
+ }
+}
\ No newline at end of file
diff --git a/OCH/mogo-och-sweeper/src/main/AndroidManifest.xml b/OCH/sweeper/sweeper/src/main/AndroidManifest.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/AndroidManifest.xml
rename to OCH/sweeper/sweeper/src/main/AndroidManifest.xml
diff --git a/OCH/sweeper/sweeper/src/main/assets/map_style.data b/OCH/sweeper/sweeper/src/main/assets/map_style.data
new file mode 100644
index 0000000000..b200669659
Binary files /dev/null and b/OCH/sweeper/sweeper/src/main/assets/map_style.data differ
diff --git a/OCH/sweeper/sweeper/src/main/assets/map_style_extra.data b/OCH/sweeper/sweeper/src/main/assets/map_style_extra.data
new file mode 100644
index 0000000000..7aa8fa7b45
Binary files /dev/null and b/OCH/sweeper/sweeper/src/main/assets/map_style_extra.data differ
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/IMogoOCH.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/IMogoOCH.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/IMogoOCH.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/IMogoOCH.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/SweeperProvider.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/SweeperProvider.java
similarity index 98%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/SweeperProvider.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/SweeperProvider.java
index 6d8ef217fe..4691f4f95b 100644
--- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/SweeperProvider.java
+++ b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/SweeperProvider.java
@@ -9,7 +9,6 @@ import androidx.fragment.app.FragmentManager;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
-import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.och.sweeper.constant.SweeperConst;
import com.mogo.och.sweeper.fragment.SweeperFragment;
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/bean/BaseResponse.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/bean/BaseResponse.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/bean/BaseResponse.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/bean/BaseResponse.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/bean/SubStartRequest.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/bean/SubStartRequest.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/bean/SubStartRequest.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/bean/SubStartRequest.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperMainTaskBean.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperMainTaskBean.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperMainTaskBean.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperMainTaskBean.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperRoutePlanningUpdateReqBean.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperRoutePlanningUpdateReqBean.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperRoutePlanningUpdateReqBean.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperRoutePlanningUpdateReqBean.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperSubTaskBean.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperSubTaskBean.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperSubTaskBean.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperSubTaskBean.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperSubTaskDetailBean.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperSubTaskDetailBean.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperSubTaskDetailBean.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperSubTaskDetailBean.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/callback/ICleaningModeStateCallback.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/callback/ICleaningModeStateCallback.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/callback/ICleaningModeStateCallback.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/callback/ICleaningModeStateCallback.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperADASStatusCallback.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperADASStatusCallback.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperADASStatusCallback.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperADASStatusCallback.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperControllerStatusCallback.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperControllerStatusCallback.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperControllerStatusCallback.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperControllerStatusCallback.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperTaskCallback.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperTaskCallback.kt
similarity index 96%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperTaskCallback.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperTaskCallback.kt
index 182d0b9c4f..377eb91145 100644
--- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperTaskCallback.kt
+++ b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperTaskCallback.kt
@@ -36,7 +36,7 @@ interface ISweeperTaskCallback {
/**
* 获取子任务详情包括轨迹信息
*/
- fun setSubTakDetail(subTaskDetailBean: SweeperSubTaskDetailBean,subTaskTypeEnum: SubTaskTypeEnum)
+ fun setSubTakDetail(subTaskDetailBean: SweeperSubTaskDetailBean, subTaskTypeEnum: SubTaskTypeEnum)
/**
* 设置轨迹坐标点集合
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperTaskDataToFragmentCallback.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperTaskDataToFragmentCallback.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperTaskDataToFragmentCallback.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperTaskDataToFragmentCallback.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperTaskRouteCallback.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperTaskRouteCallback.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperTaskRouteCallback.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperTaskRouteCallback.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/callback/IWeltMapSwitchToSmallCallback.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/callback/IWeltMapSwitchToSmallCallback.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/callback/IWeltMapSwitchToSmallCallback.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/callback/IWeltMapSwitchToSmallCallback.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/constant/OperateStateEnum.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/constant/OperateStateEnum.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/constant/OperateStateEnum.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/constant/OperateStateEnum.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/constant/SubTaskTypeEnum.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/constant/SubTaskTypeEnum.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/constant/SubTaskTypeEnum.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/constant/SubTaskTypeEnum.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/constant/SweeperConst.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/constant/SweeperConst.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/constant/SweeperConst.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/constant/SweeperConst.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/constant/TaskStatusEnum.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/constant/TaskStatusEnum.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/constant/TaskStatusEnum.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/constant/TaskStatusEnum.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/database/MyDataBase.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/database/MyDataBase.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/database/MyDataBase.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/database/MyDataBase.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/database/bean/WeltDataBean.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/database/bean/WeltDataBean.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/database/bean/WeltDataBean.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/database/bean/WeltDataBean.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/database/dao/WeltDataDao.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/database/dao/WeltDataDao.java
similarity index 96%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/database/dao/WeltDataDao.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/database/dao/WeltDataDao.java
index 7647d29a08..097be3af3e 100644
--- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/database/dao/WeltDataDao.java
+++ b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/database/dao/WeltDataDao.java
@@ -2,7 +2,6 @@ package com.mogo.och.sweeper.database.dao;
import com.mogo.och.sweeper.database.bean.WeltDataBean;
-import java.util.ArrayList;
import java.util.List;
import androidx.room.Dao;
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/event/WeltDataEvent.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/event/WeltDataEvent.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/event/WeltDataEvent.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/event/WeltDataEvent.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java
similarity index 99%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java
index 274f62d862..5832c58081 100644
--- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java
+++ b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java
@@ -42,7 +42,6 @@ import com.mogo.och.sweeper.view.WeltSmallMapView;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
-import java.util.List;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperUIFragment.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperUIFragment.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperUIFragment.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperUIFragment.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/SweeperAmapNaviFragment.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/fragment/SweeperAmapNaviFragment.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/SweeperAmapNaviFragment.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/fragment/SweeperAmapNaviFragment.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/SweeperFragment.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/fragment/SweeperFragment.kt
similarity index 99%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/SweeperFragment.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/fragment/SweeperFragment.kt
index 79b6a19381..de0eae391b 100644
--- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/SweeperFragment.kt
+++ b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/fragment/SweeperFragment.kt
@@ -3,7 +3,6 @@ package com.mogo.och.sweeper.fragment
import android.graphics.Color
import android.os.Bundle
import android.view.View
-import android.view.View.OnClickListener
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import chassis.ChassisStatesOuterClass
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/WeltMapOverViewFragment.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/fragment/WeltMapOverViewFragment.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/WeltMapOverViewFragment.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/fragment/WeltMapOverViewFragment.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/model/SweeperTaskModel.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/model/SweeperTaskModel.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/model/SweeperTaskModel.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/model/SweeperTaskModel.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/ISweeperApiService.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/net/ISweeperApiService.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/ISweeperApiService.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/net/ISweeperApiService.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/SweeperServiceManager.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/net/SweeperServiceManager.kt
similarity index 99%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/SweeperServiceManager.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/net/SweeperServiceManager.kt
index 118807dbb7..7ded92408d 100644
--- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/SweeperServiceManager.kt
+++ b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/net/SweeperServiceManager.kt
@@ -15,7 +15,7 @@ import com.mogo.och.sweeper.model.SweeperTaskModel
object SweeperServiceManager {
private val TAG = SweeperTaskModel::class.java.simpleName
- private val mService: ISweeperApiService = MoGoRetrofitFactory.getInstance(OchCommonConst.getBaseUrl()).create(
+ private val mService: ISweeperApiService = MoGoRetrofitFactory.getInstance(OchCommonConst.getSweeperUrl()).create(
ISweeperApiService::class.java
)
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/receiver/TestSweeperBroadcastReceiver.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/receiver/TestSweeperBroadcastReceiver.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/receiver/TestSweeperBroadcastReceiver.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/receiver/TestSweeperBroadcastReceiver.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/ui/SweeperOperatePanelView.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/ui/SweeperOperatePanelView.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/ui/SweeperOperatePanelView.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/ui/SweeperOperatePanelView.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/ui/adapter/TaskListAdapter.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/ui/adapter/TaskListAdapter.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/ui/adapter/TaskListAdapter.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/ui/adapter/TaskListAdapter.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/ui/dialog/SweeperManualDrivingDialog.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/ui/dialog/SweeperManualDrivingDialog.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/ui/dialog/SweeperManualDrivingDialog.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/ui/dialog/SweeperManualDrivingDialog.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/ui/dialog/SweeperNoTitleCommonDialog.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/ui/dialog/SweeperNoTitleCommonDialog.kt
similarity index 98%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/ui/dialog/SweeperNoTitleCommonDialog.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/ui/dialog/SweeperNoTitleCommonDialog.kt
index 4f05e7cee9..57618ccb5f 100644
--- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/ui/dialog/SweeperNoTitleCommonDialog.kt
+++ b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/ui/dialog/SweeperNoTitleCommonDialog.kt
@@ -1,6 +1,5 @@
package com.mogo.och.sweeper.ui.dialog
-import android.annotation.SuppressLint
import android.content.Context
import android.widget.TextView
import androidx.lifecycle.LifecycleObserver
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/ui/popwindow/MenuPopWindow.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/ui/popwindow/MenuPopWindow.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/ui/popwindow/MenuPopWindow.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/ui/popwindow/MenuPopWindow.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/ui/popwindow/SweeperOperatePanelPopWindow.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/ui/popwindow/SweeperOperatePanelPopWindow.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/ui/popwindow/SweeperOperatePanelPopWindow.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/ui/popwindow/SweeperOperatePanelPopWindow.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/util/SweeperAnalyticsManager.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/util/SweeperAnalyticsManager.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/util/SweeperAnalyticsManager.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/util/SweeperAnalyticsManager.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/util/SweeperFutianCmdUtil.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/util/SweeperFutianCmdUtil.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/util/SweeperFutianCmdUtil.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/util/SweeperFutianCmdUtil.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/util/SweeperMapAssetStyleUtil.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/util/SweeperMapAssetStyleUtil.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/util/SweeperMapAssetStyleUtil.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/util/SweeperMapAssetStyleUtil.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/util/SweeperTrajectoryManager.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/util/SweeperTrajectoryManager.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/util/SweeperTrajectoryManager.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/util/SweeperTrajectoryManager.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/BusArcView.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/BusArcView.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/BusArcView.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/BusArcView.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/LegendItemView.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/LegendItemView.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/LegendItemView.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/LegendItemView.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/NoTouchConstraintLayout.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/NoTouchConstraintLayout.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/NoTouchConstraintLayout.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/NoTouchConstraintLayout.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/NoTouchFrameLayout.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/NoTouchFrameLayout.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/NoTouchFrameLayout.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/NoTouchFrameLayout.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SlidePanelView.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/SlidePanelView.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SlidePanelView.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/SlidePanelView.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SubTaskView.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/SubTaskView.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SubTaskView.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/SubTaskView.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperCurrentTaskInfoView.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperCurrentTaskInfoView.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperCurrentTaskInfoView.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperCurrentTaskInfoView.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperLimitingVelocityView.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperLimitingVelocityView.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperLimitingVelocityView.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperLimitingVelocityView.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperTrafficDataView.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperTrafficDataView.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperTrafficDataView.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperTrafficDataView.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperTrafficLightView.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperTrafficLightView.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperTrafficLightView.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperTrafficLightView.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperWorkModeView.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperWorkModeView.kt
similarity index 99%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperWorkModeView.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperWorkModeView.kt
index eb90c33411..fae8cfd18f 100644
--- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperWorkModeView.kt
+++ b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperWorkModeView.kt
@@ -20,7 +20,8 @@ import kotlinx.android.synthetic.main.sweeper_work_mode.view.*
/**
* 清扫车模式信息展示
*/
-class SweeperWorkModeView : ConstraintLayout, ICleaningModeStateCallback {
+class SweeperWorkModeView : ConstraintLayout,
+ ICleaningModeStateCallback {
private var isSelectPureSweepMode: Boolean = false
private val TAG = "SweeperWorkModeView"
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/TurnSignalView.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/TurnSignalView.kt
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/TurnSignalView.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/TurnSignalView.kt
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/VerticalDashLineView.java b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/VerticalDashLineView.java
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/VerticalDashLineView.java
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/VerticalDashLineView.java
diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/WeltMapOverView.kt b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/WeltMapOverView.kt
similarity index 99%
rename from OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/WeltMapOverView.kt
rename to OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/WeltMapOverView.kt
index 6092a9029c..438b14b0e9 100644
--- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/WeltMapOverView.kt
+++ b/OCH/sweeper/sweeper/src/main/java/com/mogo/och/sweeper/view/WeltMapOverView.kt
@@ -110,7 +110,7 @@ class WeltMapOverView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener {
*/
private fun getRouteColorList(weltData: MutableList):MutableList {
val colorList= mutableListOf()
- var nextWeltDataBean:WeltDataBean?=null
+ var nextWeltDataBean: WeltDataBean?=null
for (i in weltData.indices) {
val weltDataBean = weltData[i]
if(i+1): MutableList {
val colorList = mutableListOf()
- var nextWeltDataBean:WeltDataBean?=null
+ var nextWeltDataBean: WeltDataBean?=null
for (i in weltData.indices) {
val weltDataBean = weltData[i]
if(i+1
+
+ -
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_clean_mode.xml b/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_clean_mode.xml
new file mode 100644
index 0000000000..57588e065f
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_clean_mode.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_dialog_no_title.xml b/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_dialog_no_title.xml
new file mode 100644
index 0000000000..e6970921d5
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_dialog_no_title.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/bg_shape_left_bottom_round.xml b/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_left_bottom_round.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/bg_shape_left_bottom_round.xml
rename to OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_left_bottom_round.xml
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_left_right_bottom_round.xml b/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_left_right_bottom_round.xml
new file mode 100644
index 0000000000..bd0ab9d1e1
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_left_right_bottom_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_right_bottom_round.xml b/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_right_bottom_round.xml
new file mode 100644
index 0000000000..7fc3db37cc
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_right_bottom_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_task_panel.xml b/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_task_panel.xml
new file mode 100644
index 0000000000..3a6f72848e
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_task_panel.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_task_state_not_ready.xml b/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_task_state_not_ready.xml
new file mode 100644
index 0000000000..c808b231e8
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_task_state_not_ready.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_task_state_working.xml b/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_task_state_working.xml
new file mode 100644
index 0000000000..ad4e25124f
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_task_state_working.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app_ipc_monitoring/src/main/res/drawable/bg_special_vehicle_float.xml b/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_welt_panel.xml
similarity index 53%
rename from app_ipc_monitoring/src/main/res/drawable/bg_special_vehicle_float.xml
rename to OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_welt_panel.xml
index f234ac57f3..a6c900aa78 100644
--- a/app_ipc_monitoring/src/main/res/drawable/bg_special_vehicle_float.xml
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/bg_shape_welt_panel.xml
@@ -1,7 +1,6 @@
-
-
-
-
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_close.xml b/OCH/sweeper/sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_close.xml
new file mode 100644
index 0000000000..8455e0cafb
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_close.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_default.xml b/OCH/sweeper/sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_default.xml
new file mode 100644
index 0000000000..3de0910dcd
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_default.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_disabled.xml b/OCH/sweeper/sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_disabled.xml
new file mode 100644
index 0000000000..16e880f1a2
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_disabled.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_open.xml b/OCH/sweeper/sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_open.xml
new file mode 100644
index 0000000000..ec0eeb317b
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_open.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_pressed.xml b/OCH/sweeper/sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_pressed.xml
new file mode 100644
index 0000000000..4e57ba75b0
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/bg_sweeper_operate_panel_btn_pressed.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/bg_task_menu.xml b/OCH/sweeper/sweeper/src/main/res/drawable/bg_task_menu.xml
new file mode 100644
index 0000000000..1df3248028
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/bg_task_menu.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/icon_more.xml b/OCH/sweeper/sweeper/src/main/res/drawable/icon_more.xml
new file mode 100644
index 0000000000..3d348cf41a
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/icon_more.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_ai_collect_selector.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_ai_collect_selector.xml
new file mode 100755
index 0000000000..b0d14bd0c6
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_ai_collect_selector.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_bad_case_selector.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_bad_case_selector.xml
new file mode 100755
index 0000000000..0ad963da07
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_bad_case_selector.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_bg_waring_limiting_velocity.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_bg_waring_limiting_velocity.xml
new file mode 100644
index 0000000000..fe190c59ee
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_bg_waring_limiting_velocity.xml
@@ -0,0 +1,21 @@
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_collect_selector.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_collect_selector.xml
new file mode 100644
index 0000000000..8ed41c58fb
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_collect_selector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_legend1.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_legend1.xml
new file mode 100644
index 0000000000..3698943bc9
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_legend1.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_legend2.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_legend2.xml
new file mode 100644
index 0000000000..d521b0a45d
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_legend2.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_legend3.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_legend3.xml
new file mode 100644
index 0000000000..59edb172fa
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_legend3.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_legend4.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_legend4.xml
new file mode 100644
index 0000000000..2a4efb7072
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_legend4.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_legend5.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_legend5.xml
new file mode 100644
index 0000000000..c3ac48e545
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_legend5.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_legend6.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_legend6.xml
new file mode 100644
index 0000000000..a8b8ac1b06
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_legend6.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_list_left_top_line.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_list_left_top_line.xml
new file mode 100644
index 0000000000..9d92ddd223
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_list_left_top_line.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_message_box.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_message_box.xml
new file mode 100644
index 0000000000..64c1e9d72e
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_message_box.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_operate_panel_btn1_bg_selector.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_operate_panel_btn1_bg_selector.xml
new file mode 100644
index 0000000000..ba7719ba91
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_operate_panel_btn1_bg_selector.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_operate_panel_btn2_bg_selector.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_operate_panel_btn2_bg_selector.xml
new file mode 100755
index 0000000000..c51538216c
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_operate_panel_btn2_bg_selector.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_operation_status_bg.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_operation_status_bg.xml
new file mode 100644
index 0000000000..4d612cb98f
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_operation_status_bg.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_operation_status_bg_selector.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_operation_status_bg_selector.xml
new file mode 100755
index 0000000000..996c623455
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_operation_status_bg_selector.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_operation_status_select_bg.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_operation_status_select_bg.xml
new file mode 100644
index 0000000000..647222f919
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_operation_status_select_bg.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_oprate_panel_cancel_btn.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_oprate_panel_cancel_btn.xml
new file mode 100644
index 0000000000..7728783fa7
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_oprate_panel_cancel_btn.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_oprate_panel_reset_btn.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_oprate_panel_reset_btn.xml
new file mode 100644
index 0000000000..a0be0f0b9e
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_oprate_panel_reset_btn.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_panel_anchor_bkg.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_panel_anchor_bkg.xml
new file mode 100644
index 0000000000..21b39b7e37
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_panel_anchor_bkg.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_panel_bkg.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_panel_bkg.xml
new file mode 100644
index 0000000000..69539ed40f
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_panel_bkg.xml
@@ -0,0 +1,19 @@
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_refresh.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_refresh.xml
new file mode 100644
index 0000000000..58e3089f6f
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_refresh.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_selector_msg_box.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_selector_msg_box.xml
new file mode 100644
index 0000000000..142a5bc514
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_selector_msg_box.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_setting_selector.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_setting_selector.xml
new file mode 100644
index 0000000000..a6d5c8df82
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_setting_selector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_station_green_dash_line.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_station_green_dash_line.xml
new file mode 100644
index 0000000000..ff80eb9103
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_station_green_dash_line.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_station_v_green_dash.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_station_v_green_dash.xml
new file mode 100644
index 0000000000..f43c213363
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_station_v_green_dash.xml
@@ -0,0 +1,11 @@
+
+
+ -
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_switch_card_selector.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_switch_card_selector.xml
new file mode 100644
index 0000000000..70950d6361
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_switch_card_selector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_switch_map_bg.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_switch_map_bg.xml
new file mode 100644
index 0000000000..943ebcac05
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_switch_map_bg.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_switch_map_big_selector.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_switch_map_big_selector.xml
new file mode 100644
index 0000000000..9acad62868
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_switch_map_big_selector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_switch_map_small_selector.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_switch_map_small_selector.xml
new file mode 100644
index 0000000000..3a4b699d93
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_switch_map_small_selector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_task_dividing_line1_selector.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_task_dividing_line1_selector.xml
new file mode 100644
index 0000000000..b00fbd8bd6
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_task_dividing_line1_selector.xml
@@ -0,0 +1,8 @@
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_task_dividing_line2_selector.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_task_dividing_line2_selector.xml
new file mode 100644
index 0000000000..55353f3ca8
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_task_dividing_line2_selector.xml
@@ -0,0 +1,8 @@
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_task_list_btn.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_task_list_btn.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_task_list_btn.xml
rename to OCH/sweeper/sweeper/src/main/res/drawable/sweeper_task_list_btn.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_task_list_not_selected.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_task_list_not_selected.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/drawable/sweeper_task_list_not_selected.xml
rename to OCH/sweeper/sweeper/src/main/res/drawable/sweeper_task_list_not_selected.xml
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_task_list_selected.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_task_list_selected.xml
new file mode 100644
index 0000000000..6d189929bc
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_task_list_selected.xml
@@ -0,0 +1,10 @@
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_water_selector.xml b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_water_selector.xml
new file mode 100755
index 0000000000..9c959df076
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/sweeper_water_selector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/turn_signal_left_selector.xml b/OCH/sweeper/sweeper/src/main/res/drawable/turn_signal_left_selector.xml
new file mode 100755
index 0000000000..45c8f084e4
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/turn_signal_left_selector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/drawable/turn_signal_right_selector.xml b/OCH/sweeper/sweeper/src/main/res/drawable/turn_signal_right_selector.xml
new file mode 100755
index 0000000000..97e3b8de55
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/drawable/turn_signal_right_selector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/layout/dialog_sweeper_manual_driving.xml b/OCH/sweeper/sweeper/src/main/res/layout/dialog_sweeper_manual_driving.xml
new file mode 100644
index 0000000000..c6fca84ec2
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/layout/dialog_sweeper_manual_driving.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/layout/dialog_sweeper_no_title.xml b/OCH/sweeper/sweeper/src/main/res/layout/dialog_sweeper_no_title.xml
new file mode 100644
index 0000000000..4ed2048fdd
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/layout/dialog_sweeper_no_title.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/fragment_och_sweeper.xml b/OCH/sweeper/sweeper/src/main/res/layout/fragment_och_sweeper.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/layout/fragment_och_sweeper.xml
rename to OCH/sweeper/sweeper/src/main/res/layout/fragment_och_sweeper.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/fragment_welt_map_overview.xml b/OCH/sweeper/sweeper/src/main/res/layout/fragment_welt_map_overview.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/layout/fragment_welt_map_overview.xml
rename to OCH/sweeper/sweeper/src/main/res/layout/fragment_welt_map_overview.xml
diff --git a/OCH/sweeper/sweeper/src/main/res/layout/sweeper_amap_navi_view.xml b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_amap_navi_view.xml
new file mode 100644
index 0000000000..4653dc9dcf
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_amap_navi_view.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_base_fragment.xml b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_base_fragment.xml
similarity index 97%
rename from OCH/mogo-och-sweeper/src/main/res/layout/sweeper_base_fragment.xml
rename to OCH/sweeper/sweeper/src/main/res/layout/sweeper_base_fragment.xml
index 1039ecdcc6..6cc4cd7de7 100644
--- a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_base_fragment.xml
+++ b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_base_fragment.xml
@@ -97,11 +97,15 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="@dimen/dp_36"
- android:layout_marginTop="@dimen/dp_27">
+ android:layout_marginTop="@dimen/dp_27"
+ app:roundLayoutRadius="@dimen/dp_16"
+ >
+ android:layout_height="wrap_content"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/layout/sweeper_item_task_info.xml b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_item_task_info.xml
new file mode 100644
index 0000000000..69ec1c1128
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_item_task_info.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/layout/sweeper_limiting_speed.xml b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_limiting_speed.xml
new file mode 100644
index 0000000000..1938d21ff5
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_limiting_speed.xml
@@ -0,0 +1,17 @@
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_no_data_common_view.xml b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_no_data_common_view.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/layout/sweeper_no_data_common_view.xml
rename to OCH/sweeper/sweeper/src/main/res/layout/sweeper_no_data_common_view.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_operate_panel_view.xml b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_operate_panel_view.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/layout/sweeper_operate_panel_view.xml
rename to OCH/sweeper/sweeper/src/main/res/layout/sweeper_operate_panel_view.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_popwindow_operate_panel.xml b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_popwindow_operate_panel.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/layout/sweeper_popwindow_operate_panel.xml
rename to OCH/sweeper/sweeper/src/main/res/layout/sweeper_popwindow_operate_panel.xml
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_subtask_view.xml b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_subtask_view.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/layout/sweeper_subtask_view.xml
rename to OCH/sweeper/sweeper/src/main/res/layout/sweeper_subtask_view.xml
diff --git a/OCH/sweeper/sweeper/src/main/res/layout/sweeper_task_menu.xml b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_task_menu.xml
new file mode 100644
index 0000000000..f62a58d93c
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_task_menu.xml
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/layout/sweeper_test_bar_view.xml b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_test_bar_view.xml
new file mode 100644
index 0000000000..4322fdf328
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_test_bar_view.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_traffic_data.xml b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_traffic_data.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/layout/sweeper_traffic_data.xml
rename to OCH/sweeper/sweeper/src/main/res/layout/sweeper_traffic_data.xml
diff --git a/OCH/sweeper/sweeper/src/main/res/layout/sweeper_traffic_light_view.xml b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_traffic_light_view.xml
new file mode 100644
index 0000000000..dd319f141c
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_traffic_light_view.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/layout/sweeper_turn_signal.xml b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_turn_signal.xml
new file mode 100644
index 0000000000..6ad67d647f
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_turn_signal.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_welt_map_overview.xml b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_welt_map_overview.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/layout/sweeper_welt_map_overview.xml
rename to OCH/sweeper/sweeper/src/main/res/layout/sweeper_welt_map_overview.xml
diff --git a/OCH/sweeper/sweeper/src/main/res/layout/sweeper_welt_small_map_view.xml b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_welt_small_map_view.xml
new file mode 100644
index 0000000000..515958f87d
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_welt_small_map_view.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/layout/sweeper_work_mode.xml b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_work_mode.xml
new file mode 100644
index 0000000000..f2e743be58
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/layout/sweeper_work_mode.xml
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/values/attrs.xml b/OCH/sweeper/sweeper/src/main/res/values/attrs.xml
new file mode 100644
index 0000000000..396db92f74
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/values/attrs.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-sweeper/src/main/res/values/colors.xml b/OCH/sweeper/sweeper/src/main/res/values/colors.xml
similarity index 100%
rename from OCH/mogo-och-sweeper/src/main/res/values/colors.xml
rename to OCH/sweeper/sweeper/src/main/res/values/colors.xml
diff --git a/OCH/sweeper/sweeper/src/main/res/values/dimens.xml b/OCH/sweeper/sweeper/src/main/res/values/dimens.xml
new file mode 100644
index 0000000000..8cc4e2b53a
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/values/dimens.xml
@@ -0,0 +1,154 @@
+
+
+
+ 300dp
+ 348dp
+ 211dp
+ 276dp
+
+
+ 220dp
+ 98dp
+ 159dp
+
+ 32dp
+ 20dp
+ 26dp
+ 42dp
+
+ 15dp
+
+ 20dp
+ 36dp
+ 28dp
+ 36dp
+
+ 3dp
+ 3dp
+ 17dp
+ 17dp
+
+
+ 300dp
+ 270dp
+ 30dp
+ 24dp
+ 24dp
+ 1dp
+ 30dp
+ 23dp
+ 30dp
+ 146dp
+ 20dp
+ 23dp
+ 30dp
+ 23dp
+ 26dp
+ 34dp
+ 20dp
+ 80dp
+ 3dp
+ 34dp
+ 20dp
+ 28dp
+ 27dp
+
+ 25.6dp
+ 20dp
+ 20dp
+ 64dp
+ 16dp
+
+ 40dp
+ 40dp
+ 46dp
+ 24dp
+
+ 530dp
+ 492dp
+
+ 20dp
+ 20dp
+ 70dp
+ 130dp
+ 93dp
+ 150dp
+ 70dp
+
+ 24dp
+ 616dp
+ 180dp
+
+ 112dp
+ 112dp
+
+ 92dp
+
+ 30dp
+ 616dp
+ 754dp
+
+ 40dp
+ 13dp
+ 12dp
+ 350dp
+
+ 460dp
+ 30dp
+
+ 110dp
+ 40dp
+ 320dp
+ 20dp
+ 40dp
+ 320dp
+ 460dp
+ 70dp
+ 460dp
+ 130dp
+ 30dp
+
+ 10dp
+ 20dp
+ 200dp
+ 52dp
+ 65dp
+ 20dp
+ 50dp
+ 20dp
+ 38dp
+ 33dp
+ 368dp
+ 76dp
+ 60dp
+
+ 276dp
+ 112dp
+ 22dp
+ 36dp
+ 50dp
+ 822dp
+
+ 46dp
+ 700dp
+ 120dp
+ 560dp
+ 116dp
+ 50dp
+
+ 225dp
+ 154dp
+ 60dp
+ 40dp
+ 23dp
+ 210dp
+ 120dp
+ 15dp
+ 17dp
+ 140dp
+ 130dp
+ 60dp
+
+ 13dp
+ 32dp
+
\ No newline at end of file
diff --git a/OCH/sweeper/sweeper/src/main/res/values/strings.xml b/OCH/sweeper/sweeper/src/main/res/values/strings.xml
new file mode 100644
index 0000000000..825239b64f
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/values/strings.xml
@@ -0,0 +1,28 @@
+
+ 近距视角
+ 远距视角
+ 启动中…
+ 启动成功
+ 启动失败
+ 自动驾驶
+ 路线列表
+ 路线:
+ 起点:
+ 终点:
+ 确认
+ 准备出发
+ 自动驾驶中,不可切换路线
+ 当前行程未完成,不可切换路线
+ 当前暂无任务
+ 起点:
+ 终点:
+ 更换路线成功
+ 更换路线失败
+ 起点:
+ 终点:
+ 当前站点:
+ 下一站:
+ 自动驾驶状态为0不可用
+ 预计等待%d秒
+ 请保持档位在N档并拉起手刹后启动自动驾驶
+
diff --git a/OCH/sweeper/sweeper/src/main/res/values/style.xml b/OCH/sweeper/sweeper/src/main/res/values/style.xml
new file mode 100644
index 0000000000..1f8f971a41
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/main/res/values/style.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/OCH/sweeper/sweeper/src/test/java/com/mogo/och/sweeper/ExampleUnitTest.kt b/OCH/sweeper/sweeper/src/test/java/com/mogo/och/sweeper/ExampleUnitTest.kt
new file mode 100644
index 0000000000..1afdb5acad
--- /dev/null
+++ b/OCH/sweeper/sweeper/src/test/java/com/mogo/och/sweeper/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package com.mogo.och.sweeper
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
\ No newline at end of file
diff --git a/app/README.md b/app/README.md
index 709e801e2f..a9c72cf527 100644
--- a/app/README.md
+++ b/app/README.md
@@ -45,8 +45,8 @@
| 车型 | 配置所在文件 | 档位 | 配置 |
|:-|:-|:-|:-|
| 东风、红旗 | fOchTaxi.gradle、fOchTaxiPassenger.gradle | P、R | buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}' |
-| 金旅小巴 | fOchBus.gradle、fOchBusPassenger.gradle、fOchShuttle.gradle、fOchShuttlePassenger.gradle | N、R | buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}' |
+| 金旅小巴 | ochJL.gradle、ochJL.gradle、ochJL.gradle、ochJL.gradle | N、R | buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}' |
| M1 | fOchBusPassengerM1.gradle | 不限制档位 | buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null' |
-| M2 | fOchShuttlePassengerM2.gradle | N、P、R | buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}' |
-| 清扫车 | fOchSweeper.gradle | 不限制档位 | buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null' |
+| M2 | ochM2.gradle | N、P、R | buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}' |
+| 清扫车 | ochFT.gradle | 不限制档位 | buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null' |
| 开沃 | 暂无 | 不限制档位 | buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null' |
diff --git a/app/build.gradle b/app/build.gradle
index ccbbd73e1b..79b3909b30 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -177,7 +177,9 @@ android {
shrinkResources false
signingConfig signingConfigs.release
manifestPlaceholders = [
- MAP_SDK_VERSION: properties.getProperty("MAP_SDK_VERSION")
+ MAP_SDK_VERSION : properties.getProperty("MAP_SDK_VERSION"),
+ // 高德地图鉴权信息
+ AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
]
}
release {
@@ -189,7 +191,9 @@ android {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
manifestPlaceholders = [
- MAP_SDK_VERSION: properties.getProperty("MAP_SDK_VERSION")
+ MAP_SDK_VERSION : properties.getProperty("MAP_SDK_VERSION"),
+ // 高德地图鉴权信息
+ AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
]
}
}
@@ -214,7 +218,7 @@ android {
// 项目 business
// 业务线 product
// 车型 vehicle
- flavorDimensions "project","product","vehicle" ,"basic", "env"
+ flavorDimensions "project","product","role","vehicle" ,"basic", "env"
productFlavors {
// launcher app
launcher {
@@ -246,31 +250,6 @@ android {
buildConfigField 'String', 'tempConfig', "\"${readFileToJsonTemp("dali").replace("\"", "\\\"")}\""
}
- // 空业务 主要是给鹰眼使用
- noop {
- dimension "product"
- }
- // 小巴车业务
- bus {
- dimension "product"
- }
- // 出租车业务
- taxi {
- dimension "product"
- }
- // 清扫车业务
- sweeper {
- dimension "product"
- }
- // 接驳车业务
- shuttle{
- dimension "product"
- }
- // 包车业务
- charter{
- dimension "product"
- }
-
// 配置网络环境,QA、线上、演示
qa {
dimension "env"
@@ -285,25 +264,27 @@ android {
buildConfigField 'int', 'NET_ENV', '4'
}
}
+ apply from: "./script/roleFlavors/driver.gradle"
+ apply from: "./script/roleFlavors/passenger.gradle"
+ apply from: "./script/roleFlavors/driverpassenger.gradle"
+ apply from: "./script/productFlavors/bus.gradle"
+ apply from: "./script/productFlavors/charter.gradle"
+ apply from: "./script/productFlavors/noop.gradle"
+ apply from: "./script/productFlavors/shuttle.gradle"
+ apply from: "./script/productFlavors/sweeperOperate.gradle"
+ apply from: "./script/productFlavors/sweeperCloud.gradle"
+ apply from: "./script/productFlavors/taxi.gradle"
// 配置不同渠道参数,直接影响功能完整度
- apply from: "./productFlavors/fPadLenovo.gradle"
- apply from: "./productFlavors/fOchBus.gradle"
- apply from: "./productFlavors/fOchShuttle.gradle"
- apply from: "./productFlavors/fOchShuttleM2.gradle"
- apply from: "./productFlavors/fOchTaxi.gradle"
- apply from: "./productFlavors/fOchBusPassenger.gradle"
- apply from: "./productFlavors/fOchShuttlePassengerM2.gradle"
- apply from: "./productFlavors/fOchShuttlePassenger.gradle"
- apply from: "./productFlavors/fOchTaxiPassenger.gradle"
- apply from: "./productFlavors/fOchSweeper.gradle"
- apply from: "./productFlavors/fMultiDisplayOchBus.gradle"
- apply from: "./productFlavors/fMultiDisplayOchTaxi.gradle"
+ apply from: "./script/vehicleFlavors/fPadLenovo.gradle"
+ apply from: "./script/vehicleFlavors/ochJL.gradle"
+ apply from: "./script/vehicleFlavors/ochJL.gradle"
+ apply from: "./script/vehicleFlavors/ochM2.gradle"
+ apply from: "./script/vehicleFlavors/ochDFHQ.gradle"
+ apply from: "./script/vehicleFlavors/ochFT.gradle"
//包车
- apply from: "./productFlavors/ochDriverM1.gradle"
- apply from: "./productFlavors/ochPassengerM1.gradle"
- apply from: "./productFlavors/fMultiDisplaySweeper.gradle"
- apply from: "./productFlavors/flavorsFilterConfig.gradle"
+ apply from: "./script/vehicleFlavors/ochM1.gradle"
+ apply from: "./script/flavorfilter/flavorsFilterConfig.gradle"
packagingOptions {
exclude 'META-INF/io.netty.versions.properties'
@@ -352,7 +333,7 @@ dependencies {
androidTestImplementation project(':core:mogo-core-res')
- apply from: "./functions/och.gradle"
+ apply from: "./script/functions/och.gradle"
androidTestImplementation rootProject.ext.dependencies.androidx_test_core
androidTestImplementation rootProject.ext.dependencies.androidx_test_core_ktx
diff --git a/app/config/tempConfig.json b/app/config/tempConfig.json
index 5fb927ab6d..b4482bbd28 100644
--- a/app/config/tempConfig.json
+++ b/app/config/tempConfig.json
@@ -1,6 +1,6 @@
{
"mogo": {
- "shuttlepassenger": {
+ "shuttlepassengerochjl": {
"ads": [
{
"path": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1676357256102/1.jpg",
@@ -64,7 +64,7 @@
}
]
},
- "shuttlepassengerm2": {
+ "shuttlepassengerochm2": {
"ads": [
{
"path": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov",
@@ -82,7 +82,7 @@
}
},
"dali": {
- "shuttlepassenger": {
+ "shuttlepassengerochjl": {
"ads": [
{
"path": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1676357256102/1.jpg",
@@ -146,7 +146,7 @@
}
]
},
- "shuttlepassengerm2": {
+ "shuttlepassengerochm2": {
"ads": [
{
"path": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov",
@@ -164,7 +164,7 @@
}
},
"yantai": {
- "shuttlepassenger": {
+ "shuttlepassengerochjl": {
"ads": [
{
"path": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1681210971943/yangmadou.mp4",
@@ -180,7 +180,7 @@
}
]
},
- "shuttlepassengerm2": {
+ "shuttlepassengerochm2": {
"ads": [
{
"path": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov",
diff --git a/app/config/urlConfig.json b/app/config/urlConfig.json
index 1179ea5438..3472e8cb2c 100644
--- a/app/config/urlConfig.json
+++ b/app/config/urlConfig.json
@@ -3,6 +3,7 @@
"qa": {
"och_url": "https://tech-qa.zhidaohulian.com",
"shuttle_url": "https://och-driver-qa.zhidaozhixing.com",
+ "sweeper_url": "https://och-driver-qa.zhidaozhixing.com",
"passport_url": "",
"socket_base_url": "",
"socket_tech_url": "",
@@ -14,6 +15,7 @@
"online": {
"och_url": "https://tech.zhidaohulian.com",
"shuttle_url": "https://och-driver.zhidaozhixing.com",
+ "sweeper_url": "https://och-driver.zhidaozhixing.com",
"passport_url": "",
"socket_base_url": "",
"socket_tech_url": "",
@@ -25,6 +27,7 @@
"demo": {
"och_url": "http://tech-dev.zhidaohulian.com",
"shuttle_url": "https://och-driver-dev.zhidaozhixing.com",
+ "sweeper_url": "https://och-driver-dev.zhidaozhixing.com",
"passport_url": "",
"socket_base_url": "",
"socket_tech_url": "",
@@ -38,6 +41,7 @@
"qa": {
"och_url": "https://och-a.zhidaozhixing.com",
"shuttle_url": "https://och-a.zhidaozhixing.com",
+ "sweeper_url": "https://och-a.zhidaozhixing.com",
"passport_url": "https://och-a.zhidaozhixing.com/arch/passport/",
"socket_base_url": "https://och-a.zhidaozhixing.com/arch/push/",
"socket_tech_url": "https://och-a.zhidaozhixing.com/arch/",
@@ -49,6 +53,7 @@
"online": {
"och_url": "https://och-driver-eh.zhidaozhixing.com",
"shuttle_url": "https://och-driver-eh.zhidaozhixing.com",
+ "sweeper_url": "https://och-driver-eh.zhidaozhixing.com",
"passport_url": "https://och-driver-eh.zhidaozhixing.com/arch/passport/",
"socket_base_url": "https://och-driver-eh.zhidaozhixing.com/arch/push/",
"socket_tech_url": "https://och-driver-eh.zhidaozhixing.com/arch/",
@@ -60,6 +65,7 @@
"demo": {
"och_url": "https://och-a.zhidaozhixing.com",
"shuttle_url": "https://och-a.zhidaozhixing.com",
+ "sweeper_url": "https://och-a.zhidaozhixing.com",
"passport_url": "https://och-a.zhidaozhixing.com/arch/passport/",
"socket_base_url": "https://och-a.zhidaozhixing.com/arch/push/",
"socket_tech_url": "https://och-a.zhidaozhixing.com/arch/",
@@ -73,6 +79,7 @@
"qa": {
"och_url": "https://och-a.zhidaozhixing.com",
"shuttle_url": "https://och-a.zhidaozhixing.com",
+ "sweeper_url": "https://och-a.zhidaozhixing.com",
"passport_url": "https://och-a.zhidaozhixing.com/arch/passport/",
"socket_base_url": "https://och-a.zhidaozhixing.com/arch/push/",
"socket_tech_url": "https://och-a.zhidaozhixing.com/arch/",
@@ -84,6 +91,7 @@
"online": {
"och_url": "https://och-driver-yt.zhidaozhixing.com",
"shuttle_url": "https://och-driver-yt.zhidaozhixing.com",
+ "sweeper_url": "https://och-driver-yt.zhidaozhixing.com",
"passport_url": "https://och-driver-yt.zhidaozhixing.com/arch/passport/",
"socket_base_url": "https://och-driver-yt.zhidaozhixing.com/arch/push/",
"socket_tech_url": "https://och-driver-yt.zhidaozhixing.com/arch/",
@@ -95,6 +103,7 @@
"demo": {
"och_url": "https://och-a.zhidaozhixing.com",
"shuttle_url": "https://och-a.zhidaozhixing.com",
+ "sweeper_url": "https://och-a.zhidaozhixing.com",
"passport_url": "https://och-a.zhidaozhixing.com/arch/passport/",
"socket_base_url": "https://och-a.zhidaozhixing.com/arch/push/",
"socket_tech_url": "https://och-a.zhidaozhixing.com/arch/",
diff --git a/app/functions/och.gradle b/app/functions/och.gradle
deleted file mode 100644
index 77d27d856a..0000000000
--- a/app/functions/och.gradle
+++ /dev/null
@@ -1,74 +0,0 @@
-// 网约车服务:仅小巴车、出租车渠道用
-project.dependencies {
- if (Boolean.valueOf(USE_MAVEN_PACKAGE)) {
- fPadLenovoImplementation(rootProject.ext.dependencies.mogoochnoop)
- // sweeper清扫车
- fOchSweeperImplementation(rootProject.ext.dependencies.mogoochsweeper)
-
- // Bus司机端
- fOchBusImplementation(rootProject.ext.dependencies.mogoochbus)
- // Bus乘客端
- fOchBusPassengerImplementation(rootProject.ext.dependencies.mogoochbus)
- fOchBusPassengerM1Implementation(rootProject.ext.dependencies.mogoochbus)
- fOchShuttlePassengerM2Implementation(rootProject.ext.dependencies.mogoochbus)
-
- // taxi司机端
- fOchTaxiImplementation(rootProject.ext.dependencies.mogoochtaxi)
- // taxi乘客端
- fOchTaxiPassengerImplementation(rootProject.ext.dependencies.mogoochtaxi)
-
- // Bus司机端
- fMultiDisplayOchBusImplementation(rootProject.ext.dependencies.mogoochbus)
- // Bus乘客端
- fMultiDisplayOchBusImplementation(rootProject.ext.dependencies.mogoochbus)
-
- //接驳车司乘端
- fOchShuttleImplementation(rootProject.ext.dependencies.mogoochbus)
- fOchShuttlePassengerImplementation(rootProject.ext.dependencies.mogoochbus)
-
- // taxi司机端
- fMultiDisplayOchTaxiImplementation(rootProject.ext.dependencies.mogoochtaxi)
- // taxi乘客端
- fMultiDisplayOchTaxiImplementation(rootProject.ext.dependencies.mogoochtaxi)
- } else {
- fPadLenovoImplementation (project(':OCH:mogo-och-noop'))
- // sweeper 清扫车
- fOchSweeperImplementation (project(':OCH:mogo-och-sweeper'))
-
- // Bus司机端
- fOchBusImplementation (project(':OCH:mogo-och-bus'))
- // Bus乘客端
- fOchBusPassengerImplementation (project(':OCH:mogo-och-bus-passenger'))
-
-
- // 包车
- ochDriverM1Implementation (project(':OCH:mogo-och-charter'))
- ochPassengerM1Implementation (project(':OCH:mogo-och-charter-passenger'))
-
- // taxi司机端
- fOchTaxiImplementation (project(':OCH:mogo-och-taxi'))
- // taxi乘客端
- fOchTaxiPassengerImplementation (project(':OCH:mogo-och-taxi-passenger'))
-
- // 多屏幕-Bus司机端
- fMultiDisplayOchBusImplementation (project(':OCH:mogo-och-bus'))
- // 多屏幕-Bus乘客端
- fMultiDisplayOchBusImplementation (project(':OCH:mogo-och-bus-passenger'))
-
- // 多屏幕-taxi司机端
- //接驳车司乘端
- fOchShuttleImplementation (project(':OCH:mogo-och-shuttle'))
- fOchShuttleM2Implementation (project(':OCH:mogo-och-shuttle'))
- fOchShuttlePassengerImplementation (project(':OCH:mogo-och-shuttle-passenger'))
- fOchShuttlePassengerM2Implementation (project(':OCH:mogo-och-shuttle-passenger'))
-
- // taxi司机端
- fMultiDisplayOchTaxiImplementation (project(':OCH:mogo-och-taxi'))
- // 多屏幕-taxi乘客端
- fMultiDisplayOchTaxiImplementation (project(':OCH:mogo-och-taxi-passenger'))
-
- // 清扫车-多屏幕
- fMultiDisplaySweeperImplementation (project(':OCH:mogo-och-sweeper'))
-
- }
-}
diff --git a/app/productFlavors/fMultiDisplayOchBus.gradle b/app/productFlavors/fMultiDisplayOchBus.gradle
deleted file mode 100644
index 6705e54bc7..0000000000
--- a/app/productFlavors/fMultiDisplayOchBus.gradle
+++ /dev/null
@@ -1,53 +0,0 @@
-project.android.productFlavors {
- // 支持多个屏幕异显示的终端,即一个终端包含司机端、乘客端
- fMultiDisplayOchBus {
- externalNativeBuild {
- ndk {
- // 设置支持的SO库架构
- abiFilters "armeabi-v7a", "arm64-v8a"
- }
- }
- minSdkVersion rootProject.ext.android.minSdkVersionPadLenovo
- targetSdkVersion rootProject.ext.android.targetSdkVersionPadLenovo
- versionCode rootProject.versionCode as int
- versionName rootProject.versionName
- // 应用包名
- applicationId rootProject.ext.android.fLauncherApplicationId
- dimension "vehicle"
- // 和 och/mogo-och-bus-passenger 的flavors的m1对应
- matchingFallbacks = ['jinlvvan']
-
- // 车机类型,主要用于区分自研车机还是别人家的车机,自研车机类型为0
- buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
- //高德地图鉴权信息
- manifestPlaceholders = [
- AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
- CHANNEL_VALUE : "fMultiDisplayOchBus",
- ACTIVITY_ROOT : true,
- SCREEN_ORIENTATION: "landscape"
- ]
-
- // 是否需要实时上报坐标
- buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'
- // GPS数据提供源: 0-Android系统,1-工控机,2-OBU
- buildConfigField 'int', 'GPS_PROVIDER', "1"
-
- // 构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
- buildConfigField 'String', 'APP_IDENTITY_MODE', "\"Bus_Driver_JLKV\""
- // 连接的工控机IP地址
- buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.8.102\""
- // 构建的是否是演示(美化)模式
- buildConfigField 'boolean', 'IS_DEMO_MODE', 'false'
- // 构建的是否要动态更换模型
- buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'true'
- // 是否需要重写状态栏
- buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'false'
-
- // 构建 是否支持多屏异显异交互
- buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'true'
-
- //不能启动自驾的档位
- buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null'
- }
-
-}
\ No newline at end of file
diff --git a/app/productFlavors/fMultiDisplayOchTaxi.gradle b/app/productFlavors/fMultiDisplayOchTaxi.gradle
deleted file mode 100644
index 2e9691dca8..0000000000
--- a/app/productFlavors/fMultiDisplayOchTaxi.gradle
+++ /dev/null
@@ -1,56 +0,0 @@
-project.android.productFlavors {
- // 支持多个屏幕异显示的终端,即一个终端包含司机端、乘客端
- fMultiDisplayOchTaxi {
- externalNativeBuild {
- ndk {
- // 设置支持的SO库架构
- abiFilters "armeabi-v7a", "arm64-v8a"
- }
- }
- minSdkVersion rootProject.ext.android.minSdkVersionPadLenovo
- targetSdkVersion rootProject.ext.android.targetSdkVersionPadLenovo
- versionCode rootProject.versionCode as int
- versionName rootProject.versionName
- // 应用包名
- applicationId rootProject.ext.android.fLauncherApplicationId
- dimension "vehicle"
-
- // 车机类型,主要用于区分自研车机还是别人家的车机,自研车机类型为0
- buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
- // 配置AndroidManifest.xml中用到的参数
- manifestPlaceholders = [
- // 高德地图鉴权信息
- AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
- // BUGLY_APP_CHANNEL
- CHANNEL_VALUE : "fMultiDisplayOchTaxi",
- // 在启动的时候把Task给清空
- ACTIVITY_ROOT : true,
- // Activity的朝向
- SCREEN_ORIENTATION: "landscape"
- ]
-
- // 是否需要实时上报坐标
- buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'
- // GPS数据提供源: 0-Android系统,1-工控机,2-OBU
- buildConfigField 'int', 'GPS_PROVIDER', "1"
-
- // 构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
- buildConfigField 'String', 'APP_IDENTITY_MODE', "\"Taxi_Driver_DFHQ\""
- // 连接的工控机IP地址
- buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.1.102\""
- // 构建的是否是演示(美化)模式
- buildConfigField 'boolean', 'IS_DEMO_MODE', 'false'
- // 构建的是否要动态更换模型
- buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'true'
- // 是否需要重写状态栏
- buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'false'
-
-
- // 构建 是否支持多屏异显异交互
- buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'true'
-
- //不能启动自驾的档位
- buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null'
- }
-
-}
\ No newline at end of file
diff --git a/app/productFlavors/fMultiDisplaySweeper.gradle b/app/productFlavors/fMultiDisplaySweeper.gradle
deleted file mode 100644
index 4dddc88a45..0000000000
--- a/app/productFlavors/fMultiDisplaySweeper.gradle
+++ /dev/null
@@ -1,54 +0,0 @@
-project.android.productFlavors {
- // 支持多个屏幕异显示的终端,即一个终端包含司机端、乘客端
- fMultiDisplaySweeper {
- externalNativeBuild {
- ndk {
- // 设置支持的SO库架构
- abiFilters "armeabi-v7a", "arm64-v8a"
- }
- }
- minSdkVersion rootProject.ext.android.minSdkVersionPadLenovo
- targetSdkVersion rootProject.ext.android.targetSdkVersionPadLenovo
- versionCode rootProject.versionCode as int
- versionName rootProject.versionName
- // 应用包名
- applicationId rootProject.ext.android.fLauncherApplicationId
- dimension "vehicle"
-
- // 车机类型,主要用于区分自研车机还是别人家的车机,自研车机类型为0
- buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
-
- // 配置AndroidManifest.xml中用到的参数
- manifestPlaceholders = [
- // 高德地图鉴权信息
- AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
- // BUGLY_APP_CHANNEL
- CHANNEL_VALUE : "fMultiDisplaySweeper",
- // 在启动的时候把Task给清空
- ACTIVITY_ROOT : true,
- // Activity的朝向
- SCREEN_ORIENTATION: "landscape"
- ]
-
- // 是否需要实时上报坐标
- buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'
- // GPS数据提供源: 0-Android系统,1-工控机,2-OBU
- buildConfigField 'int', 'GPS_PROVIDER', "1"
-
- // 构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
- buildConfigField 'String', 'APP_IDENTITY_MODE', "\"Taxi_Driver_Base\""
- // 连接的工控机IP地址
- buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.1.102\""
- // 构建的是否是演示(美化)模式
- buildConfigField 'boolean', 'IS_DEMO_MODE', 'false'
- // 构建的是否要动态更换模型
- buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'true'
-
- // 构建 是否支持多屏异显异交互
- buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'true'
-
- //不能启动自驾的档位
- buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null'
- }
-
-}
\ No newline at end of file
diff --git a/app/productFlavors/fOchBus.gradle b/app/productFlavors/fOchBus.gradle
deleted file mode 100644
index 09683e1c91..0000000000
--- a/app/productFlavors/fOchBus.gradle
+++ /dev/null
@@ -1,55 +0,0 @@
-project.android.productFlavors {
- // 衡阳-联想Pad-网约车-小巴车
- fOchBus {
- externalNativeBuild {
- ndk {
- // 设置支持的SO库架构
- abiFilters "armeabi-v7a", "arm64-v8a"
- }
- }
- minSdkVersion rootProject.ext.android.minSdkVersionPadLenovo
- targetSdkVersion rootProject.ext.android.targetSdkVersionPadLenovo
- versionCode rootProject.versionCode as int
- versionName rootProject.versionName
- // 应用包名
- applicationId rootProject.ext.android.fLauncherApplicationId
- dimension "vehicle"
- matchingFallbacks = ['jinlvvan']
-
- // 车机类型,主要用于区分自研车机还是别人家的车机,自研车机类型为0
- buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
- // 配置AndroidManifest.xml中用到的参数
- manifestPlaceholders = [
- // 高德地图鉴权信息
- AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
- // BUGLY_APP_CHANNEL
- CHANNEL_VALUE : "fOchBus",
- // 在启动的时候把Task给清空
- ACTIVITY_ROOT : true,
- // Activity的朝向
- SCREEN_ORIENTATION: "landscape"
- ]
-
- // 是否需要实时上报坐标
- buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'
- // GPS数据提供源: 0-Android系统,1-工控机,2-OBU
- buildConfigField 'int', 'GPS_PROVIDER', "1"
-
- // 构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
- buildConfigField 'String', 'APP_IDENTITY_MODE', "\"Bus_Driver_JL\""
- // 连接的工控机IP地址
- buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.8.102\""
- // 构建的是否是演示(美化)模式
- buildConfigField 'boolean', 'IS_DEMO_MODE', 'false'
- // 构建的是否要动态更换模型
- buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'true'
- // 是否需要重写状态栏
- buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'false'
-
- // 构建 是否支持多屏异显异交互
- buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false'
-
- //Bus不能启动自驾的档位
- buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}'
- }
-}
\ No newline at end of file
diff --git a/app/productFlavors/fOchBusPassenger.gradle b/app/productFlavors/fOchBusPassenger.gradle
deleted file mode 100644
index 5a585b833b..0000000000
--- a/app/productFlavors/fOchBusPassenger.gradle
+++ /dev/null
@@ -1,51 +0,0 @@
-project.android.productFlavors {
- // 衡阳-联想Pad-网约车-小巴车-乘客端
- fOchBusPassenger {
- externalNativeBuild {
- ndk {
- // 设置支持的SO库架构
- abiFilters "armeabi-v7a", "arm64-v8a"
- }
- }
- minSdkVersion rootProject.ext.android.minSdkVersionPadLenovo
- targetSdkVersion rootProject.ext.android.targetSdkVersionPadLenovo
- // 应用包名
- applicationId rootProject.ext.android.fLauncherApplicationId
- dimension "vehicle"
- // 和 och/mogo-och-bus-passenger 的flavors的jinlvvan对应
- matchingFallbacks = ['jinlvvan']
-
- // 车机类型,主要用于区分自研车机还是别人家的车机,自研车机类型为0
- buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
- //高德地图鉴权信息
- manifestPlaceholders = [
- AMAP_API_VALUE: rootProject.ext.android.fLauncherAmapApiValue,
- CHANNEL_VALUE: "fOchBusPassenger",
- ACTIVITY_ROOT:true,
- SCREEN_ORIENTATION: "landscape"
- ]
-
- // 是否需要实时上报坐标
- buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'
- // GPS数据提供源: 0-Android系统,1-工控机,2-OBU
- buildConfigField 'int', 'GPS_PROVIDER', "1"
-
- // 构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
- buildConfigField 'String', 'APP_IDENTITY_MODE', "\"Bus_Passenger_JL\""
- // 连接的工控机IP地址
- buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.8.103\""
- // 构建的是否是演示(美化)模式
- buildConfigField 'boolean', 'IS_DEMO_MODE', 'false'
- // 构建的是否要动态更换模型
- buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'false'
- // 是否需要重写状态栏
- buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'false'
-
-
- // 构建 是否支持多屏异显异交互
- buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'true'
-
- //Bus不能启动自驾的档位
- buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}'
- }
-}
\ No newline at end of file
diff --git a/app/productFlavors/fOchShuttle.gradle b/app/productFlavors/fOchShuttle.gradle
deleted file mode 100644
index 10af854fc0..0000000000
--- a/app/productFlavors/fOchShuttle.gradle
+++ /dev/null
@@ -1,56 +0,0 @@
-project.android.productFlavors {
- // 衡阳-联想Pad-网约车-小巴车
- fOchShuttle {
- externalNativeBuild {
- ndk {
- // 设置支持的SO库架构
- abiFilters "armeabi-v7a", "arm64-v8a"
- }
- }
- minSdkVersion rootProject.ext.android.minSdkVersionPadLenovo
- targetSdkVersion rootProject.ext.android.targetSdkVersionPadLenovo
- versionCode rootProject.versionCode as int
- versionName rootProject.versionName
- // 应用包名
- applicationId rootProject.ext.android.fLauncherApplicationId
- dimension "vehicle"
- // 和 och/mogo-och-bus-passenger 的flavors的shuttle对应
- matchingFallbacks = ['shuttle']
-
- // 车机类型,主要用于区分自研车机还是别人家的车机,自研车机类型为0
- buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
- //高德地图鉴权信息
- manifestPlaceholders = [
- AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
- CHANNEL_VALUE : "fOchShuttle", ACTIVITY_ROOT: true,
- SCREEN_ORIENTATION: "landscape"
- ]
-
- // 是否基于地图
- buildConfigField 'boolean', 'IS_MAP_BASED', 'true'
-
- // 是否需要实时上报坐标
- buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'
- // GPS数据提供源: 0-Android系统,1-工控机,2-OBU
- buildConfigField 'int', 'GPS_PROVIDER', "1"
-
- // 构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
- buildConfigField 'String', 'APP_IDENTITY_MODE', "\"Shuttle_Driver_JL\""
- // 连接的工控机IP地址
- buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.8.103\""
- // 构建的是否是演示(美化)模式
- buildConfigField 'boolean', 'IS_DEMO_MODE', 'false'
-
- // 构建的是否要动态更换模型
- buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'true'
- // 是否需要重写状态栏
- buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'false'
-
-
- // 构建 是否支持多屏异显异交互
- buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false'
-
- //Bus不能启动自驾的档位
- buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}'
- }
-}
\ No newline at end of file
diff --git a/app/productFlavors/fOchShuttleM2.gradle b/app/productFlavors/fOchShuttleM2.gradle
deleted file mode 100644
index 686a4442c0..0000000000
--- a/app/productFlavors/fOchShuttleM2.gradle
+++ /dev/null
@@ -1,56 +0,0 @@
-project.android.productFlavors {
- // 衡阳-联想Pad-网约车-小巴车
- fOchShuttleM2 {
- externalNativeBuild {
- ndk {
- // 设置支持的SO库架构
- abiFilters "armeabi-v7a", "arm64-v8a"
- }
- }
- minSdkVersion rootProject.ext.android.minSdkVersionPadLenovo
- targetSdkVersion rootProject.ext.android.targetSdkVersionPadLenovo
- versionCode rootProject.versionCode as int
- versionName rootProject.versionName
- // 应用包名
- applicationId rootProject.ext.android.fLauncherApplicationId
- dimension "vehicle"
- // 和 och/mogo-och-bus-passenger 的flavors的shuttle对应
- matchingFallbacks = ['shuttle']
-
- // 车机类型,主要用于区分自研车机还是别人家的车机,自研车机类型为0
- buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
- //高德地图鉴权信息
- manifestPlaceholders = [
- AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
- CHANNEL_VALUE : "fOchShuttleM2", ACTIVITY_ROOT: true,
- SCREEN_ORIENTATION: "landscape"
- ]
-
- // 是否基于地图
- buildConfigField 'boolean', 'IS_MAP_BASED', 'true'
-
- // 是否需要实时上报坐标
- buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'
- // GPS数据提供源: 0-Android系统,1-工控机,2-OBU
- buildConfigField 'int', 'GPS_PROVIDER', "1"
-
- // 构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
- buildConfigField 'String', 'APP_IDENTITY_MODE', "\"Shuttle_Driver_M2\""
- // 连接的工控机IP地址
- buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.8.103\""
- // 构建的是否是演示(美化)模式
- buildConfigField 'boolean', 'IS_DEMO_MODE', 'false'
-
- // 构建的是否要动态更换模型
- buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'false'
- // 是否需要重写状态栏
- buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'false'
-
-
- // 构建 是否支持多屏异显异交互
- buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false'
-
- //Bus不能启动自驾的档位
- buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}'
- }
-}
\ No newline at end of file
diff --git a/app/productFlavors/fOchShuttlePassenger.gradle b/app/productFlavors/fOchShuttlePassenger.gradle
deleted file mode 100644
index 5f7bfc6a6a..0000000000
--- a/app/productFlavors/fOchShuttlePassenger.gradle
+++ /dev/null
@@ -1,54 +0,0 @@
-project.android.productFlavors {
- // 衡阳-联想Pad-网约车-小巴车-乘客端
- fOchShuttlePassenger {
- externalNativeBuild {
- ndk {
- // 设置支持的SO库架构
- abiFilters "armeabi-v7a", "arm64-v8a"
- }
- }
- minSdkVersion rootProject.ext.android.minSdkVersionPadLenovo
- targetSdkVersion rootProject.ext.android.targetSdkVersionPadLenovo
- // 应用包名
- applicationId rootProject.ext.android.fLauncherApplicationId
- dimension "vehicle"
- matchingFallbacks = ['jinlvvan']
-
- // 车机类型,主要用于区分自研车机还是别人家的车机,自研车机类型为0
- buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
- //高德地图鉴权信息
- manifestPlaceholders = [
- AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
- CHANNEL_VALUE : "fOchShuttlePassenger",
- ACTIVITY_ROOT : true,
- // Activity的朝向
- SCREEN_ORIENTATION: "landscape"
- ]
-
- // 是否基于地图
- buildConfigField 'boolean', 'IS_MAP_BASED', 'true'
-
- // 是否需要实时上报坐标
- buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'
- // GPS数据提供源: 0-Android系统,1-工控机,2-OBU
- buildConfigField 'int', 'GPS_PROVIDER', "1"
-
- // 构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
- buildConfigField 'String', 'APP_IDENTITY_MODE', "\"Shuttle_Passenger_JL\""
- // 连接的工控机IP地址
- buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.8.103\""
- // 构建的是否是演示(美化)模式
- buildConfigField 'boolean', 'IS_DEMO_MODE', 'false'
- // 构建的是否要动态更换模型
- buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'true'
- // 是否需要重写状态栏
- buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'false'
-
-
- // 构建 是否支持多屏异显异交互
- buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'true'
-
- //Bus不能启动自驾的档位
- buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}'
- }
-}
\ No newline at end of file
diff --git a/app/productFlavors/fOchShuttlePassengerM2.gradle b/app/productFlavors/fOchShuttlePassengerM2.gradle
deleted file mode 100644
index e72a315ff1..0000000000
--- a/app/productFlavors/fOchShuttlePassengerM2.gradle
+++ /dev/null
@@ -1,52 +0,0 @@
-project.android.productFlavors {
- // 衡阳-联想Pad-网约车-小巴车-乘客端
- fOchShuttlePassengerM2 {
- externalNativeBuild {
- ndk {
- // 设置支持的SO库架构
- abiFilters "armeabi-v7a", "arm64-v8a"
- }
- }
- minSdkVersion rootProject.ext.android.minSdkVersionPadLenovo
- targetSdkVersion rootProject.ext.android.targetSdkVersionPadLenovo
- // 应用包名
- applicationId rootProject.ext.android.fLauncherApplicationId
- dimension "vehicle"
- // 和 och/mogo-och-bus-passenger 的flavors的m2对应
- matchingFallbacks = ['m2']
-
- // 车机类型,主要用于区分自研车机还是别人家的车机,自研车机类型为0
- buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
- //高德地图鉴权信息
- manifestPlaceholders = [
- AMAP_API_VALUE: rootProject.ext.android.fLauncherAmapApiValue,
- CHANNEL_VALUE: "fOchBusPassenger",
- ACTIVITY_ROOT:true,
- SCREEN_ORIENTATION: "portrait"
- ]
-
- // 是否需要实时上报坐标
- buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'
- // GPS数据提供源: 0-Android系统,1-工控机,2-OBU
- buildConfigField 'int', 'GPS_PROVIDER', "1"
-
- // 构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
- buildConfigField 'String', 'APP_IDENTITY_MODE', "\"Shuttle_Passenger_M2\""
- // 连接的工控机IP地址
- buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.8.103\""
- // 构建的是否是演示(美化)模式
- buildConfigField 'boolean', 'IS_DEMO_MODE', 'false'
-
- // 构建的是否要动态更换模型
- buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'false'
- // 是否需要重写状态栏
- buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'true'
-
-
- // 构建 是否支持多屏异显异交互
- buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false'
-
- //M2不能启动自驾的档位
- buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}'
- }
-}
\ No newline at end of file
diff --git a/app/productFlavors/fOchSweeper.gradle b/app/productFlavors/fOchSweeper.gradle
deleted file mode 100644
index 273ff178c0..0000000000
--- a/app/productFlavors/fOchSweeper.gradle
+++ /dev/null
@@ -1,56 +0,0 @@
-project.android.productFlavors {
- // 衡阳-联想Pad-网约车-小巴车
- fOchSweeper {
- externalNativeBuild {
- ndk {
- // 设置支持的SO库架构
- abiFilters "armeabi-v7a", "arm64-v8a"
- }
- }
- minSdkVersion rootProject.ext.android.minSdkVersionPadLenovo
- targetSdkVersion rootProject.ext.android.targetSdkVersionPadLenovo
- versionCode rootProject.versionCode as int
- versionName rootProject.versionName
- // 应用包名
- applicationId rootProject.ext.android.fLauncherApplicationId
- dimension "vehicle"
-
- // 车机类型,主要用于区分自研车机还是别人家的车机,自研车机类型为0
- buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
-
- // 配置AndroidManifest.xml中用到的参数
- manifestPlaceholders = [
- // 高德地图鉴权信息
- AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
- // BUGLY_APP_CHANNEL
- CHANNEL_VALUE : "fOchSweeper",
- // 在启动的时候把Task给清空
- ACTIVITY_ROOT : true,
- // Activity的朝向
- SCREEN_ORIENTATION: "landscape"
- ]
-
- // 是否需要实时上报坐标
- buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'
- // GPS数据提供源: 0-Android系统,1-工控机,2-OBU
- buildConfigField 'int', 'GPS_PROVIDER', "1"
-
- // 构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
- buildConfigField 'String', 'APP_IDENTITY_MODE', "\"Sweeper_Driver_FT\""
- // 连接的工控机IP地址
- buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.8.102\""
- // 构建的是否是演示(美化)模式
- buildConfigField 'boolean', 'IS_DEMO_MODE', 'false'
- // 构建的是否要动态更换模型
- buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'true'
- // 是否需要重写状态栏
- buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'false'
-
-
- // 构建 是否支持多屏异显异交互
- buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false'
-
- //清扫车不能启动自驾的档位
- buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null'
- }
-}
\ No newline at end of file
diff --git a/app/productFlavors/fOchTaxi.gradle b/app/productFlavors/fOchTaxi.gradle
deleted file mode 100644
index 424280b7f3..0000000000
--- a/app/productFlavors/fOchTaxi.gradle
+++ /dev/null
@@ -1,57 +0,0 @@
-project.android.productFlavors {
-
- // 衡阳-联想Pad-网约车-出租车
- fOchTaxi {
- externalNativeBuild {
- ndk {
- // 设置支持的SO库架构
- abiFilters "armeabi-v7a", "arm64-v8a"
- }
- }
- minSdkVersion rootProject.ext.android.minSdkVersionPadLenovo
- targetSdkVersion rootProject.ext.android.targetSdkVersionPadLenovo
- versionCode rootProject.versionCode as int
- versionName rootProject.versionName
- // 应用包名
- applicationId rootProject.ext.android.fLauncherApplicationId
- dimension "vehicle"
-
- // 车机类型,主要用于区分自研车机还是别人家的车机,自研车机类型为0
- buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
-
- // 配置AndroidManifest.xml中用到的参数
- manifestPlaceholders = [
- // 高德地图鉴权信息
- AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
- // BUGLY_APP_CHANNEL
- CHANNEL_VALUE : "fOchTaxi",
- // 在启动的时候把Task给清空
- ACTIVITY_ROOT : true,
- // Activity的朝向
- SCREEN_ORIENTATION: "landscape"
- ]
-
- // 是否需要实时上报坐标
- buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'
- // GPS数据提供源: 0-Android系统,1-工控机,2-OBU
- buildConfigField 'int', 'GPS_PROVIDER', "1"
-
- // 构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
- buildConfigField 'String', 'APP_IDENTITY_MODE', "\"Taxi_Driver_DFHQ\""
- // 连接的工控机IP地址
- buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.1.102\""
- // 构建的是否是演示(美化)模式
- buildConfigField 'boolean', 'IS_DEMO_MODE', 'false'
- // 构建的是否要动态更换模型
- buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'true'
- // 是否需要重写状态栏
- buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'false'
-
- // 构建 是否支持多屏异显异交互
- buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false'
-
- //Taxi不能启动自驾的档位
- buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}'
- }
-
-}
\ No newline at end of file
diff --git a/app/productFlavors/fOchTaxiPassenger.gradle b/app/productFlavors/fOchTaxiPassenger.gradle
deleted file mode 100644
index a762c8f8c8..0000000000
--- a/app/productFlavors/fOchTaxiPassenger.gradle
+++ /dev/null
@@ -1,56 +0,0 @@
-project.android.productFlavors {
- // 衡阳-联想Pad-网约车-出租车-乘客端
- fOchTaxiPassenger {
- externalNativeBuild {
- ndk {
- // 设置支持的SO库架构
- abiFilters "armeabi-v7a", "arm64-v8a"
- }
- }
- minSdkVersion rootProject.ext.android.minSdkVersionPadLenovo
- targetSdkVersion rootProject.ext.android.targetSdkVersionPadLenovo
- versionCode rootProject.versionCode as int
- versionName rootProject.versionName
- // 应用包名
- applicationId rootProject.ext.android.fLauncherApplicationId
- dimension "vehicle"
-
- // 车机类型,主要用于区分自研车机还是别人家的车机,自研车机类型为0
- buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
-
- // 配置AndroidManifest.xml中用到的参数
- manifestPlaceholders = [
- // 高德地图鉴权信息
- AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
- // BUGLY_APP_CHANNEL
- CHANNEL_VALUE : "fOchTaxiPassenger",
- // 在启动的时候把Task给清空
- ACTIVITY_ROOT : false,
- // Activity的朝向
- SCREEN_ORIENTATION: "landscape"
- ]
-
- // 是否需要实时上报坐标
- buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'
- // GPS数据提供源: 0-Android系统,1-工控机,2-OBU
- buildConfigField 'int', 'GPS_PROVIDER', "1"
-
- // 构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
- buildConfigField 'String', 'APP_IDENTITY_MODE', "\"Taxi_Passenger_DFHQ\""
- // 连接的工控机IP地址
- buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.1.103\""
- // 构建的是否是演示(美化)模式
- buildConfigField 'boolean', 'IS_DEMO_MODE', 'false'
- // 构建的是否要动态更换模型
- buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'true'
- // 是否需要重写状态栏
- buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'false'
-
- // 构建 是否支持多屏异显异交互
- buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'true'
-
- //Taxi不能启动自驾的档位
- buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}'
- }
-
-}
\ No newline at end of file
diff --git a/app/productFlavors/fPadLenovo.gradle b/app/productFlavors/fPadLenovo.gradle
deleted file mode 100644
index f9cbdfbc63..0000000000
--- a/app/productFlavors/fPadLenovo.gradle
+++ /dev/null
@@ -1,52 +0,0 @@
-project.android.productFlavors {
- // 衡阳-联想Pad
- fPadLenovo {
- externalNativeBuild {
- ndk {
- // 设置支持的SO库架构
- abiFilters "armeabi-v7a", "arm64-v8a"
- }
- }
- minSdkVersion rootProject.ext.android.minSdkVersionPadLenovo
- targetSdkVersion rootProject.ext.android.targetSdkVersionPadLenovo
- // 应用包名
- applicationId rootProject.ext.android.fLauncherApplicationId
- dimension "vehicle"
-
- // 车机类型,主要用于区分自研车机还是别人家的车机,自研车机类型为0
- buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
- // 配置AndroidManifest.xml中用到的参数
- manifestPlaceholders = [
- // 高德地图鉴权信息
- AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
- // BUGLY_APP_CHANNEL
- CHANNEL_VALUE : "fPadLenovo",
- // 在启动的时候把Task给清空
- ACTIVITY_ROOT : true,
- // Activity的朝向
- SCREEN_ORIENTATION: "landscape"
- ]
-
- // 是否需要实时上报坐标
- buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'
- // GPS数据提供源: 0-Android系统,1-工控机,2-OBU
- buildConfigField 'int', 'GPS_PROVIDER', "1"
-
- // 构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
- buildConfigField 'String', 'APP_IDENTITY_MODE', "\"FPad_Noop_Base\""
- // 连接的工控机IP地址
- buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.1.104\""
- // 构建的是否是演示(美化)模式
- buildConfigField 'boolean', 'IS_DEMO_MODE', 'false'
- // 构建的是否要动态更换模型
- buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'true'
- // 是否需要重写状态栏
- buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'false'
-
- // 构建 是否支持多屏异显异交互
- buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false'
-
- //不能启动自驾的档位
- buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null'
- }
-}
\ No newline at end of file
diff --git a/app/productFlavors/flavorsFilterConfig.gradle b/app/productFlavors/flavorsFilterConfig.gradle
deleted file mode 100644
index cb76ba69b5..0000000000
--- a/app/productFlavors/flavorsFilterConfig.gradle
+++ /dev/null
@@ -1,169 +0,0 @@
-
-project.android.variantFilter { variant ->
- def names = variant.flavors*.name
- //要检查特定的构建类型,请使用variant.buildType.name ==“ ”
- if(names.contains("mogo")) {
- // region 过滤noop 的flavors 不带och业务的
- if (names.contains("noop")&&!names.contains("fPadLenovo")) {
- //Gradle会忽略满足上述条件的所有变体
- setIgnore(true)
- }
- // endregion
- // region 过滤sweper 的flavors
- if (names.contains("sweeper") && !names.contains("fOchSweeper")) {
- //Gradle会忽略满足上述条件的所有变体
- setIgnore(true)
- }
- // endregion
- // region 过滤shuttle 的flavors
- if (names.contains("shuttle")) {
- //Gradle会忽略满足上述条件的所有变体
- if (names.contains("fOchShuttle")) {
- } else if (names.contains("fOchShuttleM2")) {
- } else if (names.contains("fOchShuttlePassenger")) {
- } else if (names.contains("fOchShuttlePassengerM2")) {
- } else {
- setIgnore(true)
- }
- }
- // endregion
- // region 过滤taxi 的flavors
- if (names.contains("taxi")) {
- //Gradle会忽略满足上述条件的所有变体
- if (names.contains("fOchTaxi")) {
- } else if (names.contains("fOchTaxiPassenger")) {
- } else if (names.contains("fPadLenovo")) {
- } else if (names.contains("fMultiDisplayOchTaxi")) {
- } else {
- setIgnore(true)
- }
- }
- // endregion
- // region 过滤bus 的flavors
- if (names.contains("bus")) {
- //Gradle会忽略满足上述条件的所有变体
- if (names.contains("fOchBus")) {
- } else if (names.contains("fOchBusPassenger")) {
- } else if (names.contains("fMultiDisplayOchBus")) {
- } else {
- setIgnore(true)
- }
- }
- // endregion
- // region 过滤charter 包车 的flavors
- if (names.contains("charter")) {
- //Gradle会忽略满足上述条件的所有变体
- if (names.contains("ochDriverM1")) {
- } else if (names.contains("ochPassengerM1")) {
- } else if (names.contains("fMultiDisplaySweeper")) {
- } else {
- setIgnore(true)
- }
- }
- // endregion
- }
- else if(names.contains("dali")){
- // region 过滤noop 的flavors 不带och业务的
- if (names.contains("noop")&&!names.contains("fPadLenovo")) {
- //Gradle会忽略满足上述条件的所有变体
- setIgnore(true)
- }
- // endregion
- // region 过滤sweper 的flavors
- if (names.contains("sweeper")) {
- //Gradle会忽略满足上述条件的所有变体
- setIgnore(true)
- }
- // endregion
- // region 过滤taxi 的flavors
- if (names.contains("taxi")) {
- setIgnore(true)
- }
- // endregion
- // region 过滤shuttle 的flavors
- if (names.contains("shuttle")) {
- //Gradle会忽略满足上述条件的所有变体
- if (names.contains("fOchShuttle")) {
- } else if (names.contains("fOchShuttleM2")) {
- } else if (names.contains("fOchShuttlePassenger")) {
- } else if (names.contains("fOchShuttlePassengerM2")) {
- } else {
- setIgnore(true)
- }
- }
- // endregion
- // region 过滤bus 的flavors
- if (names.contains("bus")) {
- //Gradle会忽略满足上述条件的所有变体
- if (names.contains("fOchBus")) {
- } else if (names.contains("fOchBusPassenger")) {
- } else if (names.contains("fMultiDisplayOchBus")) {
- } else {
- setIgnore(true)
- }
- }
- // endregion
- // region 过滤charter 包车 的flavors
- if (names.contains("charter")) {
- //Gradle会忽略满足上述条件的所有变体
- if (names.contains("ochDriverM1")) {
- } else if (names.contains("ochPassengerM1")) {
- } else {
- setIgnore(true)
- }
- }
- // endregion
- }
- else if(names.contains("yantai")){//
- // region 过滤noop 的flavors 不带och业务的
- if (names.contains("noop")&&!names.contains("fPadLenovo")) {
- //Gradle会忽略满足上述条件的所有变体
- setIgnore(true)
- }
- // endregion
- // region 过滤sweper 的flavors
- if (names.contains("sweeper") && !names.contains("fOchSweeper")) {
- //Gradle会忽略满足上述条件的所有变体
- setIgnore(true)
- }
- // endregion
- // region 过滤shuttle 的flavors
- if (names.contains("shuttle")) {
- //Gradle会忽略满足上述条件的所有变体
- if (names.contains("fOchShuttle")) {
- } else if (names.contains("fOchShuttlePassenger")) {
- } else {
- setIgnore(true)
- }
- }
- // endregion
- // region 过滤taxi 的flavors
- if (names.contains("taxi")) {
- //Gradle会忽略满足上述条件的所有变体
- setIgnore(true)
- }
- // endregion
- // region 过滤bus 的flavors
- if (names.contains("bus")) {
- //Gradle会忽略满足上述条件的所有变体
- setIgnore(true)
- }
- // endregion
- // region 过滤charter 包车 的flavors
- if (names.contains("charter")) {
- //Gradle会忽略满足上述条件的所有变体
- if (names.contains("ochDriverM1")) {
- } else if (names.contains("ochPassengerM1")) {
- } else {
- setIgnore(true)
- }
- }
- // endregion
- }
- else {
- setIgnore(true)
- }
-}
-
-
-
diff --git a/app/productFlavors/ochDriverM1.gradle b/app/productFlavors/ochDriverM1.gradle
deleted file mode 100644
index 7d02b12688..0000000000
--- a/app/productFlavors/ochDriverM1.gradle
+++ /dev/null
@@ -1,55 +0,0 @@
-project.android.productFlavors {
- // 衡阳-联想Pad-网约车-小巴车
- ochDriverM1 {
- externalNativeBuild {
- ndk {
- // 设置支持的SO库架构
- abiFilters "armeabi-v7a", "arm64-v8a"
- }
- }
- minSdkVersion rootProject.ext.android.minSdkVersionPadLenovo
- targetSdkVersion rootProject.ext.android.targetSdkVersionPadLenovo
- versionCode rootProject.versionCode as int
- versionName rootProject.versionName
- // 应用包名
- applicationId rootProject.ext.android.fLauncherApplicationId
- dimension "vehicle"
- matchingFallbacks = ['driverm1']
-
- // 车机类型,主要用于区分自研车机还是别人家的车机,自研车机类型为0
- buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
- // 配置AndroidManifest.xml中用到的参数
- manifestPlaceholders = [
- // 高德地图鉴权信息
- AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
- // BUGLY_APP_CHANNEL
- CHANNEL_VALUE : "fOchBus",
- // 在启动的时候把Task给清空
- ACTIVITY_ROOT : true,
- // Activity的朝向
- SCREEN_ORIENTATION: "landscape"
- ]
-
- // 是否需要实时上报坐标
- buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'
- // GPS数据提供源: 0-Android系统,1-工控机,2-OBU
- buildConfigField 'int', 'GPS_PROVIDER', "1"
-
- // 构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
- buildConfigField 'String', 'APP_IDENTITY_MODE', "\"Charter_Driver_M1\""
- // 连接的工控机IP地址
- buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.8.102\""
- // 构建的是否是演示(美化)模式
- buildConfigField 'boolean', 'IS_DEMO_MODE', 'false'
- // 构建的是否要动态更换模型
- buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'false'
- // 是否需要重写状态栏
- buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'false'
-
- // 构建 是否支持多屏异显异交互
- buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false'
-
- //M1不能启动自驾的档位
- buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null'
- }
-}
\ No newline at end of file
diff --git a/app/productFlavors/ochPassengerM1.gradle b/app/productFlavors/ochPassengerM1.gradle
deleted file mode 100644
index 67af2a0def..0000000000
--- a/app/productFlavors/ochPassengerM1.gradle
+++ /dev/null
@@ -1,55 +0,0 @@
-project.android.productFlavors {
- // 衡阳-联想Pad-网约车-小巴车-乘客端
- ochPassengerM1 {
- externalNativeBuild {
- ndk {
- // 设置支持的SO库架构
- abiFilters "armeabi-v7a", "arm64-v8a"
- }
- }
- minSdkVersion rootProject.ext.android.minSdkVersionPadLenovo
- targetSdkVersion rootProject.ext.android.targetSdkVersionPadLenovo
- // 应用包名
- applicationId rootProject.ext.android.fLauncherApplicationId
- dimension "vehicle"
- // 和 och/mogo-och-bus-passenger 的flavors的m1对应
- matchingFallbacks = ['m1']
-
- // 车机类型,主要用于区分自研车机还是别人家的车机,自研车机类型为0
- buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
-
- // 配置AndroidManifest.xml中用到的参数
- manifestPlaceholders = [
- // 高德地图鉴权信息
- AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
- // BUGLY_APP_CHANNEL
- CHANNEL_VALUE : "fOchBusPassenger",
- // 在启动的时候把Task给清空
- ACTIVITY_ROOT : true,
- // Activity的朝向
- SCREEN_ORIENTATION: "landscape"
- ]
-
- // 是否需要实时上报坐标
- buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'
- // GPS数据提供源: 0-Android系统,1-工控机,2-OBU
- buildConfigField 'int', 'GPS_PROVIDER', "1"
-
- // 构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
- buildConfigField 'String', 'APP_IDENTITY_MODE', "\"Charter_Passenger_M1\""
- // 连接的工控机IP地址
- buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.8.103\""
- // 构建的是否是演示(美化)模式
- buildConfigField 'boolean', 'IS_DEMO_MODE', 'false'
- // 构建的是否要动态更换模型
- buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'false'
- // 是否需要重写状态栏
- buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'true'
-
- // 构建 是否支持多屏异显异交互
- buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false'
-
- //M1不能启动自驾的档位
- buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null'
- }
-}
\ No newline at end of file
diff --git a/app/regroup.gradle b/app/regroup.gradle
index d21831358a..8d0fdf84e7 100644
--- a/app/regroup.gradle
+++ b/app/regroup.gradle
@@ -3,14 +3,14 @@ afterEvaluate {
def launcher = [
"fPadLenovo",
- "fOchSweeper",
+ "ochFT",
"fOchTaxi",
- "fOchBus",
- "fOchBusPassenger",
+ "ochJL",
+ "ochJL",
"fOchBusPassengerM1",
- "fOchShuttlePassengerM2",
- "fOchShuttle",
- "fOchShuttlePassenger",
+ "ochM2",
+ "ochJL",
+ "ochJL",
"fOchTaxiPassenger",
"MultiDisplayOchBus",
"MultiDisplayOchTaxi"]
diff --git a/app/script/flavorfilter/flavors.json b/app/script/flavorfilter/flavors.json
new file mode 100644
index 0000000000..a03317857b
--- /dev/null
+++ b/app/script/flavorfilter/flavors.json
@@ -0,0 +1,54 @@
+{
+ "mogo": {
+ "noop" :{
+ "driver":["fPadLenovo"]
+ },
+ "sweeperOperate" :{
+ "driver": ["ochFT"]
+ },
+ "sweeperCloud" :{
+ "driver": ["ochFT"]
+ },
+ "shuttle" :{
+ "driver": ["ochJL","ochM2"],
+ "passenger": ["ochJL","ochM2"]
+ },
+ "taxi" :{
+ "driver": ["ochDFHQ"],
+ "driverpassenger": ["ochDFHQ"],
+ "passenger": ["ochDFHQ"]
+ },
+ "bus" :{
+ "driver": ["ochJL"],
+ "driverpassenger": ["ochJL"],
+ "passenger": ["ochJL"]
+ },
+ "charter" :{
+ "driver": ["ochM1"],
+ "passenger": ["ochM1"]
+ }
+ },
+ "dali": {
+ "shuttle" :{
+ "driver": ["ochJL","ochM2"],
+ "passenger": ["ochJL","ochM2"]
+ },
+ "charter" :{
+ "driver": ["ochM1"],
+ "passenger": ["ochM1"]
+ }
+ },
+ "yantai": {
+ "sweeperOperate" :{
+ "driver": ["ochFT"]
+ },
+ "shuttle" :{
+ "driver": ["ochJL","ochM2"],
+ "passenger": ["ochJL","ochM2"]
+ },
+ "charter" :{
+ "driver": ["ochM1"],
+ "passenger": ["ochM1"]
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/script/flavorfilter/flavorsFilterConfig.gradle b/app/script/flavorfilter/flavorsFilterConfig.gradle
new file mode 100644
index 0000000000..87c0a86212
--- /dev/null
+++ b/app/script/flavorfilter/flavorsFilterConfig.gradle
@@ -0,0 +1,53 @@
+import groovy.json.JsonSlurper
+
+
+File file = new File("${rootDir}/app/script/flavorfilter/flavors.json")
+def jsonSlurper = new JsonSlurper()
+// 解析json
+def config = jsonSlurper.parse(file)
+
+project.android.variantFilter { variant ->
+ def names = variant.flavors*.name
+ //要检查特定的构建类型,请使用variant.buildType.name ==“ ”
+// println "------$names"
+ def projectContain = true
+ config.each { projectKey,projectValue ->
+ if(names.contains(projectKey)){
+ projectContain = false
+ def productContain = true
+ projectValue.each{productKey,productValue->
+ if(names.contains(productKey)){
+ productContain =false
+ def roleContain = true
+ productValue.each{roleKey,roleValue->
+ if(names.contains(roleKey)){
+ roleContain =false
+ def vehicleContain = true
+ roleValue.each{vehicleValue->
+ if (names.contains(vehicleValue)) {
+ println "need $names"
+ vehicleContain = false
+ }
+ }
+ if(vehicleContain){
+ setIgnore(true)
+ }
+ }
+ }
+ if(roleContain){
+ setIgnore(true)
+ }
+ }
+ }
+ if(productContain){
+ setIgnore(true)
+ }
+ }
+ }
+ if(projectContain){
+ setIgnore(true)
+ }
+}
+
+
+
diff --git a/app/functions/README.md b/app/script/functions/README.md
similarity index 100%
rename from app/functions/README.md
rename to app/script/functions/README.md
diff --git a/app/script/functions/och.gradle b/app/script/functions/och.gradle
new file mode 100644
index 0000000000..29d99eae0f
--- /dev/null
+++ b/app/script/functions/och.gradle
@@ -0,0 +1,33 @@
+// 网约车服务:仅小巴车、出租车渠道用
+project.dependencies {
+ if (Boolean.valueOf(USE_MAVEN_PACKAGE)) {
+ fPadLenovoImplementation(rootProject.ext.dependencies.mogoochnoop)
+
+ // Bus司机端
+// fMultiDisplayOchBusImplementation(rootProject.ext.dependencies.mogoochbus)
+// // Bus乘客端
+// fMultiDisplayOchBusImplementation(rootProject.ext.dependencies.mogoochbus)
+//
+// // taxi司机端
+// fMultiDisplayOchTaxiImplementation(rootProject.ext.dependencies.mogoochtaxi)
+// // taxi乘客端
+// fMultiDisplayOchTaxiImplementation(rootProject.ext.dependencies.mogoochtaxi)
+
+ } else {
+ fPadLenovoImplementation (project(':OCH:mogo-och-noop'))
+
+ // 多屏幕-Bus司机端
+// fMultiDisplayOchBusImplementation (project(':OCH:mogo-och-bus'))
+// // 多屏幕-Bus乘客端
+// fMultiDisplayOchBusImplementation (project(':OCH:mogo-och-bus-passenger'))
+//
+// // taxi司机端
+// fMultiDisplayOchTaxiImplementation (project(':OCH:mogo-och-taxi'))
+// // 多屏幕-taxi乘客端
+// fMultiDisplayOchTaxiImplementation (project(':OCH:mogo-och-taxi-passenger'))
+//
+// // 清扫车-多屏幕
+// fMultiDisplaySweeperImplementation (project(':OCH:mogo-och-sweeper'))
+
+ }
+}
diff --git a/app/script/productFlavors/bus.gradle b/app/script/productFlavors/bus.gradle
new file mode 100644
index 0000000000..295d5a7295
--- /dev/null
+++ b/app/script/productFlavors/bus.gradle
@@ -0,0 +1,36 @@
+apply from: "./script/utils.gradle"
+
+project.android.productFlavors {
+ bus {
+ dimension "product"
+
+ manifestPlaceholders = [
+ // 标识
+ CHANNEL_VALUE_HEAD: "Bus",
+ // 在启动的时候把Task给清空
+ ACTIVITY_ROOT : true,
+ // Activity的朝向
+ SCREEN_ORIENTATION:"landscape",
+ ]
+
+ // ①标识
+ buildConfigField 'String', 'APP_IDENTITY_MODE_HEAD', "\"Bus\""
+
+ // ②连接的工控机IP地址
+ buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.8.102\""
+
+ // ③是否需要重写状态栏
+ buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'false'
+
+ // ④构建 是否支持多屏异显异交互
+ buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false'
+
+ if(isCurrentDriver("bus")){
+ project.dependencies.add('implementation', project.project(':OCH:mogo-och-bus'))
+ }
+ if(isCurrentPassenger("bus")){
+ project.dependencies.add('implementation', project.project(':OCH:mogo-och-bus-passenger'))
+ }
+ }
+}
+
diff --git a/app/script/productFlavors/charter.gradle b/app/script/productFlavors/charter.gradle
new file mode 100644
index 0000000000..5c4d34e613
--- /dev/null
+++ b/app/script/productFlavors/charter.gradle
@@ -0,0 +1,35 @@
+apply from: "./script/utils.gradle"
+
+project.android.productFlavors {
+ // 包车业务
+ charter{
+ dimension "product"
+
+ manifestPlaceholders = [
+ CHANNEL_VALUE_HEAD: "Charter",
+ // 在启动的时候把Task给清空
+ ACTIVITY_ROOT : true,
+ // Activity的朝向
+ SCREEN_ORIENTATION:"landscape",
+ ]
+ // ①标识
+ buildConfigField 'String', 'APP_IDENTITY_MODE_HEAD', "\"Charter\""
+
+ // ②连接的工控机IP地址
+ buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.8.102\""
+
+ // ④构建 是否支持多屏异显异交互
+ buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false'
+
+ if(isCurrentDriver("charter")){
+ // ③是否需要重写状态栏
+ buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'false'
+ project.dependencies.add('implementation', project.project(':OCH:mogo-och-charter'))
+ }
+ if(isCurrentPassenger("charter")){
+ // ③是否需要重写状态栏
+ buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'true'
+ project.dependencies.add('implementation', project.project(':OCH:mogo-och-charter-passenger'))
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/script/productFlavors/noop.gradle b/app/script/productFlavors/noop.gradle
new file mode 100644
index 0000000000..12de255384
--- /dev/null
+++ b/app/script/productFlavors/noop.gradle
@@ -0,0 +1,32 @@
+project.android.productFlavors {
+ // 空业务 主要是给鹰眼使用
+ noop {
+ dimension "product"
+
+ manifestPlaceholders = [
+ // 标识
+ CHANNEL_VALUE_HEAD: "Noop",
+ // 在启动的时候把Task给清空
+ ACTIVITY_ROOT : true,
+ // Activity的朝向
+ SCREEN_ORIENTATION:"landscape",
+ ]
+
+ // ①标识
+ buildConfigField 'String', 'APP_IDENTITY_MODE_HEAD', "\"FPad\""
+
+ // ②连接的工控机IP地址
+ buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.1.104\""
+
+ // ③是否需要重写状态栏
+ buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'false'
+
+ // ④构建 是否支持多屏异显异交互
+ buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false'
+
+ if(isCurrentDriver("noop")){
+ project.dependencies.add('implementation', project.project(':OCH:mogo-och-noop'))
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/script/productFlavors/shuttle.gradle b/app/script/productFlavors/shuttle.gradle
new file mode 100644
index 0000000000..2544d9c22c
--- /dev/null
+++ b/app/script/productFlavors/shuttle.gradle
@@ -0,0 +1,48 @@
+apply from: "./script/utils.gradle"
+
+project.android.productFlavors {
+ // 接驳车业务
+ shuttle {
+ dimension "product"
+
+ manifestPlaceholders = [
+ // 标识
+ CHANNEL_VALUE_HEAD: "Shuttle",
+ // 在启动的时候把Task给清空
+ ACTIVITY_ROOT : true,
+ ]
+
+ // ①标识
+ buildConfigField 'String', 'APP_IDENTITY_MODE_HEAD', "\"Shuttle\""
+
+ // ②连接的工控机IP地址
+ buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.8.102\""
+
+ if (isCurrentDriver("shuttle")) {
+ // ③是否需要重写状态栏
+ buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'false'
+ // ④构建 是否支持多屏异显异交互
+ buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false'
+ project.dependencies.add('implementation', project.project(':OCH:mogo-och-shuttle'))
+ manifestPlaceholders.put("SCREEN_ORIENTATION", "landscape")
+ }
+ if (isCurrentPassenger("shuttle")) {
+ if(isM2()){
+ // ③是否需要重写状态栏
+ buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'true'
+ // ④构建 是否支持多屏异显异交互
+ buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false'
+ manifestPlaceholders.put("SCREEN_ORIENTATION", "portrait")
+ }
+ if(isJL()){
+ // ③是否需要重写状态栏
+ buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'false'
+ // ④构建 是否支持多屏异显异交互
+ buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'true'
+ manifestPlaceholders.put("SCREEN_ORIENTATION", "landscape")
+ }
+
+ project.dependencies.add('implementation', project.project(':OCH:mogo-och-shuttle-passenger'))
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/script/productFlavors/sweeperCloud.gradle b/app/script/productFlavors/sweeperCloud.gradle
new file mode 100644
index 0000000000..5c9bbc338c
--- /dev/null
+++ b/app/script/productFlavors/sweeperCloud.gradle
@@ -0,0 +1,32 @@
+project.android.productFlavors {
+ // 清扫车业务
+ sweeperCloud {
+ dimension "product"
+
+ manifestPlaceholders = [
+ // 标识
+ CHANNEL_VALUE_HEAD: "Sweeper",
+ // 在启动的时候把Task给清空
+ ACTIVITY_ROOT : true,
+ // Activity的朝向
+ SCREEN_ORIENTATION:"landscape",
+ ]
+
+ // ①标识
+ buildConfigField 'String', 'APP_IDENTITY_MODE_HEAD', "\"Sweeper\""
+
+ // ②连接的工控机IP地址
+ buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.8.102\""
+
+ // ③是否需要重写状态栏
+ buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'false'
+
+ // ④构建 是否支持多屏异显异交互
+ buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false'
+
+
+ if(isCurrentFlavors("sweeperCloud")){
+ project.dependencies.add('implementation', project.project(':OCH:sweeper:sweeper-cloud'))
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/script/productFlavors/sweeperOperate.gradle b/app/script/productFlavors/sweeperOperate.gradle
new file mode 100644
index 0000000000..5a576b8117
--- /dev/null
+++ b/app/script/productFlavors/sweeperOperate.gradle
@@ -0,0 +1,32 @@
+project.android.productFlavors {
+ // 清扫车业务
+ sweeperOperate {
+ dimension "product"
+
+ manifestPlaceholders = [
+ // 标识
+ CHANNEL_VALUE_HEAD: "Sweeper",
+ // 在启动的时候把Task给清空
+ ACTIVITY_ROOT : true,
+ // Activity的朝向
+ SCREEN_ORIENTATION:"landscape",
+ ]
+
+ // ①标识
+ buildConfigField 'String', 'APP_IDENTITY_MODE_HEAD', "\"Sweeper\""
+
+ // ②连接的工控机IP地址
+ buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.8.102\""
+
+ // ③是否需要重写状态栏
+ buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'false'
+
+ // ④构建 是否支持多屏异显异交互
+ buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false'
+
+
+ if(isCurrentFlavors("sweeperOperate")){
+ project.dependencies.add('implementation', project.project(':OCH:sweeper:sweeper'))
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/script/productFlavors/taxi.gradle b/app/script/productFlavors/taxi.gradle
new file mode 100644
index 0000000000..963222eb2c
--- /dev/null
+++ b/app/script/productFlavors/taxi.gradle
@@ -0,0 +1,34 @@
+project.android.productFlavors {
+ // 出租车业务
+ taxi {
+ dimension "product"
+
+ manifestPlaceholders = [
+ CHANNEL_VALUE_HEAD: "Taxi",
+ // Activity的朝向
+ SCREEN_ORIENTATION:"landscape",
+ ]
+ // ①标识
+ buildConfigField 'String', 'APP_IDENTITY_MODE_HEAD', "\"Taxi\""
+
+ // ②连接的工控机IP地址
+ buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.1.102\""
+
+ // ③是否需要重写状态栏
+ buildConfigField 'boolean', 'IS_REPLACE_STATUSVIEW', 'false'
+
+ // ④构建 是否支持多屏异显异交互
+ buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false'
+
+ if (isCurrentDriver("taxi")) {
+ project.dependencies.add('implementation', project.project(':OCH:mogo-och-taxi'))
+ // 在启动的时候把Task给清空
+ manifestPlaceholders.put("ACTIVITY_ROOT", true)
+ }
+ if (isCurrentPassenger("taxi")) {
+ project.dependencies.add('implementation', project.project(':OCH:mogo-och-taxi-passenger'))
+ // 在启动的时候把Task给清空
+ manifestPlaceholders.put("ACTIVITY_ROOT", false)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/script/roleFlavors/driver.gradle b/app/script/roleFlavors/driver.gradle
new file mode 100644
index 0000000000..255863cba2
--- /dev/null
+++ b/app/script/roleFlavors/driver.gradle
@@ -0,0 +1,37 @@
+project.android.productFlavors {
+ driver {
+ dimension "role"
+ externalNativeBuild {
+ ndk {
+ // 设置支持的SO库架构
+ abiFilters "armeabi-v7a", "arm64-v8a"
+ }
+ }
+
+ manifestPlaceholders = [
+ CHANNEL_VALUE_BODY : "Driver",
+ ]
+
+ minSdkVersion rootProject.ext.android.minSdkVersionPadLenovo
+ targetSdkVersion rootProject.ext.android.targetSdkVersionPadLenovo
+ versionCode rootProject.versionCode as int
+ versionName rootProject.versionName
+ // 应用包名
+ applicationId rootProject.ext.android.fLauncherApplicationId
+
+ // ①标识
+ buildConfigField 'String', 'APP_IDENTITY_MODE_BODY', "\"Driver\""
+
+ // ②车机类型,主要用于区分自研车机还是别人家的车机,自研车机类型为0
+ buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
+
+ // ③是否需要实时上报坐标
+ buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'
+
+ // ④GPS数据提供源: 0-Android系统,1-工控机,2-OBU
+ buildConfigField 'int', 'GPS_PROVIDER', "1"
+
+ // ⑤构建的是否是演示(美化)模式
+ buildConfigField 'boolean', 'IS_DEMO_MODE', 'false'
+ }
+}
\ No newline at end of file
diff --git a/app/script/roleFlavors/driverpassenger.gradle b/app/script/roleFlavors/driverpassenger.gradle
new file mode 100644
index 0000000000..16d3557134
--- /dev/null
+++ b/app/script/roleFlavors/driverpassenger.gradle
@@ -0,0 +1,37 @@
+project.android.productFlavors {
+ driverpassenger {
+ dimension "role"
+ externalNativeBuild {
+ ndk {
+ // 设置支持的SO库架构
+ abiFilters "armeabi-v7a", "arm64-v8a"
+ }
+ }
+
+ manifestPlaceholders = [
+ CHANNEL_VALUE_BODY : "Driver",
+ ]
+
+ minSdkVersion rootProject.ext.android.minSdkVersionPadLenovo
+ targetSdkVersion rootProject.ext.android.targetSdkVersionPadLenovo
+ versionCode rootProject.versionCode as int
+ versionName rootProject.versionName
+ // 应用包名
+ applicationId rootProject.ext.android.fLauncherApplicationId
+
+ // ①标识
+ buildConfigField 'String', 'APP_IDENTITY_MODE_BODY', "\"Driver\""
+
+ // ②车机类型,主要用于区分自研车机还是别人家的车机,自研车机类型为0
+ buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
+
+ // ③是否需要实时上报坐标
+ buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'
+
+ // ④GPS数据提供源: 0-Android系统,1-工控机,2-OBU
+ buildConfigField 'int', 'GPS_PROVIDER', "1"
+
+ // ⑤构建的是否是演示(美化)模式
+ buildConfigField 'boolean', 'IS_DEMO_MODE', 'false'
+ }
+}
\ No newline at end of file
diff --git a/app/script/roleFlavors/passenger.gradle b/app/script/roleFlavors/passenger.gradle
new file mode 100644
index 0000000000..b2ca2baf59
--- /dev/null
+++ b/app/script/roleFlavors/passenger.gradle
@@ -0,0 +1,35 @@
+project.android.productFlavors {
+ passenger {
+ dimension "role"
+ externalNativeBuild {
+ ndk {
+ // 设置支持的SO库架构
+ abiFilters "armeabi-v7a", "arm64-v8a"
+ }
+ }
+
+ manifestPlaceholders = [
+ CHANNEL_VALUE_BODY : "Passenger",
+ ]
+
+ minSdkVersion rootProject.ext.android.minSdkVersionPadLenovo
+ targetSdkVersion rootProject.ext.android.targetSdkVersionPadLenovo
+ versionCode rootProject.versionCode as int
+ versionName rootProject.versionName
+ // 应用包名
+ applicationId rootProject.ext.android.fLauncherApplicationId
+
+ // ①标识
+ buildConfigField 'String', 'APP_IDENTITY_MODE_BODY', "\"Passenger\""
+ // ②车机类型,主要用于区分自研车机还是别人家的车机,自研车机类型为0
+ buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
+
+ // ③是否需要实时上报坐标
+ buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'
+ // ④GPS数据提供源: 0-Android系统,1-工控机,2-OBU
+ buildConfigField 'int', 'GPS_PROVIDER', "1"
+
+ // ⑤构建的是否是演示(美化)模式
+ buildConfigField 'boolean', 'IS_DEMO_MODE', 'false'
+ }
+}
\ No newline at end of file
diff --git a/app/script/utils.gradle b/app/script/utils.gradle
new file mode 100644
index 0000000000..9db724526c
--- /dev/null
+++ b/app/script/utils.gradle
@@ -0,0 +1,70 @@
+boolean isCurrentDriver(String flavors) {
+ if(isDriver() && isCurrentFlavors(flavors)){
+ return true
+ }
+ return false
+}
+
+boolean isCurrentPassenger(String flavors) {
+ if(isPassenger() && isCurrentFlavors(flavors)){
+ return true
+ }
+ return false
+}
+
+boolean isDriver() {
+ for (String s : gradle.startParameter.taskNames) {
+ if (s.contains("Driver") | s.contains("driver")) {
+ return true
+ }
+ }
+ return false
+}
+
+boolean isPassenger() {
+ for (String s : gradle.startParameter.taskNames) {
+ if (s.contains("Passenger") | s.contains("passenger")) {
+ return true
+ }
+ }
+ return false
+}
+
+boolean isJL() {
+ for (String s : gradle.startParameter.taskNames) {
+ if (s.contains("OchJL") | s.contains("ochJL")) {
+ return true
+ }
+ }
+ return false
+}
+
+boolean isM2() {
+ for (String s : gradle.startParameter.taskNames) {
+ if (s.contains("OchM2") | s.contains("ochM2")) {
+ return true
+ }
+ }
+ return false
+}
+
+boolean isCurrentFlavors(String flavors){
+ for (String s : gradle.startParameter.taskNames) {
+
+ def lowerCase = flavors.toLowerCase()
+ if (s.toLowerCase().contains(lowerCase)) {
+ return true
+ }
+ }
+ return false
+}
+
+ext {
+ isPassenger = this.&isPassenger
+ isDriver = this.&isDriver
+ isCurrentFlavors = this.&isCurrentFlavors
+ isCurrentDriver = this.&isCurrentDriver
+ isCurrentPassenger = this.&isCurrentPassenger
+ isJL = this.&isJL
+ isM2 = this.&isM2
+}
\ No newline at end of file
diff --git a/app/productFlavors/README.md b/app/script/vehicleFlavors/README.md
similarity index 100%
rename from app/productFlavors/README.md
rename to app/script/vehicleFlavors/README.md
diff --git a/app/script/vehicleFlavors/fPadLenovo.gradle b/app/script/vehicleFlavors/fPadLenovo.gradle
new file mode 100644
index 0000000000..2491d98530
--- /dev/null
+++ b/app/script/vehicleFlavors/fPadLenovo.gradle
@@ -0,0 +1,22 @@
+project.android.productFlavors {
+ // 衡阳-联想Pad
+ fPadLenovo {
+ dimension "vehicle"
+
+
+ // 配置AndroidManifest.xml中用到的参数
+ manifestPlaceholders = [
+ // BUGLY_APP_CHANNEL
+ CHANNEL_VALUE_TAIL: "Noop",
+ ]
+
+ // ①标识构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
+ buildConfigField 'String', 'APP_IDENTITY_MODE_TAIL', "\"Noop\""
+
+ // ②构建的是否要动态更换模型
+ buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'true'
+
+ // ③不能启动自驾的档位
+ buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null'
+ }
+}
\ No newline at end of file
diff --git a/app/script/vehicleFlavors/ochDFHQ.gradle b/app/script/vehicleFlavors/ochDFHQ.gradle
new file mode 100644
index 0000000000..90e48b667a
--- /dev/null
+++ b/app/script/vehicleFlavors/ochDFHQ.gradle
@@ -0,0 +1,25 @@
+project.android.productFlavors {
+ // 东风红旗
+ ochDFHQ {
+ dimension "vehicle"
+
+
+ // 配置AndroidManifest.xml中用到的参数
+ manifestPlaceholders = [
+ // BUGLY_APP_CHANNEL
+ CHANNEL_VALUE_TAIL: "DFHQ",
+ ]
+
+
+ // ①标识构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
+ buildConfigField 'String', 'APP_IDENTITY_MODE_TAIL', "\"DFHQ\""
+
+ // ②构建的是否要动态更换模型
+ buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'true'
+
+ // ③不能启动自驾的档位
+ buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}'
+
+ }
+
+}
\ No newline at end of file
diff --git a/app/script/vehicleFlavors/ochFT.gradle b/app/script/vehicleFlavors/ochFT.gradle
new file mode 100644
index 0000000000..1f711ee29f
--- /dev/null
+++ b/app/script/vehicleFlavors/ochFT.gradle
@@ -0,0 +1,22 @@
+project.android.productFlavors {
+ // 福田车
+ ochFT {
+ dimension "vehicle"
+
+
+ // 配置AndroidManifest.xml中用到的参数
+ manifestPlaceholders = [
+ // BUGLY_APP_CHANNEL
+ CHANNEL_VALUE_TAIL: "FT",
+ ]
+
+ // ①标识构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
+ buildConfigField 'String', 'APP_IDENTITY_MODE_TAIL', "\"FT\""
+
+ // ②构建的是否要动态更换模型
+ buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'true'
+
+ // ③不能启动自驾的档位
+ buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null'
+ }
+}
\ No newline at end of file
diff --git a/app/script/vehicleFlavors/ochJL.gradle b/app/script/vehicleFlavors/ochJL.gradle
new file mode 100644
index 0000000000..831bdd7ecd
--- /dev/null
+++ b/app/script/vehicleFlavors/ochJL.gradle
@@ -0,0 +1,22 @@
+project.android.productFlavors {
+ // 衡阳-联想Pad-网约车-小巴车
+ ochJL {
+ dimension "vehicle"
+ matchingFallbacks = ['jinlvvan']
+
+ // 配置AndroidManifest.xml中用到的参数
+ manifestPlaceholders = [
+ // BUGLY_APP_CHANNEL
+ CHANNEL_VALUE_TAIL : "JL",
+ ]
+
+ // ①标识构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
+ buildConfigField 'String', 'APP_IDENTITY_MODE_TAIL', "\"JL\""
+
+ // ②构建的是否要动态更换模型
+ buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'true'
+
+ // ③不能启动自驾的档位
+ buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}'
+ }
+}
\ No newline at end of file
diff --git a/app/script/vehicleFlavors/ochM1.gradle b/app/script/vehicleFlavors/ochM1.gradle
new file mode 100644
index 0000000000..77bdc5e030
--- /dev/null
+++ b/app/script/vehicleFlavors/ochM1.gradle
@@ -0,0 +1,30 @@
+apply from: "./script/utils.gradle"
+
+project.android.productFlavors {
+ // 金旅M1车
+ ochM1 {
+ dimension "vehicle"
+
+ // 配置AndroidManifest.xml中用到的参数
+ manifestPlaceholders = [
+ // BUGLY_APP_CHANNEL
+ CHANNEL_VALUE_TAIL: "M1",
+ ]
+
+ // ①标识构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
+ buildConfigField 'String', 'APP_IDENTITY_MODE_TAIL', "\"M1\""
+ // ②构建的是否要动态更换模型
+ buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null'
+
+ // ③不能启动自驾的档位
+ buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'false'
+
+ if(isDriver()){
+ matchingFallbacks = ['driverm1']
+ }
+ if(isPassenger()){
+ matchingFallbacks = ['m1']
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/script/vehicleFlavors/ochM2.gradle b/app/script/vehicleFlavors/ochM2.gradle
new file mode 100644
index 0000000000..2f016eb3fa
--- /dev/null
+++ b/app/script/vehicleFlavors/ochM2.gradle
@@ -0,0 +1,23 @@
+project.android.productFlavors {
+ // 衡阳-联想Pad-网约车-小巴车-乘客端
+ ochM2 {
+ dimension "vehicle"
+ // 和 och/mogo-och-bus-passenger 的flavors的m2对应
+ matchingFallbacks = ['m2']
+
+
+ //高德地图鉴权信息
+ manifestPlaceholders = [
+ CHANNEL_VALUE_TAIL: "M2",
+ ]
+
+ // ①标识构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
+ buildConfigField 'String', 'APP_IDENTITY_MODE_TAIL', "\"M2\""
+
+ // ②构建的是否要动态更换模型
+ buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'false'
+
+ // ③M2不能启动自驾的档位
+ buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}'
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 93042f91d2..c147f4e189 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -26,7 +26,7 @@
+ android:value="${CHANNEL_VALUE_HEAD}_${CHANNEL_VALUE_BODY}_${CHANNEL_VALUE_TAIL}" />
- def buildTypeName = variant.buildType.name
- //println("buildTypeName-------->" + buildTypeName)
- variant.outputs.all {
- StringBuffer buffer = new StringBuffer()
- buffer.append(getProject().name)
- buffer.append("_")
- buffer.append(defaultConfig.versionName)
- buffer.append(".")
- buffer.append(buildTimes)
- buffer.append("_")
- buffer.append(gitBranchName)
- buffer.append("_")
- //获取渠道编号
- String flavor = variant.flavorName
- if (flavor != null && flavor != "") {
- buffer.append(flavor)
- buffer.append("_")
- }
- //获取打包时间
- def fileName = "${buffer.toString()}${buildTypeName}.apk"
- //测试文件名称
- buildConfigField 'String', 'APK_NAME', "\"${fileName}\""
- //println("fileName-------->" + fileName)
- //这里修改apk文件名
- outputFileName = fileName
- }
- }
-
- //插入构建时间
- buildTypes.each {
- it.buildConfigField 'String', 'BUILD_TIME', "\"${buildTimes}\""
- it.buildConfigField 'String', 'GIT_BRANCH_NAME', "\"${gitBranchName}\""
- it.buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_TAXI', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}'
- it.buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_BUS', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}'
- it.buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_M1', 'null'
- it.buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_M2', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}'
- it.buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_SWEEPER', 'null'
- it.buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_VAN', 'null'
- }
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
- }
-
- productFlavors {
- passenger {
- dimension "multi_device"
- buildConfigField 'boolean', 'IS_CLIENT', 'true'
- }
- driver {
- dimension "multi_device"
- buildConfigField 'boolean', 'IS_CLIENT', 'false'
-
- }
-
- }
- lintOptions {
- checkReleaseBuilds false
- // Or, if you prefer, you can continue to check for errors in release builds,
- // but continue the build even when errors are found:
- abortOnError false
- }
-}
-
-dependencies {
- implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation rootProject.ext.dependencies.material
- implementation rootProject.ext.dependencies.androidxconstraintlayout
- implementation rootProject.ext.dependencies.androidxappcompat
- implementation "androidx.recyclerview:recyclerview:1.2.0"
- testImplementation 'junit:junit:4.13.2'
- androidTestImplementation 'androidx.test.ext:junit:1.1.3'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
- implementation rootProject.ext.dependencies.gson
- implementation 'com.github.bumptech.glide:glide:4.11.0'
- implementation project(':libraries:mogo-adas')
- implementation project(':libraries:mogo-adas-data')
- implementation project(':libraries:mogo-obu')
-// implementation 'com.zhidao.support.adas:high:2.8.0.0'
-// implementation 'com.zhjt.mogo.adas.data:adas-data:2.6.6.0'
-// compileOnly project(':core:mogo-core-data')
-// implementation project(':core:mogo-core-utils')
- implementation 'org.greenrobot:eventbus:3.2.0'
- implementation 'com.android.support:multidex:1.0.3'
-// implementation 'com.mogo.cloud:telematic:1.3.59'//注释掉司机端 乘客端
- implementation 'com.jcraft:jsch:0.1.55'
-}
-
-// 删除老的APK
-def checkRelease() {
- def runTasks = gradle.startParameter.taskNames
- for (String task : runTasks) {
- // 我这里认为执行“assembleRelease”和非“debug”的任务就是执行“release”的任务
- if (task.contains("assembleRelease") || task.contains("Release")) {
- deleteOldAPK("release")
- return true
- } else if (task.contains("Debug")) {
- deleteOldAPK("debug")
- return false
- }
- }
- return false
-}
-//在Moudle 根目录中创建gradle.properties文件存储VersionCode
-def createFile() {
- def propFile = file('./gradle.properties')
- Properties props = new Properties()
- if (!propFile.exists()) {
- propFile.createNewFile()
- props.load(new FileInputStream(propFile))
- props['VERSION_CODE'] = '1'
- props.store(propFile.newWriter(), null)
- } else {
- props.load(new FileInputStream(propFile))
- def code = props['VERSION_CODE']
- if (code == null || code == "0") {
- props['VERSION_CODE'] = '1'
- props.store(propFile.newWriter(), null)
- }
- }
-}
-//读取VersionCode
-def readVersionCode() {
- def propFile = file('./gradle.properties')
- Properties props = new Properties()
- props.load(new FileInputStream(propFile))
- // 读取gradle.properties文件中定义的VERSION_CODE属性
- def code = props['VERSION_CODE'].toInteger()
- //def code = props.getProperty('VERSION_CODE').toInteger()
- return code
-}
-//当打包的是Release版本时自动更新VersionCode
-def increasedVersionCode() {
- def code = readVersionCode()
- //println("isRelease====" + isRelease)
- if (isRelease) {
- code++
- def propFile = file('./gradle.properties')
- Properties props = new Properties()
- props.load(new FileInputStream(propFile))
- props['VERSION_CODE'] = code.toString()
- // 将最新的versionCode写入gradle.properties文件中
- props.store(propFile.newWriter(), null)
- }
- return code
-}
-
-//删除无用apk
-def deleteOldAPK(String buildTypeName) {
-
- // 使用map创建一个树
- def tree = fileTree(dir: './build/outputs/apk', include: "${buildTypeName}/*.apk")
- //println("文件个数:" + tree.size())
- // 遍历文件树
- tree.each { File file ->
- //println("删除文件名称:" + file)
- file.delete()
- }
-}
-
-def increasedVersionName() {
- def versionName = "${MAJOR_VERSION}.${MINOR_VERSION}.${readVersionCode()}"
- return versionName
-}
-
-def getBuildTime() {
- //设置时间格式
- SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd.HHmmss", Locale.getDefault())
- //获取当前时间
- Date curDate = new Date(System.currentTimeMillis())
- return formatter.format(curDate)
-}
-
-
-/**
- * @return 获取当前分支名称
- */
-def getWorkingBranchName() {
- def workingBranchName = ""
- def proc = "git rev-parse --abbrev-ref HEAD".execute()
- proc.in.eachLine { line -> workingBranchName = line }
- proc.err.eachLine { line -> println line }
- proc.waitFor()
- workingBranchName = "${workingBranchName}"
- println "Working branch name: " + workingBranchName
- return workingBranchName
-}
\ No newline at end of file
diff --git a/app_ipc_monitoring/gradle.properties b/app_ipc_monitoring/gradle.properties
deleted file mode 100644
index 20893e085c..0000000000
--- a/app_ipc_monitoring/gradle.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Thu Mar 02 14:18:22 CST 2023
-VERSION_CODE=2
diff --git a/app_ipc_monitoring/libs/arm64-v8a/libsshtool.so b/app_ipc_monitoring/libs/arm64-v8a/libsshtool.so
deleted file mode 100644
index 88a15bcb52..0000000000
Binary files a/app_ipc_monitoring/libs/arm64-v8a/libsshtool.so and /dev/null differ
diff --git a/app_ipc_monitoring/libs/armeabi-v7a/libsshtool.so b/app_ipc_monitoring/libs/armeabi-v7a/libsshtool.so
deleted file mode 100644
index 92e91fdffb..0000000000
Binary files a/app_ipc_monitoring/libs/armeabi-v7a/libsshtool.so and /dev/null differ
diff --git a/app_ipc_monitoring/other.zip b/app_ipc_monitoring/other.zip
deleted file mode 100644
index 9bfec749b2..0000000000
Binary files a/app_ipc_monitoring/other.zip and /dev/null differ
diff --git a/app_ipc_monitoring/src/androidTest/java/com/zhidao/adas/client/ExampleInstrumentedTest.java b/app_ipc_monitoring/src/androidTest/java/com/zhidao/adas/client/ExampleInstrumentedTest.java
deleted file mode 100644
index a69d6cb30b..0000000000
--- a/app_ipc_monitoring/src/androidTest/java/com/zhidao/adas/client/ExampleInstrumentedTest.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.zhidao.adas.client;
-
-import android.content.Context;
-
-import androidx.test.platform.app.InstrumentationRegistry;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.junit.Assert.*;
-
-/**
- * Instrumented test, which will execute on an Android device.
- *
- * @see Testing documentation
- */
-@RunWith(AndroidJUnit4.class)
-public class ExampleInstrumentedTest {
- @Test
- public void useAppContext() {
- // Context of the app under test.
- Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
-
- assertEquals("com.zhidao.adas.client", appContext.getPackageName());
- }
-}
diff --git a/app_ipc_monitoring/src/main/AndroidManifest.xml b/app_ipc_monitoring/src/main/AndroidManifest.xml
deleted file mode 100644
index ef2a239c85..0000000000
--- a/app_ipc_monitoring/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/App.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/App.java
deleted file mode 100644
index f0bd8f52ca..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/App.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.zhidao.adas.client;
-
-import android.app.Application;
-
-import com.zhidao.adas.client.utils.CrashHandler;
-
-import chassis.Chassis;
-
-public class App extends Application {
- public static App INSTANCE;
-
- public Chassis.GearPosition gear;
-
- @Override
- public void onCreate() {
- super.onCreate();
- INSTANCE = this;
- CrashHandler.getInstance().init(this);
- }
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/BootCompletedReceive.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/BootCompletedReceive.java
deleted file mode 100644
index 84d033637b..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/BootCompletedReceive.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.zhidao.adas.client;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.util.Log;
-
-public class BootCompletedReceive extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- Log.i("开机", "启动");
- }
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java
deleted file mode 100644
index 0f4edc2f79..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java
+++ /dev/null
@@ -1,668 +0,0 @@
-package com.zhidao.adas.client;
-
-import android.util.Pair;
-
-import com.zhidao.adas.client.bean.BaseInfo;
-import com.zhidao.adas.client.bean.DataShow;
-import com.zhidao.adas.client.bean.ErrorData;
-import com.zhidao.adas.client.bean.ObuMap;
-import com.zhidao.adas.client.bean.ObuRsi;
-import com.zhidao.adas.client.bean.ObuRsm;
-import com.zhidao.adas.client.bean.ObuSpat;
-import com.zhidao.adas.client.bean.PerceptionTrafficLight;
-import com.zhidao.adas.client.bean.PlanningDecisionState;
-import com.zhidao.adas.client.bean.PlanningObjects;
-import com.zhidao.adas.client.bean.PredictionObstacleTrajectory;
-import com.zhidao.adas.client.bean.RecordDataConfig;
-import com.zhidao.adas.client.bean.RecordPanel;
-import com.zhidao.adas.client.bean.RoboSweeperTaskIndex;
-import com.zhidao.adas.client.bean.StatusInfo;
-import com.zhidao.adas.client.bean.TrackedObjects;
-import com.zhidao.adas.client.bean.Trajectory;
-import com.zhidao.adas.client.bean.Warn;
-import com.zhidao.adas.client.log.LogSave;
-import com.zhidao.adas.client.utils.Constants;
-import com.zhidao.support.adas.high.common.ThreadPoolManager;
-
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Locale;
-import java.util.concurrent.Future;
-import java.util.concurrent.LinkedBlockingQueue;
-
-import mogo.telematics.pad.MessagePad;
-
-/**
- * 数据分发
- */
-public class DataDistribution {
- private static final String TAG = DataDistribution.class.getSimpleName();
- private volatile static DataDistribution INSTANCE;
- private final LinkedBlockingQueue queue;
- private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS ", Locale.getDefault());
- private Future future;
- private Pair listener;
- private volatile boolean isCutDown = true;//是否缩短日志显示
-
- private DataDistribution() {
- queue = new LinkedBlockingQueue<>();
- start();
- }
-
- public static DataDistribution getInstance() {
- if (INSTANCE == null) {
- synchronized (DataDistribution.class) {
- if (INSTANCE == null) {
- INSTANCE = new DataDistribution();
- }
- }
- }
- return INSTANCE;
- }
-
- public void registerAdasClientListener(Pair listener) {
- this.listener = listener;
- }
-
- public void unregisterAdasClientListener(Pair listener) {
- if (this.listener != null && listener != null)
- if (listener.second.hashCode() == this.listener.second.hashCode()) {
- this.listener = null;
- }
- }
-
-
- public void addData(BaseInfo info) {
- queue.add(info);
- }
-
-
- public void start() {
- if (future == null) {
- future = ThreadPoolManager.getsInstance().submit(new WriteThread());
- }
- }
-
- public void stop() {
- queue.clear();
- if (future != null && !future.isCancelled()) {
- future.cancel(true);
- }
- future = null;
- }
-
- public void setCutDown(boolean cutDown) {
- this.isCutDown = cutDown;
- }
-
- private static final int LIST_SIZE = 30;//默认list最大数据量
- public final List listTrajectory = new ArrayList<>();
- public final List listTrackedObjects = new ArrayList<>();
- public final List listGnssInfo = new ArrayList<>();
- public final List listVehicleState = new ArrayList<>();
- public final List listAutopilotState = new ArrayList<>();
- public final List listMogoReportMessage = new ArrayList<>();
- public final List listPerceptionTrafficLight = new ArrayList<>();
- public final List listPredictionObstacleTrajectory = new ArrayList<>();
- public final List listRecordPanel = new ArrayList<>();
- public final List listGlobalPathResp = new ArrayList<>();
- public final List listWarn = new ArrayList<>();
- public final List listArrivalNotification = new ArrayList<>();
- public final List listStatusInfo = new ArrayList<>();
- public final List listRecordDataConfig = new ArrayList<>();
- public final List listErrorData = new ArrayList<>();
- public final List listOriginalPointCloud = new ArrayList<>();
- public final List listPlanningObjects = new ArrayList<>();
- public final List listPlanningDecisionState = new ArrayList<>();
- public final List listChassisStates = new ArrayList<>();
- public final List listFSMFunctionStates = new ArrayList<>();
- public final List listBackCameraVideo = new ArrayList<>();
- public final List listRoboSweeperTaskIndex = new ArrayList<>();
- public final List listBagManagerCmd = new ArrayList<>();
- public final List listObuSpat = new ArrayList<>();
- public final List listObuRsi = new ArrayList<>();
- public final List listObuRsm = new ArrayList<>();
- public final List listObuMap = new ArrayList<>();
-
- private long listTrajectorySize = 0;
- private long listTrackedObjectsSize = 0;
- private long listGnssInfoSize = 0;
- private long listVehicleStateSize = 0;
- private long listAutopilotStateSize = 0;
- private long listMogoReportMessageSize = 0;
- private long listPerceptionTrafficLightSize = 0;
- private long listPredictionObstacleTrajectorySize = 0;
- private long listRecordPanelSize = 0;
- private long listGlobalPathRespSize = 0;
- private long listWarnSize = 0;
- private long listArrivalNotificationSize = 0;
- private long listStatusInfoSize = 0;
- private long listRecordDataConfigSize = 0;
- private long listErrorDataSize = 0;
- private long listOriginalPointCloudSize = 0;
- private long listPlanningObjectsSize = 0;
- private long listPlanningDecisionStateSize = 0;
- private long listChassisStatesSize = 0;
- private long listFSMFunctionStatesSize = 0;
- private long listBackCameraVideoSize = 0;
- private long listRoboSweeperTaskIndexSize = 0;
- private long listBagManagerCmdSize = 0;
- private long listObuSpatSize = 0;
- private long listObuRsiSize = 0;
- private long listObuRsmSize = 0;
- private long listObuMapSize = 0;
-
-
- public void clearCount() {
- listTrajectorySize = 1;
- listTrackedObjectsSize = 1;
- listGnssInfoSize = 1;
- listVehicleStateSize = 1;
- listAutopilotStateSize = 1;
- listMogoReportMessageSize = 1;
- listPerceptionTrafficLightSize = 1;
- listPredictionObstacleTrajectorySize = 1;
- listRecordPanelSize = 1;
- listGlobalPathRespSize = 1;
- listWarnSize = 1;
- listArrivalNotificationSize = 1;
- listStatusInfoSize = 1;
- listRecordDataConfigSize = 1;
- listErrorDataSize = 1;
- listOriginalPointCloudSize = 1;
- listPlanningObjectsSize = 1;
- listPlanningDecisionStateSize = 1;
- listChassisStatesSize = 1;
- listFSMFunctionStatesSize = 1;
- listBackCameraVideoSize = 1;
- listRoboSweeperTaskIndexSize = 1;
- listBagManagerCmdSize = 1;
- listObuSpatSize = 1;
- listObuRsiSize = 1;
- listObuRsmSize = 1;
- listObuMapSize = 1;
- }
-
- public String cutDown(String str) {
- if (isCutDown && str.length() > 850) {
- str = str.substring(0, 850) + "\n(已缩短。如需查看完整数据,请勾选日志缩短复选框)";
- }
- return str;
- }
-
- private String onTransmit(String time, BaseInfo data) {
- String temp = data.toString();
- String str = cutDown(temp);
- if (data instanceof Trajectory) {
- listTrajectory.add(0, new DataShow(listTrajectorySize++, time + str));
- if (listTrajectory.size() > LIST_SIZE) {
- listTrajectory.remove(listTrajectory.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_TRAJECTORY.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof TrackedObjects) {
- listTrackedObjects.add(0, new DataShow(listTrackedObjectsSize++, time + str));
- if (listTrackedObjects.size() > LIST_SIZE) {
- listTrackedObjects.remove(listTrackedObjects.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_TRACKED_OBJECTS.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof OriginalPointCloudData) {
- listOriginalPointCloud.add(0, new DataShow(listOriginalPointCloudSize++, time + str));
- if (listOriginalPointCloud.size() > LIST_SIZE) {
- listOriginalPointCloud.remove(listOriginalPointCloud.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_POINT_CLOUD_ORIGINAL.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof PlanningObjects) {
- listPlanningObjects.add(0, new DataShow(listPlanningObjectsSize++, time + str));
- if (listPlanningObjects.size() > LIST_SIZE) {
- listPlanningObjects.remove(listPlanningObjects.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_PLANNING_OBJECTS.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof PlanningDecisionState) {
- listPlanningDecisionState.add(0, new DataShow(listPlanningDecisionStateSize++, time + str));
- if (listPlanningDecisionState.size() > LIST_SIZE) {
- listPlanningDecisionState.remove(listPlanningDecisionState.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_PLANNING_DECISION_STATE.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof ObuSpat) {
- listObuSpat.add(0, new DataShow(listObuSpatSize++, time + str));
- if (listObuSpat.size() > LIST_SIZE) {
- listObuSpat.remove(listObuSpat.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_OBU_SPAT.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof ObuRsi) {
- listObuRsi.add(0, new DataShow(listObuRsiSize++, time + str));
- if (listObuRsi.size() > LIST_SIZE) {
- listObuRsi.remove(listObuRsi.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_OBU_RSI.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof ObuRsm) {
- listObuRsm.add(0, new DataShow(listObuRsmSize++, time + str));
- if (listObuRsm.size() > LIST_SIZE) {
- listObuRsm.remove(listObuRsm.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_OBU_RSM.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof ObuMap) {
- listObuMap.add(0, new DataShow(listObuMapSize++, time + str));
- if (listObuMap.size() > LIST_SIZE) {
- listObuMap.remove(listObuMap.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_OBU_MAP.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof GnssInfo) {
- listGnssInfo.add(0, new DataShow(listGnssInfoSize++, time + str));
- if (listGnssInfo.size() > LIST_SIZE) {
- listGnssInfo.remove(listGnssInfo.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_GNSS_INFO.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof VehicleState) {
- listVehicleState.add(0, new DataShow(listVehicleStateSize++, time + str));
- if (listVehicleState.size() > LIST_SIZE) {
- listVehicleState.remove(listVehicleState.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_VEHICLE_STATE.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof ChassisStates) {
- listChassisStates.add(0, new DataShow(listChassisStatesSize++, time + str));
- if (listChassisStates.size() > LIST_SIZE) {
- listChassisStates.remove(listChassisStates.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_CHASSIS_STATES.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof AutopilotState) {
- listAutopilotState.add(0, new DataShow(listAutopilotStateSize++, time + str));
- if (listAutopilotState.size() > LIST_SIZE) {
- listAutopilotState.remove(listAutopilotState.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_AUTOPILOT_STATE.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof MogoReportMessage) {
- listMogoReportMessage.add(0, new DataShow(listMogoReportMessageSize++, time + str));
- if (listMogoReportMessage.size() > LIST_SIZE) {
- listMogoReportMessage.remove(listMogoReportMessage.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_REPORT_MESSAGE.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof PerceptionTrafficLight) {
- listPerceptionTrafficLight.add(0, new DataShow(listPerceptionTrafficLightSize++, time + str));
- if (listPerceptionTrafficLight.size() > LIST_SIZE) {
- listPerceptionTrafficLight.remove(listPerceptionTrafficLight.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_PERCEPTION_TRAFFIC_LIGHT.equals(listener.first)) {
- listener.second.onPerceptionTrafficLight((PerceptionTrafficLight) data);
- }
- } else if (data instanceof PredictionObstacleTrajectory) {
- listPredictionObstacleTrajectory.add(0, new DataShow(listPredictionObstacleTrajectorySize++, time + str));
- if (listPredictionObstacleTrajectory.size() > LIST_SIZE) {
- listPredictionObstacleTrajectory.remove(listPredictionObstacleTrajectory.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_PREDICTION_OBSTACLE_TRAJECTORY.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof BasicInfoReq) {
-
- } else if (data instanceof CarConfigResp) {
- if (listener != null && Constants.TITLE.TITLE_CAR_CONFIG_RESP.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof RecordPanel) {
- listRecordPanel.add(0, new DataShow(listRecordPanelSize++, time + str));
- if (listRecordPanel.size() > LIST_SIZE) {
- listRecordPanel.remove(listRecordPanel.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_RECORD_RESULT.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof BagManagerCmd) {
- listBagManagerCmd.add(0, new DataShow(listBagManagerCmdSize++, time + str));
- if (listBagManagerCmd.size() > LIST_SIZE) {
- listBagManagerCmd.remove(listBagManagerCmd.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_BAG_MANAGER_CMD.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof GlobalPathResp) {
- listGlobalPathResp.add(0, new DataShow(listGlobalPathRespSize++, time + str));
- if (listGlobalPathResp.size() > LIST_SIZE) {
- listGlobalPathResp.remove(listGlobalPathResp.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_GLOBAL_PATH_RESP.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof Warn) {
- listWarn.add(0, new DataShow(listWarnSize++, time + str));
- if (listWarn.size() > LIST_SIZE) {
- listWarn.remove(listWarn.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_WARN.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof ArrivalNotification) {
- listArrivalNotification.add(0, new DataShow(listArrivalNotificationSize++, time + str));
- if (listArrivalNotification.size() > LIST_SIZE) {
- listArrivalNotification.remove(listArrivalNotification.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_ARRIVAL_NOTIFICATION.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof StatusInfo) {
- listStatusInfo.add(0, new DataShow(listStatusInfoSize++, time + str));
- if (listStatusInfo.size() > LIST_SIZE) {
- listStatusInfo.remove(listStatusInfo.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_STATUS_QUERY_RESP.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof RecordDataConfig) {
- listRecordDataConfig.add(0, new DataShow(listRecordDataConfigSize++, time + str));
- if (listRecordDataConfig.size() > LIST_SIZE) {
- listRecordDataConfig.remove(listRecordDataConfig.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_RECORD_DATA_CONFIG_RESP.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof RoboSweeperTaskIndex) {
- listRoboSweeperTaskIndex.add(0, time + str);
- if (listRoboSweeperTaskIndex.size() > LIST_SIZE) {
- listRoboSweeperTaskIndex.remove(listRoboSweeperTaskIndex.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_SWEEPER_TASK_INDEX_DATA.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof RoboSweeperTaskIndex) {
- listRoboSweeperTaskIndex.add(0, new DataShow(listRoboSweeperTaskIndexSize++, time + str));
- if (listRoboSweeperTaskIndex.size() > LIST_SIZE) {
- listRoboSweeperTaskIndex.remove(listRoboSweeperTaskIndex.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_SWEEPER_TASK_INDEX_DATA.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof FSMFunctionStates) {
- listFSMFunctionStates.add(0, new DataShow(listFSMFunctionStatesSize++, time + str));
- if (listFSMFunctionStates.size() > LIST_SIZE) {
- listFSMFunctionStates.remove(listFSMFunctionStates.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_FUNCTION_STATES.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof ErrorData) {
- listErrorData.add(0, new DataShow(listErrorDataSize++, time + str));
- if (listErrorData.size() > 100) {
- listErrorData.remove(listErrorData.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_ERROR.equals(listener.first)) {
- listener.second.onRefresh();
- if (data.header == null) {
- if (data instanceof ErrorData) {
- listErrorData.add(0, new DataShow(listErrorDataSize++, time + str));
- if (listErrorData.size() > 100) {
- listErrorData.remove(listErrorData.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_ERROR.equals(listener.first)) {
- listener.second.onRefresh();
- }
- }
- } else {
- MessagePad.MessageType messageType = data.header.getMsgType();
- if (messageType == MessagePad.MessageType.MsgTypeTrajectory) {
- listTrajectory.add(0, new DataShow(listTrajectorySize++, time + str));
- if (listTrajectory.size() > LIST_SIZE) {
- listTrajectory.remove(listTrajectory.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_TRAJECTORY.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypeTrackedObjects) {
- listTrackedObjects.add(0, new DataShow(listTrackedObjectsSize++, time + str));
- if (listTrackedObjects.size() > LIST_SIZE) {
- listTrackedObjects.remove(listTrackedObjects.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_TRACKED_OBJECTS.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypePlanningObjects) {
- listPlanningObjects.add(0, new DataShow(listPlanningObjectsSize++, time + str));
- if (listPlanningObjects.size() > LIST_SIZE) {
- listPlanningObjects.remove(listPlanningObjects.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_PLANNING_OBJECTS.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypePlanningDecisionState) {
- listPlanningDecisionState.add(0, new DataShow(listPlanningDecisionStateSize++, time + str));
- if (listPlanningDecisionState.size() > LIST_SIZE) {
- listPlanningDecisionState.remove(listPlanningDecisionState.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_PLANNING_DECISION_STATE.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypeGnssInfo) {
- listGnssInfo.add(0, new DataShow(listGnssInfoSize++, time + str));
- if (listGnssInfo.size() > LIST_SIZE) {
- listGnssInfo.remove(listGnssInfo.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_GNSS_INFO.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypeVehicleState) {
- listVehicleState.add(0, new DataShow(listVehicleStateSize++, time + str));
- if (listVehicleState.size() > LIST_SIZE) {
- listVehicleState.remove(listVehicleState.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_VEHICLE_STATE.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypeChassisStates) {
- listChassisStates.add(0, new DataShow(listChassisStatesSize++, time + str));
- if (listChassisStates.size() > LIST_SIZE) {
- listChassisStates.remove(listChassisStates.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_CHASSIS_STATES.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypeAutopilotState) {
- listAutopilotState.add(0, new DataShow(listAutopilotStateSize++, time + str));
- if (listAutopilotState.size() > LIST_SIZE) {
- listAutopilotState.remove(listAutopilotState.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_AUTOPILOT_STATE.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypeReportMessage) {
- listMogoReportMessage.add(0, new DataShow(listMogoReportMessageSize++, time + str));
- if (listMogoReportMessage.size() > LIST_SIZE) {
- listMogoReportMessage.remove(listMogoReportMessage.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_REPORT_MESSAGE.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypePredictionObstacleTrajectory) {
- listPredictionObstacleTrajectory.add(0, new DataShow(listPredictionObstacleTrajectorySize++, time + str));
- if (listPredictionObstacleTrajectory.size() > LIST_SIZE) {
- listPredictionObstacleTrajectory.remove(listPredictionObstacleTrajectory.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_PREDICTION_OBSTACLE_TRAJECTORY.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypeCarConfigResp) {
- if (listener != null && Constants.TITLE.TITLE_CAR_CONFIG_RESP.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypeRecordResult) {
- listRecordPanel.add(0, new DataShow(listRecordPanelSize++, time + str));
- if (listRecordPanel.size() > LIST_SIZE) {
- listRecordPanel.remove(listRecordPanel.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_RECORD_RESULT.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypeBagManagerCmd) {
- listBagManagerCmd.add(0, new DataShow(listBagManagerCmdSize++, time + str));
- if (listBagManagerCmd.size() > LIST_SIZE) {
- listBagManagerCmd.remove(listBagManagerCmd.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_BAG_MANAGER_CMD.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypeGlobalPathResp) {
- listGlobalPathResp.add(0, new DataShow(listGlobalPathRespSize++, time + str));
- if (listGlobalPathResp.size() > LIST_SIZE) {
- listGlobalPathResp.remove(listGlobalPathResp.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_GLOBAL_PATH_RESP.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypeWarn) {
- listWarn.add(0, new DataShow(listWarnSize++, time + str));
- if (listWarn.size() > LIST_SIZE) {
- listWarn.remove(listWarn.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_WARN.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypeArrivalNotification) {
- listArrivalNotification.add(0, new DataShow(listArrivalNotificationSize++, time + str));
- if (listArrivalNotification.size() > LIST_SIZE) {
- listArrivalNotification.remove(listArrivalNotification.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_ARRIVAL_NOTIFICATION.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypeStatusQueryResp) {
- listStatusInfo.add(0, new DataShow(listStatusInfoSize++, time + str));
- if (listStatusInfo.size() > LIST_SIZE) {
- listStatusInfo.remove(listStatusInfo.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_STATUS_QUERY_RESP.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypeRecordDataConfigResp) {
- listRecordDataConfig.add(0, new DataShow(listRecordDataConfigSize++, time + str));
- if (listRecordDataConfig.size() > LIST_SIZE) {
- listRecordDataConfig.remove(listRecordDataConfig.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_RECORD_DATA_CONFIG_RESP.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypeSweeperTaskIndexData) {
- listRoboSweeperTaskIndex.add(0, new DataShow(listRoboSweeperTaskIndexSize++, time + str));
- if (listRoboSweeperTaskIndex.size() > LIST_SIZE) {
- listRoboSweeperTaskIndex.remove(listRoboSweeperTaskIndex.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_SWEEPER_TASK_INDEX_DATA.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypeFunctionStates) {
- listFSMFunctionStates.add(0, new DataShow(listFSMFunctionStatesSize++, time + str));
- if (listFSMFunctionStates.size() > LIST_SIZE) {
- listFSMFunctionStates.remove(listFSMFunctionStates.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_FUNCTION_STATES.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypePointCloud) {
- listOriginalPointCloud.add(0, new DataShow(listOriginalPointCloudSize++, time + str));
- if (listOriginalPointCloud.size() > LIST_SIZE) {
- listOriginalPointCloud.remove(listOriginalPointCloud.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_POINT_CLOUD_ORIGINAL.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (messageType == MessagePad.MessageType.MsgTypeBackCameraVideo) {
- listBackCameraVideo.add(0, new DataShow(listBackCameraVideoSize++, time + str));
- if (listBackCameraVideo.size() > LIST_SIZE) {
- listBackCameraVideo.remove(listBackCameraVideo.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_BACK_CAMERA_VIDEO.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof PerceptionTrafficLight) {
- listPerceptionTrafficLight.add(0, new DataShow(listPerceptionTrafficLightSize++, time + str));
- if (listPerceptionTrafficLight.size() > LIST_SIZE) {
- listPerceptionTrafficLight.remove(listPerceptionTrafficLight.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_PERCEPTION_TRAFFIC_LIGHT.equals(listener.first)) {
- listener.second.onPerceptionTrafficLight((PerceptionTrafficLight) data);
- }
- } else if (data instanceof ObuSpat) {
- listObuSpat.add(0, new DataShow(listObuSpatSize++, time + str));
- if (listObuSpat.size() > LIST_SIZE) {
- listObuSpat.remove(listObuSpat.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_OBU_SPAT.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof ObuRsi) {
- listObuRsi.add(0, new DataShow(listObuRsiSize++, time + str));
- if (listObuRsi.size() > LIST_SIZE) {
- listObuRsi.remove(listObuRsi.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_OBU_RSI.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof ObuRsm) {
- listObuRsm.add(0, new DataShow(listObuRsmSize++, time + str));
- if (listObuRsm.size() > LIST_SIZE) {
- listObuRsm.remove(listObuRsm.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_OBU_RSM.equals(listener.first)) {
- listener.second.onRefresh();
- }
- } else if (data instanceof ObuMap) {
- listObuMap.add(0, new DataShow(listObuMapSize++, time + str));
- if (listObuMap.size() > LIST_SIZE) {
- listObuMap.remove(listObuMap.size() - 1);
- }
- if (listener != null && Constants.TITLE.RECEIVE_OBU_MAP.equals(listener.first)) {
- listener.second.onRefresh();
- }
- }
- }
- return temp;
- }
-
- private class WriteThread implements Runnable {
-
- @Override
- public void run() {
- synchronized (this) {
- while (!Thread.currentThread().isInterrupted()) {
- try {
- BaseInfo data = queue.take();
- String time = sdf.format(new Date(data.nowTime));
- String temp = onTransmit(time, data);
- String builder = time + "[action]:" + data.action + " [data]:" + temp;
- LogSave.getInstance().saveLog(builder);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
-
-}
\ No newline at end of file
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ObuTest.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ObuTest.java
deleted file mode 100644
index 6f470a39a4..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ObuTest.java
+++ /dev/null
@@ -1,332 +0,0 @@
-package com.zhidao.adas.client;
-
-import android.util.Log;
-
-import com.google.protobuf.TextFormat;
-import com.mogo.support.obu.MogoObuManager;
-import com.mogo.support.obu.ObuScene;
-import com.mogo.support.obu.constants.MogoObuConstants;
-import com.mogo.support.obu.constants.MogoObuTopicId;
-import com.mogo.support.obu.model.MogoObuHvBasicsData;
-import com.mogo.support.obu.model.MogoObuMapMathData;
-import com.mogo.support.obu.model.MogoObuRsiWarningData;
-import com.mogo.support.obu.model.MogoObuRsmWarningData;
-import com.mogo.support.obu.model.MogoObuRvWarningData;
-import com.mogo.support.obu.model.MogoObuSpatWarningData;
-import com.mogo.support.obu.model.MogoObuSystemStatusData;
-import com.mogo.support.obu.model.advance.AccFourAxes;
-import com.mogo.support.obu.model.advance.DateTime;
-import com.mogo.support.obu.model.advance.NodeId;
-import com.mogo.support.obu.model.advance.Participant;
-import com.mogo.support.obu.model.advance.PositionLLV;
-import com.mogo.support.obu.model.advance.RsiWarning;
-import com.mogo.support.obu.model.advance.SpatLight;
-import com.mogo.support.obu.model.advance.V2xWarning;
-import com.mogo.support.obu.model.advance.VehBasics;
-import com.mogo.support.obu.model.advance.VehControl;
-import com.mogo.support.obu.model.advance.VehSize;
-import com.mogo.support.obu.model.advance.VerticalLLV;
-import com.mogo.support.obu.model.advance.WarningData;
-import com.zhidao.support.adas.high.common.ThreadPoolManager;
-import com.zhidao.support.obu.ObuManager;
-import com.zhidao.support.obu.OnObuListener;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-import mogo.telematics.pad.MessagePad;
-
-/**
- * OBU SDK Java对象转PB对象测试
- */
-public class ObuTest {
-
-
- public static void start() {
- Runnable runnable = new Runnable() {
- @Override
- public void run() {
- ObuManager.getInstance().registerObuListener(listener);
- Class clazz = MogoObuManager.class;
- MogoObuManager mogoObuManager = MogoObuManager.getInstance();
- Method[] methods = clazz.getDeclaredMethods();
- for (Method m : methods) {
- String name = m.getName();
- if ("onObuCallback".equals(name)) {
- m.setAccessible(true);
- try {
- m.invoke(mogoObuManager, MogoObuTopicId.HV_BASIC.id, buildMogoObuHvBasicsData());
- m.invoke(mogoObuManager, MogoObuTopicId.RV_WARNING.id, buildMogoObuRvWarningData());
- m.invoke(mogoObuManager, MogoObuTopicId.SPAT_WARNING.id, buildMogoObuSpatWarningData());
- m.invoke(mogoObuManager, MogoObuTopicId.RSI_WARNING.id, buildMogoObuRsiWarningData());
- m.invoke(mogoObuManager, MogoObuTopicId.RSM_WARNING.id, buildMogoObuRsmWarningData());
- m.invoke(mogoObuManager, MogoObuTopicId.MAP_MATCH.id, buildMogoObuMapMathData());
- } catch (IllegalAccessException | InvocationTargetException e) {
- e.printStackTrace();
- }
- break;
- }
- }
- }
- };
- ThreadPoolManager.getsInstance().execute(runnable);
- }
-
- private static int have(int unitMask, int mask) {
- unitMask += mask;
- return unitMask;
- }
-
- private static MogoObuHvBasicsData buildMogoObuHvBasicsData() {
- int vehBasicsUnitMask = 0;
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.ID);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.SEC_MARK);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.LATITUDE);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.LONGITUDE);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.ELEVATION);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.SPEED);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.HEADING);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.ACC_FOUR_AXES);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.VEH_SIZE);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.VEH_CLASS);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.VEH_CONTROL_MSG);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.TARGET_POSITION);
- VehBasics vehBasics = new VehBasics(vehBasicsUnitMask);
- vehBasics.setId("aaa");
- vehBasics.setLatitude(10000000);
- vehBasics.setLongitude(20000000);
- vehBasics.setElevation(2000);
- vehBasics.setSpeed(3000);
- vehBasics.setHeading(4000);
- vehBasics.setAccFourAxes(new AccFourAxes(200, 201, 202, 203));
- vehBasics.setVehSize(new VehSize(300, 301, 302));
- vehBasics.setVehClass(303);
-
- int vehControlUnitMask = 0;
- vehControlUnitMask = have(vehControlUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_CONTROL.BRAKE_PEDAL_STATUS);
- vehControlUnitMask = have(vehControlUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_CONTROL.TRANSMISSION_STATUS);
- vehControlUnitMask = have(vehControlUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_CONTROL.EXTERIOR_LIGHTS);
- VehControl vehControl = new VehControl(vehControlUnitMask);
- vehControl.setBrakePedalStatus(401);
- vehControl.setTransmissionStatus(402);
- vehControl.setExteriorLights(403);
- vehBasics.setVehControlMsg(vehControl);
- vehBasics.setTargetPosition(8);
- MogoObuHvBasicsData data = new MogoObuHvBasicsData(1, vehBasics);
- return data;
- }
-
- private static MogoObuRvWarningData buildMogoObuRvWarningData() {
- int vehBasicsUnitMask = 0;
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.ID);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.SEC_MARK);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.LATITUDE);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.LONGITUDE);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.ELEVATION);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.SPEED);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.HEADING);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.ACC_FOUR_AXES);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.VEH_SIZE);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.VEH_CLASS);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.VEH_CONTROL_MSG);
- vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.TARGET_POSITION);
- VehBasics vehBasics = new VehBasics(vehBasicsUnitMask);
- vehBasics.setId("aaa");
- vehBasics.setLatitude(20000000);
- vehBasics.setLongitude(30000000);
- vehBasics.setElevation(4000);
- vehBasics.setSpeed(5000);
- vehBasics.setHeading(6000);
- vehBasics.setAccFourAxes(new AccFourAxes(700, 801, 902, 1003));
- vehBasics.setVehSize(new VehSize(1100, 1201, 1302));
- vehBasics.setVehClass(1403);
-
- int vehControlUnitMask = 0;
- vehControlUnitMask = have(vehControlUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_CONTROL.BRAKE_PEDAL_STATUS);
- vehControlUnitMask = have(vehControlUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_CONTROL.TRANSMISSION_STATUS);
- vehControlUnitMask = have(vehControlUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_CONTROL.EXTERIOR_LIGHTS);
- VehControl vehControl = new VehControl(vehControlUnitMask);
- vehControl.setBrakePedalStatus(1501);
- vehControl.setTransmissionStatus(1602);
- vehControl.setExteriorLights(1703);
- vehBasics.setVehControlMsg(vehControl);
- vehBasics.setTargetPosition(18);
-
- int v2xWarningUnitMask = 0;
- v2xWarningUnitMask = have(v2xWarningUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING.WARNING_NUM);
- v2xWarningUnitMask = have(v2xWarningUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING.WARNING_DATA);
- v2xWarningUnitMask = have(v2xWarningUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING.WARNING_TIME);
- v2xWarningUnitMask = have(v2xWarningUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING.DISTANCE);
- V2xWarning v2xWarning = new V2xWarning(v2xWarningUnitMask);
-
- DateTime dateTime = new DateTime(19, 20, 21, 22, 23, 24, 25);
- List warningDatas = new ArrayList<>();
- int warningDataMask = 0;
- warningDataMask = have(warningDataMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING_DATA.STATUS);
- warningDataMask = have(warningDataMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING_DATA.WARNING_TYPE);
- warningDataMask = have(warningDataMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING_DATA.WARNING_LEVEL);
- warningDataMask = have(warningDataMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING_DATA.WARNING_PRIORITY);
- WarningData warningData1 = new WarningData(warningDataMask, 3);
- warningData1.setWarningType(26);
- warningData1.setWarningLevel(27);
- warningData1.setWarningPriority(28);
- warningDatas.add(warningData1);
- WarningData warningData2 = new WarningData(warningDataMask, 4);
- warningData2.setWarningType(29);
- warningData2.setWarningLevel(30);
- warningData2.setWarningPriority(31);
- warningDatas.add(warningData2);
- v2xWarning.setWarningNum(2);
- v2xWarning.setWarningData(warningDatas);
- v2xWarning.setWarningTime(dateTime);
- v2xWarning.setDistance(32);
- MogoObuRvWarningData data = new MogoObuRvWarningData(2, vehBasics, v2xWarning);
- return data;
- }
-
-
- private static MogoObuSpatWarningData buildMogoObuSpatWarningData() {
- List lights = new ArrayList<>();
- lights.add(new SpatLight(35, 36, 37, 38, 39, 40));
- lights.add(new SpatLight(41, 42, 43, 44, 45, 46));
- lights.add(new SpatLight(47, 48, 49, 50, 51, 52));
- MogoObuSpatWarningData data = new MogoObuSpatWarningData(33, 34, 3, lights);
- return data;
- }
-
- private static MogoObuRsiWarningData buildMogoObuRsiWarningData() {
- List list = new ArrayList<>();
- int rsiWarningUnitMask = 0;
- rsiWarningUnitMask = have(rsiWarningUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_RSI_WARNING.SCENE_TYPE);
- rsiWarningUnitMask = have(rsiWarningUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_RSI_WARNING.POSITION);
- rsiWarningUnitMask = have(rsiWarningUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_RSI_WARNING.SIGN_SERIAL_NUM);
- rsiWarningUnitMask = have(rsiWarningUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_RSI_WARNING.EVENT_SERIAL_NUM);
- rsiWarningUnitMask = have(rsiWarningUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_RSI_WARNING.SPEED_MAX_LIMIT);
- rsiWarningUnitMask = have(rsiWarningUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_RSI_WARNING.SPEED_MIN_LIMIT);
- rsiWarningUnitMask = have(rsiWarningUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_RSI_WARNING.EVENT_RADIUS);
- rsiWarningUnitMask = have(rsiWarningUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_RSI_WARNING.WARNING_LEVEL);
- rsiWarningUnitMask = have(rsiWarningUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_RSI_WARNING.TARGET_POSITION);
- rsiWarningUnitMask = have(rsiWarningUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_RSI_WARNING.DISTANCE);
- RsiWarning rsiWarning1 = new RsiWarning(rsiWarningUnitMask);
- rsiWarning1.setSceneType(53);
- rsiWarning1.setPosition(new PositionLLV(7, 54, 55, new VerticalLLV(7, 56)));
- rsiWarning1.setSignSerialNum(57);
- rsiWarning1.setEventSerialNum(58);
- rsiWarning1.setSpeedMinLimit(59);
- rsiWarning1.setSpeedMaxLimit(60);
- rsiWarning1.setEventRadius(61);
- rsiWarning1.setWarningLevel(62);
- rsiWarning1.setTargetPosition(63);
- rsiWarning1.setDistance(64);
- list.add(rsiWarning1);
-
- RsiWarning rsiWarning2 = new RsiWarning(rsiWarningUnitMask);
- rsiWarning2.setSceneType(65);
- rsiWarning2.setPosition(new PositionLLV(7, 66, 67, new VerticalLLV(7, 68)));
- rsiWarning2.setSignSerialNum(69);
- rsiWarning2.setEventSerialNum(70);
- rsiWarning2.setSpeedMinLimit(71);
- rsiWarning2.setSpeedMaxLimit(72);
- rsiWarning2.setEventRadius(73);
- rsiWarning2.setWarningLevel(74);
- rsiWarning2.setTargetPosition(75);
- rsiWarning2.setDistance(76);
- list.add(rsiWarning2);
- MogoObuRsiWarningData data = new MogoObuRsiWarningData(53, 2, list);
- return data;
- }
-
- private static MogoObuRsmWarningData buildMogoObuRsmWarningData() {
- Participant participant = new Participant(78, 79, 80, 81, 82, 83, 84, 85, 86, new AccFourAxes(87, 88, 89, 90), new VehSize(91, 92, 93), 94, 95);
- int v2xWarningUnitMask = 0;
- v2xWarningUnitMask = have(v2xWarningUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING.WARNING_NUM);
- v2xWarningUnitMask = have(v2xWarningUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING.WARNING_DATA);
- v2xWarningUnitMask = have(v2xWarningUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING.WARNING_TIME);
- v2xWarningUnitMask = have(v2xWarningUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING.DISTANCE);
- V2xWarning v2xWarning = new V2xWarning(v2xWarningUnitMask);
-
- DateTime dateTime = new DateTime(96, 97, 98, 99, 100, 101, 102);
- List warningDatas = new ArrayList<>();
- int warningDataMask = 0;
- warningDataMask = have(warningDataMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING_DATA.STATUS);
- warningDataMask = have(warningDataMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING_DATA.WARNING_TYPE);
- warningDataMask = have(warningDataMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING_DATA.WARNING_LEVEL);
- warningDataMask = have(warningDataMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING_DATA.WARNING_PRIORITY);
- WarningData warningData1 = new WarningData(warningDataMask, 3);
- warningData1.setWarningType(103);
- warningData1.setWarningLevel(104);
- warningData1.setWarningPriority(105);
- warningDatas.add(warningData1);
- WarningData warningData2 = new WarningData(warningDataMask, 4);
- warningData2.setWarningType(106);
- warningData2.setWarningLevel(107);
- warningData2.setWarningPriority(108);
- warningDatas.add(warningData2);
- v2xWarning.setWarningNum(2);
- v2xWarning.setWarningData(warningDatas);
- v2xWarning.setWarningTime(dateTime);
- v2xWarning.setDistance(109);
- MogoObuRsmWarningData data = new MogoObuRsmWarningData(77, participant, v2xWarning);
- return data;
- }
-
- private static MogoObuMapMathData buildMogoObuMapMathData() {
- int mogoObuMapMathDataUnitMask = 0;
- mogoObuMapMathDataUnitMask = have(mogoObuMapMathDataUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_MAP_MATH.CURRENT_NODE_ID);
- mogoObuMapMathDataUnitMask = have(mogoObuMapMathDataUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_MAP_MATH.UPSTREAM_NODE_ID);
- mogoObuMapMathDataUnitMask = have(mogoObuMapMathDataUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_MAP_MATH.MATCHING_LANE_ID);
- mogoObuMapMathDataUnitMask = have(mogoObuMapMathDataUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_MAP_MATH.SPEED_MAX_LIMIT);
- mogoObuMapMathDataUnitMask = have(mogoObuMapMathDataUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_MAP_MATH.SPEED_MIN_LIMIT);
- MogoObuMapMathData data = new MogoObuMapMathData(mogoObuMapMathDataUnitMask, 110);
- data.setCurrentNodeId(new NodeId(111,112));
- data.setUpstreamNodeId(new NodeId(113,114));
- data.setMatchingLaneId(115);
- data.setSpeedMaxLimit(116);
- data.setSpeedMinLimit(117);
- return data;
- }
-
- private static OnObuListener listener = new OnObuListener() {
- @Override
- public void onConnectStatus(int connectStatus) {
-
- }
-
- @Override
- public void onObuSystemStatus(MogoObuSystemStatusData data) {
-
- }
-
- @Override
- public void onGnssInfo(MessagePad.GnssInfo gnssInfo) {
- Log.i("ddddd", "onGnssInfo=\n" + TextFormat.printer().escapingNonAscii(false).printToString(gnssInfo));
- }
-
- @Override
- public void onObuRvWarning(ObuScene.RvWarningData rvWarningData) {
- Log.i("ddddd", "onObuRvWarning=\n" + TextFormat.printer().escapingNonAscii(false).printToString(rvWarningData));
- }
-
- @Override
- public void onObuSpatWarning(ObuScene.SpatWarningData spatWarningData) {
- Log.i("ddddd", "onObuSpatWarning=\n" + TextFormat.printer().escapingNonAscii(false).printToString(spatWarningData));
- }
-
- @Override
- public void onObuRsiWarning(ObuScene.RsiWarningData rsiWarningData) {
- Log.i("ddddd", "onObuRsiWarning=\n" + TextFormat.printer().escapingNonAscii(false).printToString(rsiWarningData));
- }
-
- @Override
- public void onObuRsmWarning(ObuScene.RsmWarningData rsmWarningData) {
- Log.i("ddddd", "onObuRsmWarning=\n" + TextFormat.printer().escapingNonAscii(false).printToString(rsmWarningData));
- }
-
- @Override
- public void onObuMapMath(ObuScene.MapMatchData mapMatchData) {
- Log.i("ddddd", "onObuMapMath=\n" + TextFormat.printer().escapingNonAscii(false).printToString(mapMatchData));
- }
- };
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/OnAdasClientListener.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/OnAdasClientListener.java
deleted file mode 100644
index 0992ee566c..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/OnAdasClientListener.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package com.zhidao.adas.client;
-
-import com.zhidao.adas.client.bean.PerceptionTrafficLight;
-
-public abstract class OnAdasClientListener {
-
- public abstract void onRefresh();
-
-// /**
-// * 自动驾驶局部轨迹 车前引导线
-// *
-// * @param isAdd 是否是添加数据回调
-// */
-// public void onTrajectory() {
-// }
-//
-// /**
-// * 障碍物 他车数据
-// *
-// * @param trackedObjects 数据
-// */
-// public void onTrackedObjects(TrackedObjects trackedObjects) {
-// }
-//
-// /**
-// * 惯导信息
-// *
-// * @param isAdd 是否是添加数据回调
-// */
-// public void onGnssInfo() {
-// }
-//
-// /**
-// * 底盘信息, 透传底盘状态,pb参考底盘
-// *
-// * @param vehicleState 数据
-// */
-// public void onVehicleState(VehicleState vehicleState) {
-// }
-//
-// /**
-// * 自动驾驶状态
-// *
-// * @param autopilotState 数据
-// */
-// public void onAutopilotState(AutopilotState autopilotState) {
-// }
-//
-// /**
-// * 监控事件报告
-// *
-// * @param mogoReportMessage 数据
-// */
-// public void onReportMessage(MogoReportMessage mogoReportMessage) {
-// }
-//
- /**
- * 感知红绿灯
- *
- * @param trafficLights 感知红绿灯
- */
- public void onPerceptionTrafficLight(PerceptionTrafficLight trafficLights) {
- }
-//
-// /**
-// * 自动驾驶设备基础信息请求
-// *
-// * @param basicInfoReq 数据 目前没有任何参数
-// */
-// public void onBasicInfoReq(BasicInfoReq basicInfoReq) {
-// }
-//
-// /**
-// * 车机基础信息应答
-// *
-// * @param carConfigResp 数据
-// */
-// public void onCarConfigResp(CarConfigResp carConfigResp) {
-// }
-//
-// /**
-// * 数据采集结果
-// *
-// * @param recordPanel 数据
-// */
-// public void onRecordResult(RecordPanel recordPanel) {
-// }
-//
-// /**
-// * 自动驾驶路径应答
-// *
-// * @param globalPathResp 数据
-// */
-// public void onGlobalPathResp(GlobalPathResp globalPathResp) {
-// }
-//
-//
-// /**
-// * 报警信息
-// * 暂时保留,目前没有使用
-// *
-// * @param warn 数据
-// */
-// @Deprecated
-// public void onWarn(Warn warn) {
-// }
-//
-// /**
-// * 到站提醒 自动驾驶站点
-// *
-// * @param arrivalNotification 数据
-// */
-// public void onArrivalNotification(ArrivalNotification arrivalNotification) {
-// }
-//
-// /**
-// * 升级状态
-// *
-// * @param info
-// */
-// @Deprecated
-// public void onUpgradeStateInfo(IPCUpgradeStateInfo info) {
-// }
-//
-// /**
-// * 向IPC发送命令返回结果
-// *
-// * @param info
-// */
-// public void onSSHResult(SSHResult info) {
-// }
-//
-// /**
-// * 数据错误
-// *
-// * @param status 错误原因
-// * @param bytes 原始数据
-// */
-// public void onError(ProtocolStatus status, byte[] bytes) {
-//
-// }
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/AutopilotConfigAdapter.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/AutopilotConfigAdapter.java
deleted file mode 100644
index 268ee6da53..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/AutopilotConfigAdapter.java
+++ /dev/null
@@ -1,480 +0,0 @@
-package com.zhidao.adas.client.adapter;
-
-import android.content.Context;
-import android.text.Editable;
-import android.text.TextUtils;
-import android.text.TextWatcher;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.RadioButton;
-import android.widget.RadioGroup;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import androidx.annotation.NonNull;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.zhidao.adas.client.R;
-import com.zhidao.adas.client.bean.AutoPilotMode;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class AutopilotConfigAdapter extends RecyclerView.Adapter {
-
- private List datas;
- private Context mContext;
- private OnHaveDataListener onHaveDataListener;
- private boolean isShowDel = false;
-
- public AutopilotConfigAdapter(List datas) {
- this.datas = datas;
- if (datas == null) {
- this.datas = new ArrayList<>();
- }
- }
-
- public void setShowDel(boolean showDel) {
- isShowDel = showDel;
- notifyDataSetChanged();
- }
-
- public List getDatas() {
- return datas;
- }
-
- public interface OnHaveDataListener {
- void onHaveData(boolean isHave);
- }
-
- public void setOnItemClickListener(OnHaveDataListener l) {
- this.onHaveDataListener = l;
- }
-
- public void add() {
- datas.add(new AutoPilotMode());
- notifyItemInserted(datas.size() - 1);
- if (onHaveDataListener != null && datas.size() == 1)
- onHaveDataListener.onHaveData(true);
- }
-
- public void minus(int position) {
- AutoPilotMode bean = datas.get(position);
- bean.wayLatLons = null;
- bean = null;
- datas.remove(position);
- notifyItemRemoved(position);
- notifyItemRangeChanged(position, getItemCount());
- if (onHaveDataListener != null && datas.size() == 0)
- onHaveDataListener.onHaveData(false);
- }
-
- @Override
- public int getItemViewType(int position) {
- return position;
- }
-
- //创建ViewHolder
- @NonNull
- @Override
- public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- //实例化得到Item布局文件的View对象
- mContext = parent.getContext();
- View v = LayoutInflater.from(mContext).inflate(R.layout.item_autopilot_config, parent, false);
- //返回MyViewHolder的对象
- return new MyViewHolder(v);
- }
-
- //绑定数据
- @Override
- public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
- AutoPilotMode mode = datas.get(position);
- if (!TextUtils.isEmpty(mode.name))
- holder.path_name.setText(mode.name);
- if (mode.speedLimit != 0.0)
- holder.speed.setText(String.valueOf(mode.speedLimit));
- if (!TextUtils.isEmpty(mode.startName))
- holder.start_name.setText(mode.startName);
- if (!TextUtils.isEmpty(mode.endName))
- holder.end_name.setText(mode.endName);
- if (mode.startLatLon != null) {
- if (mode.startLatLon.longitude != 0.0)
- holder.start_lon.setText(String.valueOf(mode.startLatLon.longitude));
- if (mode.startLatLon.latitude != 0.0)
- holder.start_lat.setText(String.valueOf(mode.startLatLon.latitude));
- }
- if (mode.endLatLon != null) {
- if (mode.endLatLon.longitude != 0.0)
- holder.end_lon.setText(String.valueOf(mode.endLatLon.longitude));
- if (mode.endLatLon.latitude != 0.0)
- holder.end_lat.setText(String.valueOf(mode.endLatLon.latitude));
- }
- holder.setViaData();
- holder.del.setVisibility(isShowDel ? View.VISIBLE : View.GONE);
- if (mode.isBus) {
- holder.bus.setChecked(true);
- } else {
- holder.taxi.setChecked(true);
- }
- if (!TextUtils.isEmpty(mode.routeName)) {
- holder.route_name.setText(mode.routeName);
- }
- if (mode.routeID != -1)
- holder.route_id.setText(String.valueOf(mode.routeID));
- }
-
- //返回Item的数量
- @Override
- public int getItemCount() {
- return datas == null ? 0 : datas.size();
- }
-
- //继承RecyclerView.ViewHolder抽象类的自定义ViewHolder
- class MyViewHolder extends RecyclerView.ViewHolder {
- RecyclerView recyclerView;
- EditText path_name;
- EditText speed;
- EditText start_name;
- EditText end_name;
- EditText start_lon;
- EditText start_lat;
- EditText end_lon;
- EditText end_lat;
- EditText route_id;
- EditText route_name;
- TextView num;
- TextView del;
- ImageView add;
- ImageView minus;
- ViaPositionAdapter adapter;
- RadioGroup car_type;
- RadioButton taxi;
- RadioButton bus;
-
- MyViewHolder(View itemView) {
- super(itemView);
- route_id = itemView.findViewById(R.id.route_id);
- route_name = itemView.findViewById(R.id.route_name);
- car_type = itemView.findViewById(R.id.car_type);
- taxi = itemView.findViewById(R.id.taxi);
- bus = itemView.findViewById(R.id.bus);
- recyclerView = itemView.findViewById(R.id.RecyclerView);
- path_name = itemView.findViewById(R.id.path_name);
- speed = itemView.findViewById(R.id.speed);
- start_name = itemView.findViewById(R.id.start_name);
- end_name = itemView.findViewById(R.id.end_name);
- start_lon = itemView.findViewById(R.id.start_lon);
- start_lat = itemView.findViewById(R.id.start_lat);
- end_lon = itemView.findViewById(R.id.end_lon);
- end_lat = itemView.findViewById(R.id.end_lat);
- num = itemView.findViewById(R.id.num);
- del = itemView.findViewById(R.id.del);
- add = itemView.findViewById(R.id.add);
- minus = itemView.findViewById(R.id.minus);
- initRecyclerView();
- car_type.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(RadioGroup group, int checkedId) {
- datas.get(getBindingAdapterPosition()).isBus = checkedId == R.id.bus;
- }
- });
- minus.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- minus();
- }
- });
- add.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- add();
- }
- });
- del.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- AutopilotConfigAdapter.this.minus(getBindingAdapterPosition());
- }
- });
- path_name.addTextChangedListener(new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-
- }
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
-
- }
-
- @Override
- public void afterTextChanged(Editable s) {
- datas.get(getBindingAdapterPosition()).name = s.toString().trim();
- }
- });
- speed.addTextChangedListener(new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-
- }
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
-
- }
-
- @Override
- public void afterTextChanged(Editable s) {
- if (!TextUtils.isEmpty(s)) {
- try {
- datas.get(getBindingAdapterPosition()).speedLimit = Double.parseDouble(s.toString().trim());
- } catch (Exception e) {
- e.printStackTrace();
- speed.setText("");
- Toast.makeText(mContext, "输入不合法", Toast.LENGTH_SHORT).show();
- }
- } else {
- datas.get(getBindingAdapterPosition()).speedLimit = 0.0;
- }
-
- }
- });
- start_name.addTextChangedListener(new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-
- }
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
-
- }
-
- @Override
- public void afterTextChanged(Editable s) {
- datas.get(getBindingAdapterPosition()).startName = s.toString().trim();
- }
- });
- end_name.addTextChangedListener(new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-
- }
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
-
- }
-
- @Override
- public void afterTextChanged(Editable s) {
- datas.get(getBindingAdapterPosition()).endName = s.toString().trim();
- }
- });
- start_lon.addTextChangedListener(new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-
- }
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
-
- }
-
- @Override
- public void afterTextChanged(Editable s) {
- if (!TextUtils.isEmpty(s)) {
- try {
- if (datas.get(getBindingAdapterPosition()).startLatLon == null)
- datas.get(getBindingAdapterPosition()).startLatLon = new AutoPilotMode.Location();
- datas.get(getBindingAdapterPosition()).startLatLon.longitude = Double.parseDouble(s.toString().trim());
- } catch (Exception e) {
- e.printStackTrace();
- start_lon.setText("");
- Toast.makeText(mContext, "输入不合法", Toast.LENGTH_SHORT).show();
- }
- } else {
- if (datas.get(getBindingAdapterPosition()).startLatLon != null) {
- datas.get(getBindingAdapterPosition()).startLatLon.longitude = 0.0;
- }
- }
- }
- });
- start_lat.addTextChangedListener(new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-
- }
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
-
- }
-
- @Override
- public void afterTextChanged(Editable s) {
- if (!TextUtils.isEmpty(s)) {
- try {
- if (datas.get(getBindingAdapterPosition()).startLatLon == null)
- datas.get(getBindingAdapterPosition()).startLatLon = new AutoPilotMode.Location();
- datas.get(getBindingAdapterPosition()).startLatLon.latitude = Double.parseDouble(s.toString().trim());
- } catch (Exception e) {
- e.printStackTrace();
- start_lat.setText("");
- Toast.makeText(mContext, "输入不合法", Toast.LENGTH_SHORT).show();
- }
- } else {
- if (datas.get(getBindingAdapterPosition()).startLatLon != null)
- datas.get(getBindingAdapterPosition()).startLatLon.latitude = 0.0;
- }
- }
- });
- end_lon.addTextChangedListener(new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-
- }
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
-
- }
-
- @Override
- public void afterTextChanged(Editable s) {
- if (!TextUtils.isEmpty(s)) {
- try {
- if (datas.get(getBindingAdapterPosition()).endLatLon == null)
- datas.get(getBindingAdapterPosition()).endLatLon = new AutoPilotMode.Location();
- datas.get(getBindingAdapterPosition()).endLatLon.longitude = Double.parseDouble(s.toString().trim());
- } catch (Exception e) {
- e.printStackTrace();
- end_lon.setText("");
- Toast.makeText(mContext, "输入不合法", Toast.LENGTH_SHORT).show();
- }
- } else {
- if (datas.get(getBindingAdapterPosition()).endLatLon != null)
- datas.get(getBindingAdapterPosition()).endLatLon.longitude = 0.0;
- }
-
- }
- });
- end_lat.addTextChangedListener(new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-
- }
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
-
- }
-
- @Override
- public void afterTextChanged(Editable s) {
- if (!TextUtils.isEmpty(s)) {
- try {
- if (datas.get(getBindingAdapterPosition()).endLatLon == null)
- datas.get(getBindingAdapterPosition()).endLatLon = new AutoPilotMode.Location();
- datas.get(getBindingAdapterPosition()).endLatLon.latitude = Double.parseDouble(s.toString().trim());
- } catch (Exception e) {
- e.printStackTrace();
- end_lat.setText("");
- Toast.makeText(mContext, "输入不合法", Toast.LENGTH_SHORT).show();
- }
- } else {
- if (datas.get(getBindingAdapterPosition()).endLatLon != null)
- datas.get(getBindingAdapterPosition()).endLatLon.latitude = 0.0;
- }
-
- }
- });
-
-
- route_name.addTextChangedListener(new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-
- }
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
-
- }
-
- @Override
- public void afterTextChanged(Editable s) {
- datas.get(getBindingAdapterPosition()).routeName = s.toString().trim();
-
- }
- });
-
- route_id.addTextChangedListener(new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-
- }
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
-
- }
-
- @Override
- public void afterTextChanged(Editable s) {
- if (!TextUtils.isEmpty(s)) {
- try {
- datas.get(getBindingAdapterPosition()).routeID = Integer.parseInt(s.toString().trim());
- } catch (Exception e) {
- e.printStackTrace();
- speed.setText("");
- Toast.makeText(mContext, "输入不合法", Toast.LENGTH_SHORT).show();
- }
- } else {
- datas.get(getBindingAdapterPosition()).routeID = -1;
- }
-
- }
- });
- }
-
- private void initRecyclerView() {
- LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
- linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
- recyclerView.setLayoutManager(linearLayoutManager);
- adapter = new ViaPositionAdapter();
- recyclerView.setAdapter(adapter);
-
- }
-
- private void minus() {
- if (adapter.getItemCount() > 0) {
- adapter.minus();
- num.setText(String.valueOf(adapter.getItemCount()));
- }
- }
-
- public void add() {
- adapter.addHint();
- recyclerView.scrollToPosition(adapter.getItemCount() - 1);
- num.setText(String.valueOf(adapter.getItemCount()));
- }
-
- public void setViaData() {
- if (adapter.getDatas() == null) {
- List list = datas.get(getBindingAdapterPosition()).wayLatLons;
- if (list == null) {
- list = new ArrayList<>();
- datas.get(getBindingAdapterPosition()).wayLatLons = list;
- }
- adapter.setDatas(list);
- }
- }
- }
-}
-
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/ConfigAdapter.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/ConfigAdapter.java
deleted file mode 100644
index fa494393dc..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/ConfigAdapter.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.zhidao.adas.client.adapter;
-
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import com.zhidao.adas.client.R;
-import com.zhidao.adas.client.base.BaseAdapter;
-import com.zhidao.adas.client.base.BaseViewHolder;
-import com.zhidao.adas.client.bean.Config;
-
-import java.util.List;
-
-/**
- * @author song kenan
- * @des
- * @date 2021/8/13
- */
-public class ConfigAdapter extends BaseAdapter {
-
-
- public ConfigAdapter() {
-
- }
-
- @Override
- public void setData(List mDatas) {
- super.setData(mDatas);
- }
-
- @Override
- protected void onBindDataToItem(ViewHolder viewHolder, Config data, int position) {
- if (data == null) {
- return;
- }
- viewHolder.name.setText(data.name);
- viewHolder.value.setText(data.value);
- if (data.color == -1) {
- data.color = R.color.colorSlateGray;
- }
- viewHolder.value.setTextColor(mContext.getResources().getColor(data.color));
- }
-
- @Override
- protected View getItemViewResource(ViewGroup viewGroup) {
- return LayoutInflater.from(mContext).inflate(R.layout.item_config, viewGroup, false);
- }
-
- @Override
- protected ViewHolder getViewHolder(View view) {
- return new ViewHolder(view, this);
- }
-
- class ViewHolder extends BaseViewHolder {
- TextView name;
- TextView value;
-
- public ViewHolder(View itemView, ConfigAdapter adapter) {
- super(itemView, adapter);
- name = itemView.findViewById(R.id.name);
- value = itemView.findViewById(R.id.value);
- }
- }
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/ConnectStatusAdapter.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/ConnectStatusAdapter.java
deleted file mode 100644
index 5c6cd96285..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/ConnectStatusAdapter.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.zhidao.adas.client.adapter;
-
-import android.annotation.SuppressLint;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.EditText;
-import android.widget.TextView;
-
-import com.zhidao.adas.client.R;
-import com.zhidao.adas.client.base.BaseAdapter;
-import com.zhidao.adas.client.base.BaseViewHolder;
-import com.zhidao.adas.client.bean.IPCConnectState;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-
-
-/**
- * 连接状态
- */
-public class ConnectStatusAdapter extends BaseAdapter {
- private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS ", Locale.getDefault());
- private static final String POS = "%03d. ";
-
- public void refreshView() {
-// notifyItemChanged(mDatas.size()-1,0);
- notifyItemRangeChanged(0, getItemCount());
- }
-
- @Override
- public long getItemId(int position) {
- return position;
- }
-
- @SuppressLint("SetTextI18n")
- @Override
- protected void onBindDataToItem(ViewHolder viewHolder, IPCConnectState data, int position) {
- viewHolder.id.setText(String.format(Locale.getDefault(), POS, getItemCount() - position));
- viewHolder.editText.setText(sdf.format(new Date(data.time)) + "\n" + data.status);
- viewHolder.editText.setTextColor(mContext.getResources().getColor(data.color));
- }
-
- @Override
- protected View getItemViewResource(ViewGroup viewGroup) {
- return LayoutInflater.from(mContext).inflate(R.layout.item_status, viewGroup, false);
- }
-
-
- @Override
- protected ViewHolder getViewHolder(View view) {
- return new ViewHolder(view, this);
- }
-
-
- class ViewHolder extends BaseViewHolder {
- EditText editText;
- TextView id;
-
- public ViewHolder(View itemView, ConnectStatusAdapter adapter) {
- super(itemView, adapter);
- editText = itemView.findViewById(R.id.log);
- id = itemView.findViewById(R.id.id);
- }
- }
-}
\ No newline at end of file
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/DataShowAdapter.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/DataShowAdapter.java
deleted file mode 100644
index c233f55b31..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/DataShowAdapter.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.zhidao.adas.client.adapter;
-
-import android.annotation.SuppressLint;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.EditText;
-import android.widget.TextView;
-
-import com.zhidao.adas.client.R;
-import com.zhidao.adas.client.base.BaseAdapter;
-import com.zhidao.adas.client.base.BaseViewHolder;
-import com.zhidao.adas.client.bean.DataShow;
-
-
-//log所用
-public class DataShowAdapter extends BaseAdapter {
-
-
- public void refreshView() {
-// notifyItemChanged(mDatas.size()-1,0);
- notifyItemRangeChanged(0, getItemCount());
- }
-
- @Override
- public long getItemId(int position) {
- return position;
- }
-
- @SuppressLint("SetTextI18n")
- @Override
- protected void onBindDataToItem(ViewHolder viewHolder, DataShow data, int position) {
- viewHolder.id.setText(data.position + ". ");
- viewHolder.editText.setText(data.data);
-
- }
-
- @Override
- protected View getItemViewResource(ViewGroup viewGroup) {
- return LayoutInflater.from(mContext).inflate(R.layout.item_log_info, viewGroup, false);
- }
-
-
- @Override
- protected ViewHolder getViewHolder(View view) {
- return new ViewHolder(view, this);
- }
-
-
- class ViewHolder extends BaseViewHolder {
- EditText editText;
- TextView id;
-
- public ViewHolder(View itemView, DataShowAdapter adapter) {
- super(itemView, adapter);
- editText = itemView.findViewById(R.id.log);
- id = itemView.findViewById(R.id.id);
- }
- }
-}
\ No newline at end of file
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/InfoTitleAdapter.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/InfoTitleAdapter.java
deleted file mode 100644
index d620f99132..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/InfoTitleAdapter.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package com.zhidao.adas.client.adapter;
-
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import com.zhidao.adas.client.R;
-import com.zhidao.adas.client.base.BaseAdapter;
-import com.zhidao.adas.client.base.BaseViewHolder;
-
-import java.util.List;
-
-/**
- * @author song kenan
- * @des
- * @date 2021/8/13
- */
-public class InfoTitleAdapter extends BaseAdapter {
- private int selectedPosition = 0;//当前选中的下标
- private boolean isFragment = false;
-
- public void setSelectedPosition(int position) {
- if (position != selectedPosition) {
- notifyItemChanged(position);
- notifyItemChanged(selectedPosition);
- selectedPosition = position;
- }
- }
-
- public InfoTitleAdapter(List data, boolean isFragment) {
- super(data);
- this.isFragment = isFragment;
- }
-
- @Override
- protected void onBindDataToItem(ViewHolder viewHolder, String data, int position) {
- if (data == null) {
- return;
- }
- if (isFragment) {
- viewHolder.itemView.setSelected(selectedPosition == position);
- }
- viewHolder.title.setText(data);
-
- }
-
- @Override
- protected View getItemViewResource(ViewGroup viewGroup) {
- View view;
- if (isFragment) {
- view = LayoutInflater.from(mContext).inflate(R.layout.item_info, viewGroup, false);
- } else {
- view = LayoutInflater.from(mContext).inflate(R.layout.item_info1, viewGroup, false);
- }
-// if (!isFragment) {
-// int h = viewGroup.getHeight() - DensityUtil.dip2px(mContext, 16);
-// ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
-// if (layoutParams != null) {
-// layoutParams.width = DensityUtil.dip2px(mContext, 150);
-//// layoutParams.height = DensityUtil.dip2px(mContext, 50);
-// layoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;
-//// layoutParams.height = h / 2;
-// }
-// }
-
- return view;
- }
-
- @Override
- protected ViewHolder getViewHolder(View view) {
- return new ViewHolder(view, this);
- }
-
- class ViewHolder extends BaseViewHolder {
- TextView title;
-
- public ViewHolder(View itemView, InfoTitleAdapter adapter) {
- super(itemView, adapter);
- title = itemView.findViewById(R.id.tv_info_title);
- }
- }
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/InterfaceAdapter.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/InterfaceAdapter.java
deleted file mode 100644
index 7e4fa74544..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/InterfaceAdapter.java
+++ /dev/null
@@ -1,217 +0,0 @@
-package com.zhidao.adas.client.adapter;
-
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.CheckBox;
-import android.widget.CompoundButton;
-import android.widget.TextView;
-
-import androidx.annotation.NonNull;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.zhidao.adas.client.R;
-import com.zhidao.adas.client.bean.InterfaceModel;
-import com.zhidao.support.adas.high.common.MessageType;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-
-public class InterfaceAdapter extends RecyclerView.Adapter {
-
- private List mDatas;
- private boolean isEnabled = true;//是否可操作
- private boolean oldIsEnabled = isEnabled;
- private int isCheckAll = 2;//0:全选 1:全不选 2:任意选
- private int checkNum;
- private boolean oldIsCheckAll = false;
-
- private OnInterfaceAdapterListener listener;
-
- public void setListener(OnInterfaceAdapterListener listener) {
- this.listener = listener;
- }
-
- public interface OnInterfaceAdapterListener {
- void onCheckAll(boolean isCheckAll);
-
- void onCheckNum(int checkNum);
- }
-
- public int getCheckNum() {
- return checkNum;
- }
-
- //获取已选中的
- public Set getCheckedModel() {
- Set messageTypes = new HashSet<>();
- if (mDatas != null) {
- for (InterfaceModel model : mDatas) {
- if (model.isSelected()) {
- messageTypes.add(model.getMessageType());
- }
- }
- }
- return messageTypes;
- }
-
- private void init() {
- isEnabled = true;
- oldIsEnabled = true;
- isCheckAll = 2;
- checkNum = 0;
- }
-
- public void setData(List mDatas, int checkNum) {
- init();
- this.mDatas = mDatas;
- if (mDatas != null && !mDatas.isEmpty()) {
- this.checkNum = checkNum;
- updateCheckAllStatus(true);
- }
- }
-
- //全选 全不选
- public void setCheckAll(boolean checkAll) {
- isCheckAll = checkAll ? 0 : 1;
- checkNum = checkAll ? getItemCount() : 0;
- notifyDataSetChanged();
- updateCheckNumStatusCall();
- updateCheckAllStatus(false);
- }
-
- public void setEnabled(boolean isEnabled) {
- if (oldIsEnabled != isEnabled) {
- oldIsEnabled = isEnabled;
- this.isEnabled = isEnabled;
- notifyDataSetChanged();
- }
-
- }
-
- //创建ViewHolder
- @NonNull
- @Override
- public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- //实例化得到Item布局文件的View对象
- View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_interface, parent, false);
- //返回MyViewHolder的对象
- return new MyViewHolder(v);
- }
-
- //绑定数据
- @Override
- public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
- holder.index.setEnabled(isEnabled);
- holder.name.setEnabled(isEnabled);
- holder.itemView.setEnabled(isEnabled);
- holder.itemCheck.setEnabled(isEnabled);
- InterfaceModel model = mDatas.get(position);
- holder.name.setText(model.getMessageType().desc);
- holder.index.setText((position + 1) + ".");
- if (isCheckAll == 0) {
- model.setSelected(true);
- } else if (isCheckAll == 1) {
- model.setSelected(false);
- }
- holder.itemCheck.setChecked(model.isSelected());
-
- }
-
- //返回Item的数量
- @Override
- public int getItemCount() {
- return mDatas == null ? 0 : mDatas.size();
- }
-
- /***
- * 获取制定 位置的Data
- * @param position 下标
- * @return Data
- */
- public InterfaceModel getItem(int position) {
- return mDatas == null ? null : mDatas.get(position);
- }
-
- //继承RecyclerView.ViewHolder抽象类的自定义ViewHolder
- class MyViewHolder extends RecyclerView.ViewHolder {
- TextView name;
- TextView index;
- CheckBox itemCheck;
-
- MyViewHolder(View itemView) {
- super(itemView);
- index = itemView.findViewById(R.id.index);
- name = itemView.findViewById(R.id.name);
- name.setSelected(true);
- itemCheck = itemView.findViewById(R.id.item_check);
- init();
-
- }
-
- private void init() {
- itemView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- InterfaceModel model = getItem(getBindingAdapterPosition());
- model.setSelected(!model.isSelected());
- updateCheckNum(model.isSelected());
- itemCheck.setChecked(model.isSelected());
- }
- });
- itemCheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- if (buttonView.isPressed()) {
- updateCheckNum(isChecked);
- InterfaceModel model = getItem(getBindingAdapterPosition());
- model.setSelected(isChecked);
- }
- }
- });
- }
- }
-
- //更新选中个数
- private void updateCheckNum(boolean isChecked) {
- if (isChecked) {
- checkNum++;
- } else {
- checkNum--;
- }
- updateCheckNumStatusCall();
- updateCheckAllStatus(true);
- }
-
- private void updateCheckNumStatusCall() {
- if (listener != null)
- listener.onCheckNum(checkNum);
- }
-
- //更新全选状态
- private void updateCheckAllStatus(boolean isNotice) {
- if (getItemCount() == checkNum) {
- isCheckAll = 0;
- updateCheckAllStatusCall(isNotice, true);
- } else if (0 == checkNum) {
- isCheckAll = 1;
- updateCheckAllStatusCall(isNotice, false);
- } else {
- isCheckAll = 2;
- updateCheckAllStatusCall(isNotice, false);
- }
-
- }
-
- private void updateCheckAllStatusCall(boolean isNotice, boolean isCheckAll) {
- if (isNotice)
- if (oldIsCheckAll != isCheckAll) {
- oldIsCheckAll = isCheckAll;
- if (listener != null)
- listener.onCheckAll(isCheckAll);
- }
-
- }
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/LineAdapter.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/LineAdapter.java
deleted file mode 100644
index 7fc43b96d4..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/LineAdapter.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.zhidao.adas.client.adapter;
-
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import com.zhidao.adas.client.R;
-import com.zhidao.adas.client.base.BaseAdapter;
-import com.zhidao.adas.client.base.BaseViewHolder;
-import com.zhidao.adas.client.bean.AutoPilotMode;
-
-import java.util.List;
-
-/**
- * @author song kenan
- * @des 线路
- * @date 2021/8/13
- */
-public class LineAdapter extends BaseAdapter {
-
-
- public LineAdapter(List data) {
- super(data);
- }
-
- @Override
- public void setData(List mDatas) {
- super.setData(mDatas);
- }
-
- @Override
- protected void onBindDataToItem(ViewHolder viewHolder, AutoPilotMode data, int position) {
- viewHolder.title.setText("(" + (data.isBus ? "Bus" : "Taxi") + ")" + data.name + " " + data.startName + "->" + data.endName);
- }
-
- @Override
- protected View getItemViewResource(ViewGroup viewGroup) {
- return LayoutInflater.from(mContext).inflate(R.layout.item_info, viewGroup, false);
- }
-
- @Override
- protected ViewHolder getViewHolder(View view) {
- return new ViewHolder(view, this);
- }
-
- class ViewHolder extends BaseViewHolder {
- TextView title;
-
- public ViewHolder(View itemView, LineAdapter adapter) {
- super(itemView, adapter);
-// ViewGroup.LayoutParams layoutParams = itemView.getLayoutParams();
-// if (layoutParams != null) {
-// layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
-//
-// }
- title = itemView.findViewById(R.id.tv_info_title);
- }
- }
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/SpecialVehicleAdapter.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/SpecialVehicleAdapter.java
deleted file mode 100644
index a7eedf2245..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/SpecialVehicleAdapter.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.zhidao.adas.client.adapter;
-
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import com.zhidao.adas.client.R;
-import com.zhidao.adas.client.base.BaseAdapter;
-import com.zhidao.adas.client.base.BaseViewHolder;
-import com.zhidao.adas.client.bean.SpecialVehicleBean;
-
-import java.util.List;
-
-/**
- * @author song kenan
- * @des 线路
- * @date 2021/8/13
- */
-public class SpecialVehicleAdapter extends BaseAdapter {
-
-
- public SpecialVehicleAdapter(List data) {
- super(data);
- }
-
- @Override
- public void setData(List mDatas) {
- super.setData(mDatas);
- }
-
- @Override
- protected void onBindDataToItem(ViewHolder viewHolder, SpecialVehicleBean data, int position) {
- viewHolder.title.setText(data.name);
- }
-
- @Override
- protected View getItemViewResource(ViewGroup viewGroup) {
- return LayoutInflater.from(mContext).inflate(R.layout.item_info, viewGroup, false);
- }
-
- @Override
- protected ViewHolder getViewHolder(View view) {
- return new ViewHolder(view, this);
- }
-
- class ViewHolder extends BaseViewHolder {
- TextView title;
-
- public ViewHolder(View itemView, SpecialVehicleAdapter adapter) {
- super(itemView, adapter);
-// ViewGroup.LayoutParams layoutParams = itemView.getLayoutParams();
-// if (layoutParams != null) {
-// layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
-//
-// }
- title = itemView.findViewById(R.id.tv_info_title);
- }
- }
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/ViaPositionAdapter.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/ViaPositionAdapter.java
deleted file mode 100644
index 10fea989e6..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/ViaPositionAdapter.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package com.zhidao.adas.client.adapter;
-
-import android.content.Context;
-import android.text.Editable;
-import android.text.TextUtils;
-import android.text.TextWatcher;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.EditText;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import androidx.annotation.NonNull;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.zhidao.adas.client.R;
-import com.zhidao.adas.client.bean.AutoPilotMode;
-
-import java.util.List;
-
-
-public class ViaPositionAdapter extends RecyclerView.Adapter {
-
- private List datas;
- private Context mContext;
-
- public void setDatas(List datas) {
- this.datas = datas;
- if (!this.datas.isEmpty()) {
- for (int i = 0; i < this.datas.size(); i++) {
- this.datas.get(i).name = "点" + (i + 1);
- }
- }
- }
-
- public List getDatas() {
- return datas;
- }
-
- public void addHint() {
- datas.add(new AutoPilotMode.Location("点" + (datas.size() + 1)));
- notifyItemInserted(datas.size() - 1);
- }
-
- public void minus() {
- datas.remove(datas.size() - 1);
- notifyItemRemoved(datas.size() - 1);
- notifyItemRangeChanged(datas.size() - 1, getItemCount());
- }
-
- @Override
- public int getItemViewType(int position) {
- return position;
- }
-
- //创建ViewHolder
- @NonNull
- @Override
- public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- //实例化得到Item布局文件的View对象
- mContext = parent.getContext();
- View v = LayoutInflater.from(mContext).inflate(R.layout.item_via, parent, false);
- //返回MyViewHolder的对象
- return new MyViewHolder(v);
- }
-
- //绑定数据
- @Override
- public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
- AutoPilotMode.Location location = datas.get(position);
- holder.title.setText(location.name);
- if (location.longitude != 0.0)
- holder.lon.setText(String.valueOf(location.longitude));
- if (location.latitude != 0.0)
- holder.lat.setText(String.valueOf(location.latitude));
-// holder.input.setFocusable(true);
-// holder.input.setFocusableInTouchMode(true);
-// holder.input.requestFocus();
-
- }
-
- //返回Item的数量
- @Override
- public int getItemCount() {
- return datas == null ? 0 : datas.size();
- }
-
-
- //继承RecyclerView.ViewHolder抽象类的自定义ViewHolder
- class MyViewHolder extends RecyclerView.ViewHolder {
- TextView title;
- EditText lon;
- EditText lat;
-
- MyViewHolder(View itemView) {
- super(itemView);
- title = itemView.findViewById(R.id.title);
- lon = itemView.findViewById(R.id.lon);
- lat = itemView.findViewById(R.id.lat);
- lon.addTextChangedListener(new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-
- }
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
-
- }
-
- @Override
- public void afterTextChanged(Editable s) {
- if (!TextUtils.isEmpty(s)) {
- try {
- datas.get(getBindingAdapterPosition()).longitude = Double.parseDouble(s.toString().trim());
- } catch (Exception e) {
- e.printStackTrace();
- lon.setText("");
- Toast.makeText(mContext, "输入不合法", Toast.LENGTH_SHORT).show();
- }
- } else {
- datas.get(getBindingAdapterPosition()).longitude = 0.0;
- }
- }
- });
- lat.addTextChangedListener(new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-
- }
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
-
- }
-
- @Override
- public void afterTextChanged(Editable s) {
- if (!TextUtils.isEmpty(s)) {
- try {
- datas.get(getBindingAdapterPosition()).latitude = Double.parseDouble(s.toString().trim());
- } catch (Exception e) {
- e.printStackTrace();
- lat.setText("");
- Toast.makeText(mContext, "输入不合法", Toast.LENGTH_SHORT).show();
- }
- } else {
- datas.get(getBindingAdapterPosition()).latitude = 0.0;
- }
- }
- });
- }
- }
-
-}
-
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseActivity.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseActivity.java
deleted file mode 100644
index b89e5feca2..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseActivity.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package com.zhidao.adas.client.base;
-
-import android.os.Handler;
-import android.os.Message;
-import android.view.Gravity;
-import android.widget.Toast;
-
-import androidx.appcompat.app.AppCompatActivity;
-
-import com.zhidao.adas.client.ui.MainActivity;
-
-import java.lang.ref.WeakReference;
-
-public abstract class BaseActivity extends AppCompatActivity {
- private BaseHandler mBaseHandler;
- private Toast toast;
-
- protected void showToastCenter(String msg) {
- showToastCenter(msg, Toast.LENGTH_SHORT);
- }
-
- protected void showToastCenter(String msg, int duration) {
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- if (toast != null) {
- toast.cancel();
- toast = null;
- }
- toast = Toast.makeText(BaseActivity.this, "", duration); //如果有居中显示需求
- toast.setGravity(Gravity.CENTER, 0, 0);
- toast.setText(msg);
- toast.show();
- }
- });
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- if (getHandler() != null)
- getHandler().removeCallbacksAndMessages(null);
- }
-
- /**
- * 初始化一个Handler,如果需要使用Handler,先调用此方法,
- * 然后可以使用postRunnable(Runnable runnable),
- * sendMessage在handleMessage(Message msg)中接收msg
- */
- public void initHandler() {
- mBaseHandler = new BaseHandler(this);
- }
-
- /**
- * 返回Handler,在此之前确定已经调用initHandler()
- *
- * @return Handler
- */
- public Handler getHandler() {
- return mBaseHandler;
- }
-
-
- /**
- * 同Handler 的 handleMessage,
- * getHandler.sendMessage,发送的Message在此接收
- * 在此之前确定已经调用initHandler()
- *
- * @param msg
- */
- protected void handleMessage(Message msg) {
-
- }
-
- /**
- * 同Handler的postRunnable
- * 在此之前确定已经调用initHandler()
- */
- protected void postRunnable(Runnable runnable) {
- postRunnableDelayed(runnable, 0);
- }
-
- /**
- * 同Handler的postRunnableDelayed
- * 在此之前确定已经调用initHandler()
- */
- protected void postRunnableDelayed(Runnable runnable, long delayMillis) {
- if (mBaseHandler == null) initHandler();
- mBaseHandler.postDelayed(runnable, delayMillis);
- }
-
-
- protected static class BaseHandler extends Handler {
- private final WeakReference mObjects;
-
- public BaseHandler(BaseActivity mPresenter) {
- mObjects = new WeakReference(mPresenter);
- }
-
- @Override
- public void handleMessage(Message msg) {
- BaseActivity mPresenter = mObjects.get();
- if (mPresenter != null)
- mPresenter.handleMessage(msg);
- }
- }
-
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseAdapter.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseAdapter.java
deleted file mode 100644
index ca5e419fc4..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseAdapter.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package com.zhidao.adas.client.base;
-
-
-import android.content.Context;
-import android.view.View;
-import android.view.ViewGroup;
-
-import androidx.annotation.NonNull;
-import androidx.recyclerview.widget.RecyclerView;
-
-import java.util.List;
-
-
-/**
- * RecycleView Adapter
- * Created by renfeicui on 2018/10/12.
- */
-public abstract class BaseAdapter extends RecyclerView.Adapter {
- protected String TAG = this.getClass().getSimpleName();
- protected List mDatas;
- protected Context mContext;
- private OnItemClickListener mItemClick;
-
- public interface OnItemClickListener {
- void onItemClick(int position, D data);
- }
-
-
- public BaseAdapter() {
- }
-
- public BaseAdapter(List mDatas) {
- this.mDatas = mDatas;
- }
-
- public BaseAdapter(OnItemClickListener listener) {
- mItemClick = listener;
- }
-
- public BaseAdapter(List mDatas, OnItemClickListener listener) {
- this.mDatas = mDatas;
- mItemClick = listener;
- }
-
- public void setData(List mDatas) {
- this.mDatas = mDatas;
- if (!mDatas.isEmpty())
- notifyDataSetChanged();
- }
-
- public List getData() {
- return mDatas;
- }
-
- public void setOnItemClickListener(OnItemClickListener listener) {
- mItemClick = listener;
- }
-
- /***
- * 获取制定 位置的Data
- * @param position 下标
- * @return Data
- */
- public D getItem(int position) {
- return mDatas == null ? null : mDatas.get(position);
- }
-
- @Override
- public int getItemCount() {
- return mDatas == null ? 0 : mDatas.size();
- }
-
- @Override
- public void onBindViewHolder(@NonNull VH viewHolder, int position) {
- D bean = getItem(position);
- onBindDataToItem(viewHolder, bean, position);
- }
-
-
- @NonNull
- @Override
- public VH onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
- mContext = viewGroup.getContext();
- return getViewHolder(getItemViewResource(viewGroup));
- }
-
- /***
- * 同onBindViewHolder()
- * @param viewHolder viewHolder
- * @param data 数据
- * @param position 下标
- */
- protected abstract void onBindDataToItem(VH viewHolder, D data, int position);
-
- /***
- * 获取Item布局
- * @return id
- */
- protected abstract View getItemViewResource(ViewGroup viewGroup);
-
- /**
- * 获取ViewHolder
- *
- * @param view
- * @return
- */
- protected abstract VH getViewHolder(View view);
-
- public void onClick(BaseViewHolder viewHolder) {
- if (mItemClick != null) {
- mItemClick.onItemClick(viewHolder.getAdapterPosition(), getItem(viewHolder.getAdapterPosition()));
- }
- }
-
-}
\ No newline at end of file
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseFragment.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseFragment.java
deleted file mode 100644
index 9dcf870c14..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseFragment.java
+++ /dev/null
@@ -1,253 +0,0 @@
-package com.zhidao.adas.client.base;
-
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.util.Pair;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
-
-import com.zhidao.adas.client.DataDistribution;
-import com.zhidao.adas.client.OnAdasClientListener;
-import com.zhidao.adas.client.bean.PerceptionTrafficLight;
-import com.zhidao.adas.client.utils.Constants;
-
-import java.lang.ref.WeakReference;
-
-import perception.TrafficLightOuterClass;
-
-/**
- * @author song kenan
- * @des
- * @date 2021/8/16
- */
-public abstract class BaseFragment extends Fragment {
- protected final String TAG = this.getClass().getSimpleName();
- private static final int WHAT_REFRESH = 0x01;
- private static final int WHAT_UPDATE_CONNECT_STATUS = 0x02;
- protected static final int WHAT_REFRESH_TRAFFIC_LIGHTS = 0x02;
- protected String title;
-
- public BaseFragment() {
- }
-
- public BaseFragment(String title) {
- this.title = title;
- }
-
- @Override
- public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- initHandler();
- }
-
- @Override
- public void onResume() {
- super.onResume();
- if (!isHidden())
- DataDistribution.getInstance().registerAdasClientListener(new Pair<>(title, adasClientListener));
- }
-
- @Override
- public void onPause() {
- super.onPause();
- DataDistribution.getInstance().unregisterAdasClientListener(new Pair<>(title, adasClientListener));
- }
-
- @Override
- public void onHiddenChanged(boolean hidden) {
- super.onHiddenChanged(hidden);
- if (!hidden) {
- DataDistribution.getInstance().registerAdasClientListener(new Pair<>(title, adasClientListener));
- }
- }
-
- public void updateConnectStatus(int ipcConnectionStatus) {
- if (getHandler() != null) {
- Message msg = Message.obtain();
- msg.what = WHAT_UPDATE_CONNECT_STATUS;
- msg.arg1 = ipcConnectionStatus;
- getHandler().sendMessage(msg);
- }
- }
-
- protected void onConnectionIPCStatus(int ipcConnectionStatus) {
-
- }
-
- @Override
- public void onDestroyView() {
- super.onDestroyView();
- if (getHandler() != null)
- getHandler().removeCallbacksAndMessages(null);
- }
-
- protected abstract void onRefreshView();
-
-
- private final OnAdasClientListener adasClientListener = new OnAdasClientListener() {
- @Override
- public void onRefresh() {
- getHandler().sendEmptyMessage(WHAT_REFRESH);
- }
-
- @Override
- public void onPerceptionTrafficLight(PerceptionTrafficLight trafficLights) {
- super.onPerceptionTrafficLight(trafficLights);
- if (Constants.TITLE.RECEIVE_PERCEPTION_TRAFFIC_LIGHT.equals(title)) {
- TrafficLightOuterClass.TrafficLights bean = trafficLights.bean;
- TrafficLightOuterClass.TrafficLight light = null;
- StringBuilder builder = new StringBuilder();
- if (bean.hasStraight()) {
- light = bean.getStraight();
- builder.append("当前:").append("直行灯");
- } else if (bean.hasLeft()) {
- light = bean.getLeft();
- builder.append("当前:").append("左转灯");
- } else if (bean.hasRight()) {
- light = bean.getRight();
- builder.append("当前:").append("右转灯");
- } else if (bean.hasUTurn()) {
- light = bean.getUTurn();
- builder.append("当前:").append("掉头灯");
- }
- Message msg = Message.obtain();
- msg.what = WHAT_REFRESH_TRAFFIC_LIGHTS;
- if (light != null) {
- builder.append(" 灯态:").append(getLightState(light.getState()));
- builder.append(" 车道类型:").append(getLightType(light.getType()));
- float d = light.getDuration();
- builder.append(" 读秒:").append(d < 0 ? "未知" : d);
- msg.obj = builder.toString();
- }
- getHandler().sendMessage(msg);
- }
- }
- };
-
- /**
- * 获取车道
- *
- * @param type
- * @return
- */
- protected String getLightType(TrafficLightOuterClass.LightType type) {
- String str = null;
- if (type == TrafficLightOuterClass.LightType.TYPE_VEHICLE) {
- str = "机动车道";
- } else if (type == TrafficLightOuterClass.LightType.TYPE_BICYLE) {
- str = "自行车道";
- } else if (type == TrafficLightOuterClass.LightType.TYPE_PEDSTRIAN) {
- str = "行人道";
- } else if (type == TrafficLightOuterClass.LightType.TYPE_LANE) {
- str = "车道";
- } else {//TrafficLightOuterClass.LightState.TYPE_DEFAULT
- str = "未知";
- }
-
- return str;
- }
-
- /**
- * 获取灯态
- *
- * @param state
- * @return
- */
- protected String getLightState(TrafficLightOuterClass.LightState state) {
- String light = null;
- if (state == TrafficLightOuterClass.LightState.STATE_RED) {
- light = "红";
- } else if (state == TrafficLightOuterClass.LightState.STATE_YELLOW) {
- light = "黄";
- } else if (state == TrafficLightOuterClass.LightState.STATE_GREEN) {
- light = "绿";
- } else if (state == TrafficLightOuterClass.LightState.STATE_FLASH) {
- light = "闪";
- } else {//TrafficLightOuterClass.LightState.STATE_OFF
- light = "没";
- }
-
- return light;
- }
-
-
- private BaseHandler mBaseHandler;
-
-
- /**
- * 初始化一个Handler,如果需要使用Handler,先调用此方法,
- * 然后可以使用postRunnable(Runnable runnable),
- * sendMessage在handleMessage(Message msg)中接收msg
- */
- public void initHandler() {
- mBaseHandler = new BaseHandler(this);
- }
-
- /**
- * 返回Handler,在此之前确定已经调用initHandler()
- *
- * @return Handler
- */
- public Handler getHandler() {
- return mBaseHandler;
- }
-
-
- /**
- * 同Handler 的 handleMessage,
- * getHandler.sendMessage,发送的Message在此接收
- * 在此之前确定已经调用initHandler()
- *
- * @param msg
- */
- protected void handleMessage(Message msg) {
- switch (msg.what) {
- case WHAT_REFRESH:
- if (isVisible())
- onRefreshView();
- break;
-
- case WHAT_UPDATE_CONNECT_STATUS:
- if (isVisible())
- onConnectionIPCStatus(msg.arg1);
- break;
- }
- }
-
- /**
- * 同Handler的postRunnable
- * 在此之前确定已经调用initHandler()
- */
- protected void postRunnable(Runnable runnable) {
- postRunnableDelayed(runnable, 0);
- }
-
- /**
- * 同Handler的postRunnableDelayed
- * 在此之前确定已经调用initHandler()
- */
- protected void postRunnableDelayed(Runnable runnable, long delayMillis) {
- if (mBaseHandler == null) initHandler();
- mBaseHandler.postDelayed(runnable, delayMillis);
- }
-
-
- protected static class BaseHandler extends Handler {
- private final WeakReference mObjects;
-
- public BaseHandler(BaseFragment mPresenter) {
- mObjects = new WeakReference(mPresenter);
- }
-
- @Override
- public void handleMessage(Message msg) {
- BaseFragment mPresenter = mObjects.get();
- if (mPresenter != null)
- mPresenter.handleMessage(msg);
- }
- }
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseViewHolder.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseViewHolder.java
deleted file mode 100644
index 3c62985326..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseViewHolder.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.zhidao.adas.client.base;
-
-import android.view.View;
-
-import androidx.recyclerview.widget.RecyclerView;
-
-
-public abstract class BaseViewHolder extends RecyclerView.ViewHolder {
- private T adapter;
- public View itemView;
-
- public BaseViewHolder(View itemView, final T adapter) {
- super(itemView);
- this.itemView = itemView;
- this.adapter = adapter;
- itemView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- adapter.onClick(BaseViewHolder.this);
- }
- });
-
- }
-
-
-
-}
\ No newline at end of file
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutoPilotMode.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutoPilotMode.java
deleted file mode 100644
index 6fd27578bc..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutoPilotMode.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.zhidao.adas.client.bean;
-
-import android.text.TextUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import mogo.telematics.pad.MessagePad;
-
-public class AutoPilotMode {
- public String name;
- public String startName;
- public Location startLatLon;
- public String endName;
- public Location endLatLon;
- public double speedLimit;
- public List wayLatLons;
- public int routeID = -1;//道路ID
- public String routeName;//道路名称
- public boolean isBus = false;//true:bus false:taxi
-
- public List getWayLatLons() {
- if (wayLatLons == null || wayLatLons.isEmpty()) return null;
- List list = new ArrayList<>();
- for (int i = 0; i < wayLatLons.size(); i++) {
- MessagePad.Location.Builder builder = MessagePad.Location.newBuilder();
- builder.setLatitude(wayLatLons.get(i).latitude).setLongitude(wayLatLons.get(i).longitude);
- list.add(builder.build());
- }
- return list;
- }
-
- public static class Location {
- public String name;
- public double longitude;
- public double latitude;
-
- public Location() {
- }
-
- public Location(String name) {
- this.name = name;
- }
-
- public boolean isNull() {
- return longitude == 0.0 || latitude == 0.0;
- }
- }
-
- public boolean isNull() {
- if (wayLatLons != null && !wayLatLons.isEmpty()) {
- for (int i = 0; i < wayLatLons.size(); i++) {
- if (wayLatLons.get(i).isNull()) {
- return true;
- }
- }
- }
- if (isBus) {
- return TextUtils.isEmpty(name) || TextUtils.isEmpty(startName) || TextUtils.isEmpty(endName) ||
- startLatLon == null || startLatLon.isNull() || endLatLon == null || endLatLon.isNull() ||
- speedLimit == 0.0 || routeID == -1 || TextUtils.isEmpty(routeName);
- } else
- return TextUtils.isEmpty(name) || TextUtils.isEmpty(startName) || TextUtils.isEmpty(endName) ||
- startLatLon == null || startLatLon.isNull() || endLatLon == null || endLatLon.isNull() ||
- speedLimit == 0.0;
- }
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BaseInfo.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BaseInfo.java
deleted file mode 100644
index 41b65e5472..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BaseInfo.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.zhidao.adas.client.bean;
-
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-import mogo.telematics.pad.MessagePad;
-
-public abstract class BaseInfo {
- public final String action;
- public final long nowTime;
- public final MessagePad.Header header;
- public final int len;
- public final int payloadLen;
- private SimpleDateFormat sdf;
-
- public BaseInfo(String action, int len, MessagePad.Header header, SimpleDateFormat sdf) {
- this.action = action;
- this.payloadLen = len;
- nowTime = System.currentTimeMillis();
- int headerSize = 0;
- if (header != null) {
- headerSize = header.getSerializedSize();
- }
- this.len = 8 + headerSize + len;
- this.header = header;
- this.sdf = sdf;
- }
-
- public BaseInfo(String action, int len) {
- this.action = action;
- nowTime = System.currentTimeMillis();
- this.len = len;
- this.payloadLen = len;
- this.header = null;
- }
-
- @Override
- public String toString() {
- String str = "原始数据长度:" + len + "\tPayload数据长度:" + payloadLen + '\n';
- if (header != null) {
- str += "Header:[" + "MessageID:" + header.getMsgID() +
- " MessageType:" + header.getMsgType() + " 发送时间:" + sdf.format(new Date((long) (header.getTimestamp() * 1000)))
- + " 数据源时间:" + sdf.format(new Date((long) (header.getSourceTimestamp() * 1000))) + "]\n";
- }
- return str;
- }
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Config.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Config.java
deleted file mode 100644
index 960c40a65c..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Config.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.zhidao.adas.client.bean;
-
-import java.util.Objects;
-
-public class Config {
- public final String name;
- public String value;
- public int color = -1;
-
- public Config(String name, String value) {
- this.name = name;
- this.value = value;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- Config config = (Config) o;
- return Objects.equals(name, config.name);
- }
-
- public void cover(Config config) {
- this.value = config.value;
- }
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/DataShow.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/DataShow.java
deleted file mode 100644
index 02558e1ac4..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/DataShow.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.zhidao.adas.client.bean;
-
-public class DataShow {
- public final long position;
- public final String data;
-
- public DataShow(long position, String data) {
- this.position = position;
- this.data = data;
- }
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ErrorData.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ErrorData.java
deleted file mode 100644
index b47e46b909..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ErrorData.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.zhidao.adas.client.bean;
-
-import com.zhidao.support.adas.high.common.ByteUtil;
-import com.zhidao.support.adas.high.common.ProtocolStatus;
-
-public class ErrorData extends BaseInfo {
- private final ProtocolStatus status;
- private final byte[] bytes;
-
- public ErrorData(ProtocolStatus status, byte[] bytes) {
- super("接收", bytes.length);
- this.status = status;
- this.bytes = bytes;
- }
-
- @Override
- public String toString() {
- return super.toString() + status + "\n原始数据:" + ByteUtil.byteArrToHex(bytes);
- }
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/IPCConnectState.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/IPCConnectState.java
deleted file mode 100644
index cc1ca7c09b..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/IPCConnectState.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.zhidao.adas.client.bean;
-
-import androidx.annotation.ColorRes;
-
-public class IPCConnectState {
- public final long time;
- public final String status;
- @ColorRes
- public final int color;
-
- public IPCConnectState(String status, @ColorRes int color) {
- this.status = status;
- this.color = color;
- time = System.currentTimeMillis();
- }
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/InterfaceModel.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/InterfaceModel.java
deleted file mode 100644
index e63d64b336..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/InterfaceModel.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.zhidao.adas.client.bean;
-
-import com.zhidao.support.adas.high.common.MessageType;
-
-
-public class InterfaceModel {
- private boolean isSelected = false;//是否选择
- private final MessageType messageType;
-
- public InterfaceModel(MessageType messageType) {
- this.messageType = messageType;
- }
-
- public boolean isSelected() {
- return isSelected;
- }
-
- public void setSelected(boolean selected) {
- isSelected = selected;
- }
-
- public MessageType getMessageType() {
- return messageType;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- InterfaceModel that = (InterfaceModel) o;
- return messageType == that.messageType;
- }
-
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MySSHResult.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MySSHResult.java
deleted file mode 100644
index 0273e1713d..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MySSHResult.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.zhidao.adas.client.bean;
-
-public class MySSHResult extends BaseInfo {
- public final String info;
-
- public MySSHResult(String info, int len) {
- super("接收", len);
- this.info = info;
- }
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuMap.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuMap.java
deleted file mode 100644
index 51a2c8c4ed..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuMap.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.zhidao.adas.client.bean;
-
-import com.google.protobuf.TextFormat;
-import com.mogo.support.obu.ObuScene;
-import com.zhidao.support.adas.high.common.ByteUtil;
-
-import java.text.SimpleDateFormat;
-
-import mogo.telematics.pad.MessagePad;
-
-public class ObuMap extends BaseInfo {
- public final ObuScene.MapMatchData bean;
-
-
- public ObuMap(MessagePad.Header header, ObuScene.MapMatchData bean, SimpleDateFormat sdf) {
- super("接收", bean.getSerializedSize(), header, sdf);
- this.bean = bean;
- }
-
- @Override
- public String toString() {
- return super.toString() + "Payload原始数据:" + ByteUtil.byteArrToHex(bean.toByteArray()) + '\n' + TextFormat.printer().escapingNonAscii(false).printToString(bean);
- }
-
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsi.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsi.java
deleted file mode 100644
index 8cd054f956..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsi.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.zhidao.adas.client.bean;
-
-import com.google.protobuf.TextFormat;
-import com.mogo.support.obu.ObuScene;
-import com.zhidao.support.adas.high.common.ByteUtil;
-
-import java.text.SimpleDateFormat;
-
-import mogo.telematics.pad.MessagePad;
-
-public class ObuRsi extends BaseInfo {
- public final ObuScene.RsiWarningData bean;
-
-
- public ObuRsi(MessagePad.Header header, ObuScene.RsiWarningData bean, SimpleDateFormat sdf) {
- super("接收", bean.getSerializedSize(), header, sdf);
- this.bean = bean;
- }
-
- @Override
- public String toString() {
- return super.toString() + "Payload原始数据:" + ByteUtil.byteArrToHex(bean.toByteArray()) + '\n' + TextFormat.printer().escapingNonAscii(false).printToString(bean);
- }
-
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsm.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsm.java
deleted file mode 100644
index badbf1745b..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsm.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.zhidao.adas.client.bean;
-
-import com.google.protobuf.TextFormat;
-import com.mogo.support.obu.ObuScene;
-import com.zhidao.support.adas.high.common.ByteUtil;
-
-import java.text.SimpleDateFormat;
-
-import mogo.telematics.pad.MessagePad;
-
-public class ObuRsm extends BaseInfo {
- public final ObuScene.RsmWarningData bean;
-
-
- public ObuRsm(MessagePad.Header header, ObuScene.RsmWarningData bean, SimpleDateFormat sdf) {
- super("接收", bean.getSerializedSize(), header, sdf);
- this.bean = bean;
- }
-
- @Override
- public String toString() {
- return super.toString() + "Payload原始数据:" + ByteUtil.byteArrToHex(bean.toByteArray()) + '\n' + TextFormat.printer().escapingNonAscii(false).printToString(bean);
- }
-
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuSpat.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuSpat.java
deleted file mode 100644
index 3ba064f0e6..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuSpat.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.zhidao.adas.client.bean;
-
-import com.google.protobuf.TextFormat;
-import com.mogo.support.obu.ObuScene;
-import com.zhidao.support.adas.high.common.ByteUtil;
-
-import java.text.SimpleDateFormat;
-
-import mogo.telematics.pad.MessagePad;
-
-public class ObuSpat extends BaseInfo {
- public final ObuScene.SpatWarningData bean;
-
-
- public ObuSpat(MessagePad.Header header, ObuScene.SpatWarningData bean, SimpleDateFormat sdf) {
- super("接收", bean.getSerializedSize(), header, sdf);
- this.bean = bean;
- }
-
- @Override
- public String toString() {
- return super.toString() + "Payload原始数据:" + ByteUtil.byteArrToHex(bean.toByteArray()) + '\n' + TextFormat.printer().escapingNonAscii(false).printToString(bean);
- }
-
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuWarningData.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuWarningData.java
deleted file mode 100644
index 7ea1bca9af..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuWarningData.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.zhidao.adas.client.bean;
-
-import com.google.protobuf.TextFormat;
-
-import java.text.SimpleDateFormat;
-
-import mogo.telematics.pad.MessagePad;
-import mogo.v2x.ObuWarningEvent;
-
-public class ObuWarningData extends BaseInfo {
- public final ObuWarningEvent.ObuWarningData bean;
-
- public ObuWarningData(MessagePad.Header header, ObuWarningEvent.ObuWarningData bean, SimpleDateFormat sdf) {
- super("接收", bean.getSerializedSize(), header, sdf);
- this.bean = bean;
- }
-
-
- @Override
- public String toString() {
- return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean);
- }
-
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java
deleted file mode 100644
index 246de432ce..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.zhidao.adas.client.bean;
-
-import com.google.protobuf.TextFormat;
-import com.zhidao.support.adas.high.common.ByteUtil;
-
-import java.text.SimpleDateFormat;
-
-import mogo.telematics.pad.MessagePad;
-import perception.TrafficLightOuterClass;
-
-public class PerceptionTrafficLight extends BaseInfo {
- public final TrafficLightOuterClass.TrafficLights bean;
-
- public PerceptionTrafficLight(MessagePad.Header header, TrafficLightOuterClass.TrafficLights bean, SimpleDateFormat sdf) {
- super("接收", bean.getSerializedSize(), header, sdf);
- this.bean = bean;
- }
-
-
- @Override
- public String toString() {
- return super.toString() + "Payload原始数据:" + ByteUtil.byteArrToHex(bean.toByteArray()) + '\n' + TextFormat.printer().escapingNonAscii(false).printToString(bean);
- }
-
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ReceiveBytesData.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ReceiveBytesData.java
deleted file mode 100644
index ac72a5b7cf..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ReceiveBytesData.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.zhidao.adas.client.bean;
-
-import com.zhidao.support.adas.high.common.ByteUtil;
-
-import java.text.SimpleDateFormat;
-
-import mogo.telematics.pad.MessagePad;
-
-public class ReceiveBytesData extends BaseInfo {
- public final byte[] data;
-
- public ReceiveBytesData(MessagePad.Header header, byte[] data, SimpleDateFormat sdf) {
- super("接收", data.length, header, sdf);
- this.data = data;
- }
-
-
- @Override
- public String toString() {
- return super.toString() + "Payload原始数据:" + ByteUtil.byteArrToHex(data);
- }
-
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ReceiveData.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ReceiveData.java
deleted file mode 100644
index 0d8be2857d..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ReceiveData.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.zhidao.adas.client.bean;
-
-import com.google.protobuf.GeneratedMessageV3;
-import com.google.protobuf.TextFormat;
-import com.zhidao.support.adas.high.common.ByteUtil;
-
-import java.text.SimpleDateFormat;
-
-import mogo.telematics.pad.MessagePad;
-
-public class ReceiveData extends BaseInfo {
- public final GeneratedMessageV3 bean;
-
- public ReceiveData(MessagePad.Header header, GeneratedMessageV3 bean, SimpleDateFormat sdf) {
- super("接收", bean.getSerializedSize(), header, sdf);
- this.bean = bean;
- }
-
-
- @Override
- public String toString() {
- return super.toString() + "Payload原始数据:" + ByteUtil.byteArrToHex(bean.toByteArray()) + '\n' + TextFormat.printer().escapingNonAscii(false).printToString(bean);
- }
-
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/SpecialVehicleBean.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/SpecialVehicleBean.java
deleted file mode 100644
index 6a9cf64512..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/SpecialVehicleBean.java
+++ /dev/null
@@ -1,347 +0,0 @@
-package com.zhidao.adas.client.bean;
-
-import android.content.Context;
-import android.text.TextUtils;
-
-import androidx.annotation.NonNull;
-
-import com.google.protobuf.TextFormat;
-import com.zhidao.adas.client.ui.special.SpecialVehicleFloatWindowManager;
-import com.zhidao.adas.client.utils.PreferencesUtils;
-import com.zhidao.support.adas.high.AdasManager;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import chassis.SpecialVehicleTaskCmdOuterClass;
-
-public class SpecialVehicleBean {
- public interface TAG {
- String FTQSC = "ftqsc";//福田清扫车
- String KWXB = "kwxb";//开沃小巴
- String JLM1 = "jlm1";//金旅M1
- }
-
- public interface SEND_TYPE {
- int ONE = 0;//单次发送
- int MORE = 1;//多次发送
- int ALL = 2;//两种方式都支持
- }
-
- public final String name;
- public final String simpleName;//简单名字 两个字
- public final List options;
- public final String tag;//用于存储
- public int sendType = SEND_TYPE.ONE;//发送类型
- private SpecialVehicleFloatWindowManager manager;
-
- public static final int SCREEN_MARGIN = 20;
-
- private final String FLOAT_WINDOW_LOCATION_MIN_X;
- private final String FLOAT_WINDOW_LOCATION_MIN_Y;
- private final String FLOAT_WINDOW_LOCATION_MAX_X;
- private final String FLOAT_WINDOW_LOCATION_MAX_Y;
-
- private SpecialVehicleBean(@NonNull String name, @NonNull String simpleName, String tag, List options) {
- this.name = name;
- this.simpleName = simpleName;
- this.tag = tag;
- this.options = options;
- FLOAT_WINDOW_LOCATION_MIN_X = tag + "_float_window_location_min_x";
- FLOAT_WINDOW_LOCATION_MIN_Y = tag + "_float_window_location_min_y";
- FLOAT_WINDOW_LOCATION_MAX_X = tag + "_float_window_location_max_X";
- FLOAT_WINDOW_LOCATION_MAX_Y = tag + "_float_window_location_max_y";
-
- }
-
- public void showFloat(Context context) {
- if (manager == null)
- manager = new SpecialVehicleFloatWindowManager(context, this);
- manager.show();
- }
-
- public void dismissFloat() {
- if (manager != null) {
- manager.onBack();
- manager = null;
- }
- }
-
- /************************悬浮窗位置******************/
-
-
- public void setFloatWindowLocationMinX(Context context, int x) {
- PreferencesUtils.putInt(context, FLOAT_WINDOW_LOCATION_MIN_X, x);
- }
-
- public int getFloatWindowLocationMinX(Context context) {
- return PreferencesUtils.getInt(context, FLOAT_WINDOW_LOCATION_MIN_X, SCREEN_MARGIN);
- }
-
- public void setFloatWindowLocationMinY(Context context, int y) {
- PreferencesUtils.putInt(context, FLOAT_WINDOW_LOCATION_MIN_Y, y);
- }
-
- public int getFloatWindowLocationMinY(Context context) {
- return PreferencesUtils.getInt(context, FLOAT_WINDOW_LOCATION_MIN_Y, SCREEN_MARGIN);
- }
-
-
- /************************悬浮窗位置******************/
-
- public void setFloatWindowLocationMaxX(Context context, int x) {
- PreferencesUtils.putInt(context, FLOAT_WINDOW_LOCATION_MAX_X, x);
- }
-
- public int getFloatWindowLocationMaxX(Context context) {
- return PreferencesUtils.getInt(context, FLOAT_WINDOW_LOCATION_MAX_X, SCREEN_MARGIN);
- }
-
- public void setFloatWindowLocationMaxY(Context context, int y) {
- PreferencesUtils.putInt(context, FLOAT_WINDOW_LOCATION_MAX_Y, y);
- }
-
- public int getFloatWindowLocationMaxY(Context context) {
- return PreferencesUtils.getInt(context, FLOAT_WINDOW_LOCATION_MAX_Y, SCREEN_MARGIN);
- }
-
- /**
- * 命令下发
- *
- * @param index -1一次性发送所有命令 其他 单个命令发送
- * @return
- */
- public String sendCmd(int index) {
- String str = "";
- if (TextUtils.equals(this.tag, TAG.FTQSC)) { //福田清扫车
- SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.Builder builder = SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.newBuilder();
- if (index < 0) {
- for (index = 0; index < options.size(); index++) {
- SpecialVehicleOption option = options.get(index);
- if (option.moreCheckPos != -1) {
- option.checkPos = option.moreCheckPos;
- option.moreCheckPos = -1;
- }
- setFuTianCleanValue(builder, index, option.checkPos);
- }
- } else {
- int checkPos = options.get(index).checkPos;
- setFuTianCleanValue(builder, index, checkPos);
- }
- SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd fuTianCleanCmd = builder.build();
- SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd fuTianTaskCmd = SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd.newBuilder()
- .setRoboSweeperFutianCleanCmd(fuTianCleanCmd).build();
- AdasManager.getInstance().sendRoboSweeperFuTianTaskCmd(fuTianTaskCmd);
- str = TextFormat.printer().escapingNonAscii(false).shortDebugString(fuTianTaskCmd);
- } else if (TextUtils.equals(this.tag, TAG.KWXB)) { //开沃小巴
- SpecialVehicleTaskCmdOuterClass.RoboVanSkywellTaskCmd vanSkywellTaskCmd = SpecialVehicleTaskCmdOuterClass.RoboVanSkywellTaskCmd.newBuilder()
- .build();
- AdasManager.getInstance().sendRoboVanSkywellTaskCmd(vanSkywellTaskCmd);
- } else if (TextUtils.equals(this.tag, TAG.JLM1)) { //金旅M1
- SpecialVehicleTaskCmdOuterClass.RoboBusJinlvM1Cmd.Builder builder = SpecialVehicleTaskCmdOuterClass.RoboBusJinlvM1Cmd.newBuilder();
- if (index < 0) {
- for (index = 0; index < options.size(); index++) {
- SpecialVehicleOption option = options.get(index);
- if (option.moreCheckPos != -1) {
- option.checkPos = option.moreCheckPos;
- option.moreCheckPos = -1;
- }
- setJinlvM1Value(builder, index, option.checkPos);
- }
- } else {
- int checkPos = options.get(index).checkPos;
- setJinlvM1Value(builder, index, checkPos);
- }
- SpecialVehicleTaskCmdOuterClass.RoboBusJinlvM1Cmd roboBusJinlvM1Cmd = builder.build();
- AdasManager.getInstance().sendRoboBusJinlvM1TaskCmd(roboBusJinlvM1Cmd);
- str = TextFormat.printer().escapingNonAscii(false).shortDebugString(roboBusJinlvM1Cmd);
- }
- return str;
- }
-
- private void setJinlvM1Value(SpecialVehicleTaskCmdOuterClass.RoboBusJinlvM1Cmd.Builder builder, int index, int checkPos) {
- switch (index) {
- case 0:
- builder.setAirConditionerCmd(checkPos);
- break;
- case 1:
- builder.setAirConditionerModeCmd(checkPos);
- break;
- case 2:
- builder.setAirConditionerWindSpeedCmd(checkPos);
- break;
- case 3:
- if (checkPos == 1) {
- checkPos = 16;
- } else if (checkPos == 2) {
- checkPos = 20;
- } else if (checkPos == 3) {
- checkPos = 26;
- }
- builder.setAirConditionerTemperatureCmd(checkPos);
- break;
- case 4:
- builder.setHeaderCmd(checkPos);
- break;
- case 5:
- builder.setHeaderWindSpeedCmd(checkPos);
- break;
- case 6:
- builder.setMainLamp1Cmd(checkPos);
- break;
- case 7:
- builder.setMainLamp2Cmd(checkPos);
- break;
- case 8:
- builder.setSmallLampCmd(checkPos);
- break;
- case 9:
- builder.setFrontDoorCmd(checkPos);
- break;
- }
- }
-
- private void setFuTianCleanValue(SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.Builder builder, int index, int checkPos) {
- switch (index) {
- case 0:
- builder.setCleanOpenRequirement(checkPos);
- break;
- case 1:
- builder.setCleanModeRequirement(checkPos);
- break;
- case 2:
- builder.setCleanDirectionRequirement(checkPos);
- break;
- case 3:
- builder.setCleanIntensityRequirement(checkPos);
- break;
- case 4:
- builder.setDuskCloseRequirement(checkPos);
- break;
- case 5:
- builder.setSuctionNozzlefleOpenRequirement(checkPos);
- break;
- case 6:
- builder.setSprayGunOpenRequirement(checkPos);
- break;
- case 7:
- builder.setSweepdiskSpeedRequirement(checkPos);
- break;
- }
- }
-
-
- public static List init() {
- List list = new ArrayList<>();
- List optionsF = new ArrayList<>();
- int tag = 0;
- String[] value = new String[3];
- value[0] = "0-No Req";
- value[1] = "1-Start";
- value[2] = "2-Stop";
- optionsF.add(new SpecialVehicleOption("清扫作业", tag++, value, 0));
- value = new String[6];
- value[0] = "0-No Req";
- value[1] = "1-Sweeping";
- value[2] = "2-Wash Sweeper";
- value[3] = "3-Pure Wash";
- value[4] = "4-Pure Draw";
- value[5] = "5-Close Clean";
- optionsF.add(new SpecialVehicleOption("清扫模式", tag++, value, 0));
- value = new String[5];
- value[0] = "0-No Req";
- value[1] = "1-Both";
- value[2] = "2-Left";
- value[3] = "3-Right";
- value[4] = "4-Close Side";
- optionsF.add(new SpecialVehicleOption("清扫方向", tag++, value, 0));
- value = new String[3];
- value[0] = "0-No Req";
- value[1] = "1-Stand";
- value[2] = "2-Strong";
- optionsF.add(new SpecialVehicleOption("作业强度", tag++, value, 0));
- value = new String[3];
- value[0] = "0-No Req";
- value[1] = "1-Close";
- value[2] = "2-Open";
- optionsF.add(new SpecialVehicleOption("降尘", tag++, value, 0));
- value = new String[3];
- value[0] = "0-No Req";
- value[1] = "1-Open";
- value[2] = "2-Close";
- optionsF.add(new SpecialVehicleOption("吸嘴挡板", tag++, value, 0));
- value = new String[3];
- value[0] = "0-No Req";
- value[1] = "1-Open";
- value[2] = "2-Close";
- optionsF.add(new SpecialVehicleOption("喷雾枪", tag++, value, 0));
- value = new String[3];
- value[0] = "0-No Req";
- value[1] = "1-Decelerate";
- value[2] = "2-Accelerate";
- optionsF.add(new SpecialVehicleOption("扫盘加速", tag, value, 0));
- SpecialVehicleBean beanF = new SpecialVehicleBean("福田清扫车", "福清", TAG.FTQSC, optionsF);
- SpecialVehicleBean beanK = new SpecialVehicleBean("开沃小巴", "开巴", TAG.KWXB, null);
- List optionsM1 = new ArrayList<>();
- tag = 0;
- value = new String[3];
- value[0] = "0-DEFAULT";
- value[1] = "1-开启空调";
- value[2] = "2-关闭空调";
- optionsM1.add(new SpecialVehicleOption("空调", tag++, value, 0));
- value = new String[4];
- value[0] = "0-DEFAULT";
- value[1] = "1-自动模式";
- value[2] = "2-制冷模式";
- value[3] = "3-通风模式";
- optionsM1.add(new SpecialVehicleOption("空调模式", tag++, value, 0));
- value = new String[4];
- value[0] = "0-DEFAULT";
- value[1] = "1-1档";
- value[2] = "2-2档";
- value[3] = "3-3档";
- optionsM1.add(new SpecialVehicleOption("空调档位", tag++, value, 0));
- value = new String[4];
- value[0] = "0-DEFAULT";
- value[1] = "16-16度";
- value[2] = "20-20度";
- value[3] = "26-26度";
- optionsM1.add(new SpecialVehicleOption("空调温度", tag++, value, 0));
- value = new String[3];
- value[0] = "0-DEFAULT";
- value[1] = "1-开启暖风";
- value[2] = "2-关闭暖风";
- optionsM1.add(new SpecialVehicleOption("暖风机", tag++, value, 0));
- value = new String[3];
- value[0] = "0-DEFAULT";
- value[1] = "1-1档";
- value[2] = "2-2档";
- optionsM1.add(new SpecialVehicleOption("暖风机档位", tag++, value, 0));
- value = new String[3];
- value[0] = "0-DEFAULT";
- value[1] = "1-开启";
- value[2] = "2-关闭";
- optionsM1.add(new SpecialVehicleOption("顶灯1", tag++, value, 0));
- value = new String[3];
- value[0] = "0-DEFAULT";
- value[1] = "1-开启";
- value[2] = "2-关闭";
- optionsM1.add(new SpecialVehicleOption("顶灯2", tag++, value, 0));
- value = new String[3];
- value[0] = "0-DEFAULT";
- value[1] = "1-开启";
- value[2] = "2-关闭";
- optionsM1.add(new SpecialVehicleOption("氛围灯", tag++, value, 0));
- value = new String[3];
- value[0] = "0-DEFAULT";
- value[1] = "1-打开";
- value[2] = "2-关闭";
- optionsM1.add(new SpecialVehicleOption("车门", tag++, value, 0));
- SpecialVehicleBean beanM1 = new SpecialVehicleBean("金旅M1", "M1", TAG.JLM1, optionsM1);
- list.add(beanF);
- list.add(beanK);
- list.add(beanM1);
- return list;
- }
-
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/SpecialVehicleOption.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/SpecialVehicleOption.java
deleted file mode 100644
index 26f2ec883a..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/SpecialVehicleOption.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.zhidao.adas.client.bean;
-
-public class SpecialVehicleOption {
- public final String name;
- public final int tag;
- public final String[] value;
- public int checkPos = 0;//选中的下标
- public int moreCheckPos = -1;//发送模式下多条模式时选中的下标
-
- public SpecialVehicleOption(String name, int tag, String[] value, int checkPos) {
- this.name = name;
- this.tag = tag;
- this.value = value;
- this.checkPos = checkPos;
- }
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/UpdateDataEvent.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/UpdateDataEvent.java
deleted file mode 100644
index 9bc49dac5f..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/UpdateDataEvent.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.zhidao.adas.client.bean;
-
-public class UpdateDataEvent {
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/log/ConnectStatusSave.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/log/ConnectStatusSave.java
deleted file mode 100644
index 03c4632db9..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/log/ConnectStatusSave.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package com.zhidao.adas.client.log;
-
-import android.os.Environment;
-import android.text.TextUtils;
-
-import com.zhidao.adas.client.utils.Constants;
-import com.zhidao.support.adas.high.common.ThreadPoolManager;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-import java.util.concurrent.Future;
-import java.util.concurrent.LinkedBlockingQueue;
-
-/**
- * 与服务器交互日志管理任务
- */
-public class ConnectStatusSave {
- private static final String TAG = ConnectStatusSave.class.getSimpleName();
- private static final String LOG_FILE_NAME = "ConnectStatus-%s.log";//文件名称
- private volatile static ConnectStatusSave INSTANCE;
- private static final long MAX_CAPACITY = 20 * 1024 * 1024L;//单文件最大存储容量 kb
- private final LinkedBlockingQueue