DataDog / dd-sdk-android

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

RUM:4717: Improve CheckableTextViewMapper #2115

Closed ambushwork closed 6 days ago

ambushwork commented 1 week ago

What does this PR do?

Summary

This PR improves the session replay CheckableTextViewMapper, tries to generate the wireframes which are much closer to the real UI elements. Since CheckableTextViewMapper is a base class of the other mappers, following UI components are affected in session replay:

Main changes in the PR:

Demo

Sample Application Session Replay
Screen_recording_20240628_100222.webm https://mobile-integration.datadoghq.com/rum/replay/sessions/f187f5ef-23af-492e-abf6-69f4a248a441?applicationId=38030dde-f9f9-4e52-9443-b9804a030080&seed=141f3702-f9b4-47e9-876f-61219f0cf05c&ts=1719561697402

Motivation

Additional Notes

Remain issue

Review checklist (to be filled by reviewers)

codecov-commenter commented 1 week ago

Codecov Report

Attention: Patch coverage is 60.00000% with 36 lines in your changes missing coverage. Please review.

Please upload report for BASE (feature/session-replay/compound-button-mappers@7b69c91). Learn more about missing BASE report. Report is 34 commits behind head on feature/session-replay/compound-button-mappers.

Additional details and impacted files ```diff @@ Coverage Diff @@ ## feature/session-replay/compound-button-mappers #2115 +/- ## ================================================================================= Coverage ? 69.05% ================================================================================= Files ? 700 Lines ? 26209 Branches ? 4416 ================================================================================= Hits ? 18098 Misses ? 6899 Partials ? 1212 ``` | [Files](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2115?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog) | Coverage Δ | | |---|---|---| | [.../sessionreplay/internal/DefaultRecorderProvider.kt](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2115?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.16% <100.00%> (ø)` | | | [...nreplay/internal/recorder/mapper/CheckBoxMapper.kt](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2115?src=pr&el=tree&filepath=features%2Fdd-sdk-android-session-replay%2Fsrc%2Fmain%2Fkotlin%2Fcom%2Fdatadog%2Fandroid%2Fsessionreplay%2Finternal%2Frecorder%2Fmapper%2FCheckBoxMapper.kt&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtc2Vzc2lvbi1yZXBsYXkvc3JjL21haW4va290bGluL2NvbS9kYXRhZG9nL2FuZHJvaWQvc2Vzc2lvbnJlcGxheS9pbnRlcm5hbC9yZWNvcmRlci9tYXBwZXIvQ2hlY2tCb3hNYXBwZXIua3Q=) | `100.00% <100.00%> (ø)` | | | [...ternal/recorder/mapper/CheckableWireframeMapper.kt](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2115?src=pr&el=tree&filepath=features%2Fdd-sdk-android-session-replay%2Fsrc%2Fmain%2Fkotlin%2Fcom%2Fdatadog%2Fandroid%2Fsessionreplay%2Finternal%2Frecorder%2Fmapper%2FCheckableWireframeMapper.kt&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtc2Vzc2lvbi1yZXBsYXkvc3JjL21haW4va290bGluL2NvbS9kYXRhZG9nL2FuZHJvaWQvc2Vzc2lvbnJlcGxheS9pbnRlcm5hbC9yZWNvcmRlci9tYXBwZXIvQ2hlY2thYmxlV2lyZWZyYW1lTWFwcGVyLmt0) | `100.00% <100.00%> (ø)` | | | [...play/internal/recorder/mapper/RadioButtonMapper.kt](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2115?src=pr&el=tree&filepath=features%2Fdd-sdk-android-session-replay%2Fsrc%2Fmain%2Fkotlin%2Fcom%2Fdatadog%2Fandroid%2Fsessionreplay%2Finternal%2Frecorder%2Fmapper%2FRadioButtonMapper.kt&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtc2Vzc2lvbi1yZXBsYXkvc3JjL21haW4va290bGluL2NvbS9kYXRhZG9nL2FuZHJvaWQvc2Vzc2lvbnJlcGxheS9pbnRlcm5hbC9yZWNvcmRlci9tYXBwZXIvUmFkaW9CdXR0b25NYXBwZXIua3Q=) | `66.67% <100.00%> (ø)` | | | [...lay/internal/recorder/mapper/SwitchCompatMapper.kt](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2115?src=pr&el=tree&filepath=features%2Fdd-sdk-android-session-replay%2Fsrc%2Fmain%2Fkotlin%2Fcom%2Fdatadog%2Fandroid%2Fsessionreplay%2Finternal%2Frecorder%2Fmapper%2FSwitchCompatMapper.kt&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtc2Vzc2lvbi1yZXBsYXkvc3JjL21haW4va290bGluL2NvbS9kYXRhZG9nL2FuZHJvaWQvc2Vzc2lvbnJlcGxheS9pbnRlcm5hbC9yZWNvcmRlci9tYXBwZXIvU3dpdGNoQ29tcGF0TWFwcGVyLmt0) | `69.77% <ø> (ø)` | | | [...nternal/recorder/mapper/CheckableTextViewMapper.kt](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2115?src=pr&el=tree&filepath=features%2Fdd-sdk-android-session-replay%2Fsrc%2Fmain%2Fkotlin%2Fcom%2Fdatadog%2Fandroid%2Fsessionreplay%2Finternal%2Frecorder%2Fmapper%2FCheckableTextViewMapper.kt&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtc2Vzc2lvbi1yZXBsYXkvc3JjL21haW4va290bGluL2NvbS9kYXRhZG9nL2FuZHJvaWQvc2Vzc2lvbnJlcGxheS9pbnRlcm5hbC9yZWNvcmRlci9tYXBwZXIvQ2hlY2thYmxlVGV4dFZpZXdNYXBwZXIua3Q=) | `55.56% <95.65%> (ø)` | | | [...roid/sessionreplay/internal/utils/DrawableUtils.kt](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2115?src=pr&el=tree&filepath=features%2Fdd-sdk-android-session-replay%2Fsrc%2Fmain%2Fkotlin%2Fcom%2Fdatadog%2Fandroid%2Fsessionreplay%2Finternal%2Futils%2FDrawableUtils.kt&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtc2Vzc2lvbi1yZXBsYXkvc3JjL21haW4va290bGluL2NvbS9kYXRhZG9nL2FuZHJvaWQvc2Vzc2lvbnJlcGxheS9pbnRlcm5hbC91dGlscy9EcmF3YWJsZVV0aWxzLmt0) | `93.75% <50.00%> (ø)` | | | [.../internal/recorder/mapper/CheckedTextViewMapper.kt](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2115?src=pr&el=tree&filepath=features%2Fdd-sdk-android-session-replay%2Fsrc%2Fmain%2Fkotlin%2Fcom%2Fdatadog%2Fandroid%2Fsessionreplay%2Finternal%2Frecorder%2Fmapper%2FCheckedTextViewMapper.kt&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtc2Vzc2lvbi1yZXBsYXkvc3JjL21haW4va290bGluL2NvbS9kYXRhZG9nL2FuZHJvaWQvc2Vzc2lvbnJlcGxheS9pbnRlcm5hbC9yZWNvcmRlci9tYXBwZXIvQ2hlY2tlZFRleHRWaWV3TWFwcGVyLmt0) | `78.12% <55.56%> (ø)` | | | [...l/recorder/mapper/CheckableCompoundButtonMapper.kt](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2115?src=pr&el=tree&filepath=features%2Fdd-sdk-android-session-replay%2Fsrc%2Fmain%2Fkotlin%2Fcom%2Fdatadog%2Fandroid%2Fsessionreplay%2Finternal%2Frecorder%2Fmapper%2FCheckableCompoundButtonMapper.kt&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtc2Vzc2lvbi1yZXBsYXkvc3JjL21haW4va290bGluL2NvbS9kYXRhZG9nL2FuZHJvaWQvc2Vzc2lvbnJlcGxheS9pbnRlcm5hbC9yZWNvcmRlci9tYXBwZXIvQ2hlY2thYmxlQ29tcG91bmRCdXR0b25NYXBwZXIua3Q=) | `48.28% <36.17%> (ø)` | |
ambushwork commented 6 days ago

lgtm. Although I don't have a deep knowledge of SR, so a review from someone else who is closer to the Session Replay topic than I am is preferable.

Agree, @xgouchet @jonathanmos do you want to take a look at this?