diff options
author | Tobrun <tobrun.van.nuland@gmail.com> | 2018-12-12 10:25:15 +0100 |
---|---|---|
committer | Tobrun <tobrun@mapbox.com> | 2018-12-13 19:08:12 +0100 |
commit | e94a7fc40551d4673fd885cbcad1c41706af26b0 (patch) | |
tree | 33300e357472c1b2e1ad3ba06f5e7428d78270ab /platform | |
parent | b6b1067caf6ba911efbb4a64a43425ce2d729a1a (diff) | |
download | qtlocation-mapboxgl-e94a7fc40551d4673fd885cbcad1c41706af26b0.tar.gz |
[android] - validate if weakreference is still valid
Diffstat (limited to 'platform')
-rwxr-xr-x | platform/android/src/native_map_view.cpp | 63 |
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 // |