@sentry/react-native 6.0.0-rc.1 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/README.md +8 -0
  2. package/RNSentry.podspec +1 -1
  3. package/android/build.gradle +1 -1
  4. package/android/src/main/java/io/sentry/react/RNSentryBreadcrumb.java +63 -66
  5. package/android/src/main/java/io/sentry/react/RNSentryMapConverter.java +106 -110
  6. package/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java +867 -811
  7. package/android/src/main/java/io/sentry/react/RNSentryOnDrawReporterManager.java +128 -121
  8. package/android/src/main/java/io/sentry/react/RNSentryPackage.java +8 -14
  9. package/android/src/main/java/io/sentry/react/RNSentryReactFragmentLifecycleTracer.java +76 -70
  10. package/android/src/main/java/io/sentry/react/RNSentryReplayBreadcrumbConverter.java +26 -31
  11. package/android/src/newarch/java/io/sentry/react/RNSentryModule.java +164 -165
  12. package/android/src/oldarch/java/io/sentry/react/RNSentryModule.java +164 -165
  13. package/dist/js/integrations/nativelinkederrors.js +7 -2
  14. package/dist/js/integrations/nativelinkederrors.js.map +1 -1
  15. package/dist/js/tracing/timetodisplay.d.ts.map +1 -1
  16. package/dist/js/tracing/timetodisplay.js +3 -1
  17. package/dist/js/tracing/timetodisplay.js.map +1 -1
  18. package/dist/js/version.d.ts +1 -1
  19. package/dist/js/version.d.ts.map +1 -1
  20. package/dist/js/version.js +1 -1
  21. package/dist/js/version.js.map +1 -1
  22. package/dist/js/wrapper.d.ts +1 -1
  23. package/dist/js/wrapper.d.ts.map +1 -1
  24. package/dist/js/wrapper.js +37 -5
  25. package/dist/js/wrapper.js.map +1 -1
  26. package/ios/RNSentry.mm +9 -1
  27. package/package.json +1 -1
  28. package/ts3.8/dist/js/version.d.ts +1 -1
  29. package/ts3.8/dist/js/wrapper.d.ts +1 -1
@@ -3,7 +3,6 @@ package io.sentry.react;
3
3
  import android.app.Activity;
4
4
  import android.content.Context;
5
5
  import android.view.View;
6
-
7
6
  import com.facebook.react.bridge.Arguments;
8
7
  import com.facebook.react.bridge.ReactApplicationContext;
9
8
  import com.facebook.react.bridge.WritableMap;
@@ -12,12 +11,6 @@ import com.facebook.react.uimanager.SimpleViewManager;
12
11
  import com.facebook.react.uimanager.ThemedReactContext;
13
12
  import com.facebook.react.uimanager.annotations.ReactProp;
14
13
  import com.facebook.react.uimanager.events.RCTEventEmitter;
15
-
16
- import org.jetbrains.annotations.NotNull;
17
- import org.jetbrains.annotations.Nullable;
18
-
19
- import java.util.Map;
20
-
21
14
  import io.sentry.ILogger;
22
15
  import io.sentry.SentryDate;
23
16
  import io.sentry.SentryDateProvider;
@@ -26,131 +19,145 @@ import io.sentry.android.core.AndroidLogger;
26
19
  import io.sentry.android.core.BuildInfoProvider;
27
20
  import io.sentry.android.core.SentryAndroidDateProvider;
28
21
  import io.sentry.android.core.internal.util.FirstDrawDoneListener;
22
+ import java.util.Map;
23
+ import org.jetbrains.annotations.NotNull;
24
+ import org.jetbrains.annotations.Nullable;
29
25
 
