static jobject _jni_callObjectMethod(JNIEnv *env, jobject object, const char *name, const char *sig) { jclass class_id = _jni_call(env, jclass, GetObjectClass, object); jmethodID method_id = _jni_call(env, jmethodID, GetMethodID, class_id, name, sig); jobject ret = _jni_call(env, jobject, CallObjectMethod, object, method_id); _jni_callv(env, DeleteLocalRef, class_id); return ret; }
bool isAndroidConsole() { #if defined OUYA return true; #endif static bool first = true; static bool is_console; if (!first) { return is_console; } first = false; is_console = false; JNIEnv *env = _al_android_get_jnienv(); jobject object = _al_android_activity_object(); jclass class_id = _jni_call(env, jclass, GetObjectClass, object); jmethodID method_id = _jni_call(env, jmethodID, GetMethodID, class_id, "getModel", "()Ljava/lang/String;"); jstring s = (jstring)_jni_call(env, jobject, CallObjectMethod, object, method_id); if (s == NULL) return false; const char *native = _al_android_get_jnienv()->GetStringUTFChars(s, 0); if (strstr(native, "OUYA")) { is_console = true; } else if (!strncmp(native, "AFTB", 4) || !strncmp(native, "AFTM", 4)) { jmethodID method_id2 = _jni_call(env, jmethodID, GetMethodID, class_id, "getManufacturer", "()Ljava/lang/String;"); jstring s2 = (jstring)_jni_call(env, jobject, CallObjectMethod, object, method_id2); const char *native2 = _al_android_get_jnienv()->GetStringUTFChars(s2, 0); if (!strcmp(native2, "Amazon")) { is_console = true; } _al_android_get_jnienv()->ReleaseStringUTFChars(s2, native2); _jni_callv(env, DeleteLocalRef, s2); } _al_android_get_jnienv()->ReleaseStringUTFChars(s, native); _jni_callv(env, DeleteLocalRef, s); _jni_callv(env, DeleteLocalRef, class_id); return is_console; }
static bool android_set_clipboard_text(ALLEGRO_DISPLAY *display, const char *text) { JNIEnv * env = (JNIEnv *)_al_android_get_jnienv(); jstring jtext= _jni_call(env, jstring, NewStringUTF, text); (void) display; return _jni_callBooleanMethodV(env, _al_android_activity_object(), "setClipboardText", "(Ljava/lang/String;)Z", jtext); }
static char *android_get_clipboard_text(ALLEGRO_DISPLAY *display) { JNIEnv * env = (JNIEnv *)_al_android_get_jnienv(); jobject jtext = _jni_callObjectMethod(env, _al_android_activity_object(), "getClipboardText", "()Ljava/lang/String;"); jsize len = _jni_call(env, jsize, GetStringUTFLength, jtext); const char *str = _jni_call(env, const char *, GetStringUTFChars, jtext, NULL); char * text = al_malloc(len+1); (void) display; text = _al_sane_strncpy(text, str, len); _jni_callv(env, ReleaseStringUTFChars, jtext, str); _jni_callv(env, DeleteLocalRef, jtext); return text; }