diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/MapIdentifySubscriber.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/MapIdentifySubscriber.kt index 0932283945..9647930691 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/MapIdentifySubscriber.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/MapIdentifySubscriber.kt @@ -2,6 +2,7 @@ package com.mogo.eagle.core.function.business.identify import android.util.Log import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.map.MogoLatLng import com.mogo.eagle.core.data.map.MogoLocation import com.mogo.eagle.core.data.traffic.TrafficData import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener @@ -9,11 +10,14 @@ import com.mogo.eagle.core.function.api.base.IMoGoSubscriber import com.mogo.eagle.core.function.api.datacenter.obu.IMoGoObuStatusListener import com.mogo.eagle.core.function.business.routeoverlay.PredictionOverlayDrawer import com.mogo.eagle.core.function.business.routeoverlay.PredictionOverlayDrawer2 +import com.mogo.eagle.core.function.business.routeoverlay.PredictionOverlayDrawer3 import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84 +import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager.getLocationHeading import com.mogo.eagle.core.function.call.obu.CallerObuWarningListenerManager import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.map.MogoMap +import com.mogo.map.MogoMap.Companion.mapInstance import com.mogo.map.identify.MogoIdentifyManager import com.mogo.map.utils.LocationUtils import mogo.telematics.pad.MessagePad @@ -78,19 +82,20 @@ class MapIdentifySubscriber private constructor() : IMoGoSubscriber, if (FunctionBuildConfig.isDrawPreIdentifyData) { try { ThreadUtils.getSinglePool().execute { -// // 渲染它车 -// IdentifyFactory.renderPredictionResult(predictionObjects.objsAppList) + val mogoMap = mapInstance.getMogoMap(MogoMap.DEFAULT) + val pointsList: ArrayList> = ArrayList() + var arr: DoubleArray? // 渲染自车 predictionObjects.objsAppList.forEach { preObj -> + val points = ArrayList() if (preObj.mNid == 800000L) { // 自车有2条轨迹,一条概率大、一条概率小 if (preObj.predictionTrajectoryList == null || preObj.predictionTrajectoryList.size < 2) return@forEach carPoiList1 = preObj.predictionTrajectoryList[0].trajectoryPointsList carPoiList2 = preObj.predictionTrajectoryList[1].trajectoryPointsList val largeType: Int - val heading = getChassisLocationWGS84().heading - location1 = LocationUtils.generateLocation(carPoiList1!![0].x, carPoiList1!![0].y, heading) - location2 = LocationUtils.generateLocation(carPoiList2!![0].x, carPoiList2!![0].y, heading) + location1 = LocationUtils.generateLocation(carPoiList1!![0].x, carPoiList1!![0].y, getLocationHeading()) + location2 = LocationUtils.generateLocation(carPoiList2!![0].x, carPoiList2!![0].y, getLocationHeading()) if (location1 == null || location2 == null) return@forEach probability1 = preObj.predictionTrajectoryList[0].predictionProbability probability2 = preObj.predictionTrajectoryList[1].predictionProbability @@ -102,12 +107,24 @@ class MapIdentifySubscriber private constructor() : IMoGoSubscriber, MogoIdentifyManager.getInstance().updateGps(location2!!, MogoMap.SMALL_PRED_MAP) largeType = 3 } - PredictionOverlayDrawer.getInstance().drawPredictionList(carPoiList1, heading, false, 2, largeType) - PredictionOverlayDrawer2.getInstance().drawPredictionList(carPoiList2, heading, false, 3, largeType) + PredictionOverlayDrawer2.getInstance().drawPredictionList(carPoiList1, getLocationHeading(), false, 2, largeType) + PredictionOverlayDrawer3.getInstance().drawPredictionList(carPoiList2, getLocationHeading(), false, 3, largeType) MogoIdentifyManager.getInstance().updateGps(location1!!, MogoMap.SMALL_PRED_MAP2) MogoIdentifyManager.getInstance().updateGps(location2!!, MogoMap.SMALL_PRED_MAP3) + } else { + if (preObj.predictionTrajectoryList.isNullOrEmpty() || mogoMap == null) return@forEach + preObj.predictionTrajectoryList[0].trajectoryPointsList.forEachIndexed { index, point -> + if (index % 2 == 0) {// 步长为2,减少点 + arr = mogoMap.switchData(point.x, point.y, false) + arr?.let { lonLatArr -> + points.add(MogoLatLng(lonLatArr[1], lonLatArr[0])) + } + } + } + pointsList.add(points) } } + PredictionOverlayDrawer.getInstance().drawPredictionList(pointsList, getLocationHeading()) } } catch (e: Exception) { e.printStackTrace() diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/MogoRouteOverlayManager.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/MogoRouteOverlayManager.java index 82f86ee936..4f618550c4 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/MogoRouteOverlayManager.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/MogoRouteOverlayManager.java @@ -131,16 +131,16 @@ public class MogoRouteOverlayManager implements // Log.d(TAG, "-- onChassisLocationGCJ02 -- 1 ---" + ":auto-mode:" + autoPilotState + ", isArriveAtStation: " + isArriveAtStation); if (isArriveAtStation && autoPilotState != 2) { RouteOverlayDrawer.getInstance().clearMogoRouteOverlay(); - PredictionOverlayDrawer.getInstance().clearPreRouteOverlay(); PredictionOverlayDrawer2.getInstance().clearPreRouteOverlay(); + PredictionOverlayDrawer3.getInstance().clearPreRouteOverlay(); return; } // Log.d(TAG, "-- onChassisLocationGCJ02 -- 2 ---" + "auto-mode:" + autoPilotState + ", isDemoMode:" + FunctionBuildConfig.isDemoMode + ", force:" + FunctionBuildConfig.isForceDrawAutopilotTrajectoryByDebugSettingView); boolean force = hasGreenWave.get() || FunctionBuildConfig.isForceDrawAutopilotTrajectoryByDebugSettingView || FunctionBuildConfig.isDemoMode && FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData; if (!force && autoPilotState != 2) { RouteOverlayDrawer.getInstance().clearMogoRouteOverlay(); - PredictionOverlayDrawer.getInstance().clearPreRouteOverlay(); PredictionOverlayDrawer2.getInstance().clearPreRouteOverlay(); + PredictionOverlayDrawer3.getInstance().clearPreRouteOverlay(); return; } // Log.d(TAG, "-- onChassisLocationGCJ02 -- 3 ---"); diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/PredictionOverlayDrawer.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/PredictionOverlayDrawer.java index 294242ad11..f5abb30460 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/PredictionOverlayDrawer.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/PredictionOverlayDrawer.java @@ -1,10 +1,6 @@ package com.mogo.eagle.core.function.business.routeoverlay; -import static com.mogo.map.MogoMap.DEFAULT; -import static com.mogo.map.MogoMap.SMALL_DES_MAP; import static com.mogo.map.MogoMap.SMALL_PRED_MAP; -import static com.mogo.map.MogoMap.SMALL_PRED_MAP2; -import static com.mogo.map.MogoMap.SMALL_PRED_MAP3; import android.annotation.SuppressLint; import android.graphics.Color; @@ -16,24 +12,19 @@ import androidx.core.util.Pools; import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.data.map.MogoLatLng; +import com.mogo.eagle.core.data.map.MogoLocation; import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager; +import com.mogo.eagle.core.function.call.map.CallerMapIdentifyManager; import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager; -import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; import com.mogo.eagle.core.utilcode.util.DrivingDirectionUtils; -import com.mogo.map.IMogoMap; -import com.mogo.map.MogoMap; import com.mogo.map.overlay.IMoGoOverlayManager; import com.mogo.map.overlay.core.Level; import com.mogo.map.overlay.line.Polyline; -import com.zhidaoauto.map.sdk.open.common.tools.MapTools; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; -import kotlin.Pair; -import mogo.telematics.pad.MessagePad; public class PredictionOverlayDrawer { @@ -46,14 +37,12 @@ public class PredictionOverlayDrawer { private static final byte[] obj = new byte[0]; private static final int COLOR_LIGHT = Color.parseColor("#BAEBF5"); - private final List greenWaveColors = new ArrayList<>(); - private PredictionOverlayDrawer() { // 渐变色 mogoOverlayManager = CallerMapUIServiceManager.INSTANCE.getOverlayManager(); if (mogoOverlayManager != null) { // 线条粗细,渐变,渐变色值 - HandlerThread renderTask = new HandlerThread("prediction_render") { + HandlerThread renderTask = new HandlerThread("pred_render") { @Override protected void onLooperPrepared() { super.onLooperPrepared(); @@ -61,17 +50,6 @@ public class PredictionOverlayDrawer { } }; renderTask.start(); - ArrayList> temps = new ArrayList<>(); - temps.add(new Pair<>(0, 51)); - temps.add(new Pair<>(10, 102)); - temps.add(new Pair<>(30, 51)); - temps.add(new Pair<>(100, 0)); - List alphas = MapTools.INSTANCE.getColorAlpha(temps); - if (alphas != null && !alphas.isEmpty()) { - for (int i : alphas) { - greenWaveColors.add(Color.argb(i, 48, 163, 255)); - } - } } } @@ -96,36 +74,31 @@ public class PredictionOverlayDrawer { } private class RenderTask implements Runnable { - private volatile List predictionList; + // 对象池 private final Pools.Pool pools; - private final LinkedList points; - private double bearing; - private boolean hasGreenWave; - private int preViewType; - private int largeType; private Polyline.Options mPolylineOptions; - //用于taxi乘客屏渐变颜色集合 - private List colors = null; + + private volatile List> mPredPointsList; + private final List> mPointsList; + private List mLineOptList; public RenderTask() { - this.pools = new Pools.SimplePool<>(500); - this.points = new LinkedList<>(); - mPolylineOptions = new Polyline.Options.Builder("prediction_overlay" + preViewType, Level.GUIDE_ROUTE_LINE) + this.pools = new Pools.SimplePool<>(1000); + this.mPointsList = new ArrayList<>(); + + mPolylineOptions = new Polyline.Options.Builder("pred_overlay", Level.GUIDE_ROUTE_LINE) .setUseGps(true) - .setWidth(20) + .setWidth(10) .setIsGradient(true) .build(); } - public void setPreData(List data, double bearing, boolean hasGreenWave, int preType, int largeType) { - predictionList = data; + public void setPreDataList(List> data, double bearing) { + mPredPointsList = data; this.bearing = bearing; - this.hasGreenWave = hasGreenWave; - preViewType = preType; - this.largeType = largeType; } @SuppressLint("LongLogTag") @@ -135,168 +108,127 @@ public class PredictionOverlayDrawer { if (overlayManager == null) { return; } - LinkedList pps = this.points; + List> poiList = mPointsList; + List> ppsList = new ArrayList<>(); boolean isExcept = false; int total; - try { - pps.clear(); - List routes = this.predictionList; - if (routes == null || (total = routes.size()) < 2) { - isExcept = true; + poiList.clear(); + List> routes1 = this.mPredPointsList; + if (mLineOptList == null) { + mLineOptList = new ArrayList<>(); + } + for (List latLngList : routes1) { + if (latLngList == null || (total = latLngList.size()) < 2) { return; } - boolean isColorfulStrategy = !hasGreenWave && !AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode) || !AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode); - if (isColorfulStrategy) { - RouteStrategy.INSTANCE.start(); - } else { - if (colors == null || colors.isEmpty()) { - ArrayList> temps = new ArrayList<>(); - temps.add(new Pair<>(0, 51)); - temps.add(new Pair<>(10, 102)); - temps.add(new Pair<>(30, 51)); - temps.add(new Pair<>(100, 0)); - List alphas = MapTools.INSTANCE.getColorAlpha(temps); - if (alphas != null && !alphas.isEmpty()) { - colors = new CopyOnWriteArrayList<>(); - for (int i : alphas) { - colors.add(Color.argb(i, 48, 163, 255)); + LinkedList pps = null; + try { + pps = new LinkedList<>(); + for (int i = 0; i < total; i++) { + MogoLatLng route = null; + try { + route = latLngList.get(i); + if (route == null) { + continue; } + } catch (Throwable t) { + Log.d("Route", "render-error:" + t.getMessage()); } - } - } - for (int i = 0; i < total; i++) { - MogoLatLng route = null; - try { - route = routes.get(i); if (route == null) { - continue; - } - } catch (Throwable t) { - Log.d("Route", "render-error:" + t.getMessage()); - } - if (route == null) { - //数组越界了,结束循环 - break; - } - MogoLatLng acquire = pools.acquire(); - double latitude = route.getLat(); - double longitude = route.getLon(); - if (acquire == null) { - acquire = new MogoLatLng(latitude, longitude); - } else { - acquire.lon = longitude; - acquire.lat = latitude; - } - acquire.acc = 0.0;// 加速度 - acquire.speed = 0.0;// 速度 - pps.add(acquire); - if (isColorfulStrategy) { - RouteStrategy.INSTANCE.check(0.0, 0.0, predictionList.size()); - } - } - double lon = CallerChassisLocationWGS84ListenerManager.INSTANCE.getChassisLocationWGS84().getLongitude(); - double lat = CallerChassisLocationWGS84ListenerManager.INSTANCE.getChassisLocationWGS84().getLatitude(); - if (!points.isEmpty()) { - MogoLatLng top = null; - while (!points.isEmpty()) { - MogoLatLng first = points.peek(); - if (first == null) { - continue; - } - if (first == top) { + //数组越界了,结束循环 break; } - lon = CallerChassisLocationWGS84ListenerManager.INSTANCE.getChassisLocationWGS84().getLongitude(); - lat = CallerChassisLocationWGS84ListenerManager.INSTANCE.getChassisLocationWGS84().getLatitude(); - long angle = isPointOnCarFront(lon, lat, bearing, first.lon, first.lat); - if (angle >= 90) { - if (isColorfulStrategy) { - RouteStrategy.INSTANCE.remove(first.acc); - } - pools.release(first); - points.poll(); - } - top = first; - } - if (points.isEmpty()) { - isExcept = true; - return; - } - MogoLatLng self = pools.acquire(); - if (self == null) { - self = new MogoLatLng(lat, lon); - } else { - self.lat = lat; - self.lon = lon; - } - points.addFirst(self); - - Polyline.Options.Builder builder; - if (mPolylineOptions == null) { - builder = new Polyline.Options.Builder("prediction_overlay" + preViewType, Level.GUIDE_ROUTE_LINE) - .setUseGps(true) - .setWidth(20) - .setIsGradient(true); - } else { - builder = mPolylineOptions.builder(); - } - - if (isColorfulStrategy) { - RouteStrategy.INSTANCE.end(); - Strategy strategy = RouteStrategy.INSTANCE.getStrategy(); - List colors = strategy.getColors(); - boolean isLightOn = strategy instanceof ColorfulStrategy && ((ColorfulStrategy) strategy).isLightOn(); - builder.colors(colors); - builder.setLightOn(isLightOn); - builder.setLightColor(COLOR_LIGHT); - builder.setLightSpeed(0.3f); - } else { - if (!hasGreenWave) { - if (colors != null && !colors.isEmpty()) { - builder.colors(colors); - builder.setIsGradient(true); - builder.setLightOn(true); - builder.isShowArrow(false); - builder.setLightColor(COLOR_LIGHT); - builder.setLightSpeed(0.3f); - } + MogoLatLng acquire = pools.acquire(); + double latitude = route.getLat(); + double longitude = route.getLon(); + if (acquire == null) { + acquire = new MogoLatLng(latitude, longitude); } else { - builder.colors(greenWaveColors) - .setIsGradient(true) - .setLightOn(false) - .isShowArrow(true); + acquire.lon = longitude; + acquire.lat = latitude; } + acquire.acc = 0.0;// 加速度 + acquire.speed = 0.0;// 速度 + pps.add(acquire); } - builder.points(points); - builder.setVisible(true); - Polyline.Options options = builder.build(); - if (mPolylineOptions == null) { - mPolylineOptions = options; - } - if (FunctionBuildConfig.isDrawPreIdentifyData) { - if (preViewType == 2) { - overlayManager.showOrUpdateLine(options, SMALL_PRED_MAP2); - } else if (preViewType == 3) { - overlayManager.showOrUpdateLine(options, SMALL_PRED_MAP3); + ppsList.add(pps); + MogoLocation location = CallerChassisLocationWGS84ListenerManager.INSTANCE.getChassisLocationWGS84(); + double lon = location.getLongitude(); + double lat = location.getLatitude(); + if (!pps.isEmpty()) { + MogoLatLng top = null; + while (!pps.isEmpty()) { + MogoLatLng first = pps.peek(); + if (first == null) { + continue; + } + if (first == top) { + break; + } + lon = location.getLongitude(); + lat = location.getLatitude(); + long angle = isPointOnCarFront(lon, lat, bearing, first.lon, first.lat); + if (angle >= 90) { + pools.release(first); + pps.poll(); + } + top = first; } - } - } else { - isExcept = true; - } - } catch (Throwable t) { - t.printStackTrace(); - } finally { - if (isExcept) { - setVisible(false); - } - if (!points.isEmpty()) { - for (int i = 0; i < points.size(); i++) { - MogoLatLng latLng = points.get(i); - if (latLng == null) { - continue; + if (pps.isEmpty()) { + isExcept = true; + return; + } + MogoLatLng self = pools.acquire(); + if (self == null) { + self = new MogoLatLng(lat, lon); + } else { + self.lat = lat; + self.lon = lon; + } + pps.addFirst(self); + // 线的配置 + Polyline.Options.Builder builder; + if (mPolylineOptions == null) { + builder = new Polyline.Options.Builder("pred_overlay", Level.GUIDE_ROUTE_LINE) + .setUseGps(true) + .setWidth(5) + .setIsGradient(true); + } else { + builder = mPolylineOptions.builder(); + } + builder.color(Color.rgb(196, 196, 196)); + builder.setIsGradient(false); + builder.setLightOn(false); + builder.setIsDottedLine(true); + builder.isShowArrow(false); + builder.points(pps); + builder.setVisible(true); + Polyline.Options options = builder.build(); + if (mPolylineOptions == null) { + mPolylineOptions = options; + } + if (FunctionBuildConfig.isDrawPreIdentifyData && CallerMapIdentifyManager.INSTANCE.isPreViewLoaded()) { + overlayManager.showOrUpdateLine(options, SMALL_PRED_MAP); + } + } else { + isExcept = true; + } + poiList.add(pps); + } catch (Throwable t) { + t.printStackTrace(); + } finally { + if (isExcept) { + setVisible(false); + } + if (pps != null && !pps.isEmpty()) { + for (int i = 0; i < pps.size(); i++) { + MogoLatLng latLng = pps.get(i); + if (latLng == null) { + continue; + } + pools.release(latLng); } - pools.release(latLng); } } } @@ -309,21 +241,13 @@ public class PredictionOverlayDrawer { private volatile RenderTask mPreRenderTask; - public void drawPredictionList(List dataList, double bearing, boolean hasGreenWave, int preType, int largeType) { - IMogoMap iMogoMap = MogoMap.Companion.getMapInstance().getMogoMap(DEFAULT); - double[] arr; - if (mogoOverlayManager != null && iMogoMap != null) { + public void drawPredictionList(List> dataList, double bearing) { + if (dataList.isEmpty()) return; + if (mogoOverlayManager != null) { if (mPreRenderTask == null) { mPreRenderTask = new RenderTask(); } - List latLngList = new ArrayList<>(); - for (geometry.Geometry.Point point : dataList) { - arr = iMogoMap.switchData(point.getX(), point.getY(), false); - if (arr == null || arr.length < 2) continue; - latLngList.add(new MogoLatLng(arr[1], arr[0])); - } - if (latLngList.isEmpty()) return; - mPreRenderTask.setPreData(latLngList, bearing, hasGreenWave, preType, largeType); + mPreRenderTask.setPreDataList(dataList, bearing); if (mRenderHandler != null) { mRenderHandler.removeCallbacks(mPreRenderTask); mRenderHandler.post(mPreRenderTask); diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/PredictionOverlayDrawer2.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/PredictionOverlayDrawer2.java index f273e10057..551acf876f 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/PredictionOverlayDrawer2.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/PredictionOverlayDrawer2.java @@ -1,7 +1,6 @@ package com.mogo.eagle.core.function.business.routeoverlay; import static com.mogo.map.MogoMap.DEFAULT; -import static com.mogo.map.MogoMap.SMALL_PRED_MAP; import static com.mogo.map.MogoMap.SMALL_PRED_MAP2; import static com.mogo.map.MogoMap.SMALL_PRED_MAP3; @@ -16,6 +15,7 @@ import androidx.core.util.Pools; import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.data.map.MogoLatLng; import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager; +import com.mogo.eagle.core.function.call.map.CallerMapIdentifyManager; import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager; import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; import com.mogo.eagle.core.utilcode.util.DrivingDirectionUtils; @@ -32,6 +32,7 @@ import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import kotlin.Pair; +import mogo.telematics.pad.MessagePad; public class PredictionOverlayDrawer2 { @@ -51,7 +52,7 @@ public class PredictionOverlayDrawer2 { mogoOverlayManager = CallerMapUIServiceManager.INSTANCE.getOverlayManager(); if (mogoOverlayManager != null) { // 线条粗细,渐变,渐变色值 - HandlerThread renderTask = new HandlerThread("prediction_render2") { + HandlerThread renderTask = new HandlerThread("prediction_render") { @Override protected void onLooperPrepared() { super.onLooperPrepared(); @@ -144,7 +145,7 @@ public class PredictionOverlayDrawer2 { isExcept = true; return; } - boolean isColorfulStrategy = !hasGreenWave && !AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode) || !AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode); + boolean isColorfulStrategy = false; if (isColorfulStrategy) { RouteStrategy.INSTANCE.start(); } else { @@ -209,9 +210,6 @@ public class PredictionOverlayDrawer2 { lat = CallerChassisLocationWGS84ListenerManager.INSTANCE.getChassisLocationWGS84().getLatitude(); long angle = isPointOnCarFront(lon, lat, bearing, first.lon, first.lat); if (angle >= 90) { - if (isColorfulStrategy) { - RouteStrategy.INSTANCE.remove(first.acc); - } pools.release(first); points.poll(); } @@ -272,10 +270,10 @@ public class PredictionOverlayDrawer2 { if (mPolylineOptions == null) { mPolylineOptions = options; } - if (FunctionBuildConfig.isDrawDecIdentifyData) { - if (preViewType == 2) { + if (FunctionBuildConfig.isDrawPreIdentifyData) { + if (preViewType == 2 && CallerMapIdentifyManager.INSTANCE.isPreView2Loaded()) { overlayManager.showOrUpdateLine(options, SMALL_PRED_MAP2); - } else if (preViewType == 3) { + } else if (preViewType == 3 && CallerMapIdentifyManager.INSTANCE.isPreView3Loaded()) { overlayManager.showOrUpdateLine(options, SMALL_PRED_MAP3); } } @@ -309,7 +307,7 @@ public class PredictionOverlayDrawer2 { public void drawPredictionList(List dataList, double bearing, boolean hasGreenWave, int preType, int largeType) { IMogoMap iMogoMap = MogoMap.Companion.getMapInstance().getMogoMap(DEFAULT); - double[] arr = null; + double[] arr; if (mogoOverlayManager != null && iMogoMap != null) { if (mPreRenderTask == null) { mPreRenderTask = new RenderTask(); diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/PredictionOverlayDrawer3.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/PredictionOverlayDrawer3.java new file mode 100644 index 0000000000..09b8e762c3 --- /dev/null +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/PredictionOverlayDrawer3.java @@ -0,0 +1,341 @@ +package com.mogo.eagle.core.function.business.routeoverlay; + +import static com.mogo.map.MogoMap.DEFAULT; +import static com.mogo.map.MogoMap.SMALL_PRED_MAP2; +import static com.mogo.map.MogoMap.SMALL_PRED_MAP3; + +import android.annotation.SuppressLint; +import android.graphics.Color; +import android.os.Handler; +import android.os.HandlerThread; +import android.util.Log; + +import androidx.core.util.Pools; + +import com.mogo.eagle.core.data.config.FunctionBuildConfig; +import com.mogo.eagle.core.data.map.MogoLatLng; +import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager; +import com.mogo.eagle.core.function.call.map.CallerMapIdentifyManager; +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager; +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; +import com.mogo.eagle.core.utilcode.util.DrivingDirectionUtils; +import com.mogo.map.IMogoMap; +import com.mogo.map.MogoMap; +import com.mogo.map.overlay.IMoGoOverlayManager; +import com.mogo.map.overlay.core.Level; +import com.mogo.map.overlay.line.Polyline; +import com.zhidaoauto.map.sdk.open.common.tools.MapTools; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + +import kotlin.Pair; + +public class PredictionOverlayDrawer3 { + + private static final String TAG = "PredictionOverlayDrawer3"; + + // 连接线参数 + private Handler mRenderHandler; + private final IMoGoOverlayManager mogoOverlayManager; + private static volatile PredictionOverlayDrawer3 sInstance; + private static final byte[] obj = new byte[0]; + private static final int COLOR_LIGHT = Color.parseColor("#BAEBF5"); + + private final List greenWaveColors = new ArrayList<>(); + + private PredictionOverlayDrawer3() { + // 渐变色 + mogoOverlayManager = CallerMapUIServiceManager.INSTANCE.getOverlayManager(); + if (mogoOverlayManager != null) { + // 线条粗细,渐变,渐变色值 + HandlerThread renderTask = new HandlerThread("prediction_render2") { + @Override + protected void onLooperPrepared() { + super.onLooperPrepared(); + mRenderHandler = new Handler(getLooper()); + } + }; + renderTask.start(); + ArrayList> temps = new ArrayList<>(); + temps.add(new Pair<>(0, 51)); + temps.add(new Pair<>(10, 102)); + temps.add(new Pair<>(30, 51)); + temps.add(new Pair<>(100, 0)); + List alphas = MapTools.INSTANCE.getColorAlpha(temps); + if (alphas != null && !alphas.isEmpty()) { + for (int i : alphas) { + greenWaveColors.add(Color.argb(i, 48, 163, 255)); + } + } + } + } + + public static PredictionOverlayDrawer3 getInstance() { + if (sInstance == null) { + synchronized (obj) { + if (sInstance == null) { + sInstance = new PredictionOverlayDrawer3(); + } + } + } + return sInstance; + } + + public void clearPreRouteOverlay() { + if (mogoOverlayManager != null) { + if (mPreRenderTask != null) { + mRenderHandler.removeCallbacks(mPreRenderTask); + } + mogoOverlayManager.hideAllLinesInLevel(Level.GUIDE_ROUTE_LINE); + } + } + + private class RenderTask implements Runnable { + private volatile List predictionList; + + private final Pools.Pool pools; + private final LinkedList points; + + private double bearing; + private boolean hasGreenWave; + private int preViewType; + private int largeType; + + private Polyline.Options mPolylineOptions; + //用于taxi乘客屏渐变颜色集合 + private List colors = null; + + public RenderTask() { + this.pools = new Pools.SimplePool<>(500); + this.points = new LinkedList<>(); + mPolylineOptions = new Polyline.Options.Builder("prediction_overlay" + preViewType, Level.GUIDE_ROUTE_LINE) + .setUseGps(true) + .setWidth(20) + .setIsGradient(true) + .build(); + } + + public void setPreData(List data, double bearing, boolean hasGreenWave, int preType, int largeType) { + predictionList = data; + this.bearing = bearing; + this.hasGreenWave = hasGreenWave; + preViewType = preType; + this.largeType = largeType; + } + + @SuppressLint("LongLogTag") + @Override + public void run() { + IMoGoOverlayManager overlayManager = mogoOverlayManager; + if (overlayManager == null) { + return; + } + LinkedList pps = this.points; + boolean isExcept = false; + int total; + + try { + pps.clear(); + List routes = this.predictionList; + if (routes == null || (total = routes.size()) < 2) { + isExcept = true; + return; + } + boolean isColorfulStrategy = false; + if (isColorfulStrategy) { + RouteStrategy.INSTANCE.start(); + } else { + if (colors == null || colors.isEmpty()) { + ArrayList> temps = new ArrayList<>(); + temps.add(new Pair<>(0, 51)); + temps.add(new Pair<>(10, 102)); + temps.add(new Pair<>(30, 51)); + temps.add(new Pair<>(100, 0)); + List alphas = MapTools.INSTANCE.getColorAlpha(temps); + if (alphas != null && !alphas.isEmpty()) { + colors = new CopyOnWriteArrayList<>(); + for (int i : alphas) { + colors.add(Color.argb(i, 48, 163, 255)); + } + } + } + } + for (int i = 0; i < total; i++) { + MogoLatLng route = null; + try { + route = routes.get(i); + if (route == null) { + continue; + } + } catch (Throwable t) { + Log.d("Route", "render-error:" + t.getMessage()); + } + if (route == null) { + //数组越界了,结束循环 + break; + } + MogoLatLng acquire = pools.acquire(); + double latitude = route.getLat(); + double longitude = route.getLon(); + if (acquire == null) { + acquire = new MogoLatLng(latitude, longitude); + } else { + acquire.lon = longitude; + acquire.lat = latitude; + } + acquire.acc = 0.0;// 加速度 + acquire.speed = 0.0;// 速度 + pps.add(acquire); + if (isColorfulStrategy) { + RouteStrategy.INSTANCE.check(0.0, 0.0, predictionList.size()); + } + } + double lon = CallerChassisLocationWGS84ListenerManager.INSTANCE.getChassisLocationWGS84().getLongitude(); + double lat = CallerChassisLocationWGS84ListenerManager.INSTANCE.getChassisLocationWGS84().getLatitude(); + if (!points.isEmpty()) { + MogoLatLng top = null; + while (!points.isEmpty()) { + MogoLatLng first = points.peek(); + if (first == null) { + continue; + } + if (first == top) { + break; + } + lon = CallerChassisLocationWGS84ListenerManager.INSTANCE.getChassisLocationWGS84().getLongitude(); + lat = CallerChassisLocationWGS84ListenerManager.INSTANCE.getChassisLocationWGS84().getLatitude(); + long angle = isPointOnCarFront(lon, lat, bearing, first.lon, first.lat); + if (angle >= 90) { + if (isColorfulStrategy) { + RouteStrategy.INSTANCE.remove(first.acc); + } + pools.release(first); + points.poll(); + } + top = first; + } + if (points.isEmpty()) { + isExcept = true; + return; + } + MogoLatLng self = pools.acquire(); + if (self == null) { + self = new MogoLatLng(lat, lon); + } else { + self.lat = lat; + self.lon = lon; + } + points.addFirst(self); + + Polyline.Options.Builder builder; + if (mPolylineOptions == null) { + builder = new Polyline.Options.Builder("prediction_overlay" + preViewType, Level.GUIDE_ROUTE_LINE) + .setUseGps(true) + .setWidth(20) + .setIsGradient(true); + } else { + builder = mPolylineOptions.builder(); + } + + if (isColorfulStrategy) { + RouteStrategy.INSTANCE.end(); + Strategy strategy = RouteStrategy.INSTANCE.getStrategy(); + List colors = strategy.getColors(); + boolean isLightOn = strategy instanceof ColorfulStrategy && ((ColorfulStrategy) strategy).isLightOn(); + builder.colors(colors); + builder.setLightOn(isLightOn); + builder.setLightColor(COLOR_LIGHT); + builder.setLightSpeed(0.3f); + } else { + if (!hasGreenWave) { + if (colors != null && !colors.isEmpty()) { + builder.colors(colors); + builder.setIsGradient(true); + builder.setLightOn(true); + builder.isShowArrow(false); + builder.setLightColor(COLOR_LIGHT); + builder.setLightSpeed(0.3f); + } + } else { + builder.colors(greenWaveColors) + .setIsGradient(true) + .setLightOn(false) + .isShowArrow(true); + } + } + builder.points(points); + builder.setVisible(true); + Polyline.Options options = builder.build(); + if (mPolylineOptions == null) { + mPolylineOptions = options; + } + if (FunctionBuildConfig.isDrawDecIdentifyData) { + if (preViewType == 2 && CallerMapIdentifyManager.INSTANCE.isPreView2Loaded()) { + overlayManager.showOrUpdateLine(options, SMALL_PRED_MAP2); + } else if (preViewType == 3 && CallerMapIdentifyManager.INSTANCE.isPreView3Loaded()) { + overlayManager.showOrUpdateLine(options, SMALL_PRED_MAP3); + } + } + } else { + isExcept = true; + } + } catch (Throwable t) { + t.printStackTrace(); + } finally { + if (isExcept) { + setVisible(false); + } + if (!points.isEmpty()) { + for (int i = 0; i < points.size(); i++) { + MogoLatLng latLng = points.get(i); + if (latLng == null) { + continue; + } + pools.release(latLng); + } + } + } + } + + private long isPointOnCarFront(double car_lon, double car_lat, double car_head, double lon, double lat) { + return DrivingDirectionUtils.getDegreeOfCar2Poi2(car_lon, car_lat, lon, lat, car_head); + } + } + + private volatile RenderTask mPreRenderTask; + + public void drawPredictionList(List dataList, double bearing, boolean hasGreenWave, int preType, int largeType) { + IMogoMap iMogoMap = MogoMap.Companion.getMapInstance().getMogoMap(DEFAULT); + double[] arr = null; + if (mogoOverlayManager != null && iMogoMap != null) { + if (mPreRenderTask == null) { + mPreRenderTask = new RenderTask(); + } + List latLngList = new ArrayList<>(); + for (geometry.Geometry.Point point : dataList) { + arr = iMogoMap.switchData(point.getX(), point.getY(), false); + if (arr == null || arr.length < 2) continue; + latLngList.add(new MogoLatLng(arr[1], arr[0])); + } + if (latLngList.isEmpty()) return; + mPreRenderTask.setPreData(latLngList, bearing, hasGreenWave, preType, largeType); + if (mRenderHandler != null) { + mRenderHandler.removeCallbacks(mPreRenderTask); + mRenderHandler.post(mPreRenderTask); + } + } + } + + public void setVisible(boolean isVisible) { + if (mogoOverlayManager != null) { + if (isVisible) { + mogoOverlayManager.showAllLinesInLevel(Level.GUIDE_ROUTE_LINE); + } else { + mogoOverlayManager.hideAllLinesInLevel(Level.GUIDE_ROUTE_LINE); + } + } + } +} diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/RouteOverlayDrawer.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/RouteOverlayDrawer.java index 512a7941f5..a65047f64b 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/RouteOverlayDrawer.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/RouteOverlayDrawer.java @@ -13,6 +13,7 @@ import androidx.core.util.Pools; import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.data.map.MogoLatLng; import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager; +import com.mogo.eagle.core.function.call.map.CallerMapIdentifyManager; import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager; import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; import com.mogo.eagle.core.utilcode.util.DrivingDirectionUtils; @@ -187,8 +188,8 @@ public class RouteOverlayDrawer { RouteStrategy.INSTANCE.check(route.getVelocity(), route.getAcceleration(), routeList.size()); } } - double lon = CallerChassisLocationWGS84ListenerManager.INSTANCE.getChassisLocationWGS84().getLongitude(); - double lat = CallerChassisLocationWGS84ListenerManager.INSTANCE.getChassisLocationWGS84().getLatitude(); + double lon = CallerChassisLocationWGS84ListenerManager.INSTANCE.getWgs84Lon(); + double lat = CallerChassisLocationWGS84ListenerManager.INSTANCE.getWgs84Lat(); if (!points.isEmpty()) { MogoLatLng top = null; while (!points.isEmpty()) { @@ -199,8 +200,8 @@ public class RouteOverlayDrawer { if (first == top) { break; } - lon = CallerChassisLocationWGS84ListenerManager.INSTANCE.getChassisLocationWGS84().getLongitude(); - lat = CallerChassisLocationWGS84ListenerManager.INSTANCE.getChassisLocationWGS84().getLatitude(); + lon = CallerChassisLocationWGS84ListenerManager.INSTANCE.getWgs84Lon(); + lat = CallerChassisLocationWGS84ListenerManager.INSTANCE.getWgs84Lat(); long angle = isPointOnCarFront(lon, lat, bearing, first.lon, first.lat); if (angle >= 90) { if (isColorfulStrategy) { @@ -267,7 +268,7 @@ public class RouteOverlayDrawer { mPolylineOptions = options; } overlayManager.showOrUpdateLine(options,DEFAULT); - if (FunctionBuildConfig.isDrawDecIdentifyData) { + if (FunctionBuildConfig.isDrawDecIdentifyData && CallerMapIdentifyManager.INSTANCE.isDecViewLoaded()) { overlayManager.showOrUpdateLine(options,SMALL_DES_MAP); } } else { diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/DecisionMapView.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/DecisionMapView.kt index 743725356f..fef5b4f775 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/DecisionMapView.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/DecisionMapView.kt @@ -11,6 +11,7 @@ import com.mogo.eagle.core.data.map.MogoLocation import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationWGS84Listener import com.mogo.eagle.core.function.api.map.road.IMoGoMapRoadListener import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager +import com.mogo.eagle.core.function.call.map.CallerMapIdentifyManager.isDecViewLoaded import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_MAP @@ -92,6 +93,11 @@ class DecisionMapView(context: Context?, attrs: AttributeSet?) : MogoMapView(con override fun onMapInit() {} + override fun onDestroy() { + isDecViewLoaded = false + super.onDestroy() + } + override fun onMapLoaded() { (mMapView.mapView as MapAutoView).getMapView()?.getMapEngine()?.setHDTypeVisible( intArrayOf( @@ -101,6 +107,7 @@ class DecisionMapView(context: Context?, attrs: AttributeSet?) : MogoMapView(con HDTypes.regional.type ) ) + isDecViewLoaded = true } override fun onChassisLocationWGS84(gnssInfo: MogoLocation) { diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/PredictionMap2View.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/PredictionMap2View.kt index 1515d7c40b..f112f60456 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/PredictionMap2View.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/PredictionMap2View.kt @@ -11,6 +11,7 @@ import com.mogo.eagle.core.data.map.MogoLocation import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationWGS84Listener import com.mogo.eagle.core.function.api.map.road.IMoGoMapRoadListener import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager +import com.mogo.eagle.core.function.call.map.CallerMapIdentifyManager import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_MAP @@ -96,6 +97,11 @@ class PredictionMap2View(context: Context, attrs: AttributeSet) : MogoMapView(co override fun onMapInit() {} + override fun onDestroy() { + CallerMapIdentifyManager.isPreView2Loaded = false + super.onDestroy() + } + override fun onMapLoaded() { (mMapView.mapView as MapAutoView).getMapView()?.getMapEngine()?.setHDTypeVisible( intArrayOf( @@ -105,6 +111,7 @@ class PredictionMap2View(context: Context, attrs: AttributeSet) : MogoMapView(co HDTypes.regional.type ) ) + CallerMapIdentifyManager.isPreView2Loaded = true } override fun onChassisLocationWGS84(gnssInfo: MogoLocation) { diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/PredictionMap3View.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/PredictionMap3View.kt index 0cd8608d8a..a4496a814d 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/PredictionMap3View.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/PredictionMap3View.kt @@ -11,6 +11,7 @@ import com.mogo.eagle.core.data.map.MogoLocation import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationWGS84Listener import com.mogo.eagle.core.function.api.map.road.IMoGoMapRoadListener import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager +import com.mogo.eagle.core.function.call.map.CallerMapIdentifyManager import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_MAP @@ -96,6 +97,11 @@ class PredictionMap3View(context: Context, attrs: AttributeSet) : MogoMapView(co override fun onMapInit() {} + override fun onDestroy() { + CallerMapIdentifyManager.isPreView3Loaded = false + super.onDestroy() + } + override fun onMapLoaded() { (mMapView.mapView as MapAutoView).getMapView()?.getMapEngine()?.setHDTypeVisible( intArrayOf( @@ -105,6 +111,7 @@ class PredictionMap3View(context: Context, attrs: AttributeSet) : MogoMapView(co HDTypes.regional.type ) ) + CallerMapIdentifyManager.isPreView3Loaded = true } override fun onChassisLocationWGS84(gnssInfo: MogoLocation) { diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/PredictionMapView.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/PredictionMapView.kt index 37863c5625..704a9d6f1a 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/PredictionMapView.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/PredictionMapView.kt @@ -11,6 +11,7 @@ import com.mogo.eagle.core.data.map.MogoLocation import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationWGS84Listener import com.mogo.eagle.core.function.api.map.road.IMoGoMapRoadListener import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager +import com.mogo.eagle.core.function.call.map.CallerMapIdentifyManager import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_MAP @@ -118,6 +119,12 @@ class PredictionMapView(context: Context, attrs: AttributeSet) : MogoMapView(con HDTypes.regional.type ) ) + CallerMapIdentifyManager.isPreViewLoaded = true + } + + override fun onDestroy() { + CallerMapIdentifyManager.isPreViewLoaded = false + super.onDestroy() } override fun onChassisLocationWGS84(gnssInfo: MogoLocation) { diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerChassisLocationWGS84ListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerChassisLocationWGS84ListenerManager.kt index b32432e730..1ccc1fecda 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerChassisLocationWGS84ListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerChassisLocationWGS84ListenerManager.kt @@ -21,6 +21,18 @@ object CallerChassisLocationWGS84ListenerManager : CallerBase