30
- public class RNSentryOnDrawReporterManager extends SimpleViewManager<RNSentryOnDrawReporterManager.RNSentryOnDrawReporterView> {
31
-
32
- public static final String REACT_CLASS = "RNSentryOnDrawReporter";
33
- private final @NotNull ReactApplicationContext mCallerContext;
34
-
35
- public RNSentryOnDrawReporterManager(ReactApplicationContext reactContext) {
36
- mCallerContext = reactContext;
26
+ public class RNSentryOnDrawReporterManager
27
+ extends SimpleViewManager<RNSentryOnDrawReporterManager.RNSentryOnDrawReporterView> {
28
+
29
+ public static final String REACT_CLASS = "RNSentryOnDrawReporter";
30
+ private final @NotNull ReactApplicationContext mCallerContext;
31
+
32
+ public RNSentryOnDrawReporterManager(ReactApplicationContext reactContext) {
33
+ mCallerContext = reactContext;
34
+ }
35
+
36
+ @NotNull
37
+ @Override
38
+ public String getName() {
39
+ return REACT_CLASS;
40
+ }
41
+
42
+ @NotNull
43
+ @Override
44
+ protected RNSentryOnDrawReporterView createViewInstance(
45
+ @NotNull ThemedReactContext themedReactContext) {
46
+ return new RNSentryOnDrawReporterView(
47
+ mCallerContext, new BuildInfoProvider(new AndroidLogger()));
48
+ }
49
+
50
+ @ReactProp(name = "initialDisplay", defaultBoolean = false)
51
+ public void setInitialDisplay(RNSentryOnDrawReporterView view, boolean initialDisplay) {
52
+ view.setInitialDisplay(initialDisplay);
53
+ }
54
+
55
+ @ReactProp(name = "fullDisplay", defaultBoolean = false)
56
+ public void setFullDisplay(RNSentryOnDrawReporterView view, boolean fullDisplay) {
57
+ view.setFullDisplay(fullDisplay);
58
+ }
59
+
60
+ public Map getExportedCustomBubblingEventTypeConstants() {
61
+ return MapBuilder.builder()
62
+ .put(
63
+ "onDrawNextFrameView",
64
+ MapBuilder.of("phasedRegistrationNames", MapBuilder.of("bubbled", "onDrawNextFrame")))
65
+ .build();
66
+ }
67
+
68
+ public static class RNSentryOnDrawReporterView extends View {
69
+
70
+ private static final ILogger logger = new AndroidLogger("RNSentryOnDrawReporterView");
71
+
72
+ private final @Nullable ReactApplicationContext reactContext;
73
+ private final @NotNull SentryDateProvider dateProvider = new SentryAndroidDateProvider();
74
+ private final @Nullable Runnable emitInitialDisplayEvent;
75
+ private final @Nullable Runnable emitFullDisplayEvent;
76
+ private final @Nullable BuildInfoProvider buildInfo;
77
+
78
+ public RNSentryOnDrawReporterView(@NotNull Context context) {
79
+ super(context);
80
+ reactContext = null;
81
+ buildInfo = null;
82
+ emitInitialDisplayEvent = null;
83
+ emitFullDisplayEvent = null;
37
84
  }
38
85
 
39
- @NotNull
40
- @Override
41
- public String getName() {
42
- return REACT_CLASS;
86
+ public RNSentryOnDrawReporterView(
87
+ @NotNull ReactApplicationContext context, @NotNull BuildInfoProvider buildInfoProvider) {
88
+ super(context);
89
+ reactContext = context;
90
+ buildInfo = buildInfoProvider;
91
+ emitInitialDisplayEvent = () -> emitDisplayEvent("initialDisplay");
92
+ emitFullDisplayEvent = () -> emitDisplayEvent("fullDisplay");
43
93
  }
44
94
 
45
- @NotNull
46
- @Override
47
- protected RNSentryOnDrawReporterView createViewInstance(@NotNull ThemedReactContext themedReactContext) {
48
- return new RNSentryOnDrawReporterView(mCallerContext, new BuildInfoProvider(new AndroidLogger()));
49
- }
95
+ public void setFullDisplay(boolean fullDisplay) {
96
+ if (!fullDisplay) {
97
+ return;
98
+ }
50
99
 
51
- @ReactProp(name = "initialDisplay", defaultBoolean = false)
52
- public void setInitialDisplay(RNSentryOnDrawReporterView view, boolean initialDisplay) {
53
- view.setInitialDisplay(initialDisplay);
100
+ logger.log(SentryLevel.DEBUG, "[TimeToDisplay] Register full display event emitter.");
101
+ registerForNextDraw(emitFullDisplayEvent);
54
102
  }
55
103
 
56
- @ReactProp(name = "fullDisplay", defaultBoolean = false)
57
- public void setFullDisplay(RNSentryOnDrawReporterView view, boolean fullDisplay) {
58
- view.setFullDisplay(fullDisplay);
104
+ public void setInitialDisplay(boolean initialDisplay) {
105
+ if (!initialDisplay) {
106
+ return;
107
+ }
108
+
109
+ logger.log(SentryLevel.DEBUG, "[TimeToDisplay] Register initial display event emitter.");
110
+ registerForNextDraw(emitInitialDisplayEvent);
59
111
  }
60
112
 
61
- public Map getExportedCustomBubblingEventTypeConstants() {
62
- return MapBuilder.builder().put(
63
- "onDrawNextFrameView",
64
- MapBuilder.of(
65
- "phasedRegistrationNames",
66
- MapBuilder.of("bubbled", "onDrawNextFrame")
67
- )
68
- ).build();
113
+ private void registerForNextDraw(@Nullable Runnable emitter) {
114
+ if (emitter == null) {
115
+ logger.log(
116
+ SentryLevel.ERROR,
117
+ "[TimeToDisplay] Won't emit next frame drawn event, emitter is null.");
118
+ return;
119
+ }
120
+ if (buildInfo == null) {
121
+ logger.log(
122
+ SentryLevel.ERROR,
123
+ "[TimeToDisplay] Won't emit next frame drawn event, buildInfo is null.");
124
+ return;
125
+ }
126
+ if (reactContext == null) {
127
+ logger.log(
128
+ SentryLevel.ERROR,
129
+ "[TimeToDisplay] Won't emit next frame drawn event, reactContext is null.");
130
+ return;
131
+ }
132
+
133
+ @Nullable Activity activity = reactContext.getCurrentActivity();
134
+ if (activity == null) {
135
+ logger.log(
136
+ SentryLevel.ERROR,
137
+ "[TimeToDisplay] Won't emit next frame drawn event, reactContext is null.");
138
+ return;
139
+ }
140
+
141
+ FirstDrawDoneListener.registerForNextDraw(activity, emitter, buildInfo);
69
142
  }
70
143
 
71
- public static class RNSentryOnDrawReporterView extends View {
72
-
73
- private static final ILogger logger = new AndroidLogger("RNSentryOnDrawReporterView");
74
-
75
- private final @Nullable ReactApplicationContext reactContext;
76
- private final @NotNull SentryDateProvider dateProvider = new SentryAndroidDateProvider();
77
- private final @Nullable Runnable emitInitialDisplayEvent;
78
- private final @Nullable Runnable emitFullDisplayEvent;
79
- private final @Nullable BuildInfoProvider buildInfo;
80
-
81
-
82
- public RNSentryOnDrawReporterView(@NotNull Context context) {
83
- super(context);
84
- reactContext = null;
85
- buildInfo = null;
86
- emitInitialDisplayEvent = null;
87
- emitFullDisplayEvent = null;
88
- }
89
-
90
- public RNSentryOnDrawReporterView(@NotNull ReactApplicationContext context, @NotNull BuildInfoProvider buildInfoProvider) {
91
- super(context);
92
- reactContext = context;
93
- buildInfo = buildInfoProvider;
94
- emitInitialDisplayEvent = () -> emitDisplayEvent("initialDisplay");
95
- emitFullDisplayEvent = () -> emitDisplayEvent("fullDisplay");
96
- }
97
-
98
- public void setFullDisplay(boolean fullDisplay) {
99
- if (!fullDisplay) {
100
- return;
101
- }
102
-
103
- logger.log(SentryLevel.DEBUG, "[TimeToDisplay] Register full display event emitter.");
104
- registerForNextDraw(emitFullDisplayEvent);
105
- }
106
-
107
- public void setInitialDisplay(boolean initialDisplay) {
108
- if (!initialDisplay) {
109
- return;
110
- }
111
-
112
- logger.log(SentryLevel.DEBUG, "[TimeToDisplay] Register initial display event emitter.");
113
- registerForNextDraw(emitInitialDisplayEvent);
114
- }
115
-
116
- private void registerForNextDraw(@Nullable Runnable emitter) {
117
- if (emitter == null) {
118
- logger.log(SentryLevel.ERROR, "[TimeToDisplay] Won't emit next frame drawn event, emitter is null.");
119
- return;
120
- }
121
- if (buildInfo == null) {
122
- logger.log(SentryLevel.ERROR, "[TimeToDisplay] Won't emit next frame drawn event, buildInfo is null.");
123
- return;
124
- }
125
- if (reactContext == null) {
126
- logger.log(SentryLevel.ERROR, "[TimeToDisplay] Won't emit next frame drawn event, reactContext is null.");
127
- return;
128
- }
129
-
130
- @Nullable Activity activity = reactContext.getCurrentActivity();
131
- if (activity == null) {
132
- logger.log(SentryLevel.ERROR, "[TimeToDisplay] Won't emit next frame drawn event, reactContext is null.");
133
- return;
134
- }
135
-
136
- FirstDrawDoneListener
137
- .registerForNextDraw(activity, emitter, buildInfo);
138
- }
139
-
140
- private void emitDisplayEvent(String type) {
141
- final SentryDate endDate = dateProvider.now();
142
-
143
- WritableMap event = Arguments.createMap();
144
- event.putString("type", type);
145
- event.putDouble("newFrameTimestampInSeconds", endDate.nanoTimestamp() / 1e9);
146
-
147
- if (reactContext == null) {
148
- logger.log(SentryLevel.ERROR, "[TimeToDisplay] Recorded next frame draw but can't emit the event, reactContext is null.");
149
- return;
150
- }
151
- reactContext
152
- .getJSModule(RCTEventEmitter.class)
153
- .receiveEvent(getId(), "onDrawNextFrameView", event);
154
- }
144
+ private void emitDisplayEvent(String type) {
145
+ final SentryDate endDate = dateProvider.now();
146
+
147
+ WritableMap event = Arguments.createMap();
148
+ event.putString("type", type);
149
+ event.putDouble("newFrameTimestampInSeconds", endDate.nanoTimestamp() / 1e9);
150
+
151
+ if (reactContext == null) {
152
+ logger.log(
153
+ SentryLevel.ERROR,
154
+ "[TimeToDisplay] Recorded next frame draw but can't emit the event, reactContext is"
155
+ + " null.");
156
+ return;
157
+ }
158
+ reactContext
159
+ .getJSModule(RCTEventEmitter.class)
160
+ .receiveEvent(getId(), "onDrawNextFrameView", event);
155
161
  }
162
+ }
156
163
  }
@@ -2,18 +2,16 @@ package io.sentry.react;
2
2
 
3
3
  import androidx.annotation.NonNull;
4
4
  import androidx.annotation.Nullable;
5
-
6
- import java.util.Arrays;
7
- import java.util.HashMap;
8
- import java.util.List;
9
- import java.util.Map;
10
-
5
+ import com.facebook.react.TurboReactPackage;
11
6
  import com.facebook.react.bridge.NativeModule;
12
7
  import com.facebook.react.bridge.ReactApplicationContext;
13
8
  import com.facebook.react.module.model.ReactModuleInfo;
14
9
  import com.facebook.react.module.model.ReactModuleInfoProvider;
15
- import com.facebook.react.TurboReactPackage;
16
10
  import com.facebook.react.uimanager.ViewManager;
11
+ import java.util.Arrays;
12
+ import java.util.HashMap;
13
+ import java.util.List;
14
+ import java.util.Map;
17
15
 
18
16
  public class RNSentryPackage extends TurboReactPackage {
19
17
 
@@ -42,18 +40,14 @@ public class RNSentryPackage extends TurboReactPackage {
42
40
  true, // hasConstants
43
41
  false, // isCxxModule
44
42
  isTurboModule // isTurboModule
45
- ));
43
+ ));
46
44
  return moduleInfos;
47
45
  };
48
46
  }
49
47
 
50
48
  @NonNull
51
49
  @Override
52
- public List<ViewManager> createViewManagers(
53
- ReactApplicationContext reactContext) {
54
- return Arrays.asList(
55
- new RNSentryOnDrawReporterManager(reactContext)
56
- );
50
+ public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
51
+ return Arrays.asList(new RNSentryOnDrawReporterManager(reactContext));
57
52
  }
58
-
59
53
  }
@@ -1,99 +1,105 @@
1
1
  package io.sentry.react;
2
2
 
3
+ import android.os.Bundle;
4
+ import android.view.View;
5
+ import android.view.ViewGroup;
3
6
  import androidx.annotation.NonNull;
4
7
  import androidx.fragment.app.Fragment;
5
8
  import androidx.fragment.app.FragmentManager;
6
9
  import androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks;
7
-
8
- import android.os.Bundle;
9
- import android.view.View;
10
- import android.view.ViewGroup;
11
-
12
10
  import com.facebook.react.bridge.ReactContext;
13
11
  import com.facebook.react.uimanager.UIManagerHelper;
14
12
  import com.facebook.react.uimanager.events.Event;
15
13
  import com.facebook.react.uimanager.events.EventDispatcher;
16
14
  import com.facebook.react.uimanager.events.EventDispatcherListener;
17
-
18
- import org.jetbrains.annotations.Nullable;
19
- import org.jetbrains.annotations.NotNull;
20
-
21
15
  import io.sentry.ILogger;
22
16
  import io.sentry.SentryLevel;
23
17
  import io.sentry.android.core.BuildInfoProvider;
24
18
  import io.sentry.android.core.internal.util.FirstDrawDoneListener;
19
+ import org.jetbrains.annotations.NotNull;
20
+ import org.jetbrains.annotations.Nullable;
25
21
 
26
22
  public class RNSentryReactFragmentLifecycleTracer extends FragmentLifecycleCallbacks {
27
23
 
28
- private @NotNull final BuildInfoProvider buildInfoProvider;
29
- private @NotNull final Runnable emitNewFrameEvent;
30
- private @NotNull final ILogger logger;
31
-
32
- public RNSentryReactFragmentLifecycleTracer(
33
- @NotNull BuildInfoProvider buildInfoProvider,
34
- @NotNull Runnable emitNewFrameEvent,
35
- @NotNull ILogger logger) {
36
- this.buildInfoProvider = buildInfoProvider;
37
- this.emitNewFrameEvent = emitNewFrameEvent;
38
- this.logger = logger;
24
+ private @NotNull final BuildInfoProvider buildInfoProvider;
25
+ private @NotNull final Runnable emitNewFrameEvent;
26
+ private @NotNull final ILogger logger;
27
+
28
+ public RNSentryReactFragmentLifecycleTracer(
29
+ @NotNull BuildInfoProvider buildInfoProvider,
30
+ @NotNull Runnable emitNewFrameEvent,
31
+ @NotNull ILogger logger) {
32
+ this.buildInfoProvider = buildInfoProvider;
33
+ this.emitNewFrameEvent = emitNewFrameEvent;
34
+ this.logger = logger;
35
+ }
36
+
37
+ @Override
38
+ public void onFragmentViewCreated(
39
+ @NotNull FragmentManager fm,
40
+ @NotNull Fragment f,
41
+ @NotNull View v,
42
+ @Nullable Bundle savedInstanceState) {
43
+ if (!("com.swmansion.rnscreens.ScreenStackFragment".equals(f.getClass().getCanonicalName()))) {
44
+ logger.log(
45
+ SentryLevel.DEBUG,
46
+ "Fragment is not a ScreenStackFragment, won't listen for the first draw.");
47
+ return;
39
48
  }
40
49
 
41
- @Override
42
- public void onFragmentViewCreated(
43
- @NotNull FragmentManager fm,
44
- @NotNull Fragment f,
45
- @NotNull View v,
46
- @Nullable Bundle savedInstanceState) {
47
- if (!("com.swmansion.rnscreens.ScreenStackFragment".equals(f.getClass().getCanonicalName()))) {
48
- logger.log(SentryLevel.DEBUG, "Fragment is not a ScreenStackFragment, won't listen for the first draw.");
49
- return;
50
- }
51
-
52
- if (!(v instanceof ViewGroup)) {
53
- logger.log(SentryLevel.WARNING, "Fragment view is not a ViewGroup, won't listen for the first draw.");
54
- return;
55
- }
50
+ if (!(v instanceof ViewGroup)) {
51
+ logger.log(
52
+ SentryLevel.WARNING,
53
+ "Fragment view is not a ViewGroup, won't listen for the first draw.");
54
+ return;
55
+ }
56
56
 
57
- final ViewGroup viewGroup = (ViewGroup) v;
58
- if (viewGroup.getChildCount() == 0) {
59
- logger.log(SentryLevel.WARNING, "Fragment view has no children, won't listen for the first draw.");
60
- return;
61
- }
57
+ final ViewGroup viewGroup = (ViewGroup) v;
58
+ if (viewGroup.getChildCount() == 0) {
59
+ logger.log(
60
+ SentryLevel.WARNING, "Fragment view has no children, won't listen for the first draw.");
61
+ return;
62
+ }
62
63
 
63
- final @Nullable View screen = viewGroup.getChildAt(0);
64
- if (screen == null || !(screen.getContext() instanceof ReactContext)) {
65
- logger.log(SentryLevel.WARNING, "Fragment view has no ReactContext, won't listen for the first draw.");
66
- return;
67
- }
64
+ final @Nullable View screen = viewGroup.getChildAt(0);
65
+ if (screen == null || !(screen.getContext() instanceof ReactContext)) {
66
+ logger.log(
67
+ SentryLevel.WARNING,
68
+ "Fragment view has no ReactContext, won't listen for the first draw.");
69
+ return;
70
+ }
68
71
 
69
- final int screenId = screen.getId();
70
- if (screenId == View.NO_ID) {
71
- logger.log(SentryLevel.WARNING, "Screen has no id, won't listen for the first draw.");
72
- return;
73
- }
72
+ final int screenId = screen.getId();
73
+ if (screenId == View.NO_ID) {
74
+ logger.log(SentryLevel.WARNING, "Screen has no id, won't listen for the first draw.");
75
+ return;
76
+ }
74
77
 
75
- final @Nullable EventDispatcher eventDispatcher = getEventDispatcherForReactTag(screen, screenId);
76
- if (eventDispatcher == null) {
77
- logger.log(SentryLevel.WARNING, "Screen has no event dispatcher, won't listen for the first draw.");
78
- return;
79
- }
78
+ final @Nullable EventDispatcher eventDispatcher =
79
+ getEventDispatcherForReactTag(screen, screenId);
80
+ if (eventDispatcher == null) {
81
+ logger.log(
82
+ SentryLevel.WARNING, "Screen has no event dispatcher, won't listen for the first draw.");
83
+ return;
84
+ }
80
85
 
81
- final @NotNull Runnable emitNewFrameEvent = this.emitNewFrameEvent;
82
- eventDispatcher.addListener(new EventDispatcherListener() {
83
- @Override
84
- public void onEventDispatch(Event event) {
85
- if ("com.swmansion.rnscreens.events.ScreenAppearEvent".equals(event.getClass().getCanonicalName())) {
86
- eventDispatcher.removeListener(this);
87
- FirstDrawDoneListener
88
- .registerForNextDraw(v, emitNewFrameEvent, buildInfoProvider);
89
- }
86
+ final @NotNull Runnable emitNewFrameEvent = this.emitNewFrameEvent;
87
+ eventDispatcher.addListener(
88
+ new EventDispatcherListener() {
89
+ @Override
90
+ public void onEventDispatch(Event event) {
91
+ if ("com.swmansion.rnscreens.events.ScreenAppearEvent"
92
+ .equals(event.getClass().getCanonicalName())) {
93
+ eventDispatcher.removeListener(this);
94
+ FirstDrawDoneListener.registerForNextDraw(v, emitNewFrameEvent, buildInfoProvider);
90
95
  }
96
+ }
91
97
  });
92
- }
98
+ }
93
99
 
94
- private static @Nullable EventDispatcher getEventDispatcherForReactTag(@NonNull View screen, int screenId) {
95
- return UIManagerHelper.getEventDispatcherForReactTag(
96
- UIManagerHelper.getReactContext(screen),
97
- screenId);
98
- }
100
+ private static @Nullable EventDispatcher getEventDispatcherForReactTag(
101
+ @NonNull View screen, int screenId) {
102
+ return UIManagerHelper.getEventDispatcherForReactTag(
103
+ UIManagerHelper.getReactContext(screen), screenId);
104
+ }
99
105
  }
@@ -2,21 +2,18 @@ package io.sentry.react;
2
2
 
3
3
  import io.sentry.Breadcrumb;
4
4
  import io.sentry.android.replay.DefaultReplayBreadcrumbConverter;
5
- import io.sentry.rrweb.RRWebEvent;
6
5
  import io.sentry.rrweb.RRWebBreadcrumbEvent;
6
+ import io.sentry.rrweb.RRWebEvent;
7
7
  import io.sentry.rrweb.RRWebSpanEvent;
8
-
9
8
  import java.util.HashMap;
9
+ import java.util.List;
10
+ import java.util.Map;
10
11
  import org.jetbrains.annotations.NotNull;
11
12
  import org.jetbrains.annotations.Nullable;
12
13
  import org.jetbrains.annotations.TestOnly;
13
14
 
14
- import java.util.List;
15
- import java.util.Map;
16
-
17
15
  public final class RNSentryReplayBreadcrumbConverter extends DefaultReplayBreadcrumbConverter {
18
- public RNSentryReplayBreadcrumbConverter() {
19
- }
16
+ public RNSentryReplayBreadcrumbConverter() {}
20
17
 
21
18
  @Override
22
19
  public @Nullable RRWebEvent convert(final @NotNull Breadcrumb breadcrumb) {
@@ -25,8 +22,8 @@ public final class RNSentryReplayBreadcrumbConverter extends DefaultReplayBreadc
25
22
  }
26
23
 
27
24
  // Do not add Sentry Event breadcrumbs to replay
28
- if (breadcrumb.getCategory().equals("sentry.event") ||
29
- breadcrumb.getCategory().equals("sentry.transaction")) {
25
+ if (breadcrumb.getCategory().equals("sentry.event")
26
+ || breadcrumb.getCategory().equals("sentry.transaction")) {
30
27
  return null;
31
28
  }
32
29
  if (breadcrumb.getCategory().equals("http")) {
@@ -49,7 +46,8 @@ public final class RNSentryReplayBreadcrumbConverter extends DefaultReplayBreadc
49
46
  // ignore native navigation breadcrumbs
50
47
  if (nativeBreadcrumb instanceof RRWebBreadcrumbEvent) {
51
48
  final RRWebBreadcrumbEvent rrWebBreadcrumb = (RRWebBreadcrumbEvent) nativeBreadcrumb;
52
- if (rrWebBreadcrumb.getCategory() != null && rrWebBreadcrumb.getCategory().equals("navigation")) {
49
+ if (rrWebBreadcrumb.getCategory() != null
50
+ && rrWebBreadcrumb.getCategory().equals("navigation")) {
53
51
  return null;
54
52
  }
55
53
  }
@@ -71,8 +69,8 @@ public final class RNSentryReplayBreadcrumbConverter extends DefaultReplayBreadc
71
69
 
72
70
  rrWebBreadcrumb.setCategory("ui.tap");
73
71
 
74
- rrWebBreadcrumb.setMessage(RNSentryReplayBreadcrumbConverter
75
- .getTouchPathMessage(breadcrumb.getData("path")));
72
+ rrWebBreadcrumb.setMessage(
73
+ RNSentryReplayBreadcrumbConverter.getTouchPathMessage(breadcrumb.getData("path")));
76
74
 
77
75
  setRRWebEventDefaultsFrom(rrWebBreadcrumb, breadcrumb);
78
76
  return rrWebBreadcrumb;
@@ -93,7 +91,7 @@ public final class RNSentryReplayBreadcrumbConverter extends DefaultReplayBreadc
93
91
  for (int i = Math.min(3, path.size() - 1); i >= 0; i--) {
94
92
  final @Nullable Object maybeItem = path.get(i);
95
93
  if (!(maybeItem instanceof Map)) {
96
- return null;
94
+ return null;
97
95
  }
98
96
 
99
97
  final @NotNull Map item = (Map) maybeItem;
@@ -115,19 +113,11 @@ public final class RNSentryReplayBreadcrumbConverter extends DefaultReplayBreadc
115
113
  boolean hasElement = maybeElement instanceof String;
116
114
  boolean hasFile = maybeFile instanceof String;
117
115
  if (hasElement && hasFile) {
118
- message.append('(')
119
- .append(maybeElement)
120
- .append(", ")
121
- .append(maybeFile)
122
- .append(')');
116
+ message.append('(').append(maybeElement).append(", ").append(maybeFile).append(')');
123
117
  } else if (hasElement) {
124
- message.append('(')
125
- .append(maybeElement)
126
- .append(')');
118
+ message.append('(').append(maybeElement).append(')');
127
119
  } else if (hasFile) {
128
- message.append('(')
129
- .append(maybeFile)
130
- .append(')');
120
+ message.append('(').append(maybeFile).append(')');
131
121
  }
132
122
 
133
123
  if (i > 0) {
@@ -140,12 +130,16 @@ public final class RNSentryReplayBreadcrumbConverter extends DefaultReplayBreadc
140
130
 
141
131
  @TestOnly
142
132
  public @Nullable RRWebEvent convertNetworkBreadcrumb(final @NotNull Breadcrumb breadcrumb) {
143
- final Double startTimestamp = breadcrumb.getData("start_timestamp") instanceof Number
144
- ? (Double) breadcrumb.getData("start_timestamp") : null;
145
- final Double endTimestamp = breadcrumb.getData("end_timestamp") instanceof Number
146
- ? (Double) breadcrumb.getData("end_timestamp") : null;
147
- final String url = breadcrumb.getData("url") instanceof String
148
- ? (String) breadcrumb.getData("url") : null;
133
+ final Double startTimestamp =
134
+ breadcrumb.getData("start_timestamp") instanceof Number
135
+ ? (Double) breadcrumb.getData("start_timestamp")
136
+ : null;
137
+ final Double endTimestamp =
138
+ breadcrumb.getData("end_timestamp") instanceof Number
139
+ ? (Double) breadcrumb.getData("end_timestamp")
140
+ : null;
141
+ final String url =
142
+ breadcrumb.getData("url") instanceof String ? (String) breadcrumb.getData("url") : null;
149
143
 
150
144
  if (startTimestamp == null || endTimestamp == null || url == null) {
151
145
  return null;
@@ -177,7 +171,8 @@ public final class RNSentryReplayBreadcrumbConverter extends DefaultReplayBreadc
177
171
  return rrWebSpanEvent;
178
172
  }
179
173
 
180
- private void setRRWebEventDefaultsFrom(final @NotNull RRWebBreadcrumbEvent rrWebBreadcrumb, final @NotNull Breadcrumb breadcrumb) {
174
+ private void setRRWebEventDefaultsFrom(
175
+ final @NotNull RRWebBreadcrumbEvent rrWebBreadcrumb, final @NotNull Breadcrumb breadcrumb) {
181
176
  rrWebBreadcrumb.setLevel(breadcrumb.getLevel());
182
177
  rrWebBreadcrumb.setData(breadcrumb.getData());
183
178
  rrWebBreadcrumb.setTimestamp(breadcrumb.getTimestamp().getTime());