summaryrefslogtreecommitdiff
path: root/platform/android/src/style/layers/custom_layer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/src/style/layers/custom_layer.cpp')
-rw-r--r--platform/android/src/style/layers/custom_layer.cpp26
1 files changed, 19 insertions, 7 deletions
diff --git a/platform/android/src/style/layers/custom_layer.cpp b/platform/android/src/style/layers/custom_layer.cpp
index f6f3bb249c..3f44aa8505 100644
--- a/platform/android/src/style/layers/custom_layer.cpp
+++ b/platform/android/src/style/layers/custom_layer.cpp
@@ -8,7 +8,7 @@ namespace mbgl {
namespace android {
CustomLayer::CustomLayer(jni::JNIEnv& env, const jni::String& layerId, jni::jlong host)
- : Layer(env, std::make_unique<mbgl::style::CustomLayer>(
+ : Layer(std::make_unique<mbgl::style::CustomLayer>(
jni::Make<std::string>(env, layerId),
std::unique_ptr<mbgl::style::CustomLayerHost>(reinterpret_cast<mbgl::style::CustomLayerHost*>(host)))
) {
@@ -19,7 +19,7 @@ namespace android {
}
CustomLayer::CustomLayer(mbgl::Map& map, std::unique_ptr<mbgl::style::CustomLayer> coreLayer)
- : Layer(map, std::move(coreLayer)) {
+ : Layer(map, std::move(coreLayer)) {
}
CustomLayer::~CustomLayer() = default;
@@ -33,13 +33,25 @@ namespace android {
}
}
- jni::Local<jni::Object<Layer>> CustomLayer::createJavaPeer(jni::JNIEnv& env) {
- static auto& javaClass = jni::Class<CustomLayer>::Singleton(env);
- static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
- return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
+ namespace {
+ jni::Local<jni::Object<Layer>> createJavaPeer(jni::JNIEnv& env, Layer* layer) {
+ static auto& javaClass = jni::Class<CustomLayer>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(layer));
+ }
+ }
+
+ CustomJavaLayerPeerFactory::~CustomJavaLayerPeerFactory() = default;
+
+ jni::Local<jni::Object<Layer>> CustomJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::Map& map, mbgl::style::Layer& layer) {
+ return createJavaPeer(env, new CustomLayer(map, static_cast<mbgl::style::CustomLayer&>(layer)));
+ }
+
+ jni::Local<jni::Object<Layer>> CustomJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::Map& map, std::unique_ptr<mbgl::style::Layer> layer) {
+ return createJavaPeer(env, new CustomLayer(map, std::unique_ptr<mbgl::style::CustomLayer>(static_cast<mbgl::style::CustomLayer*>(layer.release()))));
}
- void CustomLayer::registerNative(jni::JNIEnv& env) {
+ void CustomJavaLayerPeerFactory::registerNative(jni::JNIEnv& env) {
// Lookup the class
static auto& javaClass = jni::Class<CustomLayer>::Singleton(env);