#include "vector_source.hpp" #include // Java -> C++ conversion #include "../android_conversion.hpp" #include "../conversion/filter.hpp" // C++ -> Java conversion #include "../../conversion/conversion.hpp" #include "../../conversion/collection.hpp" #include "../../geojson/feature.hpp" #include "../conversion/url_or_tileset.hpp" #include #include #include namespace mbgl { namespace android { VectorSource::VectorSource(jni::JNIEnv& env, jni::String sourceId, jni::Object<> urlOrTileSet) : Source( env, std::make_unique( jni::Make(env, sourceId), convertURLOrTileset(Value(env, jni::SeizeLocal(env, std::move(urlOrTileSet)))) ) ) { } VectorSource::VectorSource(jni::JNIEnv& env, mbgl::style::Source& coreSource, AndroidRendererFrontend& frontend) : Source(env, coreSource, createJavaPeer(env), frontend) { } VectorSource::~VectorSource() = default; jni::String VectorSource::getURL(jni::JNIEnv& env) { optional url = source.as()->VectorSource::getURL(); return url ? jni::Make(env, *url) : jni::String(); } jni::Array> VectorSource::querySourceFeatures(jni::JNIEnv& env, jni::Array jSourceLayerIds, jni::Array> jfilter) { using namespace mbgl::android::conversion; using namespace mbgl::android::geojson; std::vector features; if (rendererFrontend) { features = rendererFrontend->querySourceFeatures(source.getID(), { toVector(env, jSourceLayerIds), toFilter(env, jni::SeizeLocal(env, std::move(jfilter))) }); } return Feature::convert(env, features); } jni::Object VectorSource::createJavaPeer(jni::JNIEnv& env) { static auto javaClass = jni::Class::Singleton(env); static auto constructor = javaClass.GetConstructor(env); return jni::Object(javaClass.New(env, constructor, reinterpret_cast(this)).Get()); } void VectorSource::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", std::make_unique>, "initialize", "finalize", METHOD(&VectorSource::querySourceFeatures, "querySourceFeatures"), METHOD(&VectorSource::getURL, "nativeGetUrl") ); } } // namespace android } // namespace mbgl