DataDog / dd-sdk-android

Datadog SDK for Android (Compatible with Kotlin and Java)
Apache License 2.0
146 stars 59 forks source link

RUM-5389: Add API to configure the Image Privacy #2125

Closed jonathanmos closed 1 month ago

jonathanmos commented 1 month ago

What does this PR do?

Link to the RFC

Adds an ImagePrivacy api to the SessionReplayConfiguration. The api has the following values:

MASK_ALL - no images will be recorded. Images will be replaced with a placeholder labelled "Image". MASK_CONTENT - bundled images will be recorded and contextual ones will not (the default state). Contextual images will be replaced with a placeholder labelled "Content Image". MASK_NONE - all images will be recorded.

Usage of the api:

SessionReplayConfiguration.Builder()
.setImagePrivacy(ImagePrivacy.MASK_ALL)

MASK_NONE

Screenshot 2024-07-17 at 9 40 31

MASK_CONTENT

Screenshot 2024-07-17 at 14 39 09

MASK_ALL

Screenshot 2024-07-17 at 14 36 48

Motivation

Give users the flexibility to have different image recording levels for their sessions.

Review checklist (to be filled by reviewers)

codecov-commenter commented 1 month ago

Codecov Report

Attention: Patch coverage is 97.77778% with 2 lines in your changes missing coverage. Please review.

Project coverage is 70.07%. Comparing base (fc53808) to head (c007451).

