remove spacial handling for Activity.recreateActivity()

This prevents the onStart() method being called twice for the toplevel
Activity.
This commit is contained in:
Julian Winkler
2024-10-06 08:07:59 +02:00
parent a8ef5a533a
commit 0d5150083a
3 changed files with 3 additions and 39 deletions

View File

@@ -11,7 +11,6 @@
static GList *activity_backlog = NULL; static GList *activity_backlog = NULL;
static jobject activity_current = NULL; static jobject activity_current = NULL;
static jobject activity_toplevel_current = NULL;
static void activity_close(JNIEnv *env, jobject activity) static void activity_close(JNIEnv *env, jobject activity)
{ {
@@ -66,7 +65,6 @@ static void activity_focus(JNIEnv *env, jobject activity)
static void activity_update_current(JNIEnv *env) static void activity_update_current(JNIEnv *env)
{ {
jobject activity_new = activity_backlog ? g_list_first(activity_backlog)->data : NULL; jobject activity_new = activity_backlog ? g_list_first(activity_backlog)->data : NULL;
jobject activity_toplevel_new = activity_backlog ? g_list_last(activity_backlog)->data : NULL;
if (activity_current != activity_new) { if (activity_current != activity_new) {
if (activity_current) if (activity_current)
@@ -77,17 +75,6 @@ static void activity_update_current(JNIEnv *env)
activity_current = activity_new; activity_current = activity_new;
} }
/* for Activity.recreate */
if(activity_toplevel_current != activity_toplevel_new) {
if (activity_toplevel_current)
activity_unfocus(env, activity_toplevel_current);
if (activity_toplevel_new)
activity_focus(env, activity_toplevel_new);
activity_toplevel_current = activity_toplevel_new;
}
} }
void activity_window_ready(void) void activity_window_ready(void)
@@ -120,7 +107,7 @@ void activity_close_all(void)
static jobject activity_not_created = NULL; static jobject activity_not_created = NULL;
void _activity_start(JNIEnv *env, jobject activity_object, bool recreate) void activity_start(JNIEnv *env, jobject activity_object)
{ {
/* -- run the activity's onCreate -- */ /* -- run the activity's onCreate -- */
(*env)->CallVoidMethod(env, activity_object, handle_cache.activity.onCreate, NULL); (*env)->CallVoidMethod(env, activity_object, handle_cache.activity.onCreate, NULL);
@@ -137,20 +124,12 @@ void _activity_start(JNIEnv *env, jobject activity_object, bool recreate)
if((*env)->ExceptionCheck(env)) if((*env)->ExceptionCheck(env))
(*env)->ExceptionDescribe(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_prepend(activity_backlog, _REF(activity_object));
activity_backlog = g_list_append(activity_backlog, _REF(activity_object));
else
activity_backlog = g_list_prepend(activity_backlog, _REF(activity_object));
activity_update_current(env); activity_update_current(env);
} }
void activity_start(JNIEnv *env, jobject activity_object)
{
_activity_start(env, activity_object, false);
}
JNIEXPORT void JNICALL Java_android_app_Activity_nativeFinish(JNIEnv *env, jobject this, jlong window) JNIEXPORT void JNICALL Java_android_app_Activity_nativeFinish(JNIEnv *env, jobject this, jlong window)
{ {
GList *l; GList *l;
@@ -173,12 +152,6 @@ JNIEXPORT void JNICALL Java_android_app_Activity_nativeFinish(JNIEnv *env, jobje
gtk_window_close(GTK_WINDOW(_PTR(window))); gtk_window_close(GTK_WINDOW(_PTR(window)));
} }
JNIEXPORT void JNICALL Java_android_app_Activity_nativeRecreateActivity(JNIEnv *env, jclass class, jobject activity)
{
_activity_start(env, activity, true);
}
JNIEXPORT void JNICALL Java_android_app_Activity_nativeStartActivity(JNIEnv *env, jclass class, jobject activity) JNIEXPORT void JNICALL Java_android_app_Activity_nativeStartActivity(JNIEnv *env, jclass class, jobject activity)
{ {
activity_start(env, activity); activity_start(env, activity);

View File

@@ -17,14 +17,6 @@ extern "C" {
JNIEXPORT void JNICALL Java_android_app_Activity_nativeFinish JNIEXPORT void JNICALL Java_android_app_Activity_nativeFinish
(JNIEnv *, jobject, jlong); (JNIEnv *, jobject, jlong);
/*
* Class: android_app_Activity
* Method: nativeRecreateActivity
* Signature: (Landroid/app/Activity;)V
*/
JNIEXPORT void JNICALL Java_android_app_Activity_nativeRecreateActivity
(JNIEnv *, jclass, jobject);
/* /*
* Class: android_app_Activity * Class: android_app_Activity
* Method: nativeStartActivity * Method: nativeStartActivity

View File

@@ -500,7 +500,7 @@ public class Activity extends ContextThemeWrapper implements Window.Callback {
activity.getWindow().native_window = getWindow().native_window; activity.getWindow().native_window = getWindow().native_window;
System.out.println("activity.getWindow().native_window >"+activity.getWindow().native_window+"<"); System.out.println("activity.getWindow().native_window >"+activity.getWindow().native_window+"<");
nativeFinish(0); nativeFinish(0);
nativeRecreateActivity(activity); nativeStartActivity(activity);
} catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
System.out.println("exception in Activity.recreate, this is kinda sus"); System.out.println("exception in Activity.recreate, this is kinda sus");
e.printStackTrace(); e.printStackTrace();
@@ -556,7 +556,6 @@ public class Activity extends ContextThemeWrapper implements Window.Callback {
public void setTaskDescription(ActivityManager.TaskDescription description) {} public void setTaskDescription(ActivityManager.TaskDescription description) {}
private native void nativeFinish(long native_window); private native void nativeFinish(long native_window);
public static native void nativeRecreateActivity(Activity activity);
public static native void nativeStartActivity(Activity activity); public static native void nativeStartActivity(Activity activity);
public static native void nativeOpenURI(String uri); public static native void nativeOpenURI(String uri);
public native void nativeFileChooser(int action, String type, String title, int requestCode); public native void nativeFileChooser(int action, String type, String title, int requestCode);