@@ -77,13 +77,15 @@ class GoogleMapsViewImpl(
7777 private val pendingCircles = mutableListOf<Pair <String , CircleOptions >>()
7878 private val pendingHeatmaps = mutableListOf<Pair <String , TileOverlayOptions >>()
7979 private val pendingKmlLayers = mutableListOf<Pair <String , String >>()
80+ private val pendingUrlTilesOverlays = mutableListOf<Pair <String , TileOverlayOptions >>()
8081
8182 private val markersById = mutableMapOf<String , Marker >()
8283 private val polylinesById = mutableMapOf<String , Polyline >()
8384 private val polygonsById = mutableMapOf<String , Polygon >()
8485 private val circlesById = mutableMapOf<String , Circle >()
8586 private val heatmapsById = mutableMapOf<String , TileOverlay >()
8687 private val kmlLayersById = mutableMapOf<String , KmlLayer >()
88+ private val urlTileOverlaysById = mutableMapOf<String , TileOverlay >()
8789
8890 private var cameraMoveReason = - 1
8991 private var lastSubmittedCameraPosition: CameraPosition ? = null
@@ -249,6 +251,13 @@ class GoogleMapsViewImpl(
249251 }
250252 pendingKmlLayers.clear()
251253 }
254+
255+ if (pendingUrlTilesOverlays.isNotEmpty()) {
256+ pendingUrlTilesOverlays.forEach { (id, string) ->
257+ internalAddUrlTileOverlay(id, string)
258+ }
259+ pendingUrlTilesOverlays.clear()
260+ }
252261 }
253262
254263 val currentCamera: CameraPosition ?
@@ -856,6 +865,48 @@ class GoogleMapsViewImpl(
856865 pendingKmlLayers.clear()
857866 }
858867
868+ fun addUrlTileOverlay (
869+ id : String ,
870+ opts : TileOverlayOptions ,
871+ ) {
872+ if (googleMap == null ) {
873+ pendingUrlTilesOverlays.add(id to opts)
874+ return
875+ }
876+
877+ onUi {
878+ urlTileOverlaysById.remove(id)?.remove()
879+ }
880+ internalAddUrlTileOverlay(id, opts)
881+ }
882+
883+ private fun internalAddUrlTileOverlay (
884+ id : String ,
885+ opts : TileOverlayOptions ,
886+ ) {
887+ onUi {
888+ val urlTile =
889+ googleMap?.addTileOverlay(opts)
890+ if (urlTile != null ) {
891+ urlTileOverlaysById[id] = urlTile
892+ }
893+ }
894+ }
895+
896+ fun removeUrlTileOverlay (id : String ) {
897+ onUi {
898+ urlTileOverlaysById.remove(id)?.remove()
899+ }
900+ }
901+
902+ fun clearUrlTileOverlays () {
903+ onUi {
904+ urlTileOverlaysById.values.forEach { it.remove() }
905+ }
906+ urlTileOverlaysById.clear()
907+ pendingUrlTilesOverlays.clear()
908+ }
909+
859910 fun destroyInternal () {
860911 if (destroyed) return
861912 destroyed = true
@@ -868,6 +919,7 @@ class GoogleMapsViewImpl(
868919 clearCircles()
869920 clearHeatmaps()
870921 clearKmlLayer()
922+ clearUrlTileOverlays()
871923 googleMap?.apply {
872924 setOnCameraMoveStartedListener(null )
873925 setOnCameraMoveListener(null )
0 commit comments