From 82eabac126f98a46145c5af3dcfea20e75b60f68 Mon Sep 17 00:00:00 2001 From: Alexander Shalamov Date: Wed, 25 Sep 2019 17:37:48 +0300 Subject: [android] Remove usage of ResourceOptions::withPlatformContext --- next/platform/android/android.cmake | 2 + .../src/main/java/com/mapbox/mapboxsdk/Mapbox.java | 10 +++++ .../com/mapbox/mapboxsdk/storage/FileSource.java | 9 ++--- platform/android/core-files.json | 2 + platform/android/src/file_source.cpp | 47 +++++++++++----------- platform/android/src/file_source.hpp | 2 +- platform/android/src/jni_native.cpp | 6 ++- platform/android/src/mapbox.cpp | 17 ++++++++ platform/android/src/mapbox.hpp | 18 +++++++++ 9 files changed, 82 insertions(+), 31 deletions(-) create mode 100644 platform/android/src/mapbox.cpp create mode 100644 platform/android/src/mapbox.hpp diff --git a/next/platform/android/android.cmake b/next/platform/android/android.cmake index 507c1baef0..13818e39a7 100644 --- a/next/platform/android/android.cmake +++ b/next/platform/android/android.cmake @@ -101,6 +101,8 @@ target_sources( ${MBGL_ROOT}/platform/android/src/logger.cpp ${MBGL_ROOT}/platform/android/src/logger.hpp ${MBGL_ROOT}/platform/android/src/logging_android.cpp + ${MBGL_ROOT}/platform/android/src/mapbox.cpp + ${MBGL_ROOT}/platform/android/src/mapbox.hpp ${MBGL_ROOT}/platform/android/src/map/camera_position.cpp ${MBGL_ROOT}/platform/android/src/map/camera_position.hpp ${MBGL_ROOT}/platform/android/src/map/image.cpp diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java index 01c82ddad4..9c2ae8492c 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java @@ -2,6 +2,7 @@ package com.mapbox.mapboxsdk; import android.annotation.SuppressLint; import android.content.Context; +import android.content.res.AssetManager; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.UiThread; @@ -222,4 +223,13 @@ public final class Mapbox { public static boolean hasInstance() { return INSTANCE != null; } + + /** + * Internal use. Returns AssetManager. + * + * @return the asset manager + */ + private static AssetManager getAssetManager() { + return getApplicationContext().getResources().getAssets(); + } } \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java index 763c97cca7..07e5b7e16d 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java @@ -4,7 +4,6 @@ import android.content.Context; import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; -import android.content.res.AssetManager; import android.os.AsyncTask; import android.os.Environment; import android.support.annotation.Keep; @@ -90,7 +89,7 @@ public class FileSource { @UiThread public static synchronized FileSource getInstance(@NonNull Context context) { if (INSTANCE == null) { - INSTANCE = new FileSource(getResourcesCachePath(context), context.getResources().getAssets()); + INSTANCE = new FileSource(getResourcesCachePath(context)); } return INSTANCE; @@ -366,8 +365,8 @@ public class FileSource { @Keep private long nativePtr; - private FileSource(String cachePath, AssetManager assetManager) { - initialize(Mapbox.getAccessToken(), cachePath, assetManager); + private FileSource(String cachePath) { + initialize(Mapbox.getAccessToken(), cachePath); } @Keep @@ -404,7 +403,7 @@ public class FileSource { private native void setResourceCachePath(String path, ResourcesCachePathChangeCallback callback); @Keep - private native void initialize(String accessToken, String cachePath, AssetManager assetManager); + private native void initialize(String accessToken, String cachePath); @Override @Keep diff --git a/platform/android/core-files.json b/platform/android/core-files.json index e442883e47..d536247154 100644 --- a/platform/android/core-files.json +++ b/platform/android/core-files.json @@ -43,6 +43,7 @@ "platform/android/src/jni_native.cpp", "platform/android/src/logger.cpp", "platform/android/src/logging_android.cpp", + "platform/android/src/mapbox.cpp", "platform/android/src/map/camera_position.cpp", "platform/android/src/map/image.cpp", "platform/android/src/map_renderer.cpp", @@ -146,6 +147,7 @@ "i18n/collator_jni.hpp": "platform/android/src/i18n/collator_jni.hpp", "i18n/number_format_jni.hpp": "platform/android/src/i18n/number_format_jni.hpp", "logger.hpp": "platform/android/src/logger.hpp", + "mapbox.hpp": "platform/android/src/mapbox.hpp", "map/camera_position.hpp": "platform/android/src/map/camera_position.hpp", "map/image.hpp": "platform/android/src/map/image.hpp", "map_renderer.hpp": "platform/android/src/map_renderer.hpp", 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 #include @@ -14,8 +16,10 @@ namespace mbgl { std::shared_ptr FileSource::createPlatformFileSource(const ResourceOptions& options) { - auto* assetFileSource = reinterpret_cast(options.platformContext()); - auto fileSource = std::make_shared(options.cachePath(), std::unique_ptr(assetFileSource)); + auto env{android::AttachEnv()}; + auto assetManager = android::Mapbox::getAssetManager(*env); + auto fileSource = std::make_shared(options.cachePath(), + std::make_unique(*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) { +FileSource::FileSource(jni::JNIEnv& _env, const jni::String& accessToken, const jni::String& _cachePath) { std::string path = jni::Make(_env, _cachePath); mapbox::sqlite::setTempPath(path); - resourceOptions - .withAccessToken(accessToken ? jni::Make(_env, accessToken) : "") - .withCachePath(path + DATABASE_FILE) - .withPlatformContext(reinterpret_cast(new AssetManagerFileSource(_env, assetManager))); + resourceOptions.withAccessToken(accessToken ? jni::Make(_env, accessToken) : "") + .withCachePath(path + DATABASE_FILE); // Create a core default file source fileSource = std::static_pointer_cast(mbgl::FileSource::getSharedFileSource(resourceOptions)); @@ -171,20 +170,20 @@ void FileSource::registerNative(jni::JNIEnv& env) { #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod(name) // Register the peer - jni::RegisterNativePeer( - env, javaClass, "nativePtr", - jni::MakePeer&>, - "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(env, + javaClass, + "nativePtr", + jni::MakePeer, + "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&); + 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> Mapbox::getAssetManager(jni::JNIEnv& env) { + static auto& javaClass = jni::Class::Singleton(env); + auto method = javaClass.GetStaticMethod()>(env, "getAssetManager"); + return javaClass.Call(env, method); +} + +void Mapbox::registerNative(jni::JNIEnv& env) { + jni::Class::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 + +namespace mbgl { +namespace android { + +class Mapbox { +public: + static constexpr auto Name() { return "com/mapbox/mapboxsdk/Mapbox"; }; + static jni::Local> getAssetManager(jni::JNIEnv&); + static void registerNative(jni::JNIEnv&); +}; + +} // namespace android +} // namespace mbgl -- cgit v1.2.1