[sweeper运营&云控合并]refactor: SweeperOperate & SweeperCloud 相同的代码提取common, 类名、layout、包名等加上operate/cloud前缀区分;

This commit is contained in:
aibingbing
2023-10-18 19:35:49 +08:00
parent de55548d2f
commit a215ccc112
55 changed files with 211 additions and 2294 deletions

View File

@@ -9,8 +9,9 @@ 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.och.sweeper.cloud.fragment.SweeperCloudFragment;
import com.mogo.och.sweeper.common.constant.SweeperConst;
import com.mogo.och.sweeper.operate.fragment.SweeperFragment;
import com.mogo.och.sweeper.operate.fragment.SweeperOperateFragment;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -25,7 +26,7 @@ public class SweeperProvider implements IMogoOCH {
private static final String TAG = "SweeperProvider";
private SweeperFragment sweeperFragment;
private SweeperOperateFragment sweeperOperateFragment;
private int containerId;
private FragmentActivity activity;
@@ -34,26 +35,26 @@ public class SweeperProvider implements IMogoOCH {
}
private void showFragment() {
FragmentManager supportFragmentManager = activity.getSupportFragmentManager();
if (sweeperFragment == null) {
if (sweeperOperateFragment == null) {
CallerLogger.d(TAG, "准备add fragment======");
Fragment fragmentByTag = supportFragmentManager.findFragmentByTag(sweeperFragment.TAG);
if (fragmentByTag instanceof SweeperFragment) {
sweeperFragment = (SweeperFragment) fragmentByTag;
Fragment fragmentByTag = supportFragmentManager.findFragmentByTag(sweeperOperateFragment.TAG);
if (fragmentByTag instanceof SweeperCloudFragment) {
sweeperOperateFragment = (SweeperOperateFragment) fragmentByTag;
} else {
sweeperFragment = new SweeperFragment();
sweeperOperateFragment = new SweeperOperateFragment();
}
if(!sweeperFragment.isAdded()) {
supportFragmentManager.beginTransaction().add(containerId, sweeperFragment, sweeperFragment.TAG).commitAllowingStateLoss();
if(!sweeperOperateFragment.isAdded()) {
supportFragmentManager.beginTransaction().add(containerId, sweeperOperateFragment, sweeperOperateFragment.TAG).commitAllowingStateLoss();
}
return;
}
CallerLogger.d(TAG, "准备show fragment");
supportFragmentManager.beginTransaction().show(sweeperFragment).commitAllowingStateLoss();
supportFragmentManager.beginTransaction().show(sweeperOperateFragment).commitAllowingStateLoss();
}
private void hideFragment() {
if (sweeperFragment != null) {
if (sweeperOperateFragment != null) {
CallerLogger.d(TAG, "准备hide fragment");
activity.getSupportFragmentManager().beginTransaction().hide(sweeperFragment).commitAllowingStateLoss();
activity.getSupportFragmentManager().beginTransaction().hide(sweeperOperateFragment).commitAllowingStateLoss();
}
}

View File

@@ -44,11 +44,12 @@ import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil;
import com.mogo.och.sweeper.R;
import com.mogo.och.sweeper.common.bean.SweeperRoutePlanningUpdateReqBean;
import com.mogo.och.sweeper.common.callback.ISweeperTaskDataToFragmentCallback;
import com.mogo.och.sweeper.operate.callback.IWeltMapSwitchToSmallCallback;
import com.mogo.och.sweeper.common.callback.IWeltMapSwitchToSmallCallback;
import com.mogo.och.sweeper.common.database.bean.WeltDataBean;
import com.mogo.och.sweeper.cloud.util.AutopilotModeConfigManager;
import com.mogo.och.sweeper.cloud.util.SweeperCloudTaskUtils;
import com.mogo.och.sweeper.cloud.view.SweeperTrafficDataView;
import com.mogo.och.sweeper.cloud.view.SweeperCloudTrafficDataView;
import com.mogo.och.sweeper.common.fragment.WeltMapOverViewFragment;
import com.mogo.och.sweeper.common.view.WeltSmallMapView;
import com.zhjt.mogo.adas.data.AiCloudTask;
@@ -65,7 +66,7 @@ import mogo.telematics.pad.MessagePad;
*
* @author tongchenfei
*/
public abstract class BaseSweeperTabFragment<V extends IView, P extends Presenter<V>> extends MvpFragment<V, P> implements IMogoMapListener,
public abstract class BaseSweeperCloudTabFragment<V extends IView, P extends Presenter<V>> extends MvpFragment<V, P> implements IMogoMapListener,
IWeltMapSwitchToSmallCallback, View.OnTouchListener {
private static final String TAG = "BaseSweeperTabFragment";
@@ -82,7 +83,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
private MapBizView mapBizView;
private Group groupTestPanel;
//清扫车车辆基本信息 速度 档位 转向灯 红绿灯等
private SweeperTrafficDataView mTrafficDataView;
private SweeperCloudTrafficDataView mTrafficDataView;
//作业任务贴边数据展示图
private WeltSmallMapView mMapWeltView;
//任务作业全览图
@@ -368,7 +369,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
*
* @return
*/
public SweeperTrafficDataView getTrafficDataView() {
public SweeperCloudTrafficDataView getTrafficDataView() {
return mTrafficDataView;
}
@@ -464,8 +465,8 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
mWeltDataBeanList,
mSubTaskCoordinates,
mRouteList,
mProgress,
(SweeperFragment) this);
mProgress);
this.setTaskDataToFragmentCallback(mWeltMapOverViewFragment);
}
if (mWeltMapOverViewFragment.isHidden()) {
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)

View File

@@ -19,7 +19,7 @@ import com.mogo.och.common.module.voice.VoiceNotice.showNotice
import com.mogo.och.sweeper.R
import com.mogo.och.sweeper.common.constant.SweeperConst.Companion.TYPE_MARKER_SWEEPER_SUBTASK_START_END
import com.mogo.och.sweeper.common.database.MyDataBase
import com.mogo.och.sweeper.cloud.presenter.SweeperPresenter
import com.mogo.och.sweeper.cloud.presenter.SweeperCloudPresenter
import com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog
import com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudLoadingDialog
import com.mogo.och.sweeper.cloud.util.SweeperCloudTaskUtils
@@ -31,7 +31,7 @@ import com.mogo.och.sweeper.cloud.util.SweeperCloudTaskUtils.createSweeperTaskNo
import com.mogo.och.sweeper.cloud.util.SweeperCloudTaskUtils.createSweeperTaskResumeDialog
import com.mogo.och.sweeper.cloud.util.SweeperCloudTaskUtils.createSweeperTaskSuspendDialog
import com.mogo.och.sweeper.cloud.util.SweeperCloudTaskUtils.printMessage
import com.mogo.och.sweeper.cloud.view.SweeperCurrentTaskInfoView
import com.mogo.och.sweeper.cloud.view.SweeperCloudCurrentTaskInfoView
import com.zhjt.mogo.adas.data.AiCloudTask
import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable
import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon
@@ -50,7 +50,7 @@ import kotlinx.coroutines.launch
/**
* 清扫车主界面
*/
class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresenter?>() {
class SweeperCloudFragment : BaseSweeperCloudTabFragment<SweeperCloudFragment?, SweeperCloudPresenter?>() {
companion object {
const val TAG = "SweeperFragment"
@@ -80,8 +80,8 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
sweeper_cl_work_mode.setTrafficDataView(trafficDataView)
}
override fun createPresenter(): SweeperPresenter {
return SweeperPresenter(this)
override fun createPresenter(): SweeperCloudPresenter {
return SweeperCloudPresenter(this)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
@@ -693,7 +693,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
super.setTaskRouteList(routeList)
}
private fun getCurrentTaskView(): SweeperCurrentTaskInfoView = sweeper_current_task_view
private fun getCurrentTaskView(): SweeperCloudCurrentTaskInfoView = sweeper_current_task_view
fun handleSubTaskInfoDialog(taskId: String, subTaskId: String, isPop: Boolean) {
if (mTaskInfo == null) return

View File

@@ -1,7 +1,6 @@
package com.mogo.och.sweeper.cloud.model;
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_SWEEPER;
import static com.mogo.och.sweeper.cloud.util.SweeperCloudTaskUtils.printMessage;
import android.content.Context;
@@ -73,9 +72,9 @@ import system_master.SystemStatusInfo;
* <p>
* 清扫车任务管理
*/
public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IMoGoAutopilotStatusListener, IMoGoSweeperFutianCleanSystemListener {
private final String TAG = SweeperTaskModel.class.getSimpleName();
private static volatile SweeperTaskModel sInstance;
public class SweeperCloudTaskModel implements IMoGoSweeperFutianCloudTaskListener, IMoGoAutopilotStatusListener, IMoGoSweeperFutianCleanSystemListener {
private final String TAG = SweeperCloudTaskModel.class.getSimpleName();
private static volatile SweeperCloudTaskModel sInstance;
public double mLongitude = 0;
public double mLatitude = 0;
private Context mContext;
@@ -112,18 +111,18 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
//用于对应messageType和reqNo绑定在一起保证请求的reqNo和响应的reqNo一致
private HashMap<Integer, String> msgTypeAndReqNo = new HashMap<>();
public static SweeperTaskModel getInstance() {
public static SweeperCloudTaskModel getInstance() {
if (sInstance == null) {
synchronized (SweeperTaskModel.class) {
synchronized (SweeperCloudTaskModel.class) {
if (sInstance == null) {
sInstance = new SweeperTaskModel();
sInstance = new SweeperCloudTaskModel();
}
}
}
return sInstance;
}
private SweeperTaskModel() {
private SweeperCloudTaskModel() {
}

View File

@@ -15,8 +15,8 @@ import com.mogo.och.sweeper.cloud.callback.ISweeperCloudTaskCallback;
import com.mogo.och.sweeper.cloud.callback.ISweeperControllerStatusCallback;
import com.mogo.och.sweeper.common.callback.ISweeperTaskRouteCallback;
import com.mogo.och.sweeper.common.database.bean.WeltDataBean;
import com.mogo.och.sweeper.cloud.fragment.SweeperFragment;
import com.mogo.och.sweeper.cloud.model.SweeperTaskModel;
import com.mogo.och.sweeper.cloud.fragment.SweeperCloudFragment;
import com.mogo.och.sweeper.cloud.model.SweeperCloudTaskModel;
import com.zhjt.mogo.adas.data.AiCloudTask;
import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable;
import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon;
@@ -34,15 +34,15 @@ import chassis.ChassisStatesOuterClass;
*
* @author tongchenfei
*/
public class SweeperPresenter extends Presenter<SweeperFragment>
public class SweeperCloudPresenter extends Presenter<SweeperCloudFragment>
implements ISweeperControllerStatusCallback,
ISweeperCloudTaskCallback, ISweeperTaskRouteCallback {
private static final String TAG = "SweeperPresenter";
public SweeperPresenter(SweeperFragment view) {
public SweeperCloudPresenter(SweeperCloudFragment view) {
super(view);
SweeperTaskModel.getInstance().init();
SweeperCloudTaskModel.getInstance().init();
OCHAdasAbilityManager.getInstance().init(AbsMogoApplication.getApp());
}
@@ -55,18 +55,18 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
@Override
public void onDestroy(@NonNull LifecycleOwner owner) {
super.onDestroy(owner);
SweeperTaskModel.getInstance().release();
SweeperCloudTaskModel.getInstance().release();
releaseListener();
}
public void initModelListener() {
SweeperTaskModel.getInstance().setControllerStatusCallback(this);
SweeperTaskModel.getInstance().setSweeperTaskCallback(this);
SweeperCloudTaskModel.getInstance().setControllerStatusCallback(this);
SweeperCloudTaskModel.getInstance().setSweeperTaskCallback(this);
}
public void releaseListener() {
SweeperTaskModel.getInstance().setControllerStatusCallback(null);
SweeperTaskModel.getInstance().setSweeperTaskCallback(null);
SweeperCloudTaskModel.getInstance().setControllerStatusCallback(null);
SweeperCloudTaskModel.getInstance().setSweeperTaskCallback(null);
CallerSweeperFutianCleanSystemListenerManager.INSTANCE.removeListener(TAG);
}
@@ -94,28 +94,28 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
* @return
*/
public int getAutopilotState() {
return SweeperTaskModel.getInstance().getAutopilotState();
return SweeperCloudTaskModel.getInstance().getAutopilotState();
}
/**
* 清除路线缓存数据
*/
public void clearRouteList() {
SweeperTaskModel.getInstance().clearRouteList();
SweeperCloudTaskModel.getInstance().clearRouteList();
}
/**
* 设置当前子任务信息
*/
public void setSubtask(String subTaskId, SweeperTask.TaskModel subTaskType, int currentLineId) {
SweeperTaskModel.getInstance().setSubtask(subTaskId, subTaskType, currentLineId);
SweeperCloudTaskModel.getInstance().setSubtask(subTaskId, subTaskType, currentLineId);
}
/**
* 判断是否有任务数据
*/
public void isHasTaskInfo(boolean isHasTaskInfo) {
SweeperTaskModel.getInstance().isHasTaskInfo(isHasTaskInfo);
SweeperCloudTaskModel.getInstance().isHasTaskInfo(isHasTaskInfo);
}
/**
@@ -123,14 +123,14 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
* @param preLineId
*/
public void setPreLineId(int preLineId) {
SweeperTaskModel.getInstance().setPreLineId(preLineId);
SweeperCloudTaskModel.getInstance().setPreLineId(preLineId);
}
/**
* 获取当前正在执行的任务
*/
public void getCurrentTask() {
SweeperTaskModel.getInstance().getCurrentTask();
SweeperCloudTaskModel.getInstance().getCurrentTask();
}
/**
@@ -140,7 +140,7 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
* @param code
*/
public void sendSweeperStartTaskResp(String taskId, SweeperTask.StartTaskCode code) {
SweeperTaskModel.getInstance().sendSweeperStartTaskResp(taskId, code);
SweeperCloudTaskModel.getInstance().sendSweeperStartTaskResp(taskId, code);
}
/**
@@ -151,7 +151,7 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
* @param code
*/
public void sendSweeperTaskConfirmResp(String taskId, String subTaskId, SweeperTaskConfirm.TaskConfirmCode code) {
SweeperTaskModel.getInstance().sendSweeperTaskConfirmResp(taskId, subTaskId, code);
SweeperCloudTaskModel.getInstance().sendSweeperTaskConfirmResp(taskId, subTaskId, code);
}
/**
@@ -161,7 +161,7 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
* @param code
*/
public void sendSweeperStopTaskResp(String taskId, SweeperTaskStop.StopTaskCode code) {
SweeperTaskModel.getInstance().sendSweeperStopTaskResp(taskId, code);
SweeperCloudTaskModel.getInstance().sendSweeperStopTaskResp(taskId, code);
}
/**
@@ -172,7 +172,7 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
* @param lineId
*/
public void sendSweeperAutopilotBootable(String taskId, String subTaskId, long lineId) {
SweeperTaskModel.getInstance().sendSweeperAutopilotBootable(taskId, subTaskId, lineId);
SweeperCloudTaskModel.getInstance().sendSweeperAutopilotBootable(taskId, subTaskId, lineId);
}
/**
@@ -181,7 +181,7 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
* @param code
*/
public void sendSweeperSuspendResumeTaskResp(String taskId, SweeperTaskCloudSuspendResume.Code code) {
SweeperTaskModel.getInstance().sendSweeperSuspendResumeTaskResp(taskId, code);
SweeperCloudTaskModel.getInstance().sendSweeperSuspendResumeTaskResp(taskId, code);
}
@Override

View File

@@ -1,59 +0,0 @@
package com.mogo.och.sweeper.cloud.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.sweeper.R
import com.mogo.och.sweeper.common.constant.OperateStateEnum
import com.mogo.och.sweeper.cloud.ui.SweeperOperatePanelView
import com.mogo.och.sweeper.common.callback.ICleaningModeStateCallback
/**
* 清扫车面板浮窗
*/
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_cloud_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)
}
}

View File

@@ -1,149 +0,0 @@
package com.mogo.och.sweeper.cloud.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.sweeper.common.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<String, Object> 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.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<String, Object> 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);
}
}

View File

@@ -15,10 +15,7 @@ import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.common.module.utils.OCHThreadPoolManager
import com.mogo.och.common.module.voice.VoiceNotice
import com.mogo.och.sweeper.R
import com.mogo.och.sweeper.cloud.callback.SweeperCloudDialogClickListener
import com.mogo.och.sweeper.common.constant.SweeperConst
import com.mogo.och.sweeper.cloud.model.SweeperTaskModel
import com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog
import com.mogo.och.sweeper.cloud.model.SweeperCloudTaskModel
import com.zhjt.mogo.adas.data.AiCloudTask
import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable
import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon
@@ -43,7 +40,7 @@ object SweeperCloudTaskUtils {
// UiThreadHandler.getsUiHandler().postDelayed({
// mockSendCloudTaskInfo(MessageType.PadSendGetTaskReq)
// },1000)
com.mogo.och.sweeper.cloud.model.SweeperTaskModel.getInstance().getCurrentTask()
SweeperCloudTaskModel.getInstance().getCurrentTask()
}
/**
@@ -150,7 +147,7 @@ object SweeperCloudTaskUtils {
// subBuilder3.lineId = 126
// subBuilder3.lineName = "测试路线3"
// builder.addSubList(subBuilder3.build())
com.mogo.och.sweeper.cloud.model.SweeperTaskModel.getInstance().onSweeperFutianCloudTask(
SweeperCloudTaskModel.getInstance().onSweeperFutianCloudTask(
messageType,
"${System.currentTimeMillis()}",
System.currentTimeMillis(),
@@ -171,7 +168,7 @@ object SweeperCloudTaskUtils {
builder.sn = getDriverSn()
builder.taskId = "10"
builder.subTaskId = "1"
com.mogo.och.sweeper.cloud.model.SweeperTaskModel.getInstance().onSweeperFutianCloudTaskConfirm(
SweeperCloudTaskModel.getInstance().onSweeperFutianCloudTaskConfirm(
AiCloudTask.MessageType.CloudPushTaskConfirm, "${System.currentTimeMillis()}",
System.currentTimeMillis(), builder.build()
)
@@ -187,7 +184,7 @@ object SweeperCloudTaskUtils {
builder.taskId = "10"
builder.subTaskId = "1"
builder.taskStatus = SweeperCommon.TaskStatus.RUNNING
com.mogo.och.sweeper.cloud.model.SweeperTaskModel.getInstance().onSweeperFutianCloudTaskStatus(
SweeperCloudTaskModel.getInstance().onSweeperFutianCloudTaskStatus(
AiCloudTask.MessageType.CloudPushTaskStatus, "${System.currentTimeMillis()}",
System.currentTimeMillis(), builder.build()
)
@@ -202,7 +199,7 @@ object SweeperCloudTaskUtils {
builder.sn = getDriverSn()
builder.taskId = "10"
builder.type = SweeperTaskStop.StopTaskType.ADVANCE
com.mogo.och.sweeper.cloud.model.SweeperTaskModel.getInstance().onSweeperFutianCloudTaskStop(
SweeperCloudTaskModel.getInstance().onSweeperFutianCloudTaskStop(
AiCloudTask.MessageType.CloudPushTaskStop, "${System.currentTimeMillis()}",
System.currentTimeMillis(), builder.build()
)
@@ -218,7 +215,7 @@ object SweeperCloudTaskUtils {
builder.taskId = "10"
builder.taskStatus = SweeperCommon.TaskStatus.FINISHED
builder.systemTime = System.currentTimeMillis()
com.mogo.och.sweeper.cloud.model.SweeperTaskModel.getInstance().onSweeperFutianCloudBigTaskStatus(
SweeperCloudTaskModel.getInstance().onSweeperFutianCloudBigTaskStatus(
AiCloudTask.MessageType.CloudPushBigTaskStatus, "${System.currentTimeMillis()}",
System.currentTimeMillis(), builder.build()
)
@@ -235,7 +232,7 @@ object SweeperCloudTaskUtils {
builder.subTaskId = "1"
builder.code = SweeperCommon.Code.SUCCEED
UiThreadHandler.getsUiHandler().postDelayed({
com.mogo.och.sweeper.cloud.model.SweeperTaskModel.getInstance().onSweeperFutianCloudBootable(
SweeperCloudTaskModel.getInstance().onSweeperFutianCloudBootable(
AiCloudTask.MessageType.PadSendBootable, "${System.currentTimeMillis()}",
System.currentTimeMillis(), builder.build()
)

View File

@@ -26,7 +26,7 @@ import kotlinx.android.synthetic.main.sweeper_cloud_current_task_info.view.tvTas
/**
* 清扫车当前任务信息展示
*/
class SweeperCurrentTaskInfoView : ConstraintLayout {
class SweeperCloudCurrentTaskInfoView : ConstraintLayout {
private val TAG: String = "SweeperCurrentTaskInfoView"
//当前任务操作菜单
@@ -116,7 +116,7 @@ class SweeperCurrentTaskInfoView : ConstraintLayout {
) {
// 更新 任务名称、任务时间
taskInfo?.apply {
this@SweeperCurrentTaskInfoView.listTask = subListList
this@SweeperCloudCurrentTaskInfoView.listTask = subListList
tvTaskName.text = taskName
val calendarStart = DateTimeUtil.formatLongToCalendar(taskStartTime)
val calendarEnd = DateTimeUtil.formatLongToCalendar(taskEndTime)

View File

@@ -25,7 +25,7 @@ import kotlin.math.roundToInt
/**
* 车辆基本信息方向盘下方的档位 转向灯 限速 速度 电量 水量
*/
class SweeperTrafficDataView : ConstraintLayout,
class SweeperCloudTrafficDataView : ConstraintLayout,
IMoGoBatteryManagementSystemListener,
IMoGoChassisLamplightListener,
IMoGoChassisGearStateListener,

View File

@@ -12,18 +12,24 @@ import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.och.sweeper.R
import com.mogo.och.sweeper.common.constant.OperateStateEnum
import com.mogo.och.sweeper.common.util.SweeperFutianCmdUtil
import com.mogo.och.sweeper.common.view.SweeperOperatePanelPopWindow
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.TaskModel
import kotlinx.android.synthetic.main.sweeper_work_mode.view.*
import kotlinx.android.synthetic.main.sweeper_work_mode.view.groupWorkModelPanel
import kotlinx.android.synthetic.main.sweeper_work_mode.view.ivOpenOperatePanel
import kotlinx.android.synthetic.main.sweeper_work_mode.view.tvCleaningDirection
import kotlinx.android.synthetic.main.sweeper_work_mode.view.tvCleaningIntensity
import kotlinx.android.synthetic.main.sweeper_work_mode.view.tvCleaningMode
import kotlinx.android.synthetic.main.sweeper_work_mode.view.tvNoDataDesc
/**
* 清扫车模式信息展示
*/
class SweeperWorkModeView : ConstraintLayout {
class SweeperCloudWorkModeView : ConstraintLayout {
private var isSelectPureSweepMode: Boolean = false
private val TAG = "SweeperWorkModeView"
//清扫模式选择面板
private var mOperatePanelPopWindow: com.mogo.och.sweeper.cloud.ui.popwindow.SweeperOperatePanelPopWindow? = null
private var mOperatePanelPopWindow: SweeperOperatePanelPopWindow? = null
private var operateState: OperateStateEnum=OperateStateEnum.SYNCING_STATUS
@@ -37,14 +43,14 @@ class SweeperWorkModeView : ConstraintLayout {
private fun initView(context: Context) {
LayoutInflater.from(context).inflate(R.layout.sweeper_work_mode, this)
mOperatePanelPopWindow = com.mogo.och.sweeper.cloud.ui.popwindow.SweeperOperatePanelPopWindow(context)
mOperatePanelPopWindow = SweeperOperatePanelPopWindow(context)
setShowOrHideCleanSystemState(OperateStateEnum.SYNCING_STATUS,null)
}
/**
* 设置view
*/
fun setTrafficDataView(trafficDataView: com.mogo.och.sweeper.cloud.view.SweeperTrafficDataView){
fun setTrafficDataView(trafficDataView: com.mogo.och.sweeper.cloud.view.SweeperCloudTrafficDataView){
//清扫模式选择面板打开关闭处理
ivOpenOperatePanel.setOnClickListener {
if (mOperatePanelPopWindow?.isShowing != true) {

View File

@@ -1,148 +0,0 @@
package com.mogo.och.sweeper.cloud.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.sweeper.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
}
}
}
}
}

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.operate.callback
package com.mogo.och.sweeper.common.callback
interface IWeltMapSwitchToSmallCallback {
fun onWeltMapSwitchToSmall()

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.cloud.fragment;
package com.mogo.och.sweeper.common.fragment;
import android.os.Bundle;
import android.view.LayoutInflater;

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.cloud.fragment;
package com.mogo.och.sweeper.common.fragment;
import android.os.Bundle;
import android.view.View;

View File

@@ -1,12 +1,12 @@
package com.mogo.och.sweeper.cloud.fragment
package com.mogo.och.sweeper.common.fragment
import android.os.Bundle
import com.amap.api.maps.model.LatLng
import com.mogo.commons.mvp.BaseFragment
import com.mogo.och.sweeper.R
import com.mogo.och.sweeper.common.callback.ISweeperTaskDataToFragmentCallback
import com.mogo.och.sweeper.common.callback.IWeltMapSwitchToSmallCallback
import com.mogo.och.sweeper.common.database.bean.WeltDataBean
import com.mogo.och.sweeper.operate.callback.IWeltMapSwitchToSmallCallback
import kotlinx.android.synthetic.main.fragment_welt_map_overview.*
import kotlinx.android.synthetic.main.sweeper_welt_map_overview.*
@@ -15,7 +15,6 @@ 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"
@@ -27,10 +26,6 @@ class WeltMapOverViewFragment : BaseFragment(), ISweeperTaskDataToFragmentCallba
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)
@@ -71,8 +66,7 @@ class WeltMapOverViewFragment : BaseFragment(), ISweeperTaskDataToFragmentCallba
weltDataList: ArrayList<WeltDataBean>?,
latLngs: ArrayList<LatLng>?,
routeList: ArrayList<com.mogo.och.sweeper.common.bean.SweeperRoutePlanningUpdateReqBean.Result>?,
progress:String?,
sweeperFragment: SweeperFragment
progress:String?
): WeltMapOverViewFragment {
val args = Bundle()
args.putSerializable("weltDataList", weltDataList)
@@ -82,7 +76,6 @@ class WeltMapOverViewFragment : BaseFragment(), ISweeperTaskDataToFragmentCallba
args.putString("progress", progress)
val fragment = WeltMapOverViewFragment()
fragment.setWeltMapSwitchToSmallCallBack(mIWeltMapSwitchToSmallCallBack)
fragment.setSweeperFragment(sweeperFragment)
fragment.arguments = args
return fragment
}

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.operate.util;
package com.mogo.och.sweeper.common.util;
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_SWEEPER;

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.cloud.ui.dialog
package com.mogo.och.sweeper.common.view
import android.content.Context
import android.widget.TextView

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.cloud.ui.dialog
package com.mogo.och.sweeper.common.view
import android.content.Context
import android.widget.TextView

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.operate.ui.popwindow
package com.mogo.och.sweeper.common.view
import android.content.Context
import android.graphics.Color
@@ -10,7 +10,7 @@ import chassis.ChassisStatesOuterClass
import com.mogo.och.sweeper.R
import com.mogo.och.sweeper.common.callback.ICleaningModeStateCallback
import com.mogo.och.sweeper.common.constant.OperateStateEnum
import com.mogo.och.sweeper.operate.ui.SweeperOperatePanelView
import com.mogo.och.sweeper.common.view.SweeperOperatePanelView
/**
* 清扫车面板浮窗

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.cloud.ui;
package com.mogo.och.sweeper.common.view;
import android.animation.ObjectAnimator;
import android.content.Context;

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.operate.view
package com.mogo.och.sweeper.common.view
import android.content.Context
import android.util.AttributeSet

View File

@@ -12,7 +12,7 @@ import java.util.ArrayList
* @author: wangmingjun
* @date: 2021/10/22
*/
interface ISweeperTaskCallback {
interface ISweeperOperateTaskCallback {
/**
* 获取主任务列表
*/

View File

@@ -1,58 +0,0 @@
package com.mogo.och.sweeper.operate.event;
import com.amap.api.maps.model.LatLng;
import com.mogo.och.sweeper.common.database.bean.WeltDataBean;
import java.util.ArrayList;
public class WeltDataEvent{
private int type; //1.添加起点和终点 2.实时添加贴边数据 3.清除数据 4.任务进度 5:任务轨迹数据
private ArrayList<WeltDataBean> weltDataBeanList;
private ArrayList<LatLng> markers;
private String distance;//贴边数据
private String progress;//任务进度
public WeltDataEvent(int type) {
this.type = type;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public ArrayList<WeltDataBean> getWeltDataBeanList() {
return weltDataBeanList;
}
public void setWeltDataBeanList(ArrayList<WeltDataBean> weltDataBeanList) {
this.weltDataBeanList = weltDataBeanList;
}
public ArrayList<LatLng> getMarkers() {
return markers;
}
public void setMarkers(ArrayList<LatLng> markers) {
this.markers = markers;
}
public String getDistance() {
return distance;
}
public void setDistance(String distance) {
this.distance = distance;
}
public String getProgress() {
return progress;
}
public void setProgress(String progress) {
this.progress = progress;
}
}

View File

@@ -31,9 +31,11 @@ import com.mogo.och.common.module.map.AmapNaviToDestinationModel;
import com.mogo.och.sweeper.R;
import com.mogo.och.sweeper.common.bean.SweeperRoutePlanningUpdateReqBean;
import com.mogo.och.sweeper.common.callback.ISweeperTaskDataToFragmentCallback;
import com.mogo.och.sweeper.operate.callback.IWeltMapSwitchToSmallCallback;
import com.mogo.och.sweeper.common.callback.IWeltMapSwitchToSmallCallback;
import com.mogo.och.sweeper.common.database.bean.WeltDataBean;
import com.mogo.och.sweeper.operate.view.SweeperTrafficDataView;
import com.mogo.och.sweeper.common.fragment.SweeperAmapNaviFragment;
import com.mogo.och.sweeper.common.fragment.WeltMapOverViewFragment;
import com.mogo.och.sweeper.operate.view.SweeperOperateTrafficDataView;
import com.mogo.och.sweeper.common.view.WeltSmallMapView;
import java.math.BigDecimal;
@@ -52,7 +54,7 @@ import androidx.fragment.app.FragmentTransaction;
*
* @author tongchenfei
*/
public abstract class BaseSweeperTabFragment<V extends IView, P extends Presenter<V>> extends MvpFragment<V, P> implements IMogoMapListener,
public abstract class BaseSweeperOperateTabFragment<V extends IView, P extends Presenter<V>> extends MvpFragment<V, P> implements IMogoMapListener,
View.OnClickListener, IWeltMapSwitchToSmallCallback, View.OnTouchListener {
private static final String TAG = "BaseSweeperTabFragment";
@@ -69,7 +71,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
private MapBizView mapBizView;
private Group groupTestPanel;
//清扫车车辆基本信息 速度 档位 转向灯 红绿灯等
private SweeperTrafficDataView mTrafficDataView;
private SweeperOperateTrafficDataView mTrafficDataView;
//人工驾驶地图View组控制
private Group mGroupNaviPanel;
//人工驾驶地图Fragment
@@ -282,7 +284,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
/**
* 车辆基本信息View
*/
public SweeperTrafficDataView getTrafficDataView() {
public SweeperOperateTrafficDataView getTrafficDataView() {
return mTrafficDataView;
}
@@ -362,7 +364,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
if (isShow) {
mGroupNaviPanel.setVisibility(View.VISIBLE);
if (mOchAmapNaviFragment == null) {
mOchAmapNaviFragment=SweeperAmapNaviFragment.newInstance();
mOchAmapNaviFragment= SweeperAmapNaviFragment.newInstance();
}
if (mOchAmapNaviFragment.isHidden()) {
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
@@ -414,8 +416,8 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
mWeltDataBeanList,
mSubTaskCoordinates,
mRouteList,
mProgress,
(SweeperFragment) this);
mProgress);
this.setTaskDataToFragmentCallback(mWeltMapOverViewFragment);
}
if (mWeltMapOverViewFragment.isHidden()) {
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)

View File

@@ -1,50 +0,0 @@
package com.mogo.och.sweeper.operate.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;
}
}

View File

@@ -1,230 +0,0 @@
package com.mogo.och.sweeper.operate.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.sweeper.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.d(M_TAXI + "wlx", "导航页面加载成功");
CallerLogger.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;
}
/**
* 车道信息说明:
* <p>
* 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 = {
"直行"
, "左转"
, "左转或直行"
, "右转"
, "右转或这行"
, "左掉头"
, "左转或者右转"
, " 左转或右转或直行"
, "右转掉头"
, "直行或左转掉头"
, "直行或右转掉头"
, "左转或左掉头"
, "右转或右掉头"
, "直行并且车道扩展"
, "左转+左掉头+扩展"
, "不可以选择"
, "直行+左转+左掉头"
, "右转+左掉头"
, "左转+右转+左掉头"
, "直行+右转+左掉头"
, "左转+右掉头"
, "公交车道"
, "空车道"
, "可变车道"
};
}

View File

@@ -17,7 +17,6 @@ import com.mogo.eagle.core.utilcode.util.ClickUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil
import com.mogo.och.sweeper.R
import com.mogo.och.sweeper.operate.bean.*
import com.mogo.och.sweeper.operate.constant.SubTaskTypeEnum
import com.mogo.och.sweeper.operate.constant.TaskStatusEnum
import com.mogo.och.sweeper.common.database.MyDataBase
@@ -25,14 +24,14 @@ import com.mogo.och.sweeper.operate.bean.SubInfo
import com.mogo.och.sweeper.operate.bean.SweeperMainTaskBean
import com.mogo.och.sweeper.common.bean.SweeperRoutePlanningUpdateReqBean
import com.mogo.och.sweeper.operate.bean.SweeperSubTaskBean
import com.mogo.och.sweeper.operate.presenter.SweeperPresenter
import com.mogo.och.sweeper.operate.presenter.SweeperOperatePresenter
import com.mogo.och.sweeper.operate.ui.adapter.TaskListAdapter
import com.mogo.och.sweeper.operate.ui.dialog.SweeperManualDrivingDialog
import com.mogo.och.sweeper.operate.ui.dialog.SweeperNoTitleCommonDialog
import com.mogo.och.sweeper.common.view.SweeperManualDrivingDialog
import com.mogo.och.sweeper.common.view.SweeperNoTitleCommonDialog
import com.mogo.och.sweeper.operate.ui.popwindow.MenuPopWindow
import kotlinx.android.synthetic.main.fragment_och_sweeper.*
import kotlinx.android.synthetic.main.sweeper_current_task_info.view.*
import kotlinx.android.synthetic.main.sweeper_no_data_common_view.*
import kotlinx.android.synthetic.main.fragment_och_sweeper_operate.*
import kotlinx.android.synthetic.main.sweeper_operate_current_task_info.view.*
import kotlinx.android.synthetic.main.sweeper_operate_no_data_common_view.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlin.math.roundToInt
@@ -40,7 +39,7 @@ import kotlin.math.roundToInt
/**
* 清扫车主界面
*/
class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresenter?>(), MenuPopWindow.OnMenuItemOnClickListener {
class SweeperOperateFragment : BaseSweeperOperateTabFragment<SweeperOperateFragment?, SweeperOperatePresenter?>(), MenuPopWindow.OnMenuItemOnClickListener {
companion object {
const val TAG = "SweeperFragment"
@@ -84,8 +83,8 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
}
}
override fun createPresenter(): SweeperPresenter {
return SweeperPresenter(this)
override fun createPresenter(): SweeperOperatePresenter {
return SweeperOperatePresenter(this)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
@@ -94,7 +93,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
}
override fun getTaskListPanelViewId(): Int {
return R.layout.fragment_och_sweeper
return R.layout.fragment_och_sweeper_operate
}
/**
@@ -183,7 +182,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
mAdapter?.selectPosition(position)
tvTaskConfirm.isSelected = true
tvTaskConfirm.setTextColor(Color.parseColor("#FFFFFFFF"))
this@SweeperFragment.mMainTask = mainTask
this@SweeperOperateFragment.mMainTask = mainTask
}
}

View File

@@ -1,129 +0,0 @@
package com.mogo.och.sweeper.operate.fragment
import android.os.Bundle
import com.amap.api.maps.model.LatLng
import com.mogo.commons.mvp.BaseFragment
import com.mogo.och.sweeper.R
import com.mogo.och.sweeper.common.bean.SweeperRoutePlanningUpdateReqBean
import com.mogo.och.sweeper.common.callback.ISweeperTaskDataToFragmentCallback
import com.mogo.och.sweeper.operate.callback.IWeltMapSwitchToSmallCallback
import com.mogo.och.sweeper.common.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<LatLng>
val latLng = bundle.getParcelable<LatLng>("subTaskEndCoordinates")
val weltDataList = bundle.getSerializable("weltDataList") as? ArrayList<WeltDataBean>
val routeList = bundle.getSerializable("routeList") as? ArrayList<SweeperRoutePlanningUpdateReqBean.Result>
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<WeltDataBean>?,
latLngs: ArrayList<LatLng>?,
routeList: ArrayList<SweeperRoutePlanningUpdateReqBean.Result>?,
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<LatLng>) {
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<SweeperRoutePlanningUpdateReqBean.Result>) {
weltMapOverView?.setRouteList(routeList)
}
override fun setWeltData(weltDatas: java.util.ArrayList<WeltDataBean>?, distance: String) {
weltMapOverView?.setWeltData(weltDatas,true,distance)
}
}

View File

@@ -48,12 +48,12 @@ import com.mogo.och.sweeper.operate.bean.SweeperSubTaskBean;
import com.mogo.och.sweeper.operate.bean.SweeperSubTaskDetailBean;
import com.mogo.och.sweeper.common.callback.ISweeperADASStatusCallback;
import com.mogo.och.sweeper.operate.callback.ISweeperControllerStatusCallback;
import com.mogo.och.sweeper.operate.callback.ISweeperTaskCallback;
import com.mogo.och.sweeper.operate.callback.ISweeperOperateTaskCallback;
import com.mogo.och.sweeper.operate.constant.SubTaskTypeEnum;
import com.mogo.och.sweeper.common.constant.SweeperConst;
import com.mogo.och.sweeper.operate.constant.TaskStatusEnum;
import com.mogo.och.sweeper.operate.net.SweeperServiceManager;
import com.mogo.och.sweeper.operate.util.SweeperAnalyticsManager;
import com.mogo.och.sweeper.operate.net.SweeperOperateServiceManager;
import com.mogo.och.sweeper.common.util.SweeperAnalyticsManager;
import com.mogo.och.sweeper.operate.util.SweeperTrajectoryManager;
import org.jetbrains.annotations.NotNull;
@@ -73,9 +73,9 @@ import mogo.telematics.pad.MessagePad;
* <p>
* 清扫车任务管理
*/
public class SweeperTaskModel {
private final String TAG = SweeperTaskModel.class.getSimpleName();
private static volatile SweeperTaskModel sInstance;
public class SweeperOperateTaskModel {
private final String TAG = SweeperOperateTaskModel.class.getSimpleName();
private static volatile SweeperOperateTaskModel sInstance;
public double mLongitude = 0;
public double mLatitude = 0;
private Context mContext;
@@ -83,7 +83,7 @@ public class SweeperTaskModel {
private static final int VEHICLE_TYPE = 10;
private ISweeperControllerStatusCallback mControllerStatusCallback; //Model->PresenterVR mode等
private ISweeperADASStatusCallback mADASStatusCallback;
private ISweeperTaskCallback mSweeperTaskCallback;
private ISweeperOperateTaskCallback mSweeperTaskCallback;
ArrayList<SweeperRoutePlanningUpdateReqBean.Result> points = new ArrayList<>();//全路径信息
//当前子任务详情信息包括轨迹文件信息
private SweeperSubTaskDetailBean mCurrentSubTaskDetail;
@@ -105,18 +105,18 @@ public class SweeperTaskModel {
//自动驾驶状态
private int mAutopilotState = IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE;
public static SweeperTaskModel getInstance() {
public static SweeperOperateTaskModel getInstance() {
if (sInstance == null) {
synchronized (SweeperTaskModel.class) {
synchronized (SweeperOperateTaskModel.class) {
if (sInstance == null) {
sInstance = new SweeperTaskModel();
sInstance = new SweeperOperateTaskModel();
}
}
}
return sInstance;
}
private SweeperTaskModel() {
private SweeperOperateTaskModel() {
}
@@ -183,7 +183,7 @@ public class SweeperTaskModel {
this.mControllerStatusCallback = callback;
}
public void setSweeperTaskCallback(ISweeperTaskCallback callback) {
public void setSweeperTaskCallback(ISweeperOperateTaskCallback callback) {
this.mSweeperTaskCallback = callback;
}
@@ -538,7 +538,7 @@ public class SweeperTaskModel {
* 获取当前正在执行的任务
*/
public void getCurrentTask() {
SweeperServiceManager.getCurrentTask(mContext, new OchCommonServiceCallback<BaseResponse<SweeperSubTaskBean>>() {
SweeperOperateServiceManager.getCurrentTask(mContext, new OchCommonServiceCallback<BaseResponse<SweeperSubTaskBean>>() {
@Override
public void onSuccess(BaseResponse<SweeperSubTaskBean> data) {
CallerLogger.d(M_SWEEPER + TAG, "getCurrentTask" + GsonUtil.jsonFromObject(data));
@@ -578,7 +578,7 @@ public class SweeperTaskModel {
* 获取主任务列表
*/
public void getMainTaskList(boolean refresh) {
SweeperServiceManager.getMainTaskList(mContext, new OchCommonServiceCallback<BaseResponse<List<SweeperMainTaskBean>>>() {
SweeperOperateServiceManager.getMainTaskList(mContext, new OchCommonServiceCallback<BaseResponse<List<SweeperMainTaskBean>>>() {
@Override
public void onSuccess(BaseResponse<List<SweeperMainTaskBean>> data) {
CallerLogger.d(M_SWEEPER + TAG, "getMainTaskList" + GsonUtil.jsonFromObject(data));
@@ -614,7 +614,7 @@ public class SweeperTaskModel {
* 获取子任务列表
*/
public void getSubTaskList(int taskId, SweeperSubTaskBean sweeperSubTaskBean) {
SweeperServiceManager.getSubTaskList(taskId, mContext, new OchCommonServiceCallback<BaseResponse<List<SubInfo>>>() {
SweeperOperateServiceManager.getSubTaskList(taskId, mContext, new OchCommonServiceCallback<BaseResponse<List<SubInfo>>>() {
@Override
public void onSuccess(BaseResponse<List<SubInfo>> data) {
CallerLogger.d(M_SWEEPER + TAG, "getSubTaskList" + GsonUtil.jsonFromObject(data));
@@ -655,7 +655,7 @@ public class SweeperTaskModel {
* 获取子任务详情包括轨迹文件信息
*/
public void getSubTaskDetail(boolean isFirst, boolean isEnd, int subTaskId, SubTaskTypeEnum subTaskType, boolean isStartSubtask) {
SweeperServiceManager.getSubTaskDetail(subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<SweeperSubTaskDetailBean>>() {
SweeperOperateServiceManager.getSubTaskDetail(subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<SweeperSubTaskDetailBean>>() {
@Override
public void onSuccess(BaseResponse<SweeperSubTaskDetailBean> data) {
CallerLogger.d(M_SWEEPER + TAG, "getSubTaskDetail" + GsonUtil.jsonFromObject(data));
@@ -714,7 +714,7 @@ public class SweeperTaskModel {
* 子任务开始上报
*/
public void subTaskStart(boolean isFirst, boolean isEnd, int subTaskId, SubTaskTypeEnum subTaskType) {
SweeperServiceManager.subTaskStart(isFirst, isEnd, subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
SweeperOperateServiceManager.subTaskStart(isFirst, isEnd, subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
@Override
public void onSuccess(BaseResponse<Boolean> data) {
CallerLogger.d(M_SWEEPER + TAG, "subTaskStart" + GsonUtil.jsonFromObject(data));
@@ -725,7 +725,7 @@ public class SweeperTaskModel {
mSweeperTaskCallback.updateSubTaskStatus(TaskStatusEnum.START_SUBTASK, false);
if (subTaskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE) {//如果是自动驾驶子任务子开启自驾
if (FunctionBuildConfig.isDemoMode) {//美化模式开启时
SweeperTaskModel.getInstance().startBeautificationMode();
SweeperOperateTaskModel.getInstance().startBeautificationMode();
}
//ÏstartAutopilot(false);
} else {
@@ -764,7 +764,7 @@ public class SweeperTaskModel {
* 子任务结束上报
*/
public void subTaskEnd(boolean isFirst, boolean isEnd, int subTaskId) {
SweeperServiceManager.subTaskEnd(isFirst, isEnd, subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
SweeperOperateServiceManager.subTaskEnd(isFirst, isEnd, subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
@Override
public void onSuccess(BaseResponse<Boolean> data) {
CallerLogger.d(M_SWEEPER + TAG, "subTaskEnd" +
@@ -777,7 +777,7 @@ public class SweeperTaskModel {
}
if (isEnd) {
if (FunctionBuildConfig.isDemoMode) {//美化模式开启时
SweeperTaskModel.getInstance().closeBeautificationMode();
SweeperOperateTaskModel.getInstance().closeBeautificationMode();
}
clearAutopilotControlParameters();
//结束自动驾驶
@@ -815,7 +815,7 @@ public class SweeperTaskModel {
* 子任务跳过上报
*/
public void subTaskSkip(boolean isFirst, boolean isEnd, int subTaskId) {
SweeperServiceManager.subTaskSkip(isFirst, isEnd, subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
SweeperOperateServiceManager.subTaskSkip(isFirst, isEnd, subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
@Override
public void onSuccess(BaseResponse<Boolean> data) {
CallerLogger.d(M_SWEEPER + TAG, "subTaskSkip" +
@@ -856,7 +856,7 @@ public class SweeperTaskModel {
* 主任务重置
*/
public void mainTaskReset(int taskId) {
SweeperServiceManager.mainTaskReset(taskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
SweeperOperateServiceManager.mainTaskReset(taskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
@Override
public void onSuccess(BaseResponse<Boolean> data) {
CallerLogger.d(M_SWEEPER + TAG, "mainTaskReset" + GsonUtil.jsonFromObject(data));

View File

@@ -21,7 +21,7 @@ import retrofit2.http.QueryMap;
/**
* 清扫车相关接口
*/
public interface ISweeperApiService {
public interface ISweeperOperateApiService {
/**
* 获取当前正在执行的任务
* @param appId

View File

@@ -10,7 +10,7 @@ import com.mogo.och.common.module.biz.constant.OchCommonConst
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
import com.mogo.och.common.module.biz.network.OchCommonSubscribeImpl
import com.mogo.och.common.module.biz.network.interceptor.transformTry
import com.mogo.och.sweeper.operate.model.SweeperTaskModel
import com.mogo.och.sweeper.operate.model.SweeperOperateTaskModel
import com.mogo.och.sweeper.operate.bean.BaseResponse
import com.mogo.och.sweeper.operate.bean.SubInfo
import com.mogo.och.sweeper.operate.bean.SubStartRequest
@@ -18,10 +18,10 @@ import com.mogo.och.sweeper.operate.bean.SweeperMainTaskBean
import com.mogo.och.sweeper.operate.bean.SweeperSubTaskBean
import com.mogo.och.sweeper.operate.bean.SweeperSubTaskDetailBean
object SweeperServiceManager {
private val TAG = SweeperTaskModel::class.java.simpleName
private val mService: ISweeperApiService = MoGoRetrofitFactory.getInstance(OchCommonConst.getSweeperUrl()).create(
ISweeperApiService::class.java
object SweeperOperateServiceManager {
private val TAG = SweeperOperateTaskModel::class.java.simpleName
private val mService: ISweeperOperateApiService = MoGoRetrofitFactory.getInstance(OchCommonConst.getSweeperUrl()).create(
ISweeperOperateApiService::class.java
)
/**

View File

@@ -29,15 +29,15 @@ import com.mogo.och.sweeper.operate.bean.SweeperSubTaskBean;
import com.mogo.och.sweeper.operate.bean.SweeperSubTaskDetailBean;
import com.mogo.och.sweeper.common.callback.ISweeperADASStatusCallback;
import com.mogo.och.sweeper.operate.callback.ISweeperControllerStatusCallback;
import com.mogo.och.sweeper.operate.callback.ISweeperTaskCallback;
import com.mogo.och.sweeper.operate.callback.ISweeperOperateTaskCallback;
import com.mogo.och.sweeper.common.callback.ISweeperTaskRouteCallback;
import com.mogo.och.sweeper.operate.constant.SubTaskTypeEnum;
import com.mogo.och.sweeper.common.constant.SweeperConst;
import com.mogo.och.sweeper.operate.constant.TaskStatusEnum;
import com.mogo.och.sweeper.common.database.MyDataBase;
import com.mogo.och.sweeper.common.database.bean.WeltDataBean;
import com.mogo.och.sweeper.operate.fragment.SweeperFragment;
import com.mogo.och.sweeper.operate.model.SweeperTaskModel;
import com.mogo.och.sweeper.operate.fragment.SweeperOperateFragment;
import com.mogo.och.sweeper.operate.model.SweeperOperateTaskModel;
import com.mogo.och.sweeper.common.util.SweeperFutianCmdUtil;
import com.mogo.och.sweeper.operate.util.SweeperTrajectoryManager;
@@ -60,9 +60,9 @@ import system_master.SystemStatusInfo;
*
* @author tongchenfei
*/
public class SweeperPresenter extends Presenter<SweeperFragment>
public class SweeperOperatePresenter extends Presenter<SweeperOperateFragment>
implements IMoGoAutopilotStatusListener, ISweeperControllerStatusCallback, ISweeperADASStatusCallback,
IMoGoSweeperFutianCleanSystemListener, ISweeperTaskCallback, ISweeperTaskRouteCallback {
IMoGoSweeperFutianCleanSystemListener, ISweeperOperateTaskCallback, ISweeperTaskRouteCallback {
private static final String TAG = "SweeperPresenter";
//当前子任务id
@@ -80,13 +80,13 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
private String longitude;//经度
private String latitude;//纬度
public SweeperPresenter(SweeperFragment view) {
public SweeperOperatePresenter(SweeperOperateFragment view) {
super(view);
//2021.11.1 鹰眼架构整合由IMoGoAutopilotStatusListener逐步替代IMogoAdasOCHCallback接口
CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, this);
//清扫车模式和贴边数据回调监听
CallerSweeperFutianCleanSystemListenerManager.INSTANCE.addListener(TAG, this);
SweeperTaskModel.getInstance().init();
SweeperOperateTaskModel.getInstance().init();
OCHAdasAbilityManager.getInstance().init(AbsMogoApplication.getApp());
}
@@ -99,20 +99,20 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
@Override
public void onDestroy(@NonNull LifecycleOwner owner) {
super.onDestroy(owner);
SweeperTaskModel.getInstance().release();
SweeperOperateTaskModel.getInstance().release();
releaseListener();
}
public void initModelListener() {
SweeperTaskModel.getInstance().setControllerStatusCallback(this);
SweeperTaskModel.getInstance().setAdasStatusCallback(this);
SweeperTaskModel.getInstance().setSweeperTaskCallback(this);
SweeperOperateTaskModel.getInstance().setControllerStatusCallback(this);
SweeperOperateTaskModel.getInstance().setAdasStatusCallback(this);
SweeperOperateTaskModel.getInstance().setSweeperTaskCallback(this);
}
public void releaseListener() {
SweeperTaskModel.getInstance().setControllerStatusCallback(null);
SweeperTaskModel.getInstance().setAdasStatusCallback(null);
SweeperTaskModel.getInstance().setSweeperTaskCallback(null);
SweeperOperateTaskModel.getInstance().setControllerStatusCallback(null);
SweeperOperateTaskModel.getInstance().setAdasStatusCallback(null);
SweeperOperateTaskModel.getInstance().setSweeperTaskCallback(null);
CallerSweeperFutianCleanSystemListenerManager.INSTANCE.removeListener(TAG);
}
@@ -126,34 +126,34 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
@Override
public void onAutopilotStatusResponse(int state) {
SweeperTaskModel.getInstance().setAutopilotState(state);
SweeperOperateTaskModel.getInstance().setAutopilotState(state);
ThreadUtils.runOnUiThread(() -> mView.startAutoBtn(state));
switch (state) {
case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE://不可自动驾驶
break;
case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE://人工驾驶
if (SweeperTaskModel.getInstance().getSubWorking()) {
if (SweeperOperateTaskModel.getInstance().getSubWorking()) {
if (FunctionBuildConfig.isDemoMode) {//美化模式开启时
SweeperTaskModel.getInstance().startBeautificationMode();
SweeperOperateTaskModel.getInstance().startBeautificationMode();
}
} else {
if (FunctionBuildConfig.isDemoMode) {//美化模式开启时
//关闭美化模式
SweeperTaskModel.getInstance().closeBeautificationMode();
SweeperOperateTaskModel.getInstance().closeBeautificationMode();
}
}
break;
case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING://自动驾驶中
SweeperTaskModel.getInstance().triggerStartServiceEvent(
SweeperTaskModel.getInstance().isRestartAutopilot(), true);
if (SweeperTaskModel.getInstance().getSubWorking()) {
SweeperOperateTaskModel.getInstance().triggerStartServiceEvent(
SweeperOperateTaskModel.getInstance().isRestartAutopilot(), true);
if (SweeperOperateTaskModel.getInstance().getSubWorking()) {
if (FunctionBuildConfig.isDemoMode) {//美化模式开启时
SweeperTaskModel.getInstance().startBeautificationMode();
SweeperOperateTaskModel.getInstance().startBeautificationMode();
}
}
break;
case IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING://平行驾驶
if (SweeperTaskModel.getInstance().getSubWorking()) {
if (SweeperOperateTaskModel.getInstance().getSubWorking()) {
if (FunctionBuildConfig.isDemoMode) {//美化模式开启时
FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true;//是否强制绘制引导线
CallerAutoPilotControlManager.INSTANCE.setIPCDemoMode(false);//是否自动启动自驾
@@ -161,7 +161,7 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
} else {
if (FunctionBuildConfig.isDemoMode) {//美化模式开启时
//关闭美化模式
SweeperTaskModel.getInstance().closeBeautificationMode();
SweeperOperateTaskModel.getInstance().closeBeautificationMode();
}
}
break;
@@ -191,10 +191,10 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
* 清除路线缓存数据
*/
public void clearRouteList(){
SweeperTaskModel.getInstance().clearRouteList();
SweeperOperateTaskModel.getInstance().clearRouteList();
}
public void startAutopilot() {
SweeperTaskModel.getInstance().startAutopilot();
SweeperOperateTaskModel.getInstance().startAutopilot();
}
/**
@@ -202,10 +202,10 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
*/
public void setSubtask(boolean isFirstSubtask, boolean isLastSubtask, int subTaskId,int subTaskType) {
this.mSubTaskId = subTaskId;
SweeperTaskModel.getInstance().setSubtask(isFirstSubtask, isLastSubtask, subTaskId,subTaskType);
SweeperOperateTaskModel.getInstance().setSubtask(isFirstSubtask, isLastSubtask, subTaskId,subTaskType);
}
public void setWorking(boolean isWorking){
SweeperTaskModel.getInstance().setWorking(isWorking);
SweeperOperateTaskModel.getInstance().setWorking(isWorking);
}
/**
* 测试使用
@@ -236,7 +236,7 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
@Override
public void onAutopilotArriveAtStation(@Nullable MessagePad.ArrivalNotification arrivalNotification) {
SweeperTaskModel.getInstance().onArriveTaskEnd(arrivalNotification);
SweeperOperateTaskModel.getInstance().onArriveTaskEnd(arrivalNotification);
}
@Override
@@ -248,7 +248,7 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
}
public void onArriveTaskEnd(@Nullable MessagePad.ArrivalNotification arrivalNotification) {
SweeperTaskModel.getInstance().onArriveTaskEnd(arrivalNotification);
SweeperOperateTaskModel.getInstance().onArriveTaskEnd(arrivalNotification);
}
@Override
@@ -370,28 +370,28 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
* 获取当前正在执行的任务
*/
public void getCurrentTask() {
SweeperTaskModel.getInstance().getCurrentTask();
SweeperOperateTaskModel.getInstance().getCurrentTask();
}
/**
* 获取主任务列表
*/
public void getMainTaskList(boolean refresh) {
SweeperTaskModel.getInstance().getMainTaskList(refresh);
SweeperOperateTaskModel.getInstance().getMainTaskList(refresh);
}
/**
* 获取子任务列表
*/
public void getSubTaskList(int taskId, SweeperSubTaskBean sweeperSubTaskBean) {
SweeperTaskModel.getInstance().getSubTaskList(taskId, sweeperSubTaskBean);
SweeperOperateTaskModel.getInstance().getSubTaskList(taskId, sweeperSubTaskBean);
}
/**
* 获取子任务详情包括轨迹文件信息
*/
public void getSubTaskDetail(boolean isFirst, boolean isEnd, int subTaskId, SubTaskTypeEnum subTaskType, boolean isStartSubtask) {
SweeperTaskModel.getInstance().getSubTaskDetail(isFirst, isEnd, subTaskId, subTaskType, isStartSubtask);
SweeperOperateTaskModel.getInstance().getSubTaskDetail(isFirst, isEnd, subTaskId, subTaskType, isStartSubtask);
}
/**
@@ -399,7 +399,7 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
*/
public void startTask(boolean isFirst, boolean isEnd, int subTaskId, SubTaskTypeEnum subTaskType, int subTaskStatus) {
if (SubTaskTypeEnum.AUTOPILOT_SUBTYPE.getCode() == subTaskStatus) {
SweeperTaskModel.getInstance().subTaskStart(isFirst, isEnd, subTaskId, subTaskType);
SweeperOperateTaskModel.getInstance().subTaskStart(isFirst, isEnd, subTaskId, subTaskType);
}
}
@@ -407,21 +407,21 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
* 子任务结束上报
*/
public void subTaskEnd(boolean isFirst, boolean isEnd, int subTaskId) {
SweeperTaskModel.getInstance().subTaskEnd(isFirst, isEnd, subTaskId);
SweeperOperateTaskModel.getInstance().subTaskEnd(isFirst, isEnd, subTaskId);
}
/**
* 子任务跳过上报
*/
public void subTaskSkip(boolean isFirst, boolean isEnd, int subTaskId) {
SweeperTaskModel.getInstance().subTaskSkip(isFirst, isEnd, subTaskId);
SweeperOperateTaskModel.getInstance().subTaskSkip(isFirst, isEnd, subTaskId);
}
/**
* 主任务重置
*/
public void mainTaskReset(int taskId) {
SweeperTaskModel.getInstance().mainTaskReset(taskId);
SweeperOperateTaskModel.getInstance().mainTaskReset(taskId);
}
@Override

View File

@@ -47,7 +47,7 @@ class TaskListAdapter() : RecyclerView.Adapter<TaskListAdapter.TaskViewHolder>()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TaskViewHolder {
val view = LayoutInflater.from(parent.context).inflate(
R.layout.sweeper_item_task_info, parent, false
R.layout.sweeper_operate_item_task_info, parent, false
)
return TaskViewHolder(view)
}

View File

@@ -1,70 +0,0 @@
package com.mogo.och.sweeper.operate.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.sweeper.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)
}
}
}

View File

@@ -1,85 +0,0 @@
package com.mogo.och.sweeper.operate.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.sweeper.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)
}
}
}

View File

@@ -36,7 +36,7 @@ class MenuPopWindow : PopupWindow, View.OnClickListener{
*/
private fun init(context: Context) {
setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
var view: View = LayoutInflater.from(context).inflate(R.layout.sweeper_task_menu, null)
var view: View = LayoutInflater.from(context).inflate(R.layout.sweeper_operate_task_menu, null)
mTvJumpOverTask = view.findViewById(R.id.tvJumpOverTask)
mTaskJumpLineView = view.findViewById(R.id.taskJumpLineView)
mTvEndTask = view.findViewById(R.id.tvEndTask)

View File

@@ -14,19 +14,19 @@ import com.mogo.och.sweeper.R
import com.mogo.och.sweeper.operate.bean.SubInfo
import com.mogo.och.sweeper.operate.bean.SweeperSubTaskBean
import com.mogo.och.sweeper.operate.constant.SubTaskTypeEnum
import com.mogo.och.sweeper.operate.presenter.SweeperPresenter
import com.mogo.och.sweeper.operate.presenter.SweeperOperatePresenter
import com.mogo.och.sweeper.operate.ui.popwindow.MenuPopWindow
import kotlinx.android.synthetic.main.sweeper_current_task_info.view.*
import kotlinx.android.synthetic.main.sweeper_operate_current_task_info.view.*
/**
* 清扫车当前任务信息展示
*/
class SweeperCurrentTaskInfoView : ConstraintLayout {
class SweeperOperateCurrentTaskInfoView : ConstraintLayout {
private val TAG: String = "SweeperCurrentTaskInfoView"
//当前任务操作菜单
private var mTaskMenuPopWindow: MenuPopWindow? = null
private var presenter: SweeperPresenter? = null
private var presenter: SweeperOperatePresenter? = null
private var mCurrentPosition = 0
private var listTask: List<SubInfo>? = null
private var mSubTaskType: SubTaskTypeEnum = SubTaskTypeEnum.AUTOPILOT_SUBTYPE
@@ -43,7 +43,7 @@ class SweeperCurrentTaskInfoView : ConstraintLayout {
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)
LayoutInflater.from(context).inflate(R.layout.sweeper_operate_current_task_info, this)
setEnableClickBtn(false)
tvStartAuto.setOnClickListener {
if (ClickUtils.isFastClick()){//防止重复点击
@@ -66,17 +66,17 @@ class SweeperCurrentTaskInfoView : ConstraintLayout {
* 设置当前任务数据
*/
fun setData(
workModePanelView: SweeperWorkModeView,
workModePanelView: SweeperOperateWorkModeView,
subTaskBean: SweeperSubTaskBean?,
currentPosition: Int,
menuItemClickListener: MenuPopWindow.OnMenuItemOnClickListener,
presenter: SweeperPresenter?
presenter: SweeperOperatePresenter?
) {
this.presenter = presenter
this.mCurrentPosition = currentPosition
mTaskMenuPopWindow = MenuPopWindow(context, menuItemClickListener)
subTaskBean?.apply {
this@SweeperCurrentTaskInfoView.listTask = subList
this@SweeperOperateCurrentTaskInfoView.listTask = subList
tvTaskName.text = taskName
val calendar = DateTimeUtil.formatLongToCalendar(taskStartTime)
tvTaskTime.text = DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.HH_mm)

View File

@@ -9,12 +9,12 @@ import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.sweeper.R
import com.mogo.och.sweeper.operate.bean.SubInfo
import kotlinx.android.synthetic.main.sweeper_subtask_view.view.*
import kotlinx.android.synthetic.main.sweeper_operate_subtask_view.view.*
/**
* 子任务View
*/
class SubTaskView : ConstraintLayout {
class SweeperOperateSubTaskView : ConstraintLayout {
constructor(context: Context) : super(context) {}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
initView(context)
@@ -24,7 +24,7 @@ class SubTaskView : ConstraintLayout {
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)
LayoutInflater.from(context).inflate(R.layout.sweeper_operate_subtask_view, this)
}
/**

View File

@@ -29,7 +29,7 @@ import kotlin.math.roundToInt
/**
* 车辆基本信息方向盘下方的档位 转向灯 限速 速度 电量 水量
*/
class SweeperTrafficDataView : ConstraintLayout,
class SweeperOperateTrafficDataView : ConstraintLayout,
IMoGoBatteryManagementSystemListener,
IMoGoChassisLamplightListener,
IMoGoChassisGearStateListener,
@@ -69,7 +69,7 @@ class SweeperTrafficDataView : ConstraintLayout,
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)
LayoutInflater.from(context).inflate(R.layout.sweeper_operate_traffic_data, this)
tapPositionView = findViewById(R.id.sweeperTrafficPosition)
speedImage = findViewById(R.id.sweeperSpeedImage)
speedTextView = findViewById(R.id.sweeperSpeedText)

View File

@@ -13,15 +13,14 @@ import com.mogo.och.sweeper.R
import com.mogo.och.sweeper.common.callback.ICleaningModeStateCallback
import com.mogo.och.sweeper.common.constant.OperateStateEnum
import com.mogo.och.sweeper.operate.constant.SubTaskTypeEnum
import com.mogo.och.sweeper.operate.ui.popwindow.SweeperOperatePanelPopWindow
import com.mogo.och.sweeper.common.view.SweeperOperatePanelPopWindow
import com.mogo.och.sweeper.common.util.SweeperFutianCmdUtil
import com.mogo.och.sweeper.operate.view.SweeperTrafficDataView
import kotlinx.android.synthetic.main.sweeper_work_mode.view.*
/**
* 清扫车模式信息展示
*/
class SweeperWorkModeView : ConstraintLayout,
class SweeperOperateWorkModeView : ConstraintLayout,
ICleaningModeStateCallback {
private var isSelectPureSweepMode: Boolean = false
@@ -48,7 +47,7 @@ class SweeperWorkModeView : ConstraintLayout,
/**
* 设置view
*/
fun setTrafficDataView(trafficDataView: SweeperTrafficDataView){
fun setTrafficDataView(trafficDataView: SweeperOperateTrafficDataView){
//清扫模式选择面板打开关闭处理
ivOpenOperatePanel.setOnClickListener {
if (mOperatePanelPopWindow?.isShowing != true) {

View File

@@ -6,7 +6,7 @@
android:layout_gravity="center"
android:orientation="vertical">
<!--清扫模式面板-->
<com.mogo.och.sweeper.cloud.view.SweeperWorkModeView
<com.mogo.och.sweeper.cloud.view.SweeperCloudWorkModeView
android:id="@+id/sweeper_cl_work_mode"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
@@ -24,7 +24,7 @@
app:xOffset="0dp"
app:yOffset="0dp"
android:layout_marginTop="-20dp">
<com.mogo.och.sweeper.cloud.view.SweeperCurrentTaskInfoView
<com.mogo.och.sweeper.cloud.view.SweeperCloudCurrentTaskInfoView
android:id="@+id/sweeper_current_task_view"
android:layout_width="match_parent"
android:layout_height="match_parent"

View File

@@ -9,7 +9,7 @@
app:layout_constraintBottom_toBottomOf="parent"
android:orientation="vertical">
<!--清扫模式面板-->
<com.mogo.och.sweeper.operate.view.SweeperWorkModeView
<com.mogo.och.sweeper.operate.view.SweeperOperateWorkModeView
android:id="@+id/sweeper_cl_work_mode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -17,7 +17,7 @@
app:layout_constraintTop_toBottomOf="@+id/sweeper_arc"
android:visibility="gone" />
<!--清扫任务当前面板-->
<com.mogo.och.sweeper.operate.view.SweeperCurrentTaskInfoView
<com.mogo.och.sweeper.operate.view.SweeperOperateCurrentTaskInfoView
android:id="@+id/sweeper_current_task_view"
app:layout_constraintTop_toBottomOf="@+id/sweeper_cl_work_mode"
android:layout_width="wrap_content"
@@ -104,7 +104,7 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/viewTaskListLine"
tools:itemCount="6"
tools:listitem="@layout/sweeper_item_task_info" />
tools:listitem="@layout/sweeper_operate_item_task_info" />
<TextView
android:id="@+id/tvTaskConfirm"
@@ -120,7 +120,7 @@
android:textSize="@dimen/dp_42"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<include layout="@layout/sweeper_no_data_common_view"
<include layout="@layout/sweeper_operate_no_data_common_view"
android:visibility="visible"/>
</com.mogo.och.common.module.wigets.OCHBorderShadowLayout>
</LinearLayout>

View File

@@ -16,7 +16,7 @@
android:layout_height="match_parent" />
<!--车辆基本交通信息-->
<com.mogo.och.sweeper.operate.view.SweeperTrafficDataView
<com.mogo.och.sweeper.operate.view.SweeperOperateTrafficDataView
android:id="@+id/sweeper_arc"
android:layout_width="@dimen/dp_616"
android:layout_height="@dimen/dp_320"

View File

@@ -16,7 +16,7 @@
android:layout_height="match_parent" />
<!--车辆基本交通信息-->
<com.mogo.och.sweeper.cloud.view.SweeperTrafficDataView
<com.mogo.och.sweeper.cloud.view.SweeperCloudTrafficDataView
android:id="@+id/sweeper_arc"
android:layout_width="@dimen/dp_616"
android:layout_height="@dimen/dp_320"

View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<com.mogo.och.sweeper.cloud.ui.SweeperOperatePanelView
android:id="@+id/SweeperOperatePanelView"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</com.mogo.och.sweeper.cloud.ui.SweeperOperatePanelView>

View File

@@ -90,7 +90,7 @@
app:layout_constraintBottom_toBottomOf="@+id/sweeperAutoState"
android:layout_marginStart="@dimen/dp_26"
android:background="#414869"/>
<com.mogo.och.sweeper.cloud.view.SweeperTrafficLightView
<com.mogo.och.sweeper.common.view.SweeperTrafficLightView
android:id="@+id/sweeperTrafficLight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View File

@@ -92,7 +92,7 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/viewTaskInfoLine" />
<com.mogo.och.sweeper.operate.view.SubTaskView
<com.mogo.och.sweeper.operate.view.SweeperOperateSubTaskView
android:id="@+id/preSubTask"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -101,7 +101,7 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/viewTaskInfoLine" />
<com.mogo.och.sweeper.operate.view.SubTaskView
<com.mogo.och.sweeper.operate.view.SweeperOperateSubTaskView
android:id="@+id/currentSubTask"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -109,7 +109,7 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/preSubTask" />
<com.mogo.och.sweeper.operate.view.SubTaskView
<com.mogo.och.sweeper.operate.view.SweeperOperateSubTaskView
android:id="@+id/lastSubTask"
android:layout_width="match_parent"
android:layout_height="wrap_content"

View File

@@ -84,7 +84,7 @@
app:layout_constraintBottom_toBottomOf="@+id/sweeperTurnSignal"
android:layout_marginStart="@dimen/dp_12"
android:background="#414869"/>
<com.mogo.och.sweeper.operate.view.SweeperTrafficLightView
<com.mogo.och.sweeper.common.view.SweeperTrafficLightView
android:id="@+id/sweeperTrafficLight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<com.mogo.och.sweeper.operate.ui.SweeperOperatePanelView
<com.mogo.och.sweeper.common.view.SweeperOperatePanelView
android:id="@+id/SweeperOperatePanelView"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</com.mogo.och.sweeper.operate.ui.SweeperOperatePanelView>
</com.mogo.och.sweeper.common.view.SweeperOperatePanelView>