From 1b46d728e352f7f2e74252bc8e46b695f20623b8 Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Sat, 5 Oct 2024 16:52:53 +0200 Subject: [PATCH] implement Activity.onPostCreate() and onPostResume() These are used by androidx to handle the Fragment lifecycle --- src/api-impl-jni/app/android_app_Activity.c | 8 ++++++++ src/api-impl-jni/util.c | 2 ++ src/api-impl-jni/util.h | 2 ++ src/api-impl/android/app/Activity.java | 10 ++++++++++ 4 files changed, 22 insertions(+) diff --git a/src/api-impl-jni/app/android_app_Activity.c b/src/api-impl-jni/app/android_app_Activity.c index 40bad027..ce6755ec 100644 --- a/src/api-impl-jni/app/android_app_Activity.c +++ b/src/api-impl-jni/app/android_app_Activity.c @@ -54,6 +54,10 @@ static void activity_focus(JNIEnv *env, jobject activity) if((*env)->ExceptionCheck(env)) (*env)->ExceptionDescribe(env); + (*env)->CallVoidMethod(env, activity, handle_cache.activity.onPostResume); + if((*env)->ExceptionCheck(env)) + (*env)->ExceptionDescribe(env); + (*env)->CallVoidMethod(env, activity, handle_cache.activity.onWindowFocusChanged, true); if((*env)->ExceptionCheck(env)) (*env)->ExceptionDescribe(env); @@ -129,6 +133,10 @@ void _activity_start(JNIEnv *env, jobject activity_object, bool recreate) return; } + (*env)->CallVoidMethod(env, activity_object, handle_cache.activity.onPostCreate, NULL); + if((*env)->ExceptionCheck(env)) + (*env)->ExceptionDescribe(env); + if(recreate) // only allowed for toplevel, so we know for sure where in the stack it belongs activity_backlog = g_list_append(activity_backlog, _REF(activity_object)); else diff --git a/src/api-impl-jni/util.c b/src/api-impl-jni/util.c index b0e9c523..80fea7fb 100644 --- a/src/api-impl-jni/util.c +++ b/src/api-impl-jni/util.c @@ -67,9 +67,11 @@ void set_up_handle_cache(JNIEnv *env) if((*env)->ExceptionCheck(env)) (*env)->ExceptionDescribe(env); handle_cache.activity.onCreate = _METHOD(handle_cache.activity.class, "onCreate", "(Landroid/os/Bundle;)V"); + handle_cache.activity.onPostCreate = _METHOD(handle_cache.activity.class, "onPostCreate", "(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.onPostResume = _METHOD(handle_cache.activity.class, "onPostResume", "()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"); diff --git a/src/api-impl-jni/util.h b/src/api-impl-jni/util.h index 392f5826..1cc1a8aa 100644 --- a/src/api-impl-jni/util.h +++ b/src/api-impl-jni/util.h @@ -9,8 +9,10 @@ struct handle_cache { struct { jclass class; jmethodID onCreate; + jmethodID onPostCreate; jmethodID onStart; jmethodID onResume; + jmethodID onPostResume; jmethodID onWindowFocusChanged; jmethodID onDestroy; jmethodID onStop; diff --git a/src/api-impl/android/app/Activity.java b/src/api-impl/android/app/Activity.java index aaf36c88..7c1a8002 100644 --- a/src/api-impl/android/app/Activity.java +++ b/src/api-impl/android/app/Activity.java @@ -148,6 +148,11 @@ public class Activity extends ContextThemeWrapper implements Window.Callback { return; } + protected void onPostCreate(Bundle savedInstanceState) { + System.out.println("- onPostCreate - yay!"); + return; + } + protected void onStart() { System.out.println("- onStart - yay!"); if (window.contentView != null) @@ -177,6 +182,11 @@ public class Activity extends ContextThemeWrapper implements Window.Callback { return; } + protected void onPostResume() { + System.out.println("- onPostResume - yay!"); + return; + } + protected void onPause() { System.out.println("- onPause - yay!");