#include "custom_layer.hpp" #include #include namespace mbgl { namespace android { CustomLayer::CustomLayer(jni::JNIEnv& env, jni::String layerId, jni::jlong initializeFunction, jni::jlong renderFunction, jni::jlong deinitializeFunction, jni::jlong context) : Layer(env, std::make_unique( jni::Make(env, layerId), reinterpret_cast(initializeFunction), reinterpret_cast(renderFunction), reinterpret_cast(deinitializeFunction), reinterpret_cast(context)) ) { } CustomLayer::CustomLayer(mbgl::Map& map, mbgl::style::CustomLayer& coreLayer) : Layer(map, coreLayer) { } CustomLayer::~CustomLayer() = default; void CustomLayer::update(jni::JNIEnv&) { Log::Debug(mbgl::Event::JNI, "Updating map"); if (map) { map->triggerRepaint(); } else { Log::Error(mbgl::Event::JNI, "No map reference, cannot update"); } } jni::Class CustomLayer::javaClass; jni::jobject* CustomLayer::createJavaPeer(jni::JNIEnv& env) { static auto constructor = CustomLayer::javaClass.template GetConstructor(env); return CustomLayer::javaClass.New(env, constructor, reinterpret_cast(this)); } void CustomLayer::registerNative(jni::JNIEnv& env) { // Lookup the class CustomLayer::javaClass = *jni::Class::Find(env).NewGlobalRef(env).release(); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod(name) // Register the peer jni::RegisterNativePeer( env, CustomLayer::javaClass, "nativePtr", std::make_unique, "initialize", "finalize", METHOD(&CustomLayer::update, "nativeUpdate")); } } // namespace android } // namespace mbgl