const char * get_sdcarddir() { static char buf[2000]; jstring s = (jstring)_jni_callObjectMethod( _al_android_get_jnienv(), _al_android_activity_object(), "getSDCardPrivateDir", "()Ljava/lang/String;" ); if (s == NULL) return ""; const char *native = _al_android_get_jnienv()->GetStringUTFChars(s, 0); strcpy(buf, native); _al_android_get_jnienv()->ReleaseStringUTFChars(s, native); _al_android_get_jnienv()->DeleteLocalRef(s); return buf; }
void logString(const char *s) { jstring S = _al_android_get_jnienv()->NewStringUTF(s); _jni_callVoidMethodV( _al_android_get_jnienv(), _al_android_activity_object(), "logString", "(Ljava/lang/String;)V", S ); _al_android_get_jnienv()->DeleteLocalRef(S); }
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_has_clipboard_text(ALLEGRO_DISPLAY *display) { JNIEnv * env = (JNIEnv *)_al_android_get_jnienv(); (void) display; return _jni_callBooleanMethodV(env, _al_android_activity_object(), "hasClipboardText", "()Z"); }
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); }
void doIAP() { _jni_callVoidMethodV( _al_android_get_jnienv(), _al_android_activity_object(), "doIAP", "()V" ); }
void queryPurchased() { _jni_callVoidMethodV( _al_android_get_jnienv(), _al_android_activity_object(), "queryPurchased", "()V" ); }
int isPurchased() { int ret = _jni_callIntMethod( _al_android_get_jnienv(), _al_android_activity_object(), "isPurchased" ); return ret; }
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; }
/* NOTE: don't put any ALLEGRO_DEBUG in here! */ static void android_cleanup(bool uninstall_system) { if (already_cleaned_up) { return; } if (uninstall_system) { /* I don't think android calls our atexit() stuff since we're in a shared lib so make sure al_uninstall_system is called */ al_uninstall_system(); } finish_activity(_al_android_get_jnienv()); (*javavm)->DetachCurrentThread(javavm); already_cleaned_up = true; }
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; }