summaryrefslogtreecommitdiff
path: root/platform/android/src/style/layers/layers.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/src/style/layers/layers.hpp')
-rw-r--r--platform/android/src/style/layers/layers.hpp31
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;
+};
}
}