diff options
Diffstat (limited to 'platform/android/src/style/layers/layers.hpp')
-rw-r--r-- | platform/android/src/style/layers/layers.hpp | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/platform/android/src/style/layers/layers.hpp b/platform/android/src/style/layers/layers.hpp index c9a6ba2e66..7684108555 100644 --- a/platform/android/src/style/layers/layers.hpp +++ b/platform/android/src/style/layers/layers.hpp @@ -7,20 +7,33 @@ #include <jni/jni.hpp> +#include <memory> +#include <vector> + namespace mbgl { namespace android { /** - * Create a non-owning peer + * @brief A singleton class forwarding calls to the corresponding \c JavaLayerPeerFactory instance. */ -jni::Local<jni::Object<Layer>> createJavaLayerPeer(jni::JNIEnv&, mbgl::Map&, mbgl::style::Layer&); - -/** - * Create an owning peer - */ -jni::Local<jni::Object<Layer>> createJavaLayerPeer(jni::JNIEnv& env, mbgl::Map& map, std::unique_ptr<mbgl::style::Layer>); - -void registerNativeLayers(jni::JNIEnv&); +class LayerManagerAndroid : public mbgl::style::LayerManager { +public: + ~LayerManagerAndroid() override; + static LayerManagerAndroid* get(); + + jni::Local<jni::Object<Layer>> createJavaLayerPeer(jni::JNIEnv&, mbgl::Map&, mbgl::style::Layer&); + jni::Local<jni::Object<Layer>> createJavaLayerPeer(jni::JNIEnv& env, mbgl::Map& map, std::unique_ptr<mbgl::style::Layer>); + + void registerNative(jni::JNIEnv&); + +private: + LayerManagerAndroid(); + JavaLayerPeerFactory* getPeerFactory(mbgl::style::Layer*); + // mbgl:style::LayerManager overrides. + std::unique_ptr<style::Layer> createLayer(const std::string& type, const std::string& id, const style::conversion::Convertible& value, style::conversion::Error& error) final; + + std::vector<std::unique_ptr<JavaLayerPeerFactory>> factories; +}; } } |