mirror of
https://github.com/CTCaer/RetroArch.git
synced 2024-12-15 23:06:40 +00:00
Merge pull request #80 from meancoot/android-pauserestore
Android activity tweaks.
This commit is contained in:
commit
b2cd86c047
@ -35,6 +35,8 @@ struct droid
|
|||||||
unsigned height;
|
unsigned height;
|
||||||
struct saved_state state;
|
struct saved_state state;
|
||||||
int32_t last_orient;
|
int32_t last_orient;
|
||||||
|
unsigned reinit_video;
|
||||||
|
unsigned activity_paused;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct droid g_android;
|
extern struct droid g_android;
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include "android_general.h"
|
#include "android_general.h"
|
||||||
#include "../../../general.h"
|
#include "../../../general.h"
|
||||||
#include "../../../performance.h"
|
#include "../../../performance.h"
|
||||||
|
#include "../../../driver.h"
|
||||||
|
|
||||||
void free_saved_state(struct android_app* android_app)
|
void free_saved_state(struct android_app* android_app)
|
||||||
{
|
{
|
||||||
@ -154,6 +155,7 @@ void engine_handle_cmd(struct android_app* android_app, int32_t cmd)
|
|||||||
gfx_ctx_init();
|
gfx_ctx_init();
|
||||||
g_extern.audio_active = true;
|
g_extern.audio_active = true;
|
||||||
g_extern.video_active = true;
|
g_extern.video_active = true;
|
||||||
|
g_android.reinit_video = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_cond_broadcast(&android_app->cond);
|
pthread_cond_broadcast(&android_app->cond);
|
||||||
@ -174,6 +176,9 @@ void engine_handle_cmd(struct android_app* android_app, int32_t cmd)
|
|||||||
|
|
||||||
/* POSTEXEC */
|
/* POSTEXEC */
|
||||||
free_saved_state(android_app);
|
free_saved_state(android_app);
|
||||||
|
|
||||||
|
g_android.activity_paused = false;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case APP_CMD_START:
|
case APP_CMD_START:
|
||||||
RARCH_LOG("engine_handle_cmd: APP_CMD_START.\n");
|
RARCH_LOG("engine_handle_cmd: APP_CMD_START.\n");
|
||||||
@ -202,6 +207,7 @@ void engine_handle_cmd(struct android_app* android_app, int32_t cmd)
|
|||||||
g_android.input_state |= (1ULL << RARCH_REENTRANT);
|
g_android.input_state |= (1ULL << RARCH_REENTRANT);
|
||||||
g_extern.audio_active = false;
|
g_extern.audio_active = false;
|
||||||
g_extern.video_active = false;
|
g_extern.video_active = false;
|
||||||
|
g_android.activity_paused = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case APP_CMD_STOP:
|
case APP_CMD_STOP:
|
||||||
@ -259,6 +265,38 @@ void engine_handle_cmd(struct android_app* android_app, int32_t cmd)
|
|||||||
|
|
||||||
#define MAX_ARGS 32
|
#define MAX_ARGS 32
|
||||||
|
|
||||||
|
static bool android_run_events(struct android_app* android_app)
|
||||||
|
{
|
||||||
|
// Read all pending events.
|
||||||
|
int id;
|
||||||
|
|
||||||
|
// Block forever waiting for events.
|
||||||
|
while ((id = ALooper_pollOnce(g_android.activity_paused ? -1 : 100, NULL, 0, NULL)) >= 0)
|
||||||
|
{
|
||||||
|
// Process this event.
|
||||||
|
if (id)
|
||||||
|
{
|
||||||
|
int8_t cmd;
|
||||||
|
|
||||||
|
if (read(android_app->msgread, &cmd, sizeof(cmd)) == sizeof(cmd))
|
||||||
|
{
|
||||||
|
if(cmd == APP_CMD_SAVE_STATE)
|
||||||
|
free_saved_state(android_app);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
cmd = -1;
|
||||||
|
|
||||||
|
engine_handle_cmd(android_app, cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if we are exiting.
|
||||||
|
if (android_app->destroyRequested != 0)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is the main entry point of a native application that is using
|
* This is the main entry point of a native application that is using
|
||||||
* android_native_app_glue. It runs in its own thread, with its own
|
* android_native_app_glue. It runs in its own thread, with its own
|
||||||
@ -335,31 +373,9 @@ static void* android_app_entry(void* param)
|
|||||||
|
|
||||||
while(!(g_android.input_state & (1ULL << RARCH_WINDOW_READY)))
|
while(!(g_android.input_state & (1ULL << RARCH_WINDOW_READY)))
|
||||||
{
|
{
|
||||||
// Read all pending events.
|
if(!android_run_events(android_app))
|
||||||
int id;
|
|
||||||
|
|
||||||
// Block forever waiting for events.
|
|
||||||
while ((id = ALooper_pollOnce(0, NULL, 0, NULL)) >= 0)
|
|
||||||
{
|
{
|
||||||
// Process this event.
|
goto exit;
|
||||||
if (id)
|
|
||||||
{
|
|
||||||
int8_t cmd;
|
|
||||||
|
|
||||||
if (read(android_app->msgread, &cmd, sizeof(cmd)) == sizeof(cmd))
|
|
||||||
{
|
|
||||||
if(cmd == APP_CMD_SAVE_STATE)
|
|
||||||
free_saved_state(android_app);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
cmd = -1;
|
|
||||||
|
|
||||||
engine_handle_cmd(android_app, cmd);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if we are exiting.
|
|
||||||
if (android_app->destroyRequested != 0)
|
|
||||||
goto exit;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -388,6 +404,21 @@ static void* android_app_entry(void* param)
|
|||||||
g_android.last_orient = AConfiguration_getOrientation(android_app->config);
|
g_android.last_orient = AConfiguration_getOrientation(android_app->config);
|
||||||
while (rarch_main_iterate())
|
while (rarch_main_iterate())
|
||||||
{
|
{
|
||||||
|
while(g_android.activity_paused)
|
||||||
|
{
|
||||||
|
if(!android_run_events(android_app))
|
||||||
|
{
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_android.reinit_video)
|
||||||
|
{
|
||||||
|
uninit_drivers();
|
||||||
|
init_drivers();
|
||||||
|
g_android.reinit_video = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (AConfiguration_getOrientation(android_app->config) != g_android.last_orient)
|
if (AConfiguration_getOrientation(android_app->config) != g_android.last_orient)
|
||||||
{
|
{
|
||||||
// reinit video driver for new window dimensions
|
// reinit video driver for new window dimensions
|
||||||
|
Loading…
Reference in New Issue
Block a user