diff options
Diffstat (limited to 'platform/android/jni_utils.cpp')
-rw-r--r-- | platform/android/jni_utils.cpp | 22 |
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(".", "/") + ";"; } |