FLAG_ACTIVITY_CLEAR_TOP: create Activity if it doesn't already exist

When originally implementing this flag, we forgot to handle cases where
the Activity does not exist.
This commit is contained in:
Julian Winkler
2025-10-05 14:40:33 +02:00
parent b76eb0f1be
commit f90499d1df
4 changed files with 13 additions and 8 deletions

View File

@@ -582,7 +582,7 @@ public class Activity extends ContextThemeWrapper implements Window.Callback, La
private native void nativeFinish(long native_window);
public static native void nativeStartActivity(Activity activity);
public static native void nativeResumeActivity(Class<? extends Activity> activityClass, Intent intent);
public static native boolean nativeResumeActivity(Class<? extends Activity> activityClass, Intent intent);
public static native void nativeOpenURI(String uri);
public native void nativeFileChooser(int action, String type, String title, int requestCode);
public void reportFullyDrawn() {}

View File

@@ -663,11 +663,12 @@ public class Context extends Object {
public void run() {
try {
if ((intent_.getFlags() & Intent.FLAG_ACTIVITY_CLEAR_TOP) != 0 && intent_.getComponent() != null) {
Activity.nativeResumeActivity(Class.forName(intent_.getComponent().getClassName()).asSubclass(Activity.class), intent_);
} else {
Activity activity = Activity.internalCreateActivity(className_, this_application.native_window, intent_);
Activity.nativeStartActivity(activity);
boolean found = Activity.nativeResumeActivity(Class.forName(intent_.getComponent().getClassName()).asSubclass(Activity.class), intent_);
if (found)
return;
}
Activity activity = Activity.internalCreateActivity(className_, this_application.native_window, intent_);
Activity.nativeStartActivity(activity);
} catch (Exception e) {
e.printStackTrace();
}