Skip to content

Commit 99f7ae1

Browse files
committed
added a jni.pxi by copy/paste from the jni.h + update android.pyx to pass cython! (not tested.)
1 parent a55403e commit 99f7ae1

File tree

2 files changed

+429
-16
lines changed

2 files changed

+429
-16
lines changed

recipes/android/src/android.pyx

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
# probably not enought
2-
cdef extern from "jni.h":
3-
JNIEnv *SDL_ANDROID_GetJNIEnv(void)
1+
include "jni.pxi"
42

53
# Android-specific python services.
64

@@ -254,27 +252,43 @@ webbrowser.register('android', AndroidBrowser, None, -1)
254252
# -------------------------------------------------------------------
255253
# Bluetooth
256254
cdef class Bluetooth(object):
257-
cdef JNIEnv *j_env = SDL_ANDROID_GetJNIEnv()
258-
cdef jclass *j_class = *j_env->FindClass(j_env,
255+
256+
cdef JNIEnv *j_env
257+
cdef jclass j_class
258+
cdef jobject j_self
259+
260+
def __cinit__(self):
261+
self.j_env = SDL_ANDROID_GetJNIEnv()
262+
self.j_class = self.j_env.FindClass(self.j_env,
259263
"org/renpy/android/BluetoothConnection")
260264

261-
cdef __init__(self):
262-
constructor = j_env->GetMethod(j_env, j_class, "<init>", "(C)V")
263-
self._jself = j_env->NewObject(j_env, j_class, constructor)
265+
def __init__(self):
266+
# XXX was GetMethod, but it's not existing in the jni.h?
267+
cdef jmethodID constructor = self.j_env.GetMethodID(self.j_env, self.j_class, "<init>", "(C)V")
268+
self.j_self = self.j_env.NewObject(self.j_env, self.j_class, constructor)
264269

265-
cdef void setUUID(self, uuid):
266-
j_method = j_env->GetMethod(j_env, j_class,
270+
cdef void setUUID(self, bytes uuid):
271+
cdef jmethodID j_method = self.j_env.GetMethodID(self.j_env, self.j_class,
267272
"setUUID",
268273
"(Ljava/lang/String;)V")
269274

270-
j_env->CallVoidMethod(
271-
j_env, j_class, self._jself, j_method,
272-
j_env->NewStringUTF(uuid))
275+
self.j_env.CallVoidMethod(
276+
self.j_env, self.j_class, self.j_self, j_method,
277+
self.j_env.NewStringUTF(self.j_env, <const_char *><char *>uuid))
273278

274279
cdef getUUID(self):
275-
j_method = j_env->GetMethod(j_env, j_class,
280+
cdef jmethodID j_method = self.j_env.GetMethodID(self.j_env, self.j_class,
276281
"getUUID",
277282
"()Ljava/lang/String;")
278283

279-
return j_env->GetStringUTFChars(j_env->CallStringMethod(
280-
j_env, j_class, self._jself, j_method))
284+
# CallStringMethod doesn't exist... but CallByteMethod ? Object ? Char ?
285+
#return self.j_env.GetStringUTFChars(self.j_env.CallStringMethod(
286+
# self.j_env, self.j_class, self.j_self, j_method))
287+
cdef jstring result = <jstring>self.j_env.CallObjectMethod(
288+
self.j_env, self.j_class, self.j_self, j_method)
289+
cdef const_char *uuid_str = self.j_env.GetStringUTFChars(self.j_env, result, NULL)
290+
291+
# memleak!!!!!! maybe even memory corruption, depending if the
292+
# GetStringUTFChars is returning a full copy, or just a ref.
293+
return <bytes><char *>uuid_str
294+

0 commit comments

Comments
 (0)