Skip to content
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

[SR] Support Jetpack Compose redaction #3739

Merged
merged 16 commits into from
Oct 9, 2024

Conversation

romtsn
Copy link
Member

@romtsn romtsn commented Oct 1, 2024

📜 Description

  • Add support for jetpack compose redaction
  • Unfortunately we had to use quite some reflection and internal kotlin classes as the means that compose exposes to public are not enough. Namely, I've tried to use the semantics tree approach, however if a compose node does not have any accessibility property set, it's missing entirely from the semantics tree. So instead we:
    • Traverse the real tree (LayoutNodes)
    • Use the corresponding semantics node (if exists), to fetch some valuable information like TextLayout to later use it for masking
    • When it's not possible to reliably retrieve the info from the semantics node (e.g. Images), we fall back to reflection to fetch the properties we need (e.g. Image's painter), as they are marked as private
    • The reflection calls should be fairly lightweight, as we actually only checking for classnames in the for-loop, but then call getDeclaredField only once per Image/Text in the tree. I've also tested this in a release version of pocketcasts and tree parsing was well under 16ms, which makes it actually faster than the old view system traversal at times. We can think of using bytecode manipulation later to make it even faster.
    • The necessary proguard rules were also added and tested in a release build of pocketcasts
  • Also added custom modifiers sentryReplayRedact/sentryReplayIgnore to allow selective masking
  • We only support compose 1.5.0 or above, as the entire semantics logic was reworked in this version and it'd be hard to support the prior ones. Should be fine since the version is > 1 year old.
  • We added a compileOnly dependency on compose-ui (the only one we need). Should be fine since we check the AndroidComposeView presence at runtime and skipping the logic altogether if it's not available.

Link to sample replay

https://sentry-sdks.sentry.io/replays/a5ebb46afb5c41cd82a7ebb6b1762943/?project=5428559&query=&referrer=%2Freplays%2F%3AreplaySlug%2F&statsPeriod=30d&yAxis=count%28%29&t=0

Example screenshot of a fully-compose screen

image

💡 Motivation and Context

Part of getsentry/sentry#74441
Closes #3577

💚 How did you test it?

Manually + automated

📝 Checklist

  • I reviewed the submitted code.
  • I added tests to verify the changes.
  • No new PII added or SDK only sends newly added PII if sendDefaultPII is enabled.
  • [] I updated the docs if needed.
  • Review from the native team if needed.
  • No breaking change or entry added to the changelog.
  • No breaking change for hybrid SDKs or communicated to hybrid SDKs.

🔮 Next steps

Copy link
Contributor

github-actions bot commented Oct 1, 2024

Performance metrics 🚀

  Plain With Sentry Diff
Startup time 544.87 ms 595.84 ms 50.97 ms
Size 1.70 MiB 2.35 MiB 667.29 KiB

Previous results on branch: rz/feat/session-replay-compose-redaction

Startup times

Revision Plain With Sentry Diff
3226da4 442.88 ms 495.60 ms 52.72 ms
ea53b8e 405.64 ms 501.73 ms 96.09 ms
bf94edf 402.08 ms 429.94 ms 27.85 ms
b9fccdf 462.63 ms 495.52 ms 32.89 ms

App size

Revision Plain With Sentry Diff
3226da4 1.70 MiB 2.35 MiB 666.07 KiB
ea53b8e 1.70 MiB 2.35 MiB 666.08 KiB
bf94edf 1.70 MiB 2.35 MiB 665.15 KiB
b9fccdf 1.70 MiB 2.35 MiB 665.15 KiB

@@ -6,18 +6,20 @@

