Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Next Next commit
redactClasses -> redactViewClasses
  • Loading branch information
romtsn committed Sep 16, 2024
commit f434c5655a3ffff7e77ed6a4e747b7fde4e05190
4 changes: 2 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
- `android:tag="sentry-redact|sentry-ignore"` in XML or `view.setTag("sentry-redact|sentry-ignore")` in code tags
- if you already have a tag set for a view, you can set a tag by id: `<tag android:id="@id/sentry_privacy" android:value="redact|ignore"/>` in XML or `view.setTag(io.sentry.android.replay.R.id.sentry_privacy, "redact|ignore")` in code
- `view.sentryReplayRedact()` or `view.sentryReplayIgnore()` extension functions
- redact/ignore `View`s of a certain type by adding fully-qualified classname to one of the lists `options.experimental.sessionReplay.addRedactClass()` or `options.experimental.sessionReplay.addIgnoreClass()`. Note, that all of the view subclasses/subtypes will be redacted/ignored as well
- For example, (this is already a default behavior) to redact all `TextView`s and their subclasses (`RadioButton`, `EditText`, etc.): `options.experimental.sessionReplay.addRedactClass("android.widget.TextView")`
- redact/ignore `View`s of a certain type by adding fully-qualified classname to one of the lists `options.experimental.sessionReplay.addRedactViewClass()` or `options.experimental.sessionReplay.addIgnoreViewClass()`. Note, that all of the view subclasses/subtypes will be redacted/ignored as well
- For example, (this is already a default behavior) to redact all `TextView`s and their subclasses (`RadioButton`, `EditText`, etc.): `options.experimental.sessionReplay.addRedactViewClass("android.widget.TextView")`
- If you're using code obfuscation, adjust your proguard-rules accordingly, so your custom view class name is not minified

*Breaking changes*:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1474,8 +1474,8 @@ class ManifestMetadataReaderTest {
ManifestMetadataReader.applyMetadata(context, fixture.options, fixture.buildInfoProvider)

// Assert
assertTrue(fixture.options.experimental.sessionReplay.ignoreClasses.contains(SentryReplayOptions.IMAGE_VIEW_CLASS_NAME))
assertTrue(fixture.options.experimental.sessionReplay.ignoreClasses.contains(SentryReplayOptions.TEXT_VIEW_CLASS_NAME))
assertTrue(fixture.options.experimental.sessionReplay.ignoreViewClasses.contains(SentryReplayOptions.IMAGE_VIEW_CLASS_NAME))
assertTrue(fixture.options.experimental.sessionReplay.ignoreViewClasses.contains(SentryReplayOptions.TEXT_VIEW_CLASS_NAME))
}

@Test
Expand All @@ -1487,7 +1487,7 @@ class ManifestMetadataReaderTest {
ManifestMetadataReader.applyMetadata(context, fixture.options, fixture.buildInfoProvider)

// Assert
assertTrue(fixture.options.experimental.sessionReplay.redactClasses.contains(SentryReplayOptions.IMAGE_VIEW_CLASS_NAME))
assertTrue(fixture.options.experimental.sessionReplay.redactClasses.contains(SentryReplayOptions.TEXT_VIEW_CLASS_NAME))
assertTrue(fixture.options.experimental.sessionReplay.redactViewClasses.contains(SentryReplayOptions.IMAGE_VIEW_CLASS_NAME))
assertTrue(fixture.options.experimental.sessionReplay.redactViewClasses.contains(SentryReplayOptions.TEXT_VIEW_CLASS_NAME))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -262,11 +262,11 @@ sealed class ViewHierarchyNode(
return true
}

if (this.javaClass.isAssignableFrom(options.experimental.sessionReplay.ignoreClasses)) {
if (this.javaClass.isAssignableFrom(options.experimental.sessionReplay.ignoreViewClasses)) {
return false
}

return this.javaClass.isAssignableFrom(options.experimental.sessionReplay.redactClasses)
return this.javaClass.isAssignableFrom(options.experimental.sessionReplay.redactViewClasses)
}

fun fromView(view: View, parent: ViewHierarchyNode?, distance: Int, options: SentryOptions): ViewHierarchyNode {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ class RedactionOptionsTest {
buildActivity(ExampleActivity::class.java).setup()

val options = SentryOptions().apply {
experimental.sessionReplay.redactClasses.add(CustomView::class.java.canonicalName)
experimental.sessionReplay.redactViewClasses.add(CustomView::class.java.canonicalName)
}

val customViewNode = ViewHierarchyNode.fromView(ExampleActivity.customView!!, null, 0, options)
Expand All @@ -190,7 +190,7 @@ class RedactionOptionsTest {

val options = SentryOptions().apply {
experimental.sessionReplay.redactAllText = true // all TextView subclasses
experimental.sessionReplay.ignoreClasses.add(RadioButton::class.java.canonicalName)
experimental.sessionReplay.ignoreViewClasses.add(RadioButton::class.java.canonicalName)
}

val textNode = ViewHierarchyNode.fromView(ExampleActivity.textView!!, null, 0, options)
Expand All @@ -205,7 +205,7 @@ class RedactionOptionsTest {
buildActivity(ExampleActivity::class.java).setup()

val options = SentryOptions().apply {
experimental.sessionReplay.ignoreClasses.add(LinearLayout::class.java.canonicalName)
experimental.sessionReplay.ignoreViewClasses.add(LinearLayout::class.java.canonicalName)
}

val linearLayoutNode = ViewHierarchyNode.fromView(ExampleActivity.textView!!.parent as LinearLayout, null, 0, options)
Expand Down
8 changes: 4 additions & 4 deletions sentry/api/sentry.api
Original file line number Diff line number Diff line change
Expand Up @@ -2703,14 +2703,14 @@ public final class io/sentry/SentryReplayOptions {
public static final field TEXT_VIEW_CLASS_NAME Ljava/lang/String;
public fun <init> ()V
public fun <init> (Ljava/lang/Double;Ljava/lang/Double;)V
public fun addIgnoreClass (Ljava/lang/String;)V
public fun addRedactClass (Ljava/lang/String;)V
public fun addIgnoreViewClass (Ljava/lang/String;)V
public fun addRedactViewClass (Ljava/lang/String;)V
public fun getErrorReplayDuration ()J
public fun getFrameRate ()I
public fun getIgnoreClasses ()Ljava/util/Set;
public fun getIgnoreViewClasses ()Ljava/util/Set;
public fun getOnErrorSampleRate ()Ljava/lang/Double;
public fun getQuality ()Lio/sentry/SentryReplayOptions$SentryReplayQuality;
public fun getRedactClasses ()Ljava/util/Set;
public fun getRedactViewClasses ()Ljava/util/Set;
public fun getSessionDuration ()J
public fun getSessionSampleRate ()Ljava/lang/Double;
public fun getSessionSegmentDuration ()J
Expand Down
36 changes: 18 additions & 18 deletions sentry/src/main/java/io/sentry/SentryReplayOptions.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public enum SentryReplayQuality {
*
* <p>Default is empty.
*/
private Set<String> redactClasses = new CopyOnWriteArraySet<>();
private Set<String> redactViewClasses = new CopyOnWriteArraySet<>();

/**
* Ignore all views with the specified class names from redaction. The class name is the fully
Expand All @@ -73,7 +73,7 @@ public enum SentryReplayQuality {
*
* <p>Default is empty.
*/
private Set<String> ignoreClasses = new CopyOnWriteArraySet<>();
private Set<String> ignoreViewClasses = new CopyOnWriteArraySet<>();

/**
* Defines the quality of the session replay. The higher the quality, the more accurate the replay
Expand Down Expand Up @@ -154,11 +154,11 @@ public void setSessionSampleRate(final @Nullable Double sessionSampleRate) {
*/
public void setRedactAllText(final boolean redactAllText) {
if (redactAllText) {
addRedactClass(TEXT_VIEW_CLASS_NAME);
ignoreClasses.remove(TEXT_VIEW_CLASS_NAME);
addRedactViewClass(TEXT_VIEW_CLASS_NAME);
ignoreViewClasses.remove(TEXT_VIEW_CLASS_NAME);
} else {
addIgnoreClass(TEXT_VIEW_CLASS_NAME);
redactClasses.remove(TEXT_VIEW_CLASS_NAME);
addIgnoreViewClass(TEXT_VIEW_CLASS_NAME);
redactViewClasses.remove(TEXT_VIEW_CLASS_NAME);
}
}

Expand All @@ -172,30 +172,30 @@ public void setRedactAllText(final boolean redactAllText) {
*/
public void setRedactAllImages(final boolean redactAllImages) {
if (redactAllImages) {
addRedactClass(IMAGE_VIEW_CLASS_NAME);
ignoreClasses.remove(IMAGE_VIEW_CLASS_NAME);
addRedactViewClass(IMAGE_VIEW_CLASS_NAME);
ignoreViewClasses.remove(IMAGE_VIEW_CLASS_NAME);
} else {
addIgnoreClass(IMAGE_VIEW_CLASS_NAME);
redactClasses.remove(IMAGE_VIEW_CLASS_NAME);
addIgnoreViewClass(IMAGE_VIEW_CLASS_NAME);
redactViewClasses.remove(IMAGE_VIEW_CLASS_NAME);
}
}

@NotNull
public Set<String> getRedactClasses() {
return this.redactClasses;
public Set<String> getRedactViewClasses() {
return this.redactViewClasses;
}

public void addRedactClass(final @NotNull String className) {
this.redactClasses.add(className);
public void addRedactViewClass(final @NotNull String className) {
this.redactViewClasses.add(className);
}

@NotNull
public Set<String> getIgnoreClasses() {
return this.ignoreClasses;
public Set<String> getIgnoreViewClasses() {
return this.ignoreViewClasses;
}

public void addIgnoreClass(final @NotNull String className) {
this.ignoreClasses.add(className);
public void addIgnoreViewClass(final @NotNull String className) {
this.ignoreViewClasses.add(className);
}

@ApiStatus.Internal
Expand Down