Merge branch 'robo_6.1.0_master' into 'master'

Robo 6.1.0 master

See merge request SCA/L4HA/AndroidApp/MoGoEagleEye!825
This commit is contained in:
pangfan
2023-10-13 04:04:58 +00:00
2160 changed files with 85251 additions and 10692 deletions

2
.gitignore vendored
View File

@@ -7,4 +7,4 @@
/build
/captures
.externalNativeBuild
.cxx
.cxx

27
.gitlab-ci.yml Normal file
View File

@@ -0,0 +1,27 @@
stages:
- analyze
inspect java and kotlin codes:
tags:
- apk
- android
stage: analyze
script:
- echo "$CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA $CI_COMMIT_BRANCH $CI_COMMIT_DESCRIPTION $CI_COMMIT_TIMESTAMP"
- echo "${CI_JOB_STAGE}_reports_${CI_PROJECT_NAME}_${CI_BUILD_REF_NAME}"
- ./gradlew runCodeInspect
before_script:
- source change_java_version
artifacts:
name: "${CI_JOB_STAGE}_reports_${CI_PROJECT_NAME}_$CI_COMMIT_REF_SLUG"
when: always
expire_in: 1 days
paths:
- "build/reports/*"
only:
- $CI_COMMIT_BRANCH
- pushes
- schedules
except:
- master
allow_failure: true

View File