- Add support for `feedback` envelope header item type ([#3687](https://github.com/getsentry/sentry-java/pull/3687))
- Add breadcrumb.origin field ([#3727](https://github.com/getsentry/sentry-java/pull/3727))
- Session Replay: Add options to selectively redact/ignore views from being captured. The following options are available: ([#3689](https://github.com/getsentry/sentry-java/pull/3689))
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

moved this as it was wrongly added to the Fixes section

Copy link
Member

@markushi markushi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hats off, nicely done!

if (modifierClassName.contains("Text")) {
color = try {
(
modifier::class.java.getDeclaredField("color")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe it makes sense to cache the field outside of findTextAttributes()

Copy link
Member Author

@romtsn romtsn Oct 8, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yep, I thought about the same, but the problem here is that the holding class is actually private, so we'd have to access it via reflection too (Class.forName). And in this case we actually don't know what the class is until we start iterating over the modifiers list (there can be multiple classes holding this field), so we'd have to cache the field for each possible class, and the gains are questionable in this case.

in my tests it was quite fast (like 0.05ms on average for this method to execute), which resulted in the entire tree being parsed within 4.5ms for an average screen. I think I'd rather focus on making it work via bytecode manipulation, so we wipe this entirely, wdyt?

E_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.13 ms
2024-10-08 17:53:47.663  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.01 ms
2024-10-08 17:53:47.664  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.09 ms
2024-10-08 17:53:47.664  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.03 ms
2024-10-08 17:53:47.665  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.666  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.12 ms
2024-10-08 17:53:47.667  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.06 ms
2024-10-08 17:53:47.667  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.03 ms
2024-10-08 17:53:47.671  7521-7521  TIME_TEXT               au.com.shiftyjelly.pocketcasts       E  0.19 ms
2024-10-08 17:53:47.672  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.673  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.22 ms
2024-10-08 17:53:47.674  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.09 ms
2024-10-08 17:53:47.674  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.675  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.07 ms
2024-10-08 17:53:47.675  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.676  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.01 ms
2024-10-08 17:53:47.678  7521-7521  TIME_TEXT               au.com.shiftyjelly.pocketcasts       E  0.06 ms
2024-10-08 17:53:47.679  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.13 ms
2024-10-08 17:53:47.680  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.680  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.04 ms
2024-10-08 17:53:47.681  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.681  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.01 ms
2024-10-08 17:53:47.683  7521-7521  TIME_TEXT               au.com.shiftyjelly.pocketcasts       E  0.07 ms
2024-10-08 17:53:47.685  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.16 ms
2024-10-08 17:53:47.685  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.686  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.04 ms
2024-10-08 17:53:47.686  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.687  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.01 ms
2024-10-08 17:53:47.689  7521-7521  TIME_TEXT               au.com.shiftyjelly.pocketcasts       E  0.06 ms
2024-10-08 17:53:47.690  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.10 ms
2024-10-08 17:53:47.690  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.691  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.04 ms
2024-10-08 17:53:47.691  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.691  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.01 ms
2024-10-08 17:53:47.693  7521-7521  TIME_TEXT               au.com.shiftyjelly.pocketcasts       E  0.08 ms
2024-10-08 17:53:47.694  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.03 ms
2024-10-08 17:53:47.694  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.04 ms
2024-10-08 17:53:47.695  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.10 ms
2024-10-08 17:53:47.696  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.696  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.03 ms
2024-10-08 17:53:47.696  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.697  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.01 ms
2024-10-08 17:53:47.699  7521-7521  TIME_TEXT               au.com.shiftyjelly.pocketcasts       E  0.08 ms
2024-10-08 17:53:47.700  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.10 ms
2024-10-08 17:53:47.700  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.701  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.04 ms
2024-10-08 17:53:47.701  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.702  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.01 ms
2024-10-08 17:53:47.704  7521-7521  TIME_TEXT               au.com.shiftyjelly.pocketcasts       E  0.07 ms
2024-10-08 17:53:47.704  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.10 ms
2024-10-08 17:53:47.705  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.705  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.04 ms
2024-10-08 17:53:47.706  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.706  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.01 ms
2024-10-08 17:53:47.708  7521-7521  TIME_TEXT               au.com.shiftyjelly.pocketcasts       E  0.06 ms
2024-10-08 17:53:47.709  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.12 ms
2024-10-08 17:53:47.710  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.03 ms
2024-10-08 17:53:47.711  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.09 ms
2024-10-08 17:53:47.711  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.711  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.01 ms
2024-10-08 17:53:47.714  7521-7521  TIME_TEXT               au.com.shiftyjelly.pocketcasts       E  0.08 ms
2024-10-08 17:53:47.715  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.11 ms
2024-10-08 17:53:47.715  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.716  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.04 ms
2024-10-08 17:53:47.716  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.716  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.01 ms
2024-10-08 17:53:47.719  7521-7521  TIME_TEXT               au.com.shiftyjelly.pocketcasts       E  0.08 ms
2024-10-08 17:53:47.720  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.11 ms
2024-10-08 17:53:47.720  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.721  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.04 ms
2024-10-08 17:53:47.721  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.721  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.01 ms
2024-10-08 17:53:47.724  7521-7521  TIME_TEXT               au.com.shiftyjelly.pocketcasts       E  0.07 ms
2024-10-08 17:53:47.724  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.11 ms
2024-10-08 17:53:47.725  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.725  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.04 ms
2024-10-08 17:53:47.726  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.726  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.01 ms
2024-10-08 17:53:47.728  7521-7521  TIME_TEXT               au.com.shiftyjelly.pocketcasts       E  0.07 ms
2024-10-08 17:53:47.729  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.13 ms
2024-10-08 17:53:47.729  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.730  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.04 ms
2024-10-08 17:53:47.730  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.730  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.01 ms
2024-10-08 17:53:47.732  7521-7521  TIME_TEXT               au.com.shiftyjelly.pocketcasts       E  0.07 ms
2024-10-08 17:53:47.733  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.11 ms
2024-10-08 17:53:47.733  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.734  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.04 ms
2024-10-08 17:53:47.734  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.02 ms
2024-10-08 17:53:47.734  7521-7521  TIME_IMAGE              au.com.shiftyjelly.pocketcasts       E  0.00 ms
2024-10-08 17:53:47.736  7521-7521  TIME_TEXT               au.com.shiftyjelly.pocketcasts       E  0.07 ms

@romtsn romtsn force-pushed the rz/feat/session-replay-compose-redaction branch from 1cbf42e to 50c5dfa Compare October 8, 2024 20:02
@romtsn romtsn enabled auto-merge (squash) October 9, 2024 14:53
@romtsn romtsn merged commit 6548825 into main Oct 9, 2024
24 of 25 checks passed
@romtsn romtsn deleted the rz/feat/session-replay-compose-redaction branch October 9, 2024 15:06
adinauer added a commit that referenced this pull request Oct 15, 2024
* Bump reactivecircus/android-emulator-runner from 2.30.1 to 2.31.0 (#3530)

Bumps [reactivecircus/android-emulator-runner](https://github.com/reactivecircus/android-emulator-runner) from 2.30.1 to 2.31.0.
- [Release notes](https://github.com/reactivecircus/android-emulator-runner/releases)
- [Changelog](https://github.com/ReactiveCircus/android-emulator-runner/blob/main/CHANGELOG.md)
- [Commits](ReactiveCircus/android-emulator-runner@6b0df4b...77986be)

---
updated-dependencies:
- dependency-name: reactivecircus/android-emulator-runner
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump codecov/codecov-action from 4.3.1 to 4.5.0 (#3533)

Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4.3.1 to 4.5.0.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](codecov/codecov-action@5ecb98a...e28ff12)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Stefano <stefano.siano@sentry.io>

* [SR] Session Replay (#3339)

* Add new sentry-android-replay module

* Add screenshot recorder

* Add sentry replay envelope and event

* Add TODOs and license headers

* Api dump

* Formatting

* Lint

* Format code

* More comments

* Disable detekt plugin for now

* WIP

* Add replay envelopes

* Remove jsonValue

* Remove

* Fix json

* Finalize replay envelopes

* Introduce MapObjectReader

* Add missing test

* Add test  for MapObjectReader

* Add MapObjectWriter change

* Add finals

* Fix test

* Fix test

* Address review

* Add finals and annotations

* Specify SHA for license headers

* Address review from Dhiogo

* Address review from Markus

* Remove public captureReplay method

* Fix test

* api dump

* api dump

* Address review from Markus

* Api dump

* Add replay integration

* Uncomment redacting

* Update proguard rules

* Add missing rule for AndroidTest

* Add ReplayCache tests

* Add tests

* Add SessionReplayOptions

* Call listeners when installing RootViewsSpy

* Call listeners when installing RootViewsSpy

* SessionReplayOptions -> SentryReplayOptions

* Fix test

* Add AndroidManifest options for replays

* Add buffer mode and link replays with events/transactions

* Pass hint to captureReplay

* Better error handling

* recycler lastScreenshot before re-assigning

* Expose ReplayCache as public api

* Fix redacting out of sync

* _experimental -> experimental

* Merge conflicts

* Fix tests

* Add more tests

* Improve ReplayCache logic

* frameUsec -> frameDurationUsec

* bottom/right -> height/width

* add todos

* duration -> durationMs

* replaId non-nullable

* More conflicts

* More conflicts

* Fix tests

* Address PR review

* Add kdoc

* Add kdoc

* Fix tests

* Add comment for experimental options

* Do not run recorder if full session was not sampled

* Add more tests

* Add session deadline of 1h

* Clean up older replays when starting a new one

* Remove unnecessary extension fun

* Safe executors

* Fix crashing MediaCodec and use density to determine recording resolution

* Add redact options and align naming

* Fix tests

* Fix tests

* WIP

* Try-catch release of encoder

* Support orientation change for session mode

* WIP

* Spotless

* TODO

* Update sentry/src/main/java/io/sentry/SentryReplayOptions.java

Co-authored-by: Markus Hintersteiner <markus.hintersteiner@sentry.io>

* More gates

* Revert addAll

* Fix conflicts

* fix test

* release: 7.8.0-alpha.0

* Introduce CaptureStrategy for buffer and session modes

* Formatting

* WIP

* Expose public API for flutter

* Spotless

* Spotless

* Remove breadcrumb import

* Send temporary breadcrumbs and add test

* Formatting

* Sort rrweb events

* Formatting

* Expose replayCacheDir

* Capture network requests

* Change op name to resource.http

* feat(replay): Add `sendReplay` method for Hybrid SDKs

* fix apiDump

* Address PR review

* Capture motion events as incremental rrweb events

* Spotless

* Revert

* Changelog

* release: 7.9.0-alpha.1

* Fix test

* WIP

* Adhere to rrweb move event expectations

* formatting

* Align breadcrumbs with frontend and iOS

* Add tests and fix deserialization

* Rotate buffered motion events in buffer mode

* Add Nullables

* Address PR feedback

* Formatting

* Rotate current events until segment end exclusively

* Allow rrweb breadcrumb customization from hybrid SDKs

* Fix proguard rules

* WIP

* Add tests

* Detect obscured views

* revert some thigns

* Remove commented code

* Suppress lint

* Support multi-touch gestures

* Address PR feedback

* Changelog

* release: 7.11.0-alpha.2

* Make multi-touch work

* Fix tests

* WIP

* Capture screen names as urls for replay

* Fix

* Ignore warning

* Address PR feedback

* Tests

* Add quality settings

* Fix redacting out of sync

* Remove time measuring

* Mark isEnableScreenTracking as experimental

* Format code

* Address PR feedback

* Clean up

* Spotless

* Format code

* Changelog

* release: 7.12.0-alpha.3

* [SR] Add `redactClasses` option (#3546)

Co-authored-by: Roman Zavarnitsyn <rom4ek93@gmail.com>

* misc(changelog): Prepare for next alpha

* fix(changelog): Bump alpha version number

* release: 7.12.0-alpha.4

* Redaction fixes for RN

* Add stopgap for offline session recording

* Recycle unused bitmap

* Add tests for sentry

* Add ReplayIntegrationTest

* Replay SmokeTest

* Fix test

* Fix test

* Fix events linking with buffered replays

* Changelog

---------

Co-authored-by: Sentry Github Bot <bot+github-bot@sentry.io>
Co-authored-by: Markus Hintersteiner <markus.hintersteiner@sentry.io>
Co-authored-by: getsentry-bot <bot@sentry.io>
Co-authored-by: getsentry-bot <bot@getsentry.com>
Co-authored-by: Krystof Woldrich <krystof.woldrich@sentry.io>
Co-authored-by: Krystof Woldrich <31292499+krystofwoldrich@users.noreply.github.com>

* release: 7.12.0

* Bump github/codeql-action from 3.25.10 to 3.25.11 (#3529)

Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.25.10 to 3.25.11.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@23acc5c...b611370)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump JamesIves/github-pages-deploy-action from 4.5.0 to 4.6.1 (#3531)

Bumps [JamesIves/github-pages-deploy-action](https://github.com/jamesives/github-pages-deploy-action) from 4.5.0 to 4.6.1.
- [Release notes](https://github.com/jamesives/github-pages-deploy-action/releases)
- [Commits](JamesIves/github-pages-deploy-action@65b5dfd...5c6e9e9)

---
updated-dependencies:
- dependency-name: JamesIves/github-pages-deploy-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump gradle/actions (#3532)

Bumps [gradle/actions](https://github.com/gradle/actions) from 2cd2a6e951bd0b53f55a08e4e4c6f2586f3a36b9 to cdbbabd09cff07936e1c9dbe8c9d4b6ac2ef7156.
- [Release notes](https://github.com/gradle/actions/releases)
- [Commits](gradle/actions@2cd2a6e...cdbbabd)

---
updated-dependencies:
- dependency-name: gradle/actions
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Add sentry-android-replay module to craft and readme (#3578)

* Check app start spans time and foreground state (#3550)

* App start now takes AppStartMetrics.appLaunchedInForeground variable to add spans to the transaction
* App starts longer than 1 minute are dropped (same as Firebase)
* added Activity lifecycle registration to check start launch time and foreground status
* added AppStartMetrics.registerApplicationForegroundCheck in the SentryPerformanceProvider and SentryAndroid.init, other than AppStartMetrics.onApplicationCreate
* ActivityLifecycleIntegration now reads first activity creation on create instead of class instantiation
* AppStartMetrics stops app start profiler if no activity is being created

* release: 7.12.1

* Bump github/codeql-action from 3.25.11 to 3.25.13 (#3591)

Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.25.11 to 3.25.13.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@b611370...2d79040)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump reactivecircus/android-emulator-runner from 2.31.0 to 2.32.0 (#3573)

Bumps [reactivecircus/android-emulator-runner](https://github.com/reactivecircus/android-emulator-runner) from 2.31.0 to 2.32.0.
- [Release notes](https://github.com/reactivecircus/android-emulator-runner/releases)
- [Changelog](https://github.com/ReactiveCircus/android-emulator-runner/blob/main/CHANGELOG.md)
- [Commits](ReactiveCircus/android-emulator-runner@77986be...f0d1ed2)

---
updated-dependencies:
- dependency-name: reactivecircus/android-emulator-runner
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump JamesIves/github-pages-deploy-action from 4.6.1 to 4.6.3 (#3590)

Bumps [JamesIves/github-pages-deploy-action](https://github.com/jamesives/github-pages-deploy-action) from 4.6.1 to 4.6.3.
- [Release notes](https://github.com/jamesives/github-pages-deploy-action/releases)
- [Commits](JamesIves/github-pages-deploy-action@5c6e9e9...94f3c65)

---
updated-dependencies:
- dependency-name: JamesIves/github-pages-deploy-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump gradle/actions (#3597)

Bumps [gradle/actions](https://github.com/gradle/actions) from cdbbabd09cff07936e1c9dbe8c9d4b6ac2ef7156 to fd87365911aa12c016c307ea21313f351dc53551.
- [Release notes](https://github.com/gradle/actions/releases)
- [Commits](gradle/actions@cdbbabd...fd87365)

---
updated-dependencies:
- dependency-name: gradle/actions
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump gradle/wrapper-validation-action from 3.4.2 to 3.5.0 (#3589)

Bumps [gradle/wrapper-validation-action](https://github.com/gradle/wrapper-validation-action) from 3.4.2 to 3.5.0.
- [Release notes](https://github.com/gradle/wrapper-validation-action/releases)
- [Commits](gradle/wrapper-validation-action@8842585...f9c9c57)

---
updated-dependencies:
- dependency-name: gradle/wrapper-validation-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump Spring Boot to 3.3.2 (#3541)

* Bump Spring Boot to 3.3.1

* changelog

* add specific classpath dependency for commons compress

* bump to latest patch release of spring boot

---------

Co-authored-by: Lukas Bloder <lukas.bloder@gmail.com>

* [SR] Capture Replays for ANRs and crashes (#3565)

* release: 7.13.0

* Fix lazy select queries instrumentation (#3604)

* added SentryCrossProcessCursor wrapper
* SQLiteSpanManager now wraps CrossProcessCursors to start a span only when the cursor is filled with data

* Avoid ArrayIndexOutOfBoundsException on Android cpu data collection (#3598)

* added ArrayIndexOutOfBoundsException to try catch block in AndroidCpuCollector

* [SR] ANR with buffered Replay integration test (#3612)

* [SR] Buffer mode improvements (#3622)

* Persist buffer replay type when switching to session

* Ensure no gaps in segment timestamps when converting strategies

* Properly store screen name at start for buffer mode

* Changelog

* [SR] Gesture/touch support for Flutter (#3623)

* Persist buffer replay type when switching to session

* Ensure no gaps in segment timestamps when converting strategies

* Properly store screen name at start for buffer mode

* Changelog

* Decouple gesture tracking from WindowRecorder

* Format code

* Add tests

* Changelog

* Fix app start spans missing from Pixel devices (#3634)

* added post on main thread to post check on main thread

* [SR] Fix Session Replay crashes (#3628)

* release: 7.14.0

* Verify sentry-android-replay for Google Play SDK Console (#3651)

* Add verification file for Play Console

* Update Changelog

* Update Changelog

* [SR] Rename errorSampleRate to onErrorSampleRate (#3637)

* Rename errorSampleRate to onErrorSampleRate

* pr id

* Avoid stopping appStartProfiler after application creation (#3630)

* AppStartMetrics stops appStartProfiler only if no activity ever started

* Bump JamesIves/github-pages-deploy-action from 4.6.3 to 4.6.4 (#3681)

Bumps [JamesIves/github-pages-deploy-action](https://github.com/jamesives/github-pages-deploy-action) from 4.6.3 to 4.6.4.
- [Release notes](https://github.com/jamesives/github-pages-deploy-action/releases)
- [Commits](JamesIves/github-pages-deploy-action@94f3c65...920cbb3)

---
updated-dependencies:
- dependency-name: JamesIves/github-pages-deploy-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump github/codeql-action from 3.25.13 to 3.26.6 (#3672)

Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.25.13 to 3.26.6.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@2d79040...4dd1613)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* [SR] Detect dominant color for TextViews with Spans (#3682)

* Bump github/codeql-action from 3.26.6 to 3.26.7 (#3692)

Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.26.6 to 3.26.7.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@4dd1613...8214744)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump gradle/actions (#3691)

Bumps [gradle/actions](https://github.com/gradle/actions) from fd87365911aa12c016c307ea21313f351dc53551 to 0d30c9111cf47a838eb69c06d13f3f51ab2ed76f.
- [Release notes](https://github.com/gradle/actions/releases)
- [Commits](gradle/actions@fd87365...0d30c91)

---
updated-dependencies:
- dependency-name: gradle/actions
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* [SR] Add custom redaction options (#3689)

* Add support for `feedback` envelope header item type (#3687)

* Bump github/codeql-action from 3.26.7 to 3.26.8 (#3708)

Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.26.7 to 3.26.8.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@8214744...294a9d9)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Ensure app context is used even when SDK is initialized via Activity Context (#3669)

* Ensure app context is used even when SDK is initialized via Activity Context

* Update Changelog

* Exclude saucelabs from leakcanary

* Exclude saucelabs TouchListener from leakCanary

* Allow leakcanary for non-debug ui-test builds

* Fix lint

* Adds breadcrumb origin field (#3727)

* Adds breadcrumb origin field

* Updates api dump

* Updates test cases

* Updates serialisation tests

* Adds changelog

* Exclude testfairy from obfuscation

* Revert "Exclude testfairy from obfuscation"

This reverts commit 9900d1e.

* Exclude any testfairy touchlistener static fields from LeakCanary

---------

Co-authored-by: Markus Hintersteiner <markus.hintersteiner@sentry.io>

* Replace Calendar.getInstance with System.currentTimeMillis for breadcrumb ctor (#3736)

* chore(readme): Add info about updated release channels (#3773)

* Update README.md

* fix copy/paste error

* [QA] Lazily load SentryOptions members (#3749)

* Make AtomicClientReportStorage constructor lazy

* Lazily initialize things we dont need

* Empty experimental options

* Format code

* Make LazyEvaluator thread-safe

* Fix tests

* Fix .api

* Use LazyEvaluator for heavy SentryOptions

* Changelog

* revert

* tests

---------

Co-authored-by: Sentry Github Bot <bot+github-bot@sentry.io>
Co-authored-by: Markus Hintersteiner <markus.hintersteiner@sentry.io>

* [QA] Fix potential ANRs due to default integrations (#3778)

* Fix don't register any full drawn listeners if feature is not enabled

* Offload app components breadcrumbs to background thread

* Offload system events breadcrumbs to background thread

* Update Changelog

* Fix flaky tests

* Remove session breadcrumbs

* Fix tests

* Address PR feedback

* [SR] Support Jetpack Compose redaction (#3739)

* WIP

* Compose works

* Custom redaction works for Compose

* Formatting

* Clean up

* Test

* Add tests

* Changelog

* Replace logo with sentry

* formatting

* Faster boundsInWindow for compose

* api dump

* Dont use liveliterals

* [SR] Change terminology from redact/ignore to mask/unmask (#3741)

* WIP

* Compose works

* Custom redaction works for Compose

* Formatting

* Clean up

* Test

* Add tests

* Changelog

* Change terminology from redact/ignore to mask/unmask

* Changelog

* [SR] Mask web and video views (#3775)

* Replace logo with sentry

* Add missing proguard rules

* formatting

* Faster boundsInWindow for compose

* api dump

* Dont use liveliterals

* Remove redundant test

* Increase timeout in failing test

* release: 7.15.0

* Deprecate `enableTracing` in v7 (#3777)

* deprecate enableTracing

* changelog

* replace synchronized with reentrant lock

* downgrade coil to 2.0.0 to fix build problems

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Stefano <stefano.siano@sentry.io>
Co-authored-by: Roman Zavarnitsyn <rom4ek93@gmail.com>
Co-authored-by: Sentry Github Bot <bot+github-bot@sentry.io>
Co-authored-by: Markus Hintersteiner <markus.hintersteiner@sentry.io>
Co-authored-by: getsentry-bot <bot@sentry.io>
Co-authored-by: getsentry-bot <bot@getsentry.com>
Co-authored-by: Krystof Woldrich <krystof.woldrich@sentry.io>
Co-authored-by: Krystof Woldrich <31292499+krystofwoldrich@users.noreply.github.com>
Co-authored-by: Lukas Bloder <lukas.bloder@gmail.com>
Co-authored-by: Denis Andrašec <denrase@gmail.com>
Co-authored-by: Antonis Lilis <antonis.lilis@gmail.com>
Co-authored-by: Karl Heinz Struggl <kahest@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[SR] Jetpack Compose views are not redacted
2 participants