Additional details and impacted files ```diff @@ Coverage Diff @@ ## develop #2125 +/- ## =========================================== + Coverage 70.03% 70.07% +0.05% =========================================== Files 721 722 +1 Lines 26773 26847 +74 Branches 4499 4504 +5 =========================================== + Hits 18749 18813 +64 - Misses 6771 6774 +3 - Partials 1253 1260 +7 ``` | [Files](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2125?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog) | Coverage Δ | | |---|---|---| | [.../com/datadog/android/sessionreplay/ImagePrivacy.kt](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2125?src=pr&el=tree&filepath=features%2Fdd-sdk-android-session-replay%2Fsrc%2Fmain%2Fkotlin%2Fcom%2Fdatadog%2Fandroid%2Fsessionreplay%2FImagePrivacy.kt&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtc2Vzc2lvbi1yZXBsYXkvc3JjL21haW4va290bGluL2NvbS9kYXRhZG9nL2FuZHJvaWQvc2Vzc2lvbnJlcGxheS9JbWFnZVByaXZhY3kua3Q=) | `100.00% <100.00%> (ø)` | | | [...com/datadog/android/sessionreplay/SessionReplay.kt](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2125?src=pr&el=tree&filepath=features%2Fdd-sdk-android-session-replay%2Fsrc%2Fmain%2Fkotlin%2Fcom%2Fdatadog%2Fandroid%2Fsessionreplay%2FSessionReplay.kt&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtc2Vzc2lvbi1yZXBsYXkvc3JjL21haW4va290bGluL2NvbS9kYXRhZG9nL2FuZHJvaWQvc2Vzc2lvbnJlcGxheS9TZXNzaW9uUmVwbGF5Lmt0) | `90.00% <100.00%> (+1.11%)` | :arrow_up: | | [...ndroid/sessionreplay/SessionReplayConfiguration.kt](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2125?src=pr&el=tree&filepath=features%2Fdd-sdk-android-session-replay%2Fsrc%2Fmain%2Fkotlin%2Fcom%2Fdatadog%2Fandroid%2Fsessionreplay%2FSessionReplayConfiguration.kt&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtc2Vzc2lvbi1yZXBsYXkvc3JjL21haW4va290bGluL2NvbS9kYXRhZG9nL2FuZHJvaWQvc2Vzc2lvbnJlcGxheS9TZXNzaW9uUmVwbGF5Q29uZmlndXJhdGlvbi5rdA==) | `100.00% <100.00%> (ø)` | | | [.../sessionreplay/internal/DefaultRecorderProvider.kt](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2125?src=pr&el=tree&filepath=features%2Fdd-sdk-android-session-replay%2Fsrc%2Fmain%2Fkotlin%2Fcom%2Fdatadog%2Fandroid%2Fsessionreplay%2Finternal%2FDefaultRecorderProvider.kt&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtc2Vzc2lvbi1yZXBsYXkvc3JjL21haW4va290bGluL2NvbS9kYXRhZG9nL2FuZHJvaWQvc2Vzc2lvbnJlcGxheS9pbnRlcm5hbC9EZWZhdWx0UmVjb3JkZXJQcm92aWRlci5rdA==) | `93.33% <100.00%> (+0.11%)` | :arrow_up: | | [...oid/sessionreplay/internal/SessionReplayFeature.kt](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2125?src=pr&el=tree&filepath=features%2Fdd-sdk-android-session-replay%2Fsrc%2Fmain%2Fkotlin%2Fcom%2Fdatadog%2Fandroid%2Fsessionreplay%2Finternal%2FSessionReplayFeature.kt&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtc2Vzc2lvbi1yZXBsYXkvc3JjL21haW4va290bGluL2NvbS9kYXRhZG9nL2FuZHJvaWQvc2Vzc2lvbnJlcGxheS9pbnRlcm5hbC9TZXNzaW9uUmVwbGF5RmVhdHVyZS5rdA==) | `100.00% <100.00%> (ø)` | | | [...nreplay/internal/recorder/SessionReplayRecorder.kt](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2125?src=pr&el=tree&filepath=features%2Fdd-sdk-android-session-replay%2Fsrc%2Fmain%2Fkotlin%2Fcom%2Fdatadog%2Fandroid%2Fsessionreplay%2Finternal%2Frecorder%2FSessionReplayRecorder.kt&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtc2Vzc2lvbi1yZXBsYXkvc3JjL21haW4va290bGluL2NvbS9kYXRhZG9nL2FuZHJvaWQvc2Vzc2lvbnJlcGxheS9pbnRlcm5hbC9yZWNvcmRlci9TZXNzaW9uUmVwbGF5UmVjb3JkZXIua3Q=) | `96.83% <100.00%> (+0.08%)` | :arrow_up: | | [...essionreplay/internal/recorder/SnapshotProducer.kt](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2125?src=pr&el=tree&filepath=features%2Fdd-sdk-android-session-replay%2Fsrc%2Fmain%2Fkotlin%2Fcom%2Fdatadog%2Fandroid%2Fsessionreplay%2Finternal%2Frecorder%2FSnapshotProducer.kt&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtc2Vzc2lvbi1yZXBsYXkvc3JjL21haW4va290bGluL2NvbS9kYXRhZG9nL2FuZHJvaWQvc2Vzc2lvbnJlcGxheS9pbnRlcm5hbC9yZWNvcmRlci9TbmFwc2hvdFByb2R1Y2VyLmt0) | `91.89% <100.00%> (+0.98%)` | :arrow_up: | | [...nreplay/internal/recorder/ViewOnDrawInterceptor.kt](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2125?src=pr&el=tree&filepath=features%2Fdd-sdk-android-session-replay%2Fsrc%2Fmain%2Fkotlin%2Fcom%2Fdatadog%2Fandroid%2Fsessionreplay%2Finternal%2Frecorder%2FViewOnDrawInterceptor.kt&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtc2Vzc2lvbi1yZXBsYXkvc3JjL21haW4va290bGluL2NvbS9kYXRhZG9nL2FuZHJvaWQvc2Vzc2lvbnJlcGxheS9pbnRlcm5hbC9yZWNvcmRlci9WaWV3T25EcmF3SW50ZXJjZXB0b3Iua3Q=) | `88.89% <100.00%> (ø)` | | | [...lay/internal/recorder/WindowCallbackInterceptor.kt](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2125?src=pr&el=tree&filepath=features%2Fdd-sdk-android-session-replay%2Fsrc%2Fmain%2Fkotlin%2Fcom%2Fdatadog%2Fandroid%2Fsessionreplay%2Finternal%2Frecorder%2FWindowCallbackInterceptor.kt&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtc2Vzc2lvbi1yZXBsYXkvc3JjL21haW4va290bGluL2NvbS9kYXRhZG9nL2FuZHJvaWQvc2Vzc2lvbnJlcGxheS9pbnRlcm5hbC9yZWNvcmRlci9XaW5kb3dDYWxsYmFja0ludGVyY2VwdG9yLmt0) | `100.00% <100.00%> (ø)` | | | [...ternal/recorder/callback/RecorderWindowCallback.kt](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2125?src=pr&el=tree&filepath=features%2Fdd-sdk-android-session-replay%2Fsrc%2Fmain%2Fkotlin%2Fcom%2Fdatadog%2Fandroid%2Fsessionreplay%2Finternal%2Frecorder%2Fcallback%2FRecorderWindowCallback.kt&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtc2Vzc2lvbi1yZXBsYXkvc3JjL21haW4va290bGluL2NvbS9kYXRhZG9nL2FuZHJvaWQvc2Vzc2lvbnJlcGxheS9pbnRlcm5hbC9yZWNvcmRlci9jYWxsYmFjay9SZWNvcmRlcldpbmRvd0NhbGxiYWNrLmt0) | `91.46% <100.00%> (+0.44%)` | :arrow_up: | | ... and [9 more](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2125?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog) | | ... and [30 files with indirect coverage changes](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2125/indirect-changes?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog)