package com.mapbox.mapboxsdk.maps; import android.support.annotation.Nullable; import android.text.TextUtils; import com.mapbox.mapboxsdk.annotations.InfoWindow; import com.mapbox.mapboxsdk.annotations.Marker; import java.util.ArrayList; import java.util.List; /** * Responsible for managing InfoWindows shown on the Map. *

* Maintains a {@link List} of opened {@link InfoWindow} and tracks configurations as * allowConcurrentMultipleInfoWindows which allows to have multiple {@link InfoWindow} open at the * same time. Responsible for managing listeners as * {@link com.mapbox.mapboxsdk.maps.MapboxMap.OnInfoWindowClickListener} and * {@link com.mapbox.mapboxsdk.maps.MapboxMap.OnInfoWindowLongClickListener}. *

*/ class InfoWindowManager { private List infoWindows; private MapboxMap.InfoWindowAdapter infoWindowAdapter; private boolean allowConcurrentMultipleInfoWindows; private MapboxMap.OnInfoWindowClickListener onInfoWindowClickListener; private MapboxMap.OnInfoWindowLongClickListener onInfoWindowLongClickListener; private MapboxMap.OnInfoWindowCloseListener onInfoWindowCloseListener; InfoWindowManager() { this.infoWindows = new ArrayList<>(); } void update() { for (InfoWindow infoWindow : infoWindows) { infoWindow.update(); } } void setInfoWindowAdapter(@Nullable MapboxMap.InfoWindowAdapter infoWindowAdapter) { this.infoWindowAdapter = infoWindowAdapter; } MapboxMap.InfoWindowAdapter getInfoWindowAdapter() { return infoWindowAdapter; } void setAllowConcurrentMultipleOpenInfoWindows(boolean allow) { allowConcurrentMultipleInfoWindows = allow; } boolean isAllowConcurrentMultipleOpenInfoWindows() { return allowConcurrentMultipleInfoWindows; } boolean isInfoWindowValidForMarker(Marker marker) { return marker != null && (!TextUtils.isEmpty(marker.getTitle()) || !TextUtils.isEmpty(marker.getSnippet())); } void setOnInfoWindowClickListener(@Nullable MapboxMap.OnInfoWindowClickListener listener) { onInfoWindowClickListener = listener; } MapboxMap.OnInfoWindowClickListener getOnInfoWindowClickListener() { return onInfoWindowClickListener; } void setOnInfoWindowLongClickListener(@Nullable MapboxMap.OnInfoWindowLongClickListener listener) { onInfoWindowLongClickListener = listener; } MapboxMap.OnInfoWindowLongClickListener getOnInfoWindowLongClickListener() { return onInfoWindowLongClickListener; } void setOnInfoWindowCloseListener(@Nullable MapboxMap.OnInfoWindowCloseListener listener) { onInfoWindowCloseListener = listener; } MapboxMap.OnInfoWindowCloseListener getOnInfoWindowCloseListener() { return onInfoWindowCloseListener; } public void add(InfoWindow infoWindow) { infoWindows.add(infoWindow); } }