#include "custom_layer.hpp" #include #include namespace mbgl { namespace android { CustomLayer::CustomLayer(jni::JNIEnv& env, const jni::String& layerId, jni::jlong host) : Layer(std::make_unique( jni::Make(env, layerId), std::unique_ptr(reinterpret_cast(host))) ) { } CustomLayer::CustomLayer(mbgl::style::CustomLayer& coreLayer) : Layer(coreLayer) {} CustomLayer::CustomLayer(std::unique_ptr coreLayer) : Layer(std::move(coreLayer)) {} CustomLayer::~CustomLayer() = 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)); } } CustomJavaLayerPeerFactory::~CustomJavaLayerPeerFactory() = default; jni::Local> CustomJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::style::Layer& layer) { return createJavaPeer(env, new CustomLayer(static_cast(layer))); } jni::Local> CustomJavaLayerPeerFactory::createJavaLayerPeer( jni::JNIEnv& env, std::unique_ptr layer) { return createJavaPeer(env, new CustomLayer(std::unique_ptr( static_cast(layer.release())))); } void CustomJavaLayerPeerFactory::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"); } } // namespace android } // namespace mbgl