diff options
Diffstat (limited to 'platform/android/src')
-rw-r--r-- | platform/android/src/file_source.cpp | 47 | ||||
-rw-r--r-- | platform/android/src/file_source.hpp | 2 | ||||
-rw-r--r-- | platform/android/src/jni_native.cpp | 6 | ||||
-rw-r--r-- | platform/android/src/mapbox.cpp | 17 | ||||
-rw-r--r-- | platform/android/src/mapbox.hpp | 18 |
5 files changed, 64 insertions, 26 deletions
diff --git a/platform/android/src/file_source.cpp b/platform/android/src/file_source.cpp index 5f61aadba0..234d8d9758 100644 --- a/platform/android/src/file_source.cpp +++ b/platform/android/src/file_source.cpp @@ -1,5 +1,7 @@ #include "file_source.hpp" + #include "attach_env.hpp" +#include "mapbox.hpp" #include <mbgl/actor/actor.hpp> #include <mbgl/actor/scheduler.hpp> @@ -14,8 +16,10 @@ namespace mbgl { std::shared_ptr<FileSource> FileSource::createPlatformFileSource(const ResourceOptions& options) { - auto* assetFileSource = reinterpret_cast<AssetManagerFileSource*>(options.platformContext()); - auto fileSource = std::make_shared<DefaultFileSource>(options.cachePath(), std::unique_ptr<AssetManagerFileSource>(assetFileSource)); + auto env{android::AttachEnv()}; + auto assetManager = android::Mapbox::getAssetManager(*env); + auto fileSource = std::make_shared<DefaultFileSource>(options.cachePath(), + std::make_unique<AssetManagerFileSource>(*env, assetManager)); fileSource->setAccessToken(options.accessToken()); return fileSource; } @@ -24,17 +28,12 @@ namespace android { // FileSource // -FileSource::FileSource(jni::JNIEnv& _env, - const jni::String& accessToken, - const jni::String& _cachePath, - const jni::Object<AssetManager>& assetManager) { +FileSource::FileSource(jni::JNIEnv& _env, const jni::String& accessToken, const jni::String& _cachePath) { std::string path = jni::Make<std::string>(_env, _cachePath); mapbox::sqlite::setTempPath(path); - resourceOptions - .withAccessToken(accessToken ? jni::Make<std::string>(_env, accessToken) : "") - .withCachePath(path + DATABASE_FILE) - .withPlatformContext(reinterpret_cast<void*>(new AssetManagerFileSource(_env, assetManager))); + resourceOptions.withAccessToken(accessToken ? jni::Make<std::string>(_env, accessToken) : "") + .withCachePath(path + DATABASE_FILE); // Create a core default file source fileSource = std::static_pointer_cast<mbgl::DefaultFileSource>(mbgl::FileSource::getSharedFileSource(resourceOptions)); @@ -171,20 +170,20 @@ void FileSource::registerNative(jni::JNIEnv& env) { #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) // Register the peer - jni::RegisterNativePeer<FileSource>( - env, javaClass, "nativePtr", - jni::MakePeer<FileSource, const jni::String&, const jni::String&, const jni::Object<AssetManager>&>, - "initialize", - "finalize", - METHOD(&FileSource::getAccessToken, "getAccessToken"), - METHOD(&FileSource::setAccessToken, "setAccessToken"), - METHOD(&FileSource::setAPIBaseUrl, "setApiBaseUrl"), - METHOD(&FileSource::setResourceTransform, "setResourceTransform"), - METHOD(&FileSource::setResourceCachePath, "setResourceCachePath"), - METHOD(&FileSource::resume, "activate"), - METHOD(&FileSource::pause, "deactivate"), - METHOD(&FileSource::isResumed, "isActivated") - ); + jni::RegisterNativePeer<FileSource>(env, + javaClass, + "nativePtr", + jni::MakePeer<FileSource, const jni::String&, const jni::String&>, + "initialize", + "finalize", + METHOD(&FileSource::getAccessToken, "getAccessToken"), + METHOD(&FileSource::setAccessToken, "setAccessToken"), + METHOD(&FileSource::setAPIBaseUrl, "setApiBaseUrl"), + METHOD(&FileSource::setResourceTransform, "setResourceTransform"), + METHOD(&FileSource::setResourceCachePath, "setResourceCachePath"), + METHOD(&FileSource::resume, "activate"), + METHOD(&FileSource::pause, "deactivate"), + METHOD(&FileSource::isResumed, "isActivated")); } diff --git a/platform/android/src/file_source.hpp b/platform/android/src/file_source.hpp index f3ad33eb31..6a9190fa06 100644 --- a/platform/android/src/file_source.hpp +++ b/platform/android/src/file_source.hpp @@ -41,7 +41,7 @@ public: const jni::String&); }; - FileSource(jni::JNIEnv&, const jni::String&, const jni::String&, const jni::Object<AssetManager>&); + FileSource(jni::JNIEnv&, const jni::String&, const jni::String&); ~FileSource(); diff --git a/platform/android/src/jni_native.cpp b/platform/android/src/jni_native.cpp index 9fe14f8f1f..bcbdfcf484 100644 --- a/platform/android/src/jni_native.cpp +++ b/platform/android/src/jni_native.cpp @@ -6,8 +6,8 @@ #include "bitmap.hpp" #include "bitmap_factory.hpp" #include "connectivity_listener.hpp" -#include "conversion/conversion.hpp" #include "conversion/collection.hpp" +#include "conversion/conversion.hpp" #include "file_source.hpp" #include "geojson/feature.hpp" #include "geojson/feature_collection.hpp" @@ -32,6 +32,7 @@ #include "java_types.hpp" #include "map_renderer.hpp" #include "map_renderer_runnable.hpp" +#include "mapbox.hpp" #include "native_map_view.hpp" #ifndef MBGL_MODULE_OFFLINE_DISABLE #include "offline/offline_manager.hpp" @@ -158,6 +159,9 @@ void registerNatives(JavaVM *vm) { // Logger Logger::registerNative(env); + + // AssetManager + Mapbox::registerNative(env); } } // namespace android diff --git a/platform/android/src/mapbox.cpp b/platform/android/src/mapbox.cpp new file mode 100644 index 0000000000..c835518b42 --- /dev/null +++ b/platform/android/src/mapbox.cpp @@ -0,0 +1,17 @@ +#include "mapbox.hpp" + +namespace mbgl { +namespace android { + +jni::Local<jni::Object<AssetManager>> Mapbox::getAssetManager(jni::JNIEnv& env) { + static auto& javaClass = jni::Class<Mapbox>::Singleton(env); + auto method = javaClass.GetStaticMethod<jni::Object<AssetManager>()>(env, "getAssetManager"); + return javaClass.Call(env, method); +} + +void Mapbox::registerNative(jni::JNIEnv& env) { + jni::Class<Mapbox>::Singleton(env); +} + +} // namespace android +} // namespace mbgl diff --git a/platform/android/src/mapbox.hpp b/platform/android/src/mapbox.hpp new file mode 100644 index 0000000000..2d9a657fa1 --- /dev/null +++ b/platform/android/src/mapbox.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include "asset_manager.hpp" + +#include <jni/jni.hpp> + +namespace mbgl { +namespace android { + +class Mapbox { +public: + static constexpr auto Name() { return "com/mapbox/mapboxsdk/Mapbox"; }; + static jni::Local<jni::Object<AssetManager>> getAssetManager(jni::JNIEnv&); + static void registerNative(jni::JNIEnv&); +}; + +} // namespace android +} // namespace mbgl |