diff --git a/src/api-impl-jni/app/android_app_Activity.c b/src/api-impl-jni/app/android_app_Activity.c index 3c0c7321..88078fce 100644 --- a/src/api-impl-jni/app/android_app_Activity.c +++ b/src/api-impl-jni/app/android_app_Activity.c @@ -19,7 +19,7 @@ static void activity_close(JNIEnv *env, jobject activity) { } /* -- run the main activity's onDestroy -- */ - (*env)->CallVoidMethod(env, activity, handle_cache.apk_main_activity.onDestroy, NULL); + (*env)->CallVoidMethod(env, activity, handle_cache.activity.onDestroy, NULL); if((*env)->ExceptionCheck(env)) (*env)->ExceptionDescribe(env); } @@ -29,20 +29,29 @@ static void activity_update_current(JNIEnv *env) { if (activity_current != activity_new) { if (activity_current) { - (*env)->CallVoidMethod(env, activity_current, handle_cache.apk_main_activity.onPause); + (*env)->CallVoidMethod(env, activity_current, handle_cache.activity.onPause); if((*env)->ExceptionCheck(env)) (*env)->ExceptionDescribe(env); - (*env)->CallVoidMethod(env, activity_current, handle_cache.apk_main_activity.onStop); + (*env)->CallVoidMethod(env, activity_current, handle_cache.activity.onStop); if((*env)->ExceptionCheck(env)) (*env)->ExceptionDescribe(env); + + (*env)->CallVoidMethod(env, activity_new, handle_cache.activity.onWindowFocusChanged, false); + if((*env)->ExceptionCheck(env)) + (*env)->ExceptionDescribe(env); + } if (activity_new) { - (*env)->CallVoidMethod(env, activity_new, handle_cache.apk_main_activity.onStart); + (*env)->CallVoidMethod(env, activity_new, handle_cache.activity.onStart); if((*env)->ExceptionCheck(env)) (*env)->ExceptionDescribe(env); - (*env)->CallVoidMethod(env, activity_new, handle_cache.apk_main_activity.onResume); + (*env)->CallVoidMethod(env, activity_new, handle_cache.activity.onResume); + if((*env)->ExceptionCheck(env)) + (*env)->ExceptionDescribe(env); + + (*env)->CallVoidMethod(env, activity_new, handle_cache.activity.onWindowFocusChanged, true); if((*env)->ExceptionCheck(env)) (*env)->ExceptionDescribe(env); } @@ -54,7 +63,7 @@ void activity_window_ready(void) { JNIEnv *env = get_jni_env(); for (GList *l = activity_backlog; l != NULL; l = l->next) { - (*env)->CallVoidMethod(env, l->data, handle_cache.apk_main_activity.onWindowFocusChanged, true); + (*env)->CallVoidMethod(env, l->data, handle_cache.activity.onWindowFocusChanged, true); if((*env)->ExceptionCheck(env)) (*env)->ExceptionDescribe(env); } @@ -78,7 +87,7 @@ void activity_close_all(void) { void activity_start(JNIEnv *env, jobject activity_object) { /* -- run the activity's onCreate -- */ - (*env)->CallVoidMethod(env, activity_object, handle_cache.apk_main_activity.onCreate, NULL); + (*env)->CallVoidMethod(env, activity_object, handle_cache.activity.onCreate, NULL); if((*env)->ExceptionCheck(env)) (*env)->ExceptionDescribe(env); diff --git a/src/api-impl-jni/util.c b/src/api-impl-jni/util.c index df408039..96d3a67a 100644 --- a/src/api-impl-jni/util.c +++ b/src/api-impl-jni/util.c @@ -52,16 +52,16 @@ void set_up_handle_cache(JNIEnv *env) { (*env)->GetJavaVM(env, &jvm); - handle_cache.apk_main_activity.class = _REF((*env)->FindClass(env, "android/app/Activity")); + handle_cache.activity.class = _REF((*env)->FindClass(env, "android/app/Activity")); if((*env)->ExceptionCheck(env)) (*env)->ExceptionDescribe(env); - handle_cache.apk_main_activity.onCreate = _METHOD(handle_cache.apk_main_activity.class, "onCreate", "(Landroid/os/Bundle;)V"); - handle_cache.apk_main_activity.onStart = _METHOD(handle_cache.apk_main_activity.class, "onStart", "()V"); - handle_cache.apk_main_activity.onWindowFocusChanged = _METHOD(handle_cache.apk_main_activity.class, "onWindowFocusChanged", "(Z)V"); - handle_cache.apk_main_activity.onResume = _METHOD(handle_cache.apk_main_activity.class, "onResume", "()V"); - handle_cache.apk_main_activity.onDestroy = _METHOD(handle_cache.apk_main_activity.class, "onDestroy", "()V"); - handle_cache.apk_main_activity.onStop = _METHOD(handle_cache.apk_main_activity.class, "onStop", "()V"); - handle_cache.apk_main_activity.onPause = _METHOD(handle_cache.apk_main_activity.class, "onPause", "()V"); + handle_cache.activity.onCreate = _METHOD(handle_cache.activity.class, "onCreate", "(Landroid/os/Bundle;)V"); + handle_cache.activity.onStart = _METHOD(handle_cache.activity.class, "onStart", "()V"); + handle_cache.activity.onWindowFocusChanged = _METHOD(handle_cache.activity.class, "onWindowFocusChanged", "(Z)V"); + handle_cache.activity.onResume = _METHOD(handle_cache.activity.class, "onResume", "()V"); + handle_cache.activity.onDestroy = _METHOD(handle_cache.activity.class, "onDestroy", "()V"); + handle_cache.activity.onStop = _METHOD(handle_cache.activity.class, "onStop", "()V"); + handle_cache.activity.onPause = _METHOD(handle_cache.activity.class, "onPause", "()V"); handle_cache.attribute_set.class = _REF((*env)->FindClass(env, "android/util/AttributeSet")); if((*env)->ExceptionCheck(env)) diff --git a/src/api-impl-jni/util.h b/src/api-impl-jni/util.h index be45544d..02a2bb5a 100644 --- a/src/api-impl-jni/util.h +++ b/src/api-impl-jni/util.h @@ -15,7 +15,7 @@ struct handle_cache { jmethodID onDestroy; jmethodID onStop; jmethodID onPause; - } apk_main_activity; + } activity; struct { jclass class; jmethodID getAttributeValue_string; diff --git a/src/main-executable/main.c b/src/main-executable/main.c index 199224a0..b25641bd 100644 --- a/src/main-executable/main.c +++ b/src/main-executable/main.c @@ -361,8 +361,8 @@ static void open(GtkApplication *app, GFile** files, gint nfiles, const gchar* h (*env)->ExceptionDescribe(env); // construct main Activity - activity_object = (*env)->CallStaticObjectMethod(env, handle_cache.apk_main_activity.class, - _STATIC_METHOD(handle_cache.apk_main_activity.class, "createMainActivity", "(Ljava/lang/String;J)Landroid/app/Activity;"), + activity_object = (*env)->CallStaticObjectMethod(env, handle_cache.activity.class, + _STATIC_METHOD(handle_cache.activity.class, "createMainActivity", "(Ljava/lang/String;J)Landroid/app/Activity;"), _JSTRING(d->apk_main_activity_class), _INTPTR(window)); if((*env)->ExceptionCheck(env)) (*env)->ExceptionDescribe(env);