#include "map_renderer_runnable.hpp" #include namespace mbgl { namespace android { MapRendererRunnable::MapRendererRunnable(jni::JNIEnv& env, std::function function_) : function(std::move(function_)) { // Create the Java peer and hold on to a global reference // Not using a weak reference here as this might oerflow // the weak reference table on some devices jni::UniqueLocalFrame frame = jni::PushLocalFrame(env, 5); static auto& javaClass = jni::Class::Singleton(env); static auto constructor = javaClass.GetConstructor(env); auto instance = javaClass.New(env, constructor, reinterpret_cast(this)); javaPeer = jni::NewGlobal(env, instance); } MapRendererRunnable::~MapRendererRunnable() = default; void MapRendererRunnable::run(jni::JNIEnv&) { if (function) function(); } jni::Global> MapRendererRunnable::peer() { return std::move(javaPeer); } // Static methods // void MapRendererRunnable::registerNative(jni::JNIEnv& env) { // Lookup the class static auto& javaClass = jni::Class::Singleton(env); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod(name) jni::RegisterNativePeer( env, javaClass, "nativePtr", std::make_unique, "nativeInitialize", "finalize", METHOD(&MapRendererRunnable::run, "run")); } } // namespace android } // namespace mbgl