From aefa8cb5512a8db401f0eb7568cfc64cecb6b30a Mon Sep 17 00:00:00 2001 From: "Thiago Marcos P. Santos" Date: Thu, 22 Jun 2017 18:01:15 +0300 Subject: [android] Use ResourceTransform for setting URL transform callbacks --- platform/android/src/file_source.cpp | 22 +++++++++++++--------- platform/android/src/file_source.hpp | 8 ++++++-- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/platform/android/src/file_source.cpp b/platform/android/src/file_source.cpp index 16c09b7b52..5d19c506bc 100644 --- a/platform/android/src/file_source.cpp +++ b/platform/android/src/file_source.cpp @@ -1,6 +1,9 @@ #include "file_source.hpp" +#include +#include #include +#include #include "asset_manager_file_source.hpp" #include "jni/generic_global_ref_deleter.hpp" @@ -42,21 +45,22 @@ void FileSource::setAPIBaseUrl(jni::JNIEnv& env, jni::String url) { void FileSource::setResourceTransform(jni::JNIEnv& env, jni::Object transformCallback) { if (transformCallback) { - // Launch transformCallback - fileSource->setResourceTransform([ + resourceTransform = std::make_unique>(*util::RunLoop::Get(), // Capture the ResourceTransformCallback object as a managed global into // the lambda. It is released automatically when we're setting a new ResourceTransform in // a subsequent call. // Note: we're converting it to shared_ptr because this lambda is converted to a std::function, // which requires copyability of its captured variables. - callback = std::shared_ptr(transformCallback.NewGlobalRef(env).release()->Get(), GenericGlobalRefDeleter()) - ](mbgl::Resource::Kind kind, std::string&& url_) { - android::UniqueEnv _env = android::AttachEnv(); - return FileSource::ResourceTransformCallback::onURL(*_env, jni::Object(*callback), int(kind), url_); - }); + [callback = std::shared_ptr(transformCallback.NewGlobalRef(env).release()->Get(), GenericGlobalRefDeleter())] + (mbgl::Resource::Kind kind, const std::string&& url_) { + android::UniqueEnv _env = android::AttachEnv(); + return FileSource::ResourceTransformCallback::onURL(*_env, jni::Object(*callback), int(kind), url_); + }); + fileSource->setResourceTransform(resourceTransform->self()); } else { // Reset the callback - fileSource->setResourceTransform(nullptr); + resourceTransform.reset(); + fileSource->setResourceTransform({}); } } @@ -106,4 +110,4 @@ std::string FileSource::ResourceTransformCallback::onURL(jni::JNIEnv& env, jni:: } } // namespace android -} // namespace mbgl \ No newline at end of file +} // namespace mbgl diff --git a/platform/android/src/file_source.hpp b/platform/android/src/file_source.hpp index 55e70f34d9..4abe352bff 100644 --- a/platform/android/src/file_source.hpp +++ b/platform/android/src/file_source.hpp @@ -7,6 +7,10 @@ #include namespace mbgl { + +template class Actor; +class ResourceTransform; + namespace android { /** @@ -46,10 +50,10 @@ public: static void registerNative(jni::JNIEnv&); private: - + std::unique_ptr> resourceTransform; std::unique_ptr fileSource; }; } // namespace android -} // namespace mbgl \ No newline at end of file +} // namespace mbgl -- cgit v1.2.1