summaryrefslogtreecommitdiff
path: root/touch
diff options
context:
space:
mode:
Diffstat (limited to 'touch')
-rw-r--r--touch/Library_libotouch.mk4
-rw-r--r--touch/source/android/android.cxx34
2 files changed, 38 insertions, 0 deletions
diff --git a/touch/Library_libotouch.mk b/touch/Library_libotouch.mk
index 1e06db466583..17d1f4529084 100644
--- a/touch/Library_libotouch.mk
+++ b/touch/Library_libotouch.mk
@@ -33,6 +33,10 @@ $(eval $(call gb_Library_add_exception_objects,libotouch,\
ifeq ($(OS),ANDROID)
+$(eval $(call gb_Library_use_libraries,libotouch,\
+ lo-bootstrap \
+))
+
$(eval $(call gb_Library_add_exception_objects,libotouch,\
touch/source/android/android \
))
diff --git a/touch/source/android/android.cxx b/touch/source/android/android.cxx
index 06768c86c646..3a116b18e643 100644
--- a/touch/source/android/android.cxx
+++ b/touch/source/android/android.cxx
@@ -10,9 +10,43 @@
#include <jni.h>
#include <sal/ByteBufferWrapper.hxx>
+#include <osl/detail/android-bootstrap.h>
using org::libreoffice::touch::ByteBufferWrapper;
+static JNIEnv *get_env()
+{
+ JavaVMAttachArgs args = {
+ JNI_VERSION_1_2,
+ NULL,
+ NULL
+ };
+
+ JavaVM *jvm = lo_get_javavm();
+ JNIEnv *env = NULL;
+
+ jvm->AttachCurrentThread(&env, &args);
+ return env;
+}
+
+__attribute__ ((visibility("default")))
+ByteBufferWrapper::ByteBufferWrapper(JNIEnv *env, jobject o)
+{
+ object = env->NewGlobalRef(o);
+}
+
+__attribute__ ((visibility("default")))
+sal_uInt8* ByteBufferWrapper::pointer()
+{
+ return (sal_uInt8 *) get_env()->GetDirectBufferAddress(object);
+}
+
+__attribute__ ((visibility("default")))
+void ByteBufferWrapper::operator()(sal_uInt8 * /* p */)
+{
+ get_env()->DeleteGlobalRef(object);
+}
+
extern "C"
__attribute__ ((visibility("default")))
jlong