diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2017-02-17 15:17:21 +0100 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2017-02-21 10:48:57 -0800 |
commit | 7f315ef5e6d38a99c990eb5b745f34505f3a0edd (patch) | |
tree | cc8fd26df6940df9defbde48387ad835b22a8127 | |
parent | a7c9b01f3c6bacbcc20ab83f3efea62018952762 (diff) | |
download | qtlocation-mapboxgl-7f315ef5e6d38a99c990eb5b745f34505f3a0edd.tar.gz |
[android] use shared DefaultFileSource for all maps + OfflineManager
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java | 17 | ||||
-rw-r--r-- | platform/android/config.cmake | 2 | ||||
-rw-r--r-- | platform/android/src/default_file_source.cpp | 20 | ||||
-rw-r--r-- | platform/android/src/default_file_source.hpp | 12 | ||||
-rwxr-xr-x | platform/android/src/jni.cpp | 12 | ||||
-rwxr-xr-x | platform/android/src/native_map_view.cpp | 13 | ||||
-rwxr-xr-x | platform/android/src/native_map_view.hpp | 2 |
7 files changed, 51 insertions, 27 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java index beaea73024..d2371fcc2f 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java @@ -32,13 +32,6 @@ public class OfflineManager { // Default database name private static final String DATABASE_NAME = "mbgl-offline.db"; - /* - * The maximumCacheSize parameter is a limit applied to non-offline resources only, - * i.e. resources added to the database for the "ambient use" caching functionality. - * There is no size limit for offline resources. - */ - private static final long DEFAULT_MAX_CACHE_SIZE = 50 * 1024 * 1024; - // Holds the pointer to JNI DefaultFileSource private long mDefaultFileSourcePtr = 0; @@ -93,9 +86,9 @@ public class OfflineManager { */ private OfflineManager(Context context) { // Get a pointer to the DefaultFileSource instance - String assetRoot = getDatabasePath(context); - String cachePath = assetRoot + File.separator + DATABASE_NAME; - mDefaultFileSourcePtr = createDefaultFileSource(cachePath, assetRoot, DEFAULT_MAX_CACHE_SIZE); + String cachePath = getDatabasePath(context) + File.separator + DATABASE_NAME; + String apkPath = context.getPackageCodePath(); + mDefaultFileSourcePtr = sharedDefaultFileSource(cachePath, apkPath); setAccessToken(mDefaultFileSourcePtr, Mapbox.getAccessToken()); // Delete any existing previous ambient cache database @@ -284,8 +277,8 @@ public class OfflineManager { /* * Native methods */ - private native long createDefaultFileSource( - String cachePath, String assetRoot, long maximumCacheSize); + private native long sharedDefaultFileSource( + String cachePath, String assetRoot); private native void setAccessToken(long defaultFileSourcePtr, String accessToken); diff --git a/platform/android/config.cmake b/platform/android/config.cmake index 635c27a44f..1b47e07746 100644 --- a/platform/android/config.cmake +++ b/platform/android/config.cmake @@ -64,6 +64,8 @@ macro(mbgl_platform_core) PRIVATE platform/default/default_file_source.cpp PRIVATE platform/default/local_file_source.cpp PRIVATE platform/default/online_file_source.cpp + PRIVATE platform/android/src/default_file_source.cpp + PRIVATE platform/android/src/default_file_source.hpp # Offline # PRIVATE include/mbgl/storage/offline.hpp diff --git a/platform/android/src/default_file_source.cpp b/platform/android/src/default_file_source.cpp new file mode 100644 index 0000000000..4d6924b496 --- /dev/null +++ b/platform/android/src/default_file_source.cpp @@ -0,0 +1,20 @@ +#include "default_file_source.hpp" +#include <mbgl/util/logging.hpp> + +#include <cassert> + +namespace mbgl { +namespace android { + +DefaultFileSource& defaultFileSource(const std::string& cachePath_, const std::string& assetRoot_) { + static auto cachePath = cachePath_; + assert(cachePath == cachePath_); + static auto assetRoot = assetRoot_; + assert(assetRoot == assetRoot_); + + static DefaultFileSource defaultFileSource{ cachePath, assetRoot }; + return defaultFileSource; +} + +} // namespace android +} // namespace mbgl diff --git a/platform/android/src/default_file_source.hpp b/platform/android/src/default_file_source.hpp new file mode 100644 index 0000000000..e0cc28583c --- /dev/null +++ b/platform/android/src/default_file_source.hpp @@ -0,0 +1,12 @@ +#pragma once + +#include <mbgl/storage/default_file_source.hpp> + +namespace mbgl { +namespace android { + +DefaultFileSource& defaultFileSource(const std::string& cachePath = ":memory:", + const std::string& assetRoot = "."); + +} // namespace android +} // namespace mbgl diff --git a/platform/android/src/jni.cpp b/platform/android/src/jni.cpp index 5182e268f3..54bf092539 100755 --- a/platform/android/src/jni.cpp +++ b/platform/android/src/jni.cpp @@ -12,6 +12,7 @@ #include "java_types.hpp" #include "native_map_view.hpp" #include "connectivity_listener.hpp" +#include "default_file_source.hpp" #include "style/layers/layers.hpp" #include "style/sources/sources.hpp" @@ -1233,12 +1234,9 @@ void nativeScheduleTakeSnapshot(JNIEnv *env, jni::jobject* obj, jlong nativeMapV // Offline calls begin -jlong createDefaultFileSource(JNIEnv *env, jni::jobject* obj, jni::jstring* cachePath_, jni::jstring* assetRoot_, jlong maximumCacheSize) { - std::string cachePath = std_string_from_jstring(env, cachePath_); - std::string assetRoot = std_string_from_jstring(env, assetRoot_); - mbgl::DefaultFileSource *defaultFileSource = new mbgl::DefaultFileSource(cachePath, assetRoot, maximumCacheSize); - jlong defaultFileSourcePtr = reinterpret_cast<jlong>(defaultFileSource); - return defaultFileSourcePtr; +jlong sharedDefaultFileSource(JNIEnv *env, jni::jobject* obj, jni::jstring* cachePath_, jni::jstring* assetRoot_) { + return reinterpret_cast<jlong>(&defaultFileSource(std_string_from_jstring(env, cachePath_), + std_string_from_jstring(env, assetRoot_))); } void setAccessToken(JNIEnv *env, jni::jobject* obj, jlong defaultFileSourcePtr, jni::jstring* accessToken_) { @@ -1915,7 +1913,7 @@ void registerNatives(JavaVM *vm) { offlineManagerClassPtrId = &jni::GetFieldID(env, offlineManagerClass, "mDefaultFileSourcePtr", "J"); jni::RegisterNatives(env, offlineManagerClass, - MAKE_NATIVE_METHOD(createDefaultFileSource, "(Ljava/lang/String;Ljava/lang/String;J)J"), + MAKE_NATIVE_METHOD(sharedDefaultFileSource, "(Ljava/lang/String;Ljava/lang/String;)J"), MAKE_NATIVE_METHOD(setAccessToken, "(JLjava/lang/String;)V"), MAKE_NATIVE_METHOD(getAccessToken, "(J)Ljava/lang/String;"), MAKE_NATIVE_METHOD(listOfflineRegions, "(JLcom/mapbox/mapboxsdk/offline/OfflineManager$ListOfflineRegionsCallback;)V"), diff --git a/platform/android/src/native_map_view.cpp b/platform/android/src/native_map_view.cpp index 8234b74af2..92d569367b 100755 --- a/platform/android/src/native_map_view.cpp +++ b/platform/android/src/native_map_view.cpp @@ -1,5 +1,6 @@ #include "native_map_view.hpp" #include "jni.hpp" +#include "default_file_source.hpp" #include <cstdlib> #include <ctime> @@ -41,6 +42,7 @@ NativeMapView::NativeMapView(JNIEnv *env_, jobject obj_, float pixelRatio, int a : env(env_), availableProcessors(availableProcessors_), totalMemory(totalMemory_), + fileSource(defaultFileSource(mbgl::android::cachePath + "/mbgl-offline.db", mbgl::android::apkPath)), threadPool(4) { mbgl::Log::Debug(mbgl::Event::Android, "NativeMapView::NativeMapView"); @@ -58,13 +60,9 @@ NativeMapView::NativeMapView(JNIEnv *env_, jobject obj_, float pixelRatio, int a return; } - fileSource = std::make_unique<mbgl::DefaultFileSource>( - mbgl::android::cachePath + "/mbgl-offline.db", - mbgl::android::apkPath); - map = std::make_unique<mbgl::Map>( *this, mbgl::Size{ static_cast<uint32_t>(width), static_cast<uint32_t>(height) }, - pixelRatio, *fileSource, threadPool, MapMode::Continuous); + pixelRatio, fileSource, threadPool, MapMode::Continuous); float zoomFactor = map->getMaxZoom() - map->getMinZoom() + 1; float cpuFactor = availableProcessors; @@ -87,7 +85,6 @@ NativeMapView::~NativeMapView() { assert(obj != nullptr); map.reset(); - fileSource.reset(); env->DeleteWeakGlobalRef(obj); @@ -218,7 +215,9 @@ void NativeMapView::render() { mbgl::Map &NativeMapView::getMap() { return *map; } -mbgl::DefaultFileSource &NativeMapView::getFileSource() { return *fileSource; } +mbgl::DefaultFileSource& NativeMapView::getFileSource() { + return fileSource; +} void NativeMapView::initializeDisplay() { mbgl::Log::Debug(mbgl::Event::Android, "NativeMapView::initializeDisplay"); diff --git a/platform/android/src/native_map_view.hpp b/platform/android/src/native_map_view.hpp index e7379700a9..42c8a9f40c 100755 --- a/platform/android/src/native_map_view.hpp +++ b/platform/android/src/native_map_view.hpp @@ -96,7 +96,7 @@ private: size_t totalMemory = 0; // Ensure these are initialised last - std::unique_ptr<mbgl::DefaultFileSource> fileSource; + mbgl::DefaultFileSource& fileSource; mbgl::ThreadPool threadPool; std::unique_ptr<mbgl::Map> map; mbgl::EdgeInsets insets; |