summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Shalamov <alexander.shalamov@mapbox.com>2019-09-25 17:37:48 +0300
committerAlexander Shalamov <alexander.shalamov@mapbox.com>2019-09-26 10:56:44 +0300
commit82eabac126f98a46145c5af3dcfea20e75b60f68 (patch)
treef4007c92ef79487c5ff4bd8f799ac8bd66bf0d00
parente5cdc4ecf362dadf2da148a22cf97aaf3c9c4ecf (diff)
downloadqtlocation-mapboxgl-upstream/alexshalamov_get_android_asset_manager.tar.gz
[android] Remove usage of ResourceOptions::withPlatformContextupstream/alexshalamov_get_android_asset_manager
-rw-r--r--next/platform/android/android.cmake2
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java10
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java9
-rw-r--r--platform/android/core-files.json2
-rw-r--r--platform/android/src/file_source.cpp47
-rw-r--r--platform/android/src/file_source.hpp2
-rw-r--r--platform/android/src/jni_native.cpp6
-rw-r--r--platform/android/src/mapbox.cpp17
-rw-r--r--platform/android/src/mapbox.hpp18
9 files changed, 82 insertions, 31 deletions
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 <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