summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortobrun <tobrun.van.nuland@gmail.com>2017-11-24 11:54:54 +0100
committerTobrun <tobrun.van.nuland@gmail.com>2017-12-06 09:35:48 +0100
commit00795d7458a1c0dd50780bfcd92dfce7f984c1f8 (patch)
treee7e0ad3f2d5407151e2fae3fb2b4b9ef8bd00e4f
parent8f3cc3dbc4fb0f46f0e2eb00d0b644063c43a582 (diff)
downloadqtlocation-mapboxgl-upstream/tvn-filesource-activate-deactivate.tar.gz
[android] - add FileSource activation/deactivation to MapSnapshotter, handle multiple deactivate scenario in FileSourceupstream/tvn-filesource-activate-deactivate
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java24
-rw-r--r--platform/android/src/file_source.cpp19
-rw-r--r--platform/android/src/file_source.hpp1
-rw-r--r--platform/android/src/snapshotter/map_snapshotter.cpp33
-rw-r--r--platform/android/src/snapshotter/map_snapshotter.hpp5
5 files changed, 49 insertions, 33 deletions
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 41dc449b50..f0cb8d973a 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
@@ -6,10 +6,8 @@ import android.content.pm.PackageManager;
import android.content.res.AssetManager;
import android.os.Environment;
import android.support.annotation.NonNull;
-
import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.constants.MapboxConstants;
-
import timber.log.Timber;
/**
@@ -119,28 +117,14 @@ public class FileSource {
}
private long nativePtr;
- private long activeCounter;
- private boolean wasPaused;
private FileSource(String cachePath, AssetManager assetManager) {
initialize(Mapbox.getAccessToken(), cachePath, assetManager);
}
- public void activate() {
- activeCounter++;
- if (activeCounter == 1 && wasPaused) {
- wasPaused = false;
- resume();
- }
- }
+ public native void activate();
- public void deactivate() {
- activeCounter--;
- if (activeCounter == 0) {
- wasPaused = true;
- pause();
- }
- }
+ public native void deactivate();
public native void setAccessToken(@NonNull String accessToken);
@@ -148,10 +132,6 @@ public class FileSource {
public native void setApiBaseUrl(String baseUrl);
- private native void resume();
-
- private native void pause();
-
/**
* Sets a callback for transforming URLs requested from the internet
* <p>
diff --git a/platform/android/src/file_source.cpp b/platform/android/src/file_source.cpp
index a576661a4f..6a9d7badb0 100644
--- a/platform/android/src/file_source.cpp
+++ b/platform/android/src/file_source.cpp
@@ -63,11 +63,22 @@ void FileSource::setResourceTransform(jni::JNIEnv& env, jni::Object<FileSource::
}
void FileSource::resume(jni::JNIEnv&) {
- fileSource->resume();
+ if (!activationCounter) {
+ activationCounter = optional<int>(1) ;
+ return;
+ }
+
+ activationCounter.value()++;
+ if (activationCounter == 1) {
+ fileSource->resume();
+ }
}
void FileSource::pause(jni::JNIEnv&) {
- fileSource->pause();
+ activationCounter.value()--;
+ if (activationCounter == 0) {
+ fileSource->pause();
+ }
}
jni::Class<FileSource> FileSource::javaClass;
@@ -100,8 +111,8 @@ void FileSource::registerNative(jni::JNIEnv& env) {
METHOD(&FileSource::setAccessToken, "setAccessToken"),
METHOD(&FileSource::setAPIBaseUrl, "setApiBaseUrl"),
METHOD(&FileSource::setResourceTransform, "setResourceTransform"),
- METHOD(&FileSource::resume, "resume"),
- METHOD(&FileSource::pause, "pause")
+ METHOD(&FileSource::resume, "activate"),
+ METHOD(&FileSource::pause, "deactivate")
);
}
diff --git a/platform/android/src/file_source.hpp b/platform/android/src/file_source.hpp
index 2933aedf86..194f784622 100644
--- a/platform/android/src/file_source.hpp
+++ b/platform/android/src/file_source.hpp
@@ -54,6 +54,7 @@ public:
static void registerNative(jni::JNIEnv&);
private:
+ optional<int> activationCounter;
std::unique_ptr<Actor<ResourceTransform>> resourceTransform;
std::unique_ptr<mbgl::DefaultFileSource> fileSource;
};
diff --git a/platform/android/src/snapshotter/map_snapshotter.cpp b/platform/android/src/snapshotter/map_snapshotter.cpp
index 637eb5c1fd..71f8b4f4c0 100644
--- a/platform/android/src/snapshotter/map_snapshotter.cpp
+++ b/platform/android/src/snapshotter/map_snapshotter.cpp
@@ -15,7 +15,7 @@ namespace android {
MapSnapshotter::MapSnapshotter(jni::JNIEnv& _env,
jni::Object<MapSnapshotter> _obj,
- jni::Object<FileSource> jFileSource,
+ jni::Object<FileSource> _jFileSource,
jni::jfloat _pixelRatio,
jni::jint width,
jni::jint height,
@@ -34,16 +34,16 @@ MapSnapshotter::MapSnapshotter(jni::JNIEnv& _env,
return;
}
- auto& fileSource = mbgl::android::FileSource::getDefaultFileSource(_env, jFileSource);
+ jFileSource = FileSource::getNativePeer(_env, _jFileSource);
+ auto& fileSource = mbgl::android::FileSource::getDefaultFileSource(_env, _jFileSource);
auto size = mbgl::Size { static_cast<uint32_t>(width), static_cast<uint32_t>(height) };
auto cameraOptions = position ? CameraPosition::getCameraOptions(_env, position) : CameraOptions();
optional<mbgl::LatLngBounds> bounds;
if (region) {
bounds = LatLngBounds::getLatLngBounds(_env, region);
}
-
+
showLogo = _showLogo;
-
// Create the core snapshotter
snapshotter = std::make_unique<mbgl::MapSnapshotter>(fileSource,
*threadPool,
@@ -58,8 +58,9 @@ MapSnapshotter::MapSnapshotter(jni::JNIEnv& _env,
MapSnapshotter::~MapSnapshotter() = default;
-void MapSnapshotter::start(JNIEnv&) {
+void MapSnapshotter::start(JNIEnv& env) {
MBGL_VERIFY_THREAD(tid);
+ activateFilesource(env);
snapshotCallback = std::make_unique<Actor<mbgl::MapSnapshotter::Callback>>(
*Scheduler::GetCurrent(),
@@ -79,17 +80,19 @@ void MapSnapshotter::start(JNIEnv&) {
static auto onSnapshotReady = javaClass.GetMethod<void (jni::Object<MapSnapshot>)>(*_env, "onSnapshotReady");
javaPeer->Call(*_env, onSnapshotReady, mapSnapshot);
}
+
+ deactivateFilesource(*_env);
});
snapshotter->snapshot(snapshotCallback->self());
}
-void MapSnapshotter::cancel(JNIEnv&) {
+void MapSnapshotter::cancel(JNIEnv& env) {
MBGL_VERIFY_THREAD(tid);
snapshotCallback.reset();
+ deactivateFilesource(env);
}
-
void MapSnapshotter::setStyleUrl(JNIEnv& env, jni::String styleURL) {
snapshotter->setStyleURL(jni::Make<std::string>(env, styleURL));
}
@@ -108,6 +111,22 @@ void MapSnapshotter::setRegion(JNIEnv& env, jni::Object<LatLngBounds> region) {
snapshotter->setRegion(LatLngBounds::getLatLngBounds(env, region));
}
+// Private methods //
+
+void MapSnapshotter::activateFilesource(JNIEnv& env) {
+ if (!activatedFilesource) {
+ activatedFilesource = true;
+ jFileSource->resume(env);
+ }
+}
+
+void MapSnapshotter::deactivateFilesource(JNIEnv& env) {
+ if (activatedFilesource) {
+ activatedFilesource = false;
+ jFileSource->pause(env);
+ }
+}
+
// Static methods //
jni::Class<MapSnapshotter> MapSnapshotter::javaClass;
diff --git a/platform/android/src/snapshotter/map_snapshotter.hpp b/platform/android/src/snapshotter/map_snapshotter.hpp
index 8cd85060bf..4cdf4bcf2b 100644
--- a/platform/android/src/snapshotter/map_snapshotter.hpp
+++ b/platform/android/src/snapshotter/map_snapshotter.hpp
@@ -65,6 +65,11 @@ private:
std::shared_ptr<mbgl::ThreadPool> threadPool;
std::unique_ptr<Actor<mbgl::MapSnapshotter::Callback>> snapshotCallback;
std::unique_ptr<mbgl::MapSnapshotter> snapshotter;
+
+ FileSource *jFileSource;
+ void activateFilesource(JNIEnv&);
+ void deactivateFilesource(JNIEnv&);
+ bool activatedFilesource = false;
};
} // namespace android