Merge branch 'release_sweeper-d_231101_6.2.0.1' into 'master'

【Publish】Sweeper V6.2.0 运营&云控版本二合一

See merge request SCA/L4HA/AndroidApp/MoGoEagleEye!833
This commit is contained in:
aibingbing
2023-11-14 06:40:26 +00:00
446 changed files with 1807 additions and 6915 deletions

View File

@@ -48,6 +48,7 @@ dependencies {
implementation rootProject.ext.dependencies.kotlinstdlib
implementation rootProject.ext.dependencies.androidxappcompat
implementation rootProject.ext.dependencies.arouter
testImplementation 'junit:junit:4.12'
annotationProcessor rootProject.ext.dependencies.aroutercompiler
implementation rootProject.ext.dependencies.androidxconstraintlayout
implementation rootProject.ext.dependencies.amapnavi3dmap
@@ -58,6 +59,7 @@ dependencies {
implementation rootProject.ext.dependencies.androidxcardview
implementation rootProject.ext.dependencies.androidxroomruntime
annotationProcessor rootProject.ext.dependencies.androidxroomcompiler
implementation rootProject.ext.dependencies.localbroadcastmanager
implementation project(":OCH:mogo-och-common-module")
compileOnly project(":libraries:mogo-map")

View File

@@ -2,11 +2,11 @@
"formatVersion": 1,
"database": {
"version": 1,
"identityHash": "0897ef4b7b6a43fccf8bcf4b2144dafa",
"identityHash": "48873cc5d9f967e9df0245dc045cf91a",
"entities": [
{
"tableName": "welt_data_table",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `subTaskId` INTEGER NOT NULL, `locLon` REAL NOT NULL, `locLat` REAL NOT NULL, `weltDistance` REAL NOT NULL, `cleanMode` INTEGER NOT NULL, `cleanDirection` INTEGER NOT NULL, `cleanIntensity` INTEGER NOT NULL)",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `subTaskId` TEXT, `locLon` REAL NOT NULL, `locLat` REAL NOT NULL, `weltDistance` REAL NOT NULL, `cleanMode` INTEGER NOT NULL, `cleanDirection` INTEGER NOT NULL, `cleanIntensity` INTEGER NOT NULL)",
"fields": [
{
"fieldPath": "id",
@@ -17,8 +17,8 @@
{
"fieldPath": "subTaskId",
"columnName": "subTaskId",
"affinity": "INTEGER",
"notNull": true
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "locLon",
@@ -80,7 +80,7 @@
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '0897ef4b7b6a43fccf8bcf4b2144dafa')"
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '48873cc5d9f967e9df0245dc045cf91a')"
]
}
}

View File

@@ -4,7 +4,7 @@
<application>
<!--这里是为了测试增加的广播-->
<receiver android:name=".receiver.TestSweeperBroadcastReceiver">
<receiver android:name=".common.receiver.TestSweeperBroadcastReceiver">
<intent-filter>
<action android:name="com.bus.test_control" />

View File

@@ -0,0 +1,190 @@
package com.mogo.och.sweeper;
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_SWEEPER;
import android.annotation.SuppressLint;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.eagle.core.data.config.FunctionBuildConfig;
import com.mogo.eagle.core.function.api.vehicle.IMoGoSweeperModeListener;
import com.mogo.eagle.core.function.call.vehicle.CallerSweeperModeListenerManager;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.utilcode.mogo.vehicle.SweeperVehicleConfigUtils;
import com.mogo.eagle.core.utilcode.util.AppUtils;
import com.mogo.eagle.core.utilcode.util.ToastUtils;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.och.common.module.utils.ToastUtilsOch;
import com.mogo.och.sweeper.cloud.fragment.SweeperCloudFragment;
import com.mogo.och.sweeper.common.constant.SweeperConst;
import com.mogo.och.sweeper.common.database.MyDataBase;
import com.mogo.och.sweeper.common.util.SweeperAnalyticsManager;
import com.mogo.och.sweeper.operate.fragment.SweeperOperateFragment;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import io.reactivex.Observable;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
/**
* 清扫车业务实现入口
*
* @author tongchenfei
*/
@Route(path = SweeperConst.PATH)
public class SweeperProvider implements IMogoOCH, IMoGoSweeperModeListener {
private static final String TAG = "SweeperProvider";
private SweeperOperateFragment sweeperOperateFragment;
private SweeperCloudFragment sweeperCloudFragment;
private int containerId;
private FragmentActivity activity;
@Override
public void init(Context context) {
}
private void showOperateFragment() {
FragmentManager supportFragmentManager = activity.getSupportFragmentManager();
if (sweeperOperateFragment == null) {
CallerLogger.d(TAG, "准备add fragment======");
Fragment fragmentByTag = supportFragmentManager.findFragmentByTag(sweeperOperateFragment.TAG);
if (fragmentByTag instanceof SweeperOperateFragment) {
sweeperOperateFragment = (SweeperOperateFragment) fragmentByTag;
} else {
sweeperOperateFragment = new SweeperOperateFragment();
}
if (!sweeperOperateFragment.isAdded()) {
supportFragmentManager.beginTransaction().add(containerId, sweeperOperateFragment, sweeperOperateFragment.TAG).commitAllowingStateLoss();
}
return;
}
CallerLogger.d(TAG, "准备show fragment");
supportFragmentManager.beginTransaction().show(sweeperOperateFragment).commitAllowingStateLoss();
}
private void showCloudFragment() {
FragmentManager supportFragmentManager = activity.getSupportFragmentManager();
if (sweeperCloudFragment == null) {
CallerLogger.d(TAG, "准备add fragment======");
Fragment fragmentByTag = supportFragmentManager.findFragmentByTag(sweeperCloudFragment.TAG);
if (fragmentByTag instanceof SweeperCloudFragment) {
sweeperCloudFragment = (SweeperCloudFragment) fragmentByTag;
} else {
sweeperCloudFragment = new SweeperCloudFragment();
}
if (!sweeperCloudFragment.isAdded()) {
supportFragmentManager.beginTransaction().add(containerId, sweeperCloudFragment, sweeperCloudFragment.TAG).commitAllowingStateLoss();
}
return;
}
CallerLogger.d(TAG, "准备show fragment");
supportFragmentManager.beginTransaction().show(sweeperCloudFragment).commitAllowingStateLoss();
}
private void hideFragment() {
if (sweeperOperateFragment != null) {
CallerLogger.d(TAG, "准备hide operate fragment");
activity.getSupportFragmentManager().beginTransaction().hide(sweeperOperateFragment).commitAllowingStateLoss();
} else if (sweeperCloudFragment != null) {
CallerLogger.d(TAG, "准备hide cloud fragment");
activity.getSupportFragmentManager().beginTransaction().hide(sweeperCloudFragment).commitAllowingStateLoss();
}
CallerSweeperModeListenerManager.INSTANCE.removeListener(TAG);
}
@Override
public void createCoverage(FragmentActivity activity, int containerId) {
}
@NotNull
@Override
public String getFunctionName() {
return null;
}
@Nullable
@Override
public Fragment createCoverage(@Nullable FragmentActivity fragmentActivity, @Nullable Integer integer) {
this.containerId = integer;
this.activity = fragmentActivity;
// 第一优先级:需要默认能切换清扫业务模式
// 第二优先级如果能切换清扫模式查询SP中缓存的当前模式用户切换后会在SP中写入当前模式切换完后清除因为现在产品确认还不需要每次启动时首先使用用户上次选择的模式目前优先还是使用gradle中默认配置的模式打开
// 第三优先级如果不能切换清扫模式或者SP中没有用户选择的当前模式查询gradle中默认配置的当前模式用户不进行切换时SP中没有配置默认使用的gradle中默认当前模式
CallerLogger.i(M_SWEEPER + TAG, "清扫车启动当前业务模式isSPCurrentSweeperOperateMode="
+ SweeperVehicleConfigUtils.isSPCurrentSweeperOperateMode()
+ ", isSPCurrentSweeperCloudMode=" + SweeperVehicleConfigUtils.isSPCurrentSweeperCloudMode());
if (SweeperVehicleConfigUtils.isDefaultSweeperCanSwitchMode(FunctionBuildConfig.sweeperCanSwitchMode)
&& SweeperVehicleConfigUtils.isSPCurrentSweeperOperateMode()) {
FunctionBuildConfig.sweeperCurrentMode = SweeperVehicleConfigUtils.BUSINESS_MODE_OPERATE;
showOperateFragment();
ToastUtils.showLong("当前清扫业务模式:运营");
} else if (SweeperVehicleConfigUtils.isDefaultSweeperCanSwitchMode(FunctionBuildConfig.sweeperCanSwitchMode)
&& SweeperVehicleConfigUtils.isSPCurrentSweeperCloudMode()) {
FunctionBuildConfig.sweeperCurrentMode = SweeperVehicleConfigUtils.BUSINESS_MODE_CLOUD;
showCloudFragment();
ToastUtils.showLong("当前清扫业务模式:云控");
} else if (SweeperVehicleConfigUtils.isDefaultSweeperOperateMode(FunctionBuildConfig.sweeperDefaultMode)) {
FunctionBuildConfig.sweeperCurrentMode = SweeperVehicleConfigUtils.BUSINESS_MODE_OPERATE;
showOperateFragment();
ToastUtils.showLong("当前清扫业务模式:运营");
} else if (SweeperVehicleConfigUtils.isDefaultSweeperCloudMode(FunctionBuildConfig.sweeperDefaultMode)) {
FunctionBuildConfig.sweeperCurrentMode = SweeperVehicleConfigUtils.BUSINESS_MODE_CLOUD;
showCloudFragment();
ToastUtils.showLong("当前清扫业务模式:云控");
} else {
// 默认云控模式
FunctionBuildConfig.sweeperCurrentMode = SweeperVehicleConfigUtils.BUSINESS_MODE_CLOUD;
showCloudFragment();
ToastUtils.showLong("当前清扫业务模式:云控");
}
CallerSweeperModeListenerManager.INSTANCE.addListener(TAG, this);
return null;
}
@Override
public void onDestroy() {
//若不调用finish, 设置中打开关闭UITouch,会造成och fragment 重叠
if (activity == null) return;
activity.finish();
}
@SuppressLint("CheckResult")
@Override
public void onSweeperCurrentModeChanged(@NonNull String currentMode) {
// 日志、埋点
CallerLogger.i(M_SWEEPER + TAG, "切换清扫车业务模式,当前切换的模式:" + currentMode);
SweeperAnalyticsManager.getInstance().trackSweeperModeChangeEvent(currentMode);
Observable.just(currentMode)
.observeOn(Schedulers.io())
.subscribeOn(Schedulers.io())
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
// 写入SP当前模式
SweeperVehicleConfigUtils.setSPCurrentSweeperMode(currentMode);
// 清除本地业务缓存数据
MyDataBase.getInstance().getWeltDataDao().deleteAllWeltData();
// 等清除完数据库数据后重启App
UiThreadHandler.postDelayed(new Runnable() {
@Override
public void run() {
AppUtils.relaunchApp(true);
}
}, 1000L);
}
});
}
}

View File

