#include "image_source.hpp" // Java -> C++ conversion #include "../android_conversion.hpp" // C++ -> Java conversion #include "../../conversion/conversion.hpp" #include #include #include "../../bitmap.hpp" #include #include namespace mbgl { namespace android { ImageSource::ImageSource(jni::JNIEnv& env, jni::String sourceId, jni::Object coordinatesObject) : Source(env, std::make_unique( jni::Make(env, sourceId), LatLngQuad::getLatLngArray(env, coordinatesObject) ) ) { } ImageSource::ImageSource(mbgl::Map& map, mbgl::style::ImageSource& coreSource) : Source(map, coreSource) { } ImageSource::~ImageSource() = default; void ImageSource::setURL(jni::JNIEnv& env, jni::String url) { // Update the core source source.as()->ImageSource::setURL(jni::Make(env, url)); } jni::String ImageSource::getURL(jni::JNIEnv& env) { optional url = source.as()->ImageSource::getURL(); return url ? jni::Make(env, *url) : jni::String(); } void ImageSource::setImage(jni::JNIEnv& env, jni::Object bitmap) { UnassociatedImage image = util::unpremultiply(Bitmap::GetImage(env, bitmap)); source.as()->setImage(std:: move(image)); } jni::Class ImageSource::javaClass; jni::jobject* ImageSource::createJavaPeer(jni::JNIEnv& env) { static auto constructor = ImageSource::javaClass.template GetConstructor(env); return ImageSource::javaClass.New(env, constructor, reinterpret_cast(this)); } void ImageSource::registerNative(jni::JNIEnv& env) { // Lookup the class ImageSource::javaClass = *jni::Class::Find(env).NewGlobalRef(env).release(); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod(name) // Register the peer jni::RegisterNativePeer( env, ImageSource::javaClass, "nativePtr", std::make_unique>, "initialize", "finalize", METHOD(&ImageSource::setURL, "nativeSetUrl"), METHOD(&ImageSource::getURL, "nativeGetUrl"), METHOD(&ImageSource::setImage, "nativeSetImage") ); } } // namespace android } // namespace mbgl