Skip to content

Commit

Permalink
Merge pull request #2361 from DataDog/yl/merge-develop-into-release
Browse files Browse the repository at this point in the history
Merge release 2.15.0 into develop
  • Loading branch information
ambushwork authored Oct 30, 2024
2 parents bcfc7e9 + b2c9bae commit a1b97be
Show file tree
Hide file tree
Showing 16 changed files with 302 additions and 122 deletions.
46 changes: 46 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,49 @@
# 2.15.0 / 2024-10-28

* [FEATURE] Add `TimeBank` in Session Replay recorder for dynamic optimisation See [#2247](https://github.com/DataDog/dd-sdk-android/pull/2247)
* [FEATURE] Add Session Replay skipped frames count in `session ended` metrics. See [#2256](https://github.com/DataDog/dd-sdk-android/pull/2256)
* [FEATURE] Add a touch privacy override. See [#2334](https://github.com/DataDog/dd-sdk-android/pull/2334)
* [FEATURE] Add precheck conditions when registering the Session Replay feature. See [#2264](https://github.com/DataDog/dd-sdk-android/pull/2264)
* [FEATURE] Add a privacy override for hidden views. See [#2291](https://github.com/DataDog/dd-sdk-android/pull/2291)
* [FEATURE] Add image and textAndInput privacy overrides. See [#2312](https://github.com/DataDog/dd-sdk-android/pull/2312)
* [IMPROVEMENT] Add a dynamic optimization configuration field in `SessionReplayConfiguration`. See [#2259](https://github.com/DataDog/dd-sdk-android/pull/2259)
* [IMPROVEMENT] Use layout text to display `TextView` overflow correctly. See [#2279](https://github.com/DataDog/dd-sdk-android/pull/2279)
* [IMPROVEMENT] Remove the Session Replay `ButtonMapper` border. See [#2280](https://github.com/DataDog/dd-sdk-android/pull/2280)
* [IMPROVEMENT] Force single core for Session Replay. See [#2324](https://github.com/DataDog/dd-sdk-android/pull/2324)
* [IMPROVEMENT] Add a `ViewGroups` Session Replay demo screen in sample app. See [#2285](https://github.com/DataDog/dd-sdk-android/pull/2285)
* [IMPROVEMENT] Run integration tests on API 35 in the testing pyramid. See [#2272](https://github.com/DataDog/dd-sdk-android/pull/2272)
* [IMPROVEMENT] Add `MaterialCardView` support in the Material Session Replay extension. See [#2290](https://github.com/DataDog/dd-sdk-android/pull/2290)
* [IMPROVEMENT] Use an SDK source value in the Session Replay `MobileSegment.source` property. See [#2293](https://github.com/DataDog/dd-sdk-android/pull/2293)
* [IMPROVEMENT] Update the Session Replay schema with a Kotlin Multiplatform source for Mobile segment. See [#2297](https://github.com/DataDog/dd-sdk-android/pull/2297)
* [IMPROVEMENT] Improve test coverage of core unit tests. See [#2294](https://github.com/DataDog/dd-sdk-android/pull/2294)
* [IMPROVEMENT] Improve unit test coverage for RUM, Logs and Trace features. See [#2299](https://github.com/DataDog/dd-sdk-android/pull/2299)
* [IMPROVEMENT] Send retry information into RUM data upload requests. See [#2298](https://github.com/DataDog/dd-sdk-android/pull/2298)
* [IMPROVEMENT] Make the `DataOkHttpUploader` state volatile. See [#2305](https://github.com/DataDog/dd-sdk-android/pull/2305)
* [IMPROVEMENT] Read Session Replay system requirements synchronously with strict mode allowance. See [#2307](https://github.com/DataDog/dd-sdk-android/pull/2307)
* [IMPROVEMENT] Override process importance for Session Replay integration tests. See [#2304](https://github.com/DataDog/dd-sdk-android/pull/2304)
* [IMPROVEMENT] Detekt the api coverage in integration tests. See [#2300](https://github.com/DataDog/dd-sdk-android/pull/2300)
* [IMPROVEMENT] Resolve `PorterDuffColorFilter` case in drawable to color mapper. See [#2319](https://github.com/DataDog/dd-sdk-android/pull/2319)
* [IMPROVEMENT] Prevent obfuscation of Fine Grained Masking enums. See [#2321](https://github.com/DataDog/dd-sdk-android/pull/2321)
* [IMPROVEMENT] Make sure `ConsentAwareFileOrchestrator` is thread safe. See [#2313](https://github.com/DataDog/dd-sdk-android/pull/2313)
* [IMPROVEMENT] Improve RUM integration tests. See [#2317](https://github.com/DataDog/dd-sdk-android/pull/2317)
* [IMPROVEMENT] Add a default sample rate for Session Replay. See [#2323](https://github.com/DataDog/dd-sdk-android/pull/2323)
* [IMPROVEMENT] Remove batch metrics inner sampler to increase sample rate. See [#2328](https://github.com/DataDog/dd-sdk-android/pull/2328)
* [IMPROVEMENT] Add missing integration test for Logs. See [#2330](https://github.com/DataDog/dd-sdk-android/pull/2330)
* [IMPROVEMENT] Update Session Replay integration test payloads. See [#2318](https://github.com/DataDog/dd-sdk-android/pull/2318)
* [MAINTENANCE] Update Datadog Agent to 1.41.0. See [#2331](https://github.com/DataDog/dd-sdk-android/pull/2331)
* [MAINTENANCE] Fix the decompression in Session Replay instrumented tests for API 21. See [#2341](https://github.com/DataDog/dd-sdk-android/pull/2341)
* [MAINTENANCE] Reactivate Session Replay instrumented test for API 21. See [#2342](https://github.com/DataDog/dd-sdk-android/pull/2342)
* [MAINTENANCE] Fix some flaky tests. See [#2281](https://github.com/DataDog/dd-sdk-android/pull/2281)
* [MAINTENANCE] Fix a StrictMode warning regarding I/O disk operation on the main thread. See [#2284](https://github.com/DataDog/dd-sdk-android/pull/2284)
* [MAINTENANCE] Fix flaky feature context integration tests. See [#2295](https://github.com/DataDog/dd-sdk-android/pull/2295)
* [MAINTENANCE] Fix `SeekBarWireframeMapper` flaky test. See [#2308](https://github.com/DataDog/dd-sdk-android/pull/2308)
* [MAINTENANCE] Fix `SpanEventSerializerTest` flakiness. See [#2311](https://github.com/DataDog/dd-sdk-android/pull/2311)
* [MAINTENANCE] Remove an unnecessary legacy privacy line from the sampleApplication. See [#2314](https://github.com/DataDog/dd-sdk-android/pull/2314)
* [MAINTENANCE] Use Java 11 bytecode for public modules. See [#2315](https://github.com/DataDog/dd-sdk-android/pull/2315)
* [MAINTENANCE] Fix RUM integration test `verifyViewEventsOnSwipe`. See [#2326](https://github.com/DataDog/dd-sdk-android/pull/2326)
* [MAINTENANCE] Fix the regression for the `TelemetryErrorEvent` with throwable. See [#2325](https://github.com/DataDog/dd-sdk-android/pull/2325)
* [MAINTENANCE] Fix the execution of legacy instrumentation tests in CI. See [#2329](https://github.com/DataDog/dd-sdk-android/pull/2329)

# 2.14.0 / 2024-09-25

* [FEATURE] Add stop and start APIs for Session Replay. See [#2169](https://github.com/DataDog/dd-sdk-android/pull/2169)
Expand Down
6 changes: 5 additions & 1 deletion features/dd-sdk-android-session-replay/api/apiSurface
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ enum com.datadog.android.sessionreplay.TextAndInputPrivacy : PrivacyLevel
enum com.datadog.android.sessionreplay.TouchPrivacy : PrivacyLevel
- SHOW
- HIDE
class com.datadog.android.sessionreplay.internal.recorder.resources.DefaultDrawableCopier : DrawableCopier
override fun copy(android.graphics.drawable.Drawable, android.content.res.Resources): android.graphics.drawable.Drawable?
interface com.datadog.android.sessionreplay.internal.recorder.resources.DrawableCopier
fun copy(android.graphics.drawable.Drawable, android.content.res.Resources): android.graphics.drawable.Drawable?
data class com.datadog.android.sessionreplay.recorder.MappingContext
constructor(SystemInformation, com.datadog.android.sessionreplay.utils.ImageWireframeHelper, com.datadog.android.sessionreplay.TextAndInputPrivacy, com.datadog.android.sessionreplay.ImagePrivacy, Boolean = false)
interface com.datadog.android.sessionreplay.recorder.OptionSelectorDetector
Expand Down Expand Up @@ -109,7 +113,7 @@ interface com.datadog.android.sessionreplay.utils.DrawableToColorMapper
data class com.datadog.android.sessionreplay.utils.GlobalBounds
constructor(Long, Long, Long, Long)
interface com.datadog.android.sessionreplay.utils.ImageWireframeHelper
fun createImageWireframe(android.view.View, com.datadog.android.sessionreplay.ImagePrivacy, Int, Long, Long, Int, Int, Boolean, android.graphics.drawable.Drawable, AsyncJobStatusCallback, com.datadog.android.sessionreplay.model.MobileSegment.WireframeClip? = null, com.datadog.android.sessionreplay.model.MobileSegment.ShapeStyle? = null, com.datadog.android.sessionreplay.model.MobileSegment.ShapeBorder? = null, String? = DRAWABLE_CHILD_NAME): com.datadog.android.sessionreplay.model.MobileSegment.Wireframe?
fun createImageWireframe(android.view.View, com.datadog.android.sessionreplay.ImagePrivacy, Int, Long, Long, Int, Int, Boolean, android.graphics.drawable.Drawable, com.datadog.android.sessionreplay.internal.recorder.resources.DrawableCopier = DefaultDrawableCopier(), AsyncJobStatusCallback, com.datadog.android.sessionreplay.model.MobileSegment.WireframeClip? = null, com.datadog.android.sessionreplay.model.MobileSegment.ShapeStyle? = null, com.datadog.android.sessionreplay.model.MobileSegment.ShapeBorder? = null, String? = DRAWABLE_CHILD_NAME): com.datadog.android.sessionreplay.model.MobileSegment.Wireframe?
fun createCompoundDrawableWireframes(android.widget.TextView, com.datadog.android.sessionreplay.recorder.MappingContext, Int, AsyncJobStatusCallback): MutableList<com.datadog.android.sessionreplay.model.MobileSegment.Wireframe>
companion object
open class com.datadog.android.sessionreplay.utils.LegacyDrawableToColorMapper : DrawableToColorMapper
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,15 @@ public final class com/datadog/android/sessionreplay/TouchPrivacy : java/lang/En
public static fun values ()[Lcom/datadog/android/sessionreplay/TouchPrivacy;
}

public final class com/datadog/android/sessionreplay/internal/recorder/resources/DefaultDrawableCopier : com/datadog/android/sessionreplay/internal/recorder/resources/DrawableCopier {
public fun <init> ()V
public fun copy (Landroid/graphics/drawable/Drawable;Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
}

public abstract interface class com/datadog/android/sessionreplay/internal/recorder/resources/DrawableCopier {
public abstract fun copy (Landroid/graphics/drawable/Drawable;Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
}

public final class com/datadog/android/sessionreplay/model/MobileSegment {
public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Companion;
public fun <init> (Lcom/datadog/android/sessionreplay/model/MobileSegment$Application;Lcom/datadog/android/sessionreplay/model/MobileSegment$Session;Lcom/datadog/android/sessionreplay/model/MobileSegment$View;JJJLjava/lang/Long;Ljava/lang/Boolean;Lcom/datadog/android/sessionreplay/model/MobileSegment$Source;Ljava/util/List;)V
Expand Down Expand Up @@ -1559,14 +1568,14 @@ public final class com/datadog/android/sessionreplay/utils/GlobalBounds {
public abstract interface class com/datadog/android/sessionreplay/utils/ImageWireframeHelper {
public static final field Companion Lcom/datadog/android/sessionreplay/utils/ImageWireframeHelper$Companion;
public abstract fun createCompoundDrawableWireframes (Landroid/widget/TextView;Lcom/datadog/android/sessionreplay/recorder/MappingContext;ILcom/datadog/android/sessionreplay/utils/AsyncJobStatusCallback;)Ljava/util/List;
public abstract fun createImageWireframe (Landroid/view/View;Lcom/datadog/android/sessionreplay/ImagePrivacy;IJJIIZLandroid/graphics/drawable/Drawable;Lcom/datadog/android/sessionreplay/utils/AsyncJobStatusCallback;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe;
public abstract fun createImageWireframe (Landroid/view/View;Lcom/datadog/android/sessionreplay/ImagePrivacy;IJJIIZLandroid/graphics/drawable/Drawable;Lcom/datadog/android/sessionreplay/internal/recorder/resources/DrawableCopier;Lcom/datadog/android/sessionreplay/utils/AsyncJobStatusCallback;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe;
}

public final class com/datadog/android/sessionreplay/utils/ImageWireframeHelper$Companion {
}

public final class com/datadog/android/sessionreplay/utils/ImageWireframeHelper$DefaultImpls {
public static synthetic fun createImageWireframe$default (Lcom/datadog/android/sessionreplay/utils/ImageWireframeHelper;Landroid/view/View;Lcom/datadog/android/sessionreplay/ImagePrivacy;IJJIIZLandroid/graphics/drawable/Drawable;Lcom/datadog/android/sessionreplay/utils/AsyncJobStatusCallback;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe;
public static synthetic fun createImageWireframe$default (Lcom/datadog/android/sessionreplay/utils/ImageWireframeHelper;Landroid/view/View;Lcom/datadog/android/sessionreplay/ImagePrivacy;IJJIIZLandroid/graphics/drawable/Drawable;Lcom/datadog/android/sessionreplay/internal/recorder/resources/DrawableCopier;Lcom/datadog/android/sessionreplay/utils/AsyncJobStatusCallback;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe;
}

public class com/datadog/android/sessionreplay/utils/LegacyDrawableToColorMapper : com/datadog/android/sessionreplay/utils/DrawableToColorMapper {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,28 +57,25 @@ internal class ImageViewMapper(
val contentYPosInDp = contentRect.top.densityNormalized(density).toLong()
val contentWidthPx = contentRect.width()
val contentHeightPx = contentRect.height()
val contentDrawable = drawable.constantState?.newDrawable(resources)

if (contentDrawable != null) {
// resolve foreground
mappingContext.imageWireframeHelper.createImageWireframe(
view = view,
imagePrivacy = mappingContext.imagePrivacy,
currentWireframeIndex = wireframes.size,
x = contentXPosInDp,
y = contentYPosInDp,
width = contentWidthPx,
height = contentHeightPx,
usePIIPlaceholder = true,
drawable = contentDrawable,
asyncJobStatusCallback = asyncJobStatusCallback,
clipping = clipping,
shapeStyle = null,
border = null,
prefix = ImageWireframeHelper.DRAWABLE_CHILD_NAME
)?.let {
wireframes.add(it)
}
// resolve foreground
mappingContext.imageWireframeHelper.createImageWireframe(
view = view,
imagePrivacy = mappingContext.imagePrivacy,
currentWireframeIndex = wireframes.size,
x = contentXPosInDp,
y = contentYPosInDp,
width = contentWidthPx,
height = contentHeightPx,
usePIIPlaceholder = true,
drawable = drawable,
asyncJobStatusCallback = asyncJobStatusCallback,
clipping = clipping,
shapeStyle = null,
border = null,
prefix = ImageWireframeHelper.DRAWABLE_CHILD_NAME
)?.let {
wireframes.add(it)
}

return wireframes
Expand Down
Loading

0 comments on commit a1b97be

Please sign in to comment.