diff options
author | Thiago Marcos P. Santos <tmpsantos@gmail.com> | 2017-06-22 18:01:15 +0300 |
---|---|---|
committer | Thiago Marcos P. Santos <tmpsantos@gmail.com> | 2017-06-26 16:32:21 +0300 |
commit | aefa8cb5512a8db401f0eb7568cfc64cecb6b30a (patch) | |
tree | 4e9b5901176399e20b028ce8225dd95a9d331a49 | |
parent | ea34cb5725815dbb5075205b01407a00329a3542 (diff) | |
download | qtlocation-mapboxgl-aefa8cb5512a8db401f0eb7568cfc64cecb6b30a.tar.gz |
[android] Use ResourceTransform for setting URL transform callbacks
-rw-r--r-- | platform/android/src/file_source.cpp | 22 | ||||
-rw-r--r-- | 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 <mbgl/actor/actor.hpp> +#include <mbgl/storage/resource_transform.hpp> #include <mbgl/util/logging.hpp> +#include <mbgl/util/run_loop.hpp> #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<FileSource::ResourceTransformCallback> transformCallback) { if (transformCallback) { - // Launch transformCallback - fileSource->setResourceTransform([ + resourceTransform = std::make_unique<Actor<ResourceTransform>>(*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<jni::jobject>(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<FileSource::ResourceTransformCallback>(*callback), int(kind), url_); - }); + [callback = std::shared_ptr<jni::jobject>(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<FileSource::ResourceTransformCallback>(*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 <jni/jni.hpp> namespace mbgl { + +template <typename T> class Actor; +class ResourceTransform; + namespace android { /** @@ -46,10 +50,10 @@ public: static void registerNative(jni::JNIEnv&); private: - + std::unique_ptr<Actor<ResourceTransform>> resourceTransform; std::unique_ptr<mbgl::DefaultFileSource> fileSource; }; } // namespace android -} // namespace mbgl
\ No newline at end of file +} // namespace mbgl |