|
1 |
| -# probably not enought |
2 |
| -cdef extern from "jni.h": |
3 |
| - JNIEnv *SDL_ANDROID_GetJNIEnv(void) |
| 1 | +include "jni.pxi" |
4 | 2 |
|
5 | 3 | # Android-specific python services.
|
6 | 4 |
|
@@ -254,27 +252,43 @@ webbrowser.register('android', AndroidBrowser, None, -1)
|
254 | 252 | # -------------------------------------------------------------------
|
255 | 253 | # Bluetooth
|
256 | 254 | 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, |
259 | 263 | "org/renpy/android/BluetoothConnection")
|
260 | 264 |
|
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) |
264 | 269 |
|
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, |
267 | 272 | "setUUID",
|
268 | 273 | "(Ljava/lang/String;)V")
|
269 | 274 |
|
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)) |
273 | 278 |
|
274 | 279 | 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, |
276 | 281 | "getUUID",
|
277 | 282 | "()Ljava/lang/String;")
|
278 | 283 |
|
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