Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,15 @@
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<Promise> mPendingOpenURLPromises = new ArrayList<>();

private static final String EXTRA_MAP_KEY_FOR_VALUE = "value";

Expand All @@ -39,9 +42,12 @@ public IntentModule(ReactApplicationContext reactContext) {

@Override
public void invalidate() {
if (mInitialURLListener != null) {
getReactApplicationContext().removeLifecycleEventListener(mInitialURLListener);
mInitialURLListener = null;
synchronized (this) {
mPendingOpenURLPromises.clear();
if (mInitialURLListener != null) {
getReactApplicationContext().removeLifecycleEventListener(mInitialURLListener);
mInitialURLListener = null;
}
}
super.invalidate();
}
Expand Down Expand Up @@ -79,22 +85,25 @@ public void getInitialURL(Promise promise) {
}
}

private void waitForActivityAndGetInitialURL(final Promise promise) {
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;
}

mInitialURLListener =
new LifecycleEventListener() {
@Override
public void onHostResume() {
getInitialURL(promise);

getReactApplicationContext().removeLifecycleEventListener(this);
mInitialURLListener = null;
synchronized (IntentModule.this) {
for (Promise promise : mPendingOpenURLPromises) {
getInitialURL(promise);
}

mInitialURLListener = null;
mPendingOpenURLPromises.clear();
}
}

@Override
Expand Down