From c045468d2fdec87553562748ec8760aca0032920 Mon Sep 17 00:00:00 2001 From: tobrun Date: Mon, 10 Sep 2018 14:38:08 +0200 Subject: [android] - add cleanup ondestroy method, implement list of listeners --- .../annotations/annotationManager.java.ejs | 48 ++++++++++++---- .../annotations/circle/CircleManager.java | 46 ++++++++++++---- .../mapbox/mapboxsdk/annotations/fill/Fill.java | 5 -- .../mapboxsdk/annotations/fill/FillManager.java | 47 ++++++++++++---- .../mapboxsdk/annotations/line/LineManager.java | 47 ++++++++++++---- .../annotations/symbol/SymbolManager.java | 64 ++++++++++++++++++---- .../testapp/annotations/SymbolManagerTest.java | 13 +++++ .../activity/maplayout/SimpleMapActivity.java | 25 ++++++--- 8 files changed, 224 insertions(+), 71 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/annotationManager.java.ejs b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/annotationManager.java.ejs index c6fe161348..d9a4deb9d4 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/annotationManager.java.ejs +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/annotationManager.java.ejs @@ -36,11 +36,13 @@ public class <%- camelize(type) %>Manager { public static final String ID_GEOJSON_LAYER = "mapbox-android-<%- type %>-layer"; // map integration components + private MapboxMap mapboxMap; private GeoJsonSource geoJsonSource; private <%- camelize(type) %>Layer layer; // callback listeners - private On<%- camelize(type) %>ClickListener <%- type %>ClickListener; + private ListClickListener> <%- type %>ClickListeners = new ArrayList<>(); + private final MapClickResolver mapClickResolver; // internal data set private final LongSparseArray<<%- camelize(type) %>> <%- type %>s = new LongSparseArray<>(); @@ -70,11 +72,21 @@ public class <%- camelize(type) %>Manager { */ @VisibleForTesting public <%- camelize(type) %>Manager(MapboxMap mapboxMap, @NonNull GeoJsonSource geoJsonSource, <%- camelize(type) %>Layer layer) { + this.mapboxMap = mapboxMap; this.geoJsonSource = geoJsonSource; this.layer = layer; mapboxMap.addSource(geoJsonSource); mapboxMap.addLayer(layer); - mapboxMap.addOnMapClickListener(new MapClickResolver(mapboxMap)); + mapboxMap.addOnMapClickListener(mapClickResolver = new MapClickResolver(mapboxMap)); + } + + /** + * Cleanup <%- type %> manager, used to clear listeners + */ + @UiThread + public void onDestroy() { + mapboxMap.removeOnMapClickListener(mapClickResolver); + <%- type %>ClickListeners.clear(); } <% if (type === "circle" || type === "symbol") { -%> @@ -162,21 +174,31 @@ public class <%- camelize(type) %>Manager { } /** - * Set a callback to be invoked when a <%- type %> has been clicked. - *

- * To unset, use a null argument. - *

+ * Add a callback to be invoked when a <%- type %> has been clicked. * - * @param <%- type %>ClickListener the callback to be invoked when a <%- type %> is clicked, or null to unset + * @param listener the callback to be invoked when a <%- type %> is clicked */ - public void setOn<%- camelize(type) %>ClickListener(@Nullable On<%- camelize(type) %>ClickListener <%- type %>ClickListener) { - this.<%- type %>ClickListener = <%- type %>ClickListener; + @UiThread + public void addOn<%- camelize(type) %>ClickListener(@NonNull On<%- camelize(type) %>ClickListener listener) { + <%- type %>ClickListeners.add(listener); + } + + /** + * Remove a previously added callback that was to be invoked when <%- type %> has been clicked. + * + * @param listener the callback to be removed + */ + @UiThread + public void removeOn<%- camelize(type) %>ClickListener(@NonNull On<%- camelize(type) %>ClickListener listener) { + if (<%- type %>ClickListeners.contains(listener)) { + <%- type %>ClickListeners.remove(listener); + } } private static PropertyValue[] getLayerDefinition() { return new PropertyValue[]{ <% for (const property of properties) { -%> -<% if (supportsPropertyFunction(property)) { -%> +<% if (supportsPropertyFunction(property) && property.name !== "fill-pattern" && property.name !== "line-pattern") { -%> <%- camelizeWithLeadingLowercase(property.name) %>(get("<%- property.name %>")), <% } -%><% } -%> }; @@ -218,7 +240,7 @@ public class <%- camelize(type) %>Manager { @Override public void onMapClick(@NonNull LatLng point) { - if (<%- type %>ClickListener == null) { + if (<%- type %>ClickListeners.isEmpty()) { return; } @@ -228,7 +250,9 @@ public class <%- camelize(type) %>Manager { long <%- type %>Id = features.get(0).getProperty(<%- camelize(type) %>.ID_KEY).getAsLong(); <%- camelize(type) %> <%- type %> = <%- type %>s.get(<%- type %>Id); if (<%- type %> != null) { - <%- type %>ClickListener.on<%- camelize(type) %>Click(<%- type %>s.get(<%- type %>Id)); + for (On<%- camelize(type) %>ClickListener listener : <%- type %>ClickListeners) { + listener.on<%- camelize(type) %>Click(<%- type %>); + } } } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/circle/CircleManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/circle/CircleManager.java index 4a15b021a5..e371eaa31d 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/circle/CircleManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/circle/CircleManager.java @@ -31,11 +31,13 @@ public class CircleManager { public static final String ID_GEOJSON_LAYER = "mapbox-android-circle-layer"; // map integration components + private MapboxMap mapboxMap; private GeoJsonSource geoJsonSource; private CircleLayer layer; // callback listeners - private OnCircleClickListener circleClickListener; + private List circleClickListeners = new ArrayList<>(); + private final MapClickResolver mapClickResolver; // internal data set private final LongSparseArray circles = new LongSparseArray<>(); @@ -65,11 +67,21 @@ public class CircleManager { */ @VisibleForTesting public CircleManager(MapboxMap mapboxMap, @NonNull GeoJsonSource geoJsonSource, CircleLayer layer) { + this.mapboxMap = mapboxMap; this.geoJsonSource = geoJsonSource; this.layer = layer; mapboxMap.addSource(geoJsonSource); mapboxMap.addLayer(layer); - mapboxMap.addOnMapClickListener(new MapClickResolver(mapboxMap)); + mapboxMap.addOnMapClickListener(mapClickResolver = new MapClickResolver(mapboxMap)); + } + + /** + * Cleanup circle manager, used to clear listeners + */ + @UiThread + public void onDestroy() { + mapboxMap.removeOnMapClickListener(mapClickResolver); + circleClickListeners.clear(); } /** @@ -123,15 +135,25 @@ public class CircleManager { } /** - * Set a callback to be invoked when a circle has been clicked. - *

- * To unset, use a null argument. - *

+ * Add a callback to be invoked when a circle has been clicked. * - * @param circleClickListener the callback to be invoked when a circle is clicked, or null to unset + * @param listener the callback to be invoked when a circle is clicked */ - public void setOnCircleClickListener(@Nullable OnCircleClickListener circleClickListener) { - this.circleClickListener = circleClickListener; + @UiThread + public void addOnCircleClickListener(@NonNull OnCircleClickListener listener) { + circleClickListeners.add(listener); + } + + /** + * Remove a previously added callback that was to be invoked when circle has been clicked. + * + * @param listener the callback to be removed + */ + @UiThread + public void removeOnCircleClickListener(@NonNull OnCircleClickListener listener) { + if (circleClickListeners.contains(listener)) { + circleClickListeners.remove(listener); + } } private static PropertyValue[] getLayerDefinition() { @@ -232,7 +254,7 @@ public class CircleManager { @Override public void onMapClick(@NonNull LatLng point) { - if (circleClickListener == null) { + if (circleClickListeners.isEmpty()) { return; } @@ -242,7 +264,9 @@ public class CircleManager { long circleId = features.get(0).getProperty(Circle.ID_KEY).getAsLong(); Circle circle = circles.get(circleId); if (circle != null) { - circleClickListener.onCircleClick(circles.get(circleId)); + for (OnCircleClickListener listener : circleClickListeners) { + listener.onCircleClick(circle); + } } } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/fill/Fill.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/fill/Fill.java index b9714c5e73..bd3da0c57f 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/fill/Fill.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/fill/Fill.java @@ -79,11 +79,6 @@ public class Fill { fillManager.updateSource(); } - public void setGeometry(Geometry geometry){ - geometry = geometry; - fillManager.updateSource(); - } - // Property accessors /** * Get the FillOpacity property diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/fill/FillManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/fill/FillManager.java index 9fcdb92544..e9a5ee6680 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/fill/FillManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/fill/FillManager.java @@ -31,11 +31,13 @@ public class FillManager { public static final String ID_GEOJSON_LAYER = "mapbox-android-fill-layer"; // map integration components + private MapboxMap mapboxMap; private GeoJsonSource geoJsonSource; private FillLayer layer; // callback listeners - private OnFillClickListener fillClickListener; + private List fillClickListeners = new ArrayList<>(); + private final MapClickResolver mapClickResolver; // internal data set private final LongSparseArray fills = new LongSparseArray<>(); @@ -65,11 +67,21 @@ public class FillManager { */ @VisibleForTesting public FillManager(MapboxMap mapboxMap, @NonNull GeoJsonSource geoJsonSource, FillLayer layer) { + this.mapboxMap = mapboxMap; this.geoJsonSource = geoJsonSource; this.layer = layer; mapboxMap.addSource(geoJsonSource); mapboxMap.addLayer(layer); - mapboxMap.addOnMapClickListener(new MapClickResolver(mapboxMap)); + mapboxMap.addOnMapClickListener(mapClickResolver = new MapClickResolver(mapboxMap)); + } + + /** + * Cleanup fill manager, used to clear listeners + */ + @UiThread + public void onDestroy() { + mapboxMap.removeOnMapClickListener(mapClickResolver); + fillClickListeners.clear(); } /** @@ -123,15 +135,25 @@ public class FillManager { } /** - * Set a callback to be invoked when a fill has been clicked. - *

- * To unset, use a null argument. - *

+ * Add a callback to be invoked when a fill has been clicked. * - * @param fillClickListener the callback to be invoked when a fill is clicked, or null to unset + * @param listener the callback to be invoked when a fill is clicked */ - public void setOnFillClickListener(@Nullable OnFillClickListener fillClickListener) { - this.fillClickListener = fillClickListener; + @UiThread + public void addOnFillClickListener(@NonNull OnFillClickListener listener) { + fillClickListeners.add(listener); + } + + /** + * Remove a previously added callback that was to be invoked when fill has been clicked. + * + * @param listener the callback to be removed + */ + @UiThread + public void removeOnFillClickListener(@NonNull OnFillClickListener listener) { + if (fillClickListeners.contains(listener)) { + fillClickListeners.remove(listener); + } } private static PropertyValue[] getLayerDefinition() { @@ -139,7 +161,6 @@ public class FillManager { fillOpacity(get("fill-opacity")), fillColor(get("fill-color")), fillOutlineColor(get("fill-outline-color")), - //fillPattern(get("fill-pattern")), }; } @@ -211,7 +232,7 @@ public class FillManager { @Override public void onMapClick(@NonNull LatLng point) { - if (fillClickListener == null) { + if (fillClickListeners.isEmpty()) { return; } @@ -221,7 +242,9 @@ public class FillManager { long fillId = features.get(0).getProperty(Fill.ID_KEY).getAsLong(); Fill fill = fills.get(fillId); if (fill != null) { - fillClickListener.onFillClick(fills.get(fillId)); + for (OnFillClickListener listener : fillClickListeners) { + listener.onFillClick(fill); + } } } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/line/LineManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/line/LineManager.java index cb4f794520..a7865a62cb 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/line/LineManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/line/LineManager.java @@ -31,11 +31,13 @@ public class LineManager { public static final String ID_GEOJSON_LAYER = "mapbox-android-line-layer"; // map integration components + private MapboxMap mapboxMap; private GeoJsonSource geoJsonSource; private LineLayer layer; // callback listeners - private OnLineClickListener lineClickListener; + private List lineClickListeners = new ArrayList<>(); + private final MapClickResolver mapClickResolver; // internal data set private final LongSparseArray lines = new LongSparseArray<>(); @@ -65,11 +67,21 @@ public class LineManager { */ @VisibleForTesting public LineManager(MapboxMap mapboxMap, @NonNull GeoJsonSource geoJsonSource, LineLayer layer) { + this.mapboxMap = mapboxMap; this.geoJsonSource = geoJsonSource; this.layer = layer; mapboxMap.addSource(geoJsonSource); mapboxMap.addLayer(layer); - mapboxMap.addOnMapClickListener(new MapClickResolver(mapboxMap)); + mapboxMap.addOnMapClickListener(mapClickResolver = new MapClickResolver(mapboxMap)); + } + + /** + * Cleanup line manager, used to clear listeners + */ + @UiThread + public void onDestroy() { + mapboxMap.removeOnMapClickListener(mapClickResolver); + lineClickListeners.clear(); } /** @@ -123,15 +135,25 @@ public class LineManager { } /** - * Set a callback to be invoked when a line has been clicked. - *

- * To unset, use a null argument. - *

+ * Add a callback to be invoked when a line has been clicked. * - * @param lineClickListener the callback to be invoked when a line is clicked, or null to unset + * @param listener the callback to be invoked when a line is clicked */ - public void setOnLineClickListener(@Nullable OnLineClickListener lineClickListener) { - this.lineClickListener = lineClickListener; + @UiThread + public void addOnLineClickListener(@NonNull OnLineClickListener listener) { + lineClickListeners.add(listener); + } + + /** + * Remove a previously added callback that was to be invoked when line has been clicked. + * + * @param listener the callback to be removed + */ + @UiThread + public void removeOnLineClickListener(@NonNull OnLineClickListener listener) { + if (lineClickListeners.contains(listener)) { + lineClickListeners.remove(listener); + } } private static PropertyValue[] getLayerDefinition() { @@ -143,7 +165,6 @@ public class LineManager { lineGapWidth(get("line-gap-width")), lineOffset(get("line-offset")), lineBlur(get("line-blur")), - linePattern(get("line-pattern")), }; } @@ -269,7 +290,7 @@ public class LineManager { @Override public void onMapClick(@NonNull LatLng point) { - if (lineClickListener == null) { + if (lineClickListeners.isEmpty()) { return; } @@ -279,7 +300,9 @@ public class LineManager { long lineId = features.get(0).getProperty(Line.ID_KEY).getAsLong(); Line line = lines.get(lineId); if (line != null) { - lineClickListener.onLineClick(lines.get(lineId)); + for (OnLineClickListener listener : lineClickListeners) { + listener.onLineClick(line); + } } } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/symbol/SymbolManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/symbol/SymbolManager.java index 9a12e65c1a..ad10d45c2d 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/symbol/SymbolManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/symbol/SymbolManager.java @@ -31,11 +31,13 @@ public class SymbolManager { public static final String ID_GEOJSON_LAYER = "mapbox-android-symbol-layer"; // map integration components + private MapboxMap mapboxMap; private GeoJsonSource geoJsonSource; private SymbolLayer layer; // callback listeners - private OnSymbolClickListener symbolClickListener; + private List symbolClickListeners = new ArrayList<>(); + private final MapClickResolver mapClickResolver; // internal data set private final LongSparseArray symbols = new LongSparseArray<>(); @@ -65,11 +67,21 @@ public class SymbolManager { */ @VisibleForTesting public SymbolManager(MapboxMap mapboxMap, @NonNull GeoJsonSource geoJsonSource, SymbolLayer layer) { + this.mapboxMap = mapboxMap; this.geoJsonSource = geoJsonSource; this.layer = layer; mapboxMap.addSource(geoJsonSource); mapboxMap.addLayer(layer); - mapboxMap.addOnMapClickListener(new MapClickResolver(mapboxMap)); + mapboxMap.addOnMapClickListener(mapClickResolver = new MapClickResolver(mapboxMap)); + } + + /** + * Cleanup symbol manager, used to clear listeners + */ + @UiThread + public void onDestroy() { + mapboxMap.removeOnMapClickListener(mapClickResolver); + symbolClickListeners.clear(); } /** @@ -123,15 +135,25 @@ public class SymbolManager { } /** - * Set a callback to be invoked when a symbol has been clicked. - *

- * To unset, use a null argument. - *

+ * Add a callback to be invoked when a symbol has been clicked. * - * @param symbolClickListener the callback to be invoked when a symbol is clicked, or null to unset + * @param listener the callback to be invoked when a symbol is clicked */ - public void setOnSymbolClickListener(@Nullable OnSymbolClickListener symbolClickListener) { - this.symbolClickListener = symbolClickListener; + @UiThread + public void addOnSymbolClickListener(@NonNull OnSymbolClickListener listener) { + symbolClickListeners.add(listener); + } + + /** + * Remove a previously added callback that was to be invoked when symbol has been clicked. + * + * @param listener the callback to be removed + */ + @UiThread + public void removeOnSymbolClickListener(@NonNull OnSymbolClickListener listener) { + if (symbolClickListeners.contains(listener)) { + symbolClickListeners.remove(listener); + } } private static PropertyValue[] getLayerDefinition() { @@ -219,6 +241,24 @@ public class SymbolManager { layer.setProperties(symbolAvoidEdges(value)); } + /** + * Get the SymbolZOrder property + * + * @return property wrapper value around String + */ + public String getSymbolZOrder() { + return layer.getSymbolZOrder().value; + } + + /** + * Set the SymbolZOrder property + * + * @param value property wrapper value around String + */ + public void setSymbolZOrder(String value) { + layer.setProperties(symbolZOrder(value)); + } + /** * Get the IconAllowOverlap property * @@ -628,7 +668,7 @@ public class SymbolManager { @Override public void onMapClick(@NonNull LatLng point) { - if (symbolClickListener == null) { + if (symbolClickListeners.isEmpty()) { return; } @@ -638,7 +678,9 @@ public class SymbolManager { long symbolId = features.get(0).getProperty(Symbol.ID_KEY).getAsLong(); Symbol symbol = symbols.get(symbolId); if (symbol != null) { - symbolClickListener.onSymbolClick(symbols.get(symbolId)); + for (OnSymbolClickListener listener : symbolClickListeners) { + listener.onSymbolClick(symbol); + } } } } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/annotations/SymbolManagerTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/annotations/SymbolManagerTest.java index 2f36e31e2b..7f1708eb82 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/annotations/SymbolManagerTest.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/annotations/SymbolManagerTest.java @@ -79,6 +79,19 @@ public class SymbolManagerTest extends BaseActivityTest { }); } + @Test + public void testSymbolZOrderAsConstant() { + validateTestSetup(); + setupSymbolManager(); + Timber.i("symbol-z-order"); + invoke(mapboxMap, (uiController, mapboxMap) -> { + assertNotNull(symbolManager); + + symbolManager.setSymbolZOrder(SYMBOL_Z_ORDER_VIEWPORT_Y); + assertEquals((String) symbolManager.getSymbolZOrder(), (String) SYMBOL_Z_ORDER_VIEWPORT_Y); + }); + } + @Test public void testIconAllowOverlapAsConstant() { validateTestSetup(); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/SimpleMapActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/SimpleMapActivity.java index 228badf0ff..34cf95e2a0 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/SimpleMapActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/SimpleMapActivity.java @@ -38,6 +38,11 @@ public class SimpleMapActivity extends AppCompatActivity { private static final String MAKI_ICON_CAR = "car-15"; private static final String MAKI_ICON_CAFE = "cafe-15"; + private SymbolManager symbolManager; + private FillManager fillManager; + private CircleManager circleManager; + private LineManager lineManager; + private MapView mapView; private Symbol symbol; private Circle circle; @@ -61,8 +66,8 @@ public class SimpleMapActivity extends AppCompatActivity { private void createSymbols(MapboxMap mapboxMap) { // create symbol manager - SymbolManager symbolManager = new SymbolManager(mapboxMap); - symbolManager.setOnSymbolClickListener(symbol -> Timber.e("Symbol clicked with id: %s", symbol.getId())); + symbolManager = new SymbolManager(mapboxMap); + symbolManager.addOnSymbolClickListener(symbol -> Timber.e("Symbol clicked with id: %s", symbol.getId())); // set non data driven properties symbolManager.setIconAllowOverlap(true); @@ -83,8 +88,8 @@ public class SimpleMapActivity extends AppCompatActivity { private void createCircles(MapboxMap mapboxMap) { // create circle manager - CircleManager circleManager = new CircleManager(mapboxMap); - circleManager.setOnCircleClickListener(circle -> Timber.e("Symbol clicked with id: %s", circle.getId())); + circleManager = new CircleManager(mapboxMap); + circleManager.addOnCircleClickListener(circle -> Timber.e("Circle clicked with id: %s", circle.getId())); // set non data driven properties // circleManager. @@ -98,8 +103,8 @@ public class SimpleMapActivity extends AppCompatActivity { private void createLines(MapboxMap mapboxMap) { // create line manager - LineManager lineManager = new LineManager(mapboxMap); - lineManager.setOnLineClickListener(line -> Timber.e("Symbol clicked with id: %s", line.getId())); + lineManager = new LineManager(mapboxMap); + lineManager.addOnLineClickListener(line -> Timber.e("Line clicked with id: %s", line.getId())); // set non data driven properties lineManager.setLineCap(LINE_CAP_ROUND); @@ -117,8 +122,8 @@ public class SimpleMapActivity extends AppCompatActivity { private void createFills(MapboxMap mapboxMap) { // create fill manager - FillManager fillManager = new FillManager(mapboxMap); - fillManager.setOnFillClickListener(fill -> Timber.e("Symbol clicked with id: %s", fill.getId())); + fillManager = new FillManager(mapboxMap); + fillManager.addOnFillClickListener(fill -> Timber.e("Fill clicked with id: %s", fill.getId())); // set non data driven properties //fillManager. @@ -207,6 +212,10 @@ public class SimpleMapActivity extends AppCompatActivity { @Override protected void onDestroy() { super.onDestroy(); + symbolManager.onDestroy(); + lineManager.onDestroy(); + circleManager.onDestroy(); + fillManager.onDestroy(); mapView.onDestroy(); } -- cgit v1.2.1