|
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