@@ -379,6 +379,11 @@ public class OrderModel {
};
private final OchAdasStartFailureCallback mAdasStartFailureListener = new OchAdasStartFailureCallback() {
@Override
public void brakeStatusChanged(boolean isBrakeAvailable) {
}
@Override
public void onStartAutopilotFailure(@NotNull String startFailedCode, @NonNull String startFailedMessage) {
BusAnalyticsManager.INSTANCE.triggerStartAutopilotFailureEventByAdas(startFailedCode, startFailedMessage);

View File

@@ -10,7 +10,6 @@ import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager;
import com.mogo.eagle.core.function.call.setting.CallerMoGoUiSettingManager;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.och.bus.constant.BusConst;

View File

@@ -3,6 +3,7 @@ package com.mogo.och.bus.fragment;
import static com.mogo.och.bus.constant.BusConst.TIMER_START_AUTOPILOT_INTERVAL;
import android.animation.ObjectAnimator;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@@ -27,7 +28,6 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager;
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager;
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager;
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager;
import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxBubbleView;
import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxButtonView;
import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxListView;
@@ -49,8 +49,6 @@ import com.mogo.och.common.module.utils.SoundPoolHelper;
import org.greenrobot.eventbus.EventBus;
import java.util.Objects;
import bag_manager.BagManagerOuterClass;
import mogo.telematics.pad.MessagePad;
import record_cache.RecordPanelOuterClass;
@@ -137,21 +135,22 @@ public abstract class BaseBusTabFragment<V extends IView, P extends Presenter<V>
mSwitchMapModeLayout.setOnClickListener(new OnPreventFastClickListener() {
@Override
public void onClickImpl(View v) {
IMogoMapUIController controller = CallerMapUIServiceManager.INSTANCE.getMapUIController();
if (controller != null) {
//切换地图的远近视图
if (controller.getCurrentMapVisualAngle().isLongSight()) {
//Objects.requireNonNull(CallerMapUIServiceManager.INSTANCE.getMapUIController()).setLockMode(true);
controller.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_medium);
} else if (controller.getCurrentMapVisualAngle().isMediumSight()) {
//Objects.requireNonNull(CallerMapUIServiceManager.INSTANCE.getMapUIController()).setLockMode(false);
controller.changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null);
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_long);
} else {
controller.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_medium);
if(mapBizView != null){
IMogoMapUIController uiController = mapBizView.getUI();
if(uiController != null){
//切换地图的远近视图
if (uiController.getCurrentMapVisualAngle().isLongSight()) {
uiController.setLockMode(true);
uiController.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_medium);
} else if (uiController.getCurrentMapVisualAngle().isMediumSight()) {
uiController.setLockMode(false);
uiController.changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null);
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_long);
} else {
uiController.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_medium);
}
}
}
}
@@ -199,7 +198,6 @@ public abstract class BaseBusTabFragment<V extends IView, P extends Presenter<V>
mSettingBtn = findViewById(R.id.module_mogo_och_setting_layout);
mSettingBtn.setOnClickListener(v -> {
// TODO: 2021/12/9
CallerHmiManager.INSTANCE.showToolsView();
});
@@ -256,14 +254,16 @@ public abstract class BaseBusTabFragment<V extends IView, P extends Presenter<V>
protected abstract void onArriveStation();
private void updateSwitchMapIcon() {
IMogoMapUIController controller = CallerMapUIServiceManager.INSTANCE.getMapUIController();
if (controller != null) {
if (controller.getCurrentMapVisualAngle().isLongSight()) {
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_long);
} else if (controller.getCurrentMapVisualAngle().isMediumSight()) {
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_medium);
} else {
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_medium);
if(mapBizView != null){
IMogoMapUIController uiController = mapBizView.getUI();
if(uiController != null){
if (uiController.getCurrentMapVisualAngle().isLongSight()) {
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_long);
} else if (uiController.getCurrentMapVisualAngle().isMediumSight()) {
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_medium);
} else {
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_medium);
}
}
}
}
@@ -330,7 +330,7 @@ public abstract class BaseBusTabFragment<V extends IView, P extends Presenter<V>
slidePanelView.setText(text);
slidePanelView.setVisibility(View.VISIBLE);
});
setArrivedClikable(false);
setArrivedClickable(false);
}
/**
@@ -338,7 +338,7 @@ public abstract class BaseBusTabFragment<V extends IView, P extends Presenter<V>
*
* @param isClickable
*/
public void setArrivedClikable(boolean isClickable) {
public void setArrivedClickable(boolean isClickable) {
getActivity().runOnUiThread(() -> {
tvArrived.setEnabled(isClickable);
if (isClickable) {
@@ -397,7 +397,7 @@ public abstract class BaseBusTabFragment<V extends IView, P extends Presenter<V>
ctvAutopilotStatus.setBackground(getContext().getDrawable(R.drawable.bus_autopilot_2_status_bg));
// ctvAutopilotStatus.setSelected(true);
} else if (IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING
== autopilotStatus){
== autopilotStatus) {
ctvAutopilotStatusTv.setText(R.string.bus_pingxing_driver);
ctvAutopilotStatus.setClickable(false);
ctvAutopilotStatus.setBackground(getContext().getDrawable(R.drawable.pingxingjiashi));
@@ -421,12 +421,7 @@ public abstract class BaseBusTabFragment<V extends IView, P extends Presenter<V>
ctvAutopilotStatus.setClickable(false);
// ctvAutopilotStatus.setSelected(false);
}
UiThreadHandler.postDelayed(new Runnable() {
@Override
public void run() {
setAutopilotBtnStatus(autopilotStatus);
}
}, 1000);
UiThreadHandler.postDelayed(() -> setAutopilotBtnStatus(autopilotStatus), 1000);
}
private void changeAutopilotBtnView(int autopilotStatus, boolean isAnimateRunning) {
@@ -514,13 +509,10 @@ public abstract class BaseBusTabFragment<V extends IView, P extends Presenter<V>
private void startingAutoApilotCountDown() {
//10s 若自动驾驶没有开启,则结束动画
UiThreadHandler.postDelayed(new Runnable() {
@Override
public void run() { //未启动成功做处理
if (isAnimateRunning) {// 只判断动画是否在进行,根据自动驾驶当前状态去设置自动驾驶状态
stopAutopilotAnimation();
updateAutopilotStatus(CallerAutoPilotStatusListenerManager.INSTANCE.getState());
}
UiThreadHandler.postDelayed(() -> { //未启动成功做处理
if (isAnimateRunning) {// 只判断动画是否在进行,根据自动驾驶当前状态去设置自动驾驶状态
stopAutopilotAnimation();
updateAutopilotStatus(CallerAutoPilotStatusListenerManager.INSTANCE.getState());
}
}, TIMER_START_AUTOPILOT_INTERVAL);
@@ -540,8 +532,6 @@ public abstract class BaseBusTabFragment<V extends IView, P extends Presenter<V>
/**
* 迈速表实时更新
*
* @param newSpeed
*/
public void updateSpeedView(float newSpeed) {
int speed = (int) (Math.abs(newSpeed) * 3.6F); // 倒车时工控机反馈定位信息中speed为负值
@@ -553,7 +543,9 @@ public abstract class BaseBusTabFragment<V extends IView, P extends Presenter<V>
@Override
public void onDestroy() {
super.onDestroy();
smallMapView.onDestroy();
if(smallMapView != null){
smallMapView.onDestroy();
}
MogoMapListenerHandler.Companion.getMogoMapListenerHandler().unregisterHostMapListener(TAG);
}
@@ -592,6 +584,7 @@ public abstract class BaseBusTabFragment<V extends IView, P extends Presenter<V>
private TextView trajMd5DPQPTV;
private TextView stopMd5DPQPTV;
@SuppressLint("SetTextI18n")
public void showHideTestBar() {
if (busTestBar == null) {
busTestBar = findViewById(R.id.module_mogo_och_bus_test_bar);
@@ -617,6 +610,7 @@ public abstract class BaseBusTabFragment<V extends IView, P extends Presenter<V>
}
}
@SuppressLint("SetTextI18n")
public void updateBusTestBarInfo() {
if (busTestBar != null && busTestBar.getVisibility() == View.VISIBLE) {
BusRoutesResult routesResult = OrderModel.getInstance().getBusRoutesResult();
@@ -628,7 +622,5 @@ public abstract class BaseBusTabFragment<V extends IView, P extends Presenter<V>
stopMd5DPQPTV.setText("SMd5DPQP:" + (routesResult == null ? "" : routesResult.txtFileMd5DPQP));
}
}
/**
* END
*/
}

View File

@@ -1,20 +1,23 @@
package com.mogo.och.bus.fragment;
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS;
import static com.mogo.map.MogoMap.DEFAULT;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.Group;
import androidx.annotation.Nullable;
import com.alibaba.android.arouter.launcher.ARouter;
import com.mogo.cloud.passport.MoGoAiCloudClientConfig;
import com.mogo.eagle.core.data.config.FunctionBuildConfig;
import com.mogo.eagle.core.data.map.CenterLine;
import com.mogo.eagle.core.data.temp.EventLogout;
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener;
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager;
@@ -25,7 +28,6 @@ import com.mogo.eagle.core.utilcode.util.ToastUtils;
import com.mogo.map.overlay.IMoGoOverlayManager;
import com.mogo.map.overlay.core.Level;
import com.mogo.map.overlay.point.Point;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.och.bus.R;
import com.mogo.och.bus.bean.BusStationBean;
import com.mogo.och.bus.constant.BusConst;
@@ -42,8 +44,10 @@ import com.mogo.och.common.module.utils.QRUtilsKt;
import com.mogo.och.common.module.wigets.BindQRCodeDialog;
import com.mogo.och.common.module.wigets.MarqueeTextView;
import com.mogo.och.common.module.wigets.OCHCommitDialog;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.List;
import me.jessyan.autosize.utils.AutoSizeUtils;
@@ -81,10 +85,11 @@ public class BusFragment extends BaseBusTabFragment<BusFragment, BusPresenter>
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
loginService = (LoginService) ARouter.getInstance().build(OchCommonConst.LOGINSERVICE).navigation();
if(loginService!=null){
loginService.registerFragment(this, getPresenter(),new LoginBusImpl());
if (loginService != null) {
loginService.registerFragment(this, getPresenter(), new LoginBusImpl());
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
@@ -113,12 +118,9 @@ public class BusFragment extends BaseBusTabFragment<BusFragment, BusPresenter>
mSwitchLine.setOnClickListener(this);
mLineName.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
showHideTestBar();
return false;
}
mLineName.setOnLongClickListener(v -> {
showHideTestBar();
return false;
});
}
@@ -178,7 +180,7 @@ public class BusFragment extends BaseBusTabFragment<BusFragment, BusPresenter>
}
public void updateLineEmptyUI(){
setArrivedClikable(false);
setArrivedClickable(false);
showOrHideSwitchLineBtn(true);
hideStationsPanel();
hideSlidePanel();
@@ -486,30 +488,19 @@ public class BusFragment extends BaseBusTabFragment<BusFragment, BusPresenter>
.anchor(0.5f, 0.5f)
.set3DMode(true)
.isUseGps(true)
.controlAngle(true)
.controlAngle(false)
.icon3DRes(resourceId)
.latitude(lat)
.longitude(longi);
IMogoMapUIController mapUIController = CallerMapUIServiceManager.INSTANCE.getMapUIController();
if (mapUIController != null) {
CenterLine centerLine = mapUIController.getCenterLineInfo(
longi,lat,-1);
if (null != centerLine) { // 有可能鹰眼map为空没有角度。判空使用后可能造成maker角度跟道路角度不一致 地图未初始化会返回空
Double angle = centerLine.getAngle();
if (angle != null) {
builder.rotate(angle.floatValue());
}
}
}
IMoGoOverlayManager overlayManager = CallerMapUIServiceManager.INSTANCE.getOverlayManager();
if (overlayManager != null) {
overlayManager.showOrUpdatePoint(builder.build());
overlayManager.showOrUpdatePoint(builder.build(), DEFAULT);
}
};
OCHThreadPoolManager.getsInstance().execute(setMapMarkerRunnable);
}else {
} else {
Runnable removeMapMarkerRunnable = () -> {
CallerLogger.d(M_BUS + "RemoveMapMaker="+Thread.currentThread().getName(),
uuid+"=latitude="+lat+",longitude="+longi);

View File

@@ -144,7 +144,7 @@ public class BusPresenter extends Presenter<BusFragment>
public void hideSlidePanel() {
if (mView != null) {
mView.hideSlidePanel();
mView.setArrivedClikable(true);
mView.setArrivedClickable(true);
}
}

View File

@@ -8,6 +8,8 @@
<com.mogo.eagle.core.function.view.MapBizView
android:id="@+id/mapBizView"
app:isWeatherEnable="false"
app:locationIcon3DRes="@raw/xiaoba"
android:layout_width="match_parent"
android:layout_height="match_parent" />

View File

@@ -4,9 +4,9 @@ import android.annotation.SuppressLint
import android.content.Context
import android.net.ConnectivityManager
import android.os.Handler
import android.os.Looper
import com.amap.api.maps.model.LatLng
import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager
import com.mogo.commons.debug.DebugConfig
import com.mogo.commons.module.intent.IMogoIntentListener
import com.mogo.commons.module.intent.IntentManager
import com.mogo.commons.module.status.IMogoStatusChangedListener
@@ -31,7 +31,6 @@ import com.mogo.eagle.core.network.utils.GsonUtil
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils.isPassenger
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS_P
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr
import com.mogo.eagle.core.utilcode.util.GsonUtils
@@ -42,11 +41,7 @@ import com.mogo.och.bus.passenger.bean.BusPassengerOperationStatusResponse
import com.mogo.och.bus.passenger.bean.BusPassengerRoutesResponse
import com.mogo.och.bus.passenger.bean.BusPassengerRoutesResult
import com.mogo.och.bus.passenger.bean.BusPassengerStation
import com.mogo.och.bus.passenger.callback.IBusPassegerDriverStatusCallback
import com.mogo.och.bus.passenger.callback.IBusPassengerADASStatusCallback
import com.mogo.och.bus.passenger.callback.IBusPassengerAutopilotPlanningCallback
import com.mogo.och.bus.passenger.callback.IBusPassengerControllerStatusCallback
import com.mogo.och.bus.passenger.callback.IBusPassengerRouteLineInfoCallback
import com.mogo.och.bus.passenger.callback.*
import com.mogo.och.bus.passenger.constant.BusPassengerConst
import com.mogo.och.bus.passenger.network.BusPassengerModelLoopManager
import com.mogo.och.bus.passenger.network.BusPassengerServiceManager
@@ -82,7 +77,7 @@ import java.util.concurrent.ConcurrentHashMap
* Created on 2022/3/31
*/
@SuppressLint("StaticFieldLeak")
object BusPassengerModel{
object BusPassengerModel {
private val TAG = BusPassengerModel::class.java.simpleName
private const val MSG_QUERY_BUS_P_STATION = 1001
@@ -105,7 +100,7 @@ object BusPassengerModel{
var mStations: MutableList<BusPassengerStation> = ArrayList()
private var mNextStationIndex = 0 // 要到达站的index
private val mTwoStationsRouts: MutableList<MogoLocation> = ArrayList()
private val handler = Handler(Handler.Callback { msg ->
private val handler = Handler(Looper.getMainLooper(), Handler.Callback { msg ->
if (msg.what == MSG_QUERY_BUS_P_STATION) {
queryDriverOperationStatus()
return@Callback true
@@ -113,10 +108,12 @@ object BusPassengerModel{
false
})
@Volatile
private var isGoingToNextStation = false
fun init(context: Context) {
mContext = context.applicationContext
initListeners()
// TODO: 2022/3/31
queryDriverOperationStatus()
startOrStopOrderLoop(true)
}
@@ -147,8 +144,8 @@ object BusPassengerModel{
"queryDriverOperationStatus = %s",
data.data.plateNumber
)
mDriverStatusCallback!!.changeOperationStatus(data.data.driverStatus == 1)
mDriverStatusCallback!!.updatePlateNumber(data.data.plateNumber)
mDriverStatusCallback?.changeOperationStatus(data.data.driverStatus == 1)
mDriverStatusCallback?.updatePlateNumber(data.data.plateNumber)
}
}
@@ -179,9 +176,7 @@ object BusPassengerModel{
mNextStationIndex = 0
}
cleanStation("queryDriverSiteByCoordinate")
if (mRouteLineInfoCallback != null) {
mRouteLineInfoCallback!!.showNoTaskView()
}
mRouteLineInfoCallback?.showNoTaskView()
mRoutePoints.clear()
return
}
@@ -216,9 +211,12 @@ object BusPassengerModel{
private fun updatePassengerRouteInfo(result: BusPassengerRoutesResult) {
if (mRouteLineInfoCallback != null) {
Logger.d(M_BUS_P + TAG, "order = BusPassengerRoutesResult= " +GsonUtil.jsonFromObject(result))
mRouteLineInfoCallback!!.updateLineInfo(result.name, result.runningDur)
mRouteLineInfoCallback!!.hideNoTaskView()
d(
M_BUS_P + TAG,
"order = BusPassengerRoutesResult= " + GsonUtil.jsonFromObject(result)
)
mRouteLineInfoCallback?.updateLineInfo(result.name, result.runningDur)
mRouteLineInfoCallback?.hideNoTaskView()
if (result.sites != null) {
val stations = result.sites
mStations.clear()
@@ -226,8 +224,9 @@ object BusPassengerModel{
for (i in stations.indices) {
val station = stations[i]
if (station.drivingStatus == BusPassengerConst.STATION_STATUS_STOPPED && station.isLeaving && i + 1 < stations.size) { //离站
Logger.d(M_BUS_P + TAG, "order = station= leave")
mRouteLineInfoCallback!!.updateStationsInfo(stations, i + 1, false)
d(M_BUS_P + TAG, "order = station= leave")
isGoingToNextStation = true
mRouteLineInfoCallback?.updateStationsInfo(stations, i + 1, false)
if (mNextStationIndex != i + 1) {
mTwoStationsRouts.clear()
}
@@ -241,11 +240,14 @@ object BusPassengerModel{
if (i == stations.size - 1) {
cleanStation("updatePassengerRouteInfo最后一个站点")
}
isGoingToNextStation = false
suspendCalculate()
Logger.d(M_BUS_P + TAG, "order = station= arrive")
d(M_BUS_P + TAG, "order = station= arrive")
mRouteLineInfoCallback!!.updateStationsInfo(stations, i, true)
mRouteLineInfoCallback?.updateStationsInfo(stations, i, true)
clearAutopilotControlParameters()
return
}
@@ -379,17 +381,17 @@ object BusPassengerModel{
override fun distanceCallback(distance: Float) {
val lastTime: Double = distance / BusPassengerConst.BUS_AVERAGE_SPEED * 3.6 //秒
d(M_BUS_P + TAG, "轨迹排查==lastSumLength = $distance")
for (site in routesResult!!.sites) {
if (site.drivingStatus == BusPassengerConst.STATION_STATUS_STOPPED && !site.isLeaving) {
return
routesResult?.let {
for (site in it.sites) {
if (site.drivingStatus == BusPassengerConst.STATION_STATUS_STOPPED && !site.isLeaving) {
return
}
}
}
if (mAutopilotPlanningCallback != null) {
mAutopilotPlanningCallback!!.routePlanningToNextStationChanged(
distance.toLong(),
lastTime.toLong()
)
}
mAutopilotPlanningCallback?.routePlanningToNextStationChanged(
distance.toLong(),
lastTime.toLong()
)
}
}
private val trajectoryListener: ITrajectoryListener =
@@ -400,19 +402,19 @@ object BusPassengerModel{
location: MogoLocation
) {
if (mAutopilotPlanningCallback != null) {
val routeArriviedTemp: MutableList<LatLng> = ArrayList()
val routeArrivedTemp: MutableList<LatLng> = ArrayList()
val routeArrivingTemp: MutableList<LatLng> = ArrayList()
var temp: LatLng
for (mogoLocation in routeArrivied) {
temp = LatLng(mogoLocation.latitude, mogoLocation.longitude)
routeArriviedTemp.add(temp)
routeArrivedTemp.add(temp)
}
for (mogoLocation in routeArriving) {
temp = LatLng(mogoLocation.latitude, mogoLocation.longitude)
routeArrivingTemp.add(temp)
}
mAutopilotPlanningCallback!!.routeResult(
routeArriviedTemp,
mAutopilotPlanningCallback?.routeResult(
routeArrivedTemp,
routeArrivingTemp,
location
)
@@ -421,16 +423,14 @@ object BusPassengerModel{
}
private val mReceivedMsgListener: IReceivedMsgListener = object : IReceivedMsgListener {
override fun onReceivedServerSn(sn: String?) {
Logger.d(M_BUS_P + TAG, "onReceivedServerSn = $sn")
if (mDriverStatusCallback != null) {
mDriverStatusCallback!!.updateDriverSn(sn)
}
d(M_BUS_P + TAG, "onReceivedServerSn = $sn")
mDriverStatusCallback?.updateDriverSn(sn)
}
override fun onReceivedMsg(type: Int, byteArray: ByteArray) {
if (OchCommonConst.BUSINESS_STRING == type) {
val baseMsg = GsonUtils.fromJson(String(byteArray), BaseDPMsg::class.java)
Logger.d(
d(
M_BUS_P + TAG,
"onReceivedMsg = " + GsonUtils.toJson(baseMsg)
)
@@ -486,18 +486,29 @@ object BusPassengerModel{
private var arriveAtEnd = false //乘客app专用字段
override fun onAutopilotStatusResponse(state: Int) {
if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) {
if (mADASStatusCallback != null) mADASStatusCallback!!.onAutopilotRunning()
} else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) {
mTwoStationsRouts.clear()
if (mADASStatusCallback != null) mADASStatusCallback!!.onAutopilotEnable()
} else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) {
mTwoStationsRouts.clear()
if (mADASStatusCallback != null) mADASStatusCallback!!.onAutopilotDisable()
} else if (state == IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING) {
mTwoStationsRouts.clear()
if (mADASStatusCallback != null) mADASStatusCallback!!.onAutopilotRunning()
mADASStatusCallback?.onAutopilotRunning()
} else {
if (FunctionBuildConfig.isDemoMode &&
mNextStationIndex >= 0 && mNextStationIndex <= mStations.size - 1
&& isGoingToNextStation
) {
d(M_BUS_P + TAG, "FunctionBuildConfig.isDemoMode is true")
return
}
if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) {
mTwoStationsRouts.clear()
mADASStatusCallback?.onAutopilotEnable()
} else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) {
mTwoStationsRouts.clear()
mADASStatusCallback?.onAutopilotDisable()
} else if (state == IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING) {
mTwoStationsRouts.clear()
mADASStatusCallback?.onAutopilotRunning()
}
}
}
override fun onAutopilotArriveAtStation(arrivalNotification: ArrivalNotification?) {
if (FunctionBuildConfig.isDemoMode
&& isPassenger(FunctionBuildConfig.appIdentityMode)
@@ -505,13 +516,10 @@ object BusPassengerModel{
arriveAtEnd = true
}
// TODO: 2022/3/31
if (DebugConfig.isDebug()) {
// ToastUtils.showShort("到达目的地");
}
if (mADASStatusCallback != null) {
mADASStatusCallback!!.onAutopilotArriveEnd()
}
// if (DebugConfig.isDebug()) {
// ToastUtils.showShort("到达目的地");
// }
mADASStatusCallback?.onAutopilotArriveEnd()
}
override fun onAutopilotStatusRespByQuery(status: SystemStatusInfo.StatusInfo) {}
@@ -532,7 +540,8 @@ object BusPassengerModel{
fun updateRoutePoints(routePoints: List<MessagePad.Location>) {
mRoutePoints.clear()
val latLngModels: List<MogoLocation> = coordinateConverterWgsToGcjLocations(mContext, routePoints)
val latLngModels: List<MogoLocation> =
coordinateConverterWgsToGcjLocations(mContext, routePoints)
mRoutePoints.addAll(latLngModels)
calculateTwoStationsRoute()
}
@@ -573,9 +582,7 @@ object BusPassengerModel{
val sumLength = calculateRouteSumLength(mTwoStationsRouts)
SharedPrefsMgr.getInstance(mContext!!)
.putInt(BusPassengerConst.BUS_SP_KEY_ORDER_SUM_DIS, sumLength.toInt())
if (mAutopilotPlanningCallback != null) {
mAutopilotPlanningCallback!!.updateTotalDistance()
}
mAutopilotPlanningCallback?.updateTotalDistance()
}
}
}
@@ -603,7 +610,7 @@ object BusPassengerModel{
setStationPoint(startStation, endStation, lineId.toLong())
}
fun cleanStation(type:String) {
fun cleanStation(type: String) {
d(M_BUS_P + TAG, "清理站点 $type")
setStationPoint(null, null, -1L)
}

View File

@@ -152,8 +152,8 @@ public class BaseBusPassengerPresenter extends Presenter<BusPassengerRouteFragme
}
@Override
public void routeResult(List<LatLng> routeArrivied,List<LatLng> routeArriving,MogoLocation location) {
runOnUIThread(() ->mView.routeResult(routeArrivied,routeArriving,location));
public void routeResult(List<LatLng> routeArrived,List<LatLng> routeArriving,MogoLocation location) {
runOnUIThread(() ->mView.routeResult(routeArrived,routeArriving,location));
}
@Override

View File

@@ -12,7 +12,6 @@ import kotlinx.android.synthetic.jinlvvan.p_bus_view_blue_tooth.view.*
/**
* 魔戒蓝牙控件
* 放置于StatusBar右侧位置
* todo arrow
*/
class BusPBlueToothView @JvmOverloads constructor(
context: Context,

View File

@@ -4,7 +4,6 @@ import android.content.Context
import android.os.Bundle
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.MotionEvent
import android.view.View
import android.widget.RelativeLayout
import com.amap.api.maps.AMap
@@ -56,7 +55,7 @@ class BusPassengerMapDirectionView @JvmOverloads constructor(
private var mArrivedRes: BitmapDescriptor? = null
private var mUnArrivedRes: BitmapDescriptor? = null
private val routeArrivied: MutableList<LatLng> = ArrayList()
private val routeArrived: MutableList<LatLng> = ArrayList()
private val routeArriving: MutableList<LatLng> = ArrayList()
private var location: MogoLocation? = null
@@ -165,7 +164,7 @@ class BusPassengerMapDirectionView @JvmOverloads constructor(
try {
//圈定地图显示范围
val boundsBuilder = LatLngBounds.Builder()
routeArrivied.forEach {
routeArrived.forEach {
boundsBuilder.include(it)
}
routeArriving.forEach {
@@ -190,26 +189,28 @@ class BusPassengerMapDirectionView @JvmOverloads constructor(
}
override fun drawablePolyline() {
if (routeArrivied.isEmpty() && routeArriving.isEmpty()) {
if (routeArrived.isEmpty() && routeArriving.isEmpty()) {
d(SceneConstant.M_TAXI + TAG, "没有点")
return
}
texIndexList.clear()
val allPoints = ArrayList(routeArrivied)
for (i in routeArrivied.indices) {
if (routeArrivied.size > 1 && i < routeArrivied.size - 1) {
val allPoints = ArrayList(routeArrived)
for (i in routeArrived.indices) {
if (routeArrived.size > 1 && i < routeArrived.size - 1) {
texIndexList.add(0)
}
}
texIndexList.add(0)
allPoints.add(LatLng(location!!.latitude, location!!.longitude))
location?.let {
allPoints.add(LatLng(it.latitude, it.longitude))
}
allPoints.addAll(routeArriving)
for (ignored in routeArrivied) {
for (ignored in routeArrived) {
texIndexList.add(1)
}
if (mPolyline != null) {
mPolyline!!.points = allPoints
mPolyline!!.options.customTextureIndex = texIndexList
mPolyline?.let {
it.points = allPoints
it.options.customTextureIndex = texIndexList
return
}
if(textureList.isEmpty()) {
@@ -231,10 +232,8 @@ class BusPassengerMapDirectionView @JvmOverloads constructor(
}
override fun clearPolyline() {
if (mPolyline != null) {
mPolyline!!.remove()
mPolyline = null
}
mPolyline?.remove()
mPolyline = null
}
override fun setLineMarker() {}
@@ -242,7 +241,7 @@ class BusPassengerMapDirectionView @JvmOverloads constructor(
fun clearCoordinatesLatLng() {
textureList.clear()
texIndexList.clear()
routeArrivied.clear()
routeArrived.clear()
routeArriving.clear()
mLineStationLatLng.clear()
d(M_BUS_P + TAG, " mCoordinatesLatLng.clear ")
@@ -265,14 +264,14 @@ class BusPassengerMapDirectionView @JvmOverloads constructor(
}
fun setCoordinatesLatLng(
routeArrivied: List<LatLng>?,
routeArriving: List<LatLng>?,
routeArrived: List<LatLng>,
routeArriving: List<LatLng>,
location: MogoLocation?
) {
this.routeArrivied.clear()
this.routeArrivied.addAll(routeArrivied!!)
this.routeArrived.clear()
this.routeArrived.addAll(routeArrived)
this.routeArriving.clear()
this.routeArriving.addAll(routeArriving!!)
this.routeArriving.addAll(routeArriving)
this.location = location
}

View File

@@ -240,9 +240,9 @@ public class BusPassengerRouteFragment extends
}
}
public void routeResult(List<LatLng> routeArrivied,List<LatLng> routeArriving,MogoLocation location) {
if (routeArrivied.size() > 0||routeArriving.size()>0) {
drawablePolyline(routeArrivied,routeArriving,location);
public void routeResult(List<LatLng> routeArrived,List<LatLng> routeArriving,MogoLocation location) {
if (routeArrived.size() > 0||routeArriving.size()>0) {
drawablePolyline(routeArrived,routeArriving,location);
} else {
clearMapView();
}
@@ -250,12 +250,10 @@ public class BusPassengerRouteFragment extends
/**
* 绘制
*
* @param coordinates
*/
private void drawablePolyline(List<LatLng> routeArrivied,List<LatLng> routeArriving,MogoLocation location) {
private void drawablePolyline(List<LatLng> routeArrived,List<LatLng> routeArriving,MogoLocation location) {
if (mMapDirectionView != null) {
mMapDirectionView.setCoordinatesLatLng(routeArrivied,routeArriving,location);
mMapDirectionView.setCoordinatesLatLng(routeArrived,routeArriving,location);
UiThreadHandler.post(() -> mMapDirectionView.drawablePolyline());
}
}
@@ -453,8 +451,6 @@ public class BusPassengerRouteFragment extends
public void AutopilotStatusChanged(int status) {
if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == status) {
mAutopilotIv.setImageResource(R.drawable.auto_open);
} else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE == status){
mAutopilotIv.setImageResource(R.drawable.auto_close);
} else {
mAutopilotIv.setImageResource(R.drawable.auto_close);
}

View File

@@ -1,19 +1,13 @@
package com.mogo.och.bus.passenger.ui
import android.app.Activity
import android.content.Context
import android.util.AttributeSet
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.RelativeLayout
import androidx.viewpager.widget.PagerAdapter
import androidx.viewpager.widget.ViewPager
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.och.bus.passenger.R
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.och.bus.passenger.ui.MapAndLiveVideoView.Companion.TAG
import java.lang.Exception
/**
* @author: wangmingjun
@@ -33,7 +27,7 @@ class MapAndLiveVideoView @JvmOverloads constructor(
}
init {
initView()
initView()
}
private fun initView() {
@@ -46,53 +40,54 @@ class MapAndLiveVideoView @JvmOverloads constructor(
viewPager?.addOnPageChangeListener(this)
}
fun setData(list: MutableList<View>){
fun setData(list: MutableList<View>) {
pagerAdapter?.setData(list)
pagerAdapter?.notifyDataSetChanged()
}
fun setItemChangeListener(listener : ChangeItemListener?){
fun setItemChangeListener(listener: ChangeItemListener?) {
changeItemListener = listener
}
fun changeToSecondView(){
if (viewPager?.currentItem == 0){
fun changeToSecondView() {
if (viewPager?.currentItem == 0) {
startPosition = 0
}
viewPager?.currentItem = 1
}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
Logger.d(TAG, "onPageScrolled--position = $position")
CallerLogger.d(TAG, "onPageScrolled--position = $position")
}
override fun onPageSelected(position: Int) {
Logger.d(TAG, "onPageSelected--position = $position")
CallerLogger.d(TAG, "onPageSelected--position = $position")
}
var startPosition = 1
override fun onPageScrollStateChanged(state: Int) {
Logger.d(TAG, "onPageScrollStateChanged--state = $state")
CallerLogger.d(TAG, "onPageScrollStateChanged--state = $state")
viewPager?.let {
val position = it.currentItem
if (state == 0) { //静止
if (startPosition == position){
if (position==0){
if (startPosition == position) {
if (position == 0) {
it.currentItem = 1
}else{
} else {
it.currentItem = 0
}
}else{
} else {
changeItemListener?.changeToItem(it.currentItem)
}
}else if (state == 1){ // 开始滑动
} else if (state == 1) { // 开始滑动
startPosition = it.currentItem
}else{
} else {
}
}
}
interface ChangeItemListener{
interface ChangeItemListener {
fun changeToItem(position: Int)
}
}
@@ -101,25 +96,25 @@ class AdvancePagerAdapter : PagerAdapter(),
ViewPager.OnPageChangeListener {
private var views: List<View>? = null
fun setData(views: List<View>?){
fun setData(views: List<View>?) {
this.views = views
}
override fun instantiateItem(container: View, position: Int): Any {
Logger.d(TAG, "instantiateItem--position = $position")
CallerLogger.d(TAG, "instantiateItem--position = $position")
return try {
val currentItem = position % views!!.size
(container as ViewPager).addView(views!![currentItem])
views!![currentItem]
}catch (e: Exception){
} catch (e: Exception) {
container
}
}
override fun getCount(): Int {
return if (views == null){
return if (views == null) {
0
}else{
} else {
views!!.size
}
}
@@ -129,14 +124,14 @@ class AdvancePagerAdapter : PagerAdapter(),
}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
// Logger.d(TAG, "onPageScrolled--position = $position")
// CallerLogger.d(TAG, "onPageScrolled--position = $position")
}
override fun onPageSelected(position: Int) {
// Logger.d(TAG, "onPageSelected--position = $position")
// CallerLogger.d(TAG, "onPageSelected--position = $position")
}
override fun onPageScrollStateChanged(state: Int) {
// Logger.d(TAG, "onPageScrollStateChanged--state = $state")
// CallerLogger.d(TAG, "onPageScrollStateChanged--state = $state")
}
}

View File

@@ -8,6 +8,9 @@
android:id="@+id/mapBizView"
android:layout_width="1810dp"
android:layout_height="match_parent"
app:styleMode="MAP_STYLE_DAY_VR"
app:isWeatherEnable="false"
app:locationIcon3DRes="@raw/xiaoba"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />

View File

@@ -87,7 +87,17 @@ object CharterTrajectoryManager {
// 5. 轨迹管理_轨迹下载超时
d(SceneConstant.M_CHARTER_D + TAG, "onAutopilotGuardian() 轨迹下载超时")
// ToastUtils.showShort("轨迹下载超时");
} else if ("ISSM_FUNC_AUTO_PILOT_READY" == guardianInfo.getCode()) {
} else if ("EMAP_ATTITUDE_INIT_FAILED" == guardianInfo.getCode()) {
CallerMsgBoxManager.saveMsgBox(
MsgBoxBean(
MsgBoxType.OPERATION,
OperationMsg(
System.currentTimeMillis(), "请尽快操作车辆至适当位置掉头!", -1
)
)
)
SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(ActivityUtils.getTopActivity(), R.raw.startautopilot)
} else if ("EMAP_ATTITUDE_INIT_FAILED" == guardianInfo.getCode()) {
// 收到ssm的自动驾驶变为ready再次下发轨迹下载.解决域控重启或者102域控启动太早107节点初始化未完成导致的轨迹未进行下载。
d(SceneConstant.M_CHARTER_D + TAG, "onAutopilotGuardian() ssm ready再次发起下载")
syncTrajectoryInfo(get().getBusOrderResult()?.lineId!!,

View File

@@ -333,6 +333,9 @@ class DriverM1Model {
mControllerStatusCallback?.onStartAdasFailure()
}
}
override fun brakeStatusChanged(isBrakeAvailable: Boolean) {
}
}
//监听网络变化,避免启动机器时无网导致无法更新订单信息

View File

@@ -22,7 +22,6 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListener
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager.initAiCollect
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager.initBadCase
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager.showToolsView
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getMapUIController
import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxBubbleView
import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxButtonView
import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxButtonView.ClickListener
@@ -40,7 +39,7 @@ import com.mogo.map.uicontroller.VisualAngleMode
import com.mogo.och.common.module.utils.SoundPoolHelper
import kotlinx.android.synthetic.main.charter_base_fragment.*
import org.greenrobot.eventbus.EventBus
import java.util.*
import kotlin.math.abs
/**
* @author: wangmingjun
@@ -104,23 +103,20 @@ abstract class CharterBaseFragment<V : IView?, P : Presenter<V>?>() :
updateSwitchMapIcon()
mSwitchMapModeLayout!!.setOnClickListener(object : OnPreventFastClickListener() {
override fun onClickImpl(v: View) {
val controller = getMapUIController()
if (controller != null) {
//切换地图的远近视图
if (controller.currentMapVisualAngle.isLongSight) {
//Objects.requireNonNull(getMapUIController())
// ?.setLockMode(true)
controller.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null)
mSwitchMapModeImage!!.setImageResource(R.drawable.bus_switch_map_medium)
} else if (controller.currentMapVisualAngle.isMediumSight) {
//Objects.requireNonNull(getMapUIController())
// ?.setLockMode(false)
controller.changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null)
mSwitchMapModeImage!!.setImageResource(R.drawable.bus_switch_map_long)
} else {
controller.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null)
mSwitchMapModeImage!!.setImageResource(R.drawable.bus_switch_map_medium)
mapBizView?.let {
it.getUI()?.let { ui ->
if (ui.currentMapVisualAngle.isLongSight) {
ui.setLockMode(true)
ui.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null)
mSwitchMapModeImage!!.setImageResource(R.drawable.bus_switch_map_medium)
} else if (ui.currentMapVisualAngle.isMediumSight) {
ui.setLockMode(false)
ui.changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null)
mSwitchMapModeImage!!.setImageResource(R.drawable.bus_switch_map_long)
} else {
ui.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null)
mSwitchMapModeImage!!.setImageResource(R.drawable.bus_switch_map_medium)
}
}
}
}
@@ -166,7 +162,6 @@ abstract class CharterBaseFragment<V : IView?, P : Presenter<V>?>() :
mSettingBtn = findViewById(R.id.module_mogo_och_setting_layout)
mSettingBtn!!.setOnClickListener { v: View? ->
// TODO: 2021/12/9
showToolsView()
}
@@ -268,14 +263,15 @@ abstract class CharterBaseFragment<V : IView?, P : Presenter<V>?>() :
}
private fun updateSwitchMapIcon() {
val controller = getMapUIController()
if (controller != null) {
if (controller.currentMapVisualAngle.isLongSight) {
mSwitchMapModeImage!!.setImageResource(R.drawable.bus_switch_map_long)
} else if (controller.currentMapVisualAngle.isMediumSight) {
mSwitchMapModeImage!!.setImageResource(R.drawable.bus_switch_map_medium)
} else {
mSwitchMapModeImage!!.setImageResource(R.drawable.bus_switch_map_medium)
mapBizView?.let {
it.getUI()?.let { ui ->
if (ui.currentMapVisualAngle.isLongSight) {
mSwitchMapModeImage!!.setImageResource(R.drawable.bus_switch_map_long)
} else if (ui.currentMapVisualAngle.isMediumSight) {
mSwitchMapModeImage!!.setImageResource(R.drawable.bus_switch_map_medium)
} else {
mSwitchMapModeImage!!.setImageResource(R.drawable.bus_switch_map_medium)
}
}
}
}
@@ -476,7 +472,7 @@ abstract class CharterBaseFragment<V : IView?, P : Presenter<V>?>() :
* @param newSpeed
*/
open fun updateSpeedView(newSpeed: Float) {
val speed = (Math.abs(newSpeed) * 3.6f).toInt() // 倒车时工控机反馈定位信息中speed为负值
val speed = (abs(newSpeed) * 3.6f).toInt() // 倒车时工控机反馈定位信息中speed为负值
if (mTrafficDataView != null) {
mTrafficDataView!!.updateSpeedWithValue(speed)
}
@@ -484,7 +480,7 @@ abstract class CharterBaseFragment<V : IView?, P : Presenter<V>?>() :
override fun onDestroy() {
super.onDestroy()
smallMapView!!.onDestroy()
smallMapView?.onDestroy()
mogoMapListenerHandler.unregisterHostMapListener(TAG)
}

View File

@@ -8,6 +8,8 @@
<com.mogo.eagle.core.function.view.MapBizView
android:id="@+id/mapBizView"
app:isWeatherEnable="false"
app:locationIcon3DRes="@raw/m1"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

View File

@@ -6,8 +6,6 @@ import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentManager
import com.alibaba.android.arouter.facade.annotation.Route
import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getMapUIController
import com.mogo.eagle.core.function.call.setting.CallerMoGoUiSettingManager.stepInDayMode
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.och.charter.passenger.constant.CharterPassengerConst

View File

@@ -3,6 +3,7 @@ package com.mogo.och.charter.passenger.bean.response
import com.mogo.commons.AbsMogoApplication
import com.mogo.eagle.core.data.BaseData
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil
import com.mogo.och.common.module.utils.DateTimeUtil
/**
*
@@ -65,6 +66,20 @@ data class OrderInfoResponse(val data: OrderInfo?) : BaseData() {
return null
}
}
override fun toString(): String {
return "OrderInfo(orderNo=$orderNo, sn=$sn, productType=${getProductTypeName()}, lineId=$lineId, lineName=$lineName, startSiteId=$startSiteId, startSiteName=$startSiteName, startSiteNameKr=$startSiteNameKr, siteId=$siteId, siteName=$siteName, siteNameKr=$siteNameKr, wgs84Lat=$wgs84Lat, wgs84Lon=$wgs84Lon, startTime=${DateTimeUtil.formatLongToString(startTime?:System.currentTimeMillis(), DateTimeUtil.MM_dd_HH_mm)}, endTime=${DateTimeUtil.formatLongToString(endTime?:System.currentTimeMillis(), DateTimeUtil.MM_dd_HH_mm)}, passengerPhone=$passengerPhone, arriveStatus=$arriveStatus)"
}
fun getProductTypeName(): String {
return when (productType) {
M1_LOVE -> "爱情号"
M1_FAMILY -> "家庭号"
M1_FRIENDLY -> "朋友号"
else -> "未知"
}
}
}
companion object{
val ARRIVING = 1

View File

@@ -42,6 +42,7 @@ import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
import com.mogo.och.common.module.manager.CharterSendTripInfoManager
import com.mogo.och.common.module.manager.CharterSendTripInfoManager.LEAVE_STATION
import com.mogo.och.common.module.manager.autopilotmanager.OCHAdasAbilityManager
import com.mogo.och.common.module.manager.orderlogmanager.OchChainLogManager
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.common.module.utils.PinYinUtil
@@ -52,6 +53,7 @@ import io.reactivex.Observable
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
import mogo.telematics.pad.MessagePad
import mogo_msg.MogoReportMsg
import java.util.*
import java.util.concurrent.ConcurrentHashMap
import java.util.concurrent.TimeUnit
@@ -196,6 +198,14 @@ object CharterPassengerModel {
d(M_BUS_P + TAG, "底盘给到站信息")
arriveDest()
}
override fun onAutopilotGuardian(guardianInfo: MogoReportMsg.MogoReportMessage?) {
super.onAutopilotGuardian(guardianInfo)
guardianInfo?.let {
if (it.code=="IMAP_TRA_LOADED") {
ToastCharterUtils.showToastShort("请等待车辆完成掉头后再出发吧~")
}
}
}
}
/**
@@ -393,6 +403,7 @@ object CharterPassengerModel {
this.orderInfo = orderData
setOrderStatus(OrderStatusEnum.OrdersWithLine)
updateAutopilotControlParameters()
OchChainLogManager.writeChainLog(this.orderInfo.toString(),"更改线路成功:${orderData.siteName}")
} else {
this.orderInfo = orderData
}
@@ -727,6 +738,7 @@ object CharterPassengerModel {
private fun setOrderStatus(orderStatus: OrderStatusEnum) {
if (this.orderStatus != orderStatus) {
d(M_BUS_P + TAG, "${this.orderInfo?.orderNo}新的状态:$orderStatus")
OchChainLogManager.writeChainLog(this.orderInfo.toString(),"新的状态:$orderStatus")
this.orderStatus = orderStatus
for (callback in orderStatusChangeListeners.values) {
callback.onStatusChange(this.orderStatus)
@@ -737,6 +749,7 @@ object CharterPassengerModel {
fun setEndOrderStatus() {
UiThreadHandler.postDelayed({
setOrderStatus(OrderStatusEnum.NoOrderUse)
OchChainLogManager.writeChainLog(this.orderInfo.toString(),"手动结束订单:$orderStatus")
}, 1000)
}
@@ -933,6 +946,7 @@ object CharterPassengerModel {
}
if (order != null && lineId != null && siteId != null) {
OchChainLogManager.writeChainLog(this.orderInfo.toString(),"到站成功:${order.siteName}")
VoiceManager.arrivedStation(
order.siteName!!,
order.siteNameKr ?: "",

View File

@@ -34,7 +34,7 @@ import com.mogo.och.charter.passenger.ui.overmapview.MakerWithSiteNamewithCheck
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
import com.mogo.och.common.module.manager.autopilotmanager.OCHAdasAbilityManager
import com.mogo.och.common.module.manager.StopSideStatusManager
import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorCallback
import com.mogo.och.common.module.manager.devicemanage.callback.LightAirconditionDoorCallback
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil
import com.mogo.och.common.module.voice.VoiceNotice
import com.mogo.och.common.module.wigets.toast.ToastCharterUtils
@@ -79,19 +79,19 @@ class BusPassengerPresenter(view: MainFragment?) :
override fun setCarChangeListener(productType: Int?) {
when (productType) {
OrderInfoResponse.M1_LOVE -> {
mView?.setCarModle(R.raw.aiqinghao)
mView?.setCarModel(R.raw.aiqinghao)
}
OrderInfoResponse.M1_FAMILY -> {
mView?.setCarModle(R.raw.jiatinghao)
mView?.setCarModel(R.raw.jiatinghao)
}
OrderInfoResponse.M1_FRIENDLY -> {
mView?.setCarModle(R.raw.pengyouhao)
mView?.setCarModel(R.raw.pengyouhao)
}
else -> {
mView?.setCarModle(R.raw.m1)
mView?.setCarModel(R.raw.m1)
}
}
}

View File

@@ -198,7 +198,7 @@ class MainFragment : MvpFragment<MainFragment?, BusPassengerPresenter?>(), IMogo
}
}
fun setCarModle(rawInfo: Int) {
fun setCarModel(rawInfo: Int) {
getMapUIController()?.changeCurrentIcon(rawInfo)
HdMapBuildConfig.currentCarVrIconRes = rawInfo
}

View File

@@ -13,6 +13,9 @@ import kotlinx.android.synthetic.main.m1_itinerary_info.view.tv_distance_surplus
import kotlinx.android.synthetic.main.m1_itinerary_info.view.tv_distance_unit
import kotlinx.android.synthetic.main.m1_itinerary_info.view.tv_speed
/**
* 速度、剩余时间、剩余距离和到达时间
*/
class ItineraryView : ConstraintLayout, ItineraryViewModel.ItineraryViewCallback {
private val TAG = "ItineraryView"

View File

@@ -19,6 +19,9 @@ import kotlinx.android.synthetic.main.m1_devices_fragment.view.actv_order_times
import kotlinx.android.synthetic.main.m1_devices_fragment.view.cl_order_info
import kotlinx.android.synthetic.main.m1_devices_fragment.view.cl_order_info_endorder_comfit
/**
* 剩余时间和结束订单入口
*/
class OrderInfoView : ConstraintLayout, OrderInfoViewModel.ItineraryViewCallback {
private val TAG = "OrderInfoView"

View File

@@ -41,10 +41,11 @@ import kotlinx.android.synthetic.main.m1_order_loading.view.iv_loading_wait_ent
import me.jessyan.autosize.utils.AutoSizeUtils
import org.greenrobot.eventbus.EventBus
/**
* 选择线路
*/
class SelectLineView : ConstraintLayout, SelectLineViewModel.SelectLineViewCallback {
private val TAG = "OrderInfoView"
constructor(context: Context) : super(context)
constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)
@@ -98,7 +99,7 @@ class SelectLineView : ConstraintLayout, SelectLineViewModel.SelectLineViewCallb
rlv_line_list.layoutManager =
LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
rlv_line_list.addItemDecoration(
com.mogo.och.charter.passenger.ui.selectline.layoutmanage.BottomDecoration(
BottomDecoration(
AutoSizeUtils.dp2px(context, 60f)
)
)
@@ -107,7 +108,7 @@ class SelectLineView : ConstraintLayout, SelectLineViewModel.SelectLineViewCallb
rv_site_list.layoutManager =
LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
rv_site_list.addItemDecoration(
com.mogo.och.charter.passenger.ui.selectline.layoutmanage.BottomDecoration(
BottomDecoration(
AutoSizeUtils.dp2px(context, 90f)
)
)

View File

@@ -72,6 +72,9 @@ import kotlinx.android.synthetic.main.m1_soft_fragment.view.tv_temperature_title
import me.jessyan.autosize.utils.AutoSizeUtils
import java.util.concurrent.TimeUnit
/**
* 空调、暖风机、声音控制
*/
class SoftControlView : ConstraintLayout, SoftControlViewModel.SoftControlCallback {
private val TAG = "OrderInfoView"

View File

@@ -6,7 +6,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS_P
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.common.module.wigets.toast.ToastCharterUtils
import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorCallback
import com.mogo.och.common.module.manager.devicemanage.callback.LightAirconditionDoorCallback
import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorStatusManager
import com.mogo.och.common.module.manager.devicemanage.data.AirconditionStatus
import com.mogo.och.common.module.manager.devicemanage.data.HeaterStatue
@@ -138,7 +138,7 @@ class SoftControlViewModel : ViewModel(), LightAirconditionDoorCallback {
*/
fun openAndSetAircondition(modeCmd: Int, windSpeedCmd: Int, temperatureCmd: Int) {
CallerLogger.d(
M_BUS_P + TAG, "" + "打开空调,模式$modeCmd--档位${windSpeedCmd}--温度:$temperatureCmd"
M_BUS_P + TAG, "打开空调,模式$modeCmd--档位${windSpeedCmd}--温度:$temperatureCmd"
)
CallerAutoPilotControlManager.sendRoboBusJinlvM1AirConditionerCmd(
1, modeCmd, windSpeedCmd, temperatureCmd

View File

@@ -7,12 +7,14 @@
<com.mogo.eagle.core.function.view.MapBizView
android:id="@+id/mapBizView"
android:layout_width="0dp"
app:layout_constraintWidth_percent="0.662"
app:styleMode="MAP_STYLE_DAY_VR"
app:isWeatherEnable="false"
app:locationIcon3DRes="@raw/m1"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.662" />
app:layout_constraintBottom_toBottomOf="parent"/>
<com.mogo.eagle.core.function.view.OverMapView
android:id="@+id/omvOverMap"
android:layout_width="0dp"
@@ -90,12 +92,14 @@
app:layout_constraintEnd_toEndOf="@+id/viewBusPM1MsgBoxButton"
app:layout_constraintTop_toBottomOf="@+id/viewBusPM1MsgBoxButton" />
<!--速度、剩余时间、剩余距离和到达时间-->
<com.mogo.och.charter.passenger.ui.itinerary.ItineraryView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--剩余时间和结束订单入口-->
<com.mogo.och.charter.passenger.ui.orderinfo.OrderInfoView
android:id="@+id/biz_orderinfo"
android:layout_width="match_parent"
@@ -105,12 +109,14 @@
app:layout_constraintBottom_toTopOf="@+id/bb_boorombar"
app:layout_constraintTop_toTopOf="parent" />
<!--空调、暖风机、声音控制-->
<com.mogo.och.charter.passenger.ui.softcontrol.SoftControlView
android:id="@+id/biz_softcontrol"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
<!--选择线路-->
<com.mogo.och.charter.passenger.ui.selectline.SelectLineView
android:id="@+id/biz_selectline"
android:layout_width="0dp"
@@ -122,13 +128,14 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--视频播放-->
<com.mogo.och.charter.passenger.ui.video.VideoView
android:id="@+id/biz_video"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
<!--底部导航栏-->
<com.mogo.och.charter.passenger.ui.bottom.BottomBar
android:id="@+id/bb_boorombar"
android:layout_width="match_parent"
@@ -137,6 +144,7 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<!--调试面板-->
<com.mogo.och.charter.passenger.ui.debugview.DebugView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -145,6 +153,7 @@
app:layout_constraintEnd_toEndOf="@+id/mapBizView"
app:layout_constraintTop_toTopOf="parent" />
<!--锁定状态和解锁入口-->
<com.mogo.och.charter.passenger.ui.lockview.UnlockView
android:id="@+id/uv_only_unlock"
android:visibility="gone"
@@ -156,6 +165,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<!--锁定和解锁入口-->
<com.mogo.och.charter.passenger.ui.lockview.LockAndUnlockView
android:layout_width="@dimen/dp_138"
android:layout_height="@dimen/dp_138"

View File

@@ -62,13 +62,11 @@ dependencies {
api project(":OCH:mogo-och-data")
if (Boolean.valueOf(USE_MAVEN_PACKAGE)) {
api rootProject.ext.dependencies.mogoutils
api rootProject.ext.dependencies.mogocommons
api rootProject.ext.dependencies.mogo_core_function_call
api rootProject.ext.dependencies.mogo_core_function_hmi
api rootProject.ext.dependencies.mogo_core_function_map
}else {
api project(":core:mogo-core-utils")
api project(":foudations:mogo-commons")
api project(':core:mogo-core-function-call')
api project(':core:function-impl:mogo-core-function-hmi')

View File

@@ -18,6 +18,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.och.common.module.debug.location.MogoLocationExit
import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil
import mogo.telematics.pad.MessagePad
import mogo_msg.MogoReportMsg
@@ -35,11 +36,13 @@ object DebugDataDispatch {
const val locationMock = "location"
const val carDoorMock = "carDoor"
const val carNeedTurnAround = "trunAroud"
const val trajectoryStation = "trajectoryStation"
// adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "location" --es path "sy73_log.json"
// aadb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "location" --es path "1111/11111"
// adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "globalPath" --es path "sy73.json"
// adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "carDoor" --ei doorPostion 1 --ei doorStatus 1
// adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "trunAroud" --es code "IMAP_TRA_LOADED"
// adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "trajectoryStation" --ef startLon 116.74053643938474 --ef startLat 40.200487993233246 --ef endLon 116.73876977409685 --ef endLat 40.20179054129441 --el lineID 8
val ROOT_PATH =
@@ -83,10 +86,31 @@ object DebugDataDispatch {
newBuilder.level = ""
CallerAutoPilotStatusListenerManager.invokeAutopilotGuardian(newBuilder.build())
}
trajectoryStation -> {
val startLon = intent.getFloatExtra("startLon", -1.0f)
val startLat = intent.getFloatExtra("startLat", -1.0f)
val endLon = intent.getFloatExtra("endLon", -1.0f)
val endLat = intent.getFloatExtra("endLat", -1.0f)
val lineID = intent.getLongExtra("lineID", -1)
setStation(startLon.toDouble(),startLat.toDouble(),endLon.toDouble(),endLat.toDouble(),lineID)
}
else -> {}
}
}
fun setStation(startLon:Double,startLat:Double,endLon:Double,endLat:Double,lineID:Long){
if(startLon<0||startLat<0||endLon<0||endLat<0||lineID<0){
TrajectoryAndDistanceManager.setStationPoint(null,null,-1)
}
val startLocation = MogoLocation()
startLocation.longitude = startLon
startLocation.latitude = startLat
val endLocation = MogoLocation()
endLocation.longitude = endLon
endLocation.latitude = endLat
TrajectoryAndDistanceManager.setStationPoint(startLocation,endLocation,lineID)
}
fun getLocaitonByLog(path:String) {
ThreadUtils.getIoPool().execute {
try {

View File

@@ -6,4 +6,7 @@ package com.mogo.och.common.module.callback
*/
interface OchAdasStartFailureCallback {
fun onStartAutopilotFailure(startFailedCode : String, startFailedMessage : String)
fun brakeStatusChanged(isBrakeAvailable: Boolean)
}

View File

@@ -6,12 +6,15 @@ import androidx.annotation.Nullable;
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotActionsListener;
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatisticsListener;
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager;
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotActionsListenerManager;
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotStatisticsListenerManager;
import com.mogo.eagle.core.function.call.autopilot.CallerParallelDrivingActionsListenerManager;
import com.mogo.eagle.core.utilcode.mogo.logger.Logger;
import com.mogo.eagle.core.utilcode.util.ParseVersionUtils;
import com.mogo.och.common.module.callback.OchAdasStartFailureCallback;
import com.zhjt.mogo.adas.data.bean.AutopilotStatistics;
import com.zhjt.mogo.adas.data.bean.UnableAutopilotReason;
import com.zhjt.mogo.adas.data.bean.UnableLaunchReason;
import java.util.ArrayList;
@@ -25,7 +28,7 @@ public class OCHAdasAbilityManager implements IMoGoAutopilotActionsListener, IMo
private static final String TAG = OCHAdasAbilityManager.class.getSimpleName();
private boolean isAutopilotAbility;
private ArrayList<UnableAutopilotReason> unableAutopilotReasons;
private ArrayList<UnableLaunchReason> unableAutopilotReasons;
private String startFailedCode = "";
private String startFailedMessage = "";
@@ -90,15 +93,25 @@ public class OCHAdasAbilityManager implements IMoGoAutopilotActionsListener, IMo
private void releaseListeners() {
CallerAutopilotActionsListenerManager.INSTANCE.removeListener(this);
CallerAutopilotStatisticsListenerManager.INSTANCE.removeListener(this);
CallerParallelDrivingActionsListenerManager.INSTANCE.removeListener(TAG);
}
@Override
public void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList<UnableAutopilotReason> unableAutopilotReasons) {
public void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList<UnableLaunchReason> unableAutopilotReasons) {
this.isAutopilotAbility = isAutopilotAbility;
this.unableAutopilotReasons = unableAutopilotReasons;
Logger.d(TAG, "是否可以启动自动驾驶=" + isAutopilotAbility + " 原因=" + (unableAutopilotReasons == null ? null : unableAutopilotReasons.toString()));
}
if (unableAutopilotReasons != null && getMapVersion() < 30600) {
//刹车变化回调
Logger.d(TAG,"onAutopilotAbility = " + isAutopilotAbility +
" onAutopilotAbility =" + unableAutopilotReasons.toString());
if (unableAutopilotReasons.toString().contains(UnableLaunchReason.SourceType.CHASSIS.name())
&& unableAutopilotReasons.toString().contains(UnableLaunchReason.UnableType.BRAKE.name())) {
failureCallback.brakeStatusChanged(isAutopilotAbility);
}
}
}
@Override
public void onAutopilotStatistics(@Nullable AutopilotStatistics statistics) {
if (statistics == null) return;
@@ -112,6 +125,9 @@ public class OCHAdasAbilityManager implements IMoGoAutopilotActionsListener, IMo
}
}
private int getMapVersion(){
return ParseVersionUtils.parseVersion(true, CallerAutoPilotStatusListenerManager.INSTANCE.getDockerVersion());
}
public void release() {
releaseListeners();
}

View File

@@ -3,6 +3,7 @@ package com.mogo.och.common.module.manager.devicemanage
import chassis.VehicleStateOuterClass
import com.mogo.eagle.core.function.api.autopilot.IMoGoRoboBusJinlvM1StatesListener
import com.mogo.eagle.core.function.call.autopilot.CallerRoboBusJinlvM1StatesListenerManager
import com.mogo.och.common.module.manager.devicemanage.callback.LightAirconditionDoorCallback
import com.mogo.och.common.module.manager.devicemanage.data.AirconditionStatus
import com.mogo.och.common.module.manager.devicemanage.data.DoorStatus
import com.mogo.och.common.module.manager.devicemanage.data.HeaterStatue

View File

@@ -0,0 +1,129 @@
package com.mogo.och.common.module.manager.devicemanage
import chassis.Chassis
import chassis.VehicleStateOuterClass
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisDoorStateListener
import com.mogo.eagle.core.function.call.autopilot.CallerChassisDoorStateListenerManager
import com.mogo.eagle.core.function.call.base.CallerBase
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.och.common.module.manager.devicemanage.callback.DoorStateCallback
import com.mogo.och.common.module.manager.devicemanage.data.DoorPosition
import com.mogo.och.common.module.manager.devicemanage.data.DoorState
object TaxiDoorStateManager : IMoGoChassisDoorStateListener,
CallerBase<DoorStateCallback>() {
private val TAG = TaxiDoorStateManager::class.java.simpleName
@Volatile
private var haveOpenDoor: Boolean? = null
init {
CallerChassisDoorStateListenerManager.addListener(TAG, this)
}
override fun doSomeAfterAddListener(tag: String, listener: DoorStateCallback) {
val doorList = CallerChassisDoorStateListenerManager.getDoorList()
if(doorList is MutableList<VehicleStateOuterClass.DoorStateV2>){
doSomeAfterAddListenerInner(doorList)
doorList.forEach {
onAutopilotSingleDoorState(it.number,it.status)
}
}else{
doSomeAfterAddListenerInner(mutableListOf())
}
}
private fun doSomeAfterAddListenerInner(doorList: MutableList<VehicleStateOuterClass.DoorStateV2>){
var have = false
doorList.forEach {
if (it.status == 1) {//0关闭 1开着 2未知
have = true
}
}
haveOpenDoor = have
invokeOpenState(have)
}
/**
* 主要用来判断是否有门开着
*/
override fun onAutopilotDoorState(doorList: MutableList<VehicleStateOuterClass.DoorStateV2>) {
var have = false
doorList.forEach {
if (it.status == 1) {//0关闭 1开着 2未知
have = true
}
}
if (have != haveOpenDoor) {
haveOpenDoor = have
invokeOpenState(have)
}
}
/**
* 判断单个车门是否开着
*/
override fun onAutopilotSingleDoorState(num: Chassis.DoorNumber, status: Int) {
CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "门太变化:${num}--${status}")
when (status) {
0 -> { exchangeEnum(num, DoorState.CLOSE)}
1 -> {exchangeEnum(num, DoorState.OPEN)}
2 -> {exchangeEnum(num, DoorState.UNKNOWN)}
else -> {}
}
}
private fun exchangeEnum(num: Chassis.DoorNumber, state: DoorState) {
when (num) {
Chassis.DoorNumber.FRONT_LEFT -> {
invokeSingleDoorOpenState(DoorPosition.FRONT_LEFT, state)
}
Chassis.DoorNumber.FRONT_RIGHT -> {
invokeSingleDoorOpenState(DoorPosition.FRONT_RIGHT, state)
}
Chassis.DoorNumber.REAR_LEFT -> {
invokeSingleDoorOpenState(DoorPosition.REAR_LEFT, state)
}
Chassis.DoorNumber.REAR_RIGHT -> {
invokeSingleDoorOpenState(DoorPosition.REAR_RIGHT, state)
}
Chassis.DoorNumber.MIDDLE -> {
invokeSingleDoorOpenState(DoorPosition.MIDDLE, state)
}
else -> {}
}
}
/**
* @param have true 有车门开着
* false 没有车门开着(可能开着可能未知)
*/
@Synchronized
private fun invokeOpenState(have: Boolean) {
M_LISTENERS.forEach {
val listener = it.value
listener.hasOpenDoor(have)
}
}
/**
* @param doorPosition 车门位置
* @param doorState 车门状态
*/
@Synchronized
private fun invokeSingleDoorOpenState(doorPosition: DoorPosition,doorState: DoorState) {
M_LISTENERS.forEach {
val listener = it.value
listener.doorStateChangeCallback(doorPosition,doorState)
}
}
}

View File

@@ -0,0 +1,19 @@
package com.mogo.och.common.module.manager.devicemanage.callback
import com.mogo.och.common.module.manager.devicemanage.data.DoorPosition
import com.mogo.och.common.module.manager.devicemanage.data.DoorState
interface DoorStateCallback {
/**
* @param have true 有车门开着
* false 没有车门开着(可能开着可能未知)
*/
fun hasOpenDoor(have:Boolean){}
/**
* @param position 车门位置
* @param state 当前车门状态
*/
fun doorStateChangeCallback(position: DoorPosition,state: DoorState){}
}

View File

@@ -1,4 +1,4 @@
package com.mogo.och.common.module.manager.devicemanage
package com.mogo.och.common.module.manager.devicemanage.callback
import com.mogo.och.common.module.manager.devicemanage.data.AirconditionStatus
import com.mogo.och.common.module.manager.devicemanage.data.HeaterStatue

View File

@@ -1,3 +1,12 @@
package com.mogo.och.common.module.manager.devicemanage.data
data class DoorStatus(var isOpen: Boolean)
data class DoorStatus(var isOpen: Boolean)
enum class DoorPosition {
FRONT_LEFT, FRONT_RIGHT, REAR_LEFT, REAR_RIGHT, MIDDLE
}
enum class DoorState {
OPEN,CLOSE,UNKNOWN
}

View File

@@ -98,6 +98,8 @@ object TrajectoryAndDistanceManager: IMoGoPlanningRottingListener{
d(M_OCHCOMMON + TAG, "重复轨迹")
startCalculateDistanceLoop()
return
}else{
resetStation()
}
this.lineId = globalPathResp.lineId
}
@@ -270,7 +272,7 @@ object TrajectoryAndDistanceManager: IMoGoPlanningRottingListener{
) {
//要前往的站在轨迹中对应的点的信息
val startStationInfo = CoordinateCalculateRouteUtil.getNearestPointInfo(
preCarLocationIndexInTrajectory, mRoutePoints!!.size,mRoutePoints!!, startStationInfo.stationPoint!!,1
preCarLocationIndexInTrajectory, mRoutePoints!!.size,mRoutePoints!!, startStationInfo.stationPoint!!,1, useHeading = false
)
this.startStationInfo.isNext = startStationInfo.second
this.startStationInfo.index = startStationInfo.first
@@ -288,7 +290,7 @@ object TrajectoryAndDistanceManager: IMoGoPlanningRottingListener{
) {
//要前往的站在轨迹中对应的点
val endStationInfo = CoordinateCalculateRouteUtil.getNearestPointInfo(
preCarLocationIndexInTrajectory,mRoutePoints!!.size, mRoutePoints!!, endStationInfo.stationPoint!!,3
preCarLocationIndexInTrajectory,mRoutePoints!!.size, mRoutePoints!!, endStationInfo.stationPoint!!,3, useHeading = false
)
this.endStationInfo.isNext = endStationInfo.second
this.endStationInfo.index = endStationInfo.first
@@ -324,7 +326,7 @@ object TrajectoryAndDistanceManager: IMoGoPlanningRottingListener{
preCarLocationIndexInTrajectory,endStationInfo.index!!+1, mRoutePoints!!, location,2
)
}
val calculateData = "距离结束站点最近的点:${carLocationInfo.first} 点在站的后面:${carLocationInfo.second} 距离点的距离:${carLocationInfo.third}"
val calculateData = "距离轨迹点最近的点:${carLocationInfo.first} 点在站的后面:${carLocationInfo.second} 距离点的距离:${carLocationInfo.third}"
writeLog(calculateData, locationInfo)
if(carLocationInfo.second==null||carLocationInfo.third>1_000){
preCarLocationIndexInTrajectory = 0
@@ -549,13 +551,13 @@ object TrajectoryAndDistanceManager: IMoGoPlanningRottingListener{
}
}
@ChainLog(
linkChainLog = ChainConstant.CHAIN_TYPE_OCH,
linkCode = ChainConstant.CHAIN_SOURCE_OCH,
nodeAliasCode = ChainConstant.CHAIN_CODE_OCH_COMMON_DISTANCE,
paramIndexes = [0,1]
)
fun writeLog(carLocationInfo: String, location: String) {
// @ChainLog(
// linkChainLog = ChainConstant.CHAIN_TYPE_OCH,
// linkCode = ChainConstant.CHAIN_SOURCE_OCH,
// nodeAliasCode = ChainConstant.CHAIN_CODE_OCH_COMMON_DISTANCE,
// paramIndexes = [0,1]
// )
private fun writeLog(carLocationInfo: String, location: String) {
d(M_OCHCOMMON+ TAG,carLocationInfo)
d(M_OCHCOMMON+ TAG,location)
}

View File

@@ -0,0 +1,46 @@
package com.mogo.och.common.module.manager.orderlogmanager
import android.text.TextUtils
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.commons.debug.DebugConfig
import com.mogo.commons.utils.MogoAnalyticUtils
import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.data.deva.chain.ChainConstant
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.DateTimeUtils
import com.zhjt.service.chain.ChainLog
object OchChainLogManager {
private val TAG = OchChainLogManager::class.java.simpleName
const val EVENT_KEY_INFE_WITH_CHANGE = "event_key_och_common_info_and_changeinfo"
/**
* @param Info 订单详细信息
* @param changeInfo 变化信息
*/
@ChainLog(
linkChainLog = ChainConstant.CHAIN_TYPE_OCH,
linkCode = ChainConstant.CHAIN_SOURCE_OCH,
nodeAliasCode = ChainConstant.CHAIN_CODE_OCH_COMMON_DISTANCE,
paramIndexes = [0,1]
)
fun writeChainLog(Info: String, changeInfo: String,upload:Boolean = true) {
d(SceneConstant.M_OCHCOMMON + TAG, Info)
d(SceneConstant.M_OCHCOMMON + TAG, changeInfo)
if(upload) {
val plateNum = AppConfigInfo.plateNumber
val params = HashMap<String, Any>()
params["sn"] = MoGoAiCloudClientConfig.getInstance().sn
params["env"] = DebugConfig.getNetMode()
params["plate_number"] = if (TextUtils.isEmpty(plateNum)) "" else plateNum
params["time"] = DateTimeUtils.getTimeText(DateTimeUtils.yyyy_MM_dd_HH_mm_ss)
params["info"] = Info
params["changeInfo"] = changeInfo
MogoAnalyticUtils.track(EVENT_KEY_INFE_WITH_CHANGE, params)
}
}
}

View File

@@ -0,0 +1,27 @@
package com.mogo.och.common.module.manager.orderlogmanager
import com.mogo.eagle.core.data.deva.chain.ChainConstant
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.zhjt.service.chain.ChainLog
object OrderChainLogManager {
private val TAG = OrderChainLogManager::class.java.simpleName
/**
* @param orderInfo 订单详细信息
* @param changeInfo 变化信息
*/
@ChainLog(
linkChainLog = ChainConstant.CHAIN_TYPE_OCH,
linkCode = ChainConstant.CHAIN_SOURCE_OCH,
nodeAliasCode = ChainConstant.CHAIN_CODE_OCH_COMMON_DISTANCE,
paramIndexes = [0,1]
)
fun writeChainLog(orderInfo: String, changeInfo: String) {
d(SceneConstant.M_OCHCOMMON + TAG, orderInfo)
d(SceneConstant.M_OCHCOMMON + TAG, changeInfo)
}
}

View File

@@ -22,8 +22,10 @@ import com.amap.api.navi.model.AimLessModeCongestionInfo;
import com.amap.api.navi.model.AimLessModeStat;
import com.amap.api.navi.model.NaviInfo;
import com.amap.api.navi.model.NaviLatLng;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.utilcode.util.NetworkUtils;
import com.mogo.och.common.module.utils.DateTimeUtil;
import com.mogo.och.common.module.utils.PermissionUtil;
import com.mogo.och.common.module.wigets.toast.ToastCharterUtils;
@@ -39,7 +41,6 @@ public class AmapNaviToDestinationModel implements AMapNaviListener {
public static final String TAG = "NaviToDestinationModel";
private static Context mContext;
private AMapNavi mAMapNavi = null;
protected final List<NaviLatLng> sList = new ArrayList<NaviLatLng>();
protected final List<NaviLatLng> eList = new ArrayList<NaviLatLng>();
@@ -49,7 +50,6 @@ public class AmapNaviToDestinationModel implements AMapNaviListener {
private boolean isPlay;
public static AmapNaviToDestinationModel getInstance(Context context) {
mContext = context;
return SingletonHolder.INSTANCE;
}
@@ -62,7 +62,8 @@ public class AmapNaviToDestinationModel implements AMapNaviListener {
public void initAMapNavi(NaviLatLng startLatLng, NaviLatLng endLatLng) {
try {
mAMapNavi = AMapNavi.getInstance(mContext);
CallerLogger.i( TAG, "initAMapNavi()");
mAMapNavi = AMapNavi.getInstance(AbsMogoApplication.getApp());
mAMapNavi.addAMapNaviListener(this);
mAMapNavi.setUseInnerVoice(true, true);
sList.add(startLatLng);
@@ -88,6 +89,7 @@ public class AmapNaviToDestinationModel implements AMapNaviListener {
public void destroyAmaNavi() {
if (mAMapNavi != null) {
CallerLogger.i( TAG, "destroyAmaNavi()");
isPlay = false;
sList.clear();
eList.clear();
@@ -104,7 +106,7 @@ public class AmapNaviToDestinationModel implements AMapNaviListener {
@Override
public void onInitNaviFailure() {
Toast.makeText(mContext, "init navi Failed", Toast.LENGTH_SHORT).show();
Toast.makeText(AbsMogoApplication.getApp(), "init navi Failed", Toast.LENGTH_SHORT).show();
}
@Override
@@ -141,8 +143,8 @@ public class AmapNaviToDestinationModel implements AMapNaviListener {
@Override
public void onNaviInfoUpdate(NaviInfo naviinfo) {
//导航过程中的信息更新请看NaviInfo的具体说明
CallerLogger.i( TAG, "距离=" + naviinfo.getPathRetainDistance() + ", 剩余时间 " + naviinfo.getPathRetainTime());
if (null != mNaviChangedCallback) {
CallerLogger.i(M_TAXI + TAG, "距离=" + naviinfo.getPathRetainDistance() + ", 剩余时间 " + naviinfo.getPathRetainTime());
mNaviChangedCallback.onCurrentNaviDistAndTimeChanged(naviinfo.getPathRetainDistance(), naviinfo.getPathRetainTime());// 米、秒
}
}
@@ -162,14 +164,14 @@ public class AmapNaviToDestinationModel implements AMapNaviListener {
mNaviChangedCallback.reInitNaviAmap(isPlay, true);
}
}
if (!NetworkUtils.isConnected(mContext) || result.getErrorCode() == 2) {
if (!NetworkUtils.isConnected(AbsMogoApplication.getApp()) || result.getErrorCode() == 2) {
ToastCharterUtils.showToastShort("网络异常,请重试");
if (mNaviChangedCallback != null) {
mNaviChangedCallback.reInitNaviAmap(isPlay, false);
}
return;
}
if (!PermissionUtil.isLocServiceEnable(mContext) || !PermissionUtil.checkPermission(mContext, new String[]{Manifest.permission.ACCESS_FINE_LOCATION})) {
if (!PermissionUtil.isLocServiceEnable(AbsMogoApplication.getApp()) || !PermissionUtil.checkPermission(AbsMogoApplication.getApp(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION})) {
ToastCharterUtils.showToastShort("请开启车机定位后重试");
if (mNaviChangedCallback != null) {
mNaviChangedCallback.reInitNaviAmap(isPlay, false);
@@ -194,6 +196,11 @@ public class AmapNaviToDestinationModel implements AMapNaviListener {
@Override
public void onLocationChange(AMapNaviLocation location) {
//当前位置回调
// CallerLogger.i( TAG, "AMapNaviLocation = NaviLatLng = "+
// location.getCoord().getLatitude()+ ", "+ location.getCoord().getLongitude()
// + ", bearing = " +location.getBearing()
// +", time = " + DateTimeUtil.formatLongToString(location.getTime(),DateTimeUtil.HH_mm)
// + ", locationType = "+ location.getLocationType());
}
@Override

View File

@@ -162,10 +162,6 @@ class CommonAmapNaviVIew @JvmOverloads constructor(
override fun onNaviViewLoaded() {
d(SceneConstant.M_TAXI + TAG, "导航页面加载成功")
d(
SceneConstant.M_TAXI + TAG,
"请不要使用AMapNaviView.getMap().setOnMapLoadedListener();会overwrite导航SDK内部画线逻辑"
)
}
override fun onMapTypeChanged(p0: Int) {
@@ -191,58 +187,4 @@ class CommonAmapNaviVIew @JvmOverloads constructor(
fun onDestroy(){
amapNaviView.onDestroy()
}
// var array = arrayOf(
// "直行车道",
// "左转车道",
// "左转或直行车道",
// "右转车道",
// "右转或直行车道",
// "左掉头车道",
// "左转或者右转车道",
// " 左转或右转或直行车道",
// "右转掉头车道",
// "直行或左转掉头车道",
// "直行或右转掉头车道",
// "左转或左掉头车道",
// "右转或右掉头车道",
// "直行并且车道扩展",
// "左转+左掉头+扩展",
// "不可以选择该车道",
// "直行+左转+左掉头车道",
// "右转+左掉头",
// "左转+右转+左掉头",
// "直行+右转+左掉头",
// "左转+右掉头",
// "公交车道",
// "空车道",
// "可变车道"
// )
// var actions = arrayOf(
// "直行",
// "左转",
// "左转或直行",
// "右转",
// "右转或这行",
// "左掉头",
// "左转或者右转",
// " 左转或右转或直行",
// "右转掉头",
// "直行或左转掉头",
// "直行或右转掉头",
// "左转或左掉头",
// "右转或右掉头",
// "直行并且车道扩展",
// "左转+左掉头+扩展",
// "不可以选择",
// "直行+左转+左掉头",
// "右转+左掉头",
// "左转+右转+左掉头",
// "直行+右转+左掉头",
// "左转+右掉头",
// "公交车道",
// "空车道",
// "可变车道"
// )
}

View File

@@ -737,7 +737,7 @@ object CoordinateCalculateRouteUtil {
}
// 最近点中包含上次计算的点和上次计算的最近的一个点
if(distanceMap.containsValue(preIndex)&&distanceMap.containsValue(preIndex+1)){
if(distanceMap.containsValue(preIndex)&&distanceMap.containsValue(preIndex+1)&&type==1){
var preIndexDistance:DistanceDegree?=null
var preIndexNextDistance:DistanceDegree?=null
distanceMap.iterator().forEach { en ->
@@ -771,7 +771,7 @@ object CoordinateCalculateRouteUtil {
distanceMap.clear()
Logger.d(SceneConstant.M_OCHCOMMON + "calculateRouteSumLength",
"计算时间:${startTime-System.currentTimeMillis()}")
return Triple(currentIndex,preIndexNextDistance?.isNext,preIndexNextDistance!!.distance)
return Triple(currentIndex,preIndexNextDistance?.isNext,preIndexNextDistance!!.distance)
}
}
}
@@ -823,7 +823,7 @@ object CoordinateCalculateRouteUtil {
val key = en.key
val value = en.value
// 排除没有第一个值0是
if(value==preIndex+1&&preIndex!=0){
if(value==preIndex+1&&preIndex!=0&&type==1){
currentIndex = value
val iterator1 = distanceMap.iterator()
while (iterator1.hasNext()) {

View File

@@ -35,11 +35,7 @@ public class DateTimeUtil {
public static boolean compareDateIsCurrentDay(Calendar targetCalendar){
Calendar currentCale = DateTimeUtils.getCurrentDateTime();
String currentDay = formatCalendarToString(currentCale, yyyy_MM_dd);
if (currentDay.equals(formatCalendarToString(targetCalendar, yyyy_MM_dd))){
return true;
}else {
return false;
}
return currentDay.equals(formatCalendarToString(targetCalendar, yyyy_MM_dd));
}
public static Calendar formatLongToCalendar(long time){

View File

@@ -0,0 +1,98 @@
package com.mogo.och.common.module.utils
/**
* @author aibingbing
* @date: 2023/9/13
* @desc Flow Bus
*/
import android.util.Log
import androidx.lifecycle.*
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.BufferOverflow
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.launch
/**
* FlowBus消息总线
*/
object FlowBus {
private const val TAG = "FlowBus"
private val busMap = mutableMapOf<String, EventBus<*>>()
private val busStickMap = mutableMapOf<String, StickEventBus<*>>()
@Synchronized
fun <T> with(key: String): EventBus<T> {
var eventBus = busMap[key]
if (eventBus == null) {
eventBus = EventBus<T>(key)
busMap[key] = eventBus
}
return eventBus as EventBus<T>
}
@Synchronized
fun <T> withStick(key: String): StickEventBus<T> {
var eventBus = busStickMap[key]
if (eventBus == null) {
eventBus = StickEventBus<T>(key)
busStickMap[key] = eventBus
}
return eventBus as StickEventBus<T>
}
//真正实现类
open class EventBus<T>(private val key: String) : LifecycleObserver {
//私有对象用于发送消息
private val _events: MutableSharedFlow<T> by lazy {
obtainEvent()
}
//暴露的公有对象用于接收消息
private val events = _events.asSharedFlow()
open fun obtainEvent(): MutableSharedFlow<T> =
MutableSharedFlow(0, 1, BufferOverflow.DROP_OLDEST)
//主线程接收数据
fun register(lifecycleOwner: LifecycleOwner, action: (t: T) -> Unit) {
lifecycleOwner.lifecycle.addObserver(this)
lifecycleOwner.lifecycleScope.launch {
events.collect {
try {
action(it)
} catch (e: Exception) {
e.printStackTrace()
Log.e(TAG, "FlowBus - Error:$e")
}
}
}
}
//协程中发送数据
suspend fun post(event: T) {
_events.emit(event)
}
//主线程发送数据
fun post(scope: CoroutineScope, event: T) {
scope.launch {
_events.emit(event)
}
}
//自动销毁
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun onDestroy() {
Log.w(TAG, "FlowBus - 自动onDestroy")
val subscriptCount = _events.subscriptionCount.value
if (subscriptCount <= 0)
busMap.remove(key)
}
}
class StickEventBus<T>(key: String) : EventBus<T>(key) {
override fun obtainEvent(): MutableSharedFlow<T> =
MutableSharedFlow(1, 1, BufferOverflow.DROP_OLDEST)
}
}

View File

@@ -7,9 +7,10 @@ import android.os.Handler
import android.os.Looper
import android.widget.ImageView
import com.mogo.commons.AbsMogoApplication
import java.lang.RuntimeException
import java.lang.ref.SoftReference
class FrameAnimatorContainer (resId: Int, fps: Int, imageView: ImageView,initFirstFrame:Boolean = true){
class FrameAnimatorContainer (resId: Int, fps: Int, imageView: ImageView,initFirstFrame:Boolean = true,width:Int = -1,height:Int = -1){
private lateinit var mFrames: IntArray // 帧数组
private var mIndex = 0 // 当前帧
private var mShouldRun = false // 开始/停止播放用
@@ -22,10 +23,17 @@ class FrameAnimatorContainer (resId: Int, fps: Int, imageView: ImageView,initFir
private var mBitmapOptions: BitmapFactory.Options? = null //Bitmap管理类可有效减少Bitmap的OOM问题
init {
createAnimation(imageView, getData(resId), fps,initFirstFrame)
createAnimation(imageView, getData(resId), fps,initFirstFrame,width,height)
}
private fun createAnimation(imageView: ImageView, frames: IntArray, fps: Int, initFirstFrame:Boolean) {
private fun createAnimation(
imageView: ImageView,
frames: IntArray,
fps: Int,
initFirstFrame: Boolean,
width: Int,
height: Int
) {
mHandler = Handler(Looper.myLooper()!!)
mFrames = frames
mIndex = -1
@@ -36,13 +44,25 @@ class FrameAnimatorContainer (resId: Int, fps: Int, imageView: ImageView,initFir
if(initFirstFrame) {
imageView.setImageResource(mFrames[0])
}
var widthImage = -1
var heightImage = -1
var config = Bitmap.Config.ARGB_8888
if(width>0&&height>0){
widthImage = width
heightImage = height
}else{
try {
val bmp = (imageView.drawable as BitmapDrawable).bitmap
widthImage = bmp.width
heightImage = bmp.height
config = bmp.config
}catch (e:Exception){
throw RuntimeException("请设置图片或传递大小")
}
}
// 当图片大小类型相同时进行复用避免频繁GC
val bmp = (imageView.drawable as BitmapDrawable).bitmap
val width = bmp.width
val height = bmp.height
val config = bmp.config
mBitmap = Bitmap.createBitmap(width, height, config)
mBitmap = Bitmap.createBitmap(widthImage, heightImage, config)
mBitmapOptions = BitmapFactory.Options()
//设置Bitmap内存复用
mBitmapOptions!!.inBitmap = mBitmap //Bitmap复用内存块类似对象池避免不必要的内存分配和回收
@@ -121,6 +141,10 @@ class FrameAnimatorContainer (resId: Int, fps: Int, imageView: ImageView,initFir
mShouldRun = false
}
fun isPlaying():Boolean{
return mShouldRun
}
/**
* 设置停止播放监听
* @param listener 设置监听

View File

@@ -36,12 +36,11 @@ object RxUtils {
}
}
fun isDisposed(disposable: Disposable?):Boolean{
if(disposable!=null){
return true
fun isNotDisposed(disposable: Disposable?):Boolean{
if(disposable==null){
return false
}
return false
return !disposable.isDisposed
}
// 调用Disposable.dispose() 时候会出现InterruptedException 导致出现崩溃

View File

@@ -0,0 +1,148 @@
package com.mogo.och.common.module.wigets
import android.os.CountDownTimer
import android.util.Log
/**
* @author: wangmingjun
* @date: 2023/9/18
* 支持pause的倒计时, 由CountDownTimer实现的
* 注意CountdownTimer的源码start(),pause(),cancel()方法都是用message和handler实现的
* 如果是在子线程中执行要加调用Looper.prepare()及Looper.loop()
* 或者是使用 runOnMainThread 使其在主线程中执行
**/
abstract class CountDownTimerExt(
private var millisInFuture: Long,
/**
* 间隔
*/
private var mInterval: Long
) {
/**
* 倒计时实现类
*/
private var countDownTimer: CountDownTimer? = null
private var isTimerPaused = true
var remainingTime: Long
/**
* @param millisInFutureIn 总时长
* @param interval onTick间隔
*/
init {
remainingTime = millisInFuture
}
fun start() {
startIt(remainingTime, mInterval)
}
fun start(millisInFutureIn: Long, remainingTimeIn: Long, interval: Long) {
millisInFuture = millisInFutureIn
remainingTime = remainingTimeIn
mInterval = interval
start()
}
@Synchronized
fun startIt(millisInFutureIn: Long, interval: Long) {
remainingTime = millisInFutureIn
mInterval = interval
if (millisInFuture > 0L && interval > 0L) {
if (!isTimerPaused) {
// 有运行中的先stop
stop()
}
if (isTimerPaused) {
// 有暂停或未运行的创建CountDownTimer实现, 确保运行在主线程
countDownTimer = object : CountDownTimer(remainingTime, mInterval) {
override fun onFinish() {
onTimerFinish()
stop()
}
override fun onTick(millisUntilFinished: Long) {
// 这里会记录剩余的时长保存到remainingTime, 方便暂停后能再恢复
remainingTime = millisUntilFinished
onTimerTick(millisUntilFinished)
}
}
try {
countDownTimer?.start()
} catch (e: Exception) {
e.printStackTrace()
}
isTimerPaused = false
} else {
Log.d(TAG, "ignore start")
}
} else {
Log.d(TAG, "invalid parameter")
}
}
/**
* 停止
*/
fun stop() {
try {
countDownTimer?.cancel()
} catch (e: Exception) {
e.printStackTrace()
}
isTimerPaused = true
remainingTime = millisInFuture
}
/**
* 暂停
*/
fun pause() {
if (!isTimerPaused) {
try {
countDownTimer?.cancel()
} catch (e: Exception) {
e.printStackTrace()
}
isTimerPaused = true
onTimerPause()
}
}
/**
* 恢复
*/
fun resume() {
if (!isRunning) {
// 通过remainingTime得到剩余的时长
startIt(remainingTime, mInterval)
onTimerResume(remainingTime)
}
}
private val isRunning: Boolean
/**
* 运行中
* @return
*/
get() = !isTimerPaused
/**
* 每次触发倒计时回调
* @param value
*/
abstract fun onTimerTick(value: Long)
/**
* 倒计时完成回调
*/
abstract fun onTimerFinish()
abstract fun onTimerPause()
abstract fun onTimerResume(remainingTime: Long)
companion object {
private const val TAG = "CountDownTimerExt"
}
}

View File

@@ -32,10 +32,13 @@ class StartAutopilotAnimationView @JvmOverloads constructor(
private const val TAG = "StartAutopilotAnimationView"
}
private var startTimer: CountDownTimer? = null
private var startTimer: CountDownTimerExt? = null
private val mContext: Context
private var mTimerListener: AnimationViewTimerListener? = null
private val closeWarningTask: Runnable = Runnable {
//开始倒计时
countDownTimer()
showWarning(DirectionEnum.ALERT_WARNING_NON)
}
@@ -58,17 +61,36 @@ class StartAutopilotAnimationView @JvmOverloads constructor(
super.onAttachedToWindow()
}
fun show(direction: DirectionEnum, time: Long) {
fun show(direction: DirectionEnum, time: Long,listener: AnimationViewTimerListener) {
mTimerListener = listener
//开始倒计时
countDownTimer()
showWarning(direction, time)
}
fun pause(){
pauseWarning()
}
private fun pauseWarning() {
startTimer?.pause()
}
fun resume(){
resumeWarning()
}
private fun resumeWarning() {
startTimer?.resume()
}
fun dismiss(direction: DirectionEnum) {
dismissWarning(direction)
cancelCountdown()
}
fun cancelCountdown(){ //防止内存泄漏
startTimer?.cancel()
startTimer?.stop()
startTimer = null
}
@@ -78,8 +100,6 @@ class StartAutopilotAnimationView @JvmOverloads constructor(
* @see WarningDirectionEnum
*/
private fun showWarning(direction: DirectionEnum, time: Long = ALL_CLOSE_TIMER) {
//开始倒计时
countDownTimer()
// 如果传入的不是关闭显示,则设置倒计时,定时关闭红框警示
if (oldDirection.get() == direction) {
@@ -131,6 +151,26 @@ class StartAutopilotAnimationView @JvmOverloads constructor(
}
}
private fun pauseWarning(direction: DirectionEnum) {
if (direction == DirectionEnum.ALERT_WARNING_NON) {
return
}
removeCallbacks(closeWarningTask)
post {
when (direction) {
DirectionEnum.ALERT_WARNING_TOP -> {
startAutopilotTipImg.visibility = View.VISIBLE
startAutopilotTip.visibility = View.VISIBLE
}
else -> {
CallerLogger.d("$M_HMI$TAG", "Not Support Direction")
}
}
clearAnimation()
this.oldDirection.set(null)
}
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
}
@@ -148,21 +188,37 @@ class StartAutopilotAnimationView @JvmOverloads constructor(
startAutopilotTip.visibility = VISIBLE
startTimer = object : CountDownTimer(ALL_CLOSE_TIMER, 1000L) {// 5倒计时后开启自驾
startTimer = object : CountDownTimerExt(ALL_CLOSE_TIMER, 1000L) {// 5倒计时后开启自驾
@SuppressLint("SetTextI18n")
override fun onTick(millisUntilFinished: Long) {
override fun onTimerTick(value: Long) {
// 倒计时
UiThreadHandler.post {
startAutopilotTip.text = "${(millisUntilFinished/1000).toInt()} 车辆即将自动开启自动驾驶"
startAutopilotTip.text = "${(value/1000).toInt()} 车辆即将自动开启自动驾驶"
}
playDI()
}
override fun onFinish() {
override fun onTimerFinish() {
//倒计时结束了...
UiThreadHandler.post {
startAutopilotTip.text = "车辆正在自动开启自动驾驶"
dismiss(DirectionEnum.ALERT_WARNING_TOP)
}
}
override fun onTimerPause() {
//倒计时暂停
UiThreadHandler.post {
pauseWarning(DirectionEnum.ALERT_WARNING_TOP)
mTimerListener?.onTimerPause()
}
}
override fun onTimerResume(remainingTime: Long) {
//倒计时继续对动画UI处理
UiThreadHandler.post {
showWarning(DirectionEnum.ALERT_WARNING_TOP, remainingTime)
mTimerListener?.onTimerResume(remainingTime)
}
}
}
@@ -170,4 +226,9 @@ class StartAutopilotAnimationView @JvmOverloads constructor(
startTimer?.start()
}
interface AnimationViewTimerListener{
fun onTimerResume(remainingTime: Long)
fun onTimerPause()
}
}

View File

@@ -1,5 +1,6 @@
package com.mogo.och.common.module
import com.mogo.eagle.core.utilcode.util.CoordinateTransform
import com.zhidao.thirdlogin.utils.Aes
import org.junit.Assert.*
import org.junit.Test
@@ -20,4 +21,621 @@ class ExampleUnitTest {
val encrypt: String = Aes.encrypt(json, KEY, IVS, "UTF-8")
println(encrypt)
}
@Test
fun resetData(){
val mutableListOf = mutableListOf<Data>()
mutableListOf.add(Data(26.81618164239085,112.58250175297606,55.55709771386404 ,0.046407543))
mutableListOf.add(Data(26.81618164239085,112.58250175297606,55.55709771386404 ,0.046407543))
mutableListOf.add(Data(26.81618164239085,112.58250175297606,55.55709771386404 ,0.046407543))
mutableListOf.add(Data(26.816181808122355,112.58250217912767,55.5367232595699 ,0.024934836))
mutableListOf.add(Data(26.81618188427374,112.58250252407656,55.47659710430628 ,-0.0031026027))
mutableListOf.add(Data(26.816182627199186,112.58250389674681,55.30434314853312 ,0.56499475))
mutableListOf.add(Data(26.81619347196081,112.5825216510838,54.429112463003946 ,3.3143053))
mutableListOf.add(Data(26.816212952303637,112.58255186583256,53.611788121258144 ,4.1918964))
mutableListOf.add(Data(26.816239753303016,112.5825918107494,52.81322630916236 ,6.0459743))
mutableListOf.add(Data(26.81627681379391,112.58264625538742,52.33910872792592 ,7.5077167))
mutableListOf.add(Data(26.81632000870642,112.58270715442146,51.45473583419266 ,8.213942))
mutableListOf.add(Data(26.816367868569504,112.58277449458916,51.894186790296715 ,9.117803))
mutableListOf.add(Data(26.816419772705085,112.58284877034309,52.35565486119026 ,9.915305))
mutableListOf.add(Data(26.816475594914255,112.58292938397568,52.452862113457854 ,10.67503))
mutableListOf.add(Data(26.816535811576774,112.58301559606879,52.43356682905261 ,11.37326))
mutableListOf.add(Data(26.816598457679355,112.5831078725796,53.85711144077209 ,11.978908))
mutableListOf.add(Data(26.816662027735013,112.58320692287296,55.32445805563884 ,12.534072))
mutableListOf.add(Data(26.816726886660476,112.58331188364737,55.79882835387457 ,13.077099))
mutableListOf.add(Data(26.816726886660476,112.58331188364737,55.79882835387457 ,13.077099))
mutableListOf.add(Data(26.816793247443773,112.58341938436075,55.82383367642598 ,13.111888))
mutableListOf.add(Data(26.816793247443773,112.58341938436075,55.82383367642598 ,13.111888))
mutableListOf.add(Data(26.816860045545038,112.5835283980739,55.95009655342284 ,13.205783))
mutableListOf.add(Data(26.816860045545038,112.5835283980739,55.95009655342284 ,13.205783))
mutableListOf.add(Data(26.816925196446753,112.58363575353036,56.266921708263055 ,12.377544))
mutableListOf.add(Data(26.816925196446753,112.58363575353036,56.266921708263055 ,12.377544))
mutableListOf.add(Data(26.8169850300721,112.58373523649801,56.48836327134404 ,11.37828))
mutableListOf.add(Data(26.8169850300721,112.58373523649801,56.48836327134404 ,11.37828))
mutableListOf.add(Data(26.817037934280332,112.58382376359087,56.24827187673429 ,9.676991))
mutableListOf.add(Data(26.817037934280332,112.58382376359087,56.24827187673429 ,9.676991))
mutableListOf.add(Data(26.817083166151374,112.5838975695181,55.88718368097784 ,7.9715595))
mutableListOf.add(Data(26.817083166151374,112.5838975695181,55.88718368097784 ,7.9715595))
mutableListOf.add(Data(26.817119554569622,112.58395525826116,54.790292866314246 ,5.8003225))
mutableListOf.add(Data(26.817119554569622,112.58395525826116,54.790292866314246 ,5.8003225))
mutableListOf.add(Data(26.817140378417207,112.58398757091575,54.00168947002834 ,2.0236187))
mutableListOf.add(Data(26.817140378417207,112.58398757091575,54.00168947002834 ,2.0236187))
mutableListOf.add(Data(26.817143666977085,112.58399300744259,53.873008706065264 ,0.072262354))
mutableListOf.add(Data(26.817143666977085,112.58399300744259,53.873008706065264 ,0.072262354))
mutableListOf.add(Data(26.81714331006102,112.58399316177113,53.87228129091869 ,0.0019371088))
mutableListOf.add(Data(26.81714331006102,112.58399316177113,53.87228129091869 ,0.0019371088))
mutableListOf.add(Data(26.81714313768666,112.58399312891899,53.870710347409556 ,-0.0011951944))
mutableListOf.add(Data(26.81714313768666,112.58399312891899,53.870710347409556 ,-0.0011951944))
mutableListOf.add(Data(26.81714315453284,112.58399311449793,53.86844272460513 ,-0.0039134827))
mutableListOf.add(Data(26.81714315453284,112.58399311449793,53.86844272460513 ,-0.0039134827))
mutableListOf.add(Data(26.817143235978477,112.5839931065896,53.868674951036894 ,0.009990219))
mutableListOf.add(Data(26.817143235978477,112.5839931065896,53.868674951036894 ,0.009990219))
mutableListOf.add(Data(26.8171432379633,112.58399311184859,53.86787240380943 ,0.0057474226))
mutableListOf.add(Data(26.8171432379633,112.58399311184859,53.86787240380943 ,0.0057474226))
mutableListOf.add(Data(26.817143234431487,112.58399311556684,53.868285630254206 ,0.0053468696))
mutableListOf.add(Data(26.817143234431487,112.58399311556684,53.868285630254206 ,0.0053468696))
mutableListOf.add(Data(26.81714323875891,112.5839931259286,53.867687988701846 ,0.008409082))
mutableListOf.add(Data(26.81714323875891,112.5839931259286,53.867687988701846 ,0.008409082))
mutableListOf.add(Data(26.817143254507762,112.58399313934659,53.86896181898203 ,0.008529294))
mutableListOf.add(Data(26.817143254507762,112.58399313934659,53.86896181898203 ,0.008529294))
mutableListOf.add(Data(26.817143260063123,112.58399314333123,53.865194969654794 ,0.0053140023))
mutableListOf.add(Data(26.817143260063123,112.58399314333123,53.865194969654794 ,0.0053140023))
mutableListOf.add(Data(26.81714326019063,112.58399314732564,53.868613479334385 ,0.0040332223))
mutableListOf.add(Data(26.81714326019063,112.58399314732564,53.868613479334385 ,0.0040332223))
mutableListOf.add(Data(26.81714326984717,112.5839931502497,53.869293083156776 ,0.0050935512))
mutableListOf.add(Data(26.81714326984717,112.5839931502497,53.869293083156776 ,0.0050935512))
mutableListOf.add(Data(26.817143276924913,112.5839931598786,53.87102112101678 ,0.0051586633))
mutableListOf.add(Data(26.817143276924913,112.5839931598786,53.87102112101678 ,0.0051586633))
mutableListOf.add(Data(26.817143271976438,112.58399317037059,53.86838808309176 ,0.006491186))
mutableListOf.add(Data(26.817143271976438,112.58399317037059,53.86838808309176 ,0.006491186))
mutableListOf.add(Data(26.817143265170607,112.5839931554377,53.86955946053439 ,-0.0019018989))
mutableListOf.add(Data(26.817143265170607,112.5839931554377,53.86955946053439 ,-0.0019018989))
mutableListOf.add(Data(26.817143273658317,112.58399316718146,53.86821049817331 ,0.0031056462))
mutableListOf.add(Data(26.817143273658317,112.58399316718146,53.86821049817331 ,0.0031056462))
mutableListOf.add(Data(26.81714327261351,112.58399317389184,53.867244026405785 ,0.0022922105))
mutableListOf.add(Data(26.81714327261351,112.58399317389184,53.867244026405785 ,0.0022922105))
mutableListOf.add(Data(26.81714328168219,112.58399317547813,53.869750705831166 ,0.0033199964))
mutableListOf.add(Data(26.81714328168219,112.58399317547813,53.869750705831166 ,0.0033199964))
mutableListOf.add(Data(26.81714329830482,112.58399317974332,53.868497366118504 ,0.0036278928))
mutableListOf.add(Data(26.81714329830482,112.58399317974332,53.868497366118504 ,0.0036278928))
mutableListOf.add(Data(26.81714329823904,112.58399318687029,53.869549215250686 ,9.618327E-4))
mutableListOf.add(Data(26.81714329823904,112.58399318687029,53.869549215250686 ,9.618327E-4))
mutableListOf.add(Data(26.81714329683728,112.58399318631112,53.87207297014896 ,-3.115031E-4))
mutableListOf.add(Data(26.81714329683728,112.58399318631112,53.87207297014896 ,-3.115031E-4))
mutableListOf.add(Data(26.817143299098106,112.5839931844786,53.86809438495743 ,5.291645E-4))
mutableListOf.add(Data(26.817143299098106,112.5839931844786,53.86809438495743 ,5.291645E-4))
mutableListOf.add(Data(26.817143308731524,112.58399319567121,53.86893449822537 ,0.002943732))
mutableListOf.add(Data(26.817143308731524,112.58399319567121,53.86893449822537 ,0.002943732))
mutableListOf.add(Data(26.81714331310618,112.58399323023308,53.86786898871486 ,0.016370257))
mutableListOf.add(Data(26.81714331310618,112.58399323023308,53.86786898871486 ,0.016370257))
mutableListOf.add(Data(26.817143303931818,112.58399320624724,53.86840174347009 ,-0.0065030125))
mutableListOf.add(Data(26.817143303931818,112.58399320624724,53.86840174347009 ,-0.0065030125))
mutableListOf.add(Data(26.81714328119793,112.58399322107572,53.86862030952352 ,-0.0044723027))
mutableListOf.add(Data(26.81714328119793,112.58399322107572,53.86862030952352 ,-0.0044723027))
mutableListOf.add(Data(26.81714326726879,112.58399321507112,53.87232910224287 ,-0.0035493786))
mutableListOf.add(Data(26.81714326726879,112.58399321507112,53.87232910224287 ,-0.0035493786))
mutableListOf.add(Data(26.81714326952943,112.58399321006907,53.872151517324426 ,7.5540715E-4))
mutableListOf.add(Data(26.81714326952943,112.58399321006907,53.872151517324426 ,7.5540715E-4))
mutableListOf.add(Data(26.817143279681396,112.58399321381509,53.872574989052964 ,0.001874776))
mutableListOf.add(Data(26.817143279681396,112.58399321381509,53.872574989052964 ,0.001874776))
mutableListOf.add(Data(26.817143286214396,112.58399322256894,53.86990780018209 ,0.0010117635))
mutableListOf.add(Data(26.817143286214396,112.58399322256894,53.86990780018209 ,0.0010117635))
mutableListOf.add(Data(26.817143290166985,112.58399321948606,53.866837630150144 ,-7.378759E-4))
mutableListOf.add(Data(26.817143290166985,112.58399321948606,53.866837630150144 ,-7.378759E-4))
mutableListOf.add(Data(26.817143296223914,112.58399321538221,53.871697309744604 ,-7.305082E-4))
mutableListOf.add(Data(26.817143296223914,112.58399321538221,53.871697309744604 ,-7.305082E-4))
mutableListOf.add(Data(26.817143305406848,112.58399321633149,53.86946042279146 ,-3.4410154E-4))
mutableListOf.add(Data(26.817143305406848,112.58399321633149,53.86946042279146 ,-3.4410154E-4))
mutableListOf.add(Data(26.817143309674115,112.58399323304309,53.86847346045636 ,0.015301721))
mutableListOf.add(Data(26.817143309674115,112.58399323304309,53.86847346045636 ,0.015301721))
mutableListOf.add(Data(26.817143300633735,112.5839932094286,53.869060856725014 ,-0.0041958815))
mutableListOf.add(Data(26.817143300633735,112.5839932094286,53.869060856725014 ,-0.0041958815))
mutableListOf.add(Data(26.81714329175772,112.58399321172573,53.868623724618146 ,-0.0041520167))
mutableListOf.add(Data(26.81714329175772,112.58399321172573,53.868623724618146 ,-0.0041520167))
mutableListOf.add(Data(26.81714327175831,112.58399320571804,53.867769950971876 ,-0.003427676))
mutableListOf.add(Data(26.81714327175831,112.58399320571804,53.867769950971876 ,-0.003427676))
mutableListOf.add(Data(26.81714327419855,112.58399319974227,53.86951164921021 ,1.3224973E-4))
mutableListOf.add(Data(26.81714327419855,112.58399319974227,53.86951164921021 ,1.3224973E-4))
mutableListOf.add(Data(26.817143286280604,112.58399319410101,53.86864421518561 ,0.0014093047))
mutableListOf.add(Data(26.817143286280604,112.58399319410101,53.86864421518561 ,0.0014093047))
mutableListOf.add(Data(26.817143301517042,112.58399319617503,53.869972686979224 ,0.0021324877))
mutableListOf.add(Data(26.817143301517042,112.58399319617503,53.869972686979224 ,0.0021324877))
mutableListOf.add(Data(26.81714329786978,112.58399320422272,53.87138653613738 ,5.9873355E-4))
mutableListOf.add(Data(26.81714329786978,112.58399320422272,53.87138653613738 ,5.9873355E-4))
mutableListOf.add(Data(26.817143290263108,112.58399320768578,53.868603234050624 ,-9.5163955E-4))
mutableListOf.add(Data(26.817143290263108,112.58399320768578,53.868603234050624 ,-9.5163955E-4))
mutableListOf.add(Data(26.81714330007566,112.58399319077888,53.8673567245271 ,-0.0016809735))
mutableListOf.add(Data(26.81714330007566,112.58399319077888,53.8673567245271 ,-0.0016809735))
mutableListOf.add(Data(26.81714331779051,112.58399320175057,53.86782459248525 ,0.013873377))
mutableListOf.add(Data(26.81714331779051,112.58399320175057,53.86782459248525 ,0.013873377))
mutableListOf.add(Data(26.81714331797703,112.58399319152798,53.86942285675099 ,-2.5552226E-4))
mutableListOf.add(Data(26.81714331797703,112.58399319152798,53.86942285675099 ,-2.5552226E-4))
mutableListOf.add(Data(26.817143301371033,112.58399320407928,53.87041323418066 ,-0.0022770471))
mutableListOf.add(Data(26.817143301371033,112.58399320407928,53.87041323418066 ,-0.0022770471))
mutableListOf.add(Data(26.817143286827157,112.58399319804838,53.869573120912776 ,-0.0025196006))
mutableListOf.add(Data(26.817143286827157,112.58399319804838,53.869573120912776 ,-0.0025196006))
mutableListOf.add(Data(26.81714328572524,112.58399318869752,53.87063521532872 ,-0.0016185519))
mutableListOf.add(Data(26.81714328572524,112.58399318869752,53.87063521532872 ,-0.0016185519))
mutableListOf.add(Data(26.817143275344343,112.58399317613704,53.87387955518443 ,-0.0021576409))
mutableListOf.add(Data(26.817143275344343,112.58399317613704,53.87387955518443 ,-0.0021576409))
mutableListOf.add(Data(26.817143275161378,112.58399317311375,53.86929991334597 ,0.001371147))
mutableListOf.add(Data(26.817143275161378,112.58399317311375,53.86929991334597 ,0.001371147))
mutableListOf.add(Data(26.817143281394475,112.58399317503098,53.86759919624262 ,0.003383463))
mutableListOf.add(Data(26.817143281394475,112.58399317503098,53.86759919624262 ,0.003383463))
mutableListOf.add(Data(26.81714327190517,112.58399318157332,53.86734306414877 ,8.065918E-4))
mutableListOf.add(Data(26.81714327190517,112.58399318157332,53.86734306414877 ,8.065918E-4))
mutableListOf.add(Data(26.817143260932923,112.58399316911094,53.86561844138333 ,-0.0014197703))
mutableListOf.add(Data(26.817143260932923,112.58399316911094,53.86561844138333 ,-0.0014197703))
mutableListOf.add(Data(26.817143261387983,112.58399316238105,53.868347101956715 ,0.0043071667))
mutableListOf.add(Data(26.817143261387983,112.58399316238105,53.868347101956715 ,0.0043071667))
mutableListOf.add(Data(26.817143256717934,112.58399314806874,53.870990385165555 ,-0.0019511797))
mutableListOf.add(Data(26.817143256717934,112.58399314806874,53.870990385165555 ,-0.0019511797))
mutableListOf.add(Data(26.81714325591799,112.58399315517725,53.86898572464412 ,0.0018099692))
mutableListOf.add(Data(26.81714325591799,112.58399315517725,53.86898572464412 ,0.0018099692))
mutableListOf.add(Data(26.817143252240935,112.58399316638,53.86619559236817 ,0.021292992))
mutableListOf.add(Data(26.817143252240935,112.58399316638,53.86619559236817 ,0.021292992))
mutableListOf.add(Data(26.81714402042069,112.583994386207,53.845687949385194 ,0.3348555))
mutableListOf.add(Data(26.81714402042069,112.583994386207,53.845687949385194 ,0.3348555))
mutableListOf.add(Data(26.817147405726278,112.58399956299603,53.73888769642832 ,0.9280623))
mutableListOf.add(Data(26.817147405726278,112.58399956299603,53.73888769642832 ,0.9280623))
mutableListOf.add(Data(26.817153799651898,112.58400914360494,53.58582657222291 ,1.4668413))
mutableListOf.add(Data(26.817153799651898,112.58400914360494,53.58582657222291 ,1.4668413))
mutableListOf.add(Data(26.81716245692801,112.58402187641425,52.39904705298733 ,1.690717))
mutableListOf.add(Data(26.81716245692801,112.58402187641425,52.39904705298733 ,1.690717))
mutableListOf.add(Data(26.817175410421267,112.58403959295411,49.84256188816494 ,3.0424085))
mutableListOf.add(Data(26.817175410421267,112.58403959295411,49.84256188816494 ,3.0424085))
mutableListOf.add(Data(26.817198616464147,112.58406783866415,45.33429552649801 ,4.4409986))
mutableListOf.add(Data(26.817198616464147,112.58406783866415,45.33429552649801 ,4.4409986))
mutableListOf.add(Data(26.81723059837678,112.58410013682379,39.67851981822855 ,5.031896))
mutableListOf.add(Data(26.81723059837678,112.58410013682379,39.67851981822855 ,5.031896))
mutableListOf.add(Data(26.81726793050972,112.58413123275119,33.760215543925824 ,5.287935))
mutableListOf.add(Data(26.81726793050972,112.58413123275119,33.760215543925824 ,5.287935))
mutableListOf.add(Data(26.817309703482323,112.58415777616139,26.470805435256466 ,5.290117))
mutableListOf.add(Data(26.817309703482323,112.58415777616139,26.470805435256466 ,5.290117))
mutableListOf.add(Data(26.8173539472737,112.5841781084828,19.413027531909677 ,5.2572174))
mutableListOf.add(Data(26.8173539472737,112.5841781084828,19.413027531909677 ,5.2572174))
mutableListOf.add(Data(26.81739827838705,112.58419180114795,10.869089257627422 ,5.054635))
mutableListOf.add(Data(26.81739827838705,112.58419180114795,10.869089257627422 ,5.054635))
mutableListOf.add(Data(26.817444316263447,112.58419779782906,1.290097286332184 ,5.1018424))
mutableListOf.add(Data(26.817444316263447,112.58419779782906,1.290097286332184 ,5.1018424))
mutableListOf.add(Data(26.81748941065244,112.5841957020102,351.87250951531354 ,4.951452))
mutableListOf.add(Data(26.81748941065244,112.5841957020102,351.87250951531354 ,4.951452))
mutableListOf.add(Data(26.817532025152016,112.58418464321606,343.08161892140026 ,4.856119))
mutableListOf.add(Data(26.817532025152016,112.58418464321606,343.08161892140026 ,4.856119))
mutableListOf.add(Data(26.817574411658125,112.58416696887566,337.3830350025077 ,5.0693793))
mutableListOf.add(Data(26.817574411658125,112.58416696887566,337.3830350025077 ,5.0693793))
mutableListOf.add(Data(26.817616516674775,112.58414506934275,332.70868576098275 ,5.4740086))
mutableListOf.add(Data(26.817616516674775,112.58414506934275,332.70868576098275 ,5.4740086))
mutableListOf.add(Data(26.81766656685223,112.58411337464841,328.82325068935097 ,7.248267))
mutableListOf.add(Data(26.81766656685223,112.58411337464841,328.82325068935097 ,7.248267))
mutableListOf.add(Data(26.81772616620445,112.58407132315536,327.0345880702647 ,8.242281))
mutableListOf.add(Data(26.81772616620445,112.58407132315536,327.0345880702647 ,8.242281))
mutableListOf.add(Data(26.81779051965125,112.58402390325215,326.6785986107236 ,8.845384))
mutableListOf.add(Data(26.81779051965125,112.58402390325215,326.6785986107236 ,8.845384))
mutableListOf.add(Data(26.817859422781524,112.58397291899796,326.7608614090873 ,9.471843))
mutableListOf.add(Data(26.817859422781524,112.58397291899796,326.7608614090873 ,9.471843))
mutableListOf.add(Data(26.81793317211832,112.58391890295081,326.7297430672287 ,10.078002))
mutableListOf.add(Data(26.81793317211832,112.58391890295081,326.7297430672287 ,10.078002))
mutableListOf.add(Data(26.818011331250453,112.5838615761508,326.8077438275502 ,10.587693))
mutableListOf.add(Data(26.818011331250453,112.5838615761508,326.8077438275502 ,10.587693))
mutableListOf.add(Data(26.818093147121697,112.58380194228982,327.1836637790894 ,10.954674))
mutableListOf.add(Data(26.818093147121697,112.58380194228982,327.1836637790894 ,10.954674))
mutableListOf.add(Data(26.818176204557567,112.58374205539742,327.38030492529407 ,10.941433))
mutableListOf.add(Data(26.818176204557567,112.58374205539742,327.38030492529407 ,10.941433))
mutableListOf.add(Data(26.81825883397749,112.58368252714435,327.3766985854123 ,10.857093))
mutableListOf.add(Data(26.81825883397749,112.58368252714435,327.3766985854123 ,10.857093))
mutableListOf.add(Data(26.81834151434389,112.58362366928625,327.43886696723774 ,10.841235))
mutableListOf.add(Data(26.81834151434389,112.58362366928625,327.43886696723774 ,10.841235))
mutableListOf.add(Data(26.81842401797818,112.58356478174697,327.7210084214726 ,10.823341))
mutableListOf.add(Data(26.81842401797818,112.58356478174697,327.7210084214726 ,10.823341))
mutableListOf.add(Data(26.81850681918393,112.58350666007705,328.004174404083 ,10.829654))
mutableListOf.add(Data(26.81850681918393,112.58350666007705,328.004174404083 ,10.829654))
mutableListOf.add(Data(26.8185898344893,112.58344838988543,327.71930087418013 ,10.8667))
mutableListOf.add(Data(26.8185898344893,112.58344838988543,327.71930087418013 ,10.8667))
mutableListOf.add(Data(26.818672593565683,112.58339009877655,328.01237063108704 ,10.824985))
mutableListOf.add(Data(26.818672593565683,112.58339009877655,328.01237063108704 ,10.824985))
mutableListOf.add(Data(26.818754990090127,112.58333306728635,328.4332332273649 ,10.844356))
mutableListOf.add(Data(26.818754990090127,112.58333306728635,328.4332332273649 ,10.844356))
mutableListOf.add(Data(26.818839320542985,112.5832751250177,328.3993418287033 ,10.843772))
mutableListOf.add(Data(26.818839320542985,112.5832751250177,328.3993418287033 ,10.843772))
mutableListOf.add(Data(26.818922809041855,112.58321765401757,328.4574394177834 ,10.858223))
mutableListOf.add(Data(26.818922809041855,112.58321765401757,328.4574394177834 ,10.858223))
mutableListOf.add(Data(26.819006465861534,112.5831607927747,328.98921062580393 ,10.842939))
mutableListOf.add(Data(26.819006465861534,112.5831607927747,328.98921062580393 ,10.842939))
mutableListOf.add(Data(26.81909075060507,112.5831046560205,329.1766036958724 ,10.863632))
mutableListOf.add(Data(26.81909075060507,112.5831046560205,329.1766036958724 ,10.863632))
mutableListOf.add(Data(26.819174866875375,112.58304877028208,328.96620654867934 ,10.821545))
mutableListOf.add(Data(26.819174866875375,112.58304877028208,328.96620654867934 ,10.821545))
mutableListOf.add(Data(26.819258542148233,112.58299212297055,328.94003326377987 ,10.827973))
mutableListOf.add(Data(26.819258542148233,112.58299212297055,328.94003326377987 ,10.827973))
mutableListOf.add(Data(26.81934275109521,112.5829359856361,329.7044680356877 ,10.862666))
mutableListOf.add(Data(26.81934275109521,112.5829359856361,329.7044680356877 ,10.862666))
mutableListOf.add(Data(26.819427513346156,112.58288107998513,329.94292359999116 ,10.841335))
mutableListOf.add(Data(26.819427513346156,112.58288107998513,329.94292359999116 ,10.841335))
mutableListOf.add(Data(26.819512958196423,112.58282775043037,332.0790516025343 ,10.830255))
mutableListOf.add(Data(26.819512958196423,112.58282775043037,332.0790516025343 ,10.830255))
mutableListOf.add(Data(26.819600500579643,112.58277846653539,333.6954431903745 ,10.856668))
mutableListOf.add(Data(26.819600500579643,112.58277846653539,333.6954431903745 ,10.856668))
mutableListOf.add(Data(26.819688638518134,112.5827299064952,333.5301526124602 ,10.898559))
mutableListOf.add(Data(26.819688638518134,112.5827299064952,333.5301526124602 ,10.898559))
mutableListOf.add(Data(26.81977658685566,112.58268010365491,332.9125532473293 ,10.915252))
mutableListOf.add(Data(26.81977658685566,112.58268010365491,332.9125532473293 ,10.915252))
mutableListOf.add(Data(26.819864103260052,112.58263021476887,333.12991718747577 ,10.862293))
mutableListOf.add(Data(26.819864103260052,112.58263021476887,333.12991718747577 ,10.862293))
mutableListOf.add(Data(26.819952185172603,112.58258048416751,332.5388326167029 ,10.938454))
mutableListOf.add(Data(26.819952185172603,112.58258048416751,332.5388326167029 ,10.938454))
mutableListOf.add(Data(26.82003906202077,112.58252887677297,331.2750700353321 ,10.86753))
mutableListOf.add(Data(26.82003906202077,112.58252887677297,331.2750700353321 ,10.86753))
mutableListOf.add(Data(26.82012530838014,112.58247555120677,331.0627194540364 ,10.9164505))
mutableListOf.add(Data(26.82012530838014,112.58247555120677,331.0627194540364 ,10.9164505))
mutableListOf.add(Data(26.82021139090915,112.58242212128593,331.2748378089003 ,10.884517))
mutableListOf.add(Data(26.82021139090915,112.58242212128593,331.2748378089003 ,10.884517))
mutableListOf.add(Data(26.820298208800885,112.58236931876395,331.2973910935397 ,10.954199))
mutableListOf.add(Data(26.820298208800885,112.58236931876395,331.2973910935397 ,10.954199))
mutableListOf.add(Data(26.820384970888565,112.58231658502292,331.0287870742398 ,10.913742))
mutableListOf.add(Data(26.820384970888565,112.58231658502292,331.0287870742398 ,10.913742))
mutableListOf.add(Data(26.820471244437208,112.58226359177391,331.06717273737524 ,10.912278))
mutableListOf.add(Data(26.820471244437208,112.58226359177391,331.06717273737524 ,10.912278))
mutableListOf.add(Data(26.820558007789558,112.58221052491533,331.5169816753556 ,10.94842))
mutableListOf.add(Data(26.820558007789558,112.58221052491533,331.5169816753556 ,10.94842))
mutableListOf.add(Data(26.820645407773025,112.58215812417345,331.71754335014384 ,10.979202))
mutableListOf.add(Data(26.820645407773025,112.58215812417345,331.71754335014384 ,10.979202))
mutableListOf.add(Data(26.820732568459803,112.58210589578515,331.6438729297561 ,10.946945))
mutableListOf.add(Data(26.820732568459803,112.58210589578515,331.6438729297561 ,10.946945))
mutableListOf.add(Data(26.820819910169977,112.58205326357,331.767485693355 ,10.988325))
mutableListOf.add(Data(26.820819910169977,112.58205326357,331.767485693355 ,10.988325))
mutableListOf.add(Data(26.82090739738908,112.58200156651718,332.347204829349 ,10.947101))
mutableListOf.add(Data(26.82090739738908,112.58200156651718,332.347204829349 ,10.947101))
mutableListOf.add(Data(26.820995056276622,112.58195061688777,332.4727163855371 ,10.950606))
mutableListOf.add(Data(26.820995056276622,112.58195061688777,332.4727163855371 ,10.950606))
mutableListOf.add(Data(26.821083357477672,112.58189977279349,333.5770486913015 ,11.0240345))
mutableListOf.add(Data(26.821083357477672,112.58189977279349,333.5770486913015 ,11.0240345))
mutableListOf.add(Data(26.821172475162726,112.58185287422074,336.05104566151766 ,11.047021))
mutableListOf.add(Data(26.821172475162726,112.58185287422074,336.05104566151766 ,11.047021))
mutableListOf.add(Data(26.821264484994177,112.58180877707832,336.721654124797 ,10.947278))
mutableListOf.add(Data(26.821264484994177,112.58180877707832,336.721654124797 ,10.947278))
mutableListOf.add(Data(26.821355586119605,112.5817640770223,336.0527258880535 ,11.0230665))
mutableListOf.add(Data(26.821355586119605,112.5817640770223,336.0527258880535 ,11.0230665))
mutableListOf.add(Data(26.821446396198834,112.58171813418576,335.6811840877723 ,11.044201))
mutableListOf.add(Data(26.821446396198834,112.58171813418576,335.6811840877723 ,11.044201))
mutableListOf.add(Data(26.821537394395577,112.58167296050368,336.12904642183923 ,11.024753))
mutableListOf.add(Data(26.821537394395577,112.58167296050368,336.12904642183923 ,11.024753))
mutableListOf.add(Data(26.82162819539147,112.58162746655287,335.0245706821023 ,11.01271))
mutableListOf.add(Data(26.82162819539147,112.58162746655287,335.0245706821023 ,11.01271))
mutableListOf.add(Data(26.821718933471065,112.58157993539679,334.1465498642972 ,11.123078))
mutableListOf.add(Data(26.821718933471065,112.58157993539679,334.1465498642972 ,11.123078))
mutableListOf.add(Data(26.821809477042866,112.58153187161871,333.93389875467795 ,11.069262))
mutableListOf.add(Data(26.821809477042866,112.58153187161871,333.93389875467795 ,11.069262))
mutableListOf.add(Data(26.82189924216394,112.5814829554966,333.64357473381745 ,11.037714))
mutableListOf.add(Data(26.82189924216394,112.5814829554966,333.64357473381745 ,11.037714))
mutableListOf.add(Data(26.82198886489619,112.58143265217548,333.8418414650445 ,11.124701))
mutableListOf.add(Data(26.82198886489619,112.58143265217548,333.8418414650445 ,11.124701))
mutableListOf.add(Data(26.82207943977267,112.58138371825058,334.74234726559735 ,11.168612))
mutableListOf.add(Data(26.82207943977267,112.58138371825058,334.74234726559735 ,11.168612))
mutableListOf.add(Data(26.82217079652045,112.58133629724179,334.6802745064203 ,11.136633))
mutableListOf.add(Data(26.82217079652045,112.58133629724179,334.6802745064203 ,11.136633))
mutableListOf.add(Data(26.82226125835418,112.58128793467625,334.04232117756277 ,11.089879))
mutableListOf.add(Data(26.82226125835418,112.58128793467625,334.04232117756277 ,11.089879))
mutableListOf.add(Data(26.822351660082763,112.5812387113965,334.4818438506531 ,11.136156))
mutableListOf.add(Data(26.822351660082763,112.5812387113965,334.4818438506531 ,11.136156))
mutableListOf.add(Data(26.822442570811926,112.581190668316,335.08963506413585 ,11.129769))
mutableListOf.add(Data(26.822442570811926,112.581190668316,335.08963506413585 ,11.129769))
mutableListOf.add(Data(26.822533871293896,112.58114380339613,335.2726704735138 ,11.116067))
mutableListOf.add(Data(26.822533871293896,112.58114380339613,335.2726704735138 ,11.116067))
mutableListOf.add(Data(26.822625356286988,112.5810963629318,334.7990514960868 ,11.171506))
mutableListOf.add(Data(26.822625356286988,112.5810963629318,334.7990514960868 ,11.171506))
mutableListOf.add(Data(26.822717040623075,112.58104834264921,335.2455546225089 ,11.233819))
mutableListOf.add(Data(26.822717040623075,112.58104834264921,335.2455546225089 ,11.233819))
mutableListOf.add(Data(26.822809222350063,112.58100143507674,335.7449848848094 ,11.209728))
mutableListOf.add(Data(26.822809222350063,112.58100143507674,335.7449848848094 ,11.209728))
mutableListOf.add(Data(26.822901437574036,112.5809551957787,335.54689573850067 ,11.171629))
mutableListOf.add(Data(26.822901437574036,112.5809551957787,335.54689573850067 ,11.171629))
mutableListOf.add(Data(26.822993570002573,112.58090876870207,335.8036083984556 ,11.158639))
mutableListOf.add(Data(26.822993570002573,112.58090876870207,335.8036083984556 ,11.158639))
mutableListOf.add(Data(26.823085804697456,112.5808628704648,336.06588083239495 ,11.160056))
mutableListOf.add(Data(26.823085804697456,112.5808628704648,336.06588083239495 ,11.160056))
mutableListOf.add(Data(26.8231782941641,112.5808170301043,336.1425838567742 ,11.196213))
mutableListOf.add(Data(26.8231782941641,112.5808170301043,336.1425838567742 ,11.196213))
mutableListOf.add(Data(26.82327070139615,112.58077156018408,336.3930127426927 ,11.158848))
mutableListOf.add(Data(26.82327070139615,112.58077156018408,336.3930127426927 ,11.158848))
mutableListOf.add(Data(26.82336315989599,112.58072645624978,336.4708632388525 ,11.134174))
mutableListOf.add(Data(26.82336315989599,112.58072645624978,336.4708632388525 ,11.134174))
mutableListOf.add(Data(26.82345461520168,112.58068198624507,336.6187095136266 ,10.997278))
mutableListOf.add(Data(26.82345461520168,112.58068198624507,336.6187095136266 ,10.997278))
mutableListOf.add(Data(26.82354701100081,112.58063771053577,337.4698740276152 ,11.121712))
mutableListOf.add(Data(26.82354701100081,112.58063771053577,337.4698740276152 ,11.121712))
mutableListOf.add(Data(26.823638365508067,112.58059644124914,338.7054689088489 ,10.727212))
mutableListOf.add(Data(26.823638365508067,112.58059644124914,338.7054689088489 ,10.727212))
mutableListOf.add(Data(26.823727664550493,112.58055870143195,339.8902335222793 ,10.347593))
mutableListOf.add(Data(26.823727664550493,112.58055870143195,339.8902335222793 ,10.347593))
mutableListOf.add(Data(26.823812318470793,112.58052555925428,340.5650493820874 ,9.4535055))
mutableListOf.add(Data(26.823812318470793,112.58052555925428,340.5650493820874 ,9.4535055))
mutableListOf.add(Data(26.823887553495833,112.58049561807807,339.6516276938141 ,8.247951))
mutableListOf.add(Data(26.823887553495833,112.58049561807807,339.6516276938141 ,8.247951))
mutableListOf.add(Data(26.82395168024204,112.58046870159896,340.5628364007963 ,6.9784737))
mutableListOf.add(Data(26.82395168024204,112.58046870159896,340.5628364007963 ,6.9784737))
mutableListOf.add(Data(26.82400846212442,112.58045082651485,351.1414880288254 ,6.062161))
mutableListOf.add(Data(26.82400846212442,112.58045082651485,351.1414880288254 ,6.062161))
mutableListOf.add(Data(26.824060398302887,112.58044942761538,6.345352517490426 ,5.5890617))
mutableListOf.add(Data(26.824060398302887,112.58044942761538,6.345352517490426 ,5.5890617))
mutableListOf.add(Data(26.82410717835299,112.58045986670147,15.169950094957699 ,5.0569997))
mutableListOf.add(Data(26.82410717835299,112.58045986670147,15.169950094957699 ,5.0569997))
mutableListOf.add(Data(26.824153274522928,112.58047698923471,22.21982546943474 ,5.927354))
mutableListOf.add(Data(26.824153274522928,112.58047698923471,22.21982546943474 ,5.927354))
mutableListOf.add(Data(26.82420820422086,112.58050675346034,28.072225248435984 ,7.5890827))
mutableListOf.add(Data(26.82420820422086,112.58050675346034,28.072225248435984 ,7.5890827))
mutableListOf.add(Data(26.824271397494158,112.58054781114281,33.366052157113586 ,8.47322))
mutableListOf.add(Data(26.824271397494158,112.58054781114281,33.366052157113586 ,8.47322))
mutableListOf.add(Data(26.824335395451552,112.58059964957953,39.51156267415672 ,8.985364))
mutableListOf.add(Data(26.824335395451552,112.58059964957953,39.51156267415672 ,8.985364))
mutableListOf.add(Data(26.824395490943697,112.58066019726031,45.24210163308118 ,9.010218))
mutableListOf.add(Data(26.824395490943697,112.58066019726031,45.24210163308118 ,9.010218))
mutableListOf.add(Data(26.824450500955546,112.5807291061281,51.63071224306344 ,9.249808))
mutableListOf.add(Data(26.824450500955546,112.5807291061281,51.63071224306344 ,9.249808))
mutableListOf.add(Data(26.82449811991814,112.58080421285314,58.4833590750672 ,9.367973))
mutableListOf.add(Data(26.82449811991814,112.58080421285314,58.4833590750672 ,9.367973))
mutableListOf.add(Data(26.824538848426627,112.58088982957428,65.9710803111933 ,9.695224))
mutableListOf.add(Data(26.824538848426627,112.58088982957428,65.9710803111933 ,9.695224))
mutableListOf.add(Data(26.8245709793362,112.58098361641142,72.2269171663524 ,10.104207))
mutableListOf.add(Data(26.8245709793362,112.58098361641142,72.2269171663524 ,10.104207))
mutableListOf.add(Data(26.82459393783725,112.5810786789352,76.83474207290874 ,9.46164))
mutableListOf.add(Data(26.82459393783725,112.5810786789352,76.83474207290874 ,9.46164))
mutableListOf.add(Data(26.82461098240031,112.58116886149608,78.96607186755995 ,8.802579))
mutableListOf.add(Data(26.82461098240031,112.58116886149608,78.96607186755995 ,8.802579))
mutableListOf.add(Data(26.824624897258907,112.58125259016583,79.77531524174401 ,8.213966))
mutableListOf.add(Data(26.824624897258907,112.58125259016583,79.77531524174401 ,8.213966))
mutableListOf.add(Data(26.824637602560202,112.58133367965361,80.0445023884443 ,8.11556))
mutableListOf.add(Data(26.824637602560202,112.58133367965361,80.0445023884443 ,8.11556))
mutableListOf.add(Data(26.824650401766355,112.58141466975431,80.0775895323311 ,8.164914))
mutableListOf.add(Data(26.824650401766355,112.58141466975431,80.0775895323311 ,8.164914))
mutableListOf.add(Data(26.824664299167868,112.58149569608165,78.12252130694856 ,8.347733))
mutableListOf.add(Data(26.824664299167868,112.58149569608165,78.12252130694856 ,8.347733))
mutableListOf.add(Data(26.824680465602725,112.58158016934632,77.63346354067636 ,8.871422))
mutableListOf.add(Data(26.824680465602725,112.58158016934632,77.63346354067636 ,8.871422))
mutableListOf.add(Data(26.824698071237794,112.5816714712686,77.57790507442019 ,9.538839))
mutableListOf.add(Data(26.824698071237794,112.5816714712686,77.57790507442019 ,9.538839))
mutableListOf.add(Data(26.824716810952108,112.58176774318086,77.44957350387847 ,10.009091))
mutableListOf.add(Data(26.824716810952108,112.58176774318086,77.44957350387847 ,10.009091))
mutableListOf.add(Data(26.824736346219844,112.58186742933266,77.70056588040353 ,10.273892))
mutableListOf.add(Data(26.824736346219844,112.58186742933266,77.70056588040353 ,10.273892))
mutableListOf.add(Data(26.82475624119252,112.58196927550934,77.2926738133595 ,10.368853))
mutableListOf.add(Data(26.82475624119252,112.58196927550934,77.2926738133595 ,10.368853))
mutableListOf.add(Data(26.824776321201686,112.58207074730377,77.99243352401652 ,10.352851))
mutableListOf.add(Data(26.824776321201686,112.58207074730377,77.99243352401652 ,10.352851))
mutableListOf.add(Data(26.824795173856856,112.58217470637561,79.23096197149869 ,10.704494))
mutableListOf.add(Data(26.824795173856856,112.58217470637561,79.23096197149869 ,10.704494))
mutableListOf.add(Data(26.824813008893262,112.58228182337149,79.66565313952486 ,10.874358))
mutableListOf.add(Data(26.824813008893262,112.58228182337149,79.66565313952486 ,10.874358))
mutableListOf.add(Data(26.824830937998897,112.5823899189086,79.68082128212416 ,10.942389))
mutableListOf.add(Data(26.824830937998897,112.5823899189086,79.68082128212416 ,10.942389))
mutableListOf.add(Data(26.824848069663854,112.58249889778686,80.14145692371261 ,10.985577))
mutableListOf.add(Data(26.824848069663854,112.58249889778686,80.14145692371261 ,10.985577))
mutableListOf.add(Data(26.824864747770675,112.58260734311246,80.0448934167743 ,10.931011))
mutableListOf.add(Data(26.824864747770675,112.58260734311246,80.0448934167743 ,10.931011))
mutableListOf.add(Data(26.824882072902202,112.58271533362611,79.72259813418253 ,10.872131))
mutableListOf.add(Data(26.824882072902202,112.58271533362611,79.72259813418253 ,10.872131))
mutableListOf.add(Data(26.824898658212664,112.58282301050227,80.15790572678134 ,10.803015))
mutableListOf.add(Data(26.824898658212664,112.58282301050227,80.15790572678134 ,10.803015))
mutableListOf.add(Data(26.824915330378445,112.58293057308566,79.8746065554821 ,10.830168))
mutableListOf.add(Data(26.824915330378445,112.58293057308566,79.8746065554821 ,10.830168))
mutableListOf.add(Data(26.824932651505765,112.58303827378298,79.61621110767044 ,10.868644))
mutableListOf.add(Data(26.824932651505765,112.58303827378298,79.61621110767044 ,10.868644))
mutableListOf.add(Data(26.82494998141344,112.58314556269549,80.13490250343034 ,10.779586))
mutableListOf.add(Data(26.82494998141344,112.58314556269549,80.13490250343034 ,10.779586))
mutableListOf.add(Data(26.82496632888347,112.58325114989803,80.10408298234796 ,10.57883))
mutableListOf.add(Data(26.82496632888347,112.58325114989803,80.10408298234796 ,10.57883))
mutableListOf.add(Data(26.824982616660503,112.5833574520516,80.0832449289639 ,10.798956))
mutableListOf.add(Data(26.824982616660503,112.5833574520516,80.0832449289639 ,10.798956))
mutableListOf.add(Data(26.825000029272786,112.58346564536672,79.64116349625579 ,11.000219))
mutableListOf.add(Data(26.825000029272786,112.58346564536672,79.64116349625579 ,11.000219))
mutableListOf.add(Data(26.82501782306914,112.58357367268343,80.0479729783163 ,10.887358))
mutableListOf.add(Data(26.82501782306914,112.58357367268343,80.0479729783163 ,10.887358))
mutableListOf.add(Data(26.825034644140306,112.5836819669284,80.39041646518592 ,10.887838))
mutableListOf.add(Data(26.825034644140306,112.5836819669284,80.39041646518592 ,10.887838))
mutableListOf.add(Data(26.825050825910466,112.58379012234309,79.99435343201077 ,10.847428))
mutableListOf.add(Data(26.825050825910466,112.58379012234309,79.99435343201077 ,10.847428))
mutableListOf.add(Data(26.82506848640962,112.58389620345477,79.68656034857423 ,10.79047))
mutableListOf.add(Data(26.82508624503321,112.58400483164121,80.33252805064916 ,10.902022))
mutableListOf.add(Data(26.825102551245067,112.5841132971028,80.34150291921856 ,10.943128))
mutableListOf.add(Data(26.825119995319334,112.58422127548491,79.928671771631 ,10.812377))
mutableListOf.add(Data(26.825136584562436,112.58432887362649,80.3882692244656 ,10.840047))
mutableListOf.add(Data(26.825152339750225,112.58443770296758,80.06505101256226 ,10.956093))
mutableListOf.add(Data(26.82516950026469,112.58454632285358,79.41718024902991 ,10.955121))
mutableListOf.add(Data(26.825187322302735,112.58465452397829,79.75200465988036 ,10.914424))
mutableListOf.add(Data(26.82520508970052,112.58476268654412,80.23870430334165 ,10.900922))
mutableListOf.add(Data(26.82522160867826,112.5848709467686,80.44165825188668 ,10.936707))
mutableListOf.add(Data(26.825238429747245,112.5849796588726,79.97719514304202 ,10.95725))
mutableListOf.add(Data(26.82525602953279,112.58508773702944,80.00920140949273 ,10.904101))
mutableListOf.add(Data(26.82527317500041,112.58519603083177,80.24089764783884 ,10.8971195))
mutableListOf.add(Data(26.825290036476883,112.58530443946485,80.20050390908739 ,10.926449))
mutableListOf.add(Data(26.82530659361771,112.58541239287453,80.04904787933697 ,10.85935))
mutableListOf.add(Data(26.82532336881114,112.5855199067927,80.04164736937122 ,10.782148))
mutableListOf.add(Data(26.825340290024027,112.58562428673645,79.76805645820355 ,10.10985))
mutableListOf.add(Data(26.82535567687754,112.58571917203813,80.07238578195722 ,9.093919))
mutableListOf.add(Data(26.82536901649892,112.58580534392024,80.083560825213 ,8.268731))
mutableListOf.add(Data(26.825381954739342,112.58588575869024,79.89287389641731 ,8.168556))
mutableListOf.add(Data(26.825394786288715,112.58596894528253,80.33394019226006 ,8.655088))
mutableListOf.add(Data(26.82540806483152,112.5860544640404,79.8452282043146 ,8.341439))
mutableListOf.add(Data(26.825421391715953,112.58613679909993,79.92148641262412 ,8.457919))
mutableListOf.add(Data(26.82543495743159,112.5862224944188,80.25262935151198 ,8.937425))
mutableListOf.add(Data(26.82544887111177,112.58631295507655,80.08629375465466 ,9.368444))
mutableListOf.add(Data(26.82546366378044,112.58640477758786,79.78908661065805 ,9.034008))
mutableListOf.add(Data(26.82547791361014,112.58649216206204,80.10327445870496 ,8.63131))
mutableListOf.add(Data(26.825491576317813,112.58658089699335,80.45077996952324 ,9.251799))
mutableListOf.add(Data(26.825506335597126,112.58667589584078,80.12832503125964 ,9.939442))
mutableListOf.add(Data(26.82552223441907,112.58677732670597,80.41312599040259 ,10.415545))
mutableListOf.add(Data(26.825538277383547,112.58688045012173,80.3277366729464 ,10.310362))
mutableListOf.add(Data(26.825554208115665,112.5869811637487,80.0571194553886 ,9.979941))
mutableListOf.add(Data(26.82556927129904,112.58707547979726,80.22023034918402 ,9.056645))
mutableListOf.add(Data(26.825582903082594,112.5871616534857,80.40227623490603 ,8.297718))
mutableListOf.add(Data(26.825595447076772,112.58724267783181,80.58279642712216 ,8.240325))
mutableListOf.add(Data(26.825607062333198,112.58732773893132,82.92822447772295 ,8.885467))
mutableListOf.add(Data(26.8256163967207,112.58742007652688,83.91451403915653 ,9.53883))
mutableListOf.add(Data(26.825625805673585,112.58751790162299,83.49849276633978 ,9.8336315))
mutableListOf.add(Data(26.82563596715511,112.58761468270157,83.35401718992108 ,9.501984))
mutableListOf.add(Data(26.825646863924856,112.5877102491863,82.55524663016877 ,9.71343))
mutableListOf.add(Data(26.825659541247234,112.58780732835037,81.94595789771051 ,9.71838))
mutableListOf.add(Data(26.825672293111914,112.5879045928294,81.89237762499266 ,9.677105))
mutableListOf.add(Data(26.825685337681932,112.58799809299924,80.8824043826121 ,9.080445))
mutableListOf.add(Data(26.82569847648075,112.58808400269606,79.89877603363385 ,8.160078))
mutableListOf.add(Data(26.825711805743254,112.58816030310517,79.63162684462714 ,7.2267))
mutableListOf.add(Data(26.82572189552541,112.58822581838183,83.05601176756522 ,5.997647))
mutableListOf.add(Data(26.82572447823082,112.5882790961332,92.82558460020824 ,4.5657516))
mutableListOf.add(Data(26.825718263255567,112.58831958891977,105.99306916896894 ,3.6916084))
mutableListOf.add(Data(26.825705384757367,112.58835137594669,117.39571481846839 ,3.4976408))
mutableListOf.add(Data(26.82568773592112,112.58838171407714,126.8308015341406 ,3.7412977))
mutableListOf.add(Data(26.825664209114287,112.58841049240998,136.7715408144472 ,3.8619535))
mutableListOf.add(Data(26.825635321161386,112.58843565279595,146.28077606374907 ,4.1901913))
mutableListOf.add(Data(26.82560115459976,112.5884567796701,156.0422092179645 ,4.372593))
mutableListOf.add(Data(26.8255626836711,112.58847136977255,166.78803655611884 ,4.56643))
mutableListOf.add(Data(26.82552087332516,112.58847674422513,178.44471060122942 ,5.053988))
mutableListOf.add(Data(26.825468360723992,112.58847264490073,185.2122805969315 ,6.715906))
mutableListOf.add(Data(26.825401186671062,112.58846318500233,186.65640115352562 ,8.006904))
mutableListOf.add(Data(26.82532605586703,112.58845198261439,187.28742867056476 ,8.70072))
mutableListOf.add(Data(26.8252457471272,112.58843933355529,188.2250770398241 ,9.278515))
mutableListOf.add(Data(26.82516033433597,112.58842418755573,188.72999194402811 ,9.884587))
mutableListOf.add(Data(26.825068937761582,112.58840750767082,188.55380038419847 ,10.508339))
mutableListOf.add(Data(26.824972867801122,112.58839022105084,189.05396147674017 ,10.945375))
mutableListOf.add(Data(26.824875043536103,112.58837048811633,190.37926406253277 ,11.015351))
mutableListOf.add(Data(26.82477736812146,112.58834859022588,190.74765714560658 ,10.961484))
mutableListOf.add(Data(26.82468029797548,112.58832657515805,190.7464003907993 ,10.924771))
mutableListOf.add(Data(26.824583225389507,112.58830488028168,191.0691678102174 ,10.944002))
mutableListOf.add(Data(26.824486236537098,112.58828204069819,191.41682443897108 ,10.972908))
mutableListOf.add(Data(26.82438935491626,112.58825925251047,191.13828932461794 ,10.922421))
mutableListOf.add(Data(26.824292058061655,112.58823714439076,190.51417395901885 ,10.983685))
mutableListOf.add(Data(26.824194978703208,112.58821677322887,189.4132567478395 ,10.865106))
mutableListOf.add(Data(26.824097661934157,112.58819829218662,188.33140942482285 ,10.886163))
mutableListOf.add(Data(26.82399966406215,112.5881817191164,186.76314334987458 ,10.996041))
mutableListOf.add(Data(26.82390099423371,112.58816868906779,184.95688616348636 ,10.964688))
mutableListOf.add(Data(26.823802803259678,112.58815906442507,183.5099242481975 ,10.888597))
mutableListOf.add(Data(26.823703886909744,112.58815186387652,182.20369155056758 ,10.969546))
mutableListOf.add(Data(26.823604841012653,112.58814776818956,180.27973654440171 ,10.942759))
mutableListOf.add(Data(26.823506182087286,112.58814756502561,178.41990335416392 ,10.901522))
mutableListOf.add(Data(26.8234077732812,112.58815050565116,177.07771654074304 ,10.863581))
mutableListOf.add(Data(26.823309027975455,112.58815577451051,175.84363796150515 ,10.914522))
mutableListOf.add(Data(26.823210579428864,112.58816315720807,174.83184105861613 ,10.904749))
mutableListOf.add(Data(26.82311176082705,112.58817200770986,174.3510777033173 ,10.960163))
mutableListOf.add(Data(26.8230130510353,112.58818159990454,174.25116569613834 ,10.949297))
mutableListOf.add(Data(26.8229147108448,112.58819100914526,174.4300620108793 ,10.86557))
mutableListOf.add(Data(26.822815982451136,112.58819998942029,174.38741430970174 ,10.961633))
mutableListOf.add(Data(26.822717658398695,112.58820959147286,173.98943284714346 ,10.884146))
mutableListOf.add(Data(26.822619025345805,112.58821937006674,174.21477444824052 ,10.94364))
mutableListOf.add(Data(26.822520398766574,112.58822881737137,174.50188828019117 ,10.928565))
mutableListOf.add(Data(26.82242135045806,112.58823800170606,174.39203151758068 ,11.003972))
mutableListOf.add(Data(26.82232288454279,112.58824734785314,174.21564871245428 ,10.937689))
mutableListOf.add(Data(26.82222440307578,112.58825691597944,174.16925806761154 ,10.9371195))
mutableListOf.add(Data(26.822125599059973,112.58826617121782,174.505658544613 ,10.904333))
mutableListOf.add(Data(26.822027680356275,112.58827501278103,174.41369687762796 ,10.894905))
mutableListOf.add(Data(26.82192881779245,112.58828425392758,174.03677971846997 ,10.942385))
mutableListOf.add(Data(26.821829987245398,112.58829436532618,174.09423526976812 ,10.993935))
mutableListOf.add(Data(26.821731474322508,112.58830369366189,174.458011144963 ,10.912243))
mutableListOf.add(Data(26.82163298773937,112.58831277133513,174.29083543483776 ,10.906608))
mutableListOf.add(Data(26.821534477288782,112.58832251669477,174.07890832527062 ,10.930833))
mutableListOf.add(Data(26.82143603055604,112.58833213847254,174.3435371744736 ,10.910077))
mutableListOf.add(Data(26.821337437902788,112.58834046715273,175.3574104548703 ,10.923147))
mutableListOf.add(Data(26.82123870294786,112.5883459066746,177.2432256847108 ,10.943883))
mutableListOf.add(Data(26.821139617348642,112.58834848729124,177.67729786684345 ,10.97326))
mutableListOf.add(Data(26.82104042684288,112.5883516739536,176.89996769778264 ,10.979047))
mutableListOf.add(Data(26.820941492509043,112.58835610568427,177.2468047038359 ,10.953704))
mutableListOf.add(Data(26.820842365150224,112.58835964324697,176.68708436173168 ,10.956896))
mutableListOf.add(Data(26.82074348179931,112.58836548765069,175.08942115259566 ,10.924478))
mutableListOf.add(Data(26.820644894992096,112.5883738706066,174.5613928882403 ,10.922756))
mutableListOf.add(Data(26.82054592431787,112.58838272264623,174.56396103936825 ,10.973723))
mutableListOf.add(Data(26.82044709968575,112.58839144578067,174.37763347881028 ,10.921038))
mutableListOf.add(Data(26.820350203145193,112.58840097729004,173.61869017899517 ,10.51492))
mutableListOf.add(Data(26.820258686700708,112.58841127187114,173.23824864222544 ,9.750838))
mutableListOf.add(Data(26.82017508368214,112.58842030622239,174.08024704234793 ,8.816113))
mutableListOf.add(Data(26.820100223700994,112.58842630948175,176.73598851618897 ,7.82164))
mutableListOf.add(Data(26.820033299572902,112.58842614363626,183.5862311216049 ,6.977247))
mutableListOf.add(Data(26.81997327271163,112.58841548604096,193.57521885820844 ,6.478256))
mutableListOf.add(Data(26.81991927150576,112.58839498736432,202.85463190231775 ,6.3534274))
mutableListOf.add(Data(26.819867127007132,112.58836446736944,210.9787321086977 ,6.6902227))
mutableListOf.add(Data(26.81981675325887,112.58832481437109,218.38637279190002 ,6.9047847))
mutableListOf.add(Data(26.819771552548968,112.58827786859652,226.603035721912 ,6.7886267))
mutableListOf.add(Data(26.81973314144824,112.58822495699303,232.99868825692852 ,6.7599373))
mutableListOf.add(Data(26.819698452510536,112.58816757745821,237.22470388133385 ,7.2045116))
mutableListOf.add(Data(26.819663217361732,112.5881007591936,240.00845676059924 ,8.158858))
mutableListOf.add(Data(26.819626000292175,112.58802453540116,240.8784999174538 ,8.999233))
mutableListOf.add(Data(26.819586534576935,112.58794197732135,240.76522806025832 ,9.600716))
mutableListOf.add(Data(26.819543977857247,112.58785492336641,240.00827917568083 ,10.142109))
mutableListOf.add(Data(26.819497317310454,112.58776324429233,239.45918660792518 ,10.695647))
mutableListOf.add(Data(26.819448768856812,112.587668386066,239.3843823761352 ,10.932611))
mutableListOf.add(Data(26.81939918638018,112.58757314768673,238.63705039790906 ,10.928658))
mutableListOf.add(Data(26.819348833837722,112.58747899858194,238.34806509412584 ,10.828743))
mutableListOf.add(Data(26.819298543965182,112.58738510707593,238.20517753668918 ,10.846967))
mutableListOf.add(Data(26.819247448176384,112.58729177541909,237.1934625960702 ,10.858182))
mutableListOf.add(Data(26.819194632031977,112.5871997947454,236.50368179179063 ,10.823321))
mutableListOf.add(Data(26.81914190798688,112.58710814764821,236.76342022554786 ,10.759948))
mutableListOf.add(Data(26.81908940434915,112.58701628899507,236.13558923704028 ,10.808216))
mutableListOf.add(Data(26.819035575518786,112.58692584568828,235.18217679117654 ,10.71068))
mutableListOf.add(Data(26.81898073231781,112.5868359376484,235.13092305164477 ,10.8211355))
mutableListOf.add(Data(26.81892555318869,112.58674535807322,235.32996842443728 ,10.85881))
mutableListOf.add(Data(26.81887105463057,112.58665496701065,235.21492071805758 ,10.777623))
mutableListOf.add(Data(26.818815922622132,112.58656520621176,234.90702945065175 ,10.759572))
mutableListOf.add(Data(26.818760790349998,112.58647523807899,235.211041170609 ,10.825326))
mutableListOf.add(Data(26.818706084816025,112.5863853958238,235.1533533928791 ,10.755462))
mutableListOf.add(Data(26.818651422997945,112.58629555556442,235.04497195112933 ,10.756754))
mutableListOf.add(Data(26.818596768469828,112.58620567612797,235.18598803673342 ,10.776001))
mutableListOf.add(Data(26.818542351463606,112.58611652045523,234.8494782767052 ,10.687228))
mutableListOf.add(Data(26.818487635742752,112.58602741332314,234.98692900356255 ,10.736459))
mutableListOf.add(Data(26.818433311586134,112.5859383346022,235.22746094537374 ,10.653758))
mutableListOf.add(Data(26.818378710306522,112.58584926454115,235.01718674158573 ,10.708648))
mutableListOf.add(Data(26.81832410447011,112.58575969356657,235.37343574831525 ,10.767325))
mutableListOf.add(Data(26.818270113201255,112.5856699225492,235.18238169685165 ,10.741438))
mutableListOf.add(Data(26.818215754477475,112.5855806078428,234.962640850874 ,10.717836))
mutableListOf.add(Data(26.81816119807655,112.58549201301568,235.00922274101347 ,10.64606))
mutableListOf.add(Data(26.818106882589856,112.58540284786379,235.37503401258104 ,10.699273))
mutableListOf.add(Data(26.818052845270795,112.58531349223125,235.15450086465967 ,10.689224))
mutableListOf.add(Data(26.81799849537033,112.58522428835666,235.13877776919028 ,10.715375 ))
mutableListOf.add(Data(26.817944471910003,112.58513476623239,235.33824661371133 ,10.698519))
mutableListOf.add(Data(26.817890134992844,112.58504554973807,234.86815201389604 ,10.693531))
mutableListOf.add(Data(26.817835319728093,112.58495664165265,235.02019202482052 ,10.712638))
mutableListOf.add(Data(26.817780786837695,112.58486759996185,234.98798085269473 ,10.703126))
mutableListOf.add(Data(26.817726344560015,112.58477895119715,234.72041502214867 ,10.559478))
mutableListOf.add(Data(26.817672896045035,112.58469285935371,234.80909819833212 ,10.268126))
mutableListOf.add(Data(26.81762034092348,112.5846076693991,235.4481989989702 ,10.194944))
mutableListOf.add(Data(26.81757000080714,112.58452312548724,236.82009713528063 ,9.998541))
mutableListOf.add(Data(26.81752307710616,112.58443938857062,238.62282994405712 ,9.646217))
mutableListOf.add(Data(26.81747927640272,112.5843556948273,239.96605494623182 ,9.61409))
mutableListOf.add(Data(26.817437035117667,112.5842705975036,241.02851819238398 ,9.784999))
mutableListOf.add(Data(26.817394588032748,112.58418206729552,241.47888720587628 ,10.220616))
mutableListOf.add(Data(26.81734916434496,112.58408728482055,240.92852422293498 ,10.946569))
mutableListOf.add(Data(26.817300427653745,112.58398997361219,239.22969225181274 ,11.08842))
mutableListOf.add(Data(26.81724905918242,112.58389508879584,237.37255015610793 ,10.959397))
mutableListOf.add(Data(26.817195687670125,112.58380236411111,236.10377421588638 ,10.868602))
mutableListOf.add(Data(26.817141281661353,112.58371061366645,235.69349841282204 ,10.867909))
mutableListOf.add(Data(26.81708765945191,112.58361944929223,236.51455545294928 ,10.751019))
mutableListOf.add(Data(26.817037237801387,112.58352946632557,238.18176364821437 ,10.172699))
mutableListOf.add(Data(26.816991758745935,112.58344394169914,238.81318731622537 ,9.476438))
mutableListOf.add(Data(26.81695008311907,112.58336549123571,238.35449913232398 ,8.670373))
mutableListOf.add(Data(26.816911519966908,112.58329384142816,238.00583163557317 ,7.9418206))
mutableListOf.add(Data(26.816875769929663,112.58322842149074,237.9069304963914 ,7.250271))
mutableListOf.add(Data(26.816842700317792,112.58316889814716,237.12501044020834 ,6.608085))
mutableListOf.add(Data(26.816812547895015,112.58311627111057,236.47424367646786 ,5.8385525))
mutableListOf.add(Data(26.81678497120257,112.58306956006162,235.61325735045273 ,5.1207457))
mutableListOf.add(Data(26.816762161812772,112.58303220941076,235.7694501163926 ,3.907349))
mutableListOf.add(Data(26.816744452403828,112.58300245495224,236.2325232817411 ,3.0969348))
mutableListOf.add(Data(26.816731497575027,112.58298000037128,236.6114211957584 ,2.2574704 ))
mutableListOf.add(Data(26.816722462577506,112.58296434850722,236.4161051062527 ,1.5331981 ))
mutableListOf.add(Data(26.816716398581754,112.5829537450492,236.21764712972882 ,1.0040071 ))
mutableListOf.add(Data(26.816712164282283,112.5829466272515,236.12834923652008 ,0.737751 ))
mutableListOf.add(Data(26.816193817151735,112.58251966330332,54.59367562577165 ,0.018921295))
mutableListOf.add(Data(26.816193817151735,112.58251966330332,54.59367562577165 ,0.018921295))
mutableListOf.add(Data(26.816193817151735,112.58251966330332,54.59367562577165 ,0.018921295))
mutableListOf.add(Data(26.81619396445322,112.58251998494924,54.613592457391405 ,0.027000831))
mutableListOf.add(Data(26.81619407811497,112.58252024223145,54.669067253830235 ,-0.0011194336))
mutableListOf.add(Data(26.816195171832447,112.582522095685,54.64187627074443 ,0.612925))
mutableListOf.add(Data(26.816204331708672,112.58253646642525,53.960872259548296 ,2.6901135))
mutableListOf.add(Data(26.816223192189753,112.58256468184578,51.595331863162755 ,4.345004))
mutableListOf.add(Data(26.816251222259027,112.5826029300781,49.506195562109326 ,5.6220856))
mutableListOf.add(Data(26.816287694595495,112.58265190405298,50.01768110829488 ,7.31063))
mutableListOf.add(Data(26.816332750019175,112.58271403398732,50.59955858406664 ,8.614218))
mutableListOf.forEach {
val wgS84ToGCJ02 = CoordinateTransform.GCJ02ToWGS84(it.a2,it.a1)
println("{\"localTime\":1694072487989,\"class\":\"MoGoAdasListenerImpl\",\"msg\":{\"GnssInfo\":{\"longitude\": ${wgS84ToGCJ02[0]},\"latitude\": ${wgS84ToGCJ02[1]},\"altitude\": 26.97,\"heading\": ${it.heading},\"acceleration\": 0.33836419161950765,\"yawRate\": 0.00300991842921123,\"gnssSpeed\": ${it.speed},\"vehicleSpeed\": 15.375,\"satelliteTime\": 1.69407248798E9,\"systemTime\": 1.6940724879893079E9},\"traceInfo\":{\"endPoint\":true,\"linkChainLog\":1,\"linkCode\":1,\"methodName\":\"onGnssInfo\",\"nodeAliasCode\":\"CHAIN_CODE_ADAS_CAR_LOC\",\"paramIndexes\":[0,1],\"parentNodeAliasCode\":\"\",\"recordDataChange\":true,\"spanId\":null,\"traceId\":null},\"Header\":{\"msgID\": 160606,\"msgType\": \"MsgTypeGnssInfo\",\"timestamp\": 1.6940724879929435E9,\"sourceTimestamp\": 1.69407248798E9}}}")
}
}
data class Data(val a1:Double,val a2:Double,val heading:Double,val speed:Double)
}

View File

@@ -1,16 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/clHmiContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.mogo.eagle.core.function.view.MapBizView
android:id="@+id/mapBizView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.mogo.eagle.core.function.hmi.ui.setting.ToggleDebugViewTrigger
android:layout_width="@dimen/dp_400"
android:layout_height="@dimen/dp_100"
@@ -19,23 +13,6 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<!--刹车、转向-->
<com.mogo.eagle.core.function.hmi.ui.vehicle.SteeringBrakeView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--V2X预警红色边框-->
<com.mogo.eagle.core.function.hmi.ui.widget.V2XWarningView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
@@ -81,169 +58,6 @@
app:layout_constraintLeft_toLeftOf="@+id/viewSpeedChart"
app:layout_constraintTop_toBottomOf="@+id/viewSpeedChart" />
<!--超视距-->
<com.mogo.eagle.core.function.hmi.ui.widget.CameraView
android:id="@+id/ivCameraIcon"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_marginTop="45dp"
android:layout_marginEnd="40dp"
app:layout_constraintRight_toLeftOf="@id/viewTrafficLightVr"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible" />
<!--限速牌子-->
<com.mogo.eagle.core.function.hmi.ui.widget.LimitingVelocityView
android:id="@+id/viewLimitingVelocity"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:layout_marginEnd="40dp"
android:elevation="@dimen/dp_10"
android:gravity="center"
android:text="60"
android:textColor="#FFFFFF"
android:textSize="60dp"
android:visibility="gone"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ivCameraIcon"
tools:visibility="visible" />
<!--红绿灯-->
<com.mogo.eagle.core.function.hmi.ui.widget.SingleTrafficLightView
android:id="@+id/viewTrafficLightVr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/hmi_traffic_light_layout_margin_top"
android:layout_marginEnd="@dimen/hmi_traffic_light_layout_margin_right"
android:visibility="gone"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--地图视角切换-->
<com.mogo.eagle.core.function.hmi.ui.widget.PerspectiveSwitchView
android:id="@+id/viewPerspectiveSwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="50dp"
android:layout_marginBottom="40dp"
android:elevation="@dimen/dp_10"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<!--工具箱-->
<com.mogo.eagle.core.function.hmi.ui.tools.ToolsImageView
android:id="@+id/ivToolsView"
android:layout_width="@dimen/module_hmi_check_size"
android:layout_height="@dimen/module_hmi_check_size"
android:layout_marginStart="25dp"
android:layout_marginBottom="40dp"
android:contentDescription="工具箱"
android:elevation="@dimen/dp_10"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/viewPerspectiveSwitch"
app:layout_goneMarginStart="50dp" />
<!--问题反馈-->
<ImageView
android:id="@+id/ivBadCaseTools"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_marginStart="50dp"
android:layout_marginBottom="40dp"
android:contentDescription="BadCase"
android:src="@drawable/bad_case_selector"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/ivToolsView" />
<ImageView
android:id="@+id/ivAiCollectTools"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_marginStart="50dp"
android:layout_marginBottom="40dp"
android:contentDescription="数据采集"
android:src="@drawable/ai_collect_selector"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/ivBadCaseTools" />
<View
android:id="@+id/viewUpgradeTips"
android:layout_width="22dp"
android:layout_height="22dp"
android:background="@drawable/version_upgrade_tips_background"
android:translationZ="30dp"
android:visibility="gone"
app:layout_constraintCircle="@id/ivToolsView"
app:layout_constraintCircleAngle="45"
app:layout_constraintCircleRadius="60dp"
tools:ignore="MissingConstraints" />
<!--消息盒子司机端选择入口-->
<CheckBox
android:id="@+id/cbMsgBoxDriver"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_marginTop="15dp"
android:layout_marginEnd="25dp"
android:background="@drawable/selector_msg_box"
android:button="@null"
android:visibility="visible"
app:layout_constraintRight_toLeftOf="@id/viewLimitingVelocity"
app:layout_constraintTop_toBottomOf="@+id/ivCameraIcon" />
<!--司机端消息提示-->
<View
android:id="@+id/MsgBoxTipView"
android:layout_width="8dp"
android:layout_height="8dp"
android:background="@drawable/version_upgrade_tips_background"
android:translationZ="30dp"
android:visibility="gone"
app:layout_constraintCircle="@id/cbMsgBoxDriver"
app:layout_constraintCircleAngle="40"
app:layout_constraintCircleRadius="32dp"
tools:ignore="MissingConstraints" />
<com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxListView
android:id="@+id/viewDriverMsgBoxList"
android:layout_width="864px"
android:layout_height="746px"
android:layout_marginEnd="40dp"
android:visibility="gone"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/cbMsgBoxDriver"
tools:visibility="gone" />
<com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxBubbleView
android:id="@+id/viewDriverMsgBoxBubble"
android:layout_width="864px"
android:layout_height="wrap_content"
android:visibility="visible"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/cbMsgBoxDriver"
tools:visibility="gone" />
<!--左右转向灯-->
<com.mogo.eagle.core.function.hmi.ui.vehicle.TurnLightViewStatus
android:id="@+id/turnLightView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="42dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--刹车ui-->
<com.mogo.eagle.core.function.hmi.ui.vehicle.BrakeViewStatus
android:id="@+id/brakeView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="42dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--pnc行为决策-->
<com.mogo.eagle.core.function.hmi.ui.vehicle.PncActionsView
android:layout_width="wrap_content"

View File

@@ -10,7 +10,6 @@ import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager;
import com.mogo.eagle.core.function.call.setting.CallerMoGoUiSettingManager;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.och.bus.constant.BusConst;

View File

@@ -28,8 +28,6 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager;
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager;
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager;
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager;
import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager;
import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxBubbleView;
import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxButtonView;
import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxListView;
@@ -140,21 +138,21 @@ public abstract class BaseBusTabFragment<V extends IView, P extends Presenter<V>
mSwitchMapModeLayout.setOnClickListener(new OnPreventFastClickListener() {
@Override
public void onClickImpl(View v) {
IMogoMapUIController controller = CallerMapUIServiceManager.INSTANCE.getMapUIController();
if (controller != null) {
//切换地图的远近视图
if (controller.getCurrentMapVisualAngle().isLongSight()) {
//Objects.requireNonNull(CallerMapUIServiceManager.INSTANCE.getMapUIController()).setLockMode(true);
controller.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_medium);
} else if (controller.getCurrentMapVisualAngle().isMediumSight()) {
//Objects.requireNonNull(CallerMapUIServiceManager.INSTANCE.getMapUIController()).setLockMode(false);
controller.changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null);
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_long);
} else {
controller.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_medium);
if(mapBizView != null){
IMogoMapUIController uiController = mapBizView.getUI();
if(uiController != null){
if (uiController.getCurrentMapVisualAngle().isLongSight()) {
uiController.setLockMode(true);
uiController.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_medium);
} else if (uiController.getCurrentMapVisualAngle().isMediumSight()) {
uiController.setLockMode(false);
uiController.changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null);
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_long);
} else {
uiController.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_medium);
}
}
}
}
@@ -263,14 +261,16 @@ public abstract class BaseBusTabFragment<V extends IView, P extends Presenter<V>
protected abstract void onArriveStation();
private void updateSwitchMapIcon() {
IMogoMapUIController controller = CallerMapUIServiceManager.INSTANCE.getMapUIController();
if (controller != null) {
if (controller.getCurrentMapVisualAngle().isLongSight()) {
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_long);
} else if (controller.getCurrentMapVisualAngle().isMediumSight()) {
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_medium);
} else {
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_medium);
if(mapBizView != null){
IMogoMapUIController uiController = mapBizView.getUI();
if(uiController != null){
if (uiController.getCurrentMapVisualAngle().isLongSight()) {
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_long);
} else if (uiController.getCurrentMapVisualAngle().isMediumSight()) {
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_medium);
} else {
mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_medium);
}
}
}
}
@@ -560,7 +560,9 @@ public abstract class BaseBusTabFragment<V extends IView, P extends Presenter<V>
@Override
public void onDestroy() {
super.onDestroy();
smallMapView.onDestroy();
if(smallMapView != null){
smallMapView.onDestroy();
}
MogoMapListenerHandler.Companion.getMogoMapListenerHandler().unregisterHostMapListener(TAG);
}

View File

@@ -1,6 +1,8 @@
package com.mogo.och.bus.fragment;
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS;
import static com.mogo.map.MogoMap.DEFAULT;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@@ -15,9 +17,7 @@ import androidx.annotation.Nullable;
import com.alibaba.android.arouter.launcher.ARouter;
import com.mogo.cloud.passport.MoGoAiCloudClientConfig;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.eagle.core.data.config.FunctionBuildConfig;
import com.mogo.eagle.core.data.map.CenterLine;
import com.mogo.eagle.core.data.temp.EventLogout;
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener;
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager;
@@ -28,7 +28,6 @@ import com.mogo.eagle.core.utilcode.util.ToastUtils;
import com.mogo.map.overlay.IMoGoOverlayManager;
import com.mogo.map.overlay.core.Level;
import com.mogo.map.overlay.point.Point;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.och.bus.R;
import com.mogo.och.data.bean.BusStationBean;
import com.mogo.och.bus.constant.BusConst;
@@ -493,24 +492,13 @@ public class BusFragment extends BaseBusTabFragment<BusFragment, BusPresenter>
.anchor(0.5f, 0.5f)
.set3DMode(true)
.isUseGps(true)
.controlAngle(true)
.controlAngle(false)
.icon3DRes(resourceId)
.latitude(lat)
.longitude(longi);
IMogoMapUIController mapUIController = CallerMapUIServiceManager.INSTANCE.getMapUIController();
if (mapUIController != null) {
CenterLine centerLine = mapUIController.getCenterLineInfo(
longi,lat,-1);
if (null != centerLine) { // 有可能鹰眼map为空没有角度。判空使用后可能造成maker角度跟道路角度不一致 地图未初始化会返回空
Double angle = centerLine.getAngle();
if (angle != null) {
builder.rotate(angle.floatValue());
}
}
}
IMoGoOverlayManager overlayManager = CallerMapUIServiceManager.INSTANCE.getOverlayManager();
if (overlayManager != null) {
overlayManager.showOrUpdatePoint(builder.build());
overlayManager.showOrUpdatePoint(builder.build(),DEFAULT);
}
};

View File

@@ -382,6 +382,11 @@ public class OrderModel {
};
private final OchAdasStartFailureCallback mAdasStartFailureListener = new OchAdasStartFailureCallback() {
@Override
public void brakeStatusChanged(boolean isBrakeAvailable) {
}
@Override
public void onStartAutopilotFailure(@NotNull String startFailedCode, @NonNull String startFailedMessage) {
BusAnalyticsManager.getInstance().triggerStartAutopilotFailureEventByAdas(startFailedCode, startFailedMessage);

View File

@@ -8,6 +8,8 @@
<com.mogo.eagle.core.function.view.MapBizView
android:id="@+id/mapBizView"
app:isWeatherEnable="false"
app:locationIcon3DRes="@raw/m2"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

View File

@@ -119,6 +119,8 @@ public class BusPassengerModel {
private int mPreRouteIndex = 0;
private int mWipePreIndex = 0;
private volatile boolean isGoingToNextStation = false;
private static final int MSG_QUERY_BUS_P_STATION = 1001;
private final Handler handler = new Handler(new Handler.Callback() {
@Override
@@ -291,6 +293,8 @@ public class BusPassengerModel {
for (int i = 0; i< stations.size(); i++){
BusStationBean station = stations.get(i);
if (station.getDrivingStatus() == STATION_STATUS_STOPPED && station.isLeaving() && i+1 < stations.size()){
Logger.d(M_BUS_P + TAG, "order = station= leave");
isGoingToNextStation = true;
mRouteLineInfoCallback.updateStationsInfo(stations,i+1,false);
if(mNextStationIndex != i+1){
mTwoStationsRouts.clear();
@@ -302,6 +306,9 @@ public class BusPassengerModel {
if (i == 0){
startOrStopRouteAndWipe(false);
}
isGoingToNextStation = false;
Logger.d(M_BUS_P + TAG, "order = station= arrive");
mPreRouteIndex = 0;
startOrStopCalculateRouteInfo(false);
mRouteLineInfoCallback.updateStationsInfo(stations,i,true);
@@ -452,8 +459,6 @@ public class BusPassengerModel {
}
};
private volatile int mPreAutoStatus = -1;
private final IMoGoAutopilotStatusListener mGoAutopilotStatusListener = new IMoGoAutopilotStatusListener(){
@Override
public void onSystemStatus(@NonNull SsmInfo.SsmStatusInf statusInf) {
@@ -492,27 +497,29 @@ public class BusPassengerModel {
int state = autopilotStatusInfo.getState();
if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) {
//2022.7.20 自动驾驶更换成带档位的
if(state != mPreAutoStatus && null != routesResult){
if(null != routesResult){
CallerAutoPilotControlManager.INSTANCE.getGlobalPath();
}
if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotRunning();
} else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) {
if(state != mPreAutoStatus){
mTwoStationsRouts.clear();
} else{
if (FunctionBuildConfig.isDemoMode &&
mNextStationIndex>= 0 && mNextStationIndex <= mStations.size() - 1
&& isGoingToNextStation){
Logger.d(M_BUS_P + TAG, "FunctionBuildConfig.isDemoMode is true");
return;
}
if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotEnable();
} else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) {
if(state != mPreAutoStatus){
if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) {
mTwoStationsRouts.clear();
}
if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotDisable();
}else if (state == IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING){
if(state != mPreAutoStatus){
if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotEnable();
} else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) {
mTwoStationsRouts.clear();
if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotDisable();
}else if (state == IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING){
mTwoStationsRouts.clear();
if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotRunning();
}
if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotRunning();
}
mPreAutoStatus = state;
}
@Override

View File

@@ -12,7 +12,6 @@ import kotlinx.android.synthetic.jinlvvan.p_bus_view_blue_tooth.view.*
/**
* 魔戒蓝牙控件
* 放置于StatusBar右侧位置
* todo arrow
*/
class BusPBlueToothView @JvmOverloads constructor(
context: Context,

View File

@@ -389,8 +389,6 @@ public class BusPassengerRouteFragment extends
public void AutopilotStatusChanged(int status) {
if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == status) {
mAutopilotIv.setImageResource(R.drawable.auto_open);
} else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE == status){
mAutopilotIv.setImageResource(R.drawable.auto_close);
} else {
mAutopilotIv.setImageResource(R.drawable.auto_close);
}

View File

@@ -9,6 +9,9 @@
android:id="@+id/mapBizView"
android:layout_width="1810dp"
android:layout_height="match_parent"
app:styleMode="MAP_STYLE_DAY_VR"
app:isWeatherEnable="false"
app:locationIcon3DRes="@raw/m2"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>

View File

@@ -54,7 +54,6 @@ class MogoOCHBusPassenger : IMogoOCH, IMogoStatusChangedListener {
*/
private fun stepIntoVrMode() {
d(SceneConstant.M_TAXI_P + TAG, "进入vr模式")
getMapUIController()?.stepInVrMode(true) // 白天模式
stepInDayMode() //白天模式 状态栏字体颜色变黑
}

View File

@@ -7,6 +7,7 @@ import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getOverla
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.map.overlay.core.Level
import com.mogo.map.overlay.point.Point
import com.mogo.map.MapDataWrapper
import com.mogo.och.bus.passenger.R
import com.mogo.och.bus.passenger.constant.M2Const.Companion.TYPE_MARKER_M2_LINE
import com.mogo.och.bus.passenger.presenter.PM2ADASPresenter
@@ -80,8 +81,10 @@ class PM2HPMapFragment :
) {
//开启线程执行起终点marker设置
val setMapMarkerRunnable = Runnable {
d("setMapMaker= " + Thread.currentThread().name,
uuid + "=latitude=" + station[1] + ",longitude=" + station[0])
d(
"setMapMaker= " + Thread.currentThread().name,
uuid + "=latitude=" + station[1] + ",longitude=" + station[0]
)
val builder = Point.Options.Builder(
TYPE_MARKER_M2_LINE,
@@ -95,16 +98,12 @@ class PM2HPMapFragment :
.icon3DRes(R.raw.star_marker)
.longitude(station[0])
.latitude(station[1])
val mapUIController = getMapUIController()
if (mapUIController != null) {
val centerLine = mapUIController.getCenterLineInfo(
station[0], station[1], -1f
)
if (null != centerLine) { // 有可能鹰眼map为空没有角度。判空使用后可能造成maker角度跟道路角度不一致 地图未初始化会返回空
val angle = centerLine.angle
if (angle != null) {
builder.rotate(angle.toFloat())
}
MapDataWrapper.getCenterLineInfo(
station[0], station[1], -1f
) {
// 有可能鹰眼map为空没有角度。判空使用后可能造成maker角度跟道路角度不一致 地图未初始化会返回空
it?.let{
builder.rotate(it.angle.toFloat())
}
}
val overlayManager = getOverlayManager()

View File

@@ -12,7 +12,6 @@ import kotlinx.android.synthetic.m2.p_m2_view_blue_tooth.view.*
/**
* 魔戒蓝牙控件
* 放置于StatusBar右侧位置
* todo arrow
*/
class M2BlueToothView @JvmOverloads constructor(
context: Context,

View File

@@ -5,9 +5,13 @@
android:layout_height="match_parent">
<!-- 高精地图 -->
<com.mogo.eagle.core.function.view.MapBizView
android:id="@+id/mapBizView"
app:styleMode="MAP_STYLE_DAY_VR"
app:carPosition="-0.5"
app:default_perspective="MAP_STYLE_VR_ERHAI_B2"
app:isWeatherEnable="false"
app:locationIcon3DRes="@raw/m2"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

View File

@@ -3,7 +3,7 @@ package com.mogo.och.sweepercloud.callback
import chassis.ChassisStatesOuterClass
import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean
import com.mogo.och.sweepercloud.database.bean.WeltDataBean
import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask
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
@@ -22,7 +22,7 @@ interface ISweeperCloudTaskCallback {
/**
* 接取云端任务/正在执行中任务信息回调
*/
fun onSweeperCloudTask(messageType: SweeperCloudTask.MessageType,taskInfo: SweeperTask.TaskInfo?)
fun onSweeperCloudTask(messageType: AiCloudTask.MessageType, taskInfo: SweeperTask.TaskInfo?)
/**
* 云端下发子任务请求pad确认
@@ -42,7 +42,7 @@ interface ISweeperCloudTaskCallback {
/**
* 挂起/恢复
*/
fun onSweeperCloudTaskSuspendResume(messageType: SweeperCloudTask.MessageType,taskId:String,subTaskId:String,code:Code)
fun onSweeperCloudTaskSuspendResume(messageType: AiCloudTask.MessageType,taskId:String,subTaskId:String,code:Code)
/**
* pad请求云端进入自驾

View File

@@ -1,5 +1,7 @@
package com.mogo.och.sweepercloud.fragment;
import static com.mogo.map.MogoMap.DEFAULT;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@@ -48,12 +50,11 @@ import com.mogo.och.sweepercloud.util.AutopilotModeConfigManager;
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils;
import com.mogo.och.sweepercloud.view.SweeperTrafficDataView;
import com.mogo.och.sweepercloud.view.WeltSmallMapView;
import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask;
import com.zhjt.mogo.adas.data.AiCloudTask;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Random;
import mogo.telematics.pad.MessagePad;
@@ -183,7 +184,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
);
// 模拟 云端发送任务
findViewById(R.id.btnSendTask).setOnClickListener(view -> {
SweeperCloudTaskUtils.mockSendCloudTaskInfo(SweeperCloudTask.MessageType.CloudPushTask);
SweeperCloudTaskUtils.mockSendCloudTaskInfo(AiCloudTask.MessageType.CloudPushTask);
UiThreadHandler.postDelayed(() -> {
debugEndSubTask();
}, 5000);
@@ -236,7 +237,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
}
private void updateSwitchMapIcon() {
IMogoMapUIController controller = CallerMapUIServiceManager.INSTANCE.getMapUIController();
IMogoMapUIController controller = CallerMapUIServiceManager.INSTANCE.getMapUIController(DEFAULT);
if (controller != null) {
if (controller.getCurrentMapVisualAngle().isLongSight()) {
mSwitchMapModeImage.setImageResource(R.drawable.sweeper_switch_map_big_selector);
@@ -412,7 +413,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
mSwitchMapModeImage.setOnClickListener(new OnPreventFastClickListener() {
@Override
public void onClickImpl(View v) {
IMogoMapUIController controller = CallerMapUIServiceManager.INSTANCE.getMapUIController();
IMogoMapUIController controller = CallerMapUIServiceManager.INSTANCE.getMapUIController(DEFAULT);
if (controller != null) {
//切换地图的远近视图
if (controller.getCurrentMapVisualAngle().isLongSight()) {

View File

@@ -34,7 +34,7 @@ import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createSweeperTaskRes
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.zhjt.mogo.adas.data.sweeper.SweeperCloudTask
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
import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon.TaskStatus
@@ -44,9 +44,8 @@ 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.sweeper_cl_work_mode
import kotlinx.android.synthetic.main.fragment_och_sweeper.sweeper_current_task_view
import kotlinx.android.synthetic.main.sweeper_no_data_common_view.noTaskDataView
import kotlinx.android.synthetic.main.fragment_och_sweeper.*
import kotlinx.android.synthetic.main.sweeper_no_data_common_view.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -148,7 +147,8 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
getCurrentTaskView().updateStartAutoPilotBtnByAutoPilotState(
state == STATUS_AUTOPILOT_ENABLE,
mCurrentRunningSubTaskInfo?.taskModel == TaskModel.AUTO,
mCurrentRunningSubTaskInfo?.taskStatus == TaskStatus.RUNNING)
mCurrentRunningSubTaskInfo?.taskStatus == TaskStatus.RUNNING
)
}
fun onSweeperFutianCleanSystemState(cleanSystemState: ChassisStatesOuterClass.SweeperFuTianTaskSystemStates) {
@@ -204,7 +204,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
* 设置云端任务信息
*/
fun onSweeperCloudTask(
messageType: SweeperCloudTask.MessageType,
messageType: AiCloudTask.MessageType,
taskInfo: SweeperTask.TaskInfo?
) {
this.mTaskInfo = taskInfo
@@ -215,7 +215,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
return
}
//主动拉取云端正在执行的任务,有则直接在任务列表展示
if (messageType == SweeperCloudTask.MessageType.PadSendGetTaskReq) {
if (messageType == AiCloudTask.MessageType.PadSendGetTaskReq) {
getCurrentTaskView().setData(taskInfo, getCurrentRunningSubTaskPosition())
setShowCurrentTaskPanelView(true)
addTaskData()
@@ -293,7 +293,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
if (subTaskList[index].subTaskId == subTaskId) {
val subBuilder = subTaskList[index].toBuilder()
subBuilder.taskStatus = subTaskStatus
if (subTaskStatus == SweeperCommon.TaskStatus.RUNNING) {
if (subTaskStatus == TaskStatus.RUNNING) {
mCurrentRunningSubTaskInfo = subBuilder.build()
//更新当前正在执行的任务状态
updateCurrentSubTaskInfo(index + 1)
@@ -303,13 +303,13 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
} else {
mCurrentRunningSubTaskInfo = null
}
if (subTaskStatus == SweeperCommon.TaskStatus.SUSPENDED) {
if (subTaskStatus == TaskStatus.SUSPENDED) {
mCurrentSuspendSubTaskInfo = subBuilder.build()
} else {
mCurrentSuspendSubTaskInfo = null
}
//判断是否结束子任务
if (subTaskStatus == SweeperCommon.TaskStatus.FINISHED) {
if (subTaskStatus == TaskStatus.FINISHED) {
//已完成的计入任务进度,未完成的不计入
ToastUtils.showLong("任务完成")
showNotice("任务完成")
@@ -317,8 +317,8 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
removeHDMapMarkerBySubTask(subTaskList[index])
}
// 其他异常结束时也需要remove marker
if (subTaskStatus == SweeperCommon.TaskStatus.ABNORMAL ||
subTaskStatus == SweeperCommon.TaskStatus.CANCEL
if (subTaskStatus == TaskStatus.ABNORMAL ||
subTaskStatus == TaskStatus.CANCEL
) {
removeHDMapMarkerBySubTask(subTaskList[index])
}
@@ -384,7 +384,10 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
// mLoadingDialog.showLoading()
// //ToastUtils.showLong("确认")
// 发送接收到信息的ACK回执
mPresenter?.sendSweeperStopTaskResp(taskId, SweeperTaskStop.StopTaskCode.RECEIVED)
mPresenter?.sendSweeperStopTaskResp(
taskId,
SweeperTaskStop.StopTaskCode.RECEIVED
)
}
override fun onRefuseOrEnd() {
@@ -398,7 +401,10 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
// mLoadingDialog.showLoading()
// //ToastUtils.showLong("倒计时")
// 发送接收到信息的ACK回执
mPresenter?.sendSweeperStopTaskResp(taskId, SweeperTaskStop.StopTaskCode.RECEIVED)
mPresenter?.sendSweeperStopTaskResp(
taskId,
SweeperTaskStop.StopTaskCode.RECEIVED
)
}
override fun onNext() {
@@ -468,7 +474,11 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
/**
* 云端同步大任务状态
*/
fun onSweeperCloudBigTaskStatus(taskId: String, bigTaskStatus: SweeperCommon.TaskStatus, isPop: Boolean) {
fun onSweeperCloudBigTaskStatus(
taskId: String,
bigTaskStatus: SweeperCommon.TaskStatus,
isPop: Boolean
) {
//隐藏loading
mLoadingDialog.hideLoading()
mTaskInfo?.let {
@@ -477,16 +487,17 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
return
}
//大任务处于取消状态/异常结束/正常结束 时都代表大任务结束了,任务列表切换为无任务列表状态
if (bigTaskStatus == SweeperCommon.TaskStatus.CANCEL
|| bigTaskStatus == SweeperCommon.TaskStatus.ABNORMAL
|| bigTaskStatus == SweeperCommon.TaskStatus.FINISHED
if (bigTaskStatus == TaskStatus.CANCEL
|| bigTaskStatus == TaskStatus.ABNORMAL
|| bigTaskStatus == TaskStatus.FINISHED
) {
mPresenter?.isHasTaskInfo(false)
if (isPop) {
mDialog = if (bigTaskStatus == SweeperCommon.TaskStatus.CANCEL
|| bigTaskStatus == SweeperCommon.TaskStatus.ABNORMAL){
sweeperCloudTaskExceptionEndDialog(bigTaskStatus == SweeperCommon.TaskStatus.CANCEL)}
else
mDialog = if (bigTaskStatus == TaskStatus.CANCEL
|| bigTaskStatus == TaskStatus.ABNORMAL
) {
sweeperCloudTaskExceptionEndDialog(bigTaskStatus == TaskStatus.CANCEL)
} else
sweeperCloudTaskNormalEndDialog()
mDialog?.show()
}
@@ -495,29 +506,29 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
// 大任务这里也判断移除HD Marker, 双重判断
removeHDMapMarkerBySubTask(mCurrentRunningSubTaskInfo)
resetTaskInfoPanel()
} else if (bigTaskStatus == SweeperCommon.TaskStatus.SUSPENDED) {// 暂停
} else if (bigTaskStatus == TaskStatus.SUSPENDED) {// 暂停
showNotice("任务已暂停")
ToastUtils.showLong("任务已暂停")
//更新任务列表中大任务状态
val builder = it.toBuilder()
builder.taskStatus = SweeperCommon.TaskStatus.SUSPENDED
builder.taskStatus = TaskStatus.SUSPENDED
mTaskInfo = builder.build()
getCurrentTaskView().setData(mTaskInfo, getCurrentRunningSubTaskPosition())
} else if (it.taskStatus == SweeperCommon.TaskStatus.SUSPENDED
&& bigTaskStatus == SweeperCommon.TaskStatus.RUNNING
} else if (it.taskStatus == TaskStatus.SUSPENDED
&& bigTaskStatus == TaskStatus.RUNNING
) { //恢复
showNotice("任务已恢复")
ToastUtils.showLong("任务已恢复")
//更新任务列表中大任务状态
val builder = it.toBuilder()
builder.taskStatus = SweeperCommon.TaskStatus.RUNNING
builder.taskStatus = TaskStatus.RUNNING
mTaskInfo = builder.build()
getCurrentTaskView().setData(mTaskInfo, getCurrentRunningSubTaskPosition())
} else if (bigTaskStatus == SweeperCommon.TaskStatus.RUNNING) { //首次开始运行的时候,非恢复后的运行
} else if (bigTaskStatus == TaskStatus.RUNNING) { //首次开始运行的时候,非恢复后的运行
//更新任务列表中大任务状态
val builder = it.toBuilder()
builder.taskStatus = SweeperCommon.TaskStatus.RUNNING
builder.taskStatus = TaskStatus.RUNNING
mTaskInfo = builder.build()
getCurrentTaskView().setData(mTaskInfo, getCurrentRunningSubTaskPosition())
}
@@ -637,7 +648,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
mSubMutableList = mTaskInfo?.subListList
mSubMutableList?.apply {
for (index in 0 until size) {
if (get(index).taskStatus == SweeperCommon.TaskStatus.RUNNING) {
if (get(index).taskStatus == TaskStatus.RUNNING) {
mCurrentRunningSubTaskInfo = get(index)
updateCurrentSubTaskInfo(index + 1)
return index
@@ -691,7 +702,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
if (mTaskInfo?.taskId != taskId) return
val subInfo = getSubTaskInfoBySubId(subTaskId)
subInfo?.let {
updateSubTaskInfo(taskId, subTaskId, SweeperCommon.TaskStatus.RUNNING)
updateSubTaskInfo(taskId, subTaskId, TaskStatus.RUNNING)
if (isPop) {
showSubTaskConfirmDialog(taskId, subTaskId, it)
@@ -858,7 +869,10 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
/**
* 大任务恢复弹框
*/
private fun sweeperCloudTaskResumeDialog(contentStr: String, taskId: String): SweeperCloudDialog? {
private fun sweeperCloudTaskResumeDialog(
contentStr: String,
taskId: String
): SweeperCloudDialog? {
return createSweeperTaskResumeDialog(context, object : SweeperCloudDialogClickListener {
override fun onConfirm() {
// 发送接收到信息的ACK回执
@@ -901,8 +915,18 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
val hdMarkerIdStart = "marker_sweeper_subtask_${subTask.subTaskId}_start"
val hdMarkerIdEnd = "marker_sweeper_subtask_${subTask.subTaskId}_end"
val setStartMarkerRunnable = createSetHDMapMakerRunnable(hdMarkerIdStart, startPoint.wgsLongitude, startPoint.wgsLatitude, true)
val setEndMarkerRunnable = createSetHDMapMakerRunnable(hdMarkerIdEnd, endPoint.wgsLongitude, endPoint.wgsLatitude, false)
val setStartMarkerRunnable = createSetHDMapMakerRunnable(
hdMarkerIdStart,
startPoint.wgsLongitude,
startPoint.wgsLatitude,
true
)
val setEndMarkerRunnable = createSetHDMapMakerRunnable(
hdMarkerIdEnd,
endPoint.wgsLongitude,
endPoint.wgsLatitude,
false
)
val removeMarkerRunnable = createRemoveHDMapMakerRunnable()
val addSubTaskHDMarkRunnable = Runnable {
@@ -930,11 +954,11 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
longitude: Double,
latitude: Double,
isStartMarker: Boolean
) : Runnable {
): Runnable {
//开启线程执行起终点marker设置
val setMapMarkerRunnable = Runnable {
CallerLogger.d(
SceneConstant.M_SWEEPER + "-" +TAG + "-setMapMaker",
SceneConstant.M_SWEEPER + "-" + TAG + "-setMapMaker",
"threadName=${Thread.currentThread().name}, uuid=$uuid, latitude=$latitude, longitude=$longitude"
)
@@ -944,20 +968,10 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
.anchor(0.5f, 0.5f)
.set3DMode(true)
.isUseGps(true)
.controlAngle(true)
.controlAngle(false)
.icon3DRes(if (isStartMarker) R.raw.star_marker else R.raw.end_marker)
.longitude(longitude)
.latitude(latitude)
val mapUIController = CallerMapUIServiceManager.getMapUIController()
if (mapUIController != null) {
val centerLine = mapUIController.getCenterLineInfo(longitude, latitude, -1f)
if (null != centerLine) { // 有可能鹰眼map为空没有角度。判空使用后可能造成maker角度跟道路角度不一致 地图未初始化会返回空
val angle = centerLine.angle
if (angle != null) {
builder.rotate(angle.toFloat())
}
}
}
val overlayManager = CallerMapUIServiceManager.getOverlayManager()
overlayManager?.showOrUpdatePoint(builder.build())
}
@@ -967,11 +981,11 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
/**
* 移除高精地图里的Marker Runnable
*/
private fun createRemoveHDMapMakerRunnable() : Runnable{
private fun createRemoveHDMapMakerRunnable(): Runnable {
//开启线程移除起终点marker设置
val removeMapMarkerRunnable = Runnable {
CallerLogger.d(
SceneConstant.M_SWEEPER + "-" +TAG + "-RemoveMapMaker",
SceneConstant.M_SWEEPER + "-" + TAG + "-RemoveMapMaker",
"threadName=${Thread.currentThread().name}"
)
val overlayManager = CallerMapUIServiceManager.getOverlayManager()

View File

@@ -39,7 +39,7 @@ import com.mogo.och.sweepercloud.constant.SweeperConst;
import com.mogo.och.sweepercloud.database.MyDataBase;
import com.mogo.och.sweepercloud.database.bean.WeltDataBean;
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils;
import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask;
import com.zhjt.mogo.adas.data.AiCloudTask;
import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable;
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask;
import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus;
@@ -332,7 +332,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
}
@Override
public void onSweeperFutianCloudTask(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime,
public void onSweeperFutianCloudTask(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime,
SweeperTask.TaskInfo taskInfo) {
CallerLogger.d(M_SWEEPER + TAG,
@@ -344,7 +344,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
}
@Override
public void onSweeperFutianCloudTaskConfirm(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime,
public void onSweeperFutianCloudTaskConfirm(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime,
SweeperTaskConfirm.TaskConfirm taskConfirm) {
CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime" + sysTime + " reqNo" + reqNo + " " +
@@ -356,7 +356,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
}
@Override
public void onSweeperFutianCloudTaskStatus(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime,
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));
@@ -367,7 +367,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
}
@Override
public void onSweeperFutianCloudTaskStop(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime,
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));
@@ -378,7 +378,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
}
@Override
public void onSweeperFutianCloudTaskSuspendResume(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime,
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));
@@ -390,7 +390,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
}
@Override
public void onSweeperFutianCloudBootable(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime,
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));
@@ -401,7 +401,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
}
@Override
public void onSweeperFutianCloudBigTaskStatus(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime,
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));
@@ -412,7 +412,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
}
@Override
public void onSweeperFutianCloudTaskCloudSuspendResume(@NonNull SweeperCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime,
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));
@@ -521,7 +521,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
SweeperTask.GetTaskReq getTaskReq = builder.build();
CallerLogger.d(M_SWEEPER + TAG,
"getCurrentTask:" + printMessage(getTaskReq) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.PadSendGetTaskReq.getNumber());
"getCurrentTask:" + printMessage(getTaskReq) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.PadSendGetTaskReq.getNumber());
getAutoPilotControlManager().sendSweeperGetTaskReq(reqNo, getTaskReq);
}
@@ -534,11 +534,11 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
builder.setTaskId(taskId);
builder.setCode(code);
SweeperTask.StartTaskResp startTaskResp = builder.build();
String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTask.getNumber());
String reqNo = msgTypeAndReqNo.get(AiCloudTask.MessageType.CloudPushTask.getNumber());
getAutoPilotControlManager().sendSweeperStartTaskResp(reqNo, startTaskResp);
CallerLogger.d(M_SWEEPER + TAG,
"sendSweeperStartTaskResp:" + printMessage(startTaskResp) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.CloudPushTask.getNumber());
"sendSweeperStartTaskResp:" + printMessage(startTaskResp) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.CloudPushTask.getNumber());
}
/**
@@ -551,9 +551,9 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
builder.setSubTaskId(subTaskId);
builder.setCode(code);
SweeperTaskConfirm.TaskConfirmResp taskConfirmResp = builder.build();
String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTaskConfirm.getNumber());
String reqNo = msgTypeAndReqNo.get(AiCloudTask.MessageType.CloudPushTaskConfirm.getNumber());
CallerLogger.d(M_SWEEPER + TAG,
"sendSweeperTaskConfirmResp" + printMessage(taskConfirmResp) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.CloudPushTaskConfirm.getNumber());
"sendSweeperTaskConfirmResp" + printMessage(taskConfirmResp) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.CloudPushTaskConfirm.getNumber());
getAutoPilotControlManager().sendSweeperTaskConfirmResp(reqNo, taskConfirmResp);
}
@@ -569,10 +569,10 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
builder.setTaskId(taskId);
builder.setCode(code);
SweeperTaskStop.StopTaskResp stopTaskResp = builder.build();
String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTaskStop.getNumber());
String reqNo = msgTypeAndReqNo.get(AiCloudTask.MessageType.CloudPushTaskStop.getNumber());
CallerLogger.d(M_SWEEPER + TAG,
"sendSweeperStopTaskResp" + printMessage(stopTaskResp) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.CloudPushTaskStop.getNumber());
"sendSweeperStopTaskResp" + printMessage(stopTaskResp) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.CloudPushTaskStop.getNumber());
getAutoPilotControlManager().sendSweeperStopTaskResp(reqNo, stopTaskResp);
}
@@ -593,7 +593,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
String reqNo = SweeperCloudTaskUtils.getRequestId();
CallerLogger.d(M_SWEEPER + TAG,
"sendSweeperAutopilotBootable" + printMessage(isBootable) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.PadSendBootable.getNumber());
"sendSweeperAutopilotBootable" + printMessage(isBootable) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.PadSendBootable.getNumber());
getAutoPilotControlManager().sendSweeperAutopilotBootable(reqNo, isBootable);
//SweeperCloudTaskUtils.mockSendCloudBootable();
}
@@ -609,10 +609,10 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
builder.setTaskId(taskId);
builder.setCode(code);
SweeperTaskCloudSuspendResume.BigTaskActionResp resp = builder.build();
String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTaskSuspendResume.getNumber());
String reqNo = msgTypeAndReqNo.get(AiCloudTask.MessageType.CloudPushTaskSuspendResume.getNumber());
CallerLogger.d(M_SWEEPER + TAG,
"sendSweeperSuspendResumeTaskResp" + printMessage(resp) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.CloudPushTaskSuspendResume);
"sendSweeperSuspendResumeTaskResp" + printMessage(resp) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.CloudPushTaskSuspendResume);
getAutoPilotControlManager().sendSweeperCloudSuspendResumeTaskResp(reqNo, resp);
}

View File

@@ -17,7 +17,7 @@ import com.mogo.och.sweepercloud.callback.ISweeperTaskRouteCallback;
import com.mogo.och.sweepercloud.database.bean.WeltDataBean;
import com.mogo.och.sweepercloud.fragment.SweeperFragment;
import com.mogo.och.sweepercloud.model.SweeperTaskModel;
import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask;
import com.zhjt.mogo.adas.data.AiCloudTask;
import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable;
import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon;
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask;
@@ -190,7 +190,7 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
}
@Override
public void onSweeperCloudTask(@NonNull SweeperCloudTask.MessageType messageType, SweeperTask.TaskInfo taskInfo) {
public void onSweeperCloudTask(@NonNull AiCloudTask.MessageType messageType, SweeperTask.TaskInfo taskInfo) {
ThreadUtils.runOnUiThread(() -> mView.onSweeperCloudTask(messageType, taskInfo));
}
@@ -210,7 +210,7 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
}
@Override
public void onSweeperCloudTaskSuspendResume(@NonNull SweeperCloudTask.MessageType messageType, @NonNull String taskId,
public void onSweeperCloudTaskSuspendResume(@NonNull AiCloudTask.MessageType messageType, @NonNull String taskId,
@NonNull String subTaskId, SweeperCommon.Code code) {
}

View File

@@ -19,7 +19,7 @@ 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.zhjt.mogo.adas.data.sweeper.SweeperCloudTask.MessageType
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
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.Location
@@ -30,7 +30,7 @@ import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus
import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm.TaskConfirm
import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus
import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop
import java.util.UUID
import java.util.*
object SweeperCloudTaskUtils {
const val TAG = "SweeperCloudTaskUtils"
@@ -50,7 +50,7 @@ object SweeperCloudTaskUtils {
* 模拟云控发送任务给pad
*/
@JvmStatic
fun mockSendCloudTaskInfo(messageType: MessageType) {
fun mockSendCloudTaskInfo(messageType: AiCloudTask.MessageType) {
val builder = TaskInfo.newBuilder()
builder.sn = getDriverSn()
builder.taskId = "10"
@@ -66,10 +66,10 @@ object SweeperCloudTaskUtils {
subBuilder0.taskStatus = SweeperCommon.TaskStatus.TO_START
val startLocation0 = Location.newBuilder()
startLocation0.siteName = "自动驾驶子任务起点0"
startLocation0.wgsLongitude =112.56970262448544
startLocation0.wgsLongitude = 112.56970262448544
startLocation0.wgsLatitude = 26.817567832504274
startLocation0.longitude = 112.57493487730413
startLocation0.latitude = 26.81397095451884
startLocation0.latitude = 26.81397095451884
subBuilder0.startLocation = startLocation0.build()
val endLocation0 = Location.newBuilder()
endLocation0.siteName = "自动驾驶子任务终点0"
@@ -156,7 +156,10 @@ object SweeperCloudTaskUtils {
System.currentTimeMillis(),
builder.build()
)
CallerLogger.d(SceneConstant.M_SWEEPER + TAG, "messageType:" + messageType.number + "taskInfo:" + printMessage(builder.build()))
CallerLogger.d(
SceneConstant.M_SWEEPER + TAG,
"messageType:" + messageType.number + "taskInfo:" + printMessage(builder.build())
)
}
/**
@@ -169,7 +172,7 @@ object SweeperCloudTaskUtils {
builder.taskId = "10"
builder.subTaskId = "1"
SweeperTaskModel.getInstance().onSweeperFutianCloudTaskConfirm(
MessageType.CloudPushTaskConfirm, "${System.currentTimeMillis()}",
AiCloudTask.MessageType.CloudPushTaskConfirm, "${System.currentTimeMillis()}",
System.currentTimeMillis(), builder.build()
)
}
@@ -185,7 +188,7 @@ object SweeperCloudTaskUtils {
builder.subTaskId = "1"
builder.taskStatus = SweeperCommon.TaskStatus.RUNNING
SweeperTaskModel.getInstance().onSweeperFutianCloudTaskStatus(
MessageType.CloudPushTaskStatus, "${System.currentTimeMillis()}",
AiCloudTask.MessageType.CloudPushTaskStatus, "${System.currentTimeMillis()}",
System.currentTimeMillis(), builder.build()
)
}
@@ -200,7 +203,7 @@ object SweeperCloudTaskUtils {
builder.taskId = "10"
builder.type = SweeperTaskStop.StopTaskType.ADVANCE
SweeperTaskModel.getInstance().onSweeperFutianCloudTaskStop(
MessageType.CloudPushTaskStop, "${System.currentTimeMillis()}",
AiCloudTask.MessageType.CloudPushTaskStop, "${System.currentTimeMillis()}",
System.currentTimeMillis(), builder.build()
)
}
@@ -216,7 +219,7 @@ object SweeperCloudTaskUtils {
builder.taskStatus = SweeperCommon.TaskStatus.FINISHED
builder.systemTime = System.currentTimeMillis()
SweeperTaskModel.getInstance().onSweeperFutianCloudBigTaskStatus(
MessageType.CloudPushBigTaskStatus, "${System.currentTimeMillis()}",
AiCloudTask.MessageType.CloudPushBigTaskStatus, "${System.currentTimeMillis()}",
System.currentTimeMillis(), builder.build()
)
}
@@ -233,7 +236,7 @@ object SweeperCloudTaskUtils {
builder.code = SweeperCommon.Code.SUCCEED
UiThreadHandler.getsUiHandler().postDelayed({
SweeperTaskModel.getInstance().onSweeperFutianCloudBootable(
MessageType.PadSendBootable, "${System.currentTimeMillis()}",
AiCloudTask.MessageType.PadSendBootable, "${System.currentTimeMillis()}",
System.currentTimeMillis(), builder.build()
)
}, 10000)
@@ -244,28 +247,21 @@ object SweeperCloudTaskUtils {
*/
@JvmStatic
fun mockAddHdMarker(uuid: String, longitude: Double, latitude: Double, isStartMarker: Boolean) {
//开启线程执行起终点marker设置
//开启线程执行起终点marker设置
val setMapMarkerRunnable = Runnable {
val builder =
Point.Options.Builder(SweeperConst.TYPE_MARKER_SWEEPER_SUBTASK_START_END, Level.MAP_MARKER)
Point.Options.Builder(
SweeperConst.TYPE_MARKER_SWEEPER_SUBTASK_START_END,
Level.MAP_MARKER
)
.setId(uuid)
.anchor(0.5f, 0.5f)
.set3DMode(true)
.isUseGps(true)
.controlAngle(true)
.controlAngle(false)
.icon3DRes(if (isStartMarker) R.raw.star_marker else R.raw.end_marker)
.longitude(longitude)
.latitude(latitude)
val mapUIController = CallerMapUIServiceManager.getMapUIController()
if (mapUIController != null) {
val centerLine = mapUIController.getCenterLineInfo(longitude, latitude, -1f)
if (null != centerLine) { // 有可能鹰眼map为空没有角度。判空使用后可能造成maker角度跟道路角度不一致 地图未初始化会返回空
val angle = centerLine.angle
if (angle != null) {
builder.rotate(angle.toFloat())
}
}
}
val overlayManager = CallerMapUIServiceManager.getOverlayManager()
Log.d(TAG, "CallerMapUIServiceManager.getOverlayManager()=$overlayManager")
overlayManager?.showOrUpdatePoint(builder.build())
@@ -294,18 +290,23 @@ object SweeperCloudTaskUtils {
* 创建接收大任务弹窗
*/
@JvmStatic
fun createReceivedBigTaskInfoDialog(context: Context?, listener: SweeperCloudDialogClickListener?, taskInfo: TaskInfo): SweeperCloudDialog? {
var builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
fun createReceivedBigTaskInfoDialog(
context: Context?,
listener: SweeperCloudDialogClickListener?,
taskInfo: TaskInfo
): SweeperCloudDialog? {
val builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
val startCalendar = DateTimeUtil.formatLongToCalendar(taskInfo.taskStartTime)
val endCalendar = DateTimeUtil.formatLongToCalendar(taskInfo.taskEndTime)
builder.titleStr = "任务接取"
builder.contentStr = "已为您接取任务${taskInfo.taskName}"
builder.tipStr = "(任务时间${DateTimeUtil.formatCalendarToString(startCalendar, DateTimeUtil.HH_mm)}-${
DateTimeUtil.formatCalendarToString(
endCalendar,
DateTimeUtil.HH_mm
)
}"
builder.tipStr =
"(任务时间${DateTimeUtil.formatCalendarToString(startCalendar, DateTimeUtil.HH_mm)}-${
DateTimeUtil.formatCalendarToString(
endCalendar,
DateTimeUtil.HH_mm
)
}"
builder.leftStr = "确认"
builder.middleStr = ""
builder.rightStr = ""
@@ -323,7 +324,7 @@ object SweeperCloudTaskUtils {
listener: SweeperCloudDialogClickListener?,
subTaskInfo: SubTaskInfo
): SweeperCloudDialog? {
var builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
val builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
builder.titleStr = "子任务确认"
builder.contentStr = "请确认并执行子任务 ${subTaskInfo.subTaskName}"
builder.tipStr =
@@ -346,7 +347,7 @@ object SweeperCloudTaskUtils {
stopTaskType: SweeperTaskStop.StopTaskType,
timeoutStr: String
): SweeperCloudDialog? {
var builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
val builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
val titleStr = when (stopTaskType) {
SweeperTaskStop.StopTaskType.ADVANCE -> "任务中止"
SweeperTaskStop.StopTaskType.EXCEPTION -> "任务异常结束"
@@ -386,7 +387,7 @@ object SweeperCloudTaskUtils {
context: Context?,
listener: SweeperCloudDialogClickListener?
): SweeperCloudDialog? {
var builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
val builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
builder.titleStr = "任务结束"
builder.contentStr = "任务已完成,干的漂亮!"
builder.tipStr = ""
@@ -407,7 +408,7 @@ object SweeperCloudTaskUtils {
listener: SweeperCloudDialogClickListener?,
isCancel: Boolean
): SweeperCloudDialog? {
var builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
val builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
builder.titleStr = "任务结束"
builder.contentStr = if (isCancel) "任务已取消!" else "任务已异常结束!"
builder.tipStr = ""
@@ -424,7 +425,7 @@ object SweeperCloudTaskUtils {
context: Context?,
listener: SweeperCloudDialogClickListener?
): SweeperCloudDialog? {
var builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
val builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
builder.titleStr = "任务暂停"
builder.contentStr = "云端暂停任务,注意车辆即将停车!"
builder.tipStr = "【云端任务恢复前不可启动自动驾驶】"
@@ -442,7 +443,7 @@ object SweeperCloudTaskUtils {
listener: SweeperCloudDialogClickListener?,
contentStr: String
): SweeperCloudDialog? {
var builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
val builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder()
builder.titleStr = "任务恢复"
builder.contentStr = contentStr
builder.tipStr = "【注意安全,坐稳扶好】"
@@ -456,11 +457,11 @@ object SweeperCloudTaskUtils {
@JvmStatic
fun printMessage(message: MessageOrBuilder): String {
return "\n"+TextFormat.printer().escapingNonAscii(false).printToString(message)
return "\n" + TextFormat.printer().escapingNonAscii(false).printToString(message)
}
@JvmStatic
fun getRequestId():String{
fun getRequestId(): String {
return UUID.randomUUID().toString()
}

View File

@@ -10,6 +10,8 @@
<com.mogo.eagle.core.function.view.MapBizView
android:id="@+id/mapBizView"
app:isWeatherEnable="false"
app:locationIcon3DRes="@raw/huanwei"
android:layout_width="match_parent"
android:layout_height="match_parent" />

View File

@@ -9,7 +9,6 @@ import android.widget.ImageView;
import com.amap.api.maps.model.LatLng;
import com.amap.api.navi.model.NaviLatLng;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.commons.mvp.IView;
import com.mogo.commons.mvp.MvpFragment;
import com.mogo.commons.mvp.Presenter;
@@ -17,7 +16,6 @@ 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;
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager;
import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxBubbleView;
import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxButtonView;
import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxListView;
@@ -27,7 +25,6 @@ import com.mogo.eagle.core.utilcode.util.ThreadUtils;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.map.listener.IMogoMapListener;
import com.mogo.map.listener.MogoMapListenerHandler;
import com.mogo.map.overlay.IMoGoOverlayManager;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.map.uicontroller.VisualAngleMode;
import com.mogo.och.common.module.map.AmapNaviToDestinationModel;
@@ -158,22 +155,22 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
}
private void updateSwitchMapIcon() {
IMogoMapUIController controller = CallerMapUIServiceManager.INSTANCE.getMapUIController();
if (controller != null) {
if (controller.getCurrentMapVisualAngle().isLongSight()) {
mSwitchMapModeImage.setImageResource(R.drawable.sweeper_switch_map_big_selector);
} else if (controller.getCurrentMapVisualAngle().isMediumSight()) {
mSwitchMapModeImage.setImageResource(R.drawable.sweeper_switch_map_small_selector);
} else {
mSwitchMapModeImage.setImageResource(R.drawable.sweeper_switch_map_small_selector);
if(mapBizView != null){
IMogoMapUIController uiController = mapBizView.getUI();
if(uiController != null){
if (uiController.getCurrentMapVisualAngle().isLongSight()) {
mSwitchMapModeImage.setImageResource(R.drawable.sweeper_switch_map_big_selector);
} else if (uiController.getCurrentMapVisualAngle().isMediumSight()) {
mSwitchMapModeImage.setImageResource(R.drawable.sweeper_switch_map_small_selector);
} else {
mSwitchMapModeImage.setImageResource(R.drawable.sweeper_switch_map_small_selector);
}
}
}
}
/**
* 设置任务进度
*
* @param progress
*/
protected void setTaskProgress(String progress) {
ThreadUtils.runOnUiThread(() -> {
@@ -257,9 +254,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
MogoMapListenerHandler.Companion.getMogoMapListenerHandler().registerHostMapListener(TAG, this);
mCloseNavIcon.setOnClickListener(this);
mRefreshNavi.setOnClickListener(this);
mMapWeltView.getSwitchToBig().setOnClickListener((v) -> {
showOrHideOverMapViewFragment(true);
});
mMapWeltView.getSwitchToBig().setOnClickListener((v) -> showOrHideOverMapViewFragment(true));
}
/**
@@ -271,15 +266,11 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
/**
* 模拟自动驾驶返回状态
*
* @param status
*/
public abstract void debugAutoPilotStatus(int status);
/**
* 迈速表实时更新
*
* @param newSpeed
*/
public void updateSpeedView(float newSpeed) {
int speed = (int) (Math.abs(newSpeed) * 3.6F); // 倒车时工控机反馈定位信息中speed为负值
@@ -290,8 +281,6 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
/**
* 车辆基本信息View
*
* @return
*/
public SweeperTrafficDataView getTrafficDataView() {
return mTrafficDataView;
@@ -338,34 +327,24 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
mSwitchMapModeImage.setOnClickListener(new OnPreventFastClickListener() {
@Override
public void onClickImpl(View v) {
IMogoMapUIController controller = CallerMapUIServiceManager.INSTANCE.getMapUIController();
if (controller != null) {
//切换地图的远近视图
if (controller.getCurrentMapVisualAngle().isLongSight()) {
// 2.11.0去掉
// MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).visibleAllMarkers();
controller.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
mSwitchMapModeImage.setImageResource(R.drawable.sweeper_switch_map_small_selector);
} else if (controller.getCurrentMapVisualAngle().isMediumSight()) {
// 2.11.0去掉
// MogoMarkerManager.getInstance(AbsMogoApplication.getApp())
// .inVisibleWithoutMarkers(DataTypes.TYPE_MARKER_ADAS, BusConst.TYPE_MARKER_BUS_ORDER);
controller.changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null);
mSwitchMapModeImage.setImageResource(R.drawable.sweeper_switch_map_big_selector);
} else {
// 2.11.0去掉
// MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).visibleAllMarkers();
controller.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
mSwitchMapModeImage.setImageResource(R.drawable.sweeper_switch_map_big_selector);
if(mapBizView != null){
IMogoMapUIController uiController = mapBizView.getUI();
if(uiController != null){
if (uiController.getCurrentMapVisualAngle().isLongSight()) {
uiController.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
mSwitchMapModeImage.setImageResource(R.drawable.sweeper_switch_map_small_selector);
} else if (uiController.getCurrentMapVisualAngle().isMediumSight()) {
uiController.changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null);
mSwitchMapModeImage.setImageResource(R.drawable.sweeper_switch_map_big_selector);
} else {
uiController.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
mSwitchMapModeImage.setImageResource(R.drawable.sweeper_switch_map_big_selector);
}
}
}
}
});
mSettingBtn.setOnClickListener(v -> {
// TODO: 2021/12/9
CallerHmiManager.INSTANCE.showToolsView();
});
mSettingBtn.setOnClickListener(v -> CallerHmiManager.INSTANCE.showToolsView());
if (mCardBtn != null) {
CallerDevaToolsManager.INSTANCE.initBadCase(mCardBtn);
}
@@ -423,8 +402,6 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
/**
* 设置作业任务全览图隐藏或者显示
*
* @param isShow
*/
public void showOrHideOverMapViewFragment(boolean isShow) {
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
@@ -470,20 +447,15 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
/**
* 设置贴边数据到地图
*
* @param weltDataBeans
*/
public void setWeltDataToMap(ArrayList<WeltDataBean> weltDataBeans, Boolean isWeltData, String distance) {
mWeltDataBeanList = weltDataBeans;
ThreadUtils.getSinglePool().execute(new Runnable() {
@Override
public void run() {
if (mMapWeltView != null) {
mMapWeltView.setWeltData(weltDataBeans, isWeltData, distance);
}
if (mTaskDataToFragmentCallback != null) {
mTaskDataToFragmentCallback.setWeltData(weltDataBeans, distance);
}
ThreadUtils.getSinglePool().execute(() -> {
if (mMapWeltView != null) {
mMapWeltView.setWeltData(weltDataBeans, isWeltData, distance);
}
if (mTaskDataToFragmentCallback != null) {
mTaskDataToFragmentCallback.setWeltData(weltDataBeans, distance);
}
});
}
@@ -535,13 +507,10 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
*/
public void setTaskRouteList(ArrayList<SweeperRoutePlanningUpdateReqBean.Result> routeList) {
mRouteList = routeList;
ThreadUtils.getSinglePool().execute(new Runnable() {
@Override
public void run() {
mMapWeltView.setRouteList(routeList);
if (mTaskDataToFragmentCallback != null) {
mTaskDataToFragmentCallback.setRouteList(routeList);
}
ThreadUtils.getSinglePool().execute(() -> {
mMapWeltView.setRouteList(routeList);
if (mTaskDataToFragmentCallback != null) {
mTaskDataToFragmentCallback.setRouteList(routeList);
}
});
}

View File

@@ -287,6 +287,11 @@ public class SweeperTaskModel {
};
private final OchAdasStartFailureCallback mAdasStartFailureListener = new OchAdasStartFailureCallback() {
@Override
public void brakeStatusChanged(boolean isBrakeAvailable) {
}
@Override
public void onStartAutopilotFailure(@NotNull String startFailedCode, @NonNull String startFailedMessage) {
SweeperAnalyticsManager.getInstance().triggerStartAutopilotFailureEventByAdas(startFailedCode, startFailedMessage);

View File

@@ -10,6 +10,8 @@
<com.mogo.eagle.core.function.view.MapBizView
android:id="@+id/mapBizView"
app:isWeatherEnable="false"
app:locationIcon3DRes="@raw/huanwei"
android:layout_width="match_parent"
android:layout_height="match_parent" />

View File

@@ -35,7 +35,7 @@ enum class TaxiOrderStatusEnum(val code: Int) {
companion object {
@JvmStatic
fun valueOf(code: Int): TaxiOrderStatusEnum? {
fun valueOf(code: Int): TaxiOrderStatusEnum {
for (value in values()) {
if (value.code == code) {
return value

View File

@@ -894,12 +894,9 @@ public class TaxiModel {
//检测当前订单
public boolean checkCurrentOCHOrder() {
if (mCurrentOCHOrder != null
return mCurrentOCHOrder != null
&& mCurrentOCHOrder.startSiteGcjPoint != null
&& mCurrentOCHOrder.endSiteGcjPoint != null) {
return true;
}
return false;
&& mCurrentOCHOrder.endSiteGcjPoint != null;
}
/**
@@ -1064,6 +1061,11 @@ public class TaxiModel {
};
private final OchAdasStartFailureCallback mAdasStartFailureListener = new OchAdasStartFailureCallback() {
@Override
public void brakeStatusChanged(boolean isBrakeAvailable) {
}
@Override
public void onStartAutopilotFailure(@NotNull String startFailedCode, @NonNull String startFailedMessage) {
TaxiAnalyticsManager.INSTANCE.triggerStartAutopilotFailureEventByAdas(startFailedCode, startFailedMessage);

View File

@@ -48,8 +48,6 @@ public class TaxiPresenter extends Presenter<TaxiFragment> implements ITaxiADASS
private static final String TAG = TaxiPresenter.class.getSimpleName();
private int preAutopilotStatus = 0;
public TaxiPresenter(TaxiFragment view) {
super(view);
TaxiModel.getInstance().init(AbsMogoApplication.getApp());
@@ -192,30 +190,24 @@ public class TaxiPresenter extends Presenter<TaxiFragment> implements ITaxiADASS
public void onAutopilotEnable() {
runOnUIThread(() -> mView.updateAutopilotStatus(
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE));
preAutopilotStatus = IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE;
}
@Override
public void onAutopilotDisable() {
runOnUIThread(() -> mView.updateAutopilotStatus(
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE));
preAutopilotStatus = IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE;
}
@Override
public void onAutopilotRunning() {
if (preAutopilotStatus != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING){
runOnUIThread(() -> mView.updateAutopilotStatus(
runOnUIThread(() -> mView.updateAutopilotStatus(
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING));
}
preAutopilotStatus = IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING;
}
@Override
public void onManMachineCoDriving() {
runOnUIThread(() -> mView.onManMachineCoDriving(IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING));
preAutopilotStatus = IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING;
}
@Override

View File

@@ -22,6 +22,7 @@ import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.Group;
import androidx.fragment.app.FragmentTransaction;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.commons.mvp.IView;
import com.mogo.commons.mvp.MvpFragment;
import com.mogo.commons.mvp.Presenter;
@@ -31,13 +32,13 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager;
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager;
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager;
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager;
import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxBubbleView;
import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxButtonView;
import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxListView;
import com.mogo.eagle.core.function.view.MapBizView;
import com.mogo.eagle.core.function.smp.view.SmallMapView;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant;
import com.mogo.eagle.core.utilcode.mogo.view.OnPreventFastClickListener;
import com.mogo.eagle.core.utilcode.util.ToastUtils;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
@@ -45,12 +46,14 @@ import com.mogo.map.listener.IMogoMapListener;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.map.uicontroller.VisualAngleMode;
import com.mogo.och.common.module.utils.AnimatorDrawableUtil;
import com.mogo.och.common.module.utils.FrameAnimatorContainer;
import com.mogo.och.taxi.R;
import java.util.Arrays;
import java.util.Objects;
import bag_manager.BagManagerOuterClass;
import me.jessyan.autosize.utils.AutoSizeUtils;
import mogo.telematics.pad.MessagePad;
import record_cache.RecordPanelOuterClass;
@@ -92,63 +95,10 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
protected SmallMapView smallMapView;
private Handler mHandler = new Handler(Looper.getMainLooper());
private final Handler mHandler = new Handler(Looper.getMainLooper());
private Integer[] startAutopilotDrawableIds = new Integer[]{
R.drawable.anim_flow_00000, R.drawable.anim_flow_00001, R.drawable.anim_flow_00002,
R.drawable.anim_flow_00003, R.drawable.anim_flow_00004, R.drawable.anim_flow_00005,
R.drawable.anim_flow_00006, R.drawable.anim_flow_00007, R.drawable.anim_flow_00008,
R.drawable.anim_flow_00009, R.drawable.anim_flow_00010, R.drawable.anim_flow_00011,
R.drawable.anim_flow_00012, R.drawable.anim_flow_00013, R.drawable.anim_flow_00014,
R.drawable.anim_flow_00015, R.drawable.anim_flow_00016, R.drawable.anim_flow_00017,
R.drawable.anim_flow_00018, R.drawable.anim_flow_00019, R.drawable.anim_flow_00020,
R.drawable.anim_flow_00021, R.drawable.anim_flow_00022, R.drawable.anim_flow_00023,
R.drawable.anim_flow_00024, R.drawable.anim_flow_00025, R.drawable.anim_flow_00026,
R.drawable.anim_flow_00027, R.drawable.anim_flow_00028, R.drawable.anim_flow_00029,
R.drawable.anim_flow_00030, R.drawable.anim_flow_00031, R.drawable.anim_flow_00032,
R.drawable.anim_flow_00033, R.drawable.anim_flow_00034, R.drawable.anim_flow_00035,
R.drawable.anim_flow_00036, R.drawable.anim_flow_00037, R.drawable.anim_flow_00038,
R.drawable.anim_flow_00039, R.drawable.anim_flow_00040, R.drawable.anim_flow_00041,
R.drawable.anim_flow_00042, R.drawable.anim_flow_00043, R.drawable.anim_flow_00044,
R.drawable.anim_flow_00045, R.drawable.anim_flow_00046, R.drawable.anim_flow_00047,
R.drawable.anim_flow_00048, R.drawable.anim_flow_00049, R.drawable.anim_flow_00050,
R.drawable.anim_flow_00051, R.drawable.anim_flow_00052, R.drawable.anim_flow_00053,
R.drawable.anim_flow_00054, R.drawable.anim_flow_00055, R.drawable.anim_flow_00056,
R.drawable.anim_flow_00057, R.drawable.anim_flow_00058, R.drawable.anim_flow_00059
};
private Integer[] startManCODrawableIds = new Integer[]{
R.drawable.anim_flow_man_co_00000, R.drawable.anim_flow_man_co_00001,
R.drawable.anim_flow_man_co_00002, R.drawable.anim_flow_man_co_00003,
R.drawable.anim_flow_man_co_00004, R.drawable.anim_flow_man_co_00005,
R.drawable.anim_flow_man_co_00006, R.drawable.anim_flow_man_co_00007,
R.drawable.anim_flow_man_co_00008, R.drawable.anim_flow_man_co_00009,
R.drawable.anim_flow_man_co_00010, R.drawable.anim_flow_man_co_00011,
R.drawable.anim_flow_man_co_00012, R.drawable.anim_flow_man_co_00013,
R.drawable.anim_flow_man_co_00014, R.drawable.anim_flow_man_co_00015,
R.drawable.anim_flow_man_co_00016, R.drawable.anim_flow_man_co_00017,
R.drawable.anim_flow_man_co_00018, R.drawable.anim_flow_man_co_00019,
R.drawable.anim_flow_man_co_00020, R.drawable.anim_flow_man_co_00021,
R.drawable.anim_flow_man_co_00022, R.drawable.anim_flow_man_co_00023,
R.drawable.anim_flow_man_co_00024, R.drawable.anim_flow_man_co_00025,
R.drawable.anim_flow_man_co_00026, R.drawable.anim_flow_man_co_00027,
R.drawable.anim_flow_man_co_00028, R.drawable.anim_flow_man_co_00029,
R.drawable.anim_flow_man_co_00030, R.drawable.anim_flow_man_co_00031,
R.drawable.anim_flow_man_co_00032, R.drawable.anim_flow_man_co_00033,
R.drawable.anim_flow_man_co_00034, R.drawable.anim_flow_man_co_00035,
R.drawable.anim_flow_man_co_00036, R.drawable.anim_flow_man_co_00037,
R.drawable.anim_flow_man_co_00038, R.drawable.anim_flow_man_co_00039,
R.drawable.anim_flow_man_co_00040, R.drawable.anim_flow_man_co_00041,
R.drawable.anim_flow_man_co_00042, R.drawable.anim_flow_man_co_00043,
R.drawable.anim_flow_man_co_00044, R.drawable.anim_flow_man_co_00045,
R.drawable.anim_flow_man_co_00046, R.drawable.anim_flow_man_co_00047,
R.drawable.anim_flow_man_co_00048, R.drawable.anim_flow_man_co_00049,
R.drawable.anim_flow_man_co_00050, R.drawable.anim_flow_man_co_00051,
R.drawable.anim_flow_man_co_00052, R.drawable.anim_flow_man_co_00053,
R.drawable.anim_flow_man_co_00054, R.drawable.anim_flow_man_co_00055,
R.drawable.anim_flow_man_co_00056, R.drawable.anim_flow_man_co_00057,
R.drawable.anim_flow_man_co_00058, R.drawable.anim_flow_man_co_00059
};
private FrameAnimatorContainer startAutopilotAnimator;
private FrameAnimatorContainer startManCOAnimator;
@Override
protected int getLayoutId() {
@@ -189,19 +139,20 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
//视角切换
long start = SystemClock.elapsedRealtime();
try {
IMogoMapUIController controller = CallerMapUIServiceManager.INSTANCE.getMapUIController();
if (controller != null) {
//切换地图的远近视图
if (controller.getCurrentMapVisualAngle().isLongSight()) {
//Objects.requireNonNull(CallerMapUIServiceManager.INSTANCE.getMapUIController()).setLockMode(true);
controller.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
mSwitchBtnIcon.setImageResource(R.drawable.taxi_switch_map_medium);
} else if (controller.getCurrentMapVisualAngle().isMediumSight()) {
//Objects.requireNonNull(CallerMapUIServiceManager.INSTANCE.getMapUIController()).setLockMode(false);
controller.changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null);
mSwitchBtnIcon.setImageResource(R.drawable.taxi_switch_map_long);
} else {
mSwitchBtnIcon.setImageResource(R.drawable.taxi_switch_map_medium);
if(mapBizView != null){
IMogoMapUIController uiController = mapBizView.getUI();
if(uiController != null){
if (uiController.getCurrentMapVisualAngle().isLongSight()) {
uiController.setLockMode(true);
uiController.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
mSwitchBtnIcon.setImageResource(R.drawable.taxi_switch_map_medium);
} else if (uiController.getCurrentMapVisualAngle().isMediumSight()) {
uiController.setLockMode(false);
uiController.changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null);
mSwitchBtnIcon.setImageResource(R.drawable.taxi_switch_map_long);
} else {
mSwitchBtnIcon.setImageResource(R.drawable.taxi_switch_map_medium);
}
}
}
} finally {
@@ -273,8 +224,11 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
findViewById(R.id.btnAutopilotmanco).setOnClickListener(view ->
onAutopilotStatusChanged(IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING));
tvOperationStatus.setOnClickListener(view -> {
onChangeOperationStatus();
tvOperationStatus.setOnClickListener(new OnPreventFastClickListener() {
@Override
public void onClickImpl(View v) {
onChangeOperationStatus();
}
});
mCloseNaviIcon.setOnClickListener(v -> {
showAmapNaviToStationFragment(false);
@@ -295,6 +249,14 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
});
smallMapView = findViewById(R.id.smallMapView);
int width = AutoSizeUtils.dp2px(AbsMogoApplication.getApp(), 420f);
int height = AutoSizeUtils.dp2px(AbsMogoApplication.getApp(), 220f);
startAutopilotAnimator = new FrameAnimatorContainer(R.array.anim_flow, 20,mAnimFlowIv,false,width,height);
startAutopilotAnimator.setOnAnimStopListener(() -> CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "自动驾驶动画暂停"));
startManCOAnimator = new FrameAnimatorContainer(R.array.nim_flow_man_co, 20,mAnimFlowIv,false,width,height);
startManCOAnimator.setOnAnimStopListener(() -> CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "平行驾驶动画暂停"));
}
@Override
@@ -323,14 +285,16 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
}
private void updateSwitchMapIcon() {
IMogoMapUIController controller = CallerMapUIServiceManager.INSTANCE.getMapUIController();
if (controller != null) {
if (controller.getCurrentMapVisualAngle().isLongSight()) {
mSwitchBtnIcon.setImageResource(R.drawable.taxi_switch_map_long);
} else if (controller.getCurrentMapVisualAngle().isMediumSight()) {
mSwitchBtnIcon.setImageResource(R.drawable.taxi_switch_map_medium);
} else {
mSwitchBtnIcon.setImageResource(R.drawable.taxi_switch_map_medium);
if(mapBizView != null){
IMogoMapUIController uiController = mapBizView.getUI();
if(uiController != null){
if (uiController.getCurrentMapVisualAngle().isLongSight()) {
mSwitchBtnIcon.setImageResource(R.drawable.taxi_switch_map_long);
} else if (uiController.getCurrentMapVisualAngle().isMediumSight()) {
mSwitchBtnIcon.setImageResource(R.drawable.taxi_switch_map_medium);
} else {
mSwitchBtnIcon.setImageResource(R.drawable.taxi_switch_map_medium);
}
}
}
}
@@ -356,8 +320,10 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
@Override
public void onDestroy() {
if(smallMapView != null){
smallMapView.onDestroy();
}
super.onDestroy();
smallMapView.onDestroy();
}
@Override
@@ -372,21 +338,13 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
public void onBagManagerResult(@NonNull BagManagerOuterClass.BagManager bagManager) {
}
/**
* 改变自动驾驶状态
*
* @param status 2 - running 1 - enable 2 - disable
*/
private int mPrevAPStatus = -1;
public void onAutopilotStatusChanged(int status) {
getActivity().runOnUiThread(() -> {
if (isStarting && IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING != status) {
// 1. 主动开启自动驾驶中不为2为0、1则继续loading
return;
}
if (isStarting && IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == status
&& mPrevAPStatus != status) {
if (isStarting && IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == status) {
// 2. 主动开启自动驾驶中为2则停止loading并isStarting = false
startAutopilotDone(true);
return;
@@ -394,7 +352,6 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
// 3. 其他过程直接更新
startOrStopLoadingAnim(false);
autopilotStatusAnimchanged(status);
mPrevAPStatus = status;
});
}
@@ -404,10 +361,7 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
}
public void onManMachineCoDriving(int manMachineCoDriving) {
if (mPrevAPStatus != manMachineCoDriving) {
autopilotStatusAnimchanged(manMachineCoDriving);
}
mPrevAPStatus = manMachineCoDriving;
autopilotStatusAnimchanged(manMachineCoDriving);
}
public void updateCtvAutopilotStatusTag(boolean tag) {
@@ -423,52 +377,51 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
protected abstract void updateOrderBottomBtnUI();
private AnimatorDrawableUtil animatorDrawableUtil = null;
public void autopilotStatusAnimchanged(int status) {
if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == status) {
mAutopilotTv.setText("自动驾驶");
mAutopilotTv.setTextColor(getResources().getColor(R.color.taxi_autopilot_text_color_normal));
mAutopilotImage.setImageResource(R.drawable.taxi_ic_autopilot);
if (animatorDrawableUtil == null) {
animatorDrawableUtil = new AnimatorDrawableUtil();
if(startManCOAnimator!=null) {
startManCOAnimator.stop();
}
if(startAutopilotAnimator!=null) {
startAutopilotAnimator.reStart();
}
animatorDrawableUtil.setAnimation(mAnimFlowIv, Arrays.asList(startAutopilotDrawableIds));
animatorDrawableUtil.start(true, 100, null);
} else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE == status) {
mAutopilotTv.setText("自动驾驶");
mAutopilotTv.setTextColor(getResources().getColor(R.color.taxi_autopilot_text_color_normal));
mAutopilotImage.setImageResource(R.drawable.taxi_ic_autopilot);
if (animatorDrawableUtil != null) {
animatorDrawableUtil.stop();
mAnimFlowIv.setImageResource(0);
}
// ctvAutopilotStatusRL.setBackground(getResources().getDrawable(R.drawable.taxi_autopilot_bg_selector));
animatorDrawableUtil = null;
if(startAutopilotAnimator!=null) {
startAutopilotAnimator.stop();
}
if(startManCOAnimator!=null) {
startManCOAnimator.stop();
}
mAnimFlowIv.setImageResource(0);
} else if (IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING == status) {
mAutopilotTv.setText("远程代驾");
mAutopilotTv.setTextColor(getResources().getColor(R.color.taxi_autopilot_text_color_normal));
mAutopilotImage.setImageResource(R.drawable.taxi_ic_autopilot);
if (animatorDrawableUtil == null) {
animatorDrawableUtil = new AnimatorDrawableUtil();
if(startAutopilotAnimator!=null) {
startAutopilotAnimator.stop();
}
if(startManCOAnimator!=null) {
startManCOAnimator.reStart();
}
animatorDrawableUtil.setAnimation(mAnimFlowIv, Arrays.asList(startManCODrawableIds));
animatorDrawableUtil.start(true, 100, null);
} else {
mAutopilotTv.setText("自动驾驶");
mAutopilotTv.setTextColor(getResources().getColor(R.color.taxi_autopilot_text_color_disable));
mAutopilotImage.setImageResource(R.drawable.taxi_ic_autopilot_disable);
if (animatorDrawableUtil != null) {
animatorDrawableUtil.stop();
mAnimFlowIv.setImageResource(0);
if(startAutopilotAnimator!=null) {
startAutopilotAnimator.stop();
}
// ctvAutopilotStatusRL.setBackground(getResources().getDrawable(R.drawable.taxi_ic_autopilot_bg));
animatorDrawableUtil = null;
if(startManCOAnimator!=null) {
startManCOAnimator.stop();
}
mAnimFlowIv.setImageResource(0);
}
}
@@ -589,11 +542,6 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
mSpeedView.setText(String.valueOf(speed));
}
@Override
public void onMapVisualAngleChanged(VisualAngleMode visualAngleMode) {
//todo ui 切换
}
protected void showAmapNaviToStationFragment(boolean isShow) {
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
@@ -613,7 +561,7 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
smallMapView.setVisibility(View.GONE);
} else {
mCloseNaviIcon.setVisibility(View.GONE);
flNaviPanelContainer.setVisibility(View.GONE);
flNaviPanelContainer.setVisibility(View.INVISIBLE);
smallMapView.setVisibility(View.VISIBLE);
}
}
@@ -657,7 +605,7 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
} else {
closeRouteViewIFHadeAdd();
mCloseNaviIcon.setVisibility(View.GONE);
flNaviPanelContainer.setVisibility(View.GONE);
flNaviPanelContainer.setVisibility(View.INVISIBLE);
smallMapView.setVisibility(View.VISIBLE);
}
}

View File

@@ -1,6 +1,7 @@
package com.mogo.och.taxi.ui;
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI;
import static com.mogo.map.MogoMap.DEFAULT;
import android.app.Activity;
import android.graphics.Color;
@@ -17,7 +18,6 @@ import androidx.annotation.RequiresApi;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.amap.api.navi.model.NaviLatLng;
import com.mogo.eagle.core.data.map.CenterLine;
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener;
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager;
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager;
@@ -29,7 +29,6 @@ import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.map.overlay.IMoGoOverlayManager;
import com.mogo.map.overlay.core.Level;
import com.mogo.map.overlay.point.Point;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.och.common.module.map.AmapNaviToDestinationModel;
import com.mogo.och.common.module.map.ICommonNaviChangedCallback;
import com.mogo.och.common.module.utils.DateTimeUtil;
@@ -344,15 +343,20 @@ public class TaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment
}
private void startNaviToStation(boolean isVoicePlay, double stationLat, double stationLng) {
AmapNaviToDestinationModel.getInstance(getContext()).destroyAmaNavi();
UiThreadHandler.post(new Runnable() {
@Override
public void run() {
AmapNaviToDestinationModel.getInstance(getContext()).destroyAmaNavi();
double mCurLatitude = CallerChassisLocationGCJ02ListenerManager.INSTANCE.getChassisLocationGCJ02().getLatitude();
double mCurLongitude =CallerChassisLocationGCJ02ListenerManager.INSTANCE.getChassisLocationGCJ02().getLongitude();
double mCurLatitude = CallerChassisLocationGCJ02ListenerManager.INSTANCE.getChassisLocationGCJ02().getLatitude();
double mCurLongitude =CallerChassisLocationGCJ02ListenerManager.INSTANCE.getChassisLocationGCJ02().getLongitude();
CallerLogger.d(M_TAXI + TAG, "currentLatLng=" + mCurLatitude + " " +mCurLongitude);
NaviLatLng startNaviLatLng = new NaviLatLng(mCurLatitude, mCurLongitude);
NaviLatLng endNaviLatLng = new NaviLatLng(stationLat, stationLng);
AmapNaviToDestinationModel.getInstance(getContext()).initAMapNavi(startNaviLatLng, endNaviLatLng);
CallerLogger.d(M_TAXI + TAG, "currentLatLng=" + mCurLatitude + " " +mCurLongitude);
NaviLatLng startNaviLatLng = new NaviLatLng(mCurLatitude, mCurLongitude);
NaviLatLng endNaviLatLng = new NaviLatLng(stationLat, stationLng);
AmapNaviToDestinationModel.getInstance(getContext()).initAMapNavi(startNaviLatLng, endNaviLatLng);
}
});
AmapNaviToDestinationModel.getInstance(getContext()).setVoiceIsMute(isVoicePlay);
AmapNaviToDestinationModel.getInstance(getContext()).setTaxiNaviChangedCallback(this);
}
@@ -762,24 +766,13 @@ public class TaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment
.anchor(0.5f, 0.5f)
.set3DMode(true)
.isUseGps(true)
.controlAngle(true)
.controlAngle(false)
.icon3DRes(resourceId)
.latitude(station.get(1))
.longitude(station.get(0));
IMogoMapUIController mapUIController = CallerMapUIServiceManager.INSTANCE.getMapUIController();
if (mapUIController != null) {
CenterLine centerLine = mapUIController.getCenterLineInfo(station.get(0)
, station.get(1), -1);
if (null != centerLine) {// 有可能鹰眼map为空没有角度。判空使用后可能造成maker角度跟道路角度不一致
Double angle = centerLine.getAngle();
if (angle != null) {
builder.rotate(angle.floatValue());
}
}
}
IMoGoOverlayManager overlayManager = CallerMapUIServiceManager.INSTANCE.getOverlayManager();
if (overlayManager != null) {
overlayManager.showOrUpdatePoint(builder.build());
overlayManager.showOrUpdatePoint(builder.build(),DEFAULT);
}
};
OCHThreadPoolManager.getsInstance().execute(setMapMarkerRunnable);

View File

@@ -21,7 +21,6 @@ import com.mogo.eagle.core.data.temp.EventLogout;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.och.common.module.biz.constant.OchCommonConst;
import com.mogo.och.common.module.biz.provider.LoginService;
import com.mogo.och.common.module.voice.VoiceNotice;
import com.mogo.och.taxi.R;
import com.mogo.och.taxi.constant.TaxiOrderStatusEnum;
import com.mogo.och.taxi.bean.OrderQueryRespBean;
@@ -106,7 +105,6 @@ public class TaxiFragment extends BaseTaxiTabFragment<TaxiFragment, TaxiPresente
return "TaxiFragment";
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void initViews() {
super.initViews();
@@ -201,10 +199,6 @@ public class TaxiFragment extends BaseTaxiTabFragment<TaxiFragment, TaxiPresente
}
}
@Override
public void onMapLoaded() {
}
public void updateAutopilotStatus(int status) {
onAutopilotStatusChanged(status);
}

BIN
OCH/taxi/driver/src/main/res/drawable/anim_flow_00000.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 14 KiB

BIN
OCH/taxi/driver/src/main/res/drawable/anim_flow_00001.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 14 KiB

BIN
OCH/taxi/driver/src/main/res/drawable/anim_flow_00002.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 14 KiB

BIN
OCH/taxi/driver/src/main/res/drawable/anim_flow_00003.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 15 KiB

BIN
OCH/taxi/driver/src/main/res/drawable/anim_flow_00004.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 15 KiB

BIN
OCH/taxi/driver/src/main/res/drawable/anim_flow_00005.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 15 KiB

BIN
OCH/taxi/driver/src/main/res/drawable/anim_flow_00006.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 15 KiB

BIN
OCH/taxi/driver/src/main/res/drawable/anim_flow_00007.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 15 KiB

BIN
OCH/taxi/driver/src/main/res/drawable/anim_flow_00008.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 15 KiB

BIN
OCH/taxi/driver/src/main/res/drawable/anim_flow_00009.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 16 KiB

BIN
OCH/taxi/driver/src/main/res/drawable/anim_flow_00010.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 14 KiB

BIN
OCH/taxi/driver/src/main/res/drawable/anim_flow_00011.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 14 KiB

BIN
OCH/taxi/driver/src/main/res/drawable/anim_flow_00012.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 15 KiB

BIN
OCH/taxi/driver/src/main/res/drawable/anim_flow_00013.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 15 KiB

BIN
OCH/taxi/driver/src/main/res/drawable/anim_flow_00014.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 15 KiB

BIN
OCH/taxi/driver/src/main/res/drawable/anim_flow_00015.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 14 KiB

BIN
OCH/taxi/driver/src/main/res/drawable/anim_flow_00016.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 15 KiB

BIN
OCH/taxi/driver/src/main/res/drawable/anim_flow_00017.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 15 KiB

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