diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/intent/IntentModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/intent/IntentModule.java index 1e285b2c6f1..4324495b07a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/intent/IntentModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/intent/IntentModule.java @@ -24,12 +24,15 @@ import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.ReadableType; import com.facebook.react.module.annotations.ReactModule; +import java.util.ArrayList; +import java.util.List; /** Intent module. Launch other activities or open URLs. */ @ReactModule(name = NativeIntentAndroidSpec.NAME) public class IntentModule extends NativeIntentAndroidSpec { private @Nullable LifecycleEventListener mInitialURLListener = null; + private final List mPendingOpenURLPromises = new ArrayList<>(); private static final String EXTRA_MAP_KEY_FOR_VALUE = "value"; @@ -40,6 +43,7 @@ public class IntentModule extends NativeIntentAndroidSpec { @Override public void invalidate() { synchronized (this) { + mPendingOpenURLPromises.clear(); if (mInitialURLListener != null) { getReactApplicationContext().removeLifecycleEventListener(mInitialURLListener); mInitialURLListener = null; @@ -82,10 +86,8 @@ public class IntentModule extends NativeIntentAndroidSpec { } private synchronized void waitForActivityAndGetInitialURL(final Promise promise) { + mPendingOpenURLPromises.add(promise); if (mInitialURLListener != null) { - promise.reject( - new IllegalStateException( - "Cannot await activity from more than one call to getInitialURL")); return; } @@ -93,11 +95,14 @@ public class IntentModule extends NativeIntentAndroidSpec { new LifecycleEventListener() { @Override public void onHostResume() { - getInitialURL(promise); - getReactApplicationContext().removeLifecycleEventListener(this); synchronized (IntentModule.this) { + for (Promise promise : mPendingOpenURLPromises) { + getInitialURL(promise); + } + mInitialURLListener = null; + mPendingOpenURLPromises.clear(); } }