summaryrefslogtreecommitdiff
path: root/platform/android/src/jni
diff options
context:
space:
mode:
authorIvo van Dongen <info@ivovandongen.nl>2017-02-16 16:16:47 +0200
committerIvo van Dongen <ivovandongen@users.noreply.github.com>2017-02-24 17:54:20 +0200
commit465c949153a838bb3159204ab268eb551fbd2e6c (patch)
tree250922b879261580b1252a78b461218be9012bc0 /platform/android/src/jni
parent7d9018093a61d327fa7ca1312845d2a00d928380 (diff)
downloadqtlocation-mapboxgl-465c949153a838bb3159204ab268eb551fbd2e6c.tar.gz
[android] jni high level binding refactor
Diffstat (limited to 'platform/android/src/jni')
-rw-r--r--platform/android/src/jni/generic_global_ref_deleter.hpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/platform/android/src/jni/generic_global_ref_deleter.hpp b/platform/android/src/jni/generic_global_ref_deleter.hpp
new file mode 100644
index 0000000000..4e53e0a0ce
--- /dev/null
+++ b/platform/android/src/jni/generic_global_ref_deleter.hpp
@@ -0,0 +1,22 @@
+#pragma once
+
+#include <jni/jni.hpp>
+
+#include "../attach_env.hpp"
+
+namespace mbgl {
+namespace android {
+
+// A deleter that doesn't retain an JNIEnv handle but instead tries to attach the JVM. This means
+// it can be used on any thread to delete a global ref.
+struct GenericGlobalRefDeleter {
+ void operator()(jni::jobject* p) const {
+ if (p) {
+ auto env = AttachEnv();
+ env->DeleteGlobalRef(jni::Unwrap(p));
+ }
+ }
+};
+
+} // namespace android
+} // namespace mbgl