#include "map_renderer_runnable.hpp" #include namespace mbgl { namespace android { MapRendererRunnable::MapRendererRunnable(jni::JNIEnv& env, std::weak_ptr mailbox_) : mailbox(std::move(mailbox_)) { // Create the Java peer jni::UniqueLocalFrame frame = jni::PushLocalFrame(env, 5); static auto constructor = javaClass.GetConstructor(env); auto instance = javaClass.New(env, constructor, reinterpret_cast(this)); javaPeer = SeizeGenericWeakRef(env, jni::Object(jni::NewWeakGlobalRef(env, instance.Get()).release())); } MapRendererRunnable::~MapRendererRunnable() = default; void MapRendererRunnable::run(jni::JNIEnv&) { Mailbox::maybeReceive(mailbox); } jni::Object MapRendererRunnable::getPeer() { return *javaPeer; } // Static methods // jni::Class MapRendererRunnable::javaClass; void MapRendererRunnable::registerNative(jni::JNIEnv& env) { // Lookup the class MapRendererRunnable::javaClass = *jni::Class::Find(env).NewGlobalRef(env).release(); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod(name) jni::RegisterNativePeer( env, MapRendererRunnable::javaClass, "nativePtr", std::make_unique, "nativeInitialize", "finalize", METHOD(&MapRendererRunnable::run, "run")); } } // namespace android } // namespace mbgl