@@ -1,17 +1,13 @@
package com.mogo.och.sweepercloud.callback
package com.mogo.och.sweeper.cloud.callback
import chassis.ChassisStatesOuterClass
import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean
import com.mogo.och.sweepercloud.database.bean.WeltDataBean
import com.mogo.och.sweeper.common.database.bean.WeltDataBean
import com.zhjt.mogo.adas.data.AiCloudTask
import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable
import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable.IsBootableResp
import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon
import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon.Code
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.cloud.s_r.SweeperTaskCloudSuspendResume.ActionType
import com.zhjt.mogo.adas.data.sweeper.task.cloud.s_r.SweeperTaskCloudSuspendResume.BigTaskActionPush
import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop.StopTaskType
/**
@@ -62,7 +58,7 @@ interface ISweeperCloudTaskCallback {
/**
* 设置轨迹坐标点集合
*/
fun setRouteList(routeList: java.util.ArrayList<SweeperRoutePlanningUpdateReqBean.Result>)
fun setRouteList(routeList: java.util.ArrayList<com.mogo.och.sweeper.common.bean.SweeperRoutePlanningUpdateReqBean.Result>)
/**
* 贴边数据回传
*/

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweepercloud.callback;
package com.mogo.och.sweeper.cloud.callback;
import com.mogo.eagle.core.data.map.MogoLocation;

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweepercloud.callback
package com.mogo.och.sweeper.cloud.callback
interface SweeperCloudDialogClickListener {
fun onConfirm()

View File

@@ -1,7 +1,8 @@
package com.mogo.och.sweepercloud.fragment;
package com.mogo.och.sweeper.cloud.fragment;
import static com.mogo.map.MogoMap.DEFAULT;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@@ -13,16 +14,13 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.Group;
import androidx.fragment.app.FragmentTransaction;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import com.amap.api.maps.model.LatLng;
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;
@@ -33,31 +31,26 @@ 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.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.uicontroller.IMogoMapUIController;
import com.mogo.map.uicontroller.VisualAngleMode;
import com.mogo.och.common.module.manager.autopilotmanager.OCHAdasAbilityManager;
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil;
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.AiCloudTask;
import com.mogo.och.sweeper.R;
import com.mogo.och.sweeper.cloud.view.SweeperCloudTrafficDataView;
import com.mogo.och.sweeper.common.bean.SweeperRoutePlanningUpdateReqBean;
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.common.fragment.WeltMapOverViewFragment;
import com.mogo.och.sweeper.common.view.DebugView;
import com.mogo.och.sweeper.common.view.WeltSmallMapView;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import mogo.telematics.pad.MessagePad;
/**
* 网约车基础Fragment主要负责布局通用界面处理站点面板和通话面板互斥情况
* <p>
@@ -65,7 +58,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 +75,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;
//任务作业全览图
@@ -101,7 +94,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
@Override
protected int getLayoutId() {
return R.layout.sweeper_base_fragment;
return R.layout.sweeper_cloud_base_fragment;
}
@Override
@@ -127,105 +120,22 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
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.getLineName(),
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.btnOpenDebugView).setOnClickListener(view -> {
Intent intent = new Intent();
intent.setAction(DebugView.BROADCAST_ACTION);
intent.putExtra(DebugView.BROADCAST_DATA_SHOW, true);
LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent);
}
);
// 模拟 云端发送任务
findViewById(R.id.btnSendTask).setOnClickListener(view -> {
SweeperCloudTaskUtils.mockSendCloudTaskInfo(AiCloudTask.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()
);
// 模拟 添加高精地图Marker
findViewById(R.id.btnAddHDMarker).setOnClickListener(view -> {
// 坐标地址湖南省衡阳市雁峰区金龙坪街道科学城大道衡山科学城停车场
SweeperCloudTaskUtils.mockAddHdMarker("marker_sweeper_subtask_123_start",
112.57742887355035,
26.82068193910221,
true);
// 坐标地址湖南省衡阳市雁峰区岳屏镇雁鸣路
SweeperCloudTaskUtils.mockAddHdMarker("marker_sweeper_subtask_123_end",
112.56666738544979,
26.822879976829867,
false);
}
);
// 模拟 移除高精地图Marker
findViewById(R.id.btnRemoveHDMarker).setOnClickListener(view ->
SweeperCloudTaskUtils.mockRemoveHDMarker()
//关闭调试面板
findViewById(R.id.btnCloseDebugView).setOnClickListener(view -> {
Intent intent = new Intent();
intent.setAction(DebugView.BROADCAST_ACTION);
intent.putExtra(DebugView.BROADCAST_DATA_SHOW, false);
LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent);
}
);
mTrafficDataView.getSpeedImage().setOnLongClickListener(new View.OnLongClickListener() {
@Override
@@ -368,7 +278,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
*
* @return
*/
public SweeperTrafficDataView getTrafficDataView() {
public SweeperCloudTrafficDataView getTrafficDataView() {
return mTrafficDataView;
}
@@ -464,8 +374,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,4 +1,4 @@
package com.mogo.och.sweepercloud.fragment
package com.mogo.och.sweeper.cloud.fragment
import android.os.Bundle
import android.view.View
@@ -16,24 +16,23 @@ import com.mogo.map.overlay.core.Level
import com.mogo.map.overlay.point.Point
import com.mogo.och.common.module.utils.OCHThreadPoolManager
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.constant.SweeperConst.Companion.TYPE_MARKER_SWEEPER_SUBTASK_START_END
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
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createConfirmStartSubTaskDialog
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createReceivedBigTaskInfoDialog
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createSweeperTaskEndDialog
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createSweeperTaskExceptionEndDialog
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createSweeperTaskNormalEndDialog
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createSweeperTaskResumeDialog
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createSweeperTaskSuspendDialog
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.printMessage
import com.mogo.och.sweepercloud.view.SweeperCurrentTaskInfoView
import com.mogo.och.sweeper.R
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
import com.mogo.och.sweeper.cloud.util.SweeperCloudTaskUtils.createConfirmStartSubTaskDialog
import com.mogo.och.sweeper.cloud.util.SweeperCloudTaskUtils.createReceivedBigTaskInfoDialog
import com.mogo.och.sweeper.cloud.util.SweeperCloudTaskUtils.createSweeperTaskEndDialog
import com.mogo.och.sweeper.cloud.util.SweeperCloudTaskUtils.createSweeperTaskExceptionEndDialog
import com.mogo.och.sweeper.cloud.util.SweeperCloudTaskUtils.createSweeperTaskNormalEndDialog
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.SweeperCloudCurrentTaskInfoView
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.common.view.DebugView
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
@@ -44,18 +43,19 @@ import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.TaskModel
import com.zhjt.mogo.adas.data.sweeper.task.cloud.s_r.SweeperTaskCloudSuspendResume
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.android.synthetic.main.fragment_och_sweeper_cloud.sweeper_cl_work_mode
import kotlinx.android.synthetic.main.fragment_och_sweeper_cloud.sweeper_current_task_view
import kotlinx.android.synthetic.main.sweeper_cloud_no_data_common_view.noTaskDataView
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
/**
* 清扫车主界面
*/
class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresenter?>() {
class SweeperCloudFragment : BaseSweeperCloudTabFragment<SweeperCloudFragment?, SweeperCloudPresenter?>() {
companion object {
const val TAG = "SweeperFragment"
const val TAG = "SweeperCloudFragment"
}
private var mSubMutableList: MutableList<SubTaskInfo>? = null
@@ -82,8 +82,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?) {
@@ -92,7 +92,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
}
override fun getTaskListPanelViewId(): Int {
return R.layout.fragment_och_sweeper
return R.layout.fragment_och_sweeper_cloud
}
/**
@@ -313,6 +313,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
//已完成的计入任务进度,未完成的不计入
ToastUtils.showLong("任务完成")
showNotice("任务完成")
DebugView.printInfoMsg("[任务状态]任务完成")
removeHDMapMarkerBySubTask(subTaskList[index])
}
@@ -376,9 +377,10 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
mDialog = sweeperCloudTaskNormalEndDialog()
showNotice("任务已结束")
ToastUtils.showLong("任务已结束")
DebugView.printInfoMsg("[任务状态]任务已结束")
} else {
// 产品确认有弹框时不需要同步弹toast, 只需有TTS
mDialog = createSweeperTaskEndDialog(context, object : SweeperCloudDialogClickListener {
mDialog = createSweeperTaskEndDialog(context, object : com.mogo.och.sweeper.cloud.callback.SweeperCloudDialogClickListener {
override fun onConfirm() {
// mPresenter?.sendSweeperStopTaskResp(taskId, SweeperTaskStop.StopTaskCode.MANUAL_CONFIRM)
// mLoadingDialog.showLoading()
@@ -420,7 +422,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
* 大任务结束弹窗
*/
private fun sweeperCloudTaskNormalEndDialog(): SweeperCloudDialog? {
return createSweeperTaskNormalEndDialog(context, object : SweeperCloudDialogClickListener {
return createSweeperTaskNormalEndDialog(context, object : com.mogo.och.sweeper.cloud.callback.SweeperCloudDialogClickListener {
override fun onConfirm() {
// ToastUtils.showLong("任务已结束")
// resetTaskInfoPanel()
@@ -447,7 +449,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
private fun sweeperCloudTaskExceptionEndDialog(isCancel: Boolean): SweeperCloudDialog? {
return createSweeperTaskExceptionEndDialog(
context,
object : SweeperCloudDialogClickListener {
object : com.mogo.och.sweeper.cloud.callback.SweeperCloudDialogClickListener {
override fun onConfirm() {
// ToastUtils.showLong("任务已结束")
// resetTaskInfoPanel()
@@ -503,12 +505,14 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
}
showNotice("任务已结束")
DebugView.printInfoMsg("[任务状态]任务已结束")
// 大任务这里也判断移除HD Marker, 双重判断
removeHDMapMarkerBySubTask(mCurrentRunningSubTaskInfo)
resetTaskInfoPanel()
} else if (bigTaskStatus == TaskStatus.SUSPENDED) {// 暂停
showNotice("任务已暂停")
ToastUtils.showLong("任务已暂停")
DebugView.printInfoMsg("[任务状态]任务已暂停")
//更新任务列表中大任务状态
val builder = it.toBuilder()
builder.taskStatus = TaskStatus.SUSPENDED
@@ -519,6 +523,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
) { //恢复
showNotice("任务已恢复")
ToastUtils.showLong("任务已恢复")
DebugView.printInfoMsg("[任务状态]任务已恢复")
//更新任务列表中大任务状态
val builder = it.toBuilder()
@@ -559,6 +564,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
SweeperTaskCloudSuspendResume.ActionType.SUSPENDED -> {
mDialog = sweeperCloudTaskSuspendDialog(it.taskId)
showNotice("云端暂停任务,注意车辆即将停车!")
DebugView.printInfoMsg("[任务状态]云端暂停任务,注意车辆即将停车!")
}
else -> {
@@ -581,6 +587,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
}
}
showNotice(ttsString)
DebugView.printInfoMsg("[任务状态]$ttsString")
mDialog = sweeperCloudTaskResumeDialog(ttsString, it.taskId)
}
}
@@ -612,9 +619,11 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
if (isBootableResp.code == SweeperCommon.Code.SUCCEED) {
ToastUtils.showLong("上报云控成功")
showNotice("上报云控成功")
DebugView.printInfoMsg("[任务状态]上报云控成功")
} else {
ToastUtils.showLong("上报云控失败")
showNotice("上报云控失败")
DebugView.printErrorMsg("[任务状态]上报云控失败")
}
}
}
@@ -691,11 +700,11 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
/**
* 设置路线轨迹
*/
override fun setTaskRouteList(routeList: ArrayList<SweeperRoutePlanningUpdateReqBean.Result>) {
override fun setTaskRouteList(routeList: ArrayList<com.mogo.och.sweeper.common.bean.SweeperRoutePlanningUpdateReqBean.Result>) {
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
@@ -733,7 +742,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
return
}
mDialog =
createConfirmStartSubTaskDialog(context, object : SweeperCloudDialogClickListener {
createConfirmStartSubTaskDialog(context, object : com.mogo.och.sweeper.cloud.callback.SweeperCloudDialogClickListener {
override fun onConfirm() {
// //ToastUtils.showLong("确认")
// mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.MANUAL_CONFIRM)
@@ -775,8 +784,10 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
mDialog?.show()
if (subTaskInfo.taskModel == TaskModel.MANUAL) {
showNotice("请确认并执行子任务")
DebugView.printInfoMsg("[任务状态]请确认并执行子任务")
} else { //自动驾驶子任务需要提醒在N档且拉起手刹做好准备工作
showNotice("请确认并执行子任务, 保持N档拉手刹再进入自动驾驶")
DebugView.printInfoMsg("[任务状态]请确认并执行子任务, 保持N档拉手刹再进入自动驾驶")
}
}
@@ -791,7 +802,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
return
}
mDialog =
createReceivedBigTaskInfoDialog(context, object : SweeperCloudDialogClickListener {
createReceivedBigTaskInfoDialog(context, object : com.mogo.och.sweeper.cloud.callback.SweeperCloudDialogClickListener {
override fun onConfirm() {
// ToastUtils.showLong("确认")
// mPresenter?.sendSweeperStartTaskResp(it.taskId, SweeperTask.StartTaskCode.MANUAL_CONFIRM)
@@ -832,6 +843,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
}, it)
mDialog?.show()
showNotice("已为您接取任务")
DebugView.printInfoMsg("[任务状态]已为您接取任务")
}
}
@@ -839,7 +851,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
* 大任务暂停弹框
*/
private fun sweeperCloudTaskSuspendDialog(taskId: String): SweeperCloudDialog? {
return createSweeperTaskSuspendDialog(context, object : SweeperCloudDialogClickListener {
return createSweeperTaskSuspendDialog(context, object : com.mogo.och.sweeper.cloud.callback.SweeperCloudDialogClickListener {
override fun onConfirm() {
// 发送接收到信息的ACK回执
mPresenter?.sendSweeperSuspendResumeTaskResp(
@@ -873,7 +885,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
contentStr: String,
taskId: String
): SweeperCloudDialog? {
return createSweeperTaskResumeDialog(context, object : SweeperCloudDialogClickListener {
return createSweeperTaskResumeDialog(context, object : com.mogo.och.sweeper.cloud.callback.SweeperCloudDialogClickListener {
override fun onConfirm() {
// 发送接收到信息的ACK回执
mPresenter?.sendSweeperSuspendResumeTaskResp(

View File

@@ -1,7 +1,6 @@
package com.mogo.och.sweepercloud.model;
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.sweepercloud.util.SweeperCloudTaskUtils.printMessage;
import android.content.Context;
@@ -32,13 +31,14 @@ import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.och.common.module.manager.autopilotmanager.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.mogo.och.sweeper.cloud.callback.ISweeperCloudTaskCallback;
import com.mogo.och.sweeper.cloud.callback.ISweeperControllerStatusCallback;
import com.mogo.och.sweeper.cloud.util.SweeperCloudTaskUtils;
import com.mogo.och.sweeper.common.bean.SweeperRoutePlanningUpdateReqBean;
import com.mogo.och.sweeper.common.constant.SweeperConst;
import com.mogo.och.sweeper.common.database.MyDataBase;
import com.mogo.och.sweeper.common.database.bean.WeltDataBean;
import com.mogo.och.sweeper.common.view.DebugView;
import com.zhjt.mogo.adas.data.AiCloudTask;
import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable;
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask;
@@ -73,9 +73,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 +112,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() {
}
@@ -197,7 +197,8 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
@Override
public void onAutopilotRotting(MessagePad.GlobalPathResp routeList) {
if (null != routeList && routeList.getWayPointsList() != null && routeList.getWayPointsList().size() > 0) {
CallerLogger.d(M_SWEEPER + TAG, "onAutopilotRotting: " + printMessage(routeList));
CallerLogger.d(M_SWEEPER + TAG, "onAutopilotRotting: " + SweeperCloudTaskUtils.printMessage(routeList));
DebugView.Companion.printInfoMsg("[MAP全局规划回调] 回调getWayPointsList.Size=" + routeList.getWayPointsList().size());
// MAP返回路线信息在1秒内返回了2次这里加上数据过滤
long current = System.currentTimeMillis();
@@ -291,6 +292,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
if (StatusDescriptor.VR_MODE == descriptor) {
if (mControllerStatusCallback != null) {
mControllerStatusCallback.onVRModeChanged(isTrue);
DebugView.Companion.printInfoMsg("[VRMode变化] isVRMode=" + isTrue);
}
}
}
@@ -336,7 +338,13 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
SweeperTask.TaskInfo taskInfo) {
CallerLogger.d(M_SWEEPER + TAG,
"messageType: " + messageType.getNumber() + " sysTime" + sysTime + " reqNo" + reqNo + " onSweeperFutianCloudTask" + (taskInfo == null ? "null" : printMessage(taskInfo)) + " mSweeperTaskCallback" + mSweeperTaskCallback);
"messageType: " + messageType.getNumber() + " sysTime" + sysTime + " reqNo" + reqNo + " onSweeperFutianCloudTask" + (taskInfo == null ? "null" : SweeperCloudTaskUtils.printMessage(taskInfo)) + " mSweeperTaskCallback" + mSweeperTaskCallback);
DebugView.Companion.printInfoMsg("[云控]云端下发大任务messageType=" + messageType.getNumber()
+ ", sysTime=" + sysTime
+ ", reqNo=" + reqNo
+ ", taskInfo=("
+ (taskInfo == null ? "null" : "taskId=" + taskInfo.getTaskId() + ", taskName=" + taskInfo.getTaskName() + ", taskStatus=" + taskInfo.getTaskStatus().name())
+ ")");
if (mSweeperTaskCallback != null) {
msgTypeAndReqNo.put(messageType.getNumber(), reqNo);
mSweeperTaskCallback.onSweeperCloudTask(messageType, taskInfo);
@@ -348,7 +356,13 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
SweeperTaskConfirm.TaskConfirm taskConfirm) {
CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime" + sysTime + " reqNo" + reqNo + " " +
"onSweeperFutianCloudTaskConfirm" + printMessage(taskConfirm));
"onSweeperFutianCloudTaskConfirm" + SweeperCloudTaskUtils.printMessage(taskConfirm));
DebugView.Companion.printInfoMsg("[云控]云端下发子任务确认messageType=" + messageType.getNumber()
+ ", sysTime=" + sysTime
+ ", reqNo=" + reqNo
+ ", taskConfirm=("
+ (taskConfirm == null ? "null" : "taskId=" + taskConfirm.getTaskId() + ", subTaskId=" + taskConfirm.getSubTaskId() + ", isPop=" + taskConfirm.getIsPop())
+ ")");
if (mSweeperTaskCallback != null && taskConfirm != null) {
msgTypeAndReqNo.put(messageType.getNumber(), reqNo);
mSweeperTaskCallback.onSweeperCloudTaskConfirm(taskConfirm.getTaskId(), taskConfirm.getSubTaskId(), taskConfirm.getIsPop());
@@ -359,7 +373,13 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
public void onSweeperFutianCloudTaskStatus(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime,
SweeperTaskStatus.TaskStatusPush taskStatusPush) {
CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime" + sysTime + " reqNo" + reqNo + " " +
"onSweeperFutianCloudTaskStatus" + printMessage(taskStatusPush));
"onSweeperFutianCloudTaskStatus" + SweeperCloudTaskUtils.printMessage(taskStatusPush));
DebugView.Companion.printInfoMsg("[云控]云端下发子任务状态messageType=" + messageType.getNumber()
+ ", sysTime=" + sysTime
+ ", reqNo=" + reqNo
+ ", taskStatusPush=("
+ (taskStatusPush == null ? "null" : "taskId=" + taskStatusPush.getTaskId() + ", subTaskId=" + taskStatusPush.getSubTaskId() + ", taskStatus=" + taskStatusPush.getTaskStatus().name())
+ ")");
if (mSweeperTaskCallback != null && taskStatusPush != null) {
msgTypeAndReqNo.put(messageType.getNumber(), reqNo);
mSweeperTaskCallback.onSweeperCloudTaskStatus(taskStatusPush.getTaskId(), taskStatusPush.getSubTaskId(), taskStatusPush.getTaskStatus());
@@ -370,7 +390,13 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
public void onSweeperFutianCloudTaskStop(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime,
SweeperTaskStop.StopTaskReq stopTaskReq) {
CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime" + sysTime + " reqNo" + reqNo + " " +
"onSweeperFutianCloudTaskStop" + printMessage(stopTaskReq));
"onSweeperFutianCloudTaskStop" + SweeperCloudTaskUtils.printMessage(stopTaskReq));
DebugView.Companion.printInfoMsg("[云控]云端请求pad结束大任务messageType=" + messageType.getNumber()
+ ", sysTime=" + sysTime
+ ", reqNo=" + reqNo
+ ", stopTaskReq=("
+ (stopTaskReq == null ? "null" : "taskId=" + stopTaskReq.getTaskId() + ", type=" + stopTaskReq.getType() + ", isPop=" + stopTaskReq.getIsPop())
+ ")");
if (mSweeperTaskCallback != null && stopTaskReq != null) {
msgTypeAndReqNo.put(messageType.getNumber(), reqNo);
mSweeperTaskCallback.onSweeperCloudTaskStop(stopTaskReq.getTaskId(), stopTaskReq.getType(), stopTaskReq.getIsPop());
@@ -381,7 +407,13 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
public void onSweeperFutianCloudTaskSuspendResume(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime,
SweeperTaskSuspendResume.SuspendResumeTaskResp suspendResumeTaskResp) {
CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime" + sysTime + " reqNo" + reqNo + " " +
"onSweeperFutianCloudTaskSuspendResume" + printMessage(suspendResumeTaskResp));
"onSweeperFutianCloudTaskSuspendResume" + SweeperCloudTaskUtils.printMessage(suspendResumeTaskResp));
DebugView.Companion.printInfoMsg("[云控]pad请求挂起/恢复任务云端回执messageType=" + messageType.getNumber()
+ ", sysTime=" + sysTime
+ ", reqNo=" + reqNo
+ ", suspendResumeTaskResp=("
+ (suspendResumeTaskResp == null ? "null" : "taskId=" + suspendResumeTaskResp.getTaskId() + ", subTaskId=" + suspendResumeTaskResp.getSubTaskId() + ", code=" + suspendResumeTaskResp.getCode().name())
+ ")");
if (mSweeperTaskCallback != null && suspendResumeTaskResp != null) {
msgTypeAndReqNo.put(messageType.getNumber(), reqNo);
mSweeperTaskCallback.onSweeperCloudTaskSuspendResume(messageType, suspendResumeTaskResp.getTaskId(),
@@ -393,7 +425,13 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
public void onSweeperFutianCloudBootable(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime,
SweeperBootable.IsBootableResp isBootableResp) {
CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime" + sysTime + " reqNo" + reqNo + " " +
"onSweeperFutianCloudBootable" + printMessage(isBootableResp));
"onSweeperFutianCloudBootable" + SweeperCloudTaskUtils.printMessage(isBootableResp));
DebugView.Companion.printInfoMsg("[云控]pad请求启自驾云端回执messageType=" + messageType.getNumber()
+ ", sysTime=" + sysTime
+ ", reqNo=" + reqNo
+ ", isBootableResp=("
+ (isBootableResp == null ? "null" : "taskId=" + isBootableResp.getTaskId() + ", subTaskId=" + isBootableResp.getSubTaskId())
+ ")");
if (mSweeperTaskCallback != null && isBootableResp != null) {
msgTypeAndReqNo.put(messageType.getNumber(), reqNo);
mSweeperTaskCallback.onSweeperCloudBootable(isBootableResp.getTaskId(), isBootableResp.getSubTaskId(), isBootableResp);
@@ -404,7 +442,13 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
public void onSweeperFutianCloudBigTaskStatus(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime,
SweeperBigTaskStatus.BigTaskStatusPush bigTaskStatusPush) {
CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime" + sysTime + " reqNo" + reqNo + " " +
"onSweeperFutianCloudBigTaskStatus" + printMessage(bigTaskStatusPush));
"onSweeperFutianCloudBigTaskStatus" + SweeperCloudTaskUtils.printMessage(bigTaskStatusPush));
DebugView.Companion.printInfoMsg("[云控]云端下发大任务状态messageType=" + messageType.getNumber()
+ ", sysTime=" + sysTime
+ ", reqNo=" + reqNo
+ ", bigTaskStatusPush=("
+ (bigTaskStatusPush == null ? "null" : "taskId=" + bigTaskStatusPush.getTaskId() + ", taskStatus=" + bigTaskStatusPush.getTaskStatus().name() + ", isPop=" + bigTaskStatusPush.getIsPop())
+ ")");
if (mSweeperTaskCallback != null && bigTaskStatusPush != null) {
msgTypeAndReqNo.put(messageType.getNumber(), reqNo);
mSweeperTaskCallback.onSweeperCloudBigTaskStatus(bigTaskStatusPush.getTaskId(), bigTaskStatusPush.getTaskStatus(), bigTaskStatusPush.getIsPop());
@@ -415,7 +459,13 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
public void onSweeperFutianCloudTaskCloudSuspendResume(@NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime,
@Nullable SweeperTaskCloudSuspendResume.BigTaskActionPush bigTaskActionPush) {
CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime" + sysTime + " reqNo" + reqNo + " " +
"onSweeperFutianCloudTaskCloudSuspendResume" + printMessage(bigTaskActionPush));
"onSweeperFutianCloudTaskCloudSuspendResume" + SweeperCloudTaskUtils.printMessage(bigTaskActionPush));
DebugView.Companion.printInfoMsg("[云控]云端下发暂停/恢复指令messageType=" + messageType.getNumber()
+ ", sysTime=" + sysTime
+ ", reqNo=" + reqNo
+ ", bigTaskActionPush=("
+ (bigTaskActionPush == null ? "null" : "taskId=" + bigTaskActionPush.getTaskId() + ", action=" + bigTaskActionPush.getAction() + ", isPop=" + bigTaskActionPush.getIsPop())
+ ")");
if (mSweeperTaskCallback != null && bigTaskActionPush != null) {
msgTypeAndReqNo.put(messageType.getNumber(), reqNo);
mSweeperTaskCallback.onSweeperCloudBigTaskSuspendResume(bigTaskActionPush.getTaskId(), bigTaskActionPush.getAction(), bigTaskActionPush.getIsPop());
@@ -436,6 +486,8 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
if (mSweeperTaskCallback != null) {
mSweeperTaskCallback.onSweeperFutianCleanSystemState(cleanSystemState);
}
//1秒一次太频繁先删除这行日志
//DebugView.Companion.printInfoMsg("[域控]接收到上装系统状态并更新");
}
@Override
@@ -459,6 +511,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
// CallerLogger.INSTANCE.d(M_SWEEPER + TAG,
// "mSubTaskType" + mSubTaskType + "+ onSweeperFutianTaskIndexData" + printMessage(roboSweeperTaskIndex));
// handleWeltData(roboSweeperTaskIndex);
// DebugView.Companion.printInfoMsg("[域控]接收到贴边数据并更新");
}
/**
@@ -521,7 +574,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
SweeperTask.GetTaskReq getTaskReq = builder.build();
CallerLogger.d(M_SWEEPER + TAG,
"getCurrentTask:" + printMessage(getTaskReq) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.PadSendGetTaskReq.getNumber());
"getCurrentTask:" + SweeperCloudTaskUtils.printMessage(getTaskReq) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.PadSendGetTaskReq.getNumber());
getAutoPilotControlManager().sendSweeperGetTaskReq(reqNo, getTaskReq);
}
@@ -538,7 +591,10 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
getAutoPilotControlManager().sendSweeperStartTaskResp(reqNo, startTaskResp);
CallerLogger.d(M_SWEEPER + TAG,
"sendSweeperStartTaskResp:" + printMessage(startTaskResp) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.CloudPushTask.getNumber());
"sendSweeperStartTaskResp:" + SweeperCloudTaskUtils.printMessage(startTaskResp) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.CloudPushTask.getNumber());
DebugView.Companion.printInfoMsg("[云控]pad发送接收 云端下发大任务信息 回执给云端taskId=" + taskId
+ ", StartTaskCode=" + code
+ ", reqNo=" + reqNo);
}
/**
@@ -552,9 +608,13 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
builder.setCode(code);
SweeperTaskConfirm.TaskConfirmResp taskConfirmResp = builder.build();
String reqNo = msgTypeAndReqNo.get(AiCloudTask.MessageType.CloudPushTaskConfirm.getNumber());
CallerLogger.d(M_SWEEPER + TAG,
"sendSweeperTaskConfirmResp" + printMessage(taskConfirmResp) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.CloudPushTaskConfirm.getNumber());
getAutoPilotControlManager().sendSweeperTaskConfirmResp(reqNo, taskConfirmResp);
CallerLogger.d(M_SWEEPER + TAG,
"sendSweeperTaskConfirmResp" + SweeperCloudTaskUtils.printMessage(taskConfirmResp) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.CloudPushTaskConfirm.getNumber());
DebugView.Companion.printInfoMsg("[云控]pad发送接收 云端下发子任务pad确认 回执给云端taskId=" + taskId
+ ", subTaskId=" + subTaskId
+ ", TaskConfirmCode=" + code
+ ", reqNo=" + reqNo);
}
/**
@@ -572,8 +632,11 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
String reqNo = msgTypeAndReqNo.get(AiCloudTask.MessageType.CloudPushTaskStop.getNumber());
CallerLogger.d(M_SWEEPER + TAG,
"sendSweeperStopTaskResp" + printMessage(stopTaskResp) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.CloudPushTaskStop.getNumber());
"sendSweeperStopTaskResp" + SweeperCloudTaskUtils.printMessage(stopTaskResp) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.CloudPushTaskStop.getNumber());
getAutoPilotControlManager().sendSweeperStopTaskResp(reqNo, stopTaskResp);
DebugView.Companion.printInfoMsg("[云控]pad发送接收 云端请求pad结束大任务 回执给云端taskId=" + taskId
+ ", StopTaskCode=" + code
+ ", reqNo=" + reqNo);
}
/**
@@ -593,8 +656,12 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
String reqNo = SweeperCloudTaskUtils.getRequestId();
CallerLogger.d(M_SWEEPER + TAG,
"sendSweeperAutopilotBootable" + printMessage(isBootable) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.PadSendBootable.getNumber());
"sendSweeperAutopilotBootable" + SweeperCloudTaskUtils.printMessage(isBootable) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.PadSendBootable.getNumber());
getAutoPilotControlManager().sendSweeperAutopilotBootable(reqNo, isBootable);
DebugView.Companion.printInfoMsg("[云控]pad发送 请求进入自动驾驶 给云端taskId=" + taskId
+ ", subTaskId=" + subTaskId
+ ", lineId=" + lineId
+ ", reqNo=" + reqNo);
//SweeperCloudTaskUtils.mockSendCloudBootable();
}
@@ -612,8 +679,11 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
String reqNo = msgTypeAndReqNo.get(AiCloudTask.MessageType.CloudPushTaskSuspendResume.getNumber());
CallerLogger.d(M_SWEEPER + TAG,
"sendSweeperSuspendResumeTaskResp" + printMessage(resp) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.CloudPushTaskSuspendResume);
"sendSweeperSuspendResumeTaskResp" + SweeperCloudTaskUtils.printMessage(resp) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.CloudPushTaskSuspendResume);
getAutoPilotControlManager().sendSweeperCloudSuspendResumeTaskResp(reqNo, resp);
DebugView.Companion.printInfoMsg("[云控]pad发送接收 云端下发大任务暂停/恢复 回执给云端taskId=" + taskId
+ ", SuspendResumeCode=" + code
+ ", reqNo=" + reqNo);
}
public CallerAutoPilotControlManager getAutoPilotControlManager() {
@@ -631,7 +701,9 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
@Override
public void onAutopilotArriveAtStation(@Nullable MessagePad.ArrivalNotification arrivalNotification) {
DebugView.Companion.printInfoMsg("[MAP到站通知] 上报到站endLocation=("
+ ((arrivalNotification == null || arrivalNotification.getEndLocation() == null) ? "null" : arrivalNotification.getEndLocation().toString())
+ ")");
}
@Override
@@ -652,6 +724,9 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
getCurrentTask();
}, 10000);
}
DebugView.Companion.printInfoMsg(
"[域控连接状态变化] status=" + status
+ ", reason=" + reason);
//CallerLogger.d(M_SWEEPER + TAG, "onAutopilotIpcConnectStatusChanged status:" + status + " reason" + reason);
}
@@ -679,6 +754,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
public void onSweeperFutianCloudTaskUnknown(@NonNull byte[] bytes) {
String string = new String(bytes, StandardCharsets.UTF_8);
CallerLogger.d(M_SWEEPER + TAG, "onSweeperFutianCloudTaskUnknown:" + string);
DebugView.Companion.printInfoMsg("[云控]接收到云端未知类型消息Unknown=" + string);
}
@Override
@@ -690,12 +766,16 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
}
switch (state) {
case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE://不可自动驾驶
DebugView.Companion.printInfoMsg("[自驾状态变化] afterValue=STATUS_AUTOPILOT_DISABLEmeaning=不可自动驾驶");
break;
case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE://人工驾驶
DebugView.Companion.printInfoMsg("[自驾状态变化] afterValue=STATUS_AUTOPILOT_ENABLEmeaning=可自动驾驶,人工干预状态");
break;
case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING://自动驾驶中
DebugView.Companion.printInfoMsg("[自驾状态变化] afterValue=STATUS_AUTOPILOT_RUNNINGmeaning=自动驾驶中");
break;
case IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING://平行驾驶
DebugView.Companion.printInfoMsg("[自驾状态变化] afterValue=STATUS_PARALLEL_DRIVINGmeaning=平行驾驶中");
break;
default:
break;

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweepercloud.presenter;
package com.mogo.och.sweeper.cloud.presenter;
import androidx.annotation.NonNull;
@@ -10,13 +10,13 @@ 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.autopilotmanager.OCHAdasAbilityManager;
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.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.mogo.och.sweeper.common.bean.SweeperRoutePlanningUpdateReqBean;
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.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,4 +1,4 @@
package com.mogo.och.sweepercloud.ui.dialog
package com.mogo.och.sweeper.cloud.ui.dialog
import android.animation.ObjectAnimator
import android.animation.ValueAnimator
@@ -10,9 +10,8 @@ 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
import com.mogo.och.sweeper.R
import com.mogo.och.sweeper.cloud.view.CountDownView
/**
* 清扫车云控任务dialog基类
@@ -115,7 +114,7 @@ import com.mogo.och.sweepercloud.view.CountDownView
var middleStr: String = ""
var rightStr: String = ""
var countDownTime: Int = 0
var listener: SweeperCloudDialogClickListener? = null
var listener: com.mogo.och.sweeper.cloud.callback.SweeperCloudDialogClickListener? = null
fun build(context: Context): SweeperCloudDialog {
return SweeperCloudDialog(this, context)
}

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweepercloud.ui.dialog
package com.mogo.och.sweeper.cloud.ui.dialog
import android.animation.ObjectAnimator
import android.content.Context
@@ -7,7 +7,7 @@ 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 com.mogo.och.sweeper.R
import kotlinx.android.synthetic.main.dialog_sweeper_cloud_loading.*
/**

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweepercloud.util;
package com.mogo.och.sweeper.cloud.util;
import android.os.Environment;
import android.text.TextUtils;

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweepercloud.util
package com.mogo.och.sweeper.cloud.util
import android.content.Context
import android.util.Log
@@ -14,11 +14,8 @@ import com.mogo.map.overlay.point.Point
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.sweepercloud.R
import com.mogo.och.sweepercloud.callback.SweeperCloudDialogClickListener
import com.mogo.och.sweepercloud.constant.SweeperConst
import com.mogo.och.sweepercloud.model.SweeperTaskModel
import com.mogo.och.sweepercloud.ui.dialog.SweeperCloudDialog
import com.mogo.och.sweeper.R
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)
SweeperTaskModel.getInstance().getCurrentTask()
SweeperCloudTaskModel.getInstance().getCurrentTask()
}
/**
@@ -150,7 +147,7 @@ object SweeperCloudTaskUtils {
// subBuilder3.lineId = 126
// subBuilder3.lineName = "测试路线3"
// builder.addSubList(subBuilder3.build())
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"
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
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
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()
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({
SweeperTaskModel.getInstance().onSweeperFutianCloudBootable(
SweeperCloudTaskModel.getInstance().onSweeperFutianCloudBootable(
AiCloudTask.MessageType.PadSendBootable, "${System.currentTimeMillis()}",
System.currentTimeMillis(), builder.build()
)
@@ -251,7 +248,7 @@ object SweeperCloudTaskUtils {
val setMapMarkerRunnable = Runnable {
val builder =
Point.Options.Builder(
SweeperConst.TYPE_MARKER_SWEEPER_SUBTASK_START_END,
com.mogo.och.sweeper.common.constant.SweeperConst.TYPE_MARKER_SWEEPER_SUBTASK_START_END,
Level.MAP_MARKER
)
.setId(uuid)
@@ -277,7 +274,7 @@ object SweeperCloudTaskUtils {
//开启线程移除起终点marker设置
val removeMapMarkerRunnable = Runnable {
val overlayManager = CallerMapUIServiceManager.getOverlayManager()
overlayManager?.removeAllPointsInOwner(SweeperConst.TYPE_MARKER_SWEEPER_SUBTASK_START_END)
overlayManager?.removeAllPointsInOwner(com.mogo.och.sweeper.common.constant.SweeperConst.TYPE_MARKER_SWEEPER_SUBTASK_START_END)
}
OCHThreadPoolManager.getsInstance().execute(removeMapMarkerRunnable)
}
@@ -291,11 +288,11 @@ object SweeperCloudTaskUtils {
*/
@JvmStatic
fun createReceivedBigTaskInfoDialog(
context: Context?,
listener: SweeperCloudDialogClickListener?,
taskInfo: TaskInfo
): SweeperCloudDialog? {
val builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
context: Context?,
listener: com.mogo.och.sweeper.cloud.callback.SweeperCloudDialogClickListener?,
taskInfo: TaskInfo
): com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog? {
val builder: com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog.Builder = com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog.Builder()
val startCalendar = DateTimeUtil.formatLongToCalendar(taskInfo.taskStartTime)
val endCalendar = DateTimeUtil.formatLongToCalendar(taskInfo.taskEndTime)
builder.titleStr = "任务接取"
@@ -320,11 +317,11 @@ object SweeperCloudTaskUtils {
*/
@JvmStatic
fun createConfirmStartSubTaskDialog(
context: Context?,
listener: SweeperCloudDialogClickListener?,
subTaskInfo: SubTaskInfo
): SweeperCloudDialog? {
val builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
context: Context?,
listener: com.mogo.och.sweeper.cloud.callback.SweeperCloudDialogClickListener?,
subTaskInfo: SubTaskInfo
): com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog? {
val builder: com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog.Builder = com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog.Builder()
builder.titleStr = "子任务确认"
builder.contentStr = "请确认并执行子任务 ${subTaskInfo.subTaskName}"
builder.tipStr =
@@ -342,12 +339,12 @@ object SweeperCloudTaskUtils {
*/
@JvmStatic
fun createSweeperTaskEndDialog(
context: Context?,
listener: SweeperCloudDialogClickListener?,
stopTaskType: SweeperTaskStop.StopTaskType,
timeoutStr: String
): SweeperCloudDialog? {
val builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
context: Context?,
listener: com.mogo.och.sweeper.cloud.callback.SweeperCloudDialogClickListener?,
stopTaskType: SweeperTaskStop.StopTaskType,
timeoutStr: String
): com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog? {
val builder: com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog.Builder = com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog.Builder()
val titleStr = when (stopTaskType) {
SweeperTaskStop.StopTaskType.ADVANCE -> "任务中止"
SweeperTaskStop.StopTaskType.EXCEPTION -> "任务异常结束"
@@ -385,9 +382,9 @@ object SweeperCloudTaskUtils {
@JvmStatic
fun createSweeperTaskNormalEndDialog(
context: Context?,
listener: SweeperCloudDialogClickListener?
): SweeperCloudDialog? {
val builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
listener: com.mogo.och.sweeper.cloud.callback.SweeperCloudDialogClickListener?
): com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog? {
val builder: com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog.Builder = com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog.Builder()
builder.titleStr = "任务结束"
builder.contentStr = "任务已完成,干的漂亮!"
builder.tipStr = ""
@@ -404,11 +401,11 @@ object SweeperCloudTaskUtils {
*/
@JvmStatic
fun createSweeperTaskExceptionEndDialog(
context: Context?,
listener: SweeperCloudDialogClickListener?,
isCancel: Boolean
): SweeperCloudDialog? {
val builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
context: Context?,
listener: com.mogo.och.sweeper.cloud.callback.SweeperCloudDialogClickListener?,
isCancel: Boolean
): com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog? {
val builder: com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog.Builder = com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog.Builder()
builder.titleStr = "任务结束"
builder.contentStr = if (isCancel) "任务已取消!" else "任务已异常结束!"
builder.tipStr = ""
@@ -423,9 +420,9 @@ object SweeperCloudTaskUtils {
@JvmStatic
fun createSweeperTaskSuspendDialog(
context: Context?,
listener: SweeperCloudDialogClickListener?
): SweeperCloudDialog? {
val builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
listener: com.mogo.och.sweeper.cloud.callback.SweeperCloudDialogClickListener?
): com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog? {
val builder: com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog.Builder = com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog.Builder()
builder.titleStr = "任务暂停"
builder.contentStr = "云端暂停任务,注意车辆即将停车!"
builder.tipStr = "【云端任务恢复前不可启动自动驾驶】"
@@ -439,11 +436,11 @@ object SweeperCloudTaskUtils {
@JvmStatic
fun createSweeperTaskResumeDialog(
context: Context?,
listener: SweeperCloudDialogClickListener?,
contentStr: String
): SweeperCloudDialog? {
val builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
context: Context?,
listener: com.mogo.och.sweeper.cloud.callback.SweeperCloudDialogClickListener?,
contentStr: String
): com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog? {
val builder: com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog.Builder = com.mogo.och.sweeper.cloud.ui.dialog.SweeperCloudDialog.Builder()
builder.titleStr = "任务恢复"
builder.contentStr = contentStr
builder.tipStr = "【注意安全,坐稳扶好】"

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweepercloud.view
package com.mogo.och.sweeper.cloud.view
import android.content.Context
import android.os.Handler

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweepercloud.view;
package com.mogo.och.sweeper.cloud.view;
import android.content.Context;
import android.util.AttributeSet;

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweepercloud.view
package com.mogo.och.sweeper.cloud.view
import android.content.Context
import android.graphics.Color
@@ -6,11 +6,11 @@ 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.mogo.och.sweeper.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.*
import kotlinx.android.synthetic.main.sweeper_cloud_subtask_view.view.*
/**
* 子任务View
@@ -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_cloud_subtask_view, this)
}
/**

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweepercloud.view
package com.mogo.och.sweeper.cloud.view
import android.annotation.SuppressLint
import android.content.Context
@@ -10,23 +10,23 @@ import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.sweepercloud.R
import com.mogo.och.sweeper.R
import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon
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.currentSubTask
import kotlinx.android.synthetic.main.sweeper_current_task_info.view.lastSubTask
import kotlinx.android.synthetic.main.sweeper_current_task_info.view.preSubTask
import kotlinx.android.synthetic.main.sweeper_current_task_info.view.tvStartAuto
import kotlinx.android.synthetic.main.sweeper_current_task_info.view.tvTaskName
import kotlinx.android.synthetic.main.sweeper_current_task_info.view.tvTaskState
import kotlinx.android.synthetic.main.sweeper_current_task_info.view.tvTaskTime
import kotlinx.android.synthetic.main.sweeper_cloud_current_task_info.view.currentSubTask
import kotlinx.android.synthetic.main.sweeper_cloud_current_task_info.view.lastSubTask
import kotlinx.android.synthetic.main.sweeper_cloud_current_task_info.view.preSubTask
import kotlinx.android.synthetic.main.sweeper_cloud_current_task_info.view.tvStartAuto
import kotlinx.android.synthetic.main.sweeper_cloud_current_task_info.view.tvTaskName
import kotlinx.android.synthetic.main.sweeper_cloud_current_task_info.view.tvTaskState
import kotlinx.android.synthetic.main.sweeper_cloud_current_task_info.view.tvTaskTime
/**
* 清扫车当前任务信息展示
*/
class SweeperCurrentTaskInfoView : ConstraintLayout {
class SweeperCloudCurrentTaskInfoView : ConstraintLayout {
private val TAG: String = "SweeperCurrentTaskInfoView"
//当前任务操作菜单
@@ -53,7 +53,7 @@ class SweeperCurrentTaskInfoView : ConstraintLayout {
}
private fun initView(context: Context) {
LayoutInflater.from(context).inflate(R.layout.sweeper_current_task_info, this)
LayoutInflater.from(context).inflate(R.layout.sweeper_cloud_current_task_info, this)
updateTaskStateText(TaskStatus.TO_START)
}
@@ -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

@@ -1,4 +1,4 @@
package com.mogo.och.sweepercloud.view
package com.mogo.och.sweeper.cloud.view
import android.annotation.SuppressLint
import android.content.Context
@@ -18,14 +18,14 @@ 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 com.mogo.och.sweeper.R
import planning.RoboSweeperTaskIndexOuterClass
import kotlin.math.roundToInt
/**
* 车辆基本信息方向盘下方的档位 转向灯 限速 速度 电量 水量
*/
class SweeperTrafficDataView : ConstraintLayout,
class SweeperCloudTrafficDataView : ConstraintLayout,
IMoGoBatteryManagementSystemListener,
IMoGoChassisLamplightListener,
IMoGoChassisGearStateListener,
@@ -64,7 +64,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_cloud_traffic_data, this)
tapPositionView = findViewById(R.id.sweeperTrafficPosition)
speedImage = findViewById(R.id.sweeperSpeedImage)
speedTextView = findViewById(R.id.sweeperSpeedText)

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweepercloud.view
package com.mogo.och.sweeper.cloud.view
import android.content.Context
import android.util.AttributeSet
@@ -9,18 +9,22 @@ 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.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,ICleaningModeStateCallback {
class SweeperCloudWorkModeView : ConstraintLayout {
private var isSelectPureSweepMode: Boolean = false
private val TAG = "SweeperWorkModeView"
@@ -46,7 +50,7 @@ class SweeperWorkModeView : ConstraintLayout,ICleaningModeStateCallback {
/**
* 设置view
*/
fun setTrafficDataView(trafficDataView: SweeperTrafficDataView){
fun setTrafficDataView(trafficDataView: com.mogo.och.sweeper.cloud.view.SweeperCloudTrafficDataView){
//清扫模式选择面板打开关闭处理
ivOpenOperatePanel.setOnClickListener {
if (mOperatePanelPopWindow?.isShowing != true) {
@@ -126,7 +130,7 @@ class SweeperWorkModeView : ConstraintLayout,ICleaningModeStateCallback {
}
}
override fun cleaningModeState(operateState: OperateStateEnum, cleanSystemState: SweeperFuTianTaskSystemStates?, isSelectPureSweepMode: Boolean) {
fun cleaningModeState(operateState: OperateStateEnum, cleanSystemState: SweeperFuTianTaskSystemStates?, isSelectPureSweepMode: Boolean) {
this.isSelectPureSweepMode = isSelectPureSweepMode
this.operateState=operateState
setShowOrHideCleanSystemState(operateState, cleanSystemState)

View File

@@ -1,9 +1,7 @@
package com.mogo.och.sweeper.bean;
package com.mogo.och.sweeper.common.bean;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* Created by pangfan on 2021/8/19
*

View File

@@ -1,6 +1,6 @@
package com.mogo.och.sweepercloud.callback;
package com.mogo.och.sweeper.common.callback;
import com.mogo.och.sweepercloud.constant.OperateStateEnum;
import com.mogo.och.sweeper.common.constant.OperateStateEnum;
import chassis.ChassisStatesOuterClass;

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweepercloud.callback;
package com.mogo.och.sweeper.common.callback;
/**
* Created on 2021/9/8

View File

@@ -1,8 +1,8 @@
package com.mogo.och.sweepercloud.callback
package com.mogo.och.sweeper.common.callback
import com.amap.api.maps.model.LatLng
import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean
import com.mogo.och.sweepercloud.database.bean.WeltDataBean
import com.mogo.och.sweeper.common.bean.SweeperRoutePlanningUpdateReqBean
import com.mogo.och.sweeper.common.database.bean.WeltDataBean
import java.util.ArrayList
interface ISweeperTaskDataToFragmentCallback {

View File

@@ -1,6 +1,6 @@
package com.mogo.och.sweeper.callback
package com.mogo.och.sweeper.common.callback
import com.mogo.och.sweeper.bean.SweeperRoutePlanningUpdateReqBean
import com.mogo.och.sweeper.common.bean.SweeperRoutePlanningUpdateReqBean
import java.util.ArrayList
interface ISweeperTaskRouteCallback {

View File

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

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweepercloud.constant
package com.mogo.och.sweeper.common.constant
/**
* 上装面板操作状态

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweepercloud.constant
package com.mogo.och.sweeper.common.constant
import com.mogo.commons.debug.DebugConfig
@@ -54,6 +54,10 @@ class SweeperConst {
const val EVENT_KEY_AP_UNABLE_START_REASON = "event_key_och_bus_ap_unable_start_reason"
const val EVENT_PARAM_UNABLE_START_REASON = "unable_start_reason";
// 埋点Key: 切换清扫业务模式
const val EVENT_KEY_CHANGE_CURRENT_SWEEPER_MODE = "event_key_och_change_current_sweeper_mode"
const val EVENT_PARAM_CHANGE_CURRENT_SWEEPER_MODE_CURRENT_MODE = "event_param_och_change_current_sweeper_mode_current_mode"
/**
* 子任务起终点Marker类型
*/

View File

@@ -1,8 +1,8 @@
package com.mogo.och.sweeper.database;
package com.mogo.och.sweeper.common.database;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.och.sweeper.database.bean.WeltDataBean;
import com.mogo.och.sweeper.database.dao.WeltDataDao;
import com.mogo.och.sweeper.common.database.dao.WeltDataDao;
import com.mogo.och.sweeper.common.database.bean.WeltDataBean;
import androidx.room.Database;
import androidx.room.Room;

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweepercloud.database.bean;
package com.mogo.och.sweeper.common.database.bean;
import java.io.Serializable;

View File

@@ -1,7 +1,6 @@
package com.mogo.och.sweepercloud.database.dao;
package com.mogo.och.sweeper.common.database.dao;
import com.mogo.och.sweepercloud.database.bean.WeltDataBean;
import com.mogo.och.sweepercloud.database.bean.WeltDataBean;
import com.mogo.och.sweeper.common.database.bean.WeltDataBean;
import java.util.List;
@@ -10,7 +9,7 @@ import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;
import static com.mogo.och.sweepercloud.database.bean.WeltDataBean.WeltDataTable;
import static com.mogo.och.sweeper.common.database.bean.WeltDataBean.WeltDataTable;
@Dao
public interface WeltDataDao {

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.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.fragment;
package com.mogo.och.sweeper.common.fragment;
import android.os.Bundle;
import android.view.View;
@@ -43,21 +43,21 @@ public class SweeperAmapNaviFragment extends BaseSweeperUIFragment implements AM
protected void initViews(Bundle savedInstanceState) {
super.initViews(savedInstanceState);
if (mAMapNaviView != null)
mAMapNaviView.onCreate(savedInstanceState);
mAMapNaviView.onCreate(savedInstanceState);
}
@Override
public void onResume() {
super.onResume();
if (mAMapNaviView != null)
mAMapNaviView.onResume();
mAMapNaviView.onResume();
}
@Override
public void onPause() {
super.onPause();
if (mAMapNaviView != null)
mAMapNaviView.onPause();
mAMapNaviView.onPause();
}
@Override

View File

@@ -1,13 +1,12 @@
package com.mogo.och.sweepercloud.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.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.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 kotlinx.android.synthetic.main.fragment_welt_map_overview.*
import kotlinx.android.synthetic.main.sweeper_welt_map_overview.*
@@ -16,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"
@@ -28,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)
@@ -43,7 +37,7 @@ class WeltMapOverViewFragment : BaseFragment(), ISweeperTaskDataToFragmentCallba
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 routeList = bundle.getSerializable("routeList") as? ArrayList<com.mogo.och.sweeper.common.bean.SweeperRoutePlanningUpdateReqBean.Result>
val progress = bundle.getString("progress")
routeList?.let {
weltMapOverView?.setRouteList(it)
@@ -67,13 +61,12 @@ class WeltMapOverViewFragment : BaseFragment(), ISweeperTaskDataToFragmentCallba
companion object {
@JvmStatic
fun newInstance(
mIWeltMapSwitchToSmallCallBack: IWeltMapSwitchToSmallCallback,
mCurrentTaskEndStation:LatLng?,
weltDataList: ArrayList<WeltDataBean>?,
latLngs: ArrayList<LatLng>?,
routeList: ArrayList<SweeperRoutePlanningUpdateReqBean.Result>?,
progress:String?,
sweeperFragment: SweeperFragment
mIWeltMapSwitchToSmallCallBack: IWeltMapSwitchToSmallCallback,
mCurrentTaskEndStation:LatLng?,
weltDataList: ArrayList<WeltDataBean>?,
latLngs: ArrayList<LatLng>?,
routeList: ArrayList<com.mogo.och.sweeper.common.bean.SweeperRoutePlanningUpdateReqBean.Result>?,
progress:String?
): WeltMapOverViewFragment {
val args = Bundle()
args.putSerializable("weltDataList", weltDataList)
@@ -83,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
}
@@ -119,7 +111,7 @@ class WeltMapOverViewFragment : BaseFragment(), ISweeperTaskDataToFragmentCallba
weltMapOverView?.setProgress(progress)
}
override fun setRouteList(routeList: java.util.ArrayList<SweeperRoutePlanningUpdateReqBean.Result>) {
override fun setRouteList(routeList: java.util.ArrayList<com.mogo.och.sweeper.common.bean.SweeperRoutePlanningUpdateReqBean.Result>) {
weltMapOverView?.setRouteList(routeList)
}

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.receiver;
package com.mogo.och.sweeper.common.receiver;
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS;
@@ -7,7 +7,7 @@ import android.content.Context;
import android.content.Intent;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.och.sweeper.constant.SweeperConst;
import com.mogo.och.sweeper.common.constant.SweeperConst;
/**
* 测试小巴车的场景

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.util;
package com.mogo.och.sweeper.common.util;
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_SWEEPER;
@@ -14,7 +14,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.utilcode.util.DateTimeUtils;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.och.sweeper.constant.SweeperConst;
import com.mogo.och.sweeper.common.constant.SweeperConst;
import java.util.HashMap;
@@ -146,4 +146,10 @@ public class SweeperAnalyticsManager {
params.put(SweeperConst.EVENT_PARAM_UNABLE_START_REASON, reason);
MogoAnalyticUtils.INSTANCE.track(SweeperConst.EVENT_KEY_AP_UNABLE_START_REASON, params);
}
public void trackSweeperModeChangeEvent(String currentMode) {
HashMap<String, Object> params = new HashMap<>();
params.put(SweeperConst.EVENT_PARAM_CHANGE_CURRENT_SWEEPER_MODE_CURRENT_MODE, currentMode);
MogoAnalyticUtils.INSTANCE.track(SweeperConst.EVENT_KEY_CHANGE_CURRENT_SWEEPER_MODE, params);
}
}

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweepercloud.util;
package com.mogo.och.sweeper.common.util;
import chassis.ChassisStatesOuterClass;
import chassis.SpecialVehicleTaskCmdOuterClass;

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweepercloud.util;
package com.mogo.och.sweeper.common.util;
import android.content.Context;

View File

@@ -0,0 +1,137 @@
package com.mogo.och.sweeper.common.view
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.text.SpannableString
import android.text.Spanned
import android.text.method.ScrollingMovementMethod
import android.text.style.ForegroundColorSpan
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
import androidx.lifecycle.ProcessLifecycleOwner
import androidx.lifecycle.lifecycleScope
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.mogo.commons.utils.MogoAnalyticUtils
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.main.MainMoGoApplication
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.sweeper.R
import kotlinx.android.synthetic.main.sweeper_debug_view_content.view.currentSweeperModeTextView
import kotlinx.android.synthetic.main.sweeper_debug_view_content.view.debugLogHistoryTextView
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class DebugView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0, defStyleRes: Int = 0
) : LinearLayout(context, attrs, defStyleAttr, defStyleRes) {
companion object {
const val TAG = "DebugView"
private const val ANALYTICS_EVENT_TYPE_DRIVER_SWEEPER_OPERATION_PROCESS_KEY_NODE_LOG =
"och.driver.sweeper.operation.process.key.node.log"
const val BROADCAST_ACTION = "com.mogo.och.driver.debugview.show"
const val BROADCAST_DATA_SHOW = "isShow"
private var logHistoryTextView: TextView? = null
fun printInfoMsg(msg: String) {
printMsg("Info $msg", MainMoGoApplication.getApp().getColor(R.color.background_info))
trackEvent("Info", msg)
}
fun printWarnMsg(msg: String) {
printMsg("Warn $msg", MainMoGoApplication.getApp().getColor(R.color.background_warn))
trackEvent("Warn", msg)
}
fun printErrorMsg(msg: String) {
printMsg("Error $msg", MainMoGoApplication.getApp().getColor(R.color.background_error))
trackEvent("Error", msg)
}
private fun printMsg(msg: String, textColor: Int) {
logHistoryTextView?.also {
val msg = "${currentDateTimeString()} $msg"
val spannableMsg = SpannableString(msg)
spannableMsg.setSpan(
ForegroundColorSpan(textColor), 0, msg.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
UiThreadHandler.post({
it.append("\n")
it.append(spannableMsg)
val offset: Int = it.lineCount * it.lineHeight
if (offset > it.height) {
it.scrollTo(0, offset - it.height)
}
}, UiThreadHandler.MODE.QUEUE)
}
}
/**
* 上报埋点
*/
private fun trackEvent(level: String, msg: String) {
ProcessLifecycleOwner.get().lifecycleScope.launch(Dispatchers.IO) {
val map: MutableMap<String, Any> = HashMap()
map["level"] = level
map["msg"] = msg
MogoAnalyticUtils.track(ANALYTICS_EVENT_TYPE_DRIVER_SWEEPER_OPERATION_PROCESS_KEY_NODE_LOG, map)
}
}
private fun currentDateTimeString(): String {
return DateTimeUtil.formatCalendarToString(
DateTimeUtil.formatLongToCalendar(System.currentTimeMillis()),
DateTimeUtil.yyyy_MM_dd_HH_mm_ss
)
}
}
private val broadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (BROADCAST_ACTION == intent.action) {
val isShow = intent.getBooleanExtra(BROADCAST_DATA_SHOW, false)
visibility = if (isShow) VISIBLE else GONE
}
}
}
init {
initBroadcastReceiver()
LayoutInflater.from(context).inflate(R.layout.sweeper_debug_view_content, this, true)
debugLogHistoryTextView.movementMethod = ScrollingMovementMethod.getInstance()
visibility = GONE
logHistoryTextView = debugLogHistoryTextView
}
private fun initBroadcastReceiver() {
val intentFilter = IntentFilter()
intentFilter.addAction(BROADCAST_ACTION)
LocalBroadcastManager.getInstance(context).registerReceiver(broadcastReceiver, intentFilter)
}
fun toggleDebugView() {
visibility = if (visibility == View.VISIBLE) View.GONE
else View.VISIBLE
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
initView()
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
}
fun initView() {
currentSweeperModeTextView.text = "当前清扫业务模式:${FunctionBuildConfig.sweeperCurrentMode}"
}
}

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.ui.dialog
package com.mogo.och.sweeper.common.view
import android.content.Context
import android.widget.TextView
@@ -16,7 +16,7 @@ class SweeperManualDrivingDialog: BaseFloatDialog, LifecycleObserver {
private var clickListener: ClickListener? = null
constructor(builder: Builder,context: Context) : super(context) {
constructor(builder: Builder, context: Context) : super(context) {
commonTips?.text = builder.tipsStr
commonConfirm?.text = builder.confirmStr
}
@@ -53,12 +53,12 @@ class SweeperManualDrivingDialog: BaseFloatDialog, LifecycleObserver {
class Builder{
var tipsStr:String = ""
var confirmStr:String = ""
fun tips(tips: String) : Builder{
fun tips(tips: String) : Builder {
this.tipsStr = tips
return this
}
fun confirmStr(commit: String) : Builder{
fun confirmStr(commit: String) : Builder {
this.confirmStr = commit
return this
}

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.ui.dialog
package com.mogo.och.sweeper.common.view
import android.content.Context
import android.widget.TextView
@@ -17,7 +17,7 @@ class SweeperNoTitleCommonDialog: BaseFloatDialog, LifecycleObserver {
private var clickListener: ClickListener? = null
constructor(builder: Builder,context: Context) : super(context) {
constructor(builder: Builder, context: Context) : super(context) {
commonTips?.text = builder.tipsStr
commonCancel?.text = builder.cancelStr
commonConfirm?.text = builder.confirmStr
@@ -62,17 +62,17 @@ class SweeperNoTitleCommonDialog: BaseFloatDialog, LifecycleObserver {
var tipsStr:String = ""
var confirmStr:String = ""
var cancelStr:String = ""
fun tips(tips: String) : Builder{
fun tips(tips: String) : Builder {
this.tipsStr = tips
return this
}
fun confirmStr(commit: String) : Builder{
fun confirmStr(commit: String) : Builder {
this.confirmStr = commit
return this
}
fun cancelStr(cancel: String) : Builder{
fun cancelStr(cancel: String) : Builder {
this.cancelStr = cancel
return this
}

View File

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

View File

@@ -1,14 +1,4 @@
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;
package com.mogo.och.sweeper.common.view;
import android.animation.ObjectAnimator;
import android.content.Context;
@@ -31,14 +21,11 @@ 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 com.mogo.och.sweeper.common.callback.ICleaningModeStateCallback;
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.NoTouchConstraintLayout;
import java.util.Arrays;
import java.util.HashMap;
@@ -47,11 +34,6 @@ 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
*/

View File

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

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.view
package com.mogo.och.sweeper.common.view
import android.animation.AnimatorSet
import android.animation.ObjectAnimator

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweepercloud.view;
package com.mogo.och.sweeper.common.view;
import android.content.Context;
import android.graphics.Canvas;

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.view
package com.mogo.och.sweeper.common.view
import android.content.Context
import android.graphics.Color
@@ -20,10 +20,10 @@ 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.sweeper.R
import com.mogo.och.sweeper.bean.SweeperRoutePlanningUpdateReqBean
import com.mogo.och.sweeper.constant.SweeperConst
import com.mogo.och.sweeper.database.bean.WeltDataBean
import com.mogo.och.sweeper.util.SweeperMapAssetStyleUtil
import com.mogo.och.sweeper.common.bean.SweeperRoutePlanningUpdateReqBean
import com.mogo.och.sweeper.common.constant.SweeperConst
import com.mogo.och.sweeper.common.database.bean.WeltDataBean
import com.mogo.och.sweeper.common.util.SweeperMapAssetStyleUtil
import kotlinx.android.synthetic.main.sweeper_welt_map_overview.view.*
/**

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweepercloud.view
package com.mogo.och.sweeper.common.view
import android.content.Context
import android.graphics.Color
@@ -19,11 +19,8 @@ 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 com.mogo.och.sweeper.common.database.bean.WeltDataBean
import com.mogo.och.sweeper.R
import kotlinx.android.synthetic.main.sweeper_welt_small_map_view.view.*
@@ -120,8 +117,8 @@ class WeltSmallMapView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener {
// 加载自定义样式
val customMapStyleOptions = CustomMapStyleOptions()
.setEnable(true)
.setStyleData(SweeperMapAssetStyleUtil.getAssetsStyle(context, "map_style.data"))
.setStyleExtraData(SweeperMapAssetStyleUtil.getAssetsExtraStyle(context, "map_style_extra.data"))
.setStyleData(com.mogo.och.sweeper.common.util.SweeperMapAssetStyleUtil.getAssetsStyle(context, "map_style.data"))
.setStyleExtraData(com.mogo.och.sweeper.common.util.SweeperMapAssetStyleUtil.getAssetsExtraStyle(context, "map_style_extra.data"))
// 设置自定义样式
mAMap?.setCustomMapStyle(customMapStyleOptions)
mAMap?.setOnMapLoadedListener(AMap.OnMapLoadedListener {
@@ -129,8 +126,8 @@ class WeltSmallMapView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener {
// 加载自定义样式
val customMapStyleOptions = CustomMapStyleOptions()
.setEnable(true)
.setStyleData(SweeperMapAssetStyleUtil.getAssetsStyle(context, "map_style.data"))
.setStyleExtraData(SweeperMapAssetStyleUtil.getAssetsExtraStyle(context, "map_style_extra.data"))
.setStyleData(com.mogo.och.sweeper.common.util.SweeperMapAssetStyleUtil.getAssetsStyle(context, "map_style.data"))
.setStyleExtraData(com.mogo.och.sweeper.common.util.SweeperMapAssetStyleUtil.getAssetsExtraStyle(context, "map_style_extra.data"))
// 设置自定义样式
mAMap?.setCustomMapStyle(customMapStyleOptions)
mAMap?.setPointToCenter(sweeperSmallTextureMapView.width / 2, sweeperSmallTextureMapView.height / 2)
@@ -184,7 +181,7 @@ class WeltSmallMapView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener {
}
}
if (weltDataBean.weltDistance == SweeperConst.NONWELT) {//非贴边
if (weltDataBean.weltDistance == com.mogo.och.sweeper.common.constant.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))
@@ -249,7 +246,7 @@ class WeltSmallMapView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener {
/**
* 设置任务轨迹数据
*/
fun setRouteList(routeList: ArrayList<SweeperRoutePlanningUpdateReqBean.Result>) {
fun setRouteList(routeList: ArrayList<com.mogo.och.sweeper.common.bean.SweeperRoutePlanningUpdateReqBean.Result>) {
val routeCoordinatesLatLngs = mutableListOf<LatLng>()
for (i in routeList.indices) {
routeCoordinatesLatLngs.add(LatLng(routeList[i].latitude, routeList[i].longitude))

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.bean;
package com.mogo.och.sweeper.operate.bean;
import com.mogo.eagle.core.data.BaseData;

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.bean
package com.mogo.och.sweeper.operate.bean
import com.mogo.cloud.passport.MoGoAiCloudClientConfig

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.bean
package com.mogo.och.sweeper.operate.bean
/**
* 子任务信息

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.bean;
package com.mogo.och.sweeper.operate.bean;
public class SweeperSubTaskDetailBean {
private int id; //子任务id

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.callback;
package com.mogo.och.sweeper.operate.callback;
import com.mogo.eagle.core.data.map.MogoLocation;

View File

@@ -1,27 +1,27 @@
package com.mogo.och.sweeper.callback
package com.mogo.och.sweeper.operate.callback
import com.mogo.och.sweeper.bean.SweeperMainTaskBean
import com.mogo.och.sweeper.bean.SweeperRoutePlanningUpdateReqBean
import com.mogo.och.sweeper.bean.SweeperSubTaskBean
import com.mogo.och.sweeper.bean.SweeperSubTaskDetailBean
import com.mogo.och.sweeper.constant.SubTaskTypeEnum
import com.mogo.och.sweeper.constant.TaskStatusEnum
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.bean.SweeperSubTaskDetailBean
import com.mogo.och.sweeper.operate.constant.SubTaskTypeEnum
import com.mogo.och.sweeper.operate.constant.TaskStatusEnum
import java.util.ArrayList
/**
* @author: wangmingjun
* @date: 2021/10/22
*/
interface ISweeperTaskCallback {
interface ISweeperOperateTaskCallback {
/**
* 获取主任务列表
*/
fun setMainTaskList(mainTaskBeanList: MutableList<SweeperMainTaskBean>?,refresh:Boolean)
fun setMainTaskList(mainTaskBeanList: MutableList<SweeperMainTaskBean>?, refresh:Boolean)
/**
* 获取子任务列表
*/
fun setSubTaskBean(subTaskBean: SweeperSubTaskBean,isWorkingSubTask:Boolean)
fun setSubTaskBean(subTaskBean: SweeperSubTaskBean, isWorkingSubTask:Boolean)
/**
* 更新子任务状态

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.constant
package com.mogo.och.sweeper.operate.constant
/**
* 任务类型

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.constant
package com.mogo.och.sweeper.operate.constant
/**
* 当前任务操作菜单

View File

@@ -1,5 +1,6 @@
package com.mogo.och.sweeper.fragment;
package com.mogo.och.sweeper.operate.fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@@ -7,12 +8,17 @@ 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 androidx.localbroadcastmanager.content.LocalBroadcastManager;
import com.amap.api.maps.model.LatLng;
import com.amap.api.navi.model.NaviLatLng;
import com.mogo.commons.mvp.IView;
import com.mogo.commons.mvp.MvpFragment;
import com.mogo.commons.mvp.Presenter;
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener;
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;
@@ -29,22 +35,20 @@ import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.map.uicontroller.VisualAngleMode;
import com.mogo.och.common.module.map.AmapNaviToDestinationModel;
import com.mogo.och.sweeper.R;
import com.mogo.och.sweeper.bean.SweeperRoutePlanningUpdateReqBean;
import com.mogo.och.sweeper.callback.ISweeperTaskDataToFragmentCallback;
import com.mogo.och.sweeper.callback.IWeltMapSwitchToSmallCallback;
import com.mogo.och.sweeper.database.bean.WeltDataBean;
import com.mogo.och.sweeper.view.SweeperTrafficDataView;
import com.mogo.och.sweeper.view.WeltSmallMapView;
import com.mogo.och.sweeper.common.bean.SweeperRoutePlanningUpdateReqBean;
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.common.fragment.SweeperAmapNaviFragment;
import com.mogo.och.sweeper.common.fragment.WeltMapOverViewFragment;
import com.mogo.och.sweeper.common.view.DebugView;
import com.mogo.och.sweeper.common.view.WeltSmallMapView;
import com.mogo.och.sweeper.operate.view.SweeperOperateTrafficDataView;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.Group;
import androidx.fragment.app.FragmentTransaction;
/**
* 网约车基础Fragment主要负责布局通用界面处理站点面板和通话面板互斥情况
* <p>
@@ -52,7 +56,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 +73,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
@@ -127,23 +131,21 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
setMessageBox();
//设置左下角四个按钮监听事件
setBottomBtnListener();
// 模拟 不可自动驾驶目前场景是刚开机adas还未和工控机连接
findViewById(R.id.btnAutopilotDisable).setOnClickListener(view ->
debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE)
//打开调试面板
findViewById(R.id.btnOpenDebugView).setOnClickListener(view -> {
Intent intent = new Intent();
intent.setAction(DebugView.BROADCAST_ACTION);
intent.putExtra(DebugView.BROADCAST_DATA_SHOW, true);
LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent);
}
);
// 模拟 可自动驾驶工控机连接正常且处于人工干预状态
findViewById(R.id.btnAutopilotEnable).setOnClickListener(view ->
debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE)
);
// 模拟 自动驾驶能力自动驾驶中可能是停车可能是行进但是是机器在处理车的前进后退不是人
findViewById(R.id.btnAutopilotRunning).setOnClickListener(view ->
debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING)
);
// 模拟 结束子任务
findViewById(R.id.btnEndTask).setOnClickListener(view ->
debugEndSubTask()
//关闭调试面板
findViewById(R.id.btnCloseDebugView).setOnClickListener(view -> {
Intent intent = new Intent();
intent.setAction(DebugView.BROADCAST_ACTION);
intent.putExtra(DebugView.BROADCAST_DATA_SHOW, false);
LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent);
}
);
mTrafficDataView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
@@ -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,4 +1,4 @@
package com.mogo.och.sweeper.fragment
package com.mogo.och.sweeper.operate.fragment
import android.graphics.Color
import android.os.Bundle
@@ -17,18 +17,21 @@ 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.bean.*
import com.mogo.och.sweeper.constant.SubTaskTypeEnum
import com.mogo.och.sweeper.constant.TaskStatusEnum
import com.mogo.och.sweeper.database.MyDataBase
import com.mogo.och.sweeper.presenter.SweeperPresenter
import com.mogo.och.sweeper.ui.adapter.TaskListAdapter
import com.mogo.och.sweeper.ui.dialog.SweeperManualDrivingDialog
import com.mogo.och.sweeper.ui.dialog.SweeperNoTitleCommonDialog
import com.mogo.och.sweeper.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 com.mogo.och.sweeper.operate.constant.SubTaskTypeEnum
import com.mogo.och.sweeper.operate.constant.TaskStatusEnum
import com.mogo.och.sweeper.common.database.MyDataBase
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.SweeperOperatePresenter
import com.mogo.och.sweeper.operate.ui.adapter.TaskListAdapter
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_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
@@ -36,10 +39,10 @@ import kotlin.math.roundToInt
/**
* 清扫车主界面
*/
class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresenter?>(), MenuPopWindow.OnMenuItemOnClickListener {
class SweeperOperateFragment : BaseSweeperOperateTabFragment<SweeperOperateFragment?, SweeperOperatePresenter?>(), MenuPopWindow.OnMenuItemOnClickListener {
companion object {
const val TAG = "SweeperFragment"
const val TAG = "SweeperOperateFragment"
}
private var mAdapter: TaskListAdapter? = null
@@ -80,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?) {
@@ -90,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
}
/**
@@ -179,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,8 +1,10 @@
package com.mogo.och.sweeper.model;
package com.mogo.och.sweeper.operate.model;
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_SWEEPER;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.util.Log;
import androidx.annotation.NonNull;
@@ -12,6 +14,8 @@ import com.amap.api.maps.model.LatLng;
import com.elegant.network.utils.GsonUtil;
import com.mogo.aicloud.services.socket.IMogoOnMessageListener;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.commons.module.intent.IMogoIntentListener;
import com.mogo.commons.module.intent.IntentManager;
import com.mogo.commons.module.status.IMogoStatusChangedListener;
import com.mogo.commons.module.status.MogoStatusManager;
import com.mogo.commons.module.status.StatusDescriptor;
@@ -40,21 +44,22 @@ import com.mogo.och.common.module.utils.PinYinUtil;
import com.mogo.och.common.module.utils.ToastUtilsOch;
import com.mogo.och.common.module.voice.VoiceNotice;
import com.mogo.och.sweeper.R;
import com.mogo.och.sweeper.bean.BaseResponse;
import com.mogo.och.sweeper.bean.SubInfo;
import com.mogo.och.sweeper.bean.SweeperMainTaskBean;
import com.mogo.och.sweeper.bean.SweeperRoutePlanningUpdateReqBean;
import com.mogo.och.sweeper.bean.SweeperSubTaskBean;
import com.mogo.och.sweeper.bean.SweeperSubTaskDetailBean;
import com.mogo.och.sweeper.callback.ISweeperADASStatusCallback;
import com.mogo.och.sweeper.callback.ISweeperControllerStatusCallback;
import com.mogo.och.sweeper.callback.ISweeperTaskCallback;
import com.mogo.och.sweeper.constant.SubTaskTypeEnum;
import com.mogo.och.sweeper.constant.SweeperConst;
import com.mogo.och.sweeper.constant.TaskStatusEnum;
import com.mogo.och.sweeper.net.SweeperServiceManager;
import com.mogo.och.sweeper.util.SweeperAnalyticsManager;
import com.mogo.och.sweeper.util.SweeperTrajectoryManager;
import com.mogo.och.sweeper.common.bean.SweeperRoutePlanningUpdateReqBean;
import com.mogo.och.sweeper.common.callback.ISweeperADASStatusCallback;
import com.mogo.och.sweeper.common.constant.SweeperConst;
import com.mogo.och.sweeper.common.util.SweeperAnalyticsManager;
import com.mogo.och.sweeper.common.view.DebugView;
import com.mogo.och.sweeper.operate.bean.BaseResponse;
import com.mogo.och.sweeper.operate.bean.SubInfo;
import com.mogo.och.sweeper.operate.bean.SweeperMainTaskBean;
import com.mogo.och.sweeper.operate.bean.SweeperSubTaskBean;
import com.mogo.och.sweeper.operate.bean.SweeperSubTaskDetailBean;
import com.mogo.och.sweeper.operate.callback.ISweeperControllerStatusCallback;
import com.mogo.och.sweeper.operate.callback.ISweeperOperateTaskCallback;
import com.mogo.och.sweeper.operate.constant.SubTaskTypeEnum;
import com.mogo.och.sweeper.operate.constant.TaskStatusEnum;
import com.mogo.och.sweeper.operate.net.SweeperOperateServiceManager;
import com.mogo.och.sweeper.operate.util.SweeperTrajectoryManager;
import org.jetbrains.annotations.NotNull;
@@ -73,9 +78,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 +88,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 +110,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() {
}
@@ -137,6 +142,9 @@ public class SweeperTaskModel {
OCHSocketMessageManager.msgMonitorType,
mMogoOnMessageListener);
IntentManager.getInstance()
.registerIntentListener(ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener);
//2022.1.28
// 调用Disposable.dispose() 时候会出现InterruptedException 导致出现崩溃
// The exception could not be delivered to the consumer because it has already canceled/disposed
@@ -183,7 +191,7 @@ public class SweeperTaskModel {
this.mControllerStatusCallback = callback;
}
public void setSweeperTaskCallback(ISweeperTaskCallback callback) {
public void setSweeperTaskCallback(ISweeperOperateTaskCallback callback) {
this.mSweeperTaskCallback = callback;
}
@@ -191,7 +199,8 @@ public class SweeperTaskModel {
@Override
public void onAutopilotRotting(MessagePad.GlobalPathResp routeList) {
if (null != routeList && routeList.getWayPointsList()!=null&&routeList.getWayPointsList().size() > 0) {
if (null != routeList && routeList.getWayPointsList() != null && routeList.getWayPointsList().size() > 0) {
DebugView.Companion.printInfoMsg("[MAP全局规划回调] 回调getWayPointsList.Size=" + routeList.getWayPointsList().size());
if (mCurrentSubTaskDetail.getLineId() != mLineId) {//判断是否同一条路线
mLineId = mCurrentSubTaskDetail.getLineId();
points.addAll(coordinateConverterWgsToGcjList(mContext, routeList.getWayPointsList()));
@@ -216,7 +225,7 @@ public class SweeperTaskModel {
*/
public void clearRouteList() {
points.clear();
mSubTaskType=0;
mSubTaskType = 0;
}
/**
@@ -270,10 +279,26 @@ public class SweeperTaskModel {
}
CallerLogger.d(M_SWEEPER + TAG, "onMsgReceived = " + obj.getMessage());
OCHSocketMessageManager.INSTANCE.pushAppOperationalMsgBox(obj.getPushTimeStamp(),
obj.getMessage(),OCHSocketMessageManager.OPERATION_SYSTEM);
obj.getMessage(), OCHSocketMessageManager.OPERATION_SYSTEM);
}
};
//监听网络变化避免启动机器时无网导致无法更新信息
private final IMogoIntentListener mNetWorkIntentListener = new IMogoIntentListener() {
@Override
public void onIntentReceived(String intentStr, Intent intent) {
CallerLogger.d(TAG, "mNetWorkIntentListener: onIntentReceived=" + intentStr);
if ((ConnectivityManager.CONNECTIVITY_ACTION.equals(intentStr))) {
if (NetworkUtils.isConnected(mContext)) {
DebugView.Companion.printInfoMsg("[网络状态变化] isConnected=true");
} else {
DebugView.Companion.printErrorMsg("[网络状态变化] isConnected=false");
}
}
}
};
private final IMogoStatusChangedListener mMogoStatusChangedListener = new IMogoStatusChangedListener() {
// VR mode变更回调
@Override
@@ -281,6 +306,7 @@ public class SweeperTaskModel {
if (StatusDescriptor.VR_MODE == descriptor) {
if (mControllerStatusCallback != null) {
mControllerStatusCallback.onVRModeChanged(isTrue);
DebugView.Companion.printInfoMsg("[VRMode变化] isVRMode=" + isTrue);
}
}
}
@@ -294,6 +320,7 @@ public class SweeperTaskModel {
@Override
public void onStartAutopilotFailure(@NotNull String startFailedCode, @NonNull String startFailedMessage) {
DebugView.Companion.printInfoMsg("[启自驾] 执行失败code=" + startFailedCode + ", msg=" + startFailedMessage);
SweeperAnalyticsManager.getInstance().triggerStartAutopilotFailureEventByAdas(startFailedCode, startFailedMessage);
if (mADASStatusCallback != null && !FunctionBuildConfig.isDemoMode) {
CallerLogger.e(M_SWEEPER + TAG, "mAdasStartFailureListener = " + startFailedMessage);
@@ -308,7 +335,7 @@ public class SweeperTaskModel {
public void onChassisLocationGCJ02(@Nullable MogoLocation gnssInfo) {
if (null == gnssInfo) return;
CallerLogger.e(M_SWEEPER + TAG, "高德定位到站mLongitude = " + gnssInfo.getLongitude()
+ ", mLatitude=" + gnssInfo.getLatitude() + ", mSubTaskType=" + mSubTaskType +", mIsSubTaskWorking=" + mIsSubTaskWorking
+ ", mLatitude=" + gnssInfo.getLatitude() + ", mSubTaskType=" + mSubTaskType + ", mIsSubTaskWorking=" + mIsSubTaskWorking
+ ", isAutopilotSubTaskArriveEndSite=" + isAutopilotSubTaskArriveEndSite
);
if (mControllerStatusCallback != null) {
@@ -362,6 +389,9 @@ public class SweeperTaskModel {
if (distance <= SweeperConst.ARRIVE_AT_END_STATION_DISTANCE) {
CallerLogger.d(M_SWEEPER + TAG, "行程日志-judgeArrivedStation() distance = " + distance
+ " to " + mCurrentSubTaskDetail.getEndSiteName());
DebugView.Companion.printInfoMsg(
"[自车定位围栏] 触发围栏,围栏范围:" + SweeperConst.ARRIVE_AT_END_STATION_DISTANCE + ""
);
isAutopilotSubTaskArriveEndSite = true;
//到达子任务终点 结束子任务
subTaskEnd(mIsFirstSubtask, mIsLastSubtask, mSubTaskId); //无自动驾驶到终点信息传null
@@ -384,9 +414,11 @@ public class SweeperTaskModel {
* @param isRestart
*/
private void startAutopilot(boolean isRestart) {
DebugView.Companion.printInfoMsg("[启自驾] startAutoPilot");
if (!FunctionBuildConfig.isDemoMode && !OCHAdasAbilityManager.getInstance().getAutopilotAbilityStatus()) {
ToastUtils.showLong(OCHAdasAbilityManager.getInstance().getAutopilotUnAbilityReason() +
", 请稍候重试");
DebugView.Companion.printErrorMsg("[启自驾]" + OCHAdasAbilityManager.getInstance().getAutopilotUnAbilityReason());
triggerUnableStartAPReasonEvent();
return;
}
@@ -395,9 +427,11 @@ public class SweeperTaskModel {
AutopilotControlParameters parameters = initAutopilotControlParameters();
if (null == parameters) {
CallerLogger.e(M_SWEEPER + TAG, "行程日志-AutopilotControlParameters is empty.");
DebugView.Companion.printErrorMsg("[启自驾]行程日志-AutopilotControlParameters is empty");
return;
}
CallerAutoPilotControlManager.INSTANCE.startAutoPilot(parameters);
DebugView.Companion.printInfoMsg("[启自驾] 调用成功");
CallerLogger.d(M_SWEEPER + TAG, "行程日志-开启自动驾驶====" + GsonUtil.jsonFromObject(parameters)
+ " startLatLon=" + parameters.startName + "endLatLon=" + parameters.endName +
"isRestart = " + isRestart);
@@ -444,6 +478,9 @@ public class SweeperTaskModel {
public void onArriveTaskEnd(MessagePad.ArrivalNotification data) {
//MAP 280 每隔100ms左右返回一次到站 导致在到达中间站后再次滑动出发后会有时间差收到一次到站出现问题
//此处比对 自驾告诉的子任务终点坐标和本地应到子任务终点坐标 一致时才表示子任务完成
DebugView.Companion.printInfoMsg("[MAP到站通知] 上报到站endLocation=("
+ ((data == null || data.getEndLocation() == null) ? "null" : data.getEndLocation().toString())
+ ")");
if (data != null && data.getEndLocation() != null && mCurrentSubTaskDetail != null) {
CallerLogger.d(M_SWEEPER + TAG, "MAP到站通知" + mCurrentSubTaskDetail.getEndSiteName() + " 经度:"
+ data.getEndLocation().getLongitude() + " 纬度:" + data.getEndLocation().getLatitude());
@@ -494,7 +531,6 @@ public class SweeperTaskModel {
* 将轨迹文件信息同步到鹰眼
*/
private void updateAutopilotControlParameters() {
AutopilotControlParameters parameters = initAutopilotControlParameters();
if (null == parameters) {
CallerLogger.e(M_SWEEPER + TAG, "AutopilotControlParameters is empty.");
@@ -503,11 +539,13 @@ public class SweeperTaskModel {
CallerLogger.d(M_SWEEPER + TAG, "AutopilotControlParameters" + GsonUtil.jsonFromObject(parameters));
CallerLogger.d(M_SWEEPER + TAG, "AutopilotControlParameters is update.");
CallerAutoPilotStatusListenerManager.INSTANCE.updateAutopilotControlParameters(parameters);
DebugView.Companion.printInfoMsg("[启自驾] updateAutopilotControlParameters调用成功");
}
private void clearAutopilotControlParameters() {
CallerLogger.d(M_SWEEPER + TAG, "AutopilotControlParameters is clear.");
CallerAutoPilotStatusListenerManager.INSTANCE.updateAutopilotControlParameters(null);
DebugView.Companion.printInfoMsg("[启自驾] clearAutopilotControlParameters调用成功");
}
private AutopilotControlParameters initAutopilotControlParameters() {
@@ -538,10 +576,12 @@ public class SweeperTaskModel {
* 获取当前正在执行的任务
*/
public void getCurrentTask() {
SweeperServiceManager.getCurrentTask(mContext, new OchCommonServiceCallback<BaseResponse<SweeperSubTaskBean>>() {
DebugView.Companion.printInfoMsg("[查询当前任务] 请求中");
SweeperOperateServiceManager.getCurrentTask(mContext, new OchCommonServiceCallback<BaseResponse<SweeperSubTaskBean>>() {
@Override
public void onSuccess(BaseResponse<SweeperSubTaskBean> data) {
CallerLogger.d(M_SWEEPER + TAG, "getCurrentTask" + GsonUtil.jsonFromObject(data));
DebugView.Companion.printInfoMsg("[查询当前任务] 请求success");
if (mSweeperTaskCallback != null && data != null) {
SweeperSubTaskBean sweeperSubTaskBean = data.getData();
if (sweeperSubTaskBean != null && sweeperSubTaskBean.getSubList() != null && sweeperSubTaskBean.getSubList().size() > 0) {
@@ -556,8 +596,10 @@ public class SweeperTaskModel {
public void onError() {
if (!NetworkUtils.isConnected(mContext)) {
ToastUtils.showShort(mContext.getString(R.string.network_error_tip));
DebugView.Companion.printErrorMsg("[查询当前任务] 请求error," + mContext.getString(R.string.network_error_tip));
} else {
ToastUtils.showShort(mContext.getString(R.string.request_error_tip));
DebugView.Companion.printErrorMsg("[查询当前任务] 请求error," + mContext.getString(R.string.request_error_tip));
}
}
@@ -566,8 +608,10 @@ public class SweeperTaskModel {
if (ToastUtilsOch.isCustomFastClick(5000)) {
if (!NetworkUtils.isConnected(mContext)) {
ToastUtils.showShort("网络异常,请稍后重试");
DebugView.Companion.printErrorMsg("[查询当前任务] 请求failed, 网络异常,请稍后重试");
} else {
ToastUtils.showShort(msg);
DebugView.Companion.printErrorMsg("[查询当前任务] 请求failed, " + msg);
}
}
}
@@ -578,10 +622,12 @@ public class SweeperTaskModel {
* 获取主任务列表
*/
public void getMainTaskList(boolean refresh) {
SweeperServiceManager.getMainTaskList(mContext, new OchCommonServiceCallback<BaseResponse<List<SweeperMainTaskBean>>>() {
DebugView.Companion.printInfoMsg("[查询主任务] 请求中");
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));
DebugView.Companion.printInfoMsg("[查询主任务] 请求success");
if (mSweeperTaskCallback != null && data != null && data.getCode() == 0) {
List<SweeperMainTaskBean> list = data.getData();
mSweeperTaskCallback.setMainTaskList(list, refresh);
@@ -593,8 +639,10 @@ public class SweeperTaskModel {
if (ToastUtilsOch.isCustomFastClick(5000)) {
if (!NetworkUtils.isConnected(mContext)) {
ToastUtils.showShort("网络异常,请稍后重试");
DebugView.Companion.printErrorMsg("[查询主任务] 请求error, 网络异常,请稍后重试");
} else {
ToastUtils.showShort(msg);
DebugView.Companion.printErrorMsg("[查询主任务] 请求error, " + msg);
}
}
}
@@ -603,8 +651,10 @@ public class SweeperTaskModel {
public void onError() {
if (!NetworkUtils.isConnected(mContext)) {
ToastUtils.showShort(mContext.getString(R.string.network_error_tip));
DebugView.Companion.printErrorMsg("[查询主任务] 请求failed, " + mContext.getString(R.string.network_error_tip));
} else {
ToastUtils.showShort(mContext.getString(R.string.request_error_tip));
DebugView.Companion.printErrorMsg("[查询主任务] 请求failed, " + mContext.getString(R.string.request_error_tip));
}
}
});
@@ -614,10 +664,12 @@ public class SweeperTaskModel {
* 获取子任务列表
*/
public void getSubTaskList(int taskId, SweeperSubTaskBean sweeperSubTaskBean) {
SweeperServiceManager.getSubTaskList(taskId, mContext, new OchCommonServiceCallback<BaseResponse<List<SubInfo>>>() {
DebugView.Companion.printInfoMsg("[查询子任务] 请求中, taskId=" + taskId);
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));
DebugView.Companion.printInfoMsg("[查询子任务] 请求success, taskId=" + taskId);
if (mSweeperTaskCallback != null && data != null && data.getCode() == 0) {
List<SubInfo> list = data.getData();
if (list != null && list.size() > 0) {
@@ -634,8 +686,10 @@ public class SweeperTaskModel {
if (ToastUtilsOch.isCustomFastClick(5000)) {
if (!NetworkUtils.isConnected(mContext)) {
ToastUtils.showShort("网络异常,请稍后重试");
DebugView.Companion.printErrorMsg("[查询子任务] 请求failed, 网络异常,请稍后重试, taskId=" + taskId);
} else {
ToastUtils.showShort(msg);
DebugView.Companion.printErrorMsg("[查询子任务] 请求failed, " + msg + ", taskId=" + taskId);
}
}
}
@@ -644,8 +698,10 @@ public class SweeperTaskModel {
public void onError() {
if (!NetworkUtils.isConnected(mContext)) {
ToastUtils.showShort(mContext.getString(R.string.network_error_tip));
DebugView.Companion.printErrorMsg("[查询子任务] 请求error, " + mContext.getString(R.string.network_error_tip) + ", taskId=" + taskId);
} else {
ToastUtils.showShort(mContext.getString(R.string.request_error_tip));
DebugView.Companion.printErrorMsg("[查询子任务] 请求error, " + mContext.getString(R.string.request_error_tip) + ", taskId=" + taskId);
}
}
});
@@ -655,10 +711,12 @@ public class SweeperTaskModel {
* 获取子任务详情包括轨迹文件信息
*/
public void getSubTaskDetail(boolean isFirst, boolean isEnd, int subTaskId, SubTaskTypeEnum subTaskType, boolean isStartSubtask) {
SweeperServiceManager.getSubTaskDetail(subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<SweeperSubTaskDetailBean>>() {
DebugView.Companion.printInfoMsg("[查询子任务详情及轨迹信息] 请求中, isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
SweeperOperateServiceManager.getSubTaskDetail(subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<SweeperSubTaskDetailBean>>() {
@Override
public void onSuccess(BaseResponse<SweeperSubTaskDetailBean> data) {
CallerLogger.d(M_SWEEPER + TAG, "getSubTaskDetail" + GsonUtil.jsonFromObject(data));
DebugView.Companion.printInfoMsg("[查询子任务详情及轨迹信息] 请求success, isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
if (data != null) {
mCurrentSubTaskDetail = data.getData();
if (mCurrentSubTaskDetail != null) {
@@ -693,8 +751,10 @@ public class SweeperTaskModel {
if (ToastUtilsOch.isCustomFastClick(5000)) {
if (!NetworkUtils.isConnected(mContext)) {
ToastUtils.showShort("网络异常,请稍后重试");
DebugView.Companion.printErrorMsg("[查询子任务详情及轨迹信息] 请求failed, 网络异常,请稍后重试, isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
} else {
ToastUtils.showShort(msg);
DebugView.Companion.printErrorMsg("[查询子任务详情及轨迹信息] 请求failed, " + msg + ", isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
}
}
}
@@ -703,8 +763,10 @@ public class SweeperTaskModel {
public void onError() {
if (!NetworkUtils.isConnected(mContext)) {
ToastUtils.showShort(mContext.getString(R.string.network_error_tip));
DebugView.Companion.printErrorMsg("[查询子任务详情及轨迹信息] 请求Error, " + mContext.getString(R.string.network_error_tip) + ", isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
} else {
ToastUtils.showShort(mContext.getString(R.string.request_error_tip));
DebugView.Companion.printErrorMsg("[查询子任务详情及轨迹信息] 请求Error, " + mContext.getString(R.string.request_error_tip) + ", isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
}
}
});
@@ -714,10 +776,12 @@ public class SweeperTaskModel {
* 子任务开始上报
*/
public void subTaskStart(boolean isFirst, boolean isEnd, int subTaskId, SubTaskTypeEnum subTaskType) {
SweeperServiceManager.subTaskStart(isFirst, isEnd, subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
DebugView.Companion.printInfoMsg("[子任务开始上报] 请求中, isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
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));
DebugView.Companion.printInfoMsg("[子任务开始上报] 请求success, isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
if (mSweeperTaskCallback != null && data != null) {
if (data.getData()) {
mIsSubTaskWorking = true;
@@ -725,7 +789,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 {
@@ -743,8 +807,10 @@ public class SweeperTaskModel {
if (ToastUtilsOch.isCustomFastClick(5000)) {
if (!NetworkUtils.isConnected(mContext)) {
ToastUtils.showShort("网络异常,请稍后重试");
DebugView.Companion.printErrorMsg("[子任务开始上报] 请求failed, 网络异常,请稍后重试, isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
} else {
ToastUtils.showShort(msg);
DebugView.Companion.printErrorMsg("[子任务开始上报] 请求failed, " + msg + ", isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
}
}
}
@@ -753,8 +819,10 @@ public class SweeperTaskModel {
public void onError() {
if (!NetworkUtils.isConnected(mContext)) {
ToastUtils.showShort(mContext.getString(R.string.network_error_tip));
DebugView.Companion.printErrorMsg("[子任务开始上报] 请求error, " + mContext.getString(R.string.network_error_tip) + ", isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
} else {
ToastUtils.showShort(mContext.getString(R.string.request_error_tip));
DebugView.Companion.printErrorMsg("[子任务开始上报] 请求error, " + mContext.getString(R.string.request_error_tip) + ", isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
}
}
});
@@ -764,11 +832,13 @@ public class SweeperTaskModel {
* 子任务结束上报
*/
public void subTaskEnd(boolean isFirst, boolean isEnd, int subTaskId) {
SweeperServiceManager.subTaskEnd(isFirst, isEnd, subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
DebugView.Companion.printInfoMsg("[子任务结束上报] 请求中, isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
SweeperOperateServiceManager.subTaskEnd(isFirst, isEnd, subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
@Override
public void onSuccess(BaseResponse<Boolean> data) {
CallerLogger.d(M_SWEEPER + TAG, "subTaskEnd" +
String.format("isFirst=%b; isEnd=%b; ", isFirst, isEnd) + GsonUtil.jsonFromObject(data));
DebugView.Companion.printInfoMsg("[子任务结束上报] 请求success, isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
if (data != null) {
if (data.getData()) {
mIsSubTaskWorking = false;
@@ -777,7 +847,7 @@ public class SweeperTaskModel {
}
if (isEnd) {
if (FunctionBuildConfig.isDemoMode) {//美化模式开启时
SweeperTaskModel.getInstance().closeBeautificationMode();
SweeperOperateTaskModel.getInstance().closeBeautificationMode();
}
clearAutopilotControlParameters();
//结束自动驾驶
@@ -792,9 +862,11 @@ public class SweeperTaskModel {
if (ToastUtilsOch.isCustomFastClick(5000)) {
if (!NetworkUtils.isConnected(mContext)) {
ToastUtils.showShort("网络异常,请稍后重试");
DebugView.Companion.printErrorMsg("[子任务结束上报] 请求failed, 网络异常,请稍后重试, isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
} else {
if (isAutopilotSubTaskArriveEndSite) return;
ToastUtils.showShort(msg);
DebugView.Companion.printErrorMsg("[子任务结束上报] 请求failed, " + msg + ", isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
}
}
}
@@ -803,8 +875,10 @@ public class SweeperTaskModel {
public void onError() {
if (!NetworkUtils.isConnected(mContext)) {
ToastUtils.showShort(mContext.getString(R.string.network_error_tip));
DebugView.Companion.printErrorMsg("[子任务结束上报] 请求error, " + mContext.getString(R.string.network_error_tip) + ", isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
} else {
ToastUtils.showShort(mContext.getString(R.string.request_error_tip));
DebugView.Companion.printErrorMsg("[子任务结束上报] 请求error, " + mContext.getString(R.string.request_error_tip) + ", isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
}
}
@@ -815,11 +889,13 @@ public class SweeperTaskModel {
* 子任务跳过上报
*/
public void subTaskSkip(boolean isFirst, boolean isEnd, int subTaskId) {
SweeperServiceManager.subTaskSkip(isFirst, isEnd, subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
DebugView.Companion.printInfoMsg("[子任务跳过上报] 请求中, isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
SweeperOperateServiceManager.subTaskSkip(isFirst, isEnd, subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
@Override
public void onSuccess(BaseResponse<Boolean> data) {
CallerLogger.d(M_SWEEPER + TAG, "subTaskSkip" +
String.format("isFirst=%b; isEnd=%b; ", isFirst, isEnd)+ GsonUtil.jsonFromObject(data));
String.format("isFirst=%b; isEnd=%b; ", isFirst, isEnd) + GsonUtil.jsonFromObject(data));
DebugView.Companion.printInfoMsg("[子任务跳过上报] 请求success, isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
if (mSweeperTaskCallback != null && data != null) {
if (data.getData()) {
mIsSubTaskWorking = false;
@@ -835,8 +911,10 @@ public class SweeperTaskModel {
if (ToastUtilsOch.isCustomFastClick(5000)) {
if (!NetworkUtils.isConnected(mContext)) {
ToastUtils.showShort("网络异常,请稍后重试");
DebugView.Companion.printErrorMsg("[子任务跳过上报] 请求failed, 网络异常,请稍后重试, isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
} else {
ToastUtils.showShort(msg);
DebugView.Companion.printErrorMsg("[子任务跳过上报] 请求failed, " + msg + ", isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
}
}
}
@@ -845,8 +923,10 @@ public class SweeperTaskModel {
public void onError() {
if (!NetworkUtils.isConnected(mContext)) {
ToastUtils.showShort(mContext.getString(R.string.network_error_tip));
DebugView.Companion.printErrorMsg("[子任务跳过上报] 请求error, " + mContext.getString(R.string.network_error_tip) + ", isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
} else {
ToastUtils.showShort(mContext.getString(R.string.request_error_tip));
DebugView.Companion.printErrorMsg("[子任务跳过上报] 请求error, " + mContext.getString(R.string.request_error_tip) + ", isFirst=" + isFirst + ", isEnd=" + isEnd + ", subTaskId=" + subTaskId);
}
}
});
@@ -856,10 +936,12 @@ public class SweeperTaskModel {
* 主任务重置
*/
public void mainTaskReset(int taskId) {
SweeperServiceManager.mainTaskReset(taskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
DebugView.Companion.printInfoMsg("[主任务重置] 请求中, taskId=" + taskId);
SweeperOperateServiceManager.mainTaskReset(taskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
@Override
public void onSuccess(BaseResponse<Boolean> data) {
CallerLogger.d(M_SWEEPER + TAG, "mainTaskReset" + GsonUtil.jsonFromObject(data));
DebugView.Companion.printInfoMsg("[主任务重置] 请求success, taskId=" + taskId);
// 主任务重置 当前子任务也需重置
mIsSubTaskWorking = false;
isAutopilotSubTaskArriveEndSite = false;
@@ -873,8 +955,10 @@ public class SweeperTaskModel {
if (ToastUtilsOch.isCustomFastClick(5000)) {
if (!NetworkUtils.isConnected(mContext)) {
ToastUtils.showShort("网络异常,请稍后重试");
DebugView.Companion.printErrorMsg("[主任务重置] 请求failed, 网络异常,请稍后重试, taskId=" + taskId);
} else {
ToastUtils.showShort(msg);
DebugView.Companion.printErrorMsg("[主任务重置] 请求failed, " + msg + ", taskId=" + taskId);
}
}
}
@@ -883,8 +967,10 @@ public class SweeperTaskModel {
public void onError() {
if (!NetworkUtils.isConnected(mContext)) {
ToastUtils.showShort(mContext.getString(R.string.network_error_tip));
DebugView.Companion.printErrorMsg("[主任务重置] 请求error, " + mContext.getString(R.string.network_error_tip) + ", taskId=" + taskId);
} else {
ToastUtils.showShort(mContext.getString(R.string.request_error_tip));
DebugView.Companion.printErrorMsg("[主任务重置] 请求error, " + mContext.getString(R.string.request_error_tip)+ ", taskId=" + taskId);
}
}
});
@@ -893,5 +979,6 @@ public class SweeperTaskModel {
//结束自动驾驶
public void cancelAutoPilot() {
CallerAutoPilotControlManager.INSTANCE.cancelAutoPilot();
DebugView.Companion.printInfoMsg("[取消自动驾驶] 请求成功");
}
}

View File

@@ -1,10 +1,10 @@
package com.mogo.och.sweeper.net;
import com.mogo.och.sweeper.bean.BaseResponse;
import com.mogo.och.sweeper.bean.SubInfo;
import com.mogo.och.sweeper.bean.SubStartRequest;
import com.mogo.och.sweeper.bean.SweeperSubTaskBean;
import com.mogo.och.sweeper.bean.SweeperMainTaskBean;
import com.mogo.och.sweeper.bean.SweeperSubTaskDetailBean;
package com.mogo.och.sweeper.operate.net;
import com.mogo.och.sweeper.operate.bean.BaseResponse;
import com.mogo.och.sweeper.operate.bean.SubInfo;
import com.mogo.och.sweeper.operate.bean.SubStartRequest;
import com.mogo.och.sweeper.operate.bean.SweeperSubTaskBean;
import com.mogo.och.sweeper.operate.bean.SweeperMainTaskBean;
import com.mogo.och.sweeper.operate.bean.SweeperSubTaskDetailBean;
import java.util.List;
import java.util.Map;
@@ -21,7 +21,7 @@ import retrofit2.http.QueryMap;
/**
* 清扫车相关接口
*/
public interface ISweeperApiService {
public interface ISweeperOperateApiService {
/**
* 获取当前正在执行的任务
* @param appId

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.net
package com.mogo.och.sweeper.operate.net
import android.content.Context
import com.elegant.network.utils.GsonUtil
@@ -10,13 +10,18 @@ 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.bean.*
import com.mogo.och.sweeper.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
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

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.presenter;
package com.mogo.och.sweeper.operate.presenter;
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_SWEEPER;
@@ -23,23 +23,24 @@ import com.mogo.eagle.core.utilcode.util.ThreadUtils;
import com.mogo.och.common.module.manager.autopilotmanager.OCHAdasAbilityManager;
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil;
import com.mogo.och.common.module.utils.NumberFormatUtil;
import com.mogo.och.sweeper.bean.SweeperMainTaskBean;
import com.mogo.och.sweeper.bean.SweeperRoutePlanningUpdateReqBean;
import com.mogo.och.sweeper.bean.SweeperSubTaskBean;
import com.mogo.och.sweeper.bean.SweeperSubTaskDetailBean;
import com.mogo.och.sweeper.callback.ISweeperADASStatusCallback;
import com.mogo.och.sweeper.callback.ISweeperControllerStatusCallback;
import com.mogo.och.sweeper.callback.ISweeperTaskCallback;
import com.mogo.och.sweeper.callback.ISweeperTaskRouteCallback;
import com.mogo.och.sweeper.constant.SubTaskTypeEnum;
import com.mogo.och.sweeper.constant.SweeperConst;
import com.mogo.och.sweeper.constant.TaskStatusEnum;
import com.mogo.och.sweeper.database.MyDataBase;
import com.mogo.och.sweeper.database.bean.WeltDataBean;
import com.mogo.och.sweeper.fragment.SweeperFragment;
import com.mogo.och.sweeper.model.SweeperTaskModel;
import com.mogo.och.sweeper.util.SweeperFutianCmdUtil;
import com.mogo.och.sweeper.util.SweeperTrajectoryManager;
import com.mogo.och.sweeper.common.view.DebugView;
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.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.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.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;
import org.jetbrains.annotations.NotNull;
@@ -60,9 +61,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 +81,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 +100,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 +127,38 @@ 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://不可自动驾驶
DebugView.Companion.printInfoMsg("[自驾状态变化] afterValue=STATUS_AUTOPILOT_DISABLEmeaning=不可自动驾驶");
break;
case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE://人工驾驶
if (SweeperTaskModel.getInstance().getSubWorking()) {
DebugView.Companion.printInfoMsg("[自驾状态变化] afterValue=STATUS_AUTOPILOT_ENABLEmeaning=可自动驾驶,人工干预状态");
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()) {
DebugView.Companion.printInfoMsg("[自驾状态变化] afterValue=STATUS_AUTOPILOT_RUNNINGmeaning=自动驾驶中");
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()) {
DebugView.Companion.printInfoMsg("[自驾状态变化] afterValue=STATUS_PARALLEL_DRIVINGmeaning=平行驾驶中");
if (SweeperOperateTaskModel.getInstance().getSubWorking()) {
if (FunctionBuildConfig.isDemoMode) {//美化模式开启时
FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true;//是否强制绘制引导线
CallerAutoPilotControlManager.INSTANCE.setIPCDemoMode(false);//是否自动启动自驾
@@ -161,7 +166,7 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
} else {
if (FunctionBuildConfig.isDemoMode) {//美化模式开启时
//关闭美化模式
SweeperTaskModel.getInstance().closeBeautificationMode();
SweeperOperateTaskModel.getInstance().closeBeautificationMode();
}
}
break;
@@ -191,10 +196,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 +207,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);
}
/**
* 测试使用
@@ -223,6 +228,9 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
@Override
public void onAutopilotIpcConnectStatusChanged(int status, @Nullable String reason) {
DebugView.Companion.printInfoMsg(
"[域控连接状态变化] status=" + status
+ ", reason=" + reason);
}
@Override
@@ -236,7 +244,10 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
@Override
public void onAutopilotArriveAtStation(@Nullable MessagePad.ArrivalNotification arrivalNotification) {
SweeperTaskModel.getInstance().onArriveTaskEnd(arrivalNotification);
SweeperOperateTaskModel.getInstance().onArriveTaskEnd(arrivalNotification);
DebugView.Companion.printInfoMsg("[MAP到站通知] 上报到站endLocation=("
+ ((arrivalNotification == null || arrivalNotification.getEndLocation() == null) ? "null" : arrivalNotification.getEndLocation().toString())
+ ")");
}
@Override
@@ -248,7 +259,7 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
}
public void onArriveTaskEnd(@Nullable MessagePad.ArrivalNotification arrivalNotification) {
SweeperTaskModel.getInstance().onArriveTaskEnd(arrivalNotification);
SweeperOperateTaskModel.getInstance().onArriveTaskEnd(arrivalNotification);
}
@Override
@@ -348,7 +359,7 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
weltDataBean.setCleanMode(roboSweeperTaskIndex.getCleanMode());
weltDataBean.setCleanDirection(roboSweeperTaskIndex.getCleanDirection());
weltDataBean.setCleanIntensity(roboSweeperTaskIndex.getCleanIntensity());
weltDataBean.setSubTaskId(mSubTaskId);
weltDataBean.setSubTaskId(String.valueOf(mSubTaskId));
MyDataBase.getInstance().getWeltDataDao().insert(weltDataBean);
String distance;
if (roboSweeperTaskIndex.getDistToRefEdgePoint() >= 1.0) {//大于等于1m
@@ -370,28 +381,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 +410,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 +418,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

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.ui.adapter
package com.mogo.och.sweeper.operate.ui.adapter
import android.graphics.Color
import android.view.LayoutInflater
@@ -9,7 +9,7 @@ import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.sweeper.R
import com.mogo.och.sweeper.bean.SweeperMainTaskBean
import com.mogo.och.sweeper.operate.bean.SweeperMainTaskBean
class TaskListAdapter() : RecyclerView.Adapter<TaskListAdapter.TaskViewHolder>() {
private var mItemClickListener: TaskItemClickListener? = null
@@ -42,12 +42,12 @@ class TaskListAdapter() : RecyclerView.Adapter<TaskListAdapter.TaskViewHolder>()
notifyDataSetChanged()
}
interface TaskItemClickListener {
fun onItemClick(position: Int,mainTask:SweeperMainTaskBean)
fun onItemClick(position: Int,mainTask: SweeperMainTaskBean)
}
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,4 +1,4 @@
package com.mogo.och.sweeper.ui.popwindow
package com.mogo.och.sweeper.operate.ui.popwindow
import android.content.Context
import android.graphics.Color
@@ -9,7 +9,7 @@ import android.view.ViewGroup.LayoutParams
import android.widget.PopupWindow
import android.widget.TextView
import com.mogo.och.sweeper.R
import com.mogo.och.sweeper.constant.TaskStatusEnum
import com.mogo.och.sweeper.operate.constant.TaskStatusEnum
/**
* 当前任务操作菜单栏
@@ -24,9 +24,9 @@ class MenuPopWindow : PopupWindow, View.OnClickListener{
private var mTvCancelTask: TextView? = null
private var mMenuItemClickListener:OnMenuItemOnClickListener?=null
private var mMenuItemClickListener: OnMenuItemOnClickListener?=null
constructor(context: Context,menuItemClickListener:OnMenuItemOnClickListener) : super(context) {
constructor(context: Context,menuItemClickListener: OnMenuItemOnClickListener) : super(context) {
init(context)
this.mMenuItemClickListener=menuItemClickListener
}
@@ -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

@@ -1,11 +1,11 @@
package com.mogo.och.sweeper.util;
package com.mogo.och.sweeper.operate.util;
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters;
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.utilcode.util.GsonUtils;
import com.mogo.och.sweeper.bean.SweeperSubTaskDetailBean;
import com.mogo.och.sweeper.constant.SweeperConst;
import com.mogo.och.sweeper.operate.bean.SweeperSubTaskDetailBean;
import com.mogo.och.sweeper.common.constant.SweeperConst;
import java.util.concurrent.TimeUnit;

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.view;
package com.mogo.och.sweeper.operate.view;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;

View File

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.view
package com.mogo.och.sweeper.operate.view
import android.content.Context
import android.graphics.Color
@@ -11,22 +11,22 @@ import com.mogo.eagle.core.utilcode.util.ClickUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.sweeper.R
import com.mogo.och.sweeper.bean.SubInfo
import com.mogo.och.sweeper.bean.SweeperSubTaskBean
import com.mogo.och.sweeper.constant.SubTaskTypeEnum
import com.mogo.och.sweeper.presenter.SweeperPresenter
import com.mogo.och.sweeper.ui.popwindow.MenuPopWindow
import kotlinx.android.synthetic.main.sweeper_current_task_info.view.*
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.SweeperOperatePresenter
import com.mogo.och.sweeper.operate.ui.popwindow.MenuPopWindow
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()){//防止重复点击
@@ -51,7 +51,7 @@ class SweeperCurrentTaskInfoView : ConstraintLayout {
ToastUtils.showLong("任务未开始无轨迹,无法启动自驾")
return@setOnClickListener
}
if (mSubTaskType==SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE){
if (mSubTaskType== SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE){
ToastUtils.showLong("人工子任务无轨迹,无法启动自驾")
return@setOnClickListener
}
@@ -66,17 +66,17 @@ class SweeperCurrentTaskInfoView : ConstraintLayout {
* 设置当前任务数据
*/
fun setData(
workModePanelView: SweeperWorkModeView,
subTaskBean: SweeperSubTaskBean?,
currentPosition: Int,
menuItemClickListener: MenuPopWindow.OnMenuItemOnClickListener,
presenter: SweeperPresenter?
workModePanelView: SweeperOperateWorkModeView,
subTaskBean: SweeperSubTaskBean?,
currentPosition: Int,
menuItemClickListener: MenuPopWindow.OnMenuItemOnClickListener,
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

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.view
package com.mogo.och.sweeper.operate.view
import android.content.Context
import android.graphics.Color
@@ -8,13 +8,13 @@ import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.sweeper.R
import com.mogo.och.sweeper.bean.SubInfo
import kotlinx.android.synthetic.main.sweeper_subtask_view.view.*
import com.mogo.och.sweeper.operate.bean.SubInfo
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

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.view
package com.mogo.och.sweeper.operate.view
import android.annotation.SuppressLint
import android.content.Context
@@ -22,13 +22,14 @@ 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.sweeper.R
import com.mogo.och.sweeper.common.view.TurnSignalView
import planning.RoboSweeperTaskIndexOuterClass
import kotlin.math.roundToInt
/**
* 车辆基本信息方向盘下方的档位 转向灯 限速 速度 电量 水量
*/
class SweeperTrafficDataView : ConstraintLayout,
class SweeperOperateTrafficDataView : ConstraintLayout,
IMoGoBatteryManagementSystemListener,
IMoGoChassisLamplightListener,
IMoGoChassisGearStateListener,
@@ -68,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

@@ -1,4 +1,4 @@
package com.mogo.och.sweeper.view
package com.mogo.och.sweeper.operate.view
import android.content.Context
import android.util.AttributeSet
@@ -10,25 +10,25 @@ 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.sweeper.R
import com.mogo.och.sweeper.callback.ICleaningModeStateCallback
import com.mogo.och.sweeper.constant.OperateStateEnum
import com.mogo.och.sweeper.constant.SubTaskTypeEnum
import com.mogo.och.sweeper.ui.popwindow.SweeperOperatePanelPopWindow
import com.mogo.och.sweeper.util.SweeperFutianCmdUtil
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.common.view.SweeperOperatePanelPopWindow
import com.mogo.och.sweeper.common.util.SweeperFutianCmdUtil
import kotlinx.android.synthetic.main.sweeper_work_mode.view.*
/**
* 清扫车模式信息展示
*/
class SweeperWorkModeView : ConstraintLayout,
ICleaningModeStateCallback {
class SweeperOperateWorkModeView : ConstraintLayout,
ICleaningModeStateCallback {
private var isSelectPureSweepMode: Boolean = false
private val TAG = "SweeperWorkModeView"
//清扫模式选择面板
private var mOperatePanelPopWindow: SweeperOperatePanelPopWindow? = null
private var operateState: OperateStateEnum=OperateStateEnum.SYNCING_STATUS
private var operateState: OperateStateEnum = OperateStateEnum.SYNCING_STATUS
constructor(context: Context) : super(context) {}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
@@ -47,7 +47,7 @@ class SweeperWorkModeView : ConstraintLayout,
/**
* 设置view
*/
fun setTrafficDataView(trafficDataView: SweeperTrafficDataView){
fun setTrafficDataView(trafficDataView: SweeperOperateTrafficDataView){
//清扫模式选择面板打开关闭处理
ivOpenOperatePanel.setOnClickListener {
if (mOperatePanelPopWindow?.isShowing != true) {
@@ -72,12 +72,12 @@ class SweeperWorkModeView : ConstraintLayout,
fun setSweeperFutianCleanSystemState(taskType: SubTaskTypeEnum, cleanSystemState: SweeperFuTianTaskSystemStates?) {
// TODO:传递清扫车底盘数据给上装面板
//mOperatePanelPopWindow?.setCleanSystemState(cleanSystemState, this@SweeperWorkModeView)
if (this.operateState.code==OperateStateEnum.STARTING_STATUS.code){
if (this.operateState.code== OperateStateEnum.STARTING_STATUS.code){
return
}
//如果状态是同步中,在底盘首次回调时把状态强制修改成成功
if (this.operateState.code==OperateStateEnum.SYNCING_STATUS.code){
this.operateState=OperateStateEnum.SUCCESS_STATUS
if (this.operateState.code== OperateStateEnum.SYNCING_STATUS.code){
this.operateState= OperateStateEnum.SUCCESS_STATUS
d(SceneConstant.M_SWEEPER + TAG, "SystemState operateState"+operateState.code)
}
//清扫车暂未选择清扫模式或者任务类型是人工驾驶子任务,则暂无清扫模式

View File

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 544 B

After

Width:  |  Height:  |  Size: 544 B

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Some files were not shown because too many files have changed in this diff Show More