#include "vector_source.hpp" // Java -> C++ conversion #include "../android_conversion.hpp" #include "../conversion/filter.hpp" // C++ -> Java conversion #include "../../conversion/conversion.hpp" #include "../../conversion/collection.hpp" #include "../../geometry/conversion/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, urlOrTileSet)) ) ) { } VectorSource::VectorSource(mbgl::Map& map, mbgl::style::VectorSource& coreSource) : Source(map, coreSource) { } VectorSource::~VectorSource() = default; jni::Array> VectorSource::querySourceFeatures(jni::JNIEnv& env, jni::Array jSourceLayerIds, jni::Array> jfilter) { using namespace mbgl::android::conversion; using namespace mapbox::geometry; mbgl::optional> sourceLayerIds = { toVector(env, jSourceLayerIds) }; auto filter = toFilter(env, jfilter); auto features = source.querySourceFeatures({ sourceLayerIds, filter }); return *convert>, std::vector>(env, features); } jni::Class VectorSource::javaClass; jni::jobject* VectorSource::createJavaPeer(jni::JNIEnv& env) { static auto constructor = VectorSource::javaClass.template GetConstructor(env); return VectorSource::javaClass.New(env, constructor, reinterpret_cast(this)); } void VectorSource::registerNative(jni::JNIEnv& env) { // Lookup the class VectorSource::javaClass = *jni::Class::Find(env).NewGlobalRef(env).release(); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod(name) // Register the peer jni::RegisterNativePeer( env, VectorSource::javaClass, "nativePtr", std::make_unique>, "initialize", "finalize", METHOD(&VectorSource::querySourceFeatures, "querySourceFeatures") ); } } // namespace android } // namespace mbgl