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; }
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 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; }
static bool fs_apk_open_directory(ALLEGRO_FS_ENTRY *fse) { ALLEGRO_FS_ENTRY_APK *e = (ALLEGRO_FS_ENTRY_APK *)fse; JNIEnv *jnienv; jnienv = _al_android_get_jnienv(); jstring jpath = (*jnienv)->NewStringUTF(jnienv, e->path_cstr); jstring js = _jni_callStaticObjectMethodV(jnienv, _al_android_apk_fs_class(), "list", "(L" ALLEGRO_ANDROID_PACKAGE_NAME_SLASH "/AllegroActivity;Ljava/lang/String;)Ljava/lang/String;", _al_android_activity_object(), jpath); const char *cs = _jni_call(jnienv, const char *, GetStringUTFChars, js, NULL); e->file_list = al_malloc(strlen(cs) + 1); strcpy(e->file_list, cs); e->file_list_pos = e->file_list; _jni_callv(jnienv, ReleaseStringUTFChars, js, cs); _jni_callv(jnienv, DeleteLocalRef, js); _jni_callv(jnienv, DeleteLocalRef, jpath); e->is_dir_open = true; return true; }