diff options
Diffstat (limited to 'platform/android')
7 files changed, 78 insertions, 0 deletions
diff --git a/platform/android/CHANGELOG.md b/platform/android/CHANGELOG.md index 13162c0b48..8031232d43 100644 --- a/platform/android/CHANGELOG.md +++ b/platform/android/CHANGELOG.md @@ -3,6 +3,7 @@ Mapbox welcomes participation and contributions from everyone. If you'd like to do so please see the [`Contributing Guide`](https://github.com/mapbox/mapbox-gl-native/blob/master/CONTRIBUTING.md) first to get started. ## master +- Add `symbol-z-order` symbol layout property to style spec [#12783](https://github.com/mapbox/mapbox-gl-native/pull/12783) ## 6.5.0-beta.1 - September 5, 2018 - Retain shared thread pool reference [#12811](https://github.com/mapbox/mapbox-gl-native/pull/12811) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Property.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Property.java index ba3619567d..1c87b9004b 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Property.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Property.java @@ -108,6 +108,27 @@ public final class Property { @Retention(RetentionPolicy.SOURCE) public @interface SYMBOL_PLACEMENT {} + // SYMBOL_Z_ORDER: Controls the order in which overlapping symbols in the same layer are rendered + + /** + * Symbols will be sorted by their y-position relative to the viewport. + */ + public static final String SYMBOL_Z_ORDER_VIEWPORT_Y = "viewport-y"; + /** + * Symbols will be rendered in the same order as the source data with no sorting applied. + */ + public static final String SYMBOL_Z_ORDER_SOURCE = "source"; + + /** + * Controls the order in which overlapping symbols in the same layer are rendered + */ + @StringDef({ + SYMBOL_Z_ORDER_VIEWPORT_Y, + SYMBOL_Z_ORDER_SOURCE, + }) + @Retention(RetentionPolicy.SOURCE) + public @interface SYMBOL_Z_ORDER {} + // ICON_ROTATION_ALIGNMENT: In combination with `symbol-placement`, determines the rotation behavior of icons. /** diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java index c619d0141a..670548f12e 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java @@ -1765,6 +1765,26 @@ public class PropertyFactory { } /** + * Controls the order in which overlapping symbols in the same layer are rendered + * + * @param value a String value + * @return property wrapper around String + */ + public static PropertyValue<String> symbolZOrder(@Property.SYMBOL_Z_ORDER String value) { + return new LayoutPropertyValue<>("symbol-z-order", value); + } + + /** + * Controls the order in which overlapping symbols in the same layer are rendered + * + * @param value a String value + * @return property wrapper around String + */ + public static PropertyValue<Expression> symbolZOrder(Expression value) { + return new LayoutPropertyValue<>("symbol-z-order", value); + } + + /** * If true, the icon will be visible even if it collides with other previously drawn symbols. * * @param value a Boolean value 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 3c4924bb6f..1d45f34bd3 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 @@ -171,6 +171,17 @@ public class SymbolLayer extends Layer { } /** + * Get the SymbolZOrder property + * + * @return property wrapper value around String + */ + @SuppressWarnings("unchecked") + public PropertyValue<String> getSymbolZOrder() { + checkThread(); + return (PropertyValue<String>) new PropertyValue("symbol-z-order", nativeGetSymbolZOrder()); + } + + /** * Get the IconAllowOverlap property * * @return property wrapper value around Boolean @@ -1005,6 +1016,9 @@ public class SymbolLayer extends Layer { private native Object nativeGetSymbolAvoidEdges(); @Keep + private native Object nativeGetSymbolZOrder(); + + @Keep private native Object nativeGetIconAllowOverlap(); @Keep diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java index 8cf452a6cf..98c9c27fc2 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java @@ -160,6 +160,20 @@ public class SymbolLayerTest extends BaseActivityTest { } @Test + public void testSymbolZOrderAsConstant() { + validateTestSetup(); + setupLayer(); + Timber.i("symbol-z-order"); + invoke(mapboxMap, (uiController, mapboxMap) -> { + assertNotNull(layer); + + // Set and Get + layer.setProperties(symbolZOrder(SYMBOL_Z_ORDER_VIEWPORT_Y)); + assertEquals((String) layer.getSymbolZOrder().getValue(), (String) SYMBOL_Z_ORDER_VIEWPORT_Y); + }); + } + + @Test public void testIconAllowOverlapAsConstant() { validateTestSetup(); setupLayer(); diff --git a/platform/android/src/style/layers/symbol_layer.cpp b/platform/android/src/style/layers/symbol_layer.cpp index a0f37c91d2..f1c77c61a9 100644 --- a/platform/android/src/style/layers/symbol_layer.cpp +++ b/platform/android/src/style/layers/symbol_layer.cpp @@ -50,6 +50,11 @@ namespace android { return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getSymbolAvoidEdges())); } + jni::Local<jni::Object<>> SymbolLayer::getSymbolZOrder(jni::JNIEnv& env) { + using namespace mbgl::android::conversion; + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getSymbolZOrder())); + } + jni::Local<jni::Object<>> SymbolLayer::getIconAllowOverlap(jni::JNIEnv& env) { using namespace mbgl::android::conversion; return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconAllowOverlap())); @@ -463,6 +468,7 @@ namespace android { METHOD(&SymbolLayer::getSymbolPlacement, "nativeGetSymbolPlacement"), METHOD(&SymbolLayer::getSymbolSpacing, "nativeGetSymbolSpacing"), METHOD(&SymbolLayer::getSymbolAvoidEdges, "nativeGetSymbolAvoidEdges"), + METHOD(&SymbolLayer::getSymbolZOrder, "nativeGetSymbolZOrder"), METHOD(&SymbolLayer::getIconAllowOverlap, "nativeGetIconAllowOverlap"), METHOD(&SymbolLayer::getIconIgnorePlacement, "nativeGetIconIgnorePlacement"), METHOD(&SymbolLayer::getIconOptional, "nativeGetIconOptional"), diff --git a/platform/android/src/style/layers/symbol_layer.hpp b/platform/android/src/style/layers/symbol_layer.hpp index 206a6546c3..9887fd8fb7 100644 --- a/platform/android/src/style/layers/symbol_layer.hpp +++ b/platform/android/src/style/layers/symbol_layer.hpp @@ -33,6 +33,8 @@ public: jni::Local<jni::Object<jni::ObjectTag>> getSymbolAvoidEdges(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getSymbolZOrder(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconAllowOverlap(jni::JNIEnv&); jni::Local<jni::Object<jni::ObjectTag>> getIconIgnorePlacement(jni::JNIEnv&); |