package com.mapbox.mapboxsdk.maps;
import android.support.annotation.NonNull;
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 setInfoWindowAdapter(@Nullable MapboxMap.InfoWindowAdapter infoWindowAdapter) {
this.infoWindowAdapter = infoWindowAdapter;
}
MapboxMap.InfoWindowAdapter getInfoWindowAdapter() {
return infoWindowAdapter;
}
void setAllowConcurrentMultipleOpenInfoWindows(boolean allow) {
allowConcurrentMultipleInfoWindows = allow;
}
boolean isAllowConcurrentMultipleOpenInfoWindows() {
return allowConcurrentMultipleInfoWindows;
}
List getInfoWindows() {
return infoWindows;
}
boolean isInfoWindowValidForMarker(@NonNull Marker marker) {
return !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;
}
}