Skip to content

New User Feedback form #4384

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 41 commits into from
Jun 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
62e71ff
added Feedback class and extended Contexts with it
stefanosiano Mar 14, 2025
c9b4850
Added Sentry.captureFeedback API
stefanosiano Mar 25, 2025
813ff1d
updated changelog
stefanosiano Mar 25, 2025
dd2d6a8
added tests
stefanosiano Mar 27, 2025
6428dfa
added scope replay id and screen as url
stefanosiano Mar 31, 2025
144bcca
added feedback as DataCategory for rate limit and client report
stefanosiano Apr 16, 2025
509f992
Merge branch 'refs/heads/main' into feat/new-user-feedback-logic
stefanosiano Apr 16, 2025
3c0a6fb
merged main
stefanosiano Apr 16, 2025
9e1066e
added tests
stefanosiano Apr 17, 2025
eadb567
Merge branch 'refs/heads/main' into feat/new-user-feedback-logic
stefanosiano Apr 17, 2025
8feeadc
fixed tests
stefanosiano Apr 17, 2025
986772d
started adding resources for UF widget
stefanosiano Apr 29, 2025
e19d122
started SentryFeedbackOptions
stefanosiano Apr 30, 2025
79052ad
Merge branch 'feat/new-user-feedback-logic' into feat/user-feedback-w…
stefanosiano May 7, 2025
5a83bb8
added all form options
stefanosiano May 9, 2025
ee44b18
Merge branch 'main' into feat/new-user-feedback-logic
stefanosiano May 9, 2025
212ffbf
merged main
stefanosiano May 9, 2025
2bf99b5
Merge branch 'feat/new-user-feedback-logic' into feat/user-feedback-w…
stefanosiano May 9, 2025
6eb876c
user feedback dialog now uses dialogTheme
stefanosiano May 14, 2025
a33ae00
Merge branch 'main' into feat/user-feedback-widget
stefanosiano May 14, 2025
d47f374
merged main
stefanosiano May 14, 2025
1a758a2
removed java options for send button colors. Replaced with theme sett…
stefanosiano May 14, 2025
9315f7b
added tests and UI tests
stefanosiano May 16, 2025
62cea5e
added comments
stefanosiano May 16, 2025
794bd66
added comments
stefanosiano May 16, 2025
f16ac66
added replay capturing on feedback dialog open
stefanosiano May 16, 2025
5388b42
added cancel button ui test
stefanosiano May 19, 2025
8aacd36
added cancel button ui test
stefanosiano May 19, 2025
8750c8d
Merge branch 'refs/heads/main' into feat/user-feedback-widget
stefanosiano May 19, 2025
6d14499
added Feedback.toString() and default values in javadoc of SentryFeed…
stefanosiano May 19, 2025
fb88c1f
merged main
stefanosiano May 19, 2025
b5eb64d
skipping replay in test when running on gh
stefanosiano May 20, 2025
d0ba126
skipping replay in test when running on gh
stefanosiano May 20, 2025
202759f
Merge branch 'main' into feat/user-feedback-widget
markushi May 22, 2025
7bc01eb
Merge branch 'main' into feat/user-feedback-widget
stefanosiano May 29, 2025
eebaaf3
removed rtl properties and supportsRtl flag
stefanosiano Jun 6, 2025
3fef7c4
updated changelog
stefanosiano Jun 6, 2025
536d522
Merge branch 'main' into feat/user-feedback-widget
stefanosiano Jun 6, 2025
994789a
renamed edit_text_border.xml to sentry_edit_text_border.xml
stefanosiano Jun 13, 2025
e6e37b1
Merge branch 'main' into feat/user-feedback-widget
stefanosiano Jun 13, 2025
fbbe36c
updated changelog
stefanosiano Jun 13, 2025
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
19 changes: 19 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,24 @@
# Changelog

## Unreleased

### Features

- Add New User Feedback form ([#4384](https://github.com/getsentry/sentry-java/pull/4384))
- We now introduce SentryUserFeedbackDialog, which extends AlertDialog, inheriting the show() and cancel() methods, among others.
To use it, just instantiate it and call show() on the instance (Sentry must be previously initialized).
For customization options, please check the [User Feedback documentation](https://docs.sentry.io/platforms/android/user-feedback/configuration/).
```java
import io.sentry.android.core.SentryUserFeedbackDialog;

new SentryUserFeedbackDialog.Builder(context).create().show();
```
```kotlin
import io.sentry.android.core.SentryUserFeedbackDialog

SentryUserFeedbackDialog.Builder(context).create().show()
```

## 8.13.3

### Fixes
Expand Down
18 changes: 18 additions & 0 deletions sentry-android-core/api/sentry-android-core.api
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,24 @@ public final class io/sentry/android/core/SentryPerformanceProvider {
public fun shutdown ()V
}

public final class io/sentry/android/core/SentryUserFeedbackDialog : android/app/AlertDialog {
public fun setCancelable (Z)V
public fun setOnDismissListener (Landroid/content/DialogInterface$OnDismissListener;)V
public fun show ()V
}

public class io/sentry/android/core/SentryUserFeedbackDialog$Builder {
public fun <init> (Landroid/content/Context;)V
public fun <init> (Landroid/content/Context;I)V
public fun <init> (Landroid/content/Context;ILio/sentry/android/core/SentryUserFeedbackDialog$OptionsConfiguration;)V
public fun <init> (Landroid/content/Context;Lio/sentry/android/core/SentryUserFeedbackDialog$OptionsConfiguration;)V
public fun create ()Lio/sentry/android/core/SentryUserFeedbackDialog;
}

public abstract interface class io/sentry/android/core/SentryUserFeedbackDialog$OptionsConfiguration {
public abstract fun configure (Landroid/content/Context;Lio/sentry/SentryFeedbackOptions;)V
}

public class io/sentry/android/core/SpanFrameMetricsCollector : io/sentry/IPerformanceContinuousCollector, io/sentry/android/core/internal/util/SentryFrameMetricsCollector$FrameMetricsCollectorListener {
protected final field lock Lio/sentry/util/AutoClosableReentrantLock;
public fun <init> (Lio/sentry/android/core/SentryAndroidOptions;Lio/sentry/android/core/internal/util/SentryFrameMetricsCollector;)V
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import io.sentry.ILogger;
import io.sentry.InitPriority;
import io.sentry.ProfileLifecycle;
import io.sentry.SentryFeedbackOptions;
import io.sentry.SentryIntegrationPackageStorage;
import io.sentry.SentryLevel;
import io.sentry.protocol.SdkVersion;
Expand Down Expand Up @@ -126,6 +127,18 @@ final class ManifestMetadataReader {
static final String ENABLE_AUTO_TRACE_ID_GENERATION =
"io.sentry.traces.enable-auto-id-generation";

static final String FEEDBACK_NAME_REQUIRED = "io.sentry.feedback.is-name-required";

static final String FEEDBACK_SHOW_NAME = "io.sentry.feedback.show-name";

static final String FEEDBACK_EMAIL_REQUIRED = "io.sentry.feedback.is-email-required";

static final String FEEDBACK_SHOW_EMAIL = "io.sentry.feedback.show-email";

static final String FEEDBACK_USE_SENTRY_USER = "io.sentry.feedback.use-sentry-user";

static final String FEEDBACK_SHOW_BRANDING = "io.sentry.feedback.show-branding";

/** ManifestMetadataReader ctor */
private ManifestMetadataReader() {}

Expand Down Expand Up @@ -477,6 +490,21 @@ static void applyMetadata(
options
.getLogs()
.setEnabled(readBool(metadata, logger, ENABLE_LOGS, options.getLogs().isEnabled()));

final @NotNull SentryFeedbackOptions feedbackOptions = options.getFeedbackOptions();
feedbackOptions.setNameRequired(
readBool(metadata, logger, FEEDBACK_NAME_REQUIRED, feedbackOptions.isNameRequired()));
feedbackOptions.setShowName(
readBool(metadata, logger, FEEDBACK_SHOW_NAME, feedbackOptions.isShowName()));
feedbackOptions.setEmailRequired(
readBool(metadata, logger, FEEDBACK_EMAIL_REQUIRED, feedbackOptions.isEmailRequired()));
feedbackOptions.setShowEmail(
readBool(metadata, logger, FEEDBACK_SHOW_EMAIL, feedbackOptions.isShowEmail()));
feedbackOptions.setUseSentryUser(
readBool(
metadata, logger, FEEDBACK_USE_SENTRY_USER, feedbackOptions.isUseSentryUser()));
feedbackOptions.setShowBranding(
readBool(metadata, logger, FEEDBACK_SHOW_BRANDING, feedbackOptions.isShowBranding()));
}
options
.getLogger()
Expand Down
Loading
Loading