summaryrefslogtreecommitdiffstats
path: root/platform/android/jni_utils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/jni_utils.cpp')
-rw-r--r--platform/android/jni_utils.cpp22
1 files changed, 18 insertions, 4 deletions
diff --git a/platform/android/jni_utils.cpp b/platform/android/jni_utils.cpp
index fc97d6eca4..4c17d03c60 100644
--- a/platform/android/jni_utils.cpp
+++ b/platform/android/jni_utils.cpp
@@ -30,6 +30,8 @@
#include "jni_utils.h"
+#include "api/java_class_wrapper.h"
+
jvalret _variant_to_jvalue(JNIEnv *env, Variant::Type p_type, const Variant *p_arg, bool force_jobject) {
jvalret v;
@@ -185,6 +187,16 @@ jvalret _variant_to_jvalue(JNIEnv *env, Variant::Type p_type, const Variant *p_a
v.obj = arr;
} break;
+ case Variant::OBJECT: {
+ Ref<JavaObject> generic_object = *p_arg;
+ if (generic_object.is_valid()) {
+ jobject obj = env->NewLocalRef(generic_object->get_instance());
+ v.val.l = obj;
+ v.obj = obj;
+ } else {
+ v.val.i = 0;
+ }
+ } break;
default: {
v.val.i = 0;
@@ -358,9 +370,11 @@ Variant _jobject_to_variant(JNIEnv *env, jobject obj) {
return ret;
}
+ Ref<JavaObject> generic_object(memnew(JavaObject(JavaClassWrapper::get_singleton()->wrap(name), obj)));
+
env->DeleteLocalRef(c);
- return Variant();
+ return generic_object;
}
Variant::Type get_jni_type(const String &p_type) {
@@ -395,10 +409,10 @@ Variant::Type get_jni_type(const String &p_type) {
idx++;
}
- return Variant::NIL;
+ return Variant::OBJECT;
}
-const char *get_jni_sig(const String &p_type) {
+String get_jni_sig(const String &p_type) {
static struct {
const char *name;
const char *sig;
@@ -430,5 +444,5 @@ const char *get_jni_sig(const String &p_type) {
idx++;
}
- return "Ljava/lang/Object;";
+ return "L" + p_type.replace(".", "/") + ";";
}