Home | History | Annotate | Download | only in native_app_glue

Lines Matching defs:android_app

39 static void free_saved_state(struct android_app* android_app) {
40 pthread_mutex_lock(&android_app->mutex);
41 if (android_app->savedState != NULL) {
42 free(android_app->savedState);
43 android_app->savedState = NULL;
44 android_app->savedStateSize = 0;
46 pthread_mutex_unlock(&android_app->mutex);
49 int8_t android_app_read_cmd(struct android_app* android_app) {
51 if (read(android_app->msgread, &cmd, sizeof(cmd)) == sizeof(cmd)) {
54 free_saved_state(android_app);
64 static void print_cur_config(struct android_app* android_app) {
66 AConfiguration_getLanguage(android_app->config, lang);
67 AConfiguration_getCountry(android_app->config, country);
72 AConfiguration_getMcc(android_app->config),
73 AConfiguration_getMnc(android_app->config),
75 AConfiguration_getOrientation(android_app->config),
76 AConfiguration_getTouchscreen(android_app->config),
77 AConfiguration_getDensity(android_app->config),
78 AConfiguration_getKeyboard(android_app->config),
79 AConfiguration_getNavigation(android_app->config),
80 AConfiguration_getKeysHidden(android_app->config),
81 AConfiguration_getNavHidden(android_app->config),
82 AConfiguration_getSdkVersion(android_app->config),
83 AConfiguration_getScreenSize(android_app->config),
84 AConfiguration_getScreenLong(android_app->config),
85 AConfiguration_getUiModeType(android_app->config),
86 AConfiguration_getUiModeNight(android_app->config));
89 void android_app_pre_exec_cmd(struct android_app* android_app, int8_t cmd) {
93 pthread_mutex_lock(&android_app->mutex);
94 if (android_app->inputQueue != NULL) {
95 AInputQueue_detachLooper(android_app->inputQueue);
97 android_app->inputQueue = android_app->pendingInputQueue;
98 if (android_app->inputQueue != NULL) {
100 AInputQueue_attachLooper(android_app->inputQueue,
101 android_app->looper, LOOPER_ID_INPUT, NULL,
102 &android_app->inputPollSource);
104 pthread_cond_broadcast(&android_app->cond);
105 pthread_mutex_unlock(&android_app->mutex);
110 pthread_mutex_lock(&android_app->mutex);
111 android_app->window = android_app->pendingWindow;
112 pthread_cond_broadcast(&android_app->cond);
113 pthread_mutex_unlock(&android_app->mutex);
118 pthread_cond_broadcast(&android_app->cond);
126 pthread_mutex_lock(&android_app->mutex);
127 android_app->activityState = cmd;
128 pthread_cond_broadcast(&android_app->cond);
129 pthread_mutex_unlock(&android_app->mutex);
134 AConfiguration_fromAssetManager(android_app->config,
135 android_app->activity->assetManager);
136 print_cur_config(android_app);
141 android_app->destroyRequested = 1;
146 void android_app_post_exec_cmd(struct android_app* android_app, int8_t cmd) {
150 pthread_mutex_lock(&android_app->mutex);
151 android_app->window = NULL;
152 pthread_cond_broadcast(&android_app->cond);
153 pthread_mutex_unlock(&android_app->mutex);
158 pthread_mutex_lock(&android_app->mutex);
159 android_app->stateSaved = 1;
160 pthread_cond_broadcast(&android_app->cond);
161 pthread_mutex_unlock(&android_app->mutex);
165 free_saved_state(android_app);
174 static void android_app_destroy(struct android_app* android_app) {
176 free_saved_state(android_app);
177 pthread_mutex_lock(&android_app->mutex);
178 if (android_app->inputQueue != NULL) {
179 AInputQueue_detachLooper(android_app->inputQueue);
181 AConfiguration_delete(android_app->config);
182 android_app->destroyed = 1;
183 pthread_cond_broadcast(&android_app->cond);
184 pthread_mutex_unlock(&android_app->mutex);
185 // Can't touch android_app object after this.
188 static void process_input(struct android_app* app, struct android_poll_source* source) {
201 static void process_cmd(struct android_app* app, struct android_poll_source* source) {
209 struct android_app* android_app = (struct android_app*)param;
211 android_app->config = AConfiguration_new();
212 AConfiguration_fromAssetManager(android_app->config, android_app->activity->assetManager);
214 print_cur_config(android_app);
216 android_app->cmdPollSource.id = LOOPER_ID_MAIN;
217 android_app->cmdPollSource.app = android_app;
218 android_app->cmdPollSource.process = process_cmd;
219 android_app->inputPollSource.id = LOOPER_ID_INPUT;
220 android_app->inputPollSource.app = android_app;
221 android_app->inputPollSource.process = process_input;
224 ALooper_addFd(looper, android_app->msgread, LOOPER_ID_MAIN, ALOOPER_EVENT_INPUT, NULL,
225 &android_app->cmdPollSource);
226 android_app->looper = looper;
228 pthread_mutex_lock(&android_app->mutex);
229 android_app->running = 1;
230 pthread_cond_broadcast(&android_app->cond);
231 pthread_mutex_unlock(&android_app->mutex);
233 android_main(android_app);
235 android_app_destroy(android_app);
243 static struct android_app* android_app_create(ANativeActivity* activity,
245 struct android_app* android_app = (struct android_app*)malloc(sizeof(struct android_app));
246 memset(android_app, 0, sizeof(struct android_app));
247 android_app->activity = activity;
249 pthread_mutex_init(&android_app->mutex, NULL);
250 pthread_cond_init(&android_app->cond, NULL);
253 android_app->savedState = malloc(savedStateSize);
254 android_app->savedStateSize = savedStateSize;
255 memcpy(android_app->savedState, savedState, savedStateSize);
263 android_app->msgread = msgpipe[0];
264 android_app->msgwrite = msgpipe[1];
269 pthread_create(&android_app->thread, &attr, android_app_entry, android_app);
272 pthread_mutex_lock(&android_app->mutex);
273 while (!android_app->running) {
274 pthread_cond_wait(&android_app->cond, &android_app->mutex);
276 pthread_mutex_unlock(&android_app->mutex);
278 return android_app;
281 static void android_app_write_cmd(struct android_app* android_app, int8_t cmd) {
282 if (write(android_app->msgwrite, &cmd, sizeof(cmd)) != sizeof(cmd)) {
283 LOGE("Failure writing android_app cmd: %s\n", strerror(errno));
287 static void android_app_set_input(struct android_app* android_app, AInputQueue* inputQueue) {
288 pthread_mutex_lock(&android_app->mutex);
289 android_app->pendingInputQueue = inputQueue;
290 android_app_write_cmd(android_app, APP_CMD_INPUT_CHANGED);
291 while (android_app->inputQueue != android_app->pendingInputQueue) {
292 pthread_cond_wait(&android_app->cond, &android_app->mutex);
294 pthread_mutex_unlock(&android_app->mutex);
297 static void android_app_set_window(struct android_app* android_app, ANativeWindow* window) {
298 pthread_mutex_lock(&android_app->mutex);
299 if (android_app->pendingWindow != NULL) {
300 android_app_write_cmd(android_app, APP_CMD_TERM_WINDOW);
302 android_app->pendingWindow = window;
304 android_app_write_cmd(android_app, APP_CMD_INIT_WINDOW);
306 while (android_app->window != android_app->pendingWindow) {
307 pthread_cond_wait(&android_app->cond, &android_app->mutex);
309 pthread_mutex_unlock(&android_app->mutex);
312 static void android_app_set_activity_state(struct android_app* android_app, int8_t cmd) {
313 pthread_mutex_lock(&android_app->mutex);
314 android_app_write_cmd(android_app, cmd);
315 while (android_app->activityState != cmd) {
316 pthread_cond_wait(&android_app->cond, &android_app->mutex);
318 pthread_mutex_unlock(&android_app->mutex);
321 static void android_app_free(struct android_app* android_app) {
322 pthread_mutex_lock(&android_app->mutex);
323 android_app_write_cmd(android_app, APP_CMD_DESTROY);
324 while (!android_app->destroyed) {
325 pthread_cond_wait(&android_app->cond, &android_app->mutex);
327 pthread_mutex_unlock(&android_app->mutex);
329 close(android_app->msgread);
330 close(android_app->msgwrite);
331 pthread_cond_destroy(&android_app->cond);
332 pthread_mutex_destroy(&android_app->mutex);
333 free(android_app);
338 android_app_free((struct android_app*)activity->instance);
343 android_app_set_activity_state((struct android_app*)activity->instance, APP_CMD_START);
348 android_app_set_activity_state((struct android_app*)activity->instance, APP_CMD_RESUME);
352 struct android_app* android_app = (struct android_app*)activity->instance;
356 pthread_mutex_lock(&android_app->mutex);
357 android_app->stateSaved = 0;
358 android_app_write_cmd(android_app, APP_CMD_SAVE_STATE);
359 while (!android_app->stateSaved) {
360 pthread_cond_wait(&android_app->cond, &android_app->mutex);
363 if (android_app->savedState != NULL) {
364 savedState = android_app->savedState;
365 *outLen = android_app->savedStateSize;
366 android_app->savedState = NULL;
367 android_app->savedStateSize = 0;
370 pthread_mutex_unlock(&android_app->mutex);
377 android_app_set_activity_state((struct android_app*)activity->instance, APP_CMD_PAUSE);
382 android_app_set_activity_state((struct android_app*)activity->instance, APP_CMD_STOP);
386 struct android_app* android_app = (struct android_app*)activity->instance;
388 android_app_write_cmd(android_app, APP_CMD_CONFIG_CHANGED);
392 struct android_app* android_app = (struct android_app*)activity->instance;
394 android_app_write_cmd(android_app, APP_CMD_LOW_MEMORY);
399 android_app_write_cmd((struct android_app*)activity->instance,
405 android_app_set_window((struct android_app*)activity->instance, window);
410 android_app_set_window((struct android_app*)activity->instance, NULL);
415 android_app_set_input((struct android_app*)activity->instance, queue);
420 android_app_set_input((struct android_app*)activity->instance, NULL);