Skip to content

Commit 134eb16

Browse files
Hints are now used via a Hints object and passed into beforeSend and EventProcessor as @NotNull Hints object (#2045)
* Replace hint Map with Hints object * Add changelog * Fix typo in changelog * Fix link in changelog * Attachments can be manipulated via hints (#2046) * Store attachments in hints and allow manipulation in beforeSend and eventProcessor * Add changelog * Add tests for breadcrumbs and attachments via hints * Update CHANGELOG.md Co-authored-by: Philipp Hofmann <[email protected]> * Rename AttachmentContainer to Attachments * Use long for test * Move attachments into Hints * Fix kotlin/java interop for Hints * Convert screenshot from map entry to property * Rename hint name param * Rename clear to clearAttachments * Use kotlin short version access for getScreenshot * Move AttachmentsTest into HintsTest; add param names * Make primitiveMapping table static * Use ArrayList as there should not be a synchronization issue for hints Co-authored-by: Philipp Hofmann <[email protected]> * Rename Hints to Hint * Remove commented out code * Code Review * Rename SentryFallbackConsumer as it is Hints specific Co-authored-by: Philipp Hofmann <[email protected]>
1 parent 191ca19 commit 134eb16

File tree

92 files changed

+1526
-860
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

92 files changed

+1526
-860
lines changed

CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
- Allow setting native Android SDK name during build ([#2035](https://github.com/getsentry/sentry-java/pull/2035))
1313
- Include application permissions in Android events ([#2018](https://github.com/getsentry/sentry-java/pull/2018))
1414
- Automatically create transactions for UI events ([#1975](https://github.com/getsentry/sentry-java/pull/1975))
15+
- Hints are now used via a Hint object and passed into beforeSend and EventProcessor as @NotNull Hint object ([#2045](https://github.com/getsentry/sentry-java/pull/2045))
16+
- Attachments can be manipulated via hint ([#2046](https://github.com/getsentry/sentry-java/pull/2046))
1517

1618
### Fixes
1719

@@ -1660,4 +1662,4 @@ Features from the current SDK like `ANR` are also available (by default triggere
16601662
Packages were released on [`bintray`](https://dl.bintray.com/getsentry/sentry-android/io/sentry/), [`jcenter`](https://jcenter.bintray.com/io/sentry/sentry-android/)
16611663

16621664
We'd love to get feedback and we'll work in getting the GA `2.0.0` out soon.
1663-
Until then, the [stable SDK offered by Sentry is at version 1.7.28](https://github.com/getsentry/sentry-java/releases/tag/v1.7.28)
1665+
Until then, the [stable SDK offered by Sentry is at version 1.7.28](https://github.com/getsentry/sentry-java/releases/tag/v1.7.28)

sentry-android-core/api/sentry-android-core.api

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public final class io/sentry/android/core/ScreenshotEventProcessor : android/app
110110
public fun onActivitySaveInstanceState (Landroid/app/Activity;Landroid/os/Bundle;)V
111111
public fun onActivityStarted (Landroid/app/Activity;)V
112112
public fun onActivityStopped (Landroid/app/Activity;)V
113-
public fun process (Lio/sentry/SentryEvent;Ljava/util/Map;)Lio/sentry/SentryEvent;
113+
public fun process (Lio/sentry/SentryEvent;Lio/sentry/hints/Hint;)Lio/sentry/SentryEvent;
114114
}
115115

116116
public final class io/sentry/android/core/SentryAndroid {

sentry-android-core/src/main/java/io/sentry/android/core/ActivityLifecycleIntegration.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919
import io.sentry.SentryLevel;
2020
import io.sentry.SentryOptions;
2121
import io.sentry.SpanStatus;
22+
import io.sentry.hints.Hint;
2223
import io.sentry.util.Objects;
2324
import java.io.Closeable;
2425
import java.io.IOException;
2526
import java.util.Date;
26-
import java.util.HashMap;
2727
import java.util.List;
2828
import java.util.Map;
2929
import java.util.WeakHashMap;
@@ -126,10 +126,10 @@ private void addBreadcrumb(final @NotNull Activity activity, final @NotNull Stri
126126
breadcrumb.setCategory("ui.lifecycle");
127127
breadcrumb.setLevel(SentryLevel.INFO);
128128

129-
final Map<String, Object> hintMap = new HashMap<>();
130-
hintMap.put(ANDROID_ACTIVITY, activity);
129+
final Hint hint = new Hint();
130+
hint.set(ANDROID_ACTIVITY, activity);
131131

132-
hub.addBreadcrumb(breadcrumb, hintMap);
132+
hub.addBreadcrumb(breadcrumb, hint);
133133
}
134134
}
135135

sentry-android-core/src/main/java/io/sentry/android/core/AppComponentsBreadcrumbsIntegration.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,12 @@
1111
import io.sentry.SentryLevel;
1212
import io.sentry.SentryOptions;
1313
import io.sentry.android.core.internal.util.DeviceOrientations;
14+
import io.sentry.hints.Hint;
1415
import io.sentry.protocol.Device;
1516
import io.sentry.util.Objects;
1617
import java.io.Closeable;
1718
import java.io.IOException;
18-
import java.util.HashMap;
1919
import java.util.Locale;
20-
import java.util.Map;
2120
import org.jetbrains.annotations.NotNull;
2221
import org.jetbrains.annotations.Nullable;
2322

@@ -100,10 +99,10 @@ public void onConfigurationChanged(@NotNull Configuration newConfig) {
10099
breadcrumb.setData("position", orientation);
101100
breadcrumb.setLevel(SentryLevel.INFO);
102101

103-
final Map<String, Object> hintMap = new HashMap<>();
104-
hintMap.put(ANDROID_CONFIGURATION, newConfig);
102+
final Hint hint = new Hint();
103+
hint.set(ANDROID_CONFIGURATION, newConfig);
105104

106-
hub.addBreadcrumb(breadcrumb, hintMap);
105+
hub.addBreadcrumb(breadcrumb, hint);
107106
}
108107
}
109108

sentry-android-core/src/main/java/io/sentry/android/core/DefaultAndroidEventProcessor.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import io.sentry.android.core.internal.util.DeviceOrientations;
3131
import io.sentry.android.core.internal.util.MainThreadChecker;
3232
import io.sentry.android.core.internal.util.RootChecker;
33+
import io.sentry.hints.Hint;
3334
import io.sentry.protocol.App;
3435
import io.sentry.protocol.Device;
3536
import io.sentry.protocol.OperatingSystem;
@@ -118,8 +119,7 @@ public DefaultAndroidEventProcessor(
118119
}
119120

120121
@Override
121-
public @NotNull SentryEvent process(
122-
final @NotNull SentryEvent event, final @Nullable Map<String, Object> hint) {
122+
public @NotNull SentryEvent process(final @NotNull SentryEvent event, final @NotNull Hint hint) {
123123
final boolean applyScopeData = shouldApplyScopeData(event, hint);
124124
if (applyScopeData) {
125125
// we only set memory data if it's not a hard crash, when it's a hard crash the event is
@@ -145,7 +145,7 @@ private void setCommons(
145145
}
146146

147147
private boolean shouldApplyScopeData(
148-
final @NotNull SentryBaseEvent event, final @Nullable Map<String, Object> hint) {
148+
final @NotNull SentryBaseEvent event, final @NotNull Hint hint) {
149149
if (HintUtils.shouldApplyScopeData(hint)) {
150150
return true;
151151
} else {
@@ -885,7 +885,7 @@ private void setSideLoadedInfo(final @NotNull SentryBaseEvent event) {
885885

886886
@Override
887887
public @NotNull SentryTransaction process(
888-
final @NotNull SentryTransaction transaction, final @Nullable Map<String, Object> hint) {
888+
final @NotNull SentryTransaction transaction, final @NotNull Hint hint) {
889889
final boolean applyScopeData = shouldApplyScopeData(transaction, hint);
890890

891891
if (applyScopeData) {

sentry-android-core/src/main/java/io/sentry/android/core/EnvelopeFileObserver.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.sentry.android.core;
22

33
import static io.sentry.SentryLevel.ERROR;
4-
import static io.sentry.TypeCheckHint.SENTRY_TYPE_CHECK_HINT;
54

65
import android.os.FileObserver;
76
import io.sentry.IEnvelopeSender;
@@ -10,13 +9,13 @@
109
import io.sentry.hints.ApplyScopeData;
1110
import io.sentry.hints.Cached;
1211
import io.sentry.hints.Flushable;
12+
import io.sentry.hints.Hint;
1313
import io.sentry.hints.Resettable;
1414
import io.sentry.hints.Retryable;
1515
import io.sentry.hints.SubmissionResult;
16+
import io.sentry.util.HintUtils;
1617
import io.sentry.util.Objects;
1718
import java.io.File;
18-
import java.util.HashMap;
19-
import java.util.Map;
2019
import java.util.concurrent.CountDownLatch;
2120
import java.util.concurrent.TimeUnit;
2221
import org.jetbrains.annotations.NotNull;
@@ -58,12 +57,11 @@ public void onEvent(int eventType, @Nullable String relativePath) {
5857

5958
// TODO: Only some event types should be pass through?
6059

61-
final CachedEnvelopeHint hint = new CachedEnvelopeHint(flushTimeoutMillis, logger);
60+
final CachedEnvelopeHint cachedHint = new CachedEnvelopeHint(flushTimeoutMillis, logger);
6261

63-
final Map<String, Object> hintMap = new HashMap<>();
64-
hintMap.put(SENTRY_TYPE_CHECK_HINT, hint);
62+
final Hint hint = HintUtils.createWithTypeCheckHint(cachedHint);
6563

66-
envelopeSender.processEnvelopeFile(this.rootPath + File.separator + relativePath, hintMap);
64+
envelopeSender.processEnvelopeFile(this.rootPath + File.separator + relativePath, hint);
6765
}
6866

6967
private static final class CachedEnvelopeHint

sentry-android-core/src/main/java/io/sentry/android/core/PerformanceAndroidEventProcessor.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import io.sentry.EventProcessor;
88
import io.sentry.SentryEvent;
99
import io.sentry.SpanContext;
10+
import io.sentry.hints.Hint;
1011
import io.sentry.protocol.MeasurementValue;
1112
import io.sentry.protocol.SentryId;
1213
import io.sentry.protocol.SentrySpan;
@@ -42,7 +43,7 @@ final class PerformanceAndroidEventProcessor implements EventProcessor {
4243
*/
4344
@Override
4445
@Nullable
45-
public SentryEvent process(@NotNull SentryEvent event, @Nullable Map<String, Object> hint) {
46+
public SentryEvent process(@NotNull SentryEvent event, @NotNull Hint hint) {
4647
// that's only necessary because on newer versions of Unity, if not overriding this method, it's
4748
// throwing 'java.lang.AbstractMethodError: abstract method' and the reason is probably
4849
// compilation mismatch.
@@ -52,7 +53,7 @@ public SentryEvent process(@NotNull SentryEvent event, @Nullable Map<String, Obj
5253
@SuppressWarnings("NullAway")
5354
@Override
5455
public synchronized @NotNull SentryTransaction process(
55-
@NotNull SentryTransaction transaction, @Nullable Map<String, Object> hint) {
56+
@NotNull SentryTransaction transaction, @NotNull Hint hint) {
5657

5758
if (!options.isTracingEnabled()) {
5859
return transaction;

sentry-android-core/src/main/java/io/sentry/android/core/ScreenshotEventProcessor.java

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.sentry.android.core;
22

33
import static io.sentry.TypeCheckHint.ANDROID_ACTIVITY;
4-
import static io.sentry.TypeCheckHint.SENTRY_SCREENSHOT;
54

65
import android.annotation.SuppressLint;
76
import android.app.Activity;
@@ -17,13 +16,12 @@
1716
import io.sentry.EventProcessor;
1817
import io.sentry.SentryEvent;
1918
import io.sentry.SentryLevel;
19+
import io.sentry.hints.Hint;
2020
import io.sentry.util.Objects;
2121
import java.io.ByteArrayOutputStream;
2222
import java.io.Closeable;
2323
import java.io.IOException;
2424
import java.lang.ref.WeakReference;
25-
import java.util.HashMap;
26-
import java.util.Map;
2725
import org.jetbrains.annotations.ApiStatus;
2826
import org.jetbrains.annotations.NotNull;
2927

@@ -68,8 +66,7 @@ public ScreenshotEventProcessor(
6866

6967
@SuppressWarnings("NullAway")
7068
@Override
71-
public @NotNull SentryEvent process(
72-
final @NotNull SentryEvent event, @Nullable Map<String, Object> hint) {
69+
public @NotNull SentryEvent process(final @NotNull SentryEvent event, @NotNull Hint hint) {
7370
if (options.isAttachScreenshot() && event.isErrored() && currentActivity != null) {
7471
final Activity activity = currentActivity.get();
7572
if (isActivityValid(activity)
@@ -93,16 +90,10 @@ public ScreenshotEventProcessor(
9390
// Some formats, like PNG which is lossless, will ignore the quality setting.
9491
bitmap.compress(Bitmap.CompressFormat.PNG, 0, byteArrayOutputStream);
9592

96-
if (hint == null) {
97-
hint = new HashMap<>();
98-
}
99-
10093
if (byteArrayOutputStream.size() > 0) {
10194
// screenshot png is around ~100-150 kb
102-
hint.put(
103-
SENTRY_SCREENSHOT,
104-
Attachment.fromScreenshot(byteArrayOutputStream.toByteArray()));
105-
hint.put(ANDROID_ACTIVITY, activity);
95+
hint.setScreenshot(Attachment.fromScreenshot(byteArrayOutputStream.toByteArray()));
96+
hint.set(ANDROID_ACTIVITY, activity);
10697
} else {
10798
this.options
10899
.getLogger()

sentry-android-core/src/main/java/io/sentry/android/core/SystemEventsBreadcrumbsIntegration.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import io.sentry.Integration;
4444
import io.sentry.SentryLevel;
4545
import io.sentry.SentryOptions;
46+
import io.sentry.hints.Hint;
4647
import io.sentry.util.Objects;
4748
import io.sentry.util.StringUtils;
4849
import java.io.Closeable;
@@ -215,10 +216,10 @@ public void onReceive(Context context, Intent intent) {
215216
}
216217
breadcrumb.setLevel(SentryLevel.INFO);
217218

218-
final Map<String, Object> hintMap = new HashMap<>();
219-
hintMap.put(ANDROID_INTENT, intent);
219+
final Hint hint = new Hint();
220+
hint.set(ANDROID_INTENT, intent);
220221

221-
hub.addBreadcrumb(breadcrumb, hintMap);
222+
hub.addBreadcrumb(breadcrumb, hint);
222223
}
223224
}
224225
}

sentry-android-core/src/main/java/io/sentry/android/core/TempSensorBreadcrumbsIntegration.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,10 @@
1313
import io.sentry.Integration;
1414
import io.sentry.SentryLevel;
1515
import io.sentry.SentryOptions;
16+
import io.sentry.hints.Hint;
1617
import io.sentry.util.Objects;
1718
import java.io.Closeable;
1819
import java.io.IOException;
19-
import java.util.HashMap;
20-
import java.util.Map;
2120
import org.jetbrains.annotations.NotNull;
2221
import org.jetbrains.annotations.Nullable;
2322
import org.jetbrains.annotations.TestOnly;
@@ -107,10 +106,10 @@ public void onSensorChanged(final @NotNull SensorEvent event) {
107106
breadcrumb.setLevel(SentryLevel.INFO);
108107
breadcrumb.setData("degree", event.values[0]); // Celsius
109108

110-
final Map<String, Object> hintMap = new HashMap<>();
111-
hintMap.put(ANDROID_SENSOR_EVENT, event);
109+
final Hint hint = new Hint();
110+
hint.set(ANDROID_SENSOR_EVENT, event);
112111

113-
hub.addBreadcrumb(breadcrumb, hintMap);
112+
hub.addBreadcrumb(breadcrumb, hint);
114113
}
115114
}
116115

0 commit comments

Comments
 (0)