diff options
Diffstat (limited to 'platform/android/src/style/layers')
-rw-r--r-- | platform/android/src/style/layers/layers.cpp | 9 | ||||
-rw-r--r-- | platform/android/src/style/layers/unknown_layer.cpp | 49 | ||||
-rw-r--r-- | platform/android/src/style/layers/unknown_layer.hpp | 30 |
3 files changed, 85 insertions, 3 deletions
diff --git a/platform/android/src/style/layers/layers.cpp b/platform/android/src/style/layers/layers.cpp index c8e981b966..328ef94ec8 100644 --- a/platform/android/src/style/layers/layers.cpp +++ b/platform/android/src/style/layers/layers.cpp @@ -1,5 +1,6 @@ #include "layers.hpp" +#include <mbgl/style/layer.hpp> #include <mbgl/style/layers/background_layer.hpp> #include <mbgl/style/layers/circle_layer.hpp> #include <mbgl/style/layers/fill_layer.hpp> @@ -10,11 +11,12 @@ #include "background_layer.hpp" #include "circle_layer.hpp" +#include "custom_layer.hpp" #include "fill_layer.hpp" #include "line_layer.hpp" #include "raster_layer.hpp" #include "symbol_layer.hpp" -#include "custom_layer.hpp" +#include "unknown_layer.hpp" namespace mbgl { namespace android { @@ -36,7 +38,7 @@ Layer* initializeLayerPeer(mbgl::Map& map, mbgl::style::Layer& coreLayer) { } else if (coreLayer.is<mbgl::style::CustomLayer>()) { layer = new CustomLayer(map, *coreLayer.as<mbgl::style::CustomLayer>()); } else { - throw new std::runtime_error("Layer type not implemented"); + layer = new UnknownLayer(map, coreLayer); } return layer; @@ -53,11 +55,12 @@ void registerNativeLayers(jni::JNIEnv& env) { Layer::registerNative(env); BackgroundLayer::registerNative(env); CircleLayer::registerNative(env); + CustomLayer::registerNative(env); FillLayer::registerNative(env); LineLayer::registerNative(env); RasterLayer::registerNative(env); SymbolLayer::registerNative(env); - CustomLayer::registerNative(env); + UnknownLayer::registerNative(env); } } // namespace android diff --git a/platform/android/src/style/layers/unknown_layer.cpp b/platform/android/src/style/layers/unknown_layer.cpp new file mode 100644 index 0000000000..9ec963a41b --- /dev/null +++ b/platform/android/src/style/layers/unknown_layer.cpp @@ -0,0 +1,49 @@ +#include "unknown_layer.hpp" + +#include <string> + +namespace { + + // Dummy initializer (We don't support initializing this from the JVM) + std::unique_ptr<mbgl::android::UnknownLayer> init(jni::JNIEnv&) { + throw new std::runtime_error("UnknownLayer should not be initialized from the JVM"); + } + +} // namespace + +namespace mbgl { +namespace android { + + UnknownLayer::UnknownLayer(mbgl::Map& map, mbgl::style::Layer& coreLayer) + : Layer(map, coreLayer) { + } + + UnknownLayer::UnknownLayer(mbgl::Map& map, std::unique_ptr<mbgl::style::Layer> coreLayer) + : Layer(map, std::move(coreLayer)) { + } + + jni::Class<UnknownLayer> UnknownLayer::javaClass; + + jni::jobject* UnknownLayer::createJavaPeer(jni::JNIEnv& env) { + static auto constructor = UnknownLayer::javaClass.template GetConstructor<jni::jlong>(env); + return UnknownLayer::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)); + } + + void UnknownLayer::registerNative(jni::JNIEnv& env) { + // Lookup the class + UnknownLayer::javaClass = *jni::Class<UnknownLayer>::Find(env).NewGlobalRef(env).release(); + + #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) + + std::function<std::unique_ptr<UnknownLayer>(JNIEnv&)> initializer = nullptr; + + // Register the peer + jni::RegisterNativePeer<UnknownLayer>( + env, UnknownLayer::javaClass, "nativePtr", + init, + "initialize", + "finalize"); + } + +} // namespace android +} // namespace mbgl diff --git a/platform/android/src/style/layers/unknown_layer.hpp b/platform/android/src/style/layers/unknown_layer.hpp new file mode 100644 index 0000000000..67992ea007 --- /dev/null +++ b/platform/android/src/style/layers/unknown_layer.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include "layer.hpp" +#include <mbgl/style/layer.hpp> +#include <jni/jni.hpp> + +namespace mbgl { +namespace android { + +class UnknownLayer : public Layer { +public: + + static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/UnknownLayer"; }; + + static jni::Class<UnknownLayer> javaClass; + + static void registerNative(jni::JNIEnv&); + + UnknownLayer(mbgl::Map&, mbgl::style::Layer&); + + UnknownLayer(mbgl::Map&, std::unique_ptr<mbgl::style::Layer>); + + ~UnknownLayer() = default; + + jni::jobject* createJavaPeer(jni::JNIEnv&); + +}; // class UnknownLayer + +} // namespace android +} // namespace mbgl |