From 3a4a27c95f1c10c480532c46c4edb7b3120b7a2b Mon Sep 17 00:00:00 2001 From: Ivo van Dongen Date: Thu, 10 Nov 2016 12:07:25 +0100 Subject: [PATCH] [android] fix layer ownership --- .../mapbox/mapboxsdk/maps/NativeMapView.java | 1 - .../style/layers/BackgroundLayer.java | 4 -- .../style/layers/CannotAddLayerException.java | 12 ++++ .../mapboxsdk/style/layers/CircleLayer.java | 11 ---- .../mapboxsdk/style/layers/FillLayer.java | 12 ---- .../mapbox/mapboxsdk/style/layers/Layer.java | 18 ------ .../mapboxsdk/style/layers/LineLayer.java | 18 ------ .../mapboxsdk/style/layers/RasterLayer.java | 8 --- .../mapboxsdk/style/layers/SymbolLayer.java | 55 ------------------- .../mapboxsdk/style/layers/layer.java.ejs | 5 -- .../testapp/style/RuntimeStyleTests.java | 8 +-- platform/android/src/jni.cpp | 11 ++-- platform/android/src/style/layers/layer.cpp | 17 +++++- platform/android/src/style/layers/layer.hpp | 13 ++++- 14 files changed, 45 insertions(+), 148 deletions(-) create mode 100644 platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/CannotAddLayerException.java diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java index 3e4e1dd30..dba11e167 100755 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java @@ -488,7 +488,6 @@ final class NativeMapView { public void addLayer(@NonNull Layer layer, @Nullable String before) { nativeAddLayer(nativeMapViewPtr, layer.getNativePtr(), before); - layer.invalidate(); } public void removeLayer(@NonNull String layerId) throws NoSuchLayerException { diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/BackgroundLayer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/BackgroundLayer.java index 893ffbc1e..a3d9a4228 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/BackgroundLayer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/BackgroundLayer.java @@ -55,7 +55,6 @@ public class BackgroundLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getBackgroundColor() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetBackgroundColor()); } /** @@ -66,7 +65,6 @@ public class BackgroundLayer extends Layer { */ @ColorInt public int getBackgroundColorAsInt() { - checkValidity(); PropertyValue value = getBackgroundColor(); if (value.isValue()) { return rgbaToColor(value.getValue()); @@ -83,7 +81,6 @@ public class BackgroundLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getBackgroundPattern() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetBackgroundPattern()); } @@ -94,7 +91,6 @@ public class BackgroundLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getBackgroundOpacity() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetBackgroundOpacity()); } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/CannotAddLayerException.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/CannotAddLayerException.java new file mode 100644 index 000000000..088c82f31 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/CannotAddLayerException.java @@ -0,0 +1,12 @@ +package com.mapbox.mapboxsdk.style.layers; + +/** + * Thrown when adding a layer to a map twice + */ +public class CannotAddLayerException extends RuntimeException { + + public CannotAddLayerException(String message) { + super(message); + } + +} diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/CircleLayer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/CircleLayer.java index a9f081b2f..ce448c2e7 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/CircleLayer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/CircleLayer.java @@ -42,7 +42,6 @@ public class CircleLayer extends Layer { * @param sourceLayer the source layer to set */ public void setSourceLayer(String sourceLayer) { - checkValidity(); nativeSetSourceLayer(sourceLayer); } @@ -62,7 +61,6 @@ public class CircleLayer extends Layer { * @param filter the filter to set */ public void setFilter(Filter.Statement filter) { - checkValidity(); this.setFilter(filter.toArray()); } @@ -72,7 +70,6 @@ public class CircleLayer extends Layer { * @param filter the filter array to set */ public void setFilter(Object[] filter) { - checkValidity(); nativeSetFilter(filter); } @@ -119,7 +116,6 @@ public class CircleLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getCircleRadius() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetCircleRadius()); } @@ -130,7 +126,6 @@ public class CircleLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getCircleColor() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetCircleColor()); } /** @@ -141,7 +136,6 @@ public class CircleLayer extends Layer { */ @ColorInt public int getCircleColorAsInt() { - checkValidity(); PropertyValue value = getCircleColor(); if (value.isValue()) { return rgbaToColor(value.getValue()); @@ -158,7 +152,6 @@ public class CircleLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getCircleBlur() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetCircleBlur()); } @@ -169,7 +162,6 @@ public class CircleLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getCircleOpacity() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetCircleOpacity()); } @@ -180,7 +172,6 @@ public class CircleLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getCircleTranslate() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetCircleTranslate()); } @@ -191,7 +182,6 @@ public class CircleLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getCircleTranslateAnchor() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetCircleTranslateAnchor()); } @@ -202,7 +192,6 @@ public class CircleLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getCirclePitchScale() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetCirclePitchScale()); } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/FillLayer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/FillLayer.java index e19dc2028..73d8a709a 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/FillLayer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/FillLayer.java @@ -42,7 +42,6 @@ public class FillLayer extends Layer { * @param sourceLayer the source layer to set */ public void setSourceLayer(String sourceLayer) { - checkValidity(); nativeSetSourceLayer(sourceLayer); } @@ -62,7 +61,6 @@ public class FillLayer extends Layer { * @param filter the filter to set */ public void setFilter(Filter.Statement filter) { - checkValidity(); this.setFilter(filter.toArray()); } @@ -72,7 +70,6 @@ public class FillLayer extends Layer { * @param filter the filter array to set */ public void setFilter(Object[] filter) { - checkValidity(); nativeSetFilter(filter); } @@ -119,7 +116,6 @@ public class FillLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getFillAntialias() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetFillAntialias()); } @@ -130,7 +126,6 @@ public class FillLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getFillOpacity() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetFillOpacity()); } @@ -141,7 +136,6 @@ public class FillLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getFillColor() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetFillColor()); } /** @@ -152,7 +146,6 @@ public class FillLayer extends Layer { */ @ColorInt public int getFillColorAsInt() { - checkValidity(); PropertyValue value = getFillColor(); if (value.isValue()) { return rgbaToColor(value.getValue()); @@ -169,7 +162,6 @@ public class FillLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getFillOutlineColor() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetFillOutlineColor()); } /** @@ -180,7 +172,6 @@ public class FillLayer extends Layer { */ @ColorInt public int getFillOutlineColorAsInt() { - checkValidity(); PropertyValue value = getFillOutlineColor(); if (value.isValue()) { return rgbaToColor(value.getValue()); @@ -197,7 +188,6 @@ public class FillLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getFillTranslate() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetFillTranslate()); } @@ -208,7 +198,6 @@ public class FillLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getFillTranslateAnchor() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetFillTranslateAnchor()); } @@ -219,7 +208,6 @@ public class FillLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getFillPattern() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetFillPattern()); } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Layer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Layer.java index 54d18962c..9b39d9726 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Layer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Layer.java @@ -18,8 +18,6 @@ public abstract class Layer { } public void setProperties(@NonNull Property... properties) { - checkValidity(); - if (properties.length == 0) { return; } @@ -35,32 +33,26 @@ public abstract class Layer { } public String getId() { - checkValidity(); return nativeGetId(); } public PropertyValue getVisibility() { - checkValidity(); return new PropertyValue<>(nativeGetVisibility()); } public float getMinZoom() { - checkValidity(); return nativeGetMinZoom(); } public float getMaxZoom() { - checkValidity(); return nativeGetMaxZoom(); } public void setMinZoom(float zoom) { - checkValidity(); nativeSetMinZoom(zoom); } public void setMaxZoom(float zoom) { - checkValidity(); nativeSetMaxZoom(zoom); } @@ -94,14 +86,4 @@ public abstract class Layer { private Object convertValue(Object value) { return value != null && value instanceof Function ? ((Function) value).toValueObject() : value; } - - protected void checkValidity() { - if (invalidated) { - throw new RuntimeException("Layer has been invalidated. Request a new reference after adding"); - } - } - - public final void invalidate() { - this.invalidated = true; - } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/LineLayer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/LineLayer.java index 896558a01..fae4f6713 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/LineLayer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/LineLayer.java @@ -42,7 +42,6 @@ public class LineLayer extends Layer { * @param sourceLayer the source layer to set */ public void setSourceLayer(String sourceLayer) { - checkValidity(); nativeSetSourceLayer(sourceLayer); } @@ -62,7 +61,6 @@ public class LineLayer extends Layer { * @param filter the filter to set */ public void setFilter(Filter.Statement filter) { - checkValidity(); this.setFilter(filter.toArray()); } @@ -72,7 +70,6 @@ public class LineLayer extends Layer { * @param filter the filter array to set */ public void setFilter(Object[] filter) { - checkValidity(); nativeSetFilter(filter); } @@ -119,7 +116,6 @@ public class LineLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getLineCap() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetLineCap()); } @@ -130,7 +126,6 @@ public class LineLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getLineJoin() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetLineJoin()); } @@ -141,7 +136,6 @@ public class LineLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getLineMiterLimit() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetLineMiterLimit()); } @@ -152,7 +146,6 @@ public class LineLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getLineRoundLimit() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetLineRoundLimit()); } @@ -163,7 +156,6 @@ public class LineLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getLineOpacity() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetLineOpacity()); } @@ -174,7 +166,6 @@ public class LineLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getLineColor() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetLineColor()); } /** @@ -185,7 +176,6 @@ public class LineLayer extends Layer { */ @ColorInt public int getLineColorAsInt() { - checkValidity(); PropertyValue value = getLineColor(); if (value.isValue()) { return rgbaToColor(value.getValue()); @@ -202,7 +192,6 @@ public class LineLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getLineTranslate() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetLineTranslate()); } @@ -213,7 +202,6 @@ public class LineLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getLineTranslateAnchor() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetLineTranslateAnchor()); } @@ -224,7 +212,6 @@ public class LineLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getLineWidth() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetLineWidth()); } @@ -235,7 +222,6 @@ public class LineLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getLineGapWidth() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetLineGapWidth()); } @@ -246,7 +232,6 @@ public class LineLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getLineOffset() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetLineOffset()); } @@ -257,7 +242,6 @@ public class LineLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getLineBlur() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetLineBlur()); } @@ -268,7 +252,6 @@ public class LineLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getLineDasharray() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetLineDasharray()); } @@ -279,7 +262,6 @@ public class LineLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getLinePattern() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetLinePattern()); } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/RasterLayer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/RasterLayer.java index e5f33aced..8a0bca76b 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/RasterLayer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/RasterLayer.java @@ -42,7 +42,6 @@ public class RasterLayer extends Layer { * @param sourceLayer the source layer to set */ public void setSourceLayer(String sourceLayer) { - checkValidity(); nativeSetSourceLayer(sourceLayer); } @@ -77,7 +76,6 @@ public class RasterLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getRasterOpacity() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetRasterOpacity()); } @@ -88,7 +86,6 @@ public class RasterLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getRasterHueRotate() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetRasterHueRotate()); } @@ -99,7 +96,6 @@ public class RasterLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getRasterBrightnessMin() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetRasterBrightnessMin()); } @@ -110,7 +106,6 @@ public class RasterLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getRasterBrightnessMax() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetRasterBrightnessMax()); } @@ -121,7 +116,6 @@ public class RasterLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getRasterSaturation() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetRasterSaturation()); } @@ -132,7 +126,6 @@ public class RasterLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getRasterContrast() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetRasterContrast()); } @@ -143,7 +136,6 @@ public class RasterLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getRasterFadeDuration() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetRasterFadeDuration()); } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/SymbolLayer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/SymbolLayer.java index 4ceebd8bc..d89c80abf 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/SymbolLayer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/SymbolLayer.java @@ -42,7 +42,6 @@ public class SymbolLayer extends Layer { * @param sourceLayer the source layer to set */ public void setSourceLayer(String sourceLayer) { - checkValidity(); nativeSetSourceLayer(sourceLayer); } @@ -62,7 +61,6 @@ public class SymbolLayer extends Layer { * @param filter the filter to set */ public void setFilter(Filter.Statement filter) { - checkValidity(); this.setFilter(filter.toArray()); } @@ -72,7 +70,6 @@ public class SymbolLayer extends Layer { * @param filter the filter array to set */ public void setFilter(Object[] filter) { - checkValidity(); nativeSetFilter(filter); } @@ -119,7 +116,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getSymbolPlacement() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetSymbolPlacement()); } @@ -130,7 +126,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getSymbolSpacing() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetSymbolSpacing()); } @@ -141,7 +136,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getSymbolAvoidEdges() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetSymbolAvoidEdges()); } @@ -152,7 +146,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getIconAllowOverlap() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetIconAllowOverlap()); } @@ -163,7 +156,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getIconIgnorePlacement() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetIconIgnorePlacement()); } @@ -174,7 +166,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getIconOptional() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetIconOptional()); } @@ -185,7 +176,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getIconRotationAlignment() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetIconRotationAlignment()); } @@ -196,7 +186,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getIconSize() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetIconSize()); } @@ -207,7 +196,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getIconTextFit() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetIconTextFit()); } @@ -218,7 +206,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getIconTextFitPadding() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetIconTextFitPadding()); } @@ -229,7 +216,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getIconImage() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetIconImage()); } @@ -240,7 +226,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getIconRotate() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetIconRotate()); } @@ -251,7 +236,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getIconPadding() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetIconPadding()); } @@ -262,7 +246,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getIconKeepUpright() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetIconKeepUpright()); } @@ -273,7 +256,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getIconOffset() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetIconOffset()); } @@ -284,7 +266,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextPitchAlignment() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextPitchAlignment()); } @@ -295,7 +276,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextRotationAlignment() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextRotationAlignment()); } @@ -306,7 +286,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextField() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextField()); } @@ -317,7 +296,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextFont() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextFont()); } @@ -328,7 +306,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextSize() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextSize()); } @@ -339,7 +316,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextMaxWidth() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextMaxWidth()); } @@ -350,7 +326,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextLineHeight() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextLineHeight()); } @@ -361,7 +336,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextLetterSpacing() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextLetterSpacing()); } @@ -372,7 +346,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextJustify() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextJustify()); } @@ -383,7 +356,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextAnchor() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextAnchor()); } @@ -394,7 +366,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextMaxAngle() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextMaxAngle()); } @@ -405,7 +376,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextRotate() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextRotate()); } @@ -416,7 +386,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextPadding() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextPadding()); } @@ -427,7 +396,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextKeepUpright() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextKeepUpright()); } @@ -438,7 +406,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextTransform() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextTransform()); } @@ -449,7 +416,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextOffset() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextOffset()); } @@ -460,7 +426,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextAllowOverlap() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextAllowOverlap()); } @@ -471,7 +436,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextIgnorePlacement() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextIgnorePlacement()); } @@ -482,7 +446,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextOptional() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextOptional()); } @@ -493,7 +456,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getIconOpacity() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetIconOpacity()); } @@ -504,7 +466,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getIconColor() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetIconColor()); } /** @@ -515,7 +476,6 @@ public class SymbolLayer extends Layer { */ @ColorInt public int getIconColorAsInt() { - checkValidity(); PropertyValue value = getIconColor(); if (value.isValue()) { return rgbaToColor(value.getValue()); @@ -532,7 +492,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getIconHaloColor() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetIconHaloColor()); } /** @@ -543,7 +502,6 @@ public class SymbolLayer extends Layer { */ @ColorInt public int getIconHaloColorAsInt() { - checkValidity(); PropertyValue value = getIconHaloColor(); if (value.isValue()) { return rgbaToColor(value.getValue()); @@ -560,7 +518,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getIconHaloWidth() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetIconHaloWidth()); } @@ -571,7 +528,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getIconHaloBlur() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetIconHaloBlur()); } @@ -582,7 +538,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getIconTranslate() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetIconTranslate()); } @@ -593,7 +548,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getIconTranslateAnchor() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetIconTranslateAnchor()); } @@ -604,7 +558,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextOpacity() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextOpacity()); } @@ -615,7 +568,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextColor() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextColor()); } /** @@ -626,7 +578,6 @@ public class SymbolLayer extends Layer { */ @ColorInt public int getTextColorAsInt() { - checkValidity(); PropertyValue value = getTextColor(); if (value.isValue()) { return rgbaToColor(value.getValue()); @@ -643,7 +594,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextHaloColor() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextHaloColor()); } /** @@ -654,7 +604,6 @@ public class SymbolLayer extends Layer { */ @ColorInt public int getTextHaloColorAsInt() { - checkValidity(); PropertyValue value = getTextHaloColor(); if (value.isValue()) { return rgbaToColor(value.getValue()); @@ -671,7 +620,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextHaloWidth() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextHaloWidth()); } @@ -682,7 +630,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextHaloBlur() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextHaloBlur()); } @@ -693,7 +640,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextTranslate() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextTranslate()); } @@ -704,7 +650,6 @@ public class SymbolLayer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue getTextTranslateAnchor() { - checkValidity(); return (PropertyValue) new PropertyValue(nativeGetTextTranslateAnchor()); } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/layer.java.ejs b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/layer.java.ejs index f7865c6b6..11e9e243e 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/layer.java.ejs +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/layer.java.ejs @@ -59,7 +59,6 @@ public class <%- camelize(type) %>Layer extends Layer { * @param sourceLayer the source layer to set */ public void setSourceLayer(String sourceLayer) { - checkValidity(); nativeSetSourceLayer(sourceLayer); } @@ -81,7 +80,6 @@ public class <%- camelize(type) %>Layer extends Layer { * @param filter the filter to set */ public void setFilter(Filter.Statement filter) { - checkValidity(); this.setFilter(filter.toArray()); } @@ -91,7 +89,6 @@ public class <%- camelize(type) %>Layer extends Layer { * @param filter the filter array to set */ public void setFilter(Object[] filter) { - checkValidity(); nativeSetFilter(filter); } @@ -140,7 +137,6 @@ public class <%- camelize(type) %>Layer extends Layer { */ @SuppressWarnings("unchecked") public PropertyValue<<%- propertyType(property) %>> get<%- camelize(property.name) %>() { - checkValidity(); return (PropertyValue<<%- propertyType(property) %>>) new PropertyValue(nativeGet<%- camelize(property.name) %>()); } <% if (property.type == 'color') { -%> @@ -152,7 +148,6 @@ public class <%- camelize(type) %>Layer extends Layer { */ @ColorInt public int get<%- camelize(property.name) %>AsInt() { - checkValidity(); PropertyValue<<%- propertyType(property) %>> value = get<%- camelize(property.name) %>(); if (value.isValue()) { return rgbaToColor(value.getValue()); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/RuntimeStyleTests.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/RuntimeStyleTests.java index f9ee324ea..d1318e713 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/RuntimeStyleTests.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/RuntimeStyleTests.java @@ -104,12 +104,8 @@ public class RuntimeStyleTests { mapboxMap.addLayer(layer); assertNotNull(mapboxMap.getLayer("building")); - try { - layer.setProperties(PropertyFactory.visibility(Property.VISIBLE)); - assertTrue("Never reached as the reference is invalid after adding", false); - } catch (Exception e) { - //Expected, reference is no longer valid - } + //Assure the reference still works + layer.setProperties(PropertyFactory.visibility(Property.VISIBLE)); } } diff --git a/platform/android/src/jni.cpp b/platform/android/src/jni.cpp index 1168fb9b8..832fa436c 100755 --- a/platform/android/src/jni.cpp +++ b/platform/android/src/jni.cpp @@ -1100,12 +1100,13 @@ void nativeAddLayer(JNIEnv *env, jni::jobject* obj, jlong nativeMapViewPtr, jlon assert(nativeLayerPtr != 0); NativeMapView *nativeMapView = reinterpret_cast(nativeMapViewPtr); - Layer *layer = reinterpret_cast(nativeLayerPtr); - nativeMapView->getMap().addLayer( - layer->releaseCoreLayer(), - before ? mbgl::optional(std_string_from_jstring(env, before)) : mbgl::optional() - ); + Layer *layer = reinterpret_cast(nativeLayerPtr); + try { + layer->addToMap(nativeMapView->getMap(), before ? mbgl::optional(std_string_from_jstring(env, before)) : mbgl::optional()); + } catch (const std::runtime_error& error) { + jni::ThrowNew(*env, jni::FindClass(*env, "com/mapbox/mapboxsdk/style/layers/CannotAddLayerException"), error.what()); + } } void nativeRemoveLayer(JNIEnv *env, jni::jobject* obj, jlong nativeMapViewPtr, jni::jstring* id) { diff --git a/platform/android/src/style/layers/layer.cpp b/platform/android/src/style/layers/layer.cpp index 3c1fc0af6..aa6df4047 100644 --- a/platform/android/src/style/layers/layer.cpp +++ b/platform/android/src/style/layers/layer.cpp @@ -32,8 +32,17 @@ namespace android { Layer::~Layer() { } - jni::String Layer::getId(jni::JNIEnv& env) { - return jni::Make(env, layer.getID()); + void Layer::addToMap(mbgl::Map& _map, mbgl::optional before) { + //Check to see if we own the layer first + if (!ownedLayer) { + throw std::runtime_error("Cannot add layer twice"); + } + + //Add layer to map + _map.addLayer(releaseCoreLayer(), before); + + //Save pointer to the map + this->map = &_map; } std::unique_ptr Layer::releaseCoreLayer() { @@ -41,6 +50,10 @@ namespace android { return std::move(ownedLayer); } + jni::String Layer::getId(jni::JNIEnv& env) { + return jni::Make(env, layer.getID()); + } + void Layer::setLayoutProperty(jni::JNIEnv& env, jni::String jname, jni::Object<> jvalue) { Value value(env, jvalue); diff --git a/platform/android/src/style/layers/layer.hpp b/platform/android/src/style/layers/layer.hpp index 024a3c38b..01eac2280 100644 --- a/platform/android/src/style/layers/layer.hpp +++ b/platform/android/src/style/layers/layer.hpp @@ -34,10 +34,9 @@ public: virtual jni::jobject* createJavaPeer(jni::JNIEnv&) = 0; - jni::String getId(jni::JNIEnv&); + void addToMap(mbgl::Map&, mbgl::optional); - //Release the owned view and return it - std::unique_ptr releaseCoreLayer(); + jni::String getId(jni::JNIEnv&); void setLayoutProperty(jni::JNIEnv&, jni::String, jni::Object<> value); @@ -64,8 +63,16 @@ public: jni::Object getVisibility(jni::JNIEnv&); protected: + //Release the owned view and return it + std::unique_ptr releaseCoreLayer(); + + //Owned layer is set when creating a new layer, before adding it to the map std::unique_ptr ownedLayer; + + //Raw reference to the layer mbgl::style::Layer& layer; + + //Map is set when the layer is retrieved or after adding to the map mbgl::Map* map; };