blob: 82a3edcb32c094bdc99cf72e9b42235acf613093 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package io.flutter.plugins.googlemaps;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.model.TileOverlay;
import com.google.android.gms.maps.model.TileOverlayOptions;
import io.flutter.plugin.common.MethodChannel;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class TileOverlaysController {
private final Map<String, TileOverlayController> tileOverlayIdToController;
private final MethodChannel methodChannel;
private GoogleMap googleMap;
TileOverlaysController(MethodChannel methodChannel) {
this.tileOverlayIdToController = new HashMap<>();
this.methodChannel = methodChannel;
}
void setGoogleMap(GoogleMap googleMap) {
this.googleMap = googleMap;
}
void addTileOverlays(List<Map<String, ?>> tileOverlaysToAdd) {
if (tileOverlaysToAdd == null) {
return;
}
for (Map<String, ?> tileOverlayToAdd : tileOverlaysToAdd) {
addTileOverlay(tileOverlayToAdd);
}
}
void changeTileOverlays(List<Map<String, ?>> tileOverlaysToChange) {
if (tileOverlaysToChange == null) {
return;
}
for (Map<String, ?> tileOverlayToChange : tileOverlaysToChange) {
changeTileOverlay(tileOverlayToChange);
}
}
void removeTileOverlays(List<String> tileOverlayIdsToRemove) {
if (tileOverlayIdsToRemove == null) {
return;
}
for (String tileOverlayId : tileOverlayIdsToRemove) {
if (tileOverlayId == null) {
continue;
}
removeTileOverlay(tileOverlayId);
}
}
void clearTileCache(String tileOverlayId) {
if (tileOverlayId == null) {
return;
}
TileOverlayController tileOverlayController = tileOverlayIdToController.get(tileOverlayId);
if (tileOverlayController != null) {
tileOverlayController.clearTileCache();
}
}
Map<String, Object> getTileOverlayInfo(String tileOverlayId) {
if (tileOverlayId == null) {
return null;
}
TileOverlayController tileOverlayController = tileOverlayIdToController.get(tileOverlayId);
if (tileOverlayController == null) {
return null;
}
return tileOverlayController.getTileOverlayInfo();
}
private void addTileOverlay(Map<String, ?> tileOverlayOptions) {
if (tileOverlayOptions == null) {
return;
}
TileOverlayBuilder tileOverlayOptionsBuilder = new TileOverlayBuilder();
String tileOverlayId =
Convert.interpretTileOverlayOptions(tileOverlayOptions, tileOverlayOptionsBuilder);
TileProviderController tileProviderController =
new TileProviderController(methodChannel, tileOverlayId);
tileOverlayOptionsBuilder.setTileProvider(tileProviderController);
TileOverlayOptions options = tileOverlayOptionsBuilder.build();
TileOverlay tileOverlay = googleMap.addTileOverlay(options);
TileOverlayController tileOverlayController = new TileOverlayController(tileOverlay);
tileOverlayIdToController.put(tileOverlayId, tileOverlayController);
}
private void changeTileOverlay(Map<String, ?> tileOverlayOptions) {
if (tileOverlayOptions == null) {
return;
}
String tileOverlayId = getTileOverlayId(tileOverlayOptions);
TileOverlayController tileOverlayController = tileOverlayIdToController.get(tileOverlayId);
if (tileOverlayController != null) {
Convert.interpretTileOverlayOptions(tileOverlayOptions, tileOverlayController);
}
}
private void removeTileOverlay(String tileOverlayId) {
TileOverlayController tileOverlayController = tileOverlayIdToController.get(tileOverlayId);
if (tileOverlayController != null) {
tileOverlayController.remove();
tileOverlayIdToController.remove(tileOverlayId);
}
}
@SuppressWarnings("unchecked")
private static String getTileOverlayId(Map<String, ?> tileOverlay) {
return (String) tileOverlay.get("tileOverlayId");
}
}