diff options
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java')
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java | 2425 |
1 files changed, 0 insertions, 2425 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java deleted file mode 100644 index 8f4cb9438c..0000000000 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java +++ /dev/null @@ -1,2425 +0,0 @@ -package com.mapbox.mapboxsdk.maps; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.PointF; -import android.graphics.RectF; -import android.os.Bundle; -import android.support.annotation.FloatRange; -import android.support.annotation.IntRange; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.Size; -import android.support.annotation.UiThread; -import android.text.TextUtils; -import android.view.View; - -import com.mapbox.android.gestures.AndroidGesturesManager; -import com.mapbox.android.gestures.MoveGestureDetector; -import com.mapbox.android.gestures.RotateGestureDetector; -import com.mapbox.android.gestures.ShoveGestureDetector; -import com.mapbox.android.gestures.StandardScaleGestureDetector; -import com.mapbox.geojson.Feature; -import com.mapbox.geojson.Geometry; -import com.mapbox.mapboxsdk.MapStrictMode; -import com.mapbox.mapboxsdk.annotations.Annotation; -import com.mapbox.mapboxsdk.annotations.BaseMarkerOptions; -import com.mapbox.mapboxsdk.annotations.Marker; -import com.mapbox.mapboxsdk.annotations.MarkerOptions; -import com.mapbox.mapboxsdk.annotations.Polygon; -import com.mapbox.mapboxsdk.annotations.PolygonOptions; -import com.mapbox.mapboxsdk.annotations.Polyline; -import com.mapbox.mapboxsdk.annotations.PolylineOptions; -import com.mapbox.mapboxsdk.camera.CameraPosition; -import com.mapbox.mapboxsdk.camera.CameraUpdate; -import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; -import com.mapbox.mapboxsdk.constants.MapboxConstants; -import com.mapbox.mapboxsdk.geometry.LatLng; -import com.mapbox.mapboxsdk.geometry.LatLngBounds; -import com.mapbox.mapboxsdk.location.LocationComponent; -import com.mapbox.mapboxsdk.log.Logger; -import com.mapbox.mapboxsdk.offline.OfflineRegionDefinition; -import com.mapbox.mapboxsdk.style.expressions.Expression; - -import java.util.ArrayList; -import java.util.List; - -/** - * The general class to interact with in the Android Mapbox SDK. It exposes the entry point for all - * methods related to the MapView. You cannot instantiate {@link MapboxMap} object directly, rather, - * you must obtain one from the getMapAsync() method on a MapFragment or MapView that you have - * added to your application. - * <p> - * Note: Similar to a View object, a MapboxMap should only be read and modified from the main thread. - * </p> - */ -@UiThread -public final class MapboxMap { - - private static final String TAG = "Mbgl-MapboxMap"; - - private final NativeMap nativeMapView; - private final UiSettings uiSettings; - private final Projection projection; - private final Transform transform; - private final CameraChangeDispatcher cameraChangeDispatcher; - private final OnGesturesManagerInteractionListener onGesturesManagerInteractionListener; - private final List<Style.OnStyleLoaded> awaitingStyleGetters = new ArrayList<>(); - private final List<OnDeveloperAnimationListener> developerAnimationStartedListeners; - - @Nullable - private Style.OnStyleLoaded styleLoadedCallback; - - private LocationComponent locationComponent; - private AnnotationManager annotationManager; - - @Nullable - private MapboxMap.OnFpsChangedListener onFpsChangedListener; - - @Nullable - private Style style; - - private boolean debugActive; - - MapboxMap(NativeMap map, Transform transform, UiSettings ui, Projection projection, - OnGesturesManagerInteractionListener listener, CameraChangeDispatcher cameraChangeDispatcher, - List<OnDeveloperAnimationListener> developerAnimationStartedListeners) { - this.nativeMapView = map; - this.uiSettings = ui; - this.projection = projection; - this.transform = transform; - this.onGesturesManagerInteractionListener = listener; - this.cameraChangeDispatcher = cameraChangeDispatcher; - this.developerAnimationStartedListeners = developerAnimationStartedListeners; - } - - void initialise(@NonNull Context context, @NonNull MapboxMapOptions options) { - transform.initialise(this, options); - uiSettings.initialise(context, options); - - // Map configuration - setDebugActive(options.getDebugActive()); - setApiBaseUrl(options); - setPrefetchesTiles(options); - } - - /** - * Get the Style of the map asynchronously. - */ - public void getStyle(@NonNull Style.OnStyleLoaded onStyleLoaded) { - if (style != null && style.isFullyLoaded()) { - onStyleLoaded.onStyleLoaded(style); - } else { - awaitingStyleGetters.add(onStyleLoaded); - } - } - - /** - * Get the Style of the map. - * <p> - * Returns null when style is being loaded. - * </p> - * - * @return the style of the map - */ - @Nullable - public Style getStyle() { - if (style == null || !style.isFullyLoaded()) { - return null; - } else { - return style; - } - } - - /** - * Called when the hosting Activity/Fragment onStart() method is called. - */ - void onStart() { - locationComponent.onStart(); - } - - /** - * Called when the hosting Activity/Fragment onStop() method is called. - */ - void onStop() { - locationComponent.onStop(); - } - - /** - * Called when the hosting Activity/Fragment is going to be destroyed and map state needs to be saved. - * - * @param outState the bundle to save the state to. - */ - void onSaveInstanceState(@NonNull Bundle outState) { - outState.putParcelable(MapboxConstants.STATE_CAMERA_POSITION, transform.getCameraPosition()); - outState.putBoolean(MapboxConstants.STATE_DEBUG_ACTIVE, isDebugActive()); - uiSettings.onSaveInstanceState(outState); - } - - /** - * Called when the hosting Activity/Fragment is recreated and map state needs to be restored. - * - * @param savedInstanceState the bundle containing the saved state - */ - void onRestoreInstanceState(@NonNull Bundle savedInstanceState) { - final CameraPosition cameraPosition = savedInstanceState.getParcelable(MapboxConstants.STATE_CAMERA_POSITION); - - uiSettings.onRestoreInstanceState(savedInstanceState); - - if (cameraPosition != null) { - moveCamera(CameraUpdateFactory.newCameraPosition( - new CameraPosition.Builder(cameraPosition).build()) - ); - } - - nativeMapView.setDebug(savedInstanceState.getBoolean(MapboxConstants.STATE_DEBUG_ACTIVE)); - } - - /** - * Called when the hosting Activity/Fragment onDestroy()/onDestroyView() method is called. - */ - void onDestroy() { - locationComponent.onDestroy(); - if (style != null) { - style.clear(); - } - cameraChangeDispatcher.onDestroy(); - } - - /** - * Called before the OnMapReadyCallback is invoked. - */ - void onPreMapReady() { - transform.invalidateCameraPosition(); - annotationManager.reloadMarkers(); - annotationManager.adjustTopOffsetPixels(this); - } - - /** - * Called when the OnMapReadyCallback has finished executing. - * <p> - * Invalidation of the camera position is required to update the added components in - * OnMapReadyCallback with the correct transformation. - * </p> - */ - void onPostMapReady() { - transform.invalidateCameraPosition(); - } - - /** - * Called when the map finished loading a style. - */ - void onFinishLoadingStyle() { - notifyStyleLoaded(); - } - - /** - * Called when the map failed loading a style. - */ - void onFailLoadingStyle() { - styleLoadedCallback = null; - } - - /** - * Called when the region is changing or has changed. - */ - void onUpdateRegionChange() { - annotationManager.update(); - } - - /** - * Called when the map frame is fully rendered. - */ - void onUpdateFullyRendered() { - CameraPosition cameraPosition = transform.invalidateCameraPosition(); - if (cameraPosition != null) { - uiSettings.update(cameraPosition); - } - } - - /** - * Experimental feature. Do not use. - */ - long getNativeMapPtr() { - return nativeMapView.getNativePtr(); - } - - // Style - - /** - * Sets tile pre-fetching zoom delta from MapboxOptions. - * - * @param options the options object - */ - private void setPrefetchesTiles(@NonNull MapboxMapOptions options) { - if (!options.getPrefetchesTiles()) { - setPrefetchZoomDelta(0); - } else { - setPrefetchZoomDelta(options.getPrefetchZoomDelta()); - } - } - - /** - * Enable or disable tile pre-fetching. Pre-fetching makes sure that a low-resolution - * tile is rendered as soon as possible at the expense of a little bandwidth. - * - * @param enable true to enable - * @deprecated Use {@link #setPrefetchZoomDelta(int)} instead. - */ - @Deprecated - public void setPrefetchesTiles(boolean enable) { - nativeMapView.setPrefetchTiles(enable); - } - - /** - * Check whether tile pre-fetching is enabled or not. - * - * @return true if enabled - * @see MapboxMap#setPrefetchesTiles(boolean) - * @deprecated Use {@link #getPrefetchZoomDelta()} instead. - */ - @Deprecated - public boolean getPrefetchesTiles() { - return nativeMapView.getPrefetchTiles(); - } - - /** - * Set the tile pre-fetching zoom delta. Pre-fetching makes sure that a low-resolution - * tile at the (current_zoom_level - delta) is rendered as soon as possible at the - * expense of a little bandwidth. - * Note: This operation will override the MapboxMapOptions#setPrefetchesTiles(boolean) - * Setting zoom delta to 0 will disable pre-fetching. - * Default zoom delta is 4. - * - * @param delta zoom delta - */ - public void setPrefetchZoomDelta(@IntRange(from = 0) int delta) { - nativeMapView.setPrefetchZoomDelta(delta); - } - - /** - * Check current pre-fetching zoom delta. - * - * @return current zoom delta. - * @see MapboxMap#setPrefetchZoomDelta(int) - */ - @IntRange(from = 0) - public int getPrefetchZoomDelta() { - return nativeMapView.getPrefetchZoomDelta(); - } - - // - // MinZoom - // - - /** - * <p> - * Sets the minimum zoom level the map can be displayed at. - * </p> - * - * @param minZoom The new minimum zoom level. - */ - public void setMinZoomPreference( - @FloatRange(from = MapboxConstants.MINIMUM_ZOOM, to = MapboxConstants.MAXIMUM_ZOOM) double minZoom) { - transform.setMinZoom(minZoom); - } - - /** - * <p> - * Gets the minimum zoom level the map can be displayed at. - * </p> - * - * @return The minimum zoom level. - */ - public double getMinZoomLevel() { - return transform.getMinZoom(); - } - - // - // MaxZoom - // - - /** - * <p> - * Sets the maximum zoom level the map can be displayed at. - * </p> - * <p> - * The default maximum zoomn level is 22. The upper bound for this value is 25.5. - * </p> - * - * @param maxZoom The new maximum zoom level. - */ - public void setMaxZoomPreference(@FloatRange(from = MapboxConstants.MINIMUM_ZOOM, - to = MapboxConstants.MAXIMUM_ZOOM) double maxZoom) { - transform.setMaxZoom(maxZoom); - } - - /** - * <p> - * Gets the maximum zoom level the map can be displayed at. - * </p> - * - * @return The maximum zoom level. - */ - public double getMaxZoomLevel() { - return transform.getMaxZoom(); - } - - // - // UiSettings - // - - /** - * Gets the user interface settings for the map. - * - * @return the UiSettings associated with this map - */ - @NonNull - public UiSettings getUiSettings() { - return uiSettings; - } - - // - // Projection - // - - /** - * Get the Projection object that you can use to convert between screen coordinates and latitude/longitude - * coordinates. - * - * @return the Projection associated with this map - */ - @NonNull - public Projection getProjection() { - return projection; - } - - // - // Camera API - // - - /** - * Cancels ongoing animations. - * <p> - * This invokes the {@link CancelableCallback} for ongoing camera updates. - * </p> - */ - public void cancelTransitions() { - transform.cancelTransitions(); - } - - /** - * Gets the current position of the camera. - * The CameraPosition returned is a snapshot of the current position, and will not automatically update when the - * camera moves. - * - * @return The current position of the Camera. - */ - @NonNull - public final CameraPosition getCameraPosition() { - return transform.getCameraPosition(); - } - - /** - * Repositions the camera according to the cameraPosition. - * The move is instantaneous, and a subsequent getCameraPosition() will reflect the new position. - * See CameraUpdateFactory for a set of updates. - * - * @param cameraPosition the camera position to set - */ - public void setCameraPosition(@NonNull CameraPosition cameraPosition) { - moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition), null); - } - - /** - * Repositions the camera according to the instructions defined in the update. - * The move is instantaneous, and a subsequent getCameraPosition() will reflect the new position. - * See CameraUpdateFactory for a set of updates. - * - * @param update The change that should be applied to the camera. - */ - public final void moveCamera(@NonNull CameraUpdate update) { - moveCamera(update, null); - } - - /** - * Repositions the camera according to the instructions defined in the update. - * The move is instantaneous, and a subsequent getCameraPosition() will reflect the new position. - * See CameraUpdateFactory for a set of updates. - * - * @param update The change that should be applied to the camera - * @param callback the callback to be invoked when an animation finishes or is canceled - */ - public final void moveCamera(@NonNull final CameraUpdate update, - @Nullable final MapboxMap.CancelableCallback callback) { - notifyDeveloperAnimationListeners(); - transform.moveCamera(MapboxMap.this, update, callback); - } - - /** - * Gradually move the camera by the default duration, zoom will not be affected unless specified - * within {@link CameraUpdate}. If {@link #getCameraPosition()} is called during the animation, - * it will return the current location of the camera in flight. - * - * @param update The change that should be applied to the camera. - * @see com.mapbox.mapboxsdk.camera.CameraUpdateFactory for a set of updates. - */ - public final void easeCamera(@NonNull CameraUpdate update) { - easeCamera(update, MapboxConstants.ANIMATION_DURATION); - } - - /** - * Gradually move the camera by the default duration, zoom will not be affected unless specified - * within {@link CameraUpdate}. If {@link #getCameraPosition()} is called during the animation, - * it will return the current location of the camera in flight. - * - * @param update The change that should be applied to the camera. - * @param callback An optional callback to be notified from the main thread when the animation - * stops. If the animation stops due to its natural completion, the callback - * will be notified with onFinish(). If the animation stops due to interruption - * by a later camera movement or a user gesture, onCancel() will be called. - * Do not update or ease the camera from within onCancel(). - * @see com.mapbox.mapboxsdk.camera.CameraUpdateFactory for a set of updates. - */ - public final void easeCamera(@NonNull CameraUpdate update, @Nullable final MapboxMap.CancelableCallback callback) { - easeCamera(update, MapboxConstants.ANIMATION_DURATION, callback); - } - - /** - * Gradually move the camera by a specified duration in milliseconds, zoom will not be affected - * unless specified within {@link CameraUpdate}. If {@link #getCameraPosition()} is called - * during the animation, it will return the current location of the camera in flight. - * - * @param update The change that should be applied to the camera. - * @param durationMs The duration of the animation in milliseconds. This must be strictly - * positive, otherwise an IllegalArgumentException will be thrown. - * @see com.mapbox.mapboxsdk.camera.CameraUpdateFactory for a set of updates. - */ - public final void easeCamera(@NonNull CameraUpdate update, int durationMs) { - easeCamera(update, durationMs, null); - } - - /** - * Gradually move the camera by a specified duration in milliseconds, zoom will not be affected - * unless specified within {@link CameraUpdate}. A callback can be used to be notified when - * easing the camera stops. If {@link #getCameraPosition()} is called during the animation, it - * will return the current location of the camera in flight. - * <p> - * Note that this will cancel location tracking mode if enabled. - * </p> - * - * @param update The change that should be applied to the camera. - * @param durationMs The duration of the animation in milliseconds. This must be strictly - * positive, otherwise an IllegalArgumentException will be thrown. - * @param callback An optional callback to be notified from the main thread when the animation - * stops. If the animation stops due to its natural completion, the callback - * will be notified with onFinish(). If the animation stops due to interruption - * by a later camera movement or a user gesture, onCancel() will be called. - * Do not update or ease the camera from within onCancel(). - * @see com.mapbox.mapboxsdk.camera.CameraUpdateFactory for a set of updates. - */ - public final void easeCamera(@NonNull CameraUpdate update, int durationMs, - @Nullable final MapboxMap.CancelableCallback callback) { - easeCamera(update, durationMs, true, callback); - } - - /** - * Gradually move the camera by a specified duration in milliseconds, zoom will not be affected - * unless specified within {@link CameraUpdate}. A callback can be used to be notified when - * easing the camera stops. If {@link #getCameraPosition()} is called during the animation, it - * will return the current location of the camera in flight. - * <p> - * Note that this will cancel location tracking mode if enabled. - * </p> - * - * @param update The change that should be applied to the camera. - * @param durationMs The duration of the animation in milliseconds. This must be strictly - * positive, otherwise an IllegalArgumentException will be thrown. - * @param easingInterpolator True for easing interpolator, false for linear. - */ - public final void easeCamera(@NonNull CameraUpdate update, int durationMs, boolean easingInterpolator) { - easeCamera(update, durationMs, easingInterpolator, null); - } - - /** - * Gradually move the camera by a specified duration in milliseconds, zoom will not be affected - * unless specified within {@link CameraUpdate}. A callback can be used to be notified when - * easing the camera stops. If {@link #getCameraPosition()} is called during the animation, it - * will return the current location of the camera in flight. - * - * @param update The change that should be applied to the camera. - * @param durationMs The duration of the animation in milliseconds. This must be strictly - * positive, otherwise an IllegalArgumentException will be thrown. - * @param easingInterpolator True for easing interpolator, false for linear. - * @param callback An optional callback to be notified from the main thread when the animation - * stops. If the animation stops due to its natural completion, the callback - * will be notified with onFinish(). If the animation stops due to interruption - * by a later camera movement or a user gesture, onCancel() will be called. - * Do not update or ease the camera from within onCancel(). - */ - public final void easeCamera(@NonNull final CameraUpdate update, - final int durationMs, - final boolean easingInterpolator, - @Nullable final MapboxMap.CancelableCallback callback) { - if (durationMs <= 0) { - throw new IllegalArgumentException("Null duration passed into easeCamera"); - } - notifyDeveloperAnimationListeners(); - transform.easeCamera(MapboxMap.this, update, durationMs, easingInterpolator, callback); - } - - /** - * Animate the camera to a new location defined within {@link CameraUpdate} using a transition - * animation that evokes powered flight. The animation will last the default amount of time. - * During the animation, a call to {@link #getCameraPosition()} returns an intermediate location - * of the camera in flight. - * - * @param update The change that should be applied to the camera. - * @see com.mapbox.mapboxsdk.camera.CameraUpdateFactory for a set of updates. - */ - public final void animateCamera(@NonNull CameraUpdate update) { - animateCamera(update, MapboxConstants.ANIMATION_DURATION, null); - } - - /** - * Animate the camera to a new location defined within {@link CameraUpdate} using a transition - * animation that evokes powered flight. The animation will last the default amount of time. A - * callback can be used to be notified when animating the camera stops. During the animation, a - * call to {@link #getCameraPosition()} returns an intermediate location of the camera in flight. - * - * @param update The change that should be applied to the camera. - * @param callback The callback to invoke from the main thread when the animation stops. If the - * animation completes normally, onFinish() is called; otherwise, onCancel() is - * called. Do not update or animate the camera from within onCancel(). - * @see com.mapbox.mapboxsdk.camera.CameraUpdateFactory for a set of updates. - */ - public final void animateCamera(@NonNull CameraUpdate update, @Nullable MapboxMap.CancelableCallback callback) { - animateCamera(update, MapboxConstants.ANIMATION_DURATION, callback); - } - - /** - * Animate the camera to a new location defined within {@link CameraUpdate} using a transition - * animation that evokes powered flight. The animation will last a specified amount of time - * given in milliseconds. During the animation, a call to {@link #getCameraPosition()} returns - * an intermediate location of the camera in flight. - * - * @param update The change that should be applied to the camera. - * @param durationMs The duration of the animation in milliseconds. This must be strictly - * positive, otherwise an IllegalArgumentException will be thrown. - * @see com.mapbox.mapboxsdk.camera.CameraUpdateFactory for a set of updates. - */ - public final void animateCamera(@NonNull CameraUpdate update, int durationMs) { - animateCamera(update, durationMs, null); - } - - /** - * Animate the camera to a new location defined within {@link CameraUpdate} using a transition - * animation that evokes powered flight. The animation will last a specified amount of time - * given in milliseconds. A callback can be used to be notified when animating the camera stops. - * During the animation, a call to {@link #getCameraPosition()} returns an intermediate location - * of the camera in flight. - * - * @param update The change that should be applied to the camera. - * @param durationMs The duration of the animation in milliseconds. This must be strictly - * positive, otherwise an IllegalArgumentException will be thrown. - * @param callback An optional callback to be notified from the main thread when the animation - * stops. If the animation stops due to its natural completion, the callback - * will be notified with onFinish(). If the animation stops due to interruption - * by a later camera movement or a user gesture, onCancel() will be called. - * Do not update or animate the camera from within onCancel(). If a callback - * isn't required, leave it as null. - * @see com.mapbox.mapboxsdk.camera.CameraUpdateFactory for a set of updates. - */ - public final void animateCamera(@NonNull final CameraUpdate update, final int durationMs, - @Nullable final MapboxMap.CancelableCallback callback) { - if (durationMs <= 0) { - throw new IllegalArgumentException("Null duration passed into animateCamera"); - } - notifyDeveloperAnimationListeners(); - transform.animateCamera(MapboxMap.this, update, durationMs, callback); - } - - /** - * Scrolls the camera over the map, shifting the center of view by the specified number of pixels in the x and y - * directions. - * - * @param x Amount of pixels to scroll to in x direction - * @param y Amount of pixels to scroll to in y direction - */ - public void scrollBy(float x, float y) { - scrollBy(x, y, 0); - } - - /** - * Scrolls the camera over the map, shifting the center of view by the specified number of pixels in the x and y - * directions. - * - * @param x Amount of pixels to scroll to in x direction - * @param y Amount of pixels to scroll to in y direction - * @param duration Amount of time the scrolling should take - */ - public void scrollBy(float x, float y, long duration) { - notifyDeveloperAnimationListeners(); - nativeMapView.moveBy(x, y, duration); - } - - // - // Reset North - // - - /** - * Resets the map view to face north. - */ - public void resetNorth() { - notifyDeveloperAnimationListeners(); - transform.resetNorth(); - } - - /** - * Transform the map bearing given a bearing, focal point coordinates, and a duration. - * - * @param bearing The bearing of the Map to be transformed to - * @param focalX The x coordinate of the focal point - * @param focalY The y coordinate of the focal point - * @param duration The duration of the transformation - */ - public void setFocalBearing(double bearing, float focalX, float focalY, long duration) { - notifyDeveloperAnimationListeners(); - transform.setBearing(bearing, focalX, focalY, duration); - } - - /** - * Returns the measured height of the Map. - * - * @return the height of the map - */ - public float getHeight() { - return projection.getHeight(); - } - - /** - * Returns the measured width of the Map. - * - * @return the width of the map - */ - public float getWidth() { - return projection.getWidth(); - } - - // - // Offline - // - - /** - * Loads a new style from the specified offline region definition and moves the map camera to that region. - * - * @param definition the offline region definition - * @see OfflineRegionDefinition - */ - public void setOfflineRegionDefinition(@NonNull OfflineRegionDefinition definition) { - setOfflineRegionDefinition(definition, null); - } - - /** - * Loads a new style from the specified offline region definition and moves the map camera to that region. - * - * @param definition the offline region definition - * @param callback the callback to be invoked when the style has loaded - * @see OfflineRegionDefinition - */ - public void setOfflineRegionDefinition(@NonNull OfflineRegionDefinition definition, - @Nullable Style.OnStyleLoaded callback) { - double minZoom = definition.getMinZoom(); - double maxZoom = definition.getMaxZoom(); - CameraPosition cameraPosition = new CameraPosition.Builder() - .target(definition.getBounds().getCenter()) - .zoom(minZoom) - .build(); - moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); - setMinZoomPreference(minZoom); - setMaxZoomPreference(maxZoom); - setStyle(new Style.Builder().fromUri(definition.getStyleURL()), callback); - } - - // - // Debug - // - - /** - * Returns whether the map debug information is currently shown. - * - * @return If true, map debug information is currently shown. - */ - public boolean isDebugActive() { - return debugActive; - } - - /** - * <p> - * Changes whether the map debug information is shown. - * </p> - * The default value is false. - * - * @param debugActive If true, map debug information is shown. - */ - public void setDebugActive(boolean debugActive) { - this.debugActive = debugActive; - nativeMapView.setDebug(debugActive); - } - - /** - * <p> - * Cycles through the map debug options. - * </p> - * The value of isDebugActive reflects whether there are - * any map debug options enabled or disabled. - * - * @see #isDebugActive() - */ - public void cycleDebugOptions() { - nativeMapView.cycleDebugOptions(); - this.debugActive = nativeMapView.getDebug(); - } - - // - // API endpoint config - // - - private void setApiBaseUrl(@NonNull MapboxMapOptions options) { - String apiBaseUrl = options.getApiBaseUrl(); - if (!TextUtils.isEmpty(apiBaseUrl)) { - nativeMapView.setApiBaseUrl(apiBaseUrl); - } - } - - // - // Styling - // - - /** - * Loads a new map style from the specified bundled style. - * <p> - * This method is asynchronous and will return before the style finishes loading. - * If you wish to wait for the map to finish loading, listen to the {@link MapView.OnDidFinishLoadingStyleListener} - * callback or use the {@link #setStyle(String, Style.OnStyleLoaded)} method instead. - * </p> - * If the style fails to load or an invalid style URL is set, the map view will become blank. - * An error message will be logged in the Android logcat and {@link MapView.OnDidFailLoadingMapListener} callback - * will be triggered. - * - * @param style The bundled style - * @see Style - */ - public void setStyle(@Style.StyleUrl String style) { - this.setStyle(style, null); - } - - /** - * Loads a new map style from the specified bundled style. - * <p> - * If the style fails to load or an invalid style URL is set, the map view will become blank. - * An error message will be logged in the Android logcat and {@link MapView.OnDidFailLoadingMapListener} callback - * will be triggered. - * </p> - * - * @param style The bundled style - * @param callback The callback to be invoked when the style has loaded - * @see Style - */ - public void setStyle(@Style.StyleUrl String style, final Style.OnStyleLoaded callback) { - this.setStyle(new Style.Builder().fromUri(style), callback); - } - - /** - * Loads a new map style from the specified builder. - * <p> - * If the builder fails to load, the map view will become blank. An error message will be logged in the Android logcat - * and {@link MapView.OnDidFailLoadingMapListener} callback will be triggered. If you wish to wait for the map to - * finish loading, listen to the {@link MapView.OnDidFinishLoadingStyleListener} callback or use the - * {@link #setStyle(String, Style.OnStyleLoaded)} instead. - * </p> - * - * @param builder The style builder - * @see Style - */ - public void setStyle(Style.Builder builder) { - this.setStyle(builder, null); - } - - /** - * Loads a new map style from the specified builder. - * <p> - * If the builder fails to load, the map view will become blank. An error message will be logged in the Android logcat - * and {@link MapView.OnDidFailLoadingMapListener} callback will be triggered. - * </p> - * - * @param builder The style builder - * @param callback The callback to be invoked when the style has loaded - * @see Style - */ - public void setStyle(Style.Builder builder, final Style.OnStyleLoaded callback) { - styleLoadedCallback = callback; - locationComponent.onStartLoadingMap(); - if (style != null) { - style.clear(); - } - - style = builder.build(nativeMapView); - if (!TextUtils.isEmpty(builder.getUri())) { - nativeMapView.setStyleUri(builder.getUri()); - } else if (!TextUtils.isEmpty(builder.getJson())) { - nativeMapView.setStyleJson(builder.getJson()); - } else { - // user didn't provide a `from` component, load a blank style instead - nativeMapView.setStyleJson(Style.EMPTY_JSON); - } - } - - void notifyStyleLoaded() { - if (nativeMapView.isDestroyed()) { - return; - } - - if (style != null) { - style.onDidFinishLoadingStyle(); - locationComponent.onFinishLoadingStyle(); - - // notify the listener provided with the style setter - if (styleLoadedCallback != null) { - styleLoadedCallback.onStyleLoaded(style); - } - - // notify style getters - for (Style.OnStyleLoaded styleGetter : awaitingStyleGetters) { - styleGetter.onStyleLoaded(style); - } - } else { - MapStrictMode.strictModeViolation("No style to provide."); - } - styleLoadedCallback = null; - awaitingStyleGetters.clear(); - } - - // - // Annotations - // - - /** - * <p> - * Adds a marker to this map. - * </p> - * The marker's icon is rendered on the map at the location {@code Marker.position}. - * If {@code Marker.title} is defined, the map shows an info box with the marker's title and snippet. - * - * @param markerOptions A marker options object that defines how to render the marker - * @return The {@code Marker} that was added to the map - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - @NonNull - public Marker addMarker(@NonNull MarkerOptions markerOptions) { - return annotationManager.addMarker(markerOptions, this); - } - - /** - * <p> - * Adds a marker to this map. - * </p> - * The marker's icon is rendered on the map at the location {@code Marker.position}. - * If {@code Marker.title} is defined, the map shows an info box with the marker's title and snippet. - * - * @param markerOptions A marker options object that defines how to render the marker - * @return The {@code Marker} that was added to the map - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - @NonNull - public Marker addMarker(@NonNull BaseMarkerOptions markerOptions) { - return annotationManager.addMarker(markerOptions, this); - } - - /** - * <p> - * Adds multiple markers to this map. - * </p> - * The marker's icon is rendered on the map at the location {@code Marker.position}. - * If {@code Marker.title} is defined, the map shows an info box with the marker's title and snippet. - * - * @param markerOptionsList A list of marker options objects that defines how to render the markers - * @return A list of the {@code Marker}s that were added to the map - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - @NonNull - public List<Marker> addMarkers(@NonNull List<? extends - BaseMarkerOptions> markerOptionsList) { - return annotationManager.addMarkers(markerOptionsList, this); - } - - /** - * <p> - * Updates a marker on this map. Does nothing if the marker isn't already added. - * </p> - * - * @param updatedMarker An updated marker object - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public void updateMarker(@NonNull Marker updatedMarker) { - annotationManager.updateMarker(updatedMarker, this); - } - - /** - * Adds a polyline to this map. - * - * @param polylineOptions A polyline options object that defines how to render the polyline - * @return The {@code Polyine} that was added to the map - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - @NonNull - public Polyline addPolyline(@NonNull PolylineOptions polylineOptions) { - return annotationManager.addPolyline(polylineOptions, this); - } - - /** - * Adds multiple polylines to this map. - * - * @param polylineOptionsList A list of polyline options objects that defines how to render the polylines. - * @return A list of the {@code Polyline}s that were added to the map. - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - @NonNull - public List<Polyline> addPolylines(@NonNull List<PolylineOptions> polylineOptionsList) { - return annotationManager.addPolylines(polylineOptionsList, this); - } - - /** - * Update a polyline on this map. - * - * @param polyline An updated polyline object. - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public void updatePolyline(@NonNull Polyline polyline) { - annotationManager.updatePolyline(polyline); - } - - /** - * Adds a polygon to this map. - * - * @param polygonOptions A polygon options object that defines how to render the polygon. - * @return The {@code Polygon} that was added to the map. - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - @NonNull - public Polygon addPolygon(@NonNull PolygonOptions polygonOptions) { - return annotationManager.addPolygon(polygonOptions, this); - } - - /** - * Adds multiple polygons to this map. - * - * @param polygonOptionsList A list of polygon options objects that defines how to render the polygons - * @return A list of the {@code Polygon}s that were added to the map - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - @NonNull - public List<Polygon> addPolygons(@NonNull List<PolygonOptions> polygonOptionsList) { - return annotationManager.addPolygons(polygonOptionsList, this); - } - - /** - * Update a polygon on this map. - * - * @param polygon An updated polygon object - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public void updatePolygon(@NonNull Polygon polygon) { - annotationManager.updatePolygon(polygon); - } - - /** - * <p> - * Convenience method for removing a Marker from the map. - * </p> - * Calls removeAnnotation() internally. - * - * @param marker Marker to remove - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public void removeMarker(@NonNull Marker marker) { - annotationManager.removeAnnotation(marker); - } - - /** - * <p> - * Convenience method for removing a Polyline from the map. - * </p> - * Calls removeAnnotation() internally. - * - * @param polyline Polyline to remove - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public void removePolyline(@NonNull Polyline polyline) { - annotationManager.removeAnnotation(polyline); - } - - /** - * <p> - * Convenience method for removing a Polygon from the map. - * </p> - * Calls removeAnnotation() internally. - * - * @param polygon Polygon to remove - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public void removePolygon(@NonNull Polygon polygon) { - annotationManager.removeAnnotation(polygon); - } - - /** - * Removes an annotation from the map. - * - * @param annotation The annotation object to remove. - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public void removeAnnotation(@NonNull Annotation annotation) { - annotationManager.removeAnnotation(annotation); - } - - /** - * Removes an annotation from the map - * - * @param id The identifier associated to the annotation to be removed - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public void removeAnnotation(long id) { - annotationManager.removeAnnotation(id); - } - - /** - * Removes multiple annotations from the map. - * - * @param annotationList A list of annotation objects to remove. - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public void removeAnnotations(@NonNull List<? extends Annotation> annotationList) { - annotationManager.removeAnnotations(annotationList); - } - - /** - * Removes all annotations from the map. - * - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public void removeAnnotations() { - annotationManager.removeAnnotations(); - } - - /** - * Removes all markers, polylines, polygons, overlays, etc from the map. - * - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public void clear() { - annotationManager.removeAnnotations(); - } - - /** - * Return a annotation based on its id. - * - * @param id the id used to look up an annotation - * @return An annotation with a matched id, null is returned if no match was found - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - @Nullable - public Annotation getAnnotation(long id) { - return annotationManager.getAnnotation(id); - } - - /** - * Returns a list of all the annotations on the map. - * - * @return A list of all the annotation objects. The returned object is a copy so modifying this - * list will not update the map - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - @NonNull - public List<Annotation> getAnnotations() { - return annotationManager.getAnnotations(); - } - - /** - * Returns a list of all the markers on the map. - * - * @return A list of all the markers objects. The returned object is a copy so modifying this - * list will not update the map. - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - @NonNull - public List<Marker> getMarkers() { - return annotationManager.getMarkers(); - } - - /** - * Returns a list of all the polygons on the map. - * - * @return A list of all the polygon objects. The returned object is a copy so modifying this - * list will not update the map. - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - @NonNull - public List<Polygon> getPolygons() { - return annotationManager.getPolygons(); - } - - /** - * Returns a list of all the polylines on the map. - * - * @return A list of all the polylines objects. The returned object is a copy so modifying this - * list will not update the map. - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - @NonNull - public List<Polyline> getPolylines() { - return annotationManager.getPolylines(); - } - - /** - * Sets a callback that's invoked when the user clicks on a marker. - * - * @param listener The callback that's invoked when the user clicks on a marker. - * To unset the callback, use null. - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public void setOnMarkerClickListener(@Nullable OnMarkerClickListener listener) { - annotationManager.setOnMarkerClickListener(listener); - } - - /** - * Sets a callback that's invoked when the user clicks on a polygon. - * - * @param listener The callback that's invoked when the user clicks on a polygon. - * To unset the callback, use null. - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public void setOnPolygonClickListener(@Nullable OnPolygonClickListener listener) { - annotationManager.setOnPolygonClickListener(listener); - } - - /** - * Sets a callback that's invoked when the user clicks on a polyline. - * - * @param listener The callback that's invoked when the user clicks on a polyline. - * To unset the callback, use null. - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public void setOnPolylineClickListener(@Nullable OnPolylineClickListener listener) { - annotationManager.setOnPolylineClickListener(listener); - } - - /** - * <p> - * Selects a marker. The selected marker will have it's info window opened. - * Any other open info windows will be closed unless isAllowConcurrentMultipleOpenInfoWindows() - * is true. - * </p> - * Selecting an already selected marker will have no effect. - * - * @param marker The marker to select. - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public void selectMarker(@NonNull Marker marker) { - if (marker == null) { - Logger.w(TAG, "marker was null, so just returning"); - return; - } - annotationManager.selectMarker(marker); - } - - /** - * Deselects any currently selected marker. All markers will have it's info window closed. - * - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public void deselectMarkers() { - annotationManager.deselectMarkers(); - } - - /** - * Deselects a currently selected marker. The selected marker will have it's info window closed. - * - * @param marker the marker to deselect - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public void deselectMarker(@NonNull Marker marker) { - annotationManager.deselectMarker(marker); - } - - /** - * Gets the currently selected marker. - * - * @return The currently selected marker. - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - @NonNull - public List<Marker> getSelectedMarkers() { - return annotationManager.getSelectedMarkers(); - } - - // - // InfoWindow - // - - /** - * <p> - * Sets a custom renderer for the contents of info window. - * </p> - * When set your callback is invoked when an info window is about to be shown. By returning - * a custom {@link View}, the default info window will be replaced. - * - * @param infoWindowAdapter The callback to be invoked when an info window will be shown. - * To unset the callback, use null. - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public void setInfoWindowAdapter(@Nullable InfoWindowAdapter infoWindowAdapter) { - annotationManager.getInfoWindowManager().setInfoWindowAdapter(infoWindowAdapter); - } - - /** - * Gets the callback to be invoked when an info window will be shown. - * - * @return The callback to be invoked when an info window will be shown. - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - @Nullable - public InfoWindowAdapter getInfoWindowAdapter() { - return annotationManager.getInfoWindowManager().getInfoWindowAdapter(); - } - - /** - * Changes whether the map allows concurrent multiple infowindows to be shown. - * - * @param allow If true, map allows concurrent multiple infowindows to be shown. - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public void setAllowConcurrentMultipleOpenInfoWindows(boolean allow) { - annotationManager.getInfoWindowManager().setAllowConcurrentMultipleOpenInfoWindows(allow); - } - - /** - * Returns whether the map allows concurrent multiple infowindows to be shown. - * - * @return If true, map allows concurrent multiple infowindows to be shown. - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public boolean isAllowConcurrentMultipleOpenInfoWindows() { - return annotationManager.getInfoWindowManager().isAllowConcurrentMultipleOpenInfoWindows(); - } - - // - // LatLngBounds - // - - /** - * Sets a LatLngBounds that constraints map transformations to this bounds. - * <p> - * Set to null to clear current bounds, newly set bounds will override previously set bounds. - * </p> - * - * @param latLngBounds the bounds to constrain the map with - */ - public void setLatLngBoundsForCameraTarget(@Nullable LatLngBounds latLngBounds) { - nativeMapView.setLatLngBounds(latLngBounds); - } - - - /** - * Get a camera position that fits a provided bounds and the current camera tilt and bearing. - * - * @param latLngBounds the bounds to set the map with - * @return the camera position that fits the bounds - */ - @Nullable - public CameraPosition getCameraForLatLngBounds(@NonNull LatLngBounds latLngBounds) { - // we use current camera tilt value to provide expected transformations as #11993 - return getCameraForLatLngBounds(latLngBounds, new int[] {0, 0, 0, 0}); - } - - - /** - * Get a camera position that fits a provided bounds and padding and the current camera tilt and bearing. - * - * @param latLngBounds the bounds to set the map with - * @param padding the padding to apply to the bounds - * @return the camera position that fits the bounds and padding - */ - @Nullable - public CameraPosition getCameraForLatLngBounds(@NonNull LatLngBounds latLngBounds, - @NonNull @Size(value = 4) int[] padding) { - // we use current camera tilt/bearing value to provide expected transformations as #11993 - return getCameraForLatLngBounds(latLngBounds, padding, transform.getRawBearing(), transform.getTilt()); - } - - - /** - * Get a camera position that fits a provided bounds, bearing and tilt. - * - * @param latLngBounds the bounds to set the map with - * @param bearing the bearing to transform the camera position with - * @param tilt to transform the camera position with - * @return the camera position that fits the bounds and given bearing and tilt - */ - @Nullable - public CameraPosition getCameraForLatLngBounds(@NonNull LatLngBounds latLngBounds, - @FloatRange(from = MapboxConstants.MINIMUM_DIRECTION, - to = MapboxConstants.MAXIMUM_DIRECTION) double bearing, - @FloatRange(from = MapboxConstants.MINIMUM_TILT, - to = MapboxConstants.MAXIMUM_TILT) double tilt) { - return getCameraForLatLngBounds(latLngBounds, new int[] {0, 0, 0, 0}, bearing, tilt); - } - - - /** - * Get a camera position that fits a provided bounds, padding, bearing and tilt. - * - * @param latLngBounds the bounds to set the map with - * @param padding the padding to apply to the bounds - * @param bearing the bearing to transform the camera position with - * @param tilt to transform the camera position with - * @return the camera position that fits the bounds, bearing and tilt - */ - @Nullable - public CameraPosition getCameraForLatLngBounds(@NonNull LatLngBounds latLngBounds, - @NonNull @Size(value = 4) int[] padding, - @FloatRange(from = MapboxConstants.MINIMUM_DIRECTION, - to = MapboxConstants.MAXIMUM_DIRECTION) double bearing, - @FloatRange(from = MapboxConstants.MINIMUM_TILT, - to = MapboxConstants.MAXIMUM_TILT) double tilt) { - return nativeMapView.getCameraForLatLngBounds(latLngBounds, padding, bearing, tilt); - } - - /** - * Get a camera position that fits a provided shape. - * - * @param geometry the geometry to wraps the map with - * @return the camera position that fits the geometry inside - */ - @Nullable - public CameraPosition getCameraForGeometry(@NonNull Geometry geometry) { - // we use current camera tilt value to provide expected transformations as #11993 - return getCameraForGeometry(geometry, new int[] {0, 0, 0, 0}); - } - - /** - * Get a camera position that fits a provided shape and padding. - * - * @param geometry the geometry to wraps the map with - * @param padding the padding to apply to the bounds - * @return the camera position that fits the geometry inside and padding - */ - @Nullable - public CameraPosition getCameraForGeometry(@NonNull Geometry geometry, - @NonNull @Size(value = 4) int[] padding) { - // we use current camera tilt/bearing value to provide expected transformations as #11993 - return getCameraForGeometry(geometry, padding, transform.getBearing(), transform.getTilt()); - } - - /** - * Get a camera position that fits a provided shape with a given bearing and tilt. - * - * @param geometry the geometry to wraps the map with - * @param bearing the bearing at which to compute the geometry's bounds - * @param tilt the tilt at which to compute the geometry's bounds - * @return the camera position that the geometry inside with bearing and tilt - */ - @Nullable - public CameraPosition getCameraForGeometry(@NonNull Geometry geometry, - @FloatRange(from = MapboxConstants.MINIMUM_DIRECTION, - to = MapboxConstants.MAXIMUM_DIRECTION) double bearing, - @FloatRange(from = MapboxConstants.MINIMUM_TILT, - to = MapboxConstants.MAXIMUM_TILT) double tilt) { - return getCameraForGeometry(geometry, new int[] {0, 0, 0, 0}, bearing, tilt); - } - - /** - * Get a camera position that fits a provided shape with a given padding, bearing and tilt. - * - * @param geometry the geometry to wraps the map with - * @param padding the padding to apply to the bounds - * @param bearing the bearing at which to compute the geometry's bounds - * @param tilt the tilt at which to compute the geometry's bounds - * @return the camera position that fits the geometry inside with padding, bearing and tilt - */ - @Nullable - public CameraPosition getCameraForGeometry(@NonNull Geometry geometry, - @NonNull @Size(value = 4) int[] padding, - @FloatRange(from = MapboxConstants.MINIMUM_DIRECTION, - to = MapboxConstants.MAXIMUM_DIRECTION) double bearing, - @FloatRange(from = MapboxConstants.MINIMUM_TILT, - to = MapboxConstants.MAXIMUM_TILT) double tilt) { - return nativeMapView.getCameraForGeometry(geometry, padding, bearing, tilt); - } - - // - // Padding - // - - /** - * <p> - * Sets the distance from the edges of the map view's frame to the edges of the map - * view's logical viewport. - * </p> - * <p> - * When the value of this property is equal to {0,0,0,0}, viewport - * properties such as 'centerCoordinate' assume a viewport that matches the map - * view's frame. Otherwise, those properties are inset, excluding part of the - * frame from the viewport. For instance, if the only the top edge is inset, the - * map center is effectively shifted downward. - * </p> - * <p> - * This method sets the padding "lazily". - * This means that the <b>padding is going to be applied with the next camera transformation.</b> - * To apply the padding immediately use {@link CameraPosition.Builder#padding(double, double, double, double)} - * or {@link CameraUpdateFactory#paddingTo(double, double, double, double)}. - * </p> - * - * @param left The left margin in pixels. - * @param top The top margin in pixels. - * @param right The right margin in pixels. - * @param bottom The bottom margin in pixels. - * @deprecated Use {@link CameraPosition.Builder#padding(double, double, double, double)} - * or {@link CameraUpdateFactory#paddingTo(double, double, double, double)} instead. - */ - @Deprecated - public void setPadding(int left, int top, int right, int bottom) { - // TODO padding should be passed as doubles - projection.setContentPadding(new int[] {left, top, right, bottom}); - uiSettings.invalidate(); - } - - /** - * Returns the current configured content padding on map view. This might return the currently visible padding - * or the padding cached but not yet applied by {@link #setPadding(int, int, int, int)}. - * - * @return An array with length 4 in the LTRB order. - * @deprecated Use {@link CameraPosition#padding} instead. - */ - @Deprecated - @NonNull - public int[] getPadding() { - // TODO this should return double[] (semver major change) - return projection.getContentPadding(); - } - - // - // Map events - // - - /** - * Adds a callback that is invoked when camera movement has ended. - * - * @param listener the listener to notify - */ - public void addOnCameraIdleListener(@NonNull OnCameraIdleListener listener) { - cameraChangeDispatcher.addOnCameraIdleListener(listener); - } - - /** - * Removes a callback that is invoked when camera movement has ended. - * - * @param listener the listener to remove - */ - public void removeOnCameraIdleListener(@NonNull OnCameraIdleListener listener) { - cameraChangeDispatcher.removeOnCameraIdleListener(listener); - } - - /** - * Adds a callback that is invoked when camera movement was cancelled. - * - * @param listener the listener to notify - */ - public void addOnCameraMoveCancelListener(@NonNull OnCameraMoveCanceledListener listener) { - cameraChangeDispatcher.addOnCameraMoveCancelListener(listener); - } - - /** - * Removes a callback that is invoked when camera movement was cancelled. - * - * @param listener the listener to remove - */ - public void removeOnCameraMoveCancelListener(@NonNull OnCameraMoveCanceledListener listener) { - cameraChangeDispatcher.removeOnCameraMoveCancelListener(listener); - } - - /** - * Adds a callback that is invoked when camera movement has started. - * - * @param listener the listener to notify - */ - public void addOnCameraMoveStartedListener(@NonNull OnCameraMoveStartedListener listener) { - cameraChangeDispatcher.addOnCameraMoveStartedListener(listener); - } - - /** - * Removes a callback that is invoked when camera movement has started. - * - * @param listener the listener to remove - */ - public void removeOnCameraMoveStartedListener(@NonNull OnCameraMoveStartedListener listener) { - cameraChangeDispatcher.removeOnCameraMoveStartedListener(listener); - } - - /** - * Adds a callback that is invoked when camera position changes. - * - * @param listener the listener to notify - */ - public void addOnCameraMoveListener(@NonNull OnCameraMoveListener listener) { - cameraChangeDispatcher.addOnCameraMoveListener(listener); - } - - /** - * Removes a callback that is invoked when camera position changes. - * - * @param listener the listener to remove - */ - public void removeOnCameraMoveListener(@NonNull OnCameraMoveListener listener) { - cameraChangeDispatcher.removeOnCameraMoveListener(listener); - } - - /** - * Sets a callback that's invoked on every frame rendered to the map view. - * - * @param listener The callback that's invoked on every frame rendered to the map view. - * To unset the callback, use null. - */ - public void setOnFpsChangedListener(@Nullable OnFpsChangedListener listener) { - onFpsChangedListener = listener; - nativeMapView.setOnFpsChangedListener(listener); - } - - // used by MapView - @Nullable - OnFpsChangedListener getOnFpsChangedListener() { - return onFpsChangedListener; - } - - /** - * Adds a callback that's invoked when the map is flinged. - * - * @param listener The callback that's invoked when the map is flinged. - */ - public void addOnFlingListener(@NonNull OnFlingListener listener) { - onGesturesManagerInteractionListener.onAddFlingListener(listener); - } - - /** - * Removes a callback that's invoked when the map is flinged. - * - * @param listener The callback that's invoked when the map is flinged. - */ - public void removeOnFlingListener(@NonNull OnFlingListener listener) { - onGesturesManagerInteractionListener.onRemoveFlingListener(listener); - } - - /** - * Adds a callback that's invoked when the map is moved. - * - * @param listener The callback that's invoked when the map is moved. - */ - public void addOnMoveListener(@NonNull OnMoveListener listener) { - onGesturesManagerInteractionListener.onAddMoveListener(listener); - } - - /** - * Removes a callback that's invoked when the map is moved. - * - * @param listener The callback that's invoked when the map is moved. - */ - public void removeOnMoveListener(@NonNull OnMoveListener listener) { - onGesturesManagerInteractionListener.onRemoveMoveListener(listener); - } - - /** - * Adds a callback that's invoked when the map is rotated. - * - * @param listener The callback that's invoked when the map is rotated. - */ - public void addOnRotateListener(@NonNull OnRotateListener listener) { - onGesturesManagerInteractionListener.onAddRotateListener(listener); - } - - /** - * Removes a callback that's invoked when the map is rotated. - * - * @param listener The callback that's invoked when the map is rotated. - */ - public void removeOnRotateListener(@NonNull OnRotateListener listener) { - onGesturesManagerInteractionListener.onRemoveRotateListener(listener); - } - - /** - * Adds a callback that's invoked when the map is scaled. - * - * @param listener The callback that's invoked when the map is scaled. - */ - public void addOnScaleListener(@NonNull OnScaleListener listener) { - onGesturesManagerInteractionListener.onAddScaleListener(listener); - } - - /** - * Removes a callback that's invoked when the map is scaled. - * - * @param listener The callback that's invoked when the map is scaled. - */ - public void removeOnScaleListener(@NonNull OnScaleListener listener) { - onGesturesManagerInteractionListener.onRemoveScaleListener(listener); - } - - /** - * Adds a callback that's invoked when the map is tilted. - * - * @param listener The callback that's invoked when the map is tilted. - */ - public void addOnShoveListener(@NonNull OnShoveListener listener) { - onGesturesManagerInteractionListener.onAddShoveListener(listener); - } - - /** - * Remove a callback that's invoked when the map is tilted. - * - * @param listener The callback that's invoked when the map is tilted. - */ - public void removeOnShoveListener(@NonNull OnShoveListener listener) { - onGesturesManagerInteractionListener.onRemoveShoveListener(listener); - } - - /** - * Sets a custom {@link AndroidGesturesManager} to handle {@link android.view.MotionEvent}s - * registered by the {@link MapView}. - * - * @param androidGesturesManager Gestures manager that interprets gestures based on the motion events. - * @param attachDefaultListeners If true, pre-defined listeners will be attach - * to change map based on {@link AndroidGesturesManager} callbacks. - * @param setDefaultMutuallyExclusives If true, pre-defined mutually exclusive gesture sets - * will be added to the passed gestures manager. - * @see <a href="https://github.com/mapbox/mapbox-gestures-android">mapbox-gestures-android library</a> - */ - public void setGesturesManager(@NonNull AndroidGesturesManager androidGesturesManager, boolean attachDefaultListeners, - boolean setDefaultMutuallyExclusives) { - onGesturesManagerInteractionListener.setGesturesManager( - androidGesturesManager, attachDefaultListeners, setDefaultMutuallyExclusives); - } - - /** - * Get current {@link AndroidGesturesManager} that handles {@link android.view.MotionEvent}s - * registered by the {@link MapView} - * - * @return Current gestures manager. - */ - @NonNull - public AndroidGesturesManager getGesturesManager() { - return onGesturesManagerInteractionListener.getGesturesManager(); - } - - /** - * Interrupts any ongoing gesture velocity animations. - */ - public void cancelAllVelocityAnimations() { - onGesturesManagerInteractionListener.cancelAllVelocityAnimations(); - } - - /** - * Adds a callback that's invoked when the user clicks on the map view. - * - * @param listener The callback that's invoked when the user clicks on the map view. - */ - public void addOnMapClickListener(@NonNull OnMapClickListener listener) { - onGesturesManagerInteractionListener.onAddMapClickListener(listener); - } - - /** - * Removes a callback that's invoked when the user clicks on the map view. - * - * @param listener The callback that's invoked when the user clicks on the map view. - */ - public void removeOnMapClickListener(@NonNull OnMapClickListener listener) { - onGesturesManagerInteractionListener.onRemoveMapClickListener(listener); - } - - /** - * Adds a callback that's invoked when the user long clicks on the map view. - * - * @param listener The callback that's invoked when the user long clicks on the map view. - */ - public void addOnMapLongClickListener(@NonNull OnMapLongClickListener listener) { - onGesturesManagerInteractionListener.onAddMapLongClickListener(listener); - } - - /** - * Removes a callback that's invoked when the user long clicks on the map view. - * - * @param listener The callback that's invoked when the user long clicks on the map view. - */ - public void removeOnMapLongClickListener(@NonNull OnMapLongClickListener listener) { - onGesturesManagerInteractionListener.onRemoveMapLongClickListener(listener); - } - - /** - * Sets a callback that's invoked when the user clicks on an info window. - * - * @param listener The callback that's invoked when the user clicks on an info window. - * To unset the callback, use null. - */ - public void setOnInfoWindowClickListener(@Nullable OnInfoWindowClickListener listener) { - annotationManager.getInfoWindowManager().setOnInfoWindowClickListener(listener); - } - - /** - * Return the InfoWindow click listener - * - * @return Current active InfoWindow Click Listener - */ - @Nullable - public OnInfoWindowClickListener getOnInfoWindowClickListener() { - return annotationManager.getInfoWindowManager().getOnInfoWindowClickListener(); - } - - /** - * Sets a callback that's invoked when a marker's info window is long pressed. - * - * @param listener The callback that's invoked when a marker's info window is long pressed. To unset the callback, - * use null. - */ - public void setOnInfoWindowLongClickListener(@Nullable OnInfoWindowLongClickListener - listener) { - annotationManager.getInfoWindowManager().setOnInfoWindowLongClickListener(listener); - } - - /** - * Return the InfoWindow long click listener - * - * @return Current active InfoWindow long Click Listener - */ - @Nullable - public OnInfoWindowLongClickListener getOnInfoWindowLongClickListener() { - return annotationManager.getInfoWindowManager().getOnInfoWindowLongClickListener(); - } - - /** - * Set an callback to be invoked when an InfoWindow closes. - * - * @param listener callback invoked when an InfoWindow closes - */ - public void setOnInfoWindowCloseListener(@Nullable OnInfoWindowCloseListener listener) { - annotationManager.getInfoWindowManager().setOnInfoWindowCloseListener(listener); - } - - /** - * Return the InfoWindow close listener - * - * @return Current active InfoWindow Close Listener - */ - @Nullable - public OnInfoWindowCloseListener getOnInfoWindowCloseListener() { - return annotationManager.getInfoWindowManager().getOnInfoWindowCloseListener(); - } - - // - // Invalidate - // - - /** - * Takes a snapshot of the map. - * - * @param callback Callback method invoked when the snapshot is taken. - */ - public void snapshot(@NonNull SnapshotReadyCallback callback) { - nativeMapView.addSnapshotCallback(callback); - } - - /** - * Queries the map for rendered features. - * <p> - * Returns an empty list if either the map or underlying render surface has been destroyed. - * </p> - * - * @param coordinates the point to query - * @param layerIds optionally - only query these layers - * @return the list of feature - */ - @NonNull - public List<Feature> queryRenderedFeatures(@NonNull PointF coordinates, @Nullable String... layerIds) { - return nativeMapView.queryRenderedFeatures(coordinates, layerIds, null); - } - - /** - * Queries the map for rendered features - * <p> - * Returns an empty list if either the map or underlying render surface has been destroyed. - * </p> - * - * @param coordinates the point to query - * @param filter filters the returned features with an expression - * @param layerIds optionally - only query these layers - * @return the list of feature - */ - @NonNull - public List<Feature> queryRenderedFeatures(@NonNull PointF coordinates, - @Nullable Expression filter, - @Nullable String... layerIds) { - return nativeMapView.queryRenderedFeatures(coordinates, layerIds, filter); - } - - /** - * Queries the map for rendered features - * <p> - * Returns an empty list if either the map or underlying render surface has been destroyed. - * </p> - * - * @param coordinates the box to query - * @param layerIds optionally - only query these layers - * @return the list of feature - */ - @NonNull - public List<Feature> queryRenderedFeatures(@NonNull RectF coordinates, @Nullable String... layerIds) { - return nativeMapView.queryRenderedFeatures(coordinates, layerIds, null); - } - - /** - * Queries the map for rendered features - * <p> - * Returns an empty list if either the map or underlying render surface has been destroyed. - * </p> - * - * @param coordinates the box to query - * @param filter filters the returned features with an expression - * @param layerIds optionally - only query these layers - * @return the list of feature - */ - @NonNull - public List<Feature> queryRenderedFeatures(@NonNull RectF coordinates, - @Nullable Expression filter, - @Nullable String... layerIds) { - return nativeMapView.queryRenderedFeatures(coordinates, layerIds, filter); - } - - // - // LocationComponent - // - - void injectLocationComponent(LocationComponent locationComponent) { - this.locationComponent = locationComponent; - } - - void injectAnnotationManager(AnnotationManager annotationManager) { - this.annotationManager = annotationManager.bind(this); - } - - /** - * Returns the {@link LocationComponent} that can be used to display user's location on the map. - * <p> - * Use {@link LocationComponent#activateLocationComponent(Context, Style)} or any overload to activate the component, - * then, enable it with {@link LocationComponent#setLocationComponentEnabled(boolean)}. - * <p> - * You can customize the location icon and more with {@link com.mapbox.mapboxsdk.location.LocationComponentOptions}. - * - * @return the Location Component - */ - @NonNull - public LocationComponent getLocationComponent() { - return locationComponent; - } - - // - // Interfaces - // - - /** - * Interface definition for a callback to be invoked when the map is flinged. - * - * @see MapboxMap#addOnFlingListener(OnFlingListener) - */ - public interface OnFlingListener { - /** - * Called when the map is flinged. - */ - void onFling(); - } - - /** - * Interface definition for a callback to be invoked when the map is moved. - * - * @see MapboxMap#addOnMoveListener(OnMoveListener) - */ - public interface OnMoveListener { - void onMoveBegin(@NonNull MoveGestureDetector detector); - - void onMove(@NonNull MoveGestureDetector detector); - - void onMoveEnd(@NonNull MoveGestureDetector detector); - } - - /** - * Interface definition for a callback to be invoked when the map is rotated. - * - * @see MapboxMap#addOnRotateListener(OnRotateListener) - */ - public interface OnRotateListener { - void onRotateBegin(@NonNull RotateGestureDetector detector); - - void onRotate(@NonNull RotateGestureDetector detector); - - void onRotateEnd(@NonNull RotateGestureDetector detector); - } - - /** - * Interface definition for a callback to be invoked when the map is scaled. - * - * @see MapboxMap#addOnScaleListener(OnScaleListener) - */ - public interface OnScaleListener { - void onScaleBegin(@NonNull StandardScaleGestureDetector detector); - - void onScale(@NonNull StandardScaleGestureDetector detector); - - void onScaleEnd(@NonNull StandardScaleGestureDetector detector); - } - - /** - * Interface definition for a callback to be invoked when the map is tilted. - * - * @see MapboxMap#addOnShoveListener(OnShoveListener) - */ - public interface OnShoveListener { - void onShoveBegin(@NonNull ShoveGestureDetector detector); - - void onShove(@NonNull ShoveGestureDetector detector); - - void onShoveEnd(@NonNull ShoveGestureDetector detector); - } - - /** - * Interface definition for a callback to be invoked for when the camera motion starts. - */ - public interface OnCameraMoveStartedListener { - int REASON_API_GESTURE = 1; - int REASON_DEVELOPER_ANIMATION = 2; - int REASON_API_ANIMATION = 3; - - /** - * Called when the camera starts moving after it has been idle or when the reason for camera motion has changed. - * - * @param reason the reason for the camera change - */ - void onCameraMoveStarted(int reason); - } - - /** - * Interface definition for a callback to be invoked for when the camera changes position. - */ - public interface OnCameraMoveListener { - /** - * Called repeatedly as the camera continues to move after an onCameraMoveStarted call. - * This may be called as often as once every frame and should not perform expensive operations. - */ - void onCameraMove(); - } - - /** - * Interface definition for a callback to be invoked for when the camera's motion has been stopped or when the camera - * starts moving for a new reason. - */ - public interface OnCameraMoveCanceledListener { - /** - * Called when the developer explicitly calls the cancelTransitions() method or if the reason for camera motion has - * changed before the onCameraIdle had a chance to fire after the previous animation. - * Do not update or animate the camera from within this method. - */ - void onCameraMoveCanceled(); - } - - /** - * Interface definition for a callback to be invoked for when camera movement has ended. - */ - public interface OnCameraIdleListener { - /** - * Called when camera movement has ended. - */ - void onCameraIdle(); - } - - /** - * Interface definition for a callback to be invoked for when the compass is animating. - */ - public interface OnCompassAnimationListener { - /** - * Called repeatedly as the compass continues to move after clicking on it. - */ - void onCompassAnimation(); - - /** - * Called when compass animation has ended. - */ - void onCompassAnimationFinished(); - } - - /** - * Interface definition for a callback to be invoked when a frame is rendered to the map view. - * - * @see MapboxMap#setOnFpsChangedListener(OnFpsChangedListener) - */ - public interface OnFpsChangedListener { - /** - * Called for every frame rendered to the map view. - * - * @param fps The average number of frames rendered over the last second. - */ - void onFpsChanged(double fps); - } - - /** - * Interface definition for a callback to be invoked when a user registers an listener that is - * related to touch and click events. - */ - interface OnGesturesManagerInteractionListener { - - void onAddMapClickListener(OnMapClickListener listener); - - void onRemoveMapClickListener(OnMapClickListener listener); - - void onAddMapLongClickListener(OnMapLongClickListener listener); - - void onRemoveMapLongClickListener(OnMapLongClickListener listener); - - void onAddFlingListener(OnFlingListener listener); - - void onRemoveFlingListener(OnFlingListener listener); - - void onAddMoveListener(OnMoveListener listener); - - void onRemoveMoveListener(OnMoveListener listener); - - void onAddRotateListener(OnRotateListener listener); - - void onRemoveRotateListener(OnRotateListener listener); - - void onAddScaleListener(OnScaleListener listener); - - void onRemoveScaleListener(OnScaleListener listener); - - void onAddShoveListener(OnShoveListener listener); - - void onRemoveShoveListener(OnShoveListener listener); - - AndroidGesturesManager getGesturesManager(); - - void setGesturesManager(AndroidGesturesManager gesturesManager, boolean attachDefaultListeners, - boolean setDefaultMutuallyExclusives); - - void cancelAllVelocityAnimations(); - } - - /** - * Interface definition for a callback to be invoked when the user clicks on the map view. - * - * @see MapboxMap#addOnMapClickListener(OnMapClickListener) - */ - public interface OnMapClickListener { - /** - * Called when the user clicks on the map view. - * - * @param point The projected map coordinate the user clicked on. - * @return True if this click should be consumed and not passed further to other listeners registered afterwards, - * false otherwise. - */ - boolean onMapClick(@NonNull LatLng point); - } - - /** - * Interface definition for a callback to be invoked when the user long clicks on the map view. - * - * @see MapboxMap#addOnMapLongClickListener(OnMapLongClickListener) - */ - public interface OnMapLongClickListener { - /** - * Called when the user long clicks on the map view. - * - * @param point The projected map coordinate the user long clicked on. - * @return True if this click should be consumed and not passed further to other listeners registered afterwards, - * false otherwise. - */ - boolean onMapLongClick(@NonNull LatLng point); - } - - /** - * Interface definition for a callback to be invoked when the user clicks on a marker. - * - * @see MapboxMap#setOnMarkerClickListener(OnMarkerClickListener) - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public interface OnMarkerClickListener { - /** - * Called when the user clicks on a marker. - * - * @param marker The marker the user clicked on. - * @return If true the listener has consumed the event and the info window will not be shown. - */ - boolean onMarkerClick(@NonNull Marker marker); - } - - /** - * Interface definition for a callback to be invoked when the user clicks on a polygon. - * - * @see MapboxMap#setOnPolygonClickListener(OnPolygonClickListener) - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public interface OnPolygonClickListener { - /** - * Called when the user clicks on a polygon. - * - * @param polygon The polygon the user clicked on. - */ - void onPolygonClick(@NonNull Polygon polygon); - } - - /** - * Interface definition for a callback to be invoked when the user clicks on a polyline. - * - * @see MapboxMap#setOnPolylineClickListener(OnPolylineClickListener) - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public interface OnPolylineClickListener { - /** - * Called when the user clicks on a polyline. - * - * @param polyline The polyline the user clicked on. - */ - void onPolylineClick(@NonNull Polyline polyline); - } - - /** - * Interface definition for a callback to be invoked when the user clicks on an info window. - * - * @see MapboxMap#setOnInfoWindowClickListener(OnInfoWindowClickListener) - */ - public interface OnInfoWindowClickListener { - /** - * Called when the user clicks on an info window. - * - * @param marker The marker of the info window the user clicked on. - * @return If true the listener has consumed the event and the info window will not be closed. - */ - boolean onInfoWindowClick(@NonNull Marker marker); - } - - /** - * Interface definition for a callback to be invoked when the user long presses on a marker's info window. - * - * @see MapboxMap#setOnInfoWindowClickListener(OnInfoWindowClickListener) - */ - public interface OnInfoWindowLongClickListener { - - /** - * Called when the user makes a long-press gesture on the marker's info window. - * - * @param marker The marker were the info window is attached to - */ - void onInfoWindowLongClick(@NonNull Marker marker); - } - - /** - * Interface definition for a callback to be invoked when a marker's info window is closed. - * - * @see MapboxMap#setOnInfoWindowCloseListener(OnInfoWindowCloseListener) - */ - public interface OnInfoWindowCloseListener { - - /** - * Called when the marker's info window is closed. - * - * @param marker The marker of the info window that was closed. - */ - void onInfoWindowClose(@NonNull Marker marker); - } - - /** - * Interface definition for a callback to be invoked when an info window will be shown. - * - * @see MapboxMap#setInfoWindowAdapter(InfoWindowAdapter) - * @deprecated As of 7.0.0, - * use <a href="https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation"> - * Mapbox Annotation Plugin</a> instead - */ - @Deprecated - public interface InfoWindowAdapter { - /** - * Called when an info window will be shown as a result of a marker click. - * - * @param marker The marker the user clicked on. - * @return View to be shown as a info window. If null is returned the default - * info window will be shown. - */ - @Nullable - View getInfoWindow(@NonNull Marker marker); - } - - /** - * Interface definition for a callback to be invoked when a task is complete or cancelled. - */ - public interface CancelableCallback { - /** - * Invoked when a task is cancelled. - */ - void onCancel(); - - /** - * Invoked when a task is complete. - */ - void onFinish(); - } - - /** - * Interface definition for a callback to be invoked when the snapshot has been taken. - */ - public interface SnapshotReadyCallback { - /** - * Invoked when the snapshot has been taken. - * - * @param snapshot the snapshot bitmap - */ - void onSnapshotReady(@NonNull Bitmap snapshot); - } - - /** - * Internal use. - */ - public interface OnDeveloperAnimationListener { - - /** - * Notifies listener when a developer invoked animation is about to start. - */ - void onDeveloperAnimationStarted(); - } - - // - // Used for instrumentation testing - // - @NonNull - Transform getTransform() { - return transform; - } - - private void notifyDeveloperAnimationListeners() { - for (OnDeveloperAnimationListener listener : developerAnimationStartedListeners) { - listener.onDeveloperAnimationStarted(); - } - } -} |