#pragma once #include "source.hpp" #include #include "../../geojson/geometry.hpp" #include "../../geojson/feature.hpp" #include "../../geojson/feature_collection.hpp" #include namespace mbgl { namespace android { using Callback = std::function; struct FeatureConverter { void convertJson(std::shared_ptr, ActorRef); template void convertObject(std::shared_ptr, jni::EnvAttachingDeleter>>, ActorRef); }; struct Update { using Converter = std::function)>; Converter converterFn; std::unique_ptr> callback; Update(Converter, std::unique_ptr>); }; class GeoJSONSource : public Source { public: using SuperTag = Source; static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/sources/GeoJsonSource"; }; static void registerNative(jni::JNIEnv&); GeoJSONSource(jni::JNIEnv&, const jni::String&, const jni::Object<>&); GeoJSONSource(jni::JNIEnv&, mbgl::style::Source&, AndroidRendererFrontend&); ~GeoJSONSource(); private: void setGeoJSONString(jni::JNIEnv&, const jni::String&); void setFeatureCollection(jni::JNIEnv&, const jni::Object&); void setFeature(jni::JNIEnv&, const jni::Object&); void setGeometry(jni::JNIEnv&, const jni::Object&); void setURL(jni::JNIEnv&, const jni::String&); jni::Local>> querySourceFeatures(jni::JNIEnv&, const jni::Array>&); jni::Local getURL(jni::JNIEnv&); jni::Local> createJavaPeer(jni::JNIEnv&); std::unique_ptr awaitingUpdate; std::unique_ptr update; std::shared_ptr threadPool; std::unique_ptr> converter; template void setCollectionAsync(jni::JNIEnv&, const jni::Object&); void setAsync(Update::Converter); }; // class GeoJSONSource } // namespace android } // namespace mbgl