summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2017-02-17 15:17:21 +0100
committerJohn Firebaugh <john.firebaugh@gmail.com>2017-02-21 10:48:57 -0800
commit7f315ef5e6d38a99c990eb5b745f34505f3a0edd (patch)
treecc8fd26df6940df9defbde48387ad835b22a8127
parenta7c9b01f3c6bacbcc20ab83f3efea62018952762 (diff)
downloadqtlocation-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.java17
-rw-r--r--platform/android/config.cmake2
-rw-r--r--platform/android/src/default_file_source.cpp20
-rw-r--r--platform/android/src/default_file_source.hpp12
-rwxr-xr-xplatform/android/src/jni.cpp12
-rwxr-xr-xplatform/android/src/native_map_view.cpp13
-rwxr-xr-xplatform/android/src/native_map_view.hpp2
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;