#include "custom_layer.hpp" #include #include namespace mbgl { namespace android { CustomLayer::CustomLayer(jni::JNIEnv& env, const jni::String& layerId, jni::jlong host) : Layer(env, std::make_unique( jni::Make(env, layerId), std::unique_ptr(reinterpret_cast(host))) ) { } CustomLayer::CustomLayer(mbgl::Map& map, mbgl::style::CustomLayer& coreLayer) : Layer(map, coreLayer) { } CustomLayer::CustomLayer(mbgl::Map& map, std::unique_ptr coreLayer) : Layer(map, std::move(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::Local> CustomLayer::createJavaPeer(jni::JNIEnv& env) { static auto& javaClass = jni::Class::Singleton(env); static auto constructor = javaClass.GetConstructor(env); return javaClass.New(env, constructor, reinterpret_cast(this)); } void CustomLayer::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", METHOD(&CustomLayer::update, "nativeUpdate")); } } // namespace android } // namespace mbgl