From 74c75326fc4d75076f842f738109b009190bfce9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Mon, 30 Mar 2020 17:26:12 +0200 Subject: [android] add bindings for LocationIndicatorLayer --- include/mbgl/style/layers/layer.hpp.ejs | 2 +- platform/android/android.cmake | 2 + platform/android/src/conversion/constant.cpp | 10 ++ platform/android/src/conversion/constant.hpp | 16 ++ .../android/src/style/layers/background_layer.cpp | 17 +- platform/android/src/style/layers/circle_layer.cpp | 18 +- .../src/style/layers/fill_extrusion_layer.cpp | 23 ++- platform/android/src/style/layers/fill_layer.cpp | 18 +- .../android/src/style/layers/heatmap_layer.cpp | 18 +- .../android/src/style/layers/hillshade_layer.cpp | 17 +- platform/android/src/style/layers/layer.cpp.ejs | 4 +- platform/android/src/style/layers/layer.hpp.ejs | 2 +- .../android/src/style/layers/layer_manager.cpp | 4 + platform/android/src/style/layers/line_layer.cpp | 18 +- .../src/style/layers/location_component_layer.cpp | 192 +++++++++++++++++++++ .../src/style/layers/location_component_layer.hpp | 76 ++++++++ platform/android/src/style/layers/raster_layer.cpp | 18 +- platform/android/src/style/layers/symbol_layer.cpp | 18 +- src/mbgl/style/layers/layer.cpp.ejs | 2 +- 19 files changed, 385 insertions(+), 90 deletions(-) create mode 100644 platform/android/src/style/layers/location_component_layer.cpp create mode 100644 platform/android/src/style/layers/location_component_layer.hpp diff --git a/include/mbgl/style/layers/layer.hpp.ejs b/include/mbgl/style/layers/layer.hpp.ejs index 42cc12959f..198a3e5a4e 100644 --- a/include/mbgl/style/layers/layer.hpp.ejs +++ b/include/mbgl/style/layers/layer.hpp.ejs @@ -29,7 +29,7 @@ class TransitionOptions; class <%- camelize(type) %>Layer : public Layer { public: -<% if ((type === 'background') || (type === 'location-component')) { -%> +<% if (type === 'background' || type === 'location-component') { -%> <%- camelize(type) %>Layer(const std::string& layerID); <% } else { -%> <%- camelize(type) %>Layer(const std::string& layerID, const std::string& sourceID); diff --git a/platform/android/android.cmake b/platform/android/android.cmake index 89f3860dfb..0927c22605 100644 --- a/platform/android/android.cmake +++ b/platform/android/android.cmake @@ -179,6 +179,8 @@ target_sources( ${PROJECT_SOURCE_DIR}/platform/android/src/style/layers/raster_layer.hpp ${PROJECT_SOURCE_DIR}/platform/android/src/style/layers/symbol_layer.cpp ${PROJECT_SOURCE_DIR}/platform/android/src/style/layers/symbol_layer.hpp + ${PROJECT_SOURCE_DIR}/platform/android/src/style/layers/location_component_layer.cpp + ${PROJECT_SOURCE_DIR}/platform/android/src/style/layers/location_component_layer.hpp ${PROJECT_SOURCE_DIR}/platform/android/src/style/light.cpp ${PROJECT_SOURCE_DIR}/platform/android/src/style/light.hpp ${PROJECT_SOURCE_DIR}/platform/android/src/style/position.cpp diff --git a/platform/android/src/conversion/constant.cpp b/platform/android/src/conversion/constant.cpp index 46a91026df..53c63e1e67 100644 --- a/platform/android/src/conversion/constant.cpp +++ b/platform/android/src/conversion/constant.cpp @@ -52,6 +52,16 @@ Result>> Converter>, std::vect return result; } +Result>> Converter>, std::vector>::operator()(jni::JNIEnv& env, const std::vector& value) const { + auto result = jni::Array::New(env, value.size()); + + for (std::size_t i = 0; i < value.size(); i++) { + result.Set(env, i, jni::Box(env, value.at(i))); + } + + return result; +} + Result>> Converter>, style::expression::Image>::operator()( jni::JNIEnv& env, const style::expression::Image& value) const { return jni::Make(env, value.id()); diff --git a/platform/android/src/conversion/constant.hpp b/platform/android/src/conversion/constant.hpp index a9239fe845..b291f29f04 100644 --- a/platform/android/src/conversion/constant.hpp +++ b/platform/android/src/conversion/constant.hpp @@ -72,6 +72,17 @@ struct Converter>, std::array> { } }; +template +struct Converter>, std::array> { + Result>> operator()(jni::JNIEnv& env, const std::array& value) const { + std::vector v; + for (const double& id : value) { + v.push_back(id); + } + return convert>, std::vector>(env, v); + } +}; + template <> struct Converter>, std::vector> { Result>> operator()(jni::JNIEnv& env, const std::vector& value) const; @@ -82,6 +93,11 @@ struct Converter>, std::vector> { Result>> operator()(jni::JNIEnv& env, const std::vector& value) const; }; +template <> +struct Converter>, std::vector> { + Result>> operator()(jni::JNIEnv& env, const std::vector& value) const; +}; + template struct Converter>, T, typename std::enable_if_t::value>> { Result>> operator()(jni::JNIEnv& env, const T& value) const { diff --git a/platform/android/src/style/layers/background_layer.cpp b/platform/android/src/style/layers/background_layer.cpp index 3eae30677f..d0084dc2de 100644 --- a/platform/android/src/style/layers/background_layer.cpp +++ b/platform/android/src/style/layers/background_layer.cpp @@ -26,13 +26,16 @@ namespace android { /** * Creates a non-owning peer object (for layers currently attached to the map) */ - BackgroundLayer::BackgroundLayer(mbgl::style::BackgroundLayer& coreLayer) : Layer(coreLayer) {} + BackgroundLayer::BackgroundLayer(mbgl::style::BackgroundLayer& coreLayer) + : Layer(coreLayer) { + } /** * Creates an owning peer object (for layers not attached to the map) */ BackgroundLayer::BackgroundLayer(std::unique_ptr coreLayer) - : Layer(std::move(coreLayer)) {} + : Layer(std::move(coreLayer)) { + } BackgroundLayer::~BackgroundLayer() = default; @@ -105,18 +108,14 @@ namespace android { } } // namespace - jni::Local> BackgroundJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, - mbgl::style::Layer& layer) { + jni::Local> BackgroundJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::style::Layer& layer) { assert(layer.baseImpl->getTypeInfo() == getTypeInfo()); return createJavaPeer(env, new BackgroundLayer(toBackgroundLayer(layer))); } - jni::Local> BackgroundJavaLayerPeerFactory::createJavaLayerPeer( - jni::JNIEnv& env, std::unique_ptr layer) { + jni::Local> BackgroundJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, std::unique_ptr layer) { assert(layer->baseImpl->getTypeInfo() == getTypeInfo()); - return createJavaPeer(env, - new BackgroundLayer(std::unique_ptr( - static_cast(layer.release())))); + return createJavaPeer(env, new BackgroundLayer(std::unique_ptr(static_cast(layer.release())))); } void BackgroundJavaLayerPeerFactory::registerNative(jni::JNIEnv& env) { diff --git a/platform/android/src/style/layers/circle_layer.cpp b/platform/android/src/style/layers/circle_layer.cpp index a7fae5e233..54267e819a 100644 --- a/platform/android/src/style/layers/circle_layer.cpp +++ b/platform/android/src/style/layers/circle_layer.cpp @@ -26,12 +26,16 @@ namespace android { /** * Creates a non-owning peer object (for layers currently attached to the map) */ - CircleLayer::CircleLayer(mbgl::style::CircleLayer& coreLayer) : Layer(coreLayer) {} + CircleLayer::CircleLayer(mbgl::style::CircleLayer& coreLayer) + : Layer(coreLayer) { + } /** * Creates an owning peer object (for layers not attached to the map) */ - CircleLayer::CircleLayer(std::unique_ptr coreLayer) : Layer(std::move(coreLayer)) {} + CircleLayer::CircleLayer(std::unique_ptr coreLayer) + : Layer(std::move(coreLayer)) { + } CircleLayer::~CircleLayer() = default; @@ -209,18 +213,14 @@ namespace android { } } // namespace - jni::Local> CircleJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, - mbgl::style::Layer& layer) { + jni::Local> CircleJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::style::Layer& layer) { assert(layer.baseImpl->getTypeInfo() == getTypeInfo()); return createJavaPeer(env, new CircleLayer(toCircleLayer(layer))); } - jni::Local> CircleJavaLayerPeerFactory::createJavaLayerPeer( - jni::JNIEnv& env, std::unique_ptr layer) { + jni::Local> CircleJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, std::unique_ptr layer) { assert(layer->baseImpl->getTypeInfo() == getTypeInfo()); - return createJavaPeer(env, - new CircleLayer(std::unique_ptr( - static_cast(layer.release())))); + return createJavaPeer(env, new CircleLayer(std::unique_ptr(static_cast(layer.release())))); } void CircleJavaLayerPeerFactory::registerNative(jni::JNIEnv& env) { diff --git a/platform/android/src/style/layers/fill_extrusion_layer.cpp b/platform/android/src/style/layers/fill_extrusion_layer.cpp index 55c3d20282..9b7c66a0a5 100644 --- a/platform/android/src/style/layers/fill_extrusion_layer.cpp +++ b/platform/android/src/style/layers/fill_extrusion_layer.cpp @@ -26,13 +26,16 @@ namespace android { /** * Creates a non-owning peer object (for layers currently attached to the map) */ - FillExtrusionLayer::FillExtrusionLayer(mbgl::style::FillExtrusionLayer& coreLayer) : Layer(coreLayer) {} + FillExtrusionLayer::FillExtrusionLayer(mbgl::style::FillExtrusionLayer& coreLayer) + : Layer(coreLayer) { + } /** * Creates an owning peer object (for layers not attached to the map) */ FillExtrusionLayer::FillExtrusionLayer(std::unique_ptr coreLayer) - : Layer(std::move(coreLayer)) {} + : Layer(std::move(coreLayer)) { + } FillExtrusionLayer::~FillExtrusionLayer() = default; @@ -169,18 +172,14 @@ namespace android { } } // namespace - jni::Local> FillExtrusionJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, - mbgl::style::Layer& layer) { + jni::Local> FillExtrusionJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::style::Layer& layer) { assert(layer.baseImpl->getTypeInfo() == getTypeInfo()); return createJavaPeer(env, new FillExtrusionLayer(toFillExtrusionLayer(layer))); } - jni::Local> FillExtrusionJavaLayerPeerFactory::createJavaLayerPeer( - jni::JNIEnv& env, std::unique_ptr layer) { + jni::Local> FillExtrusionJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, std::unique_ptr layer) { assert(layer->baseImpl->getTypeInfo() == getTypeInfo()); - return createJavaPeer(env, - new FillExtrusionLayer(std::unique_ptr( - static_cast(layer.release())))); + return createJavaPeer(env, new FillExtrusionLayer(std::unique_ptr(static_cast(layer.release())))); } void FillExtrusionJavaLayerPeerFactory::registerNative(jni::JNIEnv& env) { @@ -203,10 +202,8 @@ namespace android { METHOD(&FillExtrusionLayer::getFillExtrusionColorTransition, "nativeGetFillExtrusionColorTransition"), METHOD(&FillExtrusionLayer::setFillExtrusionColorTransition, "nativeSetFillExtrusionColorTransition"), METHOD(&FillExtrusionLayer::getFillExtrusionColor, "nativeGetFillExtrusionColor"), - METHOD(&FillExtrusionLayer::getFillExtrusionTranslateTransition, - "nativeGetFillExtrusionTranslateTransition"), - METHOD(&FillExtrusionLayer::setFillExtrusionTranslateTransition, - "nativeSetFillExtrusionTranslateTransition"), + METHOD(&FillExtrusionLayer::getFillExtrusionTranslateTransition, "nativeGetFillExtrusionTranslateTransition"), + METHOD(&FillExtrusionLayer::setFillExtrusionTranslateTransition, "nativeSetFillExtrusionTranslateTransition"), METHOD(&FillExtrusionLayer::getFillExtrusionTranslate, "nativeGetFillExtrusionTranslate"), METHOD(&FillExtrusionLayer::getFillExtrusionTranslateAnchor, "nativeGetFillExtrusionTranslateAnchor"), METHOD(&FillExtrusionLayer::getFillExtrusionPatternTransition, "nativeGetFillExtrusionPatternTransition"), diff --git a/platform/android/src/style/layers/fill_layer.cpp b/platform/android/src/style/layers/fill_layer.cpp index 6a646fdc7d..ba6ed21791 100644 --- a/platform/android/src/style/layers/fill_layer.cpp +++ b/platform/android/src/style/layers/fill_layer.cpp @@ -26,12 +26,16 @@ namespace android { /** * Creates a non-owning peer object (for layers currently attached to the map) */ - FillLayer::FillLayer(mbgl::style::FillLayer& coreLayer) : Layer(coreLayer) {} + FillLayer::FillLayer(mbgl::style::FillLayer& coreLayer) + : Layer(coreLayer) { + } /** * Creates an owning peer object (for layers not attached to the map) */ - FillLayer::FillLayer(std::unique_ptr coreLayer) : Layer(std::move(coreLayer)) {} + FillLayer::FillLayer(std::unique_ptr coreLayer) + : Layer(std::move(coreLayer)) { + } FillLayer::~FillLayer() = default; @@ -155,18 +159,14 @@ namespace android { } } // namespace - jni::Local> FillJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, - mbgl::style::Layer& layer) { + jni::Local> FillJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::style::Layer& layer) { assert(layer.baseImpl->getTypeInfo() == getTypeInfo()); return createJavaPeer(env, new FillLayer(toFillLayer(layer))); } - jni::Local> FillJavaLayerPeerFactory::createJavaLayerPeer( - jni::JNIEnv& env, std::unique_ptr layer) { + jni::Local> FillJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, std::unique_ptr layer) { assert(layer->baseImpl->getTypeInfo() == getTypeInfo()); - return createJavaPeer(env, - new FillLayer(std::unique_ptr( - static_cast(layer.release())))); + return createJavaPeer(env, new FillLayer(std::unique_ptr(static_cast(layer.release())))); } void FillJavaLayerPeerFactory::registerNative(jni::JNIEnv& env) { diff --git a/platform/android/src/style/layers/heatmap_layer.cpp b/platform/android/src/style/layers/heatmap_layer.cpp index dad3d25e6c..dfb8bbb4b3 100644 --- a/platform/android/src/style/layers/heatmap_layer.cpp +++ b/platform/android/src/style/layers/heatmap_layer.cpp @@ -26,12 +26,16 @@ namespace android { /** * Creates a non-owning peer object (for layers currently attached to the map) */ - HeatmapLayer::HeatmapLayer(mbgl::style::HeatmapLayer& coreLayer) : Layer(coreLayer) {} + HeatmapLayer::HeatmapLayer(mbgl::style::HeatmapLayer& coreLayer) + : Layer(coreLayer) { + } /** * Creates an owning peer object (for layers not attached to the map) */ - HeatmapLayer::HeatmapLayer(std::unique_ptr coreLayer) : Layer(std::move(coreLayer)) {} + HeatmapLayer::HeatmapLayer(std::unique_ptr coreLayer) + : Layer(std::move(coreLayer)) { + } HeatmapLayer::~HeatmapLayer() = default; @@ -118,18 +122,14 @@ namespace android { } } // namespace - jni::Local> HeatmapJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, - mbgl::style::Layer& layer) { + jni::Local> HeatmapJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::style::Layer& layer) { assert(layer.baseImpl->getTypeInfo() == getTypeInfo()); return createJavaPeer(env, new HeatmapLayer(toHeatmapLayer(layer))); } - jni::Local> HeatmapJavaLayerPeerFactory::createJavaLayerPeer( - jni::JNIEnv& env, std::unique_ptr layer) { + jni::Local> HeatmapJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, std::unique_ptr layer) { assert(layer->baseImpl->getTypeInfo() == getTypeInfo()); - return createJavaPeer(env, - new HeatmapLayer(std::unique_ptr( - static_cast(layer.release())))); + return createJavaPeer(env, new HeatmapLayer(std::unique_ptr(static_cast(layer.release())))); } void HeatmapJavaLayerPeerFactory::registerNative(jni::JNIEnv& env) { diff --git a/platform/android/src/style/layers/hillshade_layer.cpp b/platform/android/src/style/layers/hillshade_layer.cpp index 1f5fe1912f..3c72b503b7 100644 --- a/platform/android/src/style/layers/hillshade_layer.cpp +++ b/platform/android/src/style/layers/hillshade_layer.cpp @@ -26,13 +26,16 @@ namespace android { /** * Creates a non-owning peer object (for layers currently attached to the map) */ - HillshadeLayer::HillshadeLayer(mbgl::style::HillshadeLayer& coreLayer) : Layer(coreLayer) {} + HillshadeLayer::HillshadeLayer(mbgl::style::HillshadeLayer& coreLayer) + : Layer(coreLayer) { + } /** * Creates an owning peer object (for layers not attached to the map) */ HillshadeLayer::HillshadeLayer(std::unique_ptr coreLayer) - : Layer(std::move(coreLayer)) {} + : Layer(std::move(coreLayer)) { + } HillshadeLayer::~HillshadeLayer() = default; @@ -133,18 +136,14 @@ namespace android { } } // namespace - jni::Local> HillshadeJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, - mbgl::style::Layer& layer) { + jni::Local> HillshadeJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::style::Layer& layer) { assert(layer.baseImpl->getTypeInfo() == getTypeInfo()); return createJavaPeer(env, new HillshadeLayer(toHillshadeLayer(layer))); } - jni::Local> HillshadeJavaLayerPeerFactory::createJavaLayerPeer( - jni::JNIEnv& env, std::unique_ptr layer) { + jni::Local> HillshadeJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, std::unique_ptr layer) { assert(layer->baseImpl->getTypeInfo() == getTypeInfo()); - return createJavaPeer(env, - new HillshadeLayer(std::unique_ptr( - static_cast(layer.release())))); + return createJavaPeer(env, new HillshadeLayer(std::unique_ptr(static_cast(layer.release())))); } void HillshadeJavaLayerPeerFactory::registerNative(jni::JNIEnv& env) { diff --git a/platform/android/src/style/layers/layer.cpp.ejs b/platform/android/src/style/layers/layer.cpp.ejs index 5d241e9a3b..6b67b5919d 100644 --- a/platform/android/src/style/layers/layer.cpp.ejs +++ b/platform/android/src/style/layers/layer.cpp.ejs @@ -20,7 +20,7 @@ namespace android { return static_castLayer&>(layer); } -<% if (type === 'background') { -%> +<% if (type === 'background' || type === 'location-component') { -%> /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ @@ -121,7 +121,7 @@ namespace android { env, javaClass, "nativePtr", -<% if (type === 'background') { -%> +<% if (type === 'background' || type === 'location-component') { -%> jni::MakePeer<<%- camelize(type) %>Layer, jni::String&>, <% } else { -%> jni::MakePeer<<%- camelize(type) %>Layer, jni::String&, jni::String&>, diff --git a/platform/android/src/style/layers/layer.hpp.ejs b/platform/android/src/style/layers/layer.hpp.ejs index eb8db0620d..c6fb183e66 100644 --- a/platform/android/src/style/layers/layer.hpp.ejs +++ b/platform/android/src/style/layers/layer.hpp.ejs @@ -20,7 +20,7 @@ public: using SuperTag = Layer; static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/<%- camelize(type) %>Layer"; }; -<% if (type === 'background') { -%> +<% if (type === 'background' || type === 'location-component') { -%> <%- camelize(type) %>Layer(jni::JNIEnv&, jni::String&); <% } else { -%> <%- camelize(type) %>Layer(jni::JNIEnv&, jni::String&, jni::String&); diff --git a/platform/android/src/style/layers/layer_manager.cpp b/platform/android/src/style/layers/layer_manager.cpp index 2d4172a235..89011bd3ea 100644 --- a/platform/android/src/style/layers/layer_manager.cpp +++ b/platform/android/src/style/layers/layer_manager.cpp @@ -17,6 +17,7 @@ #include "raster_layer.hpp" #include "symbol_layer.hpp" #include "fill_extrusion_layer.hpp" +#include "location_component_layer.hpp" namespace mbgl { @@ -73,6 +74,9 @@ LayerManagerAndroid::LayerManagerAndroid() { #elif !defined(MBGL_LAYER_CUSTOM_DISABLE_ALL) addLayerType(std::make_unique()); #endif +#if !defined(MBGL_LAYER_LOCATION_COMPONENT_DISABLE_ALL) + addLayerType(std::make_unique()); +#endif } LayerManagerAndroid::~LayerManagerAndroid() = default; diff --git a/platform/android/src/style/layers/line_layer.cpp b/platform/android/src/style/layers/line_layer.cpp index 89c6cb5323..bf3a403b66 100644 --- a/platform/android/src/style/layers/line_layer.cpp +++ b/platform/android/src/style/layers/line_layer.cpp @@ -26,12 +26,16 @@ namespace android { /** * Creates a non-owning peer object (for layers currently attached to the map) */ - LineLayer::LineLayer(mbgl::style::LineLayer& coreLayer) : Layer(coreLayer) {} + LineLayer::LineLayer(mbgl::style::LineLayer& coreLayer) + : Layer(coreLayer) { + } /** * Creates an owning peer object (for layers not attached to the map) */ - LineLayer::LineLayer(std::unique_ptr coreLayer) : Layer(std::move(coreLayer)) {} + LineLayer::LineLayer(std::unique_ptr coreLayer) + : Layer(std::move(coreLayer)) { + } LineLayer::~LineLayer() = default; @@ -247,18 +251,14 @@ namespace android { } } // namespace - jni::Local> LineJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, - mbgl::style::Layer& layer) { + jni::Local> LineJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::style::Layer& layer) { assert(layer.baseImpl->getTypeInfo() == getTypeInfo()); return createJavaPeer(env, new LineLayer(toLineLayer(layer))); } - jni::Local> LineJavaLayerPeerFactory::createJavaLayerPeer( - jni::JNIEnv& env, std::unique_ptr layer) { + jni::Local> LineJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, std::unique_ptr layer) { assert(layer->baseImpl->getTypeInfo() == getTypeInfo()); - return createJavaPeer(env, - new LineLayer(std::unique_ptr( - static_cast(layer.release())))); + return createJavaPeer(env, new LineLayer(std::unique_ptr(static_cast(layer.release())))); } void LineJavaLayerPeerFactory::registerNative(jni::JNIEnv& env) { diff --git a/platform/android/src/style/layers/location_component_layer.cpp b/platform/android/src/style/layers/location_component_layer.cpp new file mode 100644 index 0000000000..57433b930b --- /dev/null +++ b/platform/android/src/style/layers/location_component_layer.cpp @@ -0,0 +1,192 @@ +// This file is generated. Edit android/platform/scripts/generate-style-code.js, then run `make android-style-code`. + +#include "location_component_layer.hpp" + +#include + +#include "../conversion/property_value.hpp" +#include "../conversion/transition_options.hpp" + +#include + +namespace mbgl { +namespace android { + + inline mbgl::style::LocationComponentLayer& toLocationComponentLayer(mbgl::style::Layer& layer) { + return static_cast(layer); + } + + /** + * Creates an owning peer object (for layers not attached to the map) from the JVM side + */ + LocationComponentLayer::LocationComponentLayer(jni::JNIEnv& env, jni::String& layerId) + : Layer(std::make_unique(jni::Make(env, layerId))) { + } + + /** + * Creates a non-owning peer object (for layers currently attached to the map) + */ + LocationComponentLayer::LocationComponentLayer(mbgl::style::LocationComponentLayer& coreLayer) + : Layer(coreLayer) { + } + + /** + * Creates an owning peer object (for layers not attached to the map) + */ + LocationComponentLayer::LocationComponentLayer(std::unique_ptr coreLayer) + : Layer(std::move(coreLayer)) { + } + + LocationComponentLayer::~LocationComponentLayer() = default; + + // Property getters + + jni::Local> LocationComponentLayer::getTopImage(jni::JNIEnv& env) { + using namespace mbgl::android::conversion; + return std::move(*convert>>(env, toLocationComponentLayer(layer).getTopImage())); + } + + jni::Local> LocationComponentLayer::getBearingImage(jni::JNIEnv& env) { + using namespace mbgl::android::conversion; + return std::move(*convert>>(env, toLocationComponentLayer(layer).getBearingImage())); + } + + jni::Local> LocationComponentLayer::getShadowImage(jni::JNIEnv& env) { + using namespace mbgl::android::conversion; + return std::move(*convert>>(env, toLocationComponentLayer(layer).getShadowImage())); + } + + jni::Local> LocationComponentLayer::getLocation(jni::JNIEnv& env) { + using namespace mbgl::android::conversion; + return std::move(*convert>>(env, toLocationComponentLayer(layer).getLocation())); + } + + jni::Local> LocationComponentLayer::getBearing(jni::JNIEnv& env) { + using namespace mbgl::android::conversion; + return std::move(*convert>>(env, toLocationComponentLayer(layer).getBearing())); + } + + jni::Local> LocationComponentLayer::getAccuracyRadius(jni::JNIEnv& env) { + using namespace mbgl::android::conversion; + return std::move(*convert>>(env, toLocationComponentLayer(layer).getAccuracyRadius())); + } + + jni::Local> LocationComponentLayer::getTopImageSize(jni::JNIEnv& env) { + using namespace mbgl::android::conversion; + return std::move(*convert>>(env, toLocationComponentLayer(layer).getTopImageSize())); + } + + jni::Local> LocationComponentLayer::getBearingImageSize(jni::JNIEnv& env) { + using namespace mbgl::android::conversion; + return std::move(*convert>>(env, toLocationComponentLayer(layer).getBearingImageSize())); + } + + jni::Local> LocationComponentLayer::getShadowImageSize(jni::JNIEnv& env) { + using namespace mbgl::android::conversion; + return std::move(*convert>>(env, toLocationComponentLayer(layer).getShadowImageSize())); + } + + jni::Local> LocationComponentLayer::getPerspectiveCompensation(jni::JNIEnv& env) { + using namespace mbgl::android::conversion; + return std::move(*convert>>(env, toLocationComponentLayer(layer).getPerspectiveCompensation())); + } + + jni::Local> LocationComponentLayer::getImageTiltDisplacement(jni::JNIEnv& env) { + using namespace mbgl::android::conversion; + return std::move(*convert>>(env, toLocationComponentLayer(layer).getImageTiltDisplacement())); + } + + jni::Local> LocationComponentLayer::getAccuracyRadiusColor(jni::JNIEnv& env) { + using namespace mbgl::android::conversion; + return std::move(*convert>>(env, toLocationComponentLayer(layer).getAccuracyRadiusColor())); + } + + jni::Local> LocationComponentLayer::getAccuracyRadiusColorTransition(jni::JNIEnv& env) { + using namespace mbgl::android::conversion; + mbgl::style::TransitionOptions options = toLocationComponentLayer(layer).getAccuracyRadiusColorTransition(); + return std::move(*convert>>(env, options)); + } + + void LocationComponentLayer::setAccuracyRadiusColorTransition(jni::JNIEnv&, jlong duration, jlong delay) { + mbgl::style::TransitionOptions options; + options.duration.emplace(mbgl::Milliseconds(duration)); + options.delay.emplace(mbgl::Milliseconds(delay)); + toLocationComponentLayer(layer).setAccuracyRadiusColorTransition(options); + } + + jni::Local> LocationComponentLayer::getAccuracyRadiusBorderColor(jni::JNIEnv& env) { + using namespace mbgl::android::conversion; + return std::move(*convert>>(env, toLocationComponentLayer(layer).getAccuracyRadiusBorderColor())); + } + + jni::Local> LocationComponentLayer::getAccuracyRadiusBorderColorTransition(jni::JNIEnv& env) { + using namespace mbgl::android::conversion; + mbgl::style::TransitionOptions options = toLocationComponentLayer(layer).getAccuracyRadiusBorderColorTransition(); + return std::move(*convert>>(env, options)); + } + + void LocationComponentLayer::setAccuracyRadiusBorderColorTransition(jni::JNIEnv&, jlong duration, jlong delay) { + mbgl::style::TransitionOptions options; + options.duration.emplace(mbgl::Milliseconds(duration)); + options.delay.emplace(mbgl::Milliseconds(delay)); + toLocationComponentLayer(layer).setAccuracyRadiusBorderColorTransition(options); + } + + + // LocationComponentJavaLayerPeerFactory + + LocationComponentJavaLayerPeerFactory::~LocationComponentJavaLayerPeerFactory() = default; + + namespace { + jni::Local> createJavaPeer(jni::JNIEnv& env, Layer* layer) { + static auto& javaClass = jni::Class::Singleton(env); + static auto constructor = javaClass.GetConstructor(env); + return javaClass.New(env, constructor, reinterpret_cast(layer)); + } + } // namespace + + jni::Local> LocationComponentJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::style::Layer& layer) { + assert(layer.baseImpl->getTypeInfo() == getTypeInfo()); + return createJavaPeer(env, new LocationComponentLayer(toLocationComponentLayer(layer))); + } + + jni::Local> LocationComponentJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, std::unique_ptr layer) { + assert(layer->baseImpl->getTypeInfo() == getTypeInfo()); + return createJavaPeer(env, new LocationComponentLayer(std::unique_ptr(static_cast(layer.release())))); + } + + void LocationComponentJavaLayerPeerFactory::registerNative(jni::JNIEnv& env) { + // Lookup the class + static auto& javaClass = jni::Class::Singleton(env); + + #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod(name) + + // Register the peer + jni::RegisterNativePeer( + env, + javaClass, + "nativePtr", + jni::MakePeer, + "initialize", + "finalize", + METHOD(&LocationComponentLayer::getTopImage, "nativeGetTopImage"), + METHOD(&LocationComponentLayer::getBearingImage, "nativeGetBearingImage"), + METHOD(&LocationComponentLayer::getShadowImage, "nativeGetShadowImage"), + METHOD(&LocationComponentLayer::getLocation, "nativeGetLocation"), + METHOD(&LocationComponentLayer::getBearing, "nativeGetBearing"), + METHOD(&LocationComponentLayer::getAccuracyRadius, "nativeGetAccuracyRadius"), + METHOD(&LocationComponentLayer::getTopImageSize, "nativeGetTopImageSize"), + METHOD(&LocationComponentLayer::getBearingImageSize, "nativeGetBearingImageSize"), + METHOD(&LocationComponentLayer::getShadowImageSize, "nativeGetShadowImageSize"), + METHOD(&LocationComponentLayer::getPerspectiveCompensation, "nativeGetPerspectiveCompensation"), + METHOD(&LocationComponentLayer::getImageTiltDisplacement, "nativeGetImageTiltDisplacement"), + METHOD(&LocationComponentLayer::getAccuracyRadiusColorTransition, "nativeGetAccuracyRadiusColorTransition"), + METHOD(&LocationComponentLayer::setAccuracyRadiusColorTransition, "nativeSetAccuracyRadiusColorTransition"), + METHOD(&LocationComponentLayer::getAccuracyRadiusColor, "nativeGetAccuracyRadiusColor"), + METHOD(&LocationComponentLayer::getAccuracyRadiusBorderColorTransition, "nativeGetAccuracyRadiusBorderColorTransition"), + METHOD(&LocationComponentLayer::setAccuracyRadiusBorderColorTransition, "nativeSetAccuracyRadiusBorderColorTransition"), + METHOD(&LocationComponentLayer::getAccuracyRadiusBorderColor, "nativeGetAccuracyRadiusBorderColor")); + } + +} // namespace android +} // namespace mbgl diff --git a/platform/android/src/style/layers/location_component_layer.hpp b/platform/android/src/style/layers/location_component_layer.hpp new file mode 100644 index 0000000000..ca2ec47072 --- /dev/null +++ b/platform/android/src/style/layers/location_component_layer.hpp @@ -0,0 +1,76 @@ +// This file is generated. Edit android/platform/scripts/generate-style-code.js, then run `make android-style-code`. + +#pragma once + +#include "layer.hpp" +#include "../transition_options.hpp" +#include +#include +#include + +namespace mbgl { +namespace android { + +class LocationComponentLayer : public Layer { +public: + using SuperTag = Layer; + static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/LocationComponentLayer"; }; + + LocationComponentLayer(jni::JNIEnv&, jni::String&); + + LocationComponentLayer(mbgl::style::LocationComponentLayer&); + + LocationComponentLayer(std::unique_ptr); + + ~LocationComponentLayer(); + + // Properties + + jni::Local> getTopImage(jni::JNIEnv&); + + jni::Local> getBearingImage(jni::JNIEnv&); + + jni::Local> getShadowImage(jni::JNIEnv&); + + jni::Local> getLocation(jni::JNIEnv&); + + jni::Local> getBearing(jni::JNIEnv&); + + jni::Local> getAccuracyRadius(jni::JNIEnv&); + + jni::Local> getTopImageSize(jni::JNIEnv&); + + jni::Local> getBearingImageSize(jni::JNIEnv&); + + jni::Local> getShadowImageSize(jni::JNIEnv&); + + jni::Local> getPerspectiveCompensation(jni::JNIEnv&); + + jni::Local> getImageTiltDisplacement(jni::JNIEnv&); + + jni::Local> getAccuracyRadiusColor(jni::JNIEnv&); + void setAccuracyRadiusColorTransition(jni::JNIEnv&, jlong duration, jlong delay); + jni::Local> getAccuracyRadiusColorTransition(jni::JNIEnv&); + + jni::Local> getAccuracyRadiusBorderColor(jni::JNIEnv&); + void setAccuracyRadiusBorderColorTransition(jni::JNIEnv&, jlong duration, jlong delay); + jni::Local> getAccuracyRadiusBorderColorTransition(jni::JNIEnv&); + +}; // class LocationComponentLayer + +class LocationComponentJavaLayerPeerFactory final : public JavaLayerPeerFactory, public mbgl::LocationComponentLayerFactory { +public: + ~LocationComponentJavaLayerPeerFactory() override; + + // JavaLayerPeerFactory overrides. + jni::Local> createJavaLayerPeer(jni::JNIEnv&, mbgl::style::Layer&) final; + jni::Local> createJavaLayerPeer(jni::JNIEnv& env, std::unique_ptr) final; + + void registerNative(jni::JNIEnv&) final; + + LayerFactory* getLayerFactory() final { return this; } + +}; // class LocationComponentJavaLayerPeerFactory + +} // namespace android +} // namespace mbgl diff --git a/platform/android/src/style/layers/raster_layer.cpp b/platform/android/src/style/layers/raster_layer.cpp index d9cce949c2..53442c0a94 100644 --- a/platform/android/src/style/layers/raster_layer.cpp +++ b/platform/android/src/style/layers/raster_layer.cpp @@ -26,12 +26,16 @@ namespace android { /** * Creates a non-owning peer object (for layers currently attached to the map) */ - RasterLayer::RasterLayer(mbgl::style::RasterLayer& coreLayer) : Layer(coreLayer) {} + RasterLayer::RasterLayer(mbgl::style::RasterLayer& coreLayer) + : Layer(coreLayer) { + } /** * Creates an owning peer object (for layers not attached to the map) */ - RasterLayer::RasterLayer(std::unique_ptr coreLayer) : Layer(std::move(coreLayer)) {} + RasterLayer::RasterLayer(std::unique_ptr coreLayer) + : Layer(std::move(coreLayer)) { + } RasterLayer::~RasterLayer() = default; @@ -168,18 +172,14 @@ namespace android { } } // namespace - jni::Local> RasterJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, - mbgl::style::Layer& layer) { + jni::Local> RasterJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::style::Layer& layer) { assert(layer.baseImpl->getTypeInfo() == getTypeInfo()); return createJavaPeer(env, new RasterLayer(toRasterLayer(layer))); } - jni::Local> RasterJavaLayerPeerFactory::createJavaLayerPeer( - jni::JNIEnv& env, std::unique_ptr layer) { + jni::Local> RasterJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, std::unique_ptr layer) { assert(layer->baseImpl->getTypeInfo() == getTypeInfo()); - return createJavaPeer(env, - new RasterLayer(std::unique_ptr( - static_cast(layer.release())))); + return createJavaPeer(env, new RasterLayer(std::unique_ptr(static_cast(layer.release())))); } void RasterJavaLayerPeerFactory::registerNative(jni::JNIEnv& env) { diff --git a/platform/android/src/style/layers/symbol_layer.cpp b/platform/android/src/style/layers/symbol_layer.cpp index f24fb35425..198dbe635f 100644 --- a/platform/android/src/style/layers/symbol_layer.cpp +++ b/platform/android/src/style/layers/symbol_layer.cpp @@ -26,12 +26,16 @@ namespace android { /** * Creates a non-owning peer object (for layers currently attached to the map) */ - SymbolLayer::SymbolLayer(mbgl::style::SymbolLayer& coreLayer) : Layer(coreLayer) {} + SymbolLayer::SymbolLayer(mbgl::style::SymbolLayer& coreLayer) + : Layer(coreLayer) { + } /** * Creates an owning peer object (for layers not attached to the map) */ - SymbolLayer::SymbolLayer(std::unique_ptr coreLayer) : Layer(std::move(coreLayer)) {} + SymbolLayer::SymbolLayer(std::unique_ptr coreLayer) + : Layer(std::move(coreLayer)) { + } SymbolLayer::~SymbolLayer() = default; @@ -481,18 +485,14 @@ namespace android { } } // namespace - jni::Local> SymbolJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, - mbgl::style::Layer& layer) { + jni::Local> SymbolJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::style::Layer& layer) { assert(layer.baseImpl->getTypeInfo() == getTypeInfo()); return createJavaPeer(env, new SymbolLayer(toSymbolLayer(layer))); } - jni::Local> SymbolJavaLayerPeerFactory::createJavaLayerPeer( - jni::JNIEnv& env, std::unique_ptr layer) { + jni::Local> SymbolJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, std::unique_ptr layer) { assert(layer->baseImpl->getTypeInfo() == getTypeInfo()); - return createJavaPeer(env, - new SymbolLayer(std::unique_ptr( - static_cast(layer.release())))); + return createJavaPeer(env, new SymbolLayer(std::unique_ptr(static_cast(layer.release())))); } void SymbolJavaLayerPeerFactory::registerNative(jni::JNIEnv& env) { diff --git a/src/mbgl/style/layers/layer.cpp.ejs b/src/mbgl/style/layers/layer.cpp.ejs index 397e85b51e..0aed9f6f44 100644 --- a/src/mbgl/style/layers/layer.cpp.ejs +++ b/src/mbgl/style/layers/layer.cpp.ejs @@ -100,7 +100,7 @@ const LayerTypeInfo* <%- camelize(type) %>Layer::Impl::staticTypeInfo() noexcept } -<% if ((type === 'background') || (type === 'location-component')) { -%> +<% if (type === 'background' || type === 'location-component') { -%> <%- camelize(type) %>Layer::<%- camelize(type) %>Layer(const std::string& layerID) : Layer(makeMutable(layerID, std::string())) { } -- cgit v1.2.1