diff options
Diffstat (limited to 'platform/android/src/offline')
10 files changed, 157 insertions, 171 deletions
diff --git a/platform/android/src/offline/offline_manager.cpp b/platform/android/src/offline/offline_manager.cpp index 263f7b9d8b..b27af8bdae 100644 --- a/platform/android/src/offline/offline_manager.cpp +++ b/platform/android/src/offline/offline_manager.cpp @@ -3,14 +3,13 @@ #include <mbgl/util/string.hpp> #include "../attach_env.hpp" -#include "../jni/generic_global_ref_deleter.hpp" namespace mbgl { namespace android { // OfflineManager // -OfflineManager::OfflineManager(jni::JNIEnv& env, jni::Object<FileSource> jFileSource) +OfflineManager::OfflineManager(jni::JNIEnv& env, const jni::Object<FileSource>& jFileSource) : fileSource(mbgl::android::FileSource::getDefaultFileSource(env, jFileSource)) { } @@ -20,12 +19,14 @@ void OfflineManager::setOfflineMapboxTileCountLimit(jni::JNIEnv&, jni::jlong lim fileSource.setOfflineMapboxTileCountLimit(limit); } -void OfflineManager::listOfflineRegions(jni::JNIEnv& env_, jni::Object<FileSource> jFileSource_, jni::Object<ListOfflineRegionsCallback> callback_) { - // list regions +void OfflineManager::listOfflineRegions(jni::JNIEnv& env_, const jni::Object<FileSource>& jFileSource_, const jni::Object<ListOfflineRegionsCallback>& callback_) { + auto globalCallback = jni::NewGlobal<jni::EnvAttachingDeleter>(env_, callback_); + auto globalFilesource = jni::NewGlobal<jni::EnvAttachingDeleter>(env_, jFileSource_); + fileSource.listOfflineRegions([ //Keep a shared ptr to a global reference of the callback and file source so they are not GC'd in the meanwhile - callback = std::shared_ptr<jni::jobject>(callback_.NewGlobalRef(env_).release().Get(), GenericGlobalRefDeleter()), - jFileSource = std::shared_ptr<jni::jobject>(jFileSource_.NewGlobalRef(env_).release().Get(), GenericGlobalRefDeleter()) + callback = std::make_shared<decltype(globalCallback)>(std::move(globalCallback)), + jFileSource = std::make_shared<decltype(globalFilesource)>(std::move(globalFilesource)) ](mbgl::expected<mbgl::OfflineRegions, std::exception_ptr> regions) mutable { // Reattach, the callback comes from a different thread @@ -33,20 +34,19 @@ void OfflineManager::listOfflineRegions(jni::JNIEnv& env_, jni::Object<FileSourc if (regions) { OfflineManager::ListOfflineRegionsCallback::onList( - *env, jni::Object<FileSource>(*jFileSource), - jni::Object<ListOfflineRegionsCallback>(*callback), std::move(*regions)); + *env, *jFileSource, *callback, std::move(*regions)); } else { OfflineManager::ListOfflineRegionsCallback::onError( - *env, jni::Object<ListOfflineRegionsCallback>(*callback), regions.error()); + *env, *callback, regions.error()); } }); } void OfflineManager::createOfflineRegion(jni::JNIEnv& env_, - jni::Object<FileSource> jFileSource_, - jni::Object<OfflineRegionDefinition> definition_, - jni::Array<jni::jbyte> metadata_, - jni::Object<CreateOfflineRegionCallback> callback_) { + const jni::Object<FileSource>& jFileSource_, + const jni::Object<OfflineRegionDefinition>& definition_, + const jni::Array<jni::jbyte>& metadata_, + const jni::Object<CreateOfflineRegionCallback>& callback_) { // Convert auto definition = OfflineRegionDefinition::getDefinition(env_, definition_); @@ -55,11 +55,14 @@ void OfflineManager::createOfflineRegion(jni::JNIEnv& env_, metadata = OfflineRegion::metadata(env_, metadata_); } + auto globalCallback = jni::NewGlobal<jni::EnvAttachingDeleter>(env_, callback_); + auto globalFilesource = jni::NewGlobal<jni::EnvAttachingDeleter>(env_, jFileSource_); + // Create region fileSource.createOfflineRegion(definition, metadata, [ //Keep a shared ptr to a global reference of the callback and file source so they are not GC'd in the meanwhile - callback = std::shared_ptr<jni::jobject>(callback_.NewGlobalRef(env_).release().Get(), GenericGlobalRefDeleter()), - jFileSource = std::shared_ptr<jni::jobject>(jFileSource_.NewGlobalRef(env_).release().Get(), GenericGlobalRefDeleter()) + callback = std::make_shared<decltype(globalCallback)>(std::move(globalCallback)), + jFileSource = std::make_shared<decltype(globalFilesource)>(std::move(globalFilesource)) ](mbgl::expected<mbgl::OfflineRegion, std::exception_ptr> region) mutable { // Reattach, the callback comes from a different thread @@ -67,12 +70,11 @@ void OfflineManager::createOfflineRegion(jni::JNIEnv& env_, if (region) { OfflineManager::CreateOfflineRegionCallback::onCreate( - *env, - jni::Object<FileSource>(*jFileSource), - jni::Object<CreateOfflineRegionCallback>(*callback), std::move(*region) + *env, *jFileSource, *callback, std::move(*region) ); } else { - OfflineManager::CreateOfflineRegionCallback::onError(*env, jni::Object<CreateOfflineRegionCallback>(*callback), region.error()); + OfflineManager::CreateOfflineRegionCallback::onError( + *env, *callback, region.error()); } }); } @@ -81,12 +83,12 @@ void OfflineManager::registerNative(jni::JNIEnv& env) { jni::Class<ListOfflineRegionsCallback>::Singleton(env); jni::Class<CreateOfflineRegionCallback>::Singleton(env); - static auto javaClass = jni::Class<OfflineManager>::Singleton(env); + static auto& javaClass = jni::Class<OfflineManager>::Singleton(env); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) jni::RegisterNativePeer<OfflineManager>( env, javaClass, "nativePtr", - std::make_unique<OfflineManager, JNIEnv&, jni::Object<FileSource>>, + jni::MakePeer<OfflineManager, const jni::Object<FileSource>&>, "initialize", "finalize", METHOD(&OfflineManager::setOfflineMapboxTileCountLimit, "setOfflineMapboxTileCountLimit"), @@ -97,53 +99,50 @@ void OfflineManager::registerNative(jni::JNIEnv& env) { // OfflineManager::ListOfflineRegionsCallback // void OfflineManager::ListOfflineRegionsCallback::onError(jni::JNIEnv& env, - jni::Object<OfflineManager::ListOfflineRegionsCallback> callback, + const jni::Object<OfflineManager::ListOfflineRegionsCallback>& callback, std::exception_ptr error) { - static auto javaClass = jni::Class<OfflineManager::ListOfflineRegionsCallback>::Singleton(env); + static auto& javaClass = jni::Class<OfflineManager::ListOfflineRegionsCallback>::Singleton(env); static auto method = javaClass.GetMethod<void (jni::String)>(env, "onError"); - callback.Call(env, method, - *jni::SeizeLocal(env, jni::Make<jni::String>(env, mbgl::util::toString(error)))); + callback.Call(env, method, jni::Make<jni::String>(env, mbgl::util::toString(error))); } void OfflineManager::ListOfflineRegionsCallback::onList(jni::JNIEnv& env, - jni::Object<FileSource> jFileSource, - jni::Object<OfflineManager::ListOfflineRegionsCallback> callback, + const jni::Object<FileSource>& jFileSource, + const jni::Object<OfflineManager::ListOfflineRegionsCallback>& callback, mbgl::optional<std::vector<mbgl::OfflineRegion>> regions) { - static auto javaClass = jni::Class<OfflineManager::ListOfflineRegionsCallback>::Singleton(env); + static auto& javaClass = jni::Class<OfflineManager::ListOfflineRegionsCallback>::Singleton(env); static auto method = javaClass.GetMethod<void (jni::Array<jni::Object<OfflineRegion>>)>(env, "onList"); std::size_t index = 0; - auto jregions = jni::SeizeLocal(env, jni::Array<jni::Object<OfflineRegion>>::New(env, regions->size())); + auto jregions = jni::Array<jni::Object<OfflineRegion>>::New(env, regions->size()); for (auto& region : *regions) { - jregions->Set(env, index, *jni::SeizeLocal(env, OfflineRegion::New(env, jFileSource, std::move(region)))); + jregions.Set(env, index, OfflineRegion::New(env, jFileSource, std::move(region))); index++; } - callback.Call(env, method, *jregions); + callback.Call(env, method, jregions); } // OfflineManager::CreateOfflineRegionCallback // void OfflineManager::CreateOfflineRegionCallback::onError(jni::JNIEnv& env, - jni::Object<OfflineManager::CreateOfflineRegionCallback> callback, + const jni::Object<OfflineManager::CreateOfflineRegionCallback>& callback, std::exception_ptr error) { - static auto javaClass = jni::Class<OfflineManager::CreateOfflineRegionCallback>::Singleton(env); + static auto& javaClass = jni::Class<OfflineManager::CreateOfflineRegionCallback>::Singleton(env); static auto method = javaClass.GetMethod<void (jni::String)>(env, "onError"); - callback.Call(env, method, - *jni::SeizeLocal(env, jni::Make<jni::String>(env, mbgl::util::toString(error)))); + callback.Call(env, method, jni::Make<jni::String>(env, mbgl::util::toString(error))); } void OfflineManager::CreateOfflineRegionCallback::onCreate(jni::JNIEnv& env, - jni::Object<FileSource> jFileSource, - jni::Object<OfflineManager::CreateOfflineRegionCallback> callback, + const jni::Object<FileSource>& jFileSource, + const jni::Object<OfflineManager::CreateOfflineRegionCallback>& callback, mbgl::optional<mbgl::OfflineRegion> region) { - static auto javaClass = jni::Class<OfflineManager::CreateOfflineRegionCallback>::Singleton(env); + static auto& javaClass = jni::Class<OfflineManager::CreateOfflineRegionCallback>::Singleton(env); static auto method = javaClass.GetMethod<void (jni::Object<OfflineRegion>)>(env, "onCreate"); - callback.Call(env, method, - *jni::SeizeLocal(env, OfflineRegion::New(env, jFileSource, std::move(*region)))); + callback.Call(env, method, OfflineRegion::New(env, jFileSource, std::move(*region))); } } // namespace android diff --git a/platform/android/src/offline/offline_manager.hpp b/platform/android/src/offline/offline_manager.hpp index 43f5045c71..21ca5ca9c1 100644 --- a/platform/android/src/offline/offline_manager.hpp +++ b/platform/android/src/offline/offline_manager.hpp @@ -20,11 +20,11 @@ public: public: static constexpr auto Name() { return "com/mapbox/mapboxsdk/offline/OfflineManager$ListOfflineRegionsCallback";} - static void onError(jni::JNIEnv&, jni::Object<OfflineManager::ListOfflineRegionsCallback>, std::exception_ptr); + static void onError(jni::JNIEnv&, const jni::Object<OfflineManager::ListOfflineRegionsCallback>&, std::exception_ptr); static void onList(jni::JNIEnv&, - jni::Object<FileSource>, - jni::Object<OfflineManager::ListOfflineRegionsCallback>, + const jni::Object<FileSource>&, + const jni::Object<OfflineManager::ListOfflineRegionsCallback>&, mbgl::optional<std::vector<mbgl::OfflineRegion>>); }; @@ -32,11 +32,11 @@ public: public: static constexpr auto Name() { return "com/mapbox/mapboxsdk/offline/OfflineManager$CreateOfflineRegionCallback"; } - static void onError(jni::JNIEnv&, jni::Object<OfflineManager::CreateOfflineRegionCallback>, std::exception_ptr); + static void onError(jni::JNIEnv&, const jni::Object<OfflineManager::CreateOfflineRegionCallback>&, std::exception_ptr); static void onCreate(jni::JNIEnv&, - jni::Object<FileSource>, - jni::Object<OfflineManager::CreateOfflineRegionCallback>, + const jni::Object<FileSource>&, + const jni::Object<OfflineManager::CreateOfflineRegionCallback>&, mbgl::optional<mbgl::OfflineRegion>); }; @@ -44,18 +44,18 @@ public: static void registerNative(jni::JNIEnv&); - OfflineManager(jni::JNIEnv&, jni::Object<FileSource>); + OfflineManager(jni::JNIEnv&, const jni::Object<FileSource>&); ~OfflineManager(); void setOfflineMapboxTileCountLimit(jni::JNIEnv&, jni::jlong limit); - void listOfflineRegions(jni::JNIEnv&, jni::Object<FileSource>, jni::Object<ListOfflineRegionsCallback> callback); + void listOfflineRegions(jni::JNIEnv&, const jni::Object<FileSource>&, const jni::Object<ListOfflineRegionsCallback>& callback); void createOfflineRegion(jni::JNIEnv&, - jni::Object<FileSource> jFileSource_, - jni::Object<OfflineRegionDefinition> definition, - jni::Array<jni::jbyte> metadata, - jni::Object<OfflineManager::CreateOfflineRegionCallback> callback); + const jni::Object<FileSource>& jFileSource_, + const jni::Object<OfflineRegionDefinition>& definition, + const jni::Array<jni::jbyte>& metadata, + const jni::Object<OfflineManager::CreateOfflineRegionCallback>& callback); private: mbgl::DefaultFileSource& fileSource; diff --git a/platform/android/src/offline/offline_region.cpp b/platform/android/src/offline/offline_region.cpp index 949377e221..1cd73a7c76 100644 --- a/platform/android/src/offline/offline_region.cpp +++ b/platform/android/src/offline/offline_region.cpp @@ -7,71 +7,62 @@ #include "offline_region_error.hpp" #include "offline_region_status.hpp" #include "../attach_env.hpp" -#include "../jni/generic_global_ref_deleter.hpp" namespace mbgl { namespace android { // OfflineRegion // -OfflineRegion::OfflineRegion(jni::JNIEnv& env, jni::jlong offlineRegionPtr, jni::Object<FileSource> jFileSource) +OfflineRegion::OfflineRegion(jni::JNIEnv& env, jni::jlong offlineRegionPtr, const jni::Object<FileSource>& jFileSource) : region(reinterpret_cast<mbgl::OfflineRegion *>(offlineRegionPtr)), fileSource(mbgl::android::FileSource::getDefaultFileSource(env, jFileSource)) {} OfflineRegion::~OfflineRegion() {} -void OfflineRegion::setOfflineRegionObserver(jni::JNIEnv& env_, jni::Object<OfflineRegion::OfflineRegionObserver> callback) { +void OfflineRegion::setOfflineRegionObserver(jni::JNIEnv& env_, const jni::Object<OfflineRegion::OfflineRegionObserver>& callback) { // Define the observer class Observer : public mbgl::OfflineRegionObserver { public: - Observer(jni::Global<jni::Object<OfflineRegion::OfflineRegionObserver>>&& callback_) - //TODO add a generic deleter for jni::Object - : callback(callback_.release().Get()) { - } - - ~Observer() override { - android::UniqueEnv env = android::AttachEnv(); - env->DeleteGlobalRef(Unwrap(*callback)); + Observer(jni::Global<jni::Object<OfflineRegion::OfflineRegionObserver>, jni::EnvAttachingDeleter> callback_) + : callback(std::move(callback_)) { } void statusChanged(mbgl::OfflineRegionStatus status) override { // Reattach, the callback comes from a different thread android::UniqueEnv env = android::AttachEnv(); - static auto javaClass = jni::Class<OfflineRegion::OfflineRegionObserver>::Singleton(*env); + static auto& javaClass = jni::Class<OfflineRegion::OfflineRegionObserver>::Singleton(*env); static auto method = javaClass.GetMethod<void (jni::Object<OfflineRegionStatus>)>(*env, "onStatusChanged"); - callback.Call(*env, method, - *jni::SeizeLocal(*env, OfflineRegionStatus::New(*env, status))); + callback.Call(*env, method, OfflineRegionStatus::New(*env, status)); } void responseError(mbgl::Response::Error error) override { // Reattach, the callback comes from a different thread android::UniqueEnv env = android::AttachEnv(); - static auto javaClass = jni::Class<OfflineRegion::OfflineRegionObserver>::Singleton(*env); + static auto& javaClass = jni::Class<OfflineRegion::OfflineRegionObserver>::Singleton(*env); static auto method = javaClass.GetMethod<void (jni::Object<mbgl::android::OfflineRegionError>)>(*env, "onError"); - callback.Call(*env, method, - *jni::SeizeLocal(*env, OfflineRegionError::New(*env, error))); + callback.Call(*env, method, OfflineRegionError::New(*env, error)); } void mapboxTileCountLimitExceeded(uint64_t limit) override { // Reattach, the callback comes from a different thread android::UniqueEnv env = android::AttachEnv(); - static auto javaClass = jni::Class<OfflineRegion::OfflineRegionObserver>::Singleton(*env); + static auto& javaClass = jni::Class<OfflineRegion::OfflineRegionObserver>::Singleton(*env); static auto method = javaClass.GetMethod<void (jni::jlong)>(*env, "mapboxTileCountLimitExceeded"); callback.Call(*env, method, jlong(limit)); } - jni::Object<OfflineRegion::OfflineRegionObserver> callback; + jni::Global<jni::Object<OfflineRegion::OfflineRegionObserver>, jni::EnvAttachingDeleter> callback; }; // Set the observer - fileSource.setOfflineRegionObserver(*region, std::make_unique<Observer>(callback.NewGlobalRef(env_))); + fileSource.setOfflineRegionObserver(*region, std::make_unique<Observer>(jni::NewGlobal<jni::EnvAttachingDeleter>(env_, callback))); } void OfflineRegion::setOfflineRegionDownloadState(jni::JNIEnv&, jni::jint jState) { @@ -92,85 +83,84 @@ void OfflineRegion::setOfflineRegionDownloadState(jni::JNIEnv&, jni::jint jState fileSource.setOfflineRegionDownloadState(*region, state); } -void OfflineRegion::getOfflineRegionStatus(jni::JNIEnv& env_, jni::Object<OfflineRegionStatusCallback> callback_) { +void OfflineRegion::getOfflineRegionStatus(jni::JNIEnv& env_, const jni::Object<OfflineRegionStatusCallback>& callback_) { + auto globalCallback = jni::NewGlobal<jni::EnvAttachingDeleter>(env_, callback_); fileSource.getOfflineRegionStatus(*region, [ //Ensure the object is not gc'd in the meanwhile - callback = std::shared_ptr<jni::jobject>(callback_.NewGlobalRef(env_).release().Get(), GenericGlobalRefDeleter()) + callback = std::make_shared<decltype(globalCallback)>(std::move(globalCallback)) ](mbgl::expected<mbgl::OfflineRegionStatus, std::exception_ptr> status) mutable { // Reattach, the callback comes from a different thread android::UniqueEnv env = android::AttachEnv(); if (status) { - OfflineRegionStatusCallback::onStatus(*env, jni::Object<OfflineRegionStatusCallback>(*callback), std::move(*status)); + OfflineRegionStatusCallback::onStatus(*env, *callback, std::move(*status)); } else { - OfflineRegionStatusCallback::onError(*env, jni::Object<OfflineRegionStatusCallback>(*callback), status.error()); + OfflineRegionStatusCallback::onError(*env, *callback, status.error()); } }); } -void OfflineRegion::deleteOfflineRegion(jni::JNIEnv& env_, jni::Object<OfflineRegionDeleteCallback> callback_) { - // Delete +void OfflineRegion::deleteOfflineRegion(jni::JNIEnv& env_, const jni::Object<OfflineRegionDeleteCallback>& callback_) { + auto globalCallback = jni::NewGlobal<jni::EnvAttachingDeleter>(env_, callback_); + fileSource.deleteOfflineRegion(std::move(*region), [ //Ensure the object is not gc'd in the meanwhile - callback = std::shared_ptr<jni::jobject>(callback_.NewGlobalRef(env_).release().Get(), GenericGlobalRefDeleter()) + callback = std::make_shared<decltype(globalCallback)>(std::move(globalCallback)) ](std::exception_ptr error) mutable { // Reattach, the callback comes from a different thread android::UniqueEnv env = android::AttachEnv(); if (error) { - OfflineRegionDeleteCallback::onError(*env, jni::Object<OfflineRegionDeleteCallback>(*callback), error); + OfflineRegionDeleteCallback::onError(*env, *callback, error); } else { - OfflineRegionDeleteCallback::onDelete(*env, jni::Object<OfflineRegionDeleteCallback>(*callback)); + OfflineRegionDeleteCallback::onDelete(*env, *callback); } }); } -void OfflineRegion::updateOfflineRegionMetadata(jni::JNIEnv& env_, jni::Array<jni::jbyte> jMetadata, jni::Object<OfflineRegionUpdateMetadataCallback> callback_) { - - // Convert +void OfflineRegion::updateOfflineRegionMetadata(jni::JNIEnv& env_, const jni::Array<jni::jbyte>& jMetadata, const jni::Object<OfflineRegionUpdateMetadataCallback>& callback_) { auto metadata = OfflineRegion::metadata(env_, jMetadata); + auto globalCallback = jni::NewGlobal<jni::EnvAttachingDeleter>(env_, callback_); fileSource.updateOfflineMetadata(region->getID(), metadata, [ //Ensure the object is not gc'd in the meanwhile - callback = std::shared_ptr<jni::jobject>(callback_.NewGlobalRef(env_).release().Get(), GenericGlobalRefDeleter()) + callback = std::make_shared<decltype(globalCallback)>(std::move(globalCallback)) ](mbgl::expected<mbgl::OfflineRegionMetadata, std::exception_ptr> data) mutable { // Reattach, the callback comes from a different thread android::UniqueEnv env = android::AttachEnv(); if (data) { - OfflineRegionUpdateMetadataCallback::onUpdate(*env, jni::Object<OfflineRegionUpdateMetadataCallback>(*callback), std::move(*data)); + OfflineRegionUpdateMetadataCallback::onUpdate(*env, *callback, std::move(*data)); } else { - OfflineRegionUpdateMetadataCallback::onError(*env, jni::Object<OfflineRegionUpdateMetadataCallback>(*callback), data.error()); + OfflineRegionUpdateMetadataCallback::onError(*env, *callback, data.error()); } }); } -jni::Object<OfflineRegion> OfflineRegion::New(jni::JNIEnv& env, jni::Object<FileSource> jFileSource, mbgl::OfflineRegion region) { +jni::Local<jni::Object<OfflineRegion>> OfflineRegion::New(jni::JNIEnv& env, const jni::Object<FileSource>& jFileSource, mbgl::OfflineRegion region) { // Definition - auto definition = jni::SeizeLocal(env, region.getDefinition().match( + auto definition = region.getDefinition().match( [&](const mbgl::OfflineTilePyramidRegionDefinition def) { - return jni::Object<OfflineRegionDefinition>( - *OfflineTilePyramidRegionDefinition::New(env, def)); + return OfflineTilePyramidRegionDefinition::New(env, def); }, [&](const mbgl::OfflineGeometryRegionDefinition def) { - return jni::Object<OfflineRegionDefinition>( - *OfflineGeometryRegionDefinition::New(env, def)); - })); + return OfflineGeometryRegionDefinition::New(env, def); + }); // Create region java object - static auto javaClass = jni::Class<OfflineRegion>::Singleton(env); + static auto& javaClass = jni::Class<OfflineRegion>::Singleton(env); static auto constructor = javaClass.GetConstructor<jni::jlong, jni::Object<FileSource>, jni::jlong, jni::Object<OfflineRegionDefinition>, jni::Array<jni::jbyte>>(env); return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(new mbgl::OfflineRegion(std::move(region))), //Copy a region to the heap jFileSource, jni::jlong(region.getID()), - *definition, - *jni::SeizeLocal(env, OfflineRegion::metadata(env, region.getMetadata()))); + definition, + OfflineRegion::metadata(env, region.getMetadata())); } -jni::Array<jni::jbyte> OfflineRegion::metadata(jni::JNIEnv& env, mbgl::OfflineRegionMetadata metadata_) { +jni::Local<jni::Array<jni::jbyte>> OfflineRegion::metadata(jni::JNIEnv& env, mbgl::OfflineRegionMetadata metadata_) { std::vector<jni::jbyte> convertedMetadata(metadata_.begin(), metadata_.end()); std::size_t length = static_cast<std::size_t>(convertedMetadata.size()); auto metadata = jni::Array<jni::jbyte>::New(env, length); @@ -178,7 +168,7 @@ jni::Array<jni::jbyte> OfflineRegion::metadata(jni::JNIEnv& env, mbgl::OfflineRe return metadata; } -mbgl::OfflineRegionMetadata OfflineRegion::metadata(jni::JNIEnv& env, jni::Array<jni::jbyte> metadata_) { +mbgl::OfflineRegionMetadata OfflineRegion::metadata(jni::JNIEnv& env, const jni::Array<jni::jbyte>& metadata_) { std::size_t length = metadata_.Length(env); auto metadata_tmp = std::vector<jni::jbyte>(); metadata_tmp.resize(length); @@ -193,12 +183,12 @@ void OfflineRegion::registerNative(jni::JNIEnv& env) { jni::Class<OfflineRegionDeleteCallback>::Singleton(env); jni::Class<OfflineRegionUpdateMetadataCallback>::Singleton(env); - static auto javaClass = jni::Class<OfflineRegion>::Singleton(env); + static auto& javaClass = jni::Class<OfflineRegion>::Singleton(env); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) jni::RegisterNativePeer<OfflineRegion>( env, javaClass, "nativePtr", - std::make_unique<OfflineRegion, JNIEnv&, jni::jlong, jni::Object<FileSource>>, + jni::MakePeer<OfflineRegion, jni::jlong, const jni::Object<FileSource>&>, "initialize", "finalize", METHOD(&OfflineRegion::setOfflineRegionObserver, "setOfflineRegionObserver"), @@ -214,40 +204,37 @@ void OfflineRegion::registerNative(jni::JNIEnv& env) { // OfflineRegionStatusCallback // void OfflineRegion::OfflineRegionStatusCallback::onError(jni::JNIEnv& env, - jni::Object<OfflineRegion::OfflineRegionStatusCallback> callback, + const jni::Object<OfflineRegion::OfflineRegionStatusCallback>& callback, std::exception_ptr error) { - static auto javaClass = jni::Class<OfflineRegion::OfflineRegionStatusCallback>::Singleton(env); + static auto& javaClass = jni::Class<OfflineRegion::OfflineRegionStatusCallback>::Singleton(env); static auto method = javaClass.GetMethod<void (jni::String)>(env, "onError"); - callback.Call(env, method, - *jni::SeizeLocal(env, jni::Make<jni::String>(env, mbgl::util::toString(error)))); + callback.Call(env, method, jni::Make<jni::String>(env, mbgl::util::toString(error))); } void OfflineRegion::OfflineRegionStatusCallback::onStatus(jni::JNIEnv& env, - jni::Object<OfflineRegion::OfflineRegionStatusCallback> callback, + const jni::Object<OfflineRegion::OfflineRegionStatusCallback>& callback, mbgl::optional<mbgl::OfflineRegionStatus> status) { - static auto javaClass = jni::Class<OfflineRegion::OfflineRegionStatusCallback>::Singleton(env); + static auto& javaClass = jni::Class<OfflineRegion::OfflineRegionStatusCallback>::Singleton(env); static auto method = javaClass.GetMethod<void (jni::Object<OfflineRegionStatus>)>(env, "onStatus"); - callback.Call(env, method, - *jni::SeizeLocal(env, OfflineRegionStatus::New(env, std::move(*status)))); + callback.Call(env, method, OfflineRegionStatus::New(env, std::move(*status))); } // OfflineRegionDeleteCallback // void OfflineRegion::OfflineRegionDeleteCallback::onError(jni::JNIEnv& env, - jni::Object<OfflineRegion::OfflineRegionDeleteCallback> callback, + const jni::Object<OfflineRegion::OfflineRegionDeleteCallback>& callback, std::exception_ptr error) { - static auto javaClass = jni::Class<OfflineRegion::OfflineRegionDeleteCallback>::Singleton(env); + static auto& javaClass = jni::Class<OfflineRegion::OfflineRegionDeleteCallback>::Singleton(env); static auto method = javaClass.GetMethod<void (jni::String)>(env, "onError"); - callback.Call(env, method, - *jni::SeizeLocal(env, jni::Make<jni::String>(env, mbgl::util::toString(error)))); + callback.Call(env, method, jni::Make<jni::String>(env, mbgl::util::toString(error))); } -void OfflineRegion::OfflineRegionDeleteCallback::onDelete(jni::JNIEnv& env, jni::Object<OfflineRegion::OfflineRegionDeleteCallback> callback) { +void OfflineRegion::OfflineRegionDeleteCallback::onDelete(jni::JNIEnv& env, const jni::Object<OfflineRegion::OfflineRegionDeleteCallback>& callback) { // Trigger callback - static auto javaClass = jni::Class<OfflineRegion::OfflineRegionDeleteCallback>::Singleton(env); + static auto& javaClass = jni::Class<OfflineRegion::OfflineRegionDeleteCallback>::Singleton(env); static auto method = javaClass.GetMethod<void ()>(env, "onDelete"); callback.Call(env, method); @@ -256,23 +243,21 @@ void OfflineRegion::OfflineRegionDeleteCallback::onDelete(jni::JNIEnv& env, jni: // OfflineRegionUpdateMetadataCallback // void OfflineRegion::OfflineRegionUpdateMetadataCallback::onError(jni::JNIEnv& env, - jni::Object<OfflineRegion::OfflineRegionUpdateMetadataCallback> callback, + const jni::Object<OfflineRegion::OfflineRegionUpdateMetadataCallback>& callback, std::exception_ptr error) { - static auto javaClass = jni::Class<OfflineRegion::OfflineRegionUpdateMetadataCallback>::Singleton(env); + static auto& javaClass = jni::Class<OfflineRegion::OfflineRegionUpdateMetadataCallback>::Singleton(env); static auto method = javaClass.GetMethod<void (jni::String)>(env, "onError"); - callback.Call(env, method, - *jni::SeizeLocal(env, jni::Make<jni::String>(env, mbgl::util::toString(error)))); + callback.Call(env, method, jni::Make<jni::String>(env, mbgl::util::toString(error))); } void OfflineRegion::OfflineRegionUpdateMetadataCallback::onUpdate(jni::JNIEnv& env, - jni::Object<OfflineRegion::OfflineRegionUpdateMetadataCallback> callback, + const jni::Object<OfflineRegion::OfflineRegionUpdateMetadataCallback>& callback, mbgl::optional<mbgl::OfflineRegionMetadata> metadata) { - static auto javaClass = jni::Class<OfflineRegion::OfflineRegionUpdateMetadataCallback>::Singleton(env); + static auto& javaClass = jni::Class<OfflineRegion::OfflineRegionUpdateMetadataCallback>::Singleton(env); static auto method = javaClass.GetMethod<void (jni::Array<jni::jbyte>)>(env, "onUpdate"); - callback.Call(env, method, - *jni::SeizeLocal(env, OfflineRegion::metadata(env, std::move(*metadata)))); + callback.Call(env, method, OfflineRegion::metadata(env, std::move(*metadata))); } } // namespace android diff --git a/platform/android/src/offline/offline_region.hpp b/platform/android/src/offline/offline_region.hpp index 11aecb82a9..49fa0c8ff8 100644 --- a/platform/android/src/offline/offline_region.hpp +++ b/platform/android/src/offline/offline_region.hpp @@ -21,10 +21,10 @@ public: public: static constexpr auto Name() { return "com/mapbox/mapboxsdk/offline/OfflineRegion$OfflineRegionStatusCallback"; }; - static void onError(jni::JNIEnv&, jni::Object<OfflineRegionStatusCallback>, std::exception_ptr); + static void onError(jni::JNIEnv&, const jni::Object<OfflineRegionStatusCallback>&, std::exception_ptr); static void onStatus(jni::JNIEnv&, - jni::Object<OfflineRegionStatusCallback>, + const jni::Object<OfflineRegionStatusCallback>&, mbgl::optional<mbgl::OfflineRegionStatus>); }; @@ -32,43 +32,43 @@ public: public: static constexpr auto Name() { return "com/mapbox/mapboxsdk/offline/OfflineRegion$OfflineRegionDeleteCallback"; }; - static void onError(jni::JNIEnv&, jni::Object<OfflineRegionDeleteCallback>, std::exception_ptr); + static void onError(jni::JNIEnv&, const jni::Object<OfflineRegionDeleteCallback>&, std::exception_ptr); - static void onDelete(jni::JNIEnv&, jni::Object<OfflineRegionDeleteCallback>); + static void onDelete(jni::JNIEnv&, const jni::Object<OfflineRegionDeleteCallback>&); }; class OfflineRegionUpdateMetadataCallback { public: static constexpr auto Name() { return "com/mapbox/mapboxsdk/offline/OfflineRegion$OfflineRegionUpdateMetadataCallback"; }; - static void onError(jni::JNIEnv&, jni::Object<OfflineRegionUpdateMetadataCallback>, std::exception_ptr); + static void onError(jni::JNIEnv&, const jni::Object<OfflineRegionUpdateMetadataCallback>&, std::exception_ptr); static void onUpdate(jni::JNIEnv&, - jni::Object<OfflineRegionUpdateMetadataCallback>, + const jni::Object<OfflineRegionUpdateMetadataCallback>&, mbgl::optional<mbgl::OfflineRegionMetadata>); }; static constexpr auto Name() { return "com/mapbox/mapboxsdk/offline/OfflineRegion"; }; - OfflineRegion(jni::JNIEnv&, jni::jlong, jni::Object<FileSource>); + OfflineRegion(jni::JNIEnv&, jni::jlong, const jni::Object<FileSource>&); ~OfflineRegion(); - void setOfflineRegionObserver(jni::JNIEnv&, jni::Object<OfflineRegion::OfflineRegionObserver>); + void setOfflineRegionObserver(jni::JNIEnv&, const jni::Object<OfflineRegion::OfflineRegionObserver>&); void setOfflineRegionDownloadState(jni::JNIEnv&, jni::jint); - void getOfflineRegionStatus(jni::JNIEnv&, jni::Object<OfflineRegion::OfflineRegionStatusCallback>); + void getOfflineRegionStatus(jni::JNIEnv&, const jni::Object<OfflineRegion::OfflineRegionStatusCallback>&); - void deleteOfflineRegion(jni::JNIEnv&, jni::Object<OfflineRegionDeleteCallback>); + void deleteOfflineRegion(jni::JNIEnv&, const jni::Object<OfflineRegionDeleteCallback>&); - void updateOfflineRegionMetadata(jni::JNIEnv&, jni::Array<jni::jbyte>, jni::Object<OfflineRegionUpdateMetadataCallback>); + void updateOfflineRegionMetadata(jni::JNIEnv&, const jni::Array<jni::jbyte>&, const jni::Object<OfflineRegionUpdateMetadataCallback>&); - static jni::Object<OfflineRegion> New(jni::JNIEnv&, jni::Object<FileSource>, mbgl::OfflineRegion); + static jni::Local<jni::Object<OfflineRegion>> New(jni::JNIEnv&, const jni::Object<FileSource>&, mbgl::OfflineRegion); - static jni::Array<jni::jbyte> metadata(jni::JNIEnv&, mbgl::OfflineRegionMetadata); + static jni::Local<jni::Array<jni::jbyte>> metadata(jni::JNIEnv&, mbgl::OfflineRegionMetadata); - static mbgl::OfflineRegionMetadata metadata(jni::JNIEnv&, jni::Array<jni::jbyte>); + static mbgl::OfflineRegionMetadata metadata(jni::JNIEnv&, const jni::Array<jni::jbyte>&); static void registerNative(jni::JNIEnv&); diff --git a/platform/android/src/offline/offline_region_definition.cpp b/platform/android/src/offline/offline_region_definition.cpp index 2a69181f5b..23e5b7466b 100644 --- a/platform/android/src/offline/offline_region_definition.cpp +++ b/platform/android/src/offline/offline_region_definition.cpp @@ -15,11 +15,11 @@ void OfflineRegionDefinition::registerNative(jni::JNIEnv& env) { } mbgl::OfflineRegionDefinition OfflineRegionDefinition::getDefinition(JNIEnv& env, - jni::Object<OfflineRegionDefinition> jDefinition) { + const jni::Object<OfflineRegionDefinition>& jDefinition) { if (jDefinition.IsInstanceOf(env, jni::Class<OfflineTilePyramidRegionDefinition>::Singleton(env))) { - return OfflineTilePyramidRegionDefinition::getDefinition(env, jni::Object<OfflineTilePyramidRegionDefinition>(*jDefinition)); + return OfflineTilePyramidRegionDefinition::getDefinition(env, jni::Cast(env, jni::Class<OfflineTilePyramidRegionDefinition>::Singleton(env), jDefinition)); } else if (jDefinition.IsInstanceOf(env, jni::Class<OfflineGeometryRegionDefinition>::Singleton(env))) { - return OfflineGeometryRegionDefinition::getDefinition(env, jni::Object<OfflineGeometryRegionDefinition>(*jDefinition)); + return OfflineGeometryRegionDefinition::getDefinition(env, jni::Cast(env, jni::Class<OfflineGeometryRegionDefinition>::Singleton(env), jDefinition)); } throw std::runtime_error("Unknown offline region definition java class"); @@ -27,21 +27,21 @@ mbgl::OfflineRegionDefinition OfflineRegionDefinition::getDefinition(JNIEnv& env // OfflineTilePyramidRegionDefinition // -jni::Object<OfflineTilePyramidRegionDefinition> OfflineTilePyramidRegionDefinition::New(jni::JNIEnv& env, const mbgl::OfflineTilePyramidRegionDefinition& definition) { - static auto javaClass = jni::Class<OfflineTilePyramidRegionDefinition>::Singleton(env); +jni::Local<jni::Object<OfflineRegionDefinition>> OfflineTilePyramidRegionDefinition::New(jni::JNIEnv& env, const mbgl::OfflineTilePyramidRegionDefinition& definition) { + static auto& javaClass = jni::Class<OfflineTilePyramidRegionDefinition>::Singleton(env); static auto constructor = javaClass.GetConstructor<jni::String, jni::Object<LatLngBounds>, jni::jdouble, jni::jdouble, jni::jfloat>(env); return javaClass.New(env, constructor, - *jni::SeizeLocal(env, jni::Make<jni::String>(env, definition.styleURL)), - *jni::SeizeLocal(env, LatLngBounds::New(env, definition.bounds)), + jni::Make<jni::String>(env, definition.styleURL), + LatLngBounds::New(env, definition.bounds), definition.minZoom, definition.maxZoom, definition.pixelRatio); } -mbgl::OfflineTilePyramidRegionDefinition OfflineTilePyramidRegionDefinition::getDefinition(jni::JNIEnv& env, jni::Object<OfflineTilePyramidRegionDefinition> jDefinition) { +mbgl::OfflineTilePyramidRegionDefinition OfflineTilePyramidRegionDefinition::getDefinition(jni::JNIEnv& env, const jni::Object<OfflineTilePyramidRegionDefinition>& jDefinition) { // Field references - static auto javaClass = jni::Class<OfflineTilePyramidRegionDefinition>::Singleton(env); + static auto& javaClass = jni::Class<OfflineTilePyramidRegionDefinition>::Singleton(env); static auto styleURLF = javaClass.GetField<jni::String>(env, "styleURL"); static auto boundsF = javaClass.GetField<jni::Object<LatLngBounds>>(env, "bounds"); static auto minZoomF = javaClass.GetField<jni::jdouble>(env, "minZoom"); @@ -49,8 +49,8 @@ mbgl::OfflineTilePyramidRegionDefinition OfflineTilePyramidRegionDefinition::get static auto pixelRatioF = javaClass.GetField<jni::jfloat>(env, "pixelRatio"); return mbgl::OfflineTilePyramidRegionDefinition( - jni::Make<std::string>(env, *jni::SeizeLocal(env, jDefinition.Get(env, styleURLF))), - LatLngBounds::getLatLngBounds(env, *jni::SeizeLocal(env, jDefinition.Get(env, boundsF))), + jni::Make<std::string>(env, jDefinition.Get(env, styleURLF)), + LatLngBounds::getLatLngBounds(env, jDefinition.Get(env, boundsF)), jDefinition.Get(env, minZoomF), jDefinition.Get(env, maxZoomF), jDefinition.Get(env, pixelRatioF) @@ -63,21 +63,21 @@ void OfflineTilePyramidRegionDefinition::registerNative(jni::JNIEnv& env) { // OfflineGeometryRegionDefinition // -jni::Object<OfflineGeometryRegionDefinition> OfflineGeometryRegionDefinition::New(jni::JNIEnv& env, const mbgl::OfflineGeometryRegionDefinition& definition) { - static auto javaClass = jni::Class<OfflineGeometryRegionDefinition>::Singleton(env); +jni::Local<jni::Object<OfflineRegionDefinition>> OfflineGeometryRegionDefinition::New(jni::JNIEnv& env, const mbgl::OfflineGeometryRegionDefinition& definition) { + static auto& javaClass = jni::Class<OfflineGeometryRegionDefinition>::Singleton(env); static auto constructor = javaClass.GetConstructor<jni::String, jni::Object<geojson::Geometry>, jni::jdouble, jni::jdouble, jni::jfloat>(env); return javaClass.New(env, constructor, - *jni::SeizeLocal(env, jni::Make<jni::String>(env, definition.styleURL)), - *jni::SeizeLocal(env, geojson::Geometry::New(env, definition.geometry)), + jni::Make<jni::String>(env, definition.styleURL), + geojson::Geometry::New(env, definition.geometry), definition.minZoom, definition.maxZoom, definition.pixelRatio); } -mbgl::OfflineGeometryRegionDefinition OfflineGeometryRegionDefinition::getDefinition(jni::JNIEnv& env, jni::Object<OfflineGeometryRegionDefinition> jDefinition) { +mbgl::OfflineGeometryRegionDefinition OfflineGeometryRegionDefinition::getDefinition(jni::JNIEnv& env, const jni::Object<OfflineGeometryRegionDefinition>& jDefinition) { // Field references - static auto javaClass = jni::Class<OfflineGeometryRegionDefinition>::Singleton(env); + static auto& javaClass = jni::Class<OfflineGeometryRegionDefinition>::Singleton(env); static auto styleURLF = javaClass.GetField<jni::String>(env, "styleURL"); static auto geometryF = javaClass.GetField<jni::Object<geojson::Geometry>>(env, "geometry"); static auto minZoomF = javaClass.GetField<jni::jdouble>(env, "minZoom"); @@ -85,8 +85,8 @@ mbgl::OfflineGeometryRegionDefinition OfflineGeometryRegionDefinition::getDefini static auto pixelRatioF = javaClass.GetField<jni::jfloat>(env, "pixelRatio"); return mbgl::OfflineGeometryRegionDefinition( - jni::Make<std::string>(env, *jni::SeizeLocal(env, jDefinition.Get(env, styleURLF))), - geojson::Geometry::convert(env, *jni::SeizeLocal(env, jDefinition.Get(env, geometryF))), + jni::Make<std::string>(env, jDefinition.Get(env, styleURLF)), + geojson::Geometry::convert(env, jDefinition.Get(env, geometryF)), jDefinition.Get(env, minZoomF), jDefinition.Get(env, maxZoomF), jDefinition.Get(env, pixelRatioF) diff --git a/platform/android/src/offline/offline_region_definition.hpp b/platform/android/src/offline/offline_region_definition.hpp index 853cc833bf..827fac0a80 100644 --- a/platform/android/src/offline/offline_region_definition.hpp +++ b/platform/android/src/offline/offline_region_definition.hpp @@ -12,27 +12,29 @@ public: static void registerNative(jni::JNIEnv&); - static mbgl::OfflineRegionDefinition getDefinition(JNIEnv& env, jni::Object<OfflineRegionDefinition> jDefinition); + static mbgl::OfflineRegionDefinition getDefinition(JNIEnv& env, const jni::Object<OfflineRegionDefinition>& jDefinition); }; -class OfflineTilePyramidRegionDefinition: public OfflineRegionDefinition { +class OfflineTilePyramidRegionDefinition { public: + using SuperTag = OfflineRegionDefinition; static constexpr auto Name() { return "com/mapbox/mapboxsdk/offline/OfflineTilePyramidRegionDefinition"; }; - static jni::Object<OfflineTilePyramidRegionDefinition> New(jni::JNIEnv&, const mbgl::OfflineTilePyramidRegionDefinition&); + static jni::Local<jni::Object<OfflineRegionDefinition>> New(jni::JNIEnv&, const mbgl::OfflineTilePyramidRegionDefinition&); - static mbgl::OfflineTilePyramidRegionDefinition getDefinition(jni::JNIEnv&, jni::Object<OfflineTilePyramidRegionDefinition>); + static mbgl::OfflineTilePyramidRegionDefinition getDefinition(jni::JNIEnv&, const jni::Object<OfflineTilePyramidRegionDefinition>&); static void registerNative(jni::JNIEnv&); }; -class OfflineGeometryRegionDefinition: public OfflineRegionDefinition { +class OfflineGeometryRegionDefinition { public: + using SuperTag = OfflineRegionDefinition; static constexpr auto Name() { return "com/mapbox/mapboxsdk/offline/OfflineGeometryRegionDefinition"; }; - static jni::Object<OfflineGeometryRegionDefinition> New(jni::JNIEnv&, const mbgl::OfflineGeometryRegionDefinition&); + static jni::Local<jni::Object<OfflineRegionDefinition>> New(jni::JNIEnv&, const mbgl::OfflineGeometryRegionDefinition&); - static mbgl::OfflineGeometryRegionDefinition getDefinition(jni::JNIEnv&, jni::Object<OfflineGeometryRegionDefinition>); + static mbgl::OfflineGeometryRegionDefinition getDefinition(jni::JNIEnv&, const jni::Object<OfflineGeometryRegionDefinition>&); static void registerNative(jni::JNIEnv&); }; diff --git a/platform/android/src/offline/offline_region_error.cpp b/platform/android/src/offline/offline_region_error.cpp index 02432757d4..199bbafa6b 100644 --- a/platform/android/src/offline/offline_region_error.cpp +++ b/platform/android/src/offline/offline_region_error.cpp @@ -3,7 +3,7 @@ namespace mbgl { namespace android { -jni::Object<OfflineRegionError> OfflineRegionError::New(jni::JNIEnv& env, mbgl::Response::Error error) { +jni::Local<jni::Object<OfflineRegionError>> OfflineRegionError::New(jni::JNIEnv& env, mbgl::Response::Error error) { // Handle the value of reason independently of the underlying int value std::string reason; @@ -28,12 +28,12 @@ jni::Object<OfflineRegionError> OfflineRegionError::New(jni::JNIEnv& env, mbgl:: break; } - static auto javaClass = jni::Class<OfflineRegionError>::Singleton(env); + static auto& javaClass = jni::Class<OfflineRegionError>::Singleton(env); static auto constructor = javaClass.GetConstructor<jni::String, jni::String>(env); return javaClass.New(env, constructor, - *jni::SeizeLocal(env, jni::Make<jni::String>(env, reason)), - *jni::SeizeLocal(env, jni::Make<jni::String>(env, error.message))); + jni::Make<jni::String>(env, reason), + jni::Make<jni::String>(env, error.message)); } void OfflineRegionError::registerNative(jni::JNIEnv& env) { diff --git a/platform/android/src/offline/offline_region_error.hpp b/platform/android/src/offline/offline_region_error.hpp index c51f08a745..151e05ab19 100644 --- a/platform/android/src/offline/offline_region_error.hpp +++ b/platform/android/src/offline/offline_region_error.hpp @@ -10,7 +10,7 @@ class OfflineRegionError { public: static constexpr auto Name() { return "com/mapbox/mapboxsdk/offline/OfflineRegionError"; }; - static jni::Object<OfflineRegionError> New(jni::JNIEnv&, mbgl::Response::Error); + static jni::Local<jni::Object<OfflineRegionError>> New(jni::JNIEnv&, mbgl::Response::Error); static void registerNative(jni::JNIEnv&); }; diff --git a/platform/android/src/offline/offline_region_status.cpp b/platform/android/src/offline/offline_region_status.cpp index 0a415bdb5f..5dd9f20a7f 100644 --- a/platform/android/src/offline/offline_region_status.cpp +++ b/platform/android/src/offline/offline_region_status.cpp @@ -3,7 +3,7 @@ namespace mbgl { namespace android { -jni::Object<OfflineRegionStatus> OfflineRegionStatus::New(jni::JNIEnv& env, mbgl::OfflineRegionStatus status) { +jni::Local<jni::Object<OfflineRegionStatus>> OfflineRegionStatus::New(jni::JNIEnv& env, mbgl::OfflineRegionStatus status) { // Convert to jint jint downloadState; @@ -17,7 +17,7 @@ jni::Object<OfflineRegionStatus> OfflineRegionStatus::New(jni::JNIEnv& env, mbgl } // Create java object - static auto javaClass = jni::Class<OfflineRegionStatus>::Singleton(env); + static auto& javaClass = jni::Class<OfflineRegionStatus>::Singleton(env); static auto constructor = javaClass.GetConstructor<jint, jlong, jlong, jlong, jlong, jlong, jboolean>(env); return javaClass.New(env, constructor, downloadState, diff --git a/platform/android/src/offline/offline_region_status.hpp b/platform/android/src/offline/offline_region_status.hpp index 9f638e1093..9ef48ec357 100644 --- a/platform/android/src/offline/offline_region_status.hpp +++ b/platform/android/src/offline/offline_region_status.hpp @@ -10,7 +10,7 @@ class OfflineRegionStatus { public: static constexpr auto Name() { return "com/mapbox/mapboxsdk/offline/OfflineRegionStatus"; }; - static jni::Object<OfflineRegionStatus> New(jni::JNIEnv&, mbgl::OfflineRegionStatus status); + static jni::Local<jni::Object<OfflineRegionStatus>> New(jni::JNIEnv&, mbgl::OfflineRegionStatus status); static void registerNative(jni::JNIEnv&); }; |