(Android) More changes to platform_android.c

This commit is contained in:
twinaphex 2014-06-02 09:24:06 +02:00
parent a55379c35b
commit d04f86814d
2 changed files with 52 additions and 26 deletions

View File

@ -75,7 +75,7 @@ void engine_handle_cmd(void *data)
slock_unlock(android_app->mutex); slock_unlock(android_app->mutex);
if (g_extern.lifecycle_state & (1ULL << RARCH_PAUSE_TOGGLE)) if (g_extern.lifecycle_state & (1ULL << RARCH_PAUSE_TOGGLE))
init_drivers(); rarch_reinit_drivers();
break; break;
case APP_CMD_RESUME: case APP_CMD_RESUME:
@ -98,7 +98,7 @@ void engine_handle_cmd(void *data)
scond_broadcast(android_app->cond); scond_broadcast(android_app->cond);
slock_unlock(android_app->mutex); slock_unlock(android_app->mutex);
if (!(g_extern.lifecycle_state & (1ULL << RARCH_QUIT_KEY))) if (!g_extern.system.shutdown)
{ {
RARCH_LOG("Pausing RetroArch.\n"); RARCH_LOG("Pausing RetroArch.\n");
g_extern.lifecycle_state |= (1ULL << RARCH_PAUSE_TOGGLE); g_extern.lifecycle_state |= (1ULL << RARCH_PAUSE_TOGGLE);
@ -146,7 +146,7 @@ void engine_handle_cmd(void *data)
break; break;
case APP_CMD_DESTROY: case APP_CMD_DESTROY:
g_extern.lifecycle_state |= (1ULL << RARCH_QUIT_KEY); g_extern.system.shutdown = true;
break; break;
} }
} }
@ -404,7 +404,7 @@ static bool android_run_events (void *data)
engine_handle_cmd(driver.input_data); engine_handle_cmd(driver.input_data);
// Check if we are exiting. // Check if we are exiting.
if (g_extern.lifecycle_state & (1ULL << RARCH_QUIT_KEY)) if (g_extern.system.shutdown)
return false; return false;
return true; return true;
@ -425,18 +425,8 @@ static void frontend_android_get_environment_settings(int *argc, char *argv[], v
return; return;
CALL_OBJ_METHOD(env, obj, android_app->activity->clazz, android_app->getIntent); CALL_OBJ_METHOD(env, obj, android_app->activity->clazz, android_app->getIntent);
RARCH_LOG("Checking arguments passed from intent...\n"); RARCH_LOG("Checking arguments passed from intent ...\n");
// Content
CALL_OBJ_METHOD_PARAM(env, jstr, obj, android_app->getStringExtra, (*env)->NewStringUTF(env, "ROM"));
if (android_app->getStringExtra && jstr)
{
const char *argv = (*env)->GetStringUTFChars(env, jstr, 0);
strlcpy(g_extern.fullpath, argv, sizeof(g_extern.fullpath));
(*env)->ReleaseStringUTFChars(env, jstr, argv);
RARCH_LOG("Content Filename: [%s].\n", g_extern.fullpath);
}
// Config file // Config file
CALL_OBJ_METHOD_PARAM(env, jstr, obj, android_app->getStringExtra, (*env)->NewStringUTF(env, "CONFIGFILE")); CALL_OBJ_METHOD_PARAM(env, jstr, obj, android_app->getStringExtra, (*env)->NewStringUTF(env, "CONFIGFILE"));
@ -476,10 +466,10 @@ static void frontend_android_get_environment_settings(int *argc, char *argv[], v
{ {
const char *argv = (*env)->GetStringUTFChars(env, jstr, 0); const char *argv = (*env)->GetStringUTFChars(env, jstr, 0);
strlcpy(default_paths.core_path, argv, sizeof(default_paths.core_path)); strlcpy(default_paths.core_path, argv, sizeof(default_paths.core_path));
RARCH_LOG("Libretro path: [%s].\n", default_paths.core_path);
(*env)->ReleaseStringUTFChars(env, jstr, argv); (*env)->ReleaseStringUTFChars(env, jstr, argv);
} }
RARCH_LOG("Libretro path: [%s].\n", default_paths.core_path);
} }
@ -502,7 +492,7 @@ static void process_pending_intent(void *data)
// ROM // ROM
jstr = (*env)->CallObjectMethod(env, android_app->activity->clazz, android_app->getPendingIntentFullPath); jstr = (*env)->CallObjectMethod(env, android_app->activity->clazz, android_app->getPendingIntentFullPath);
JNI_EXCEPTION(env); JNI_EXCEPTION(env);
RARCH_LOG("Checking arguments passed from intent...\n"); RARCH_LOG("Checking arguments passed from intent ...\n");
if (android_app->getPendingIntentFullPath && jstr) if (android_app->getPendingIntentFullPath && jstr)
{ {
const char *argv = (*env)->GetStringUTFChars(env, jstr, 0); const char *argv = (*env)->GetStringUTFChars(env, jstr, 0);
@ -551,7 +541,7 @@ static void process_pending_intent(void *data)
if (startgame) if (startgame)
{ {
RARCH_LOG("Starting new game %s...\n", g_extern.fullpath); RARCH_LOG("Starting new game %s ...\n", g_extern.fullpath);
g_extern.lifecycle_state &= ~(1ULL << MODE_MENU_PREINIT); g_extern.lifecycle_state &= ~(1ULL << MODE_MENU_PREINIT);
g_extern.lifecycle_state &= ~(1ULL << MODE_GAME); g_extern.lifecycle_state &= ~(1ULL << MODE_GAME);
load_menu_game_new_core(); load_menu_game_new_core();
@ -604,11 +594,9 @@ static void frontend_android_init(void *data)
slock_unlock(android_app->mutex); slock_unlock(android_app->mutex);
memset(&g_android, 0, sizeof(g_android)); memset(&g_android, 0, sizeof(g_android));
g_android = android_app; g_android = (struct android_app*)android_app;
RARCH_LOG("Native Activity started.\n"); RARCH_LOG("Waiting for Android Native Window to be initialized ...\n");
rarch_main_clear_state();
rarch_init_msg_queue();
while (!android_app->window) while (!android_app->window)
{ {
@ -616,9 +604,12 @@ static void frontend_android_init(void *data)
{ {
frontend_android_deinit(android_app); frontend_android_deinit(android_app);
frontend_android_shutdown(android_app); frontend_android_shutdown(android_app);
return;
} }
} }
RARCH_LOG("Android Native Window initialized.\n");
env = jni_thread_getenv(); env = jni_thread_getenv();
if (!env) if (!env)
return; return;
@ -650,12 +641,14 @@ static void frontend_android_deinit(void *data)
if (!android_app) if (!android_app)
return; return;
RARCH_LOG("Deinitializing RetroArch...\n"); RARCH_LOG("Deinitializing RetroArch ...\n");
android_app->activityState = APP_CMD_DEAD; android_app->activityState = APP_CMD_DEAD;
RARCH_LOG("android_app_destroy!");
if (android_app->inputQueue) if (android_app->inputQueue)
{
RARCH_LOG("Detaching Android input queue looper ...\n");
AInputQueue_detachLooper(android_app->inputQueue); AInputQueue_detachLooper(android_app->inputQueue);
}
} }
static void frontend_android_shutdown(bool unused) static void frontend_android_shutdown(bool unused)
@ -674,12 +667,45 @@ static int frontend_android_get_rating(void)
return -1; return -1;
} }
static int frontend_android_process_args(int *argc, char *argv[], void *args)
{
JNIEnv *env;
jobject obj = NULL;
jstring jstr = NULL;
struct android_app* android_app = (struct android_app*)g_android;
if (!android_app)
return 0;
env = jni_thread_getenv();
if (!env)
return 0;
CALL_OBJ_METHOD(env, obj, android_app->activity->clazz, android_app->getIntent);
RARCH_LOG("Checking content path passed from intent ...\n");
// Content
CALL_OBJ_METHOD_PARAM(env, jstr, obj, android_app->getStringExtra, (*env)->NewStringUTF(env, "ROM"));
if (android_app->getStringExtra && jstr)
{
const char *argv = (*env)->GetStringUTFChars(env, jstr, 0);
strlcpy(g_extern.fullpath, argv, sizeof(g_extern.fullpath));
(*env)->ReleaseStringUTFChars(env, jstr, argv);
RARCH_LOG("Auto-start game %s.\n", g_extern.fullpath);
return 1;
}
return 0;
}
const frontend_ctx_driver_t frontend_ctx_android = { const frontend_ctx_driver_t frontend_ctx_android = {
frontend_android_get_environment_settings, /* get_environment_settings */ frontend_android_get_environment_settings, /* get_environment_settings */
frontend_android_init, /* init */ frontend_android_init, /* init */
frontend_android_deinit, /* deinit */ frontend_android_deinit, /* deinit */
NULL, /* exitspawn */ NULL, /* exitspawn */
NULL, /* process_args */ frontend_android_process_args, /* process_args */
frontend_android_process_events, /* process_events */ frontend_android_process_events, /* process_events */
NULL, /* exec */ NULL, /* exec */
frontend_android_shutdown, /* shutdown */ frontend_android_shutdown, /* shutdown */

View File

@ -331,9 +331,9 @@ static int frontend_ps3_process_args(int *argc, char *argv[], void *args)
if (*argc > 1) if (*argc > 1)
{ {
RARCH_LOG("Auto-start game %s.\n", argv[1]);
strlcpy(g_extern.fullpath, argv[1], sizeof(g_extern.fullpath)); strlcpy(g_extern.fullpath, argv[1], sizeof(g_extern.fullpath));
ret = 1; ret = 1;
RARCH_LOG("Auto-start game %s.\n", argv[1]);
} }
g_extern.verbose = original_verbose; g_extern.verbose = original_verbose;