summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobrun <tobrun.van.nuland@gmail.com>2018-12-12 10:25:15 +0100
committerTobrun <tobrun@mapbox.com>2018-12-13 19:08:12 +0100
commite94a7fc40551d4673fd885cbcad1c41706af26b0 (patch)
tree33300e357472c1b2e1ad3ba06f5e7428d78270ab
parentb6b1067caf6ba911efbb4a64a43425ce2d729a1a (diff)
downloadqtlocation-mapboxgl-e94a7fc40551d4673fd885cbcad1c41706af26b0.tar.gz
[android] - validate if weakreference is still valid
-rwxr-xr-xplatform/android/src/native_map_view.cpp63
1 files changed, 51 insertions, 12 deletions
diff --git a/platform/android/src/native_map_view.cpp b/platform/android/src/native_map_view.cpp
index 5b23076441..872022c8e4 100755
--- a/platform/android/src/native_map_view.cpp
+++ b/platform/android/src/native_map_view.cpp
@@ -101,16 +101,23 @@ void NativeMapView::onCameraWillChange(MapObserver::CameraChangeMode mode) {
android::UniqueEnv _env = android::AttachEnv();
static auto& javaClass = jni::Class<NativeMapView>::Singleton(*_env);
static auto onCameraWillChange = javaClass.GetMethod<void (jboolean)>(*_env, "onCameraWillChange");
- javaPeer.get(*_env).Call(*_env, onCameraWillChange, (jboolean) (mode != MapObserver::CameraChangeMode::Immediate));
+ auto weakReference = javaPeer.get(*_env);
+ if (weakReference) {
+ weakReference.Call(*_env, onCameraWillChange, (jboolean) (mode != MapObserver::CameraChangeMode::Immediate));
+ }
}
+
void NativeMapView::onCameraIsChanging() {
assert(vm != nullptr);
android::UniqueEnv _env = android::AttachEnv();
static auto& javaClass = jni::Class<NativeMapView>::Singleton(*_env);
static auto onCameraIsChanging = javaClass.GetMethod<void ()>(*_env, "onCameraIsChanging");
- javaPeer.get(*_env).Call(*_env, onCameraIsChanging);
+ auto weakReference = javaPeer.get(*_env);
+ if (weakReference) {
+ weakReference.Call(*_env, onCameraIsChanging);
+ }
}
void NativeMapView::onCameraDidChange(MapObserver::CameraChangeMode mode) {
@@ -119,7 +126,11 @@ void NativeMapView::onCameraDidChange(MapObserver::CameraChangeMode mode) {
android::UniqueEnv _env = android::AttachEnv();
static auto& javaClass = jni::Class<NativeMapView>::Singleton(*_env);
static auto onCameraDidChange = javaClass.GetMethod<void (jboolean)>(*_env, "onCameraDidChange");
- javaPeer.get(*_env).Call(*_env, onCameraDidChange, (jboolean) (mode != MapObserver::CameraChangeMode::Immediate));
+ auto weakReference = javaPeer.get(*_env);
+ if (weakReference) {
+ weakReference.Call(*_env, onCameraDidChange,
+ (jboolean) (mode != MapObserver::CameraChangeMode::Immediate));
+ }
}
void NativeMapView::onWillStartLoadingMap() {
@@ -128,7 +139,10 @@ void NativeMapView::onWillStartLoadingMap() {
android::UniqueEnv _env = android::AttachEnv();
static auto& javaClass = jni::Class<NativeMapView>::Singleton(*_env);
static auto onWillStartLoadingMap = javaClass.GetMethod<void ()>(*_env, "onWillStartLoadingMap");
- javaPeer.get(*_env).Call(*_env, onWillStartLoadingMap);
+ auto weakReference = javaPeer.get(*_env);
+ if (weakReference) {
+ weakReference.Call(*_env, onWillStartLoadingMap);
+ }
}
void NativeMapView::onDidFinishLoadingMap() {
@@ -137,7 +151,11 @@ void NativeMapView::onDidFinishLoadingMap() {
android::UniqueEnv _env = android::AttachEnv();
static auto& javaClass = jni::Class<NativeMapView>::Singleton(*_env);
static auto onDidFinishLoadingMap = javaClass.GetMethod<void ()>(*_env, "onDidFinishLoadingMap");
- javaPeer.get(*_env).Call(*_env, onDidFinishLoadingMap);}
+ auto weakReference = javaPeer.get(*_env);
+ if (weakReference) {
+ weakReference.Call(*_env, onDidFinishLoadingMap);
+ }
+}
void NativeMapView::onDidFailLoadingMap(std::exception_ptr exceptionPtr) {
assert(vm != nullptr);
@@ -146,7 +164,10 @@ void NativeMapView::onDidFailLoadingMap(std::exception_ptr exceptionPtr) {
static auto& javaClass = jni::Class<NativeMapView>::Singleton(*_env);
static auto onDidFailLoadingMap = javaClass.GetMethod<void (jni::String)>(*_env, "onDidFailLoadingMap");
std::string error = mbgl::util::toString(exceptionPtr);
- javaPeer.get(*_env).Call(*_env, onDidFailLoadingMap, jni::Make<jni::String>(*_env, error));
+ auto weakReference = javaPeer.get(*_env);
+ if (weakReference) {
+ weakReference.Call(*_env, onDidFailLoadingMap, jni::Make<jni::String>(*_env, error));
+ }
}
void NativeMapView::onWillStartRenderingFrame() {
@@ -155,7 +176,10 @@ void NativeMapView::onWillStartRenderingFrame() {
android::UniqueEnv _env = android::AttachEnv();
static auto& javaClass = jni::Class<NativeMapView>::Singleton(*_env);
static auto onWillStartRenderingFrame = javaClass.GetMethod<void ()>(*_env, "onWillStartRenderingFrame");
- javaPeer.get(*_env).Call(*_env, onWillStartRenderingFrame);
+ auto weakReference = javaPeer.get(*_env);
+ if (weakReference) {
+ weakReference.Call(*_env, onWillStartRenderingFrame);
+ }
}
void NativeMapView::onDidFinishRenderingFrame(MapObserver::RenderMode mode) {
@@ -164,7 +188,10 @@ void NativeMapView::onDidFinishRenderingFrame(MapObserver::RenderMode mode) {
android::UniqueEnv _env = android::AttachEnv();
static auto& javaClass = jni::Class<NativeMapView>::Singleton(*_env);
static auto onDidFinishRenderingFrame = javaClass.GetMethod<void (jboolean)>(*_env, "onDidFinishRenderingFrame");
- javaPeer.get(*_env).Call(*_env, onDidFinishRenderingFrame, (jboolean) (mode != MapObserver::RenderMode::Partial));
+ auto weakReference = javaPeer.get(*_env);
+ if (weakReference) {
+ weakReference.Call(*_env, onDidFinishRenderingFrame, (jboolean) (mode != MapObserver::RenderMode::Partial));
+ }
}
@@ -174,7 +201,10 @@ void NativeMapView::onWillStartRenderingMap() {
android::UniqueEnv _env = android::AttachEnv();
static auto& javaClass = jni::Class<NativeMapView>::Singleton(*_env);
static auto onWillStartRenderingMap = javaClass.GetMethod<void ()>(*_env, "onWillStartRenderingMap");
- javaPeer.get(*_env).Call(*_env, onWillStartRenderingMap);
+ auto weakReference = javaPeer.get(*_env);
+ if (weakReference) {
+ weakReference.Call(*_env, onWillStartRenderingMap);
+ }
}
void NativeMapView::onDidFinishRenderingMap(MapObserver::RenderMode mode) {
@@ -183,7 +213,10 @@ void NativeMapView::onDidFinishRenderingMap(MapObserver::RenderMode mode) {
android::UniqueEnv _env = android::AttachEnv();
static auto& javaClass = jni::Class<NativeMapView>::Singleton(*_env);
static auto onDidFinishRenderingMap = javaClass.GetMethod<void (jboolean)>(*_env, "onDidFinishRenderingMap");
- javaPeer.get(*_env).Call(*_env, onDidFinishRenderingMap, (jboolean) (mode != MapObserver::RenderMode::Partial));
+ auto weakReference = javaPeer.get(*_env);
+ if (weakReference) {
+ weakReference.Call(*_env, onDidFinishRenderingMap, (jboolean) (mode != MapObserver::RenderMode::Partial));
+ }
}
void NativeMapView::onDidBecomeIdle() {
@@ -201,7 +234,10 @@ void NativeMapView::onDidFinishLoadingStyle() {
android::UniqueEnv _env = android::AttachEnv();
static auto& javaClass = jni::Class<NativeMapView>::Singleton(*_env);
static auto onDidFinishLoadingStyle = javaClass.GetMethod<void ()>(*_env, "onDidFinishLoadingStyle");
- javaPeer.get(*_env).Call(*_env, onDidFinishLoadingStyle);
+ auto weakReference = javaPeer.get(*_env);
+ if (weakReference) {
+ weakReference.Call(*_env, onDidFinishLoadingStyle);
+ }
}
void NativeMapView::onSourceChanged(mbgl::style::Source& source) {
@@ -211,7 +247,10 @@ void NativeMapView::onSourceChanged(mbgl::style::Source& source) {
static auto& javaClass = jni::Class<NativeMapView>::Singleton(*_env);
static auto onSourceChanged = javaClass.GetMethod<void (jni::String)>(*_env, "onSourceChanged");
auto sourceId = jni::Make<jni::String>(*_env, source.getID());
- javaPeer.get(*_env).Call(*_env, onSourceChanged, sourceId);
+ auto weakReference = javaPeer.get(*_env);
+ if (weakReference) {
+ weakReference.Call(*_env, onSourceChanged, sourceId);
+ }
}
// JNI Methods //