From a22b74e6eec08361950ed21bdddbe4630c0869ac Mon Sep 17 00:00:00 2001 From: renwj Date: Fri, 5 Jul 2024 19:23:28 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[6.5.0][=E9=81=93=E8=B7=AF=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6]=20=E8=A1=8C=E4=BA=BA/=E9=9D=9E=E6=9C=BA=E5=8A=A8?= =?UTF-8?q?=E8=BD=A6=E6=A8=AA=E7=A9=BF=E9=A2=84=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt | 53 +++++- .../biz/v2x/v2n/remove/MarkerRemoveManager.kt | 6 +- .../v2n/scenario/scene/airoad/AiRoadMarker.kt | 159 +++++++++++------- .../scene/road/V2XRoadEventMarker.java | 2 +- .../core/function/hmi/ui/MoGoHmiProvider.kt | 10 ++ .../eagle/core/data/enums/EventTypeEnumNew.kt | 10 ++ .../core/utilcode/floating/MoGoPopWindow.kt | 21 ++- 7 files changed, 196 insertions(+), 65 deletions(-) diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt index 1dde27aca1..aa247339e8 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt @@ -11,6 +11,7 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.enums.CommunicationType import com.mogo.eagle.core.data.enums.DataSourceType import com.mogo.eagle.core.data.enums.EventTypeEnumNew +import com.mogo.eagle.core.data.enums.TrafficTypeEnum import com.mogo.eagle.core.data.enums.WarningDirectionEnum.ALERT_WARNING_TOP import com.mogo.eagle.core.data.map.entity.MarkerExploreWay import com.mogo.eagle.core.data.map.entity.MarkerLocation @@ -31,6 +32,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerV2XListenerManager.V2NC import com.mogo.eagle.core.function.call.autopilot.CallerV2nNioEventListenerManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager import com.mogo.eagle.core.function.call.hmi.CallerRoadV2NEventWindowListenerManager +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager.saveMsgBox import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils @@ -42,6 +44,8 @@ import com.mogo.eagle.core.utilcode.util.CoordinateUtils import com.mogo.eagle.core.utilcode.util.DrivingDirectionUtils import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.eagle.function.biz.v2x.V2XBizTrace +import com.mogo.eagle.function.biz.v2x.v2n.consts.V2XConst +import com.mogo.eagle.function.biz.v2x.v2n.remove.MarkerWrapper import com.mogo.eagle.function.biz.v2x.v2n.scenario.scene.airoad.AiRoadMarker import com.mogo.eagle.function.biz.v2x.v2n.scenario.scene.airoad.AiRoadMarker.Marker import com.mogo.eagle.function.biz.v2x.v2n.utils.EventDismissBean @@ -51,6 +55,8 @@ import com.mogo.eagle.function.biz.v2x.v2n.utils.V2NUtils import com.mogo.eagle.function.biz.v2x.v2n.utils.V2XEventAnalyticsManager import com.mogo.map.MapDataWrapper import com.mogo.map.entities.Lane +import com.mogo.map.overlay.core.Level.MAP_MARKER +import com.mogo.map.overlay.point.Point import mogo.telematics.pad.MessagePad import mogo.telematics.pad.MessagePad.Header import mogo.telematics.pad.MessagePad.TrackedObject @@ -58,6 +64,7 @@ import mogo.telematics.pad.MessagePad.V2nCrossSpeed import mogo.v2x.MogoV2X import mogo.v2x.MogoV2X.RSI_PB import mogo.v2x.MogoV2X.RTEData_PB +import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.TimeUnit.SECONDS import kotlin.math.abs @@ -73,6 +80,13 @@ internal object V2NIdentifyDrawer: IEventDismissListener { private const val MSG_WHAT_DRAW_YONGDU = 0x1012 // 交通拥堵 private const val MSG_WHAT_DRAW_OTHER_RETROGRADE_VEHICLE = 0x1013 // 他车倒车/逆行 private const val MSG_WHAT_DRAW_GREEN_WAVE = 0x1014 // 绿波通行 + private const val MSG_WHAT_DRAW_PEOPLE_CROSS = 0x1015 // 行人横穿 + + private val builder_people_cross by lazy { + Point.Options.Builder(V2XConst.V2X_MARKER_OWNER, MAP_MARKER).isUseGps(true).anchorColor("#D65D5AFF").set3DMode(true).icon3DRes(TrafficTypeEnum.TYPE_TRAFFIC_ID_PEOPLE.traffic3DIconId) + } + + private val markers by lazy { ConcurrentHashMap() } private val callback = Handler.Callback { msg -> if (msg.what == MSG_WHAT_DRAW_SHIGONE || msg.what == MSG_WHAT_DRAW_SHIGU) { @@ -385,6 +399,35 @@ internal object V2NIdentifyDrawer: IEventDismissListener { } } } + } else if (msg.what == MSG_WHAT_DRAW_PEOPLE_CROSS) { + val data = msg.obj as? MessagePad.Event ?: return@Callback true + AiRoadMarker.aiMakers.getOrPut(data.eventId) { + AiRoadMarker() + }.apply { + val isDriver = AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) + val carLocation = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84() + val distance = CoordinateUtils.calculateLineDistance(carLocation.longitude, carLocation.latitude, data.longitude, data.latitude) + if (distance > 150) { + Logger.i(TAG, "people cross --> distance > 150") + V2XBizTrace.onAck(TAG, mapOf("people cross" to "distance > 150"), true) + return@Callback true + } + val cameraIp = if(TextUtils.isEmpty(data.exts)) "" + else (GsonUtils.fromJson(data.exts, Map::class.java)["cameraIp"])?:"" + // 弹事件框 + CallerRoadV2NEventWindowListenerManager.showLiveVideo( + data.eventId, + data.timestamp, + EventTypeEnumNew.getUpdateIconRes(EventTypeEnumNew.TYPE_SOCKET_ROAD_PEOPLE_CROSS.poiType), + String.format(EventTypeEnumNew.getAlarmContent(EventTypeEnumNew.TYPE_SOCKET_ROAD_PEOPLE_CROSS.poiType), distance.toInt()), + isDriver, + cameraIp.toString(), + data.longitude, + data.latitude) + + }.also { + it.marker(Marker(data.eventId, EventTypeEnumNew.TYPE_SOCKET_ROAD_PEOPLE_CROSS.poiType, data.longitude, data.latitude, 0.0), drawMarker = true, false, isHighFrequency = true) + }.receive() } true } @@ -573,6 +616,14 @@ internal object V2NIdentifyDrawer: IEventDismissListener { } } + private fun drawPeopleCross(event: MessagePad.Event) { + Log.d("V2NIdentifyDrawer", "---drawPeopleCross---: $event, [${FunctionBuildConfig.v2nMainSwitch}, ${FunctionBuildConfig.isNewV2NData}]") + if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nMainSwitch && FunctionBuildConfig.isNewV2NData) { + handler.removeMessages(MSG_WHAT_DRAW_PEOPLE_CROSS) + handler.sendMessage(Message.obtain(handler, MSG_WHAT_DRAW_PEOPLE_CROSS, event)) + } + } + private val nioEventListener = object : IMoGoV2nNioEventListener { override fun onV2nNioCongestionEvent(congestion: MessagePad.V2nCongestion) { super.onV2nNioCongestionEvent(congestion) @@ -582,7 +633,7 @@ internal object V2NIdentifyDrawer: IEventDismissListener { override fun onV2nNioCrossoverEvent(event: MessagePad.Event) { super.onV2nNioCrossoverEvent(event) V2XBizTrace.onAck(event,"onV2nNioCrossoverEvent", true) - //TODO renwj + drawPeopleCross(event) } override fun onV2nNioGreenWavePassageEvent(crossSpeed: V2nCrossSpeed) { diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/remove/MarkerRemoveManager.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/remove/MarkerRemoveManager.kt index 2727b00f5f..14311ff67a 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/remove/MarkerRemoveManager.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/remove/MarkerRemoveManager.kt @@ -19,7 +19,7 @@ import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicReference -data class MarkerWrapper(val id: String, val lon: Double, val lat: Double, val coordinateType: Int, var markers: ArrayList? = null, var lines: ArrayList? = null, var elapsedDistance: Int = 500, var elapsedDuration: Long = -1, var onRemoved:((id: String) -> Unit)? = null) { +data class MarkerWrapper(val id: String, var lon: Double, var lat: Double, val coordinateType: Int, var markers: ArrayList? = null, var lines: ArrayList? = null, var elapsedDistance: Int = 500, var elapsedDuration: Long = -1, var onRemoved:((id: String) -> Unit)? = null) { fun addLine(line: Polyline) { var ll = this.lines @@ -215,4 +215,8 @@ object MarkerRemoveManager { handler.postDelayed(checkTask, 1000) } } + + fun peekMarker(id: String): MarkerWrapper? { + return showedMarkers.find { it.id == id } + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/scenario/scene/airoad/AiRoadMarker.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/scenario/scene/airoad/AiRoadMarker.kt index 46eca765cc..fc6e5b4e8b 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/scenario/scene/airoad/AiRoadMarker.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/scenario/scene/airoad/AiRoadMarker.kt @@ -21,11 +21,15 @@ import com.mogo.eagle.function.biz.v2x.v2n.remove.MarkerRemoveManager import com.mogo.eagle.function.biz.v2x.v2n.remove.MarkerWrapper import com.mogo.eagle.function.biz.v2x.v2n.scenario.scene.road.V2XAiRoadEventMarker import com.mogo.map.MogoData.Companion.mogoMapData +import com.mogo.map.overlay.core.Level +import com.mogo.map.overlay.core.Level.MAP_MARKER import com.mogo.map.overlay.core.Level.ROAD_CENTER_LINE import com.mogo.map.overlay.line.Polyline +import com.mogo.map.overlay.point.Point import com.zhidaoauto.map.data.road.CenterLine import java.util.* import java.util.concurrent.ConcurrentHashMap +import java.util.concurrent.CopyOnWriteArraySet import java.util.concurrent.TimeUnit import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.atomic.AtomicReference @@ -42,10 +46,19 @@ class AiRoadMarker { private const val TAG = "AiRoadMarker" private val COLOR_START = Color.parseColor("#002ABAD9") private val COLOR_END = Color.parseColor("#66FF7A30") + private val builders by lazy { ConcurrentHashMap() } + + private val markerIds by lazy { CopyOnWriteArraySet() } + + internal fun getOrPutPointOptionBuilder(id: String, owner: String, level: Level): Point.Options.Builder { + return builders.getOrPut(id) { Point.Options.Builder(owner, level) } + } } private val marker by lazy { AtomicReference() } + + private val overlayManager by lazy { CallerMapUIServiceManager.getOverlayManager() } @@ -84,68 +97,98 @@ class AiRoadMarker { .setWidth(50f).setUseGps(true) } - fun marker(marker: Marker, drawMarker: Boolean, drawRoadLine: Boolean = false) { - v2nDrawHandler.post { - val location = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84() - this.marker.set(marker) - var elapsedDistance = 500 - if (marker.poiType == EventTypeEnumNew.TYPE_SOCKET_ROAD_GREE_WAVE.poiType) { - elapsedDistance = 10 - } - var elapsedDuration = -1L - if (marker.poiType == EventTypeEnumNew.TYPE_SOCKET_ROAD_GREE_WAVE.poiType) { - elapsedDuration = TimeUnit.SECONDS.toMillis(3) - } - val wrapper = MarkerWrapper(marker.id, marker.poi_lon, marker.poi_lat, 1, elapsedDistance = elapsedDistance, elapsedDuration = elapsedDuration) - if (drawMarker) { - marker.entity?.apply { roadMarker.drawMarkers(this, wrapper) } - } - if (drawRoadLine) { - //施工中心点前方的自车行驶方向上300米距离 - var l1: CenterLine? = null - var l2: CenterLine? = null - mogoMapData.get()?.getCenterLineRangeInfo( - marker.poi_lon, - marker.poi_lat, - location.heading.toFloat(), - 300f, call = { result -> - //施工中心点后方的自车行驶方向上300米距离 - result?.let { - V2XBizTrace.onAck("$TAG -marker-3-l1:", it) - l1 = result - } - countDown.incrementAndGet() - realMark(marker, wrapper, l1, l2, location.heading) - }) - mogoMapData.get()?.getCenterLineRangeInfo( - marker.poi_lon, - marker.poi_lat, - location.heading.toFloat(), - -200f, call = { result -> - result?.let { - V2XBizTrace.onAck("$TAG -marker-3-l2:", it) - l2 = result - } - countDown.incrementAndGet() - realMark(marker, wrapper, l1, l2, location.heading) - }) + fun marker(marker: Marker, drawMarker: Boolean, drawRoadLine: Boolean = false, isHighFrequency:Boolean = false) { + val markerId = marker.id + if (isHighFrequency && drawMarker) { + val builder = getOrPutPointOptionBuilder(markerId, V2XConst.V2X_MARKER_OWNER, MAP_MARKER) + builder + .set3DMode(true) + .isUseGps(true) + .icon3DRes(EventTypeEnumNew.getMarker3DRes(marker.poiType)) + .anchorColor("#D65D5AFF") + .longitude(marker.poi_lon) + .latitude(marker.poi_lat) + CallerMapUIServiceManager.getOverlayManager()?.showOrUpdatePoint(builder.build())?.let { p -> + if (!markerIds.contains(markerId)) { + markerIds.add(markerId) + val wrapper = MarkerWrapper(markerId, marker.poi_lon, marker.poi_lat, 1, elapsedDistance = 10) + wrapper.onRemoved = { + builders.remove(markerId) + markerIds.remove(p.id) + } + wrapper.addPoint(p) + MarkerRemoveManager.addMarker(wrapper) + } else { + MarkerRemoveManager.peekMarker(markerId)?.also { + it.lon = marker.poi_lon + it.lat = marker.poi_lat + } + } } + } else { + v2nDrawHandler.post { + val location = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84() + this.marker.set(marker) + var elapsedDistance = 500 + if (marker.poiType == EventTypeEnumNew.TYPE_SOCKET_ROAD_GREE_WAVE.poiType) { + elapsedDistance = 10 + } + var elapsedDuration = -1L + if (marker.poiType == EventTypeEnumNew.TYPE_SOCKET_ROAD_GREE_WAVE.poiType) { + elapsedDuration = TimeUnit.SECONDS.toMillis(3) + } + val wrapper = MarkerWrapper(markerId, marker.poi_lon, marker.poi_lat, 1, elapsedDistance = elapsedDistance, elapsedDuration = elapsedDuration) + if (drawMarker) { + marker.entity?.apply { roadMarker.drawMarkers(this, wrapper) } + } + if (drawRoadLine) { + //施工中心点前方的自车行驶方向上300米距离 + var l1: CenterLine? = null + var l2: CenterLine? = null + mogoMapData.get()?.getCenterLineRangeInfo( + marker.poi_lon, + marker.poi_lat, + location.heading.toFloat(), + 300f, call = { result -> + //施工中心点后方的自车行驶方向上300米距离 + result?.let { + V2XBizTrace.onAck("$TAG -marker-3-l1:", it) + l1 = result + } + countDown.incrementAndGet() + realMark(marker, wrapper, l1, l2, location.heading) + }) + mogoMapData.get()?.getCenterLineRangeInfo( + marker.poi_lon, + marker.poi_lat, + location.heading.toFloat(), + -200f, call = { result -> + result?.let { + V2XBizTrace.onAck("$TAG -marker-3-l2:", it) + l2 = result + } + countDown.incrementAndGet() + realMark(marker, wrapper, l1, l2, location.heading) + }) + } - if (marker.poiType == EventTypeEnumNew.TYPE_SOCKET_ROAD_GREE_WAVE.poiType) { - val builder = Polyline.Options.Builder(V2XConst.V2X_MARKER_OWNER, ROAD_CENTER_LINE) - builder.colors(listOf(Color.parseColor("#996DFED0"), Color.parseColor("#CC6DFED0"), Color.parseColor("#C76DFED0"), Color.parseColor("#006DFED0"))) - .setWidth(5f) - .setUseGps(true) - .points(listOf(MogoLatLng(location.latitude, location.longitude), MogoLatLng(marker.poi_lat, marker.poi_lon))) - .setIsGradient(true) - .isShowArrow(true) - CallerMapUIServiceManager.getOverlayManager()?.showOrUpdateLine(builder.build())?.also { wrapper.addLine(it) } + if (marker.poiType == EventTypeEnumNew.TYPE_SOCKET_ROAD_GREE_WAVE.poiType) { + val builder = Polyline.Options.Builder(V2XConst.V2X_MARKER_OWNER, ROAD_CENTER_LINE) + builder.colors(listOf(Color.parseColor("#996DFED0"), Color.parseColor("#CC6DFED0"), Color.parseColor("#C76DFED0"), Color.parseColor("#006DFED0"))) + .setWidth(50f) + .setUseGps(true) + .points(listOf(MogoLatLng(location.latitude, location.longitude), MogoLatLng(marker.poi_lat, marker.poi_lon))) + .setIsGradient(true) + .isShowArrow(true) + CallerMapUIServiceManager.getOverlayManager()?.showOrUpdateLine(builder.build())?.also { wrapper.addLine(it) } + } + wrapper.onRemoved = { id -> + aiMakers.remove(id) + } + MarkerRemoveManager.addMarker(wrapper) } - wrapper.onRemoved = { id -> - aiMakers.remove(id) - } - MarkerRemoveManager.addMarker(wrapper) } + } @Synchronized diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/scenario/scene/road/V2XRoadEventMarker.java b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/scenario/scene/road/V2XRoadEventMarker.java index 5f85dad000..2353f53d63 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/scenario/scene/road/V2XRoadEventMarker.java +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/scenario/scene/road/V2XRoadEventMarker.java @@ -49,7 +49,7 @@ public class V2XRoadEventMarker implements IV2XMarker { MarkerLocation location = noveltyInfo.getLocation(); AiRoadMarker.Marker m = new AiRoadMarker.Marker(noveltyInfo.getInfoId(), noveltyInfo.getPoiType(), gpsLocation.second, gpsLocation.first, location.getAngle(), polygons, null, entity); AiRoadMarker aiMarker = new AiRoadMarker(); - aiMarker.marker(m, true, isDrawRoadLine(m.getPoiType())); + aiMarker.marker(m, true, isDrawRoadLine(m.getPoiType()), false); AiRoadMarker.aiMakers.put(noveltyInfo.getInfoId(), aiMarker); } } else { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt index 523f54857f..e3d7d7fdb9 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt @@ -419,7 +419,17 @@ class MoGoHmiProvider : IMoGoHmiProvider { .width(WindowManager.LayoutParams.WRAP_CONTENT) .height(WindowManager.LayoutParams.WRAP_CONTENT) .attachToActivity(activity) + .draggable(true) .gravityInActivity(Gravity.CENTER) + .also { + if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { + it.offsetX(960) + it.offsetY(445) + } else { + it.offsetX(980) + it.offsetY(-324) + } + } .onDismissed { greenWave.set(null) } diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/EventTypeEnumNew.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/EventTypeEnumNew.kt index e4536b5430..d4505fc70c 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/EventTypeEnumNew.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/EventTypeEnumNew.kt @@ -526,6 +526,13 @@ enum class EventTypeEnumNew( content = "保持当前车速即可通过路口,好丝滑!", tts = "保持当前车速即可通过路口,好丝滑!" ), + TYPE_SOCKET_ROAD_PEOPLE_CROSS( + "100064", + "行人横穿", + poiTypeSrcVr = View.NO_ID, + content = "前方%s米有行人/非机动车横穿,蘑菇提醒您提前减速,注意观察,小心通过", + tts = "前方%s米有行人/非机动车横穿,蘑菇提醒您提前减速,注意观察,小心通过" + ), TYPE_ERROR( 0.toString(), "未知/错误/异常", @@ -822,6 +829,7 @@ enum class EventTypeEnumNew( } } TYPE_SOCKET_ROAD_CONGESTION.poiType -> R.raw.v2x_yongdu + TYPE_SOCKET_ROAD_PEOPLE_CROSS.poiType -> if (FunctionBuildConfig.skinMode != 0) TrafficTypeEnum.TYPE_TRAFFIC_ID_PEOPLE.traffic3DIconId else TrafficTypeEnum.TYPE_TRAFFIC_ID_PEOPLE.traffic3DNightIconId else -> 0 } } @@ -1194,6 +1202,8 @@ enum class EventTypeEnumNew( TYPE_SOCKET_ROAD_CONGESTION.poiType -> R.drawable.v2x_icon_yongdu_vr // 他车逆行/倒车 TYPE_SOCKET_ROAD_OTHER_RETROGRADE_VEHICLE.poiType -> if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) R.drawable.icon_v2x_other_retrograde_vehicle_passenger else R.drawable.icon_v2x_other_retrograde_vehicle_driver + // 行人/非机动车横穿 + TYPE_SOCKET_ROAD_PEOPLE_CROSS.poiType -> if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) R.drawable.icon_xingren_hengchuan_passenger else R.drawable.icon_xingren_hengchuan_driver // 通过公交站 TYPE_USECASE_ROAD_BUS_STATION.poiType -> if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) R.drawable.icon_v2x_bus_station_passenger else R.drawable.icon_v2x_bus_station_driver //拥堵 diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/floating/MoGoPopWindow.kt b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/floating/MoGoPopWindow.kt index 195909129a..9ae5092dc2 100644 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/floating/MoGoPopWindow.kt +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/floating/MoGoPopWindow.kt @@ -15,11 +15,14 @@ import android.widget.PopupWindow import androidx.annotation.LayoutRes import androidx.core.view.doOnAttach import com.mogo.eagle.core.utilcode.kotlin.lifeCycleScope -import com.mogo.eagle.core.utilcode.util.* +import com.mogo.eagle.core.utilcode.mogo.logger.Logger import java.util.concurrent.atomic.AtomicBoolean class MoGoPopWindow private constructor(builder: Builder){ + companion object { + private const val TAG = "MoGoPopWindow" + } private val content: View = builder.content ?: throw AssertionError("要填充的View不能为空") @@ -109,9 +112,19 @@ class MoGoPopWindow private constructor(builder: Builder){ val params = content.rootView.layoutParams as WindowManager.LayoutParams val oldX = params.x val oldY = params.y - val newX = oldX + dx - val newY = oldY + dy + Logger.d(TAG, "oldX: $oldX, oldY: $oldY, dx: $dx, dy:$dy") + var newX = oldX + dx + var newY = oldY + dy if (outer.contains(rawX.toInt(), rawY.toInt())) { + val width = activity.resources.displayMetrics.widthPixels + val height = activity.resources.displayMetrics.heightPixels +// if (newX < 0) { +// newX += newX +// } +// if (newY < 0) { +// newY += height +// } + Logger.d(TAG, "screen_width: $width, screen_height: $height, newX: $newX, newY: $newY, rawX: ${rawX.toInt()}, rawY: ${rawY.toInt()}, width: ${content.width}, height: ${content.height}") pop.update(newX, newY, content.width, content.height) } oldRawX = rawX @@ -252,7 +265,7 @@ class MoGoPopWindow private constructor(builder: Builder){ } fun offsetX(x: Int) = apply { - this.offsetY = x + this.offsetX = x } fun offsetY(y: Int) = apply { From 4f9ecd83739bdb9db96cb130e139398f3466fbb0 Mon Sep 17 00:00:00 2001 From: EmArrow Date: Fri, 5 Jul 2024 19:38:53 +0800 Subject: [PATCH 2/2] [6.5.0] update jiangshiche --- .../identify/TrackerSourceFilterHelper.kt | 4 +++- .../src/main/java/com/mogo/map/IMogoMap.kt | 2 ++ .../com/mogo/map/overlay/IMoGoOverlayManager.kt | 2 ++ .../src/main/java/com/mogo/map/AMapWrapper.kt | 16 ++++++++++++++++ .../mogo/map/overlay/MoGoOverlayManagerImpl.kt | 11 +++++++++-- .../java/com/mogo/map/utils/ObjectUtils.java | 4 ---- 6 files changed, 32 insertions(+), 7 deletions(-) diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackerSourceFilterHelper.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackerSourceFilterHelper.kt index 32708dce2e..f845c24b6c 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackerSourceFilterHelper.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackerSourceFilterHelper.kt @@ -10,6 +10,8 @@ import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils.isPassenger import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils.isTaxi import com.mogo.map.overlay.core.Level import com.mogo.map.overlay.point.Point +import com.zhidaoauto.map.sdk.open.renders.marker.Marker +import com.zhidaoauto.map.sdk.open.renders.marker.MarkerOptions import mogo.telematics.pad.MessagePad.* object TrackerSourceFilterHelper { @@ -112,7 +114,7 @@ object TrackerSourceFilterHelper { .setDisplayAnim(true) .setAnimScale(getAnimScale(data.type)) .build() - CallerMapUIServiceManager.getOverlayManager()?.showOrUpdatePoint(opt) + CallerMapUIServiceManager.getOverlayManager()?.updateAnimPoint(opt) //消息埋点 CallerFuncBizListenerManager.invokeAttrZombieAnalyticsEvent() } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.kt b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.kt index 4c0e2e2bcf..e7ed9a56eb 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.kt +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.kt @@ -33,6 +33,8 @@ interface IMogoMap { fun addPoint(options: Point.Options): IMapPointOverlay? + fun addAnimPoint(options: Point.Options) + fun addLine(options: Polyline.Options): IMapPolylineOverlay? /** diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/overlay/IMoGoOverlayManager.kt b/libraries/mogo-map-api/src/main/java/com/mogo/map/overlay/IMoGoOverlayManager.kt index eb5b53740c..26a6885662 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/overlay/IMoGoOverlayManager.kt +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/overlay/IMoGoOverlayManager.kt @@ -75,4 +75,6 @@ interface IMoGoOverlayManager { fun hideAllPointsExceptIds(vararg ids: String) fun hideAllPointsExceptOwners(vararg owners: String) + + fun updateAnimPoint(options: Point.Options, mapTag:String = DEFAULT) } \ No newline at end of file diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.kt b/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.kt index 5e676954e6..dc6ec64f11 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.kt +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.kt @@ -11,8 +11,10 @@ import com.mogo.map.overlay.wrapper.line.AMapPolylineWrapper import com.mogo.map.overlay.wrapper.point.AMapPointWrapper import com.mogo.map.uicontroller.IMogoMapUIController import com.mogo.map.utils.ObjectUtils +import com.zhidaoauto.map.data.point.LonLatPoint import com.zhidaoauto.map.sdk.open.renders.marker.BatchMarkerOptions import com.zhidaoauto.map.sdk.open.renders.marker.Marker +import com.zhidaoauto.map.sdk.open.renders.marker.MarkerOptions import com.zhidaoauto.map.sdk.open.renders.marker.MarkerSimpleData import com.zhidaoauto.map.sdk.open.renders.marker.OnMarkClickListener import com.zhidaoauto.map.sdk.open.view.MapAutoView @@ -66,6 +68,20 @@ class AMapWrapper(map: MapAutoViewHelper?, mapView: MapAutoView, controller: IMo return AMapPointWrapper(options.id, delegate, mMapView) } + override fun addAnimPoint(options: Point.Options) { + if (!checkAMap()) { + return + } + val markerOptions = MarkerOptions(options.id, mMapView.getMapController()).setGps(true) + .position(LonLatPoint(options.longitude, options.latitude, options.rotate.toDouble())) + val marker = Marker(markerOptions,mMapView.getMapController(), + mMapView.getMapController()?.getMarkerCall() + ) + marker.setDisplayAnimEnable(true) + marker.setAnimResource(options.animRes) + marker.setAnimScale(options.animScale) + } + override fun addLine(options: Polyline.Options): IMapPolylineOverlay? { if (!checkAMap()) { return null diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/overlay/MoGoOverlayManagerImpl.kt b/libraries/mogo-map/src/main/java/com/mogo/map/overlay/MoGoOverlayManagerImpl.kt index 21fb97b044..9ec324879b 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/overlay/MoGoOverlayManagerImpl.kt +++ b/libraries/mogo-map/src/main/java/com/mogo/map/overlay/MoGoOverlayManagerImpl.kt @@ -5,6 +5,7 @@ import android.view.View import com.mogo.eagle.core.data.map.* import com.mogo.eagle.core.function.call.autopilot.* import com.mogo.eagle.core.utilcode.util.* +import com.mogo.map.MogoMap import com.mogo.map.overlay.point.Point.Options import com.mogo.map.MogoMap.Companion.mapInstance import com.mogo.map.overlay.core.* @@ -49,13 +50,15 @@ internal class MoGoOverlayManagerImpl: IMoGoOverlayManager { key.delegate = point it.setToTop() if (options.moveToCenter) { + val wgs84 = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84() + val cj02 = CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02() moveToCenter( mapTag, options.id, options.longitude, options.latitude, - if (options.isGps) CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().longitude else CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().longitude, - if (options.isGps) CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().latitude else CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().latitude + if (options.isGps) wgs84.longitude else cj02.longitude, + if (options.isGps) wgs84.latitude else cj02.latitude ) } } @@ -452,4 +455,8 @@ internal class MoGoOverlayManagerImpl: IMoGoOverlayManager { it.value.setVisible(false) } } + + override fun updateAnimPoint(options: Options, mapTag:String) { + mapInstance.getMogoMap(mapTag)?.addAnimPoint(options) + } } \ No newline at end of file diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/utils/ObjectUtils.java b/libraries/mogo-map/src/main/java/com/mogo/map/utils/ObjectUtils.java index 3165ab8761..192a598c6d 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/utils/ObjectUtils.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/utils/ObjectUtils.java @@ -3,7 +3,6 @@ package com.mogo.map.utils; import android.graphics.Bitmap; import android.graphics.Color; import android.text.TextUtils; -import android.util.Log; import android.view.View; import com.mogo.eagle.core.data.config.FunctionBuildConfig; @@ -65,9 +64,6 @@ public class ObjectUtils { .controlAngle(opt.isControlAngle()) .rotateAngle(opt.getRotate()) .setFlat(opt.isFlat()) -// .setAnimResource() -// .setDisplayAnimEnable() -// .setAnimScale() .visible(opt.isVisible()) .infoWindowEnable(opt.isInfoWindowEnable()) .scale(opt.getScale())