Skip to content

Commit 611edbc

Browse files
committed
support @id/foo case
(cherry picked from commit c57d5c2) # Conflicts: # sdk/@launchdarkly/observability-android/lib/src/main/kotlin/com/launchdarkly/observability/replay/PrivacyProfile.kt
2 parents e13a244 + c57d5c2 commit 611edbc

3 files changed

Lines changed: 11 additions & 6 deletions

File tree

sdk/@launchdarkly/observability-android/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ val sessionReplay = SessionReplay(
252252
),
253253
maskXMLViewIds = listOf(
254254
// Masks by resource entry name (from resources.getResourceEntryName(view.id)).
255-
// Accepts either "@+id/foo" or "foo".
255+
// Accepts "@+id/foo", "@id/foo", or "foo".
256256
"@+id/password",
257257
"credit_card_number",
258258
),

sdk/@launchdarkly/observability-android/lib/src/main/kotlin/com/launchdarkly/observability/replay/PrivacyProfile.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ import com.launchdarkly.observability.replay.masking.MaskTarget
1717
* @param maskImageViews Set to true to mask [ImageView] targets by exact class match.
1818
* @param maskViews Additional Views to mask by exact class match (see [viewsMatcher]).
1919
* @param maskXMLViewIds Additional Views to mask by resource entry name (see [xmlViewIdsMatcher]).
20+
* accepts `"@+id/foo"`, `"@id/foo"`, or `"foo"`.
2021
* @param maskBySemanticsKeywords Set to true to enable masking of "sensitive" targets detected by
2122
* semantic keywords (password + keyword heuristics).
22-
* Accepts either `"@+id/foo"` or `"foo"`.
2323
**/
2424
data class PrivacyProfile(
2525
val maskTextInputs: Boolean = true,
@@ -36,8 +36,11 @@ data class PrivacyProfile(
3636
}
3737

3838
private val maskXMLViewIdSet = maskXMLViewIds.map {
39-
if (it.startsWith("@+id/")) return@map it.substring(5)
40-
return@map it
39+
when {
40+
it.startsWith("@+id/") -> it.substring(5)
41+
it.startsWith("@id/") -> it.substring(4)
42+
else -> it
43+
}
4144
}.toSet()
4245

4346
/**

sdk/@launchdarkly/observability-android/lib/src/test/kotlin/com/launchdarkly/observability/replay/PrivacyProfileTest.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,18 @@ class PrivacyProfileTest {
3939
}
4040

4141
@Test
42-
fun `maskXMLViewIds normalizes @+id prefix and adds xmlViewIdsMatcher to matchers list`() {
43-
val profile = PrivacyProfile(maskXMLViewIds = listOf("@+id/foo", "bar"))
42+
fun `maskXMLViewIds normalizes @+id and @id prefixes and adds xmlViewIdsMatcher to matchers list`() {
43+
val profile = PrivacyProfile(maskXMLViewIds = listOf("@+id/foo", "@id/baz", "bar"))
4444

4545
val matchers = profile.asMatchersList()
4646
assertTrue(matchers.contains(profile.xmlViewIdsMatcher))
4747

4848
val idSet = profile.getPrivateSet("maskXMLViewIdSet")
4949
assertTrue(idSet.contains("foo"))
50+
assertTrue(idSet.contains("baz"))
5051
assertTrue(idSet.contains("bar"))
5152
assertFalse(idSet.contains("@+id/foo"))
53+
assertFalse(idSet.contains("@id/baz"))
5254
}
5355

5456
@Test

0 commit comments

Comments
 (0)