Skip to content

Commit b96b5af

Browse files
fabriziocuccifacebook-github-bot
authored andcommitted
Emit url device event in ReactActivityDelegate::onCreate (#45254)
Summary: Pull Request resolved: #45254 Changelog: [General][Changed] - Emit `url` device event in `ReactActivityDelegate::onCreate`. Differential Revision: D59282348
1 parent e35a2f4 commit b96b5af

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,19 @@
1212
import android.content.Intent;
1313
import android.content.pm.ActivityInfo;
1414
import android.content.res.Configuration;
15+
import android.net.Uri;
16+
import android.nfc.NfcAdapter;
1517
import android.os.Build;
1618
import android.os.Bundle;
1719
import android.view.KeyEvent;
1820
import androidx.annotation.Nullable;
1921
import com.facebook.infer.annotation.Assertions;
2022
import com.facebook.react.bridge.Callback;
23+
import com.facebook.react.bridge.ReactContext;
24+
import com.facebook.react.bridge.ReactNoCrashSoftException;
25+
import com.facebook.react.bridge.ReactSoftExceptionLogger;
2126
import com.facebook.react.config.ReactFeatureFlags;
27+
import com.facebook.react.modules.core.DeviceEventManagerModule;
2228
import com.facebook.react.modules.core.PermissionListener;
2329

2430
/**
@@ -27,6 +33,7 @@
2733
* ReactApplication}.
2834
*/
2935
public class ReactActivityDelegate {
36+
private static final String TAG = "ReactActivityDelegate";
3037

3138
private final @Nullable Activity mActivity;
3239
private final @Nullable String mMainComponentName;
@@ -131,6 +138,7 @@ protected ReactRootView createRootView() {
131138
if (mainComponentName != null) {
132139
loadApp(mainComponentName);
133140
}
141+
emitUrlDeviceEventIfNecessary();
134142
}
135143

136144
protected void loadApp(String appKey) {
@@ -231,4 +239,40 @@ protected boolean isFabricEnabled() {
231239
protected boolean isWideColorGamutEnabled() {
232240
return false;
233241
}
242+
243+
private void emitUrlDeviceEventIfNecessary() {
244+
ReactContext currentContext =
245+
ReactFeatureFlags.enableBridgelessArchitecture
246+
? getReactHost().getCurrentReactContext()
247+
: getReactNativeHost().getReactInstanceManager().getCurrentReactContext();
248+
249+
if (currentContext == null) {
250+
ReactSoftExceptionLogger.logSoftException(
251+
TAG,
252+
new ReactNoCrashSoftException(
253+
"emitUrlDeviceEventIfNecessary: Tried to emit `url` event while context is null"));
254+
return;
255+
}
256+
257+
if (mActivity == null) {
258+
ReactSoftExceptionLogger.logSoftException(
259+
TAG,
260+
new ReactNoCrashSoftException(
261+
"emitUrlDeviceEventIfNecessary: Tried to emit `url` event while activity is null"));
262+
return;
263+
}
264+
265+
Intent intent = mActivity.getIntent();
266+
String action = intent.getAction();
267+
Uri uri = intent.getData();
268+
if (uri != null
269+
&& (Intent.ACTION_VIEW.equals(action)
270+
|| NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action))) {
271+
DeviceEventManagerModule deviceEventManagerModule =
272+
currentContext.getNativeModule(DeviceEventManagerModule.class);
273+
if (deviceEventManagerModule != null) {
274+
deviceEventManagerModule.emitNewIntentReceived(uri);
275+
}
276+
}
277+
}
234278
}

0 commit comments

Comments
 (0)