[V2X][Road]添加所有marker清空监听回调;解决相关bug
This commit is contained in:
@@ -63,7 +63,6 @@ public class V2XScenarioManager implements IV2XScenarioManager {
|
||||
Intent intent = new Intent(V2XConst.BROADCAST_SCENE_ACTION);
|
||||
intent.putExtra(V2XConst.BROADCAST_SCENE_EXTRA_KEY, v2XMessageEntity);
|
||||
LocalBroadcastManager.getInstance(Utils.getApp()).sendBroadcast(intent);
|
||||
AiRoadMarker.INSTANCE.clear();
|
||||
// 如果没有拿到之前的,根据类型分发
|
||||
switch (v2XMessageEntity.getType()) {
|
||||
case V2XMessageEntity.V2XTypeEnum.ALERT_ROAD_WARNING:
|
||||
|
||||
@@ -13,8 +13,10 @@ import androidx.lifecycle.Lifecycle.Event.ON_DESTROY
|
||||
import com.mogo.eagle.core.data.map.*
|
||||
import com.mogo.eagle.core.data.map.MapRoadInfo.StopLine
|
||||
import com.mogo.eagle.core.function.api.map.listener.*
|
||||
import com.mogo.eagle.core.function.api.v2x.*
|
||||
import com.mogo.eagle.core.function.call.map.*
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager.OnRoadListener
|
||||
import com.mogo.eagle.core.function.call.v2x.*
|
||||
import com.mogo.eagle.core.function.v2x.events.scenario.scene.road.*
|
||||
import com.mogo.eagle.core.utilcode.kotlin.*
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.*
|
||||
@@ -62,6 +64,23 @@ object AiRoadMarker {
|
||||
}
|
||||
}
|
||||
|
||||
private val onClearAllMarker = object : OnClearAllMarker {
|
||||
|
||||
override fun onClearAllMarkers() {
|
||||
val marker = this@AiRoadMarker.marker.get()
|
||||
if (marker != null) {
|
||||
unMarker(marker)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onClearAllMarkers(tag: String) {
|
||||
val marker = this@AiRoadMarker.marker.get()
|
||||
if (marker != null) {
|
||||
unMarker(marker)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val markers = ConcurrentSet<Marker>()
|
||||
|
||||
private val options by lazy {
|
||||
@@ -174,11 +193,13 @@ object AiRoadMarker {
|
||||
|
||||
private fun onCreate() {
|
||||
CallerMapRoadListenerManager.registerRoadListener(TAG, onRoadListener)
|
||||
CallMarkersClearManager.addAllMarkersClearListener(TAG, onClearAllMarker)
|
||||
CallerMapLocationListenerManager.addListener(TAG, onLocationListener, true)
|
||||
}
|
||||
|
||||
private fun onDestroy() {
|
||||
CallerMapRoadListenerManager.unRegisterRoadListener(TAG)
|
||||
CallMarkersClearManager.removeAllMarkersClearListener(TAG)
|
||||
CallerMapLocationListenerManager.removeListener(TAG, true)
|
||||
pool.shutdownNow()
|
||||
removeLine()
|
||||
@@ -201,7 +222,15 @@ object AiRoadMarker {
|
||||
}
|
||||
|
||||
fun marker(marker: Marker, drawMarker: Boolean) {
|
||||
handler.removeCallbacks(checkExpiredTask)
|
||||
val location = carLocation.get() ?: return
|
||||
if (markers.contains(marker)) {
|
||||
Logger.d(TAG, "--- enqueue --- cache hit ---")
|
||||
return
|
||||
}
|
||||
synchronized(markers) {
|
||||
markers += marker
|
||||
}
|
||||
this.marker.set(marker)
|
||||
//施工中心点前方的自车行驶方向上300米距离
|
||||
val l1 = MogoMap.getInstance().mogoMap.getCenterLineRangeInfo(marker.poi_lon, marker.poi_lat, location.third.toFloat(), 300f)
|
||||
@@ -295,19 +324,7 @@ object AiRoadMarker {
|
||||
markers -= marker
|
||||
removeLine()
|
||||
V2XAiRoadEventMarker.removeMarkers(null)
|
||||
}
|
||||
|
||||
fun clear() {
|
||||
hideLine()
|
||||
V2XAiRoadEventMarker.removeMarkers(null)
|
||||
}
|
||||
|
||||
fun restore() {
|
||||
showLine()
|
||||
val marker = marker.get()
|
||||
if (marker != null) {
|
||||
marker(marker, false)
|
||||
}
|
||||
handler.removeCallbacks(checkExpiredTask)
|
||||
}
|
||||
|
||||
private fun hideLine() {
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.mogo.eagle.core.function.api.v2x
|
||||
|
||||
interface OnClearAllMarker {
|
||||
|
||||
fun onClearAllMarkers()
|
||||
|
||||
fun onClearAllMarkers(tag: String)
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.mogo.eagle.core.function.call.v2x
|
||||
|
||||
import com.mogo.eagle.core.function.api.v2x.*
|
||||
import java.util.concurrent.*
|
||||
|
||||
object CallMarkersClearManager {
|
||||
|
||||
private val listeners by lazy { ConcurrentHashMap<String, ArrayList<OnClearAllMarker>>() }
|
||||
|
||||
fun addAllMarkersClearListener(tag: String, listener: OnClearAllMarker) {
|
||||
var ll = listeners[tag]
|
||||
if (ll == null) {
|
||||
ll = ArrayList()
|
||||
}
|
||||
ll.add(listener)
|
||||
listeners[tag] = ll
|
||||
}
|
||||
|
||||
fun removeAllMarkersClearListener(tag: String) {
|
||||
listeners.remove(tag)
|
||||
}
|
||||
|
||||
fun invokeClearAllMarkers() {
|
||||
listeners.values.flatten().forEach {
|
||||
it.onClearAllMarkers()
|
||||
}
|
||||
}
|
||||
|
||||
fun invokeClearAllMarkersOfTag(tag: String) {
|
||||
listeners.values.flatten().forEach {
|
||||
it.onClearAllMarkers(tag)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package com.mogo.map;
|
||||
import android.content.Context;
|
||||
|
||||
import com.mogo.eagle.core.data.map.MogoLatLng;
|
||||
import com.mogo.eagle.core.function.call.v2x.CallMarkersClearManager;
|
||||
import com.mogo.map.marker.IMogoMarker;
|
||||
import com.mogo.map.marker.IMogoMarkerManager;
|
||||
import com.mogo.map.marker.MogoMarkerOptions;
|
||||
@@ -100,11 +101,13 @@ public class MogoMarkerManager implements IMogoMarkerManager {
|
||||
|
||||
@Override
|
||||
public void removeMarkers( String tag ) {
|
||||
CallMarkersClearManager.INSTANCE.invokeClearAllMarkersOfTag(tag);
|
||||
MogoMarkersHandler.getInstance().remove( tag );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeMarkers() {
|
||||
CallMarkersClearManager.INSTANCE.invokeClearAllMarkers();
|
||||
MogoMarkersHandler.getInstance().removeAll();
|
||||
}
|
||||
|
||||
@@ -115,6 +118,7 @@ public class MogoMarkerManager implements IMogoMarkerManager {
|
||||
|
||||
@Override
|
||||
public void inVisibleAllMarkers() {
|
||||
CallMarkersClearManager.INSTANCE.invokeClearAllMarkers();
|
||||
MogoMarkersHandler.getInstance().inVisibleAll();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user