Skip to content

Commit d4c9984

Browse files
authored
Merge pull request #2681 from DataDog/nogorodnikov/merge-develop-into-feature-context-sync-280525
Merge `develop` branch into feature context synchronization branch
2 parents 80a430e + 017104a commit d4c9984

File tree

57 files changed

+710
-220
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+710
-220
lines changed

CHANGELOG.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,28 @@
1+
# 2.22.0 / 2025-05-28
2+
3+
* [FEATURE] Session Replay: Support Coil3 for Session Replay image recording. See [#2648](https://github.com/DataDog/dd-sdk-android/pull/2648)
4+
* [FEATURE] RUM: Add Compose custom attributes for actions tracking. See [#2661](https://github.com/DataDog/dd-sdk-android/pull/2661)
5+
* [BUGFIX] RUM: Fix background session start reason. See [#2623](https://github.com/DataDog/dd-sdk-android/pull/2623)
6+
* [BUGFIX] Core: Catch exceptions during the Power or Battery broadcast intents processing. See [#2642](https://github.com/DataDog/dd-sdk-android/pull/2642)
7+
* [IMPROVEMENT] `LogsCustom` scenario for Android benchmark app. See [#2625](https://github.com/DataDog/dd-sdk-android/pull/2625)
8+
* [IMPROVEMENT] `LogsHeavyTraffic` scenario for Android benchmarks. See [#2629](https://github.com/DataDog/dd-sdk-android/pull/2629)
9+
* [IMPROVEMENT] `Trace` scenario for Android benchmark app. See [#2637](https://github.com/DataDog/dd-sdk-android/pull/2637)
10+
* [IMPROVEMENT] Replace `addFirst` usage in `PendingTrace`. See [#2638](https://github.com/DataDog/dd-sdk-android/pull/2638)
11+
* [IMPROVEMENT] `RumManual` scenario for Android benchmark app. See [#2644](https://github.com/DataDog/dd-sdk-android/pull/2644)
12+
* [IMPROVEMENT] Align Datadog initialization with iOS for benchmark app. See [#2647](https://github.com/DataDog/dd-sdk-android/pull/2647)
13+
* [IMPROVEMENT] Fix Datadog core creation in baseline benchmark run. See [#2649](https://github.com/DataDog/dd-sdk-android/pull/2649)
14+
* [IMPROVEMENT] RUM: Add Jetpack Compose specific log in gesture listener if target not found. See [#2651](https://github.com/DataDog/dd-sdk-android/pull/2651)
15+
* [IMPROVEMENT] Add sample screen for Compose image content scale. See [#2659](https://github.com/DataDog/dd-sdk-android/pull/2659)
16+
* [IMPROVEMENT] Remove `addFirst`, `removeFirst`, `removeLast` usages. See [#2664](https://github.com/DataDog/dd-sdk-android/pull/2664)
17+
* [IMPROVEMENT] RUM: Use reflection to retrieve semantics information in modifier. See [#2667](https://github.com/DataDog/dd-sdk-android/pull/2667)
18+
* [MAINTENANCE] Next dev iteration. See [#2630](https://github.com/DataDog/dd-sdk-android/pull/2630)
19+
* [MAINTENANCE] Merge `release/2.21.0` into develop. See [#2632](https://github.com/DataDog/dd-sdk-android/pull/2632)
20+
* [MAINTENANCE] Update `unMock` plugin version, remove `me.xdrop:fuzzywuzzy` dependency, remove deprecated Gradle APIs. See [#2634](https://github.com/DataDog/dd-sdk-android/pull/2634)
21+
* [MAINTENANCE] Speed up some tests in `FeatureScopeTest` by reducing unconditional wait time. See [#2643](https://github.com/DataDog/dd-sdk-android/pull/2643)
22+
* [MAINTENANCE] Fix logging format for error messages in `PlainBatchFileReaderWriter`. See [#2652](https://github.com/DataDog/dd-sdk-android/pull/2652)
23+
* [MAINTENANCE] Remove telemetry target from error logging in `PlainBatchFileReaderWriter`. See [#2653](https://github.com/DataDog/dd-sdk-android/pull/2653)
24+
* [MAINTENANCE] Better project-type dependency resolution for Detekt custom rules execution. See [#2670](https://github.com/DataDog/dd-sdk-android/pull/2670)
25+
126
# 2.21.0 / 2025-05-06
227

328
* [FEATURE] Add Compose instrumentation API for view tracking and image recording. See [#2570](https://github.com/DataDog/dd-sdk-android/pull/2570)

buildSrc/src/main/kotlin/com/datadog/gradle/config/AndroidConfig.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ object AndroidConfig {
2020
const val MIN_SDK_FOR_WEAR = 23
2121
const val BUILD_TOOLS_VERSION = "36.0.0"
2222

23-
val VERSION = Version(2, 22, 0, Version.Type.Snapshot)
23+
val VERSION = Version(2, 23, 0, Version.Type.Snapshot)
2424
}
2525

2626
// TODO RUM-628 Switch to Java 17 bytecode

buildSrc/src/main/kotlin/com/datadog/gradle/config/DetektCustomConfig.kt

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package com.datadog.gradle.config
88

99
import com.android.build.gradle.LibraryExtension
1010
import org.gradle.api.Project
11+
import org.gradle.api.artifacts.ProjectDependency
1112
import org.gradle.api.file.FileCollection
1213
import org.gradle.api.file.FileTree
1314
import org.gradle.api.internal.file.UnionFileTree
@@ -17,9 +18,7 @@ import org.gradle.api.tasks.JavaExec
1718
import java.io.File
1819
import java.util.Properties
1920

20-
fun Project.detektCustomConfig(
21-
vararg moduleDependencies: String
22-
) {
21+
fun Project.detektCustomConfig() {
2322
val ext = extensions.findByType(LibraryExtension::class.java)
2423

2524
tasks.register("printDetektClasspath") {
@@ -99,6 +98,23 @@ fun Project.detektCustomConfig(
9998
args("-ex", "**/*.kts")
10099
args("--jvm-target", "11")
101100

101+
val moduleDependencies = configurations
102+
.filter { it.name == "implementation" || it.name == "api" }
103+
.flatMap { it.dependencies.filterIsInstance<ProjectDependency>() }
104+
.map { it.path }
105+
.toSet()
106+
.let {
107+
// api configurations have canBeResolved=false, so we cannot go inside them to see transitive
108+
// module dependencies, so including common modules
109+
if (project.path == ":dd-sdk-android-internal") {
110+
it
111+
} else if (project.path == ":dd-sdk-android-core") {
112+
it + ":dd-sdk-android-internal"
113+
} else {
114+
it + setOf(":dd-sdk-android-core", ":dd-sdk-android-internal")
115+
}
116+
}
117+
102118
val externalDependencies = File("${projectDir.absolutePath}/detekt_classpath").readText()
103119
val moduleDependenciesClasses = moduleDependencies.map {
104120
"${rootDir.absolutePath}${it.replace(':', '/')}/build/extracted/classes.jar"

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/persistence/file/batch/PlainBatchFileReaderWriter.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ internal class PlainBatchFileReaderWriter(
4040
} catch (e: IOException) {
4141
internalLogger.log(
4242
InternalLogger.Level.ERROR,
43-
listOf(InternalLogger.Target.MAINTAINER, InternalLogger.Target.TELEMETRY),
43+
listOf(InternalLogger.Target.MAINTAINER),
4444
{ ERROR_WRITE.format(Locale.US, file.path) },
4545
e
4646
)
@@ -78,7 +78,7 @@ internal class PlainBatchFileReaderWriter(
7878
internalLogger.log(
7979
InternalLogger.Level.ERROR,
8080
listOf(InternalLogger.Target.MAINTAINER, InternalLogger.Target.TELEMETRY),
81-
{ "ERROR_READ.format(Locale.US, file.path)" },
81+
{ ERROR_READ.format(Locale.US, file.path) },
8282
e
8383
)
8484
emptyList()

dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/persistence/file/batch/PlainBatchFileReaderWriterTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ internal class PlainBatchFileReaderWriterTest {
177177
assertThat(file).doesNotExist()
178178
mockInternalLogger.verifyLog(
179179
InternalLogger.Level.ERROR,
180-
listOf(InternalLogger.Target.MAINTAINER, InternalLogger.Target.TELEMETRY),
180+
listOf(InternalLogger.Target.MAINTAINER),
181181
PlainBatchFileReaderWriter.ERROR_WRITE.format(Locale.US, file.path),
182182
FileNotFoundException::class.java
183183
)
@@ -204,7 +204,7 @@ internal class PlainBatchFileReaderWriterTest {
204204
assertThat(result).isFalse()
205205
mockInternalLogger.verifyLog(
206206
InternalLogger.Level.ERROR,
207-
listOf(InternalLogger.Target.MAINTAINER, InternalLogger.Target.TELEMETRY),
207+
listOf(InternalLogger.Target.MAINTAINER),
208208
PlainBatchFileReaderWriter.ERROR_WRITE.format(Locale.US, file.path),
209209
FileNotFoundException::class.java
210210
)

detekt_custom.yml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,8 @@ datadog:
255255
# endregion
256256
# region Java Collections
257257
- "java.util.Collections.newSetFromMap(kotlin.collections.MutableMap?):java.lang.IllegalArgumentException"
258+
- "java.util.LinkedList.add(kotlin.Int, android.view.View):java.lang.IndexOutOfBoundsException"
259+
- "java.util.LinkedList.add(kotlin.Int, com.datadog.android.webview.internal.rum.domain.WebViewNativeRumViewsCache.ViewEntry):java.lang.IndexOutOfBoundsException"
258260
- "java.util.LinkedList.offer(com.datadog.android.core.internal.data.upload.UploadWorker.UploadNextBatchTask):java.lang.ClassCastException,java.lang.NullPointerException,java.lang.IllegalArgumentException"
259261
- "java.util.LinkedList.removeFirst():java.util.NoSuchElementException"
260262
- "java.util.LinkedList.removeLast():java.util.NoSuchElementException"
@@ -654,15 +656,19 @@ datadog:
654656
- "java.util.LinkedList.addAll(kotlin.collections.Collection)"
655657
- "java.util.LinkedList.addAll(kotlin.Int, kotlin.collections.Collection)"
656658
- "java.util.LinkedList.addFirst(android.view.View?)"
659+
- "java.util.LinkedList.addFirst(com.datadog.android.webview.internal.rum.domain.WebViewNativeRumViewsCache.ViewEntry?)"
657660
- "java.util.LinkedList.clear()"
658661
- "java.util.LinkedList.constructor()"
659662
- "java.util.LinkedList.constructor(kotlin.collections.MutableCollection?)"
660663
- "java.util.LinkedList.firstOrNull(kotlin.Function1)"
661664
- "java.util.LinkedList.forEach(kotlin.Function1)"
662665
- "java.util.LinkedList.isEmpty()"
663666
- "java.util.LinkedList.isNotEmpty()"
667+
- "java.util.LinkedList.iterator()"
668+
- "java.util.LinkedList.peekLast()"
664669
- "java.util.LinkedList.poll()"
665670
- "java.util.LinkedList.remove(com.datadog.android.privacy.TrackingConsentProviderCallback)"
671+
- "java.util.LinkedList.remove(com.datadog.android.webview.internal.rum.domain.WebViewNativeRumViewsCache.ViewEntry)"
666672
- "java.util.LinkedHashMap.remove(kotlin.String)"
667673
- "java.util.Queue.addAll(kotlin.collections.Collection)"
668674
- "java.util.Queue.clear()"
@@ -825,10 +831,6 @@ datadog:
825831
- "java.util.HashMap.clear()"
826832
- "java.util.HashSet.addAll(kotlin.collections.Collection)"
827833
- "java.util.HashSet.find(kotlin.Function1)"
828-
- "java.util.LinkedList.addFirst(com.datadog.android.webview.internal.rum.domain.WebViewNativeRumViewsCache.ViewEntry?)"
829-
- "java.util.LinkedList.peekLast()"
830-
- "java.util.LinkedList.remove(com.datadog.android.webview.internal.rum.domain.WebViewNativeRumViewsCache.ViewEntry)"
831-
- "java.util.LinkedList.iterator()"
832834
- "java.util.Properties.constructor()"
833835
- "java.util.Properties.setProperty(kotlin.String?, kotlin.String?)"
834836
- "java.util.UUID.constructor(kotlin.Long, kotlin.Long)"

features/dd-sdk-android-logs/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,4 @@ publishingConfig(
8888
"The Logs feature to use with the Datadog monitoring " +
8989
"library for Android applications."
9090
)
91-
detektCustomConfig(":dd-sdk-android-core", ":dd-sdk-android-internal")
91+
detektCustomConfig()

features/dd-sdk-android-ndk/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,4 +109,4 @@ dependencyUpdateConfig()
109109
publishingConfig(
110110
"An NDK integration to use with the Datadog monitoring library for Android applications."
111111
)
112-
detektCustomConfig(":dd-sdk-android-core")
112+
detektCustomConfig()

features/dd-sdk-android-rum/api/apiSurface

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ object com.datadog.android.rum.RumAttributes
5151
const val ACTION_TARGET_PARENT_CLASSNAME: String
5252
const val ACTION_TARGET_PARENT_RESOURCE_ID: String
5353
const val ACTION_TARGET_RESOURCE_ID: String
54+
const val ACTION_TARGET_SELECTED: String
55+
const val ACTION_TARGET_ROLE: String
5456
const val ACTION_GESTURE_DIRECTION: String
5557
const val ACTION_GESTURE_FROM_STATE: String
5658
const val ACTION_GESTURE_TO_STATE: String
@@ -300,9 +302,11 @@ interface com.datadog.android.rum.tracking.TrackingStrategy
300302
interface com.datadog.android.rum.tracking.ViewAttributesProvider
301303
fun extractAttributes(android.view.View, MutableMap<String, Any?>)
302304
class com.datadog.android.rum.tracking.ViewTarget
303-
constructor(java.lang.ref.WeakReference<android.view.View?> = WeakReference(null), String? = null)
305+
constructor(java.lang.ref.WeakReference<android.view.View?> = WeakReference(null), Node? = null)
304306
override fun equals(Any?): Boolean
305307
override fun hashCode(): Int
308+
data class com.datadog.android.rum.tracking.Node
309+
constructor(String, Map<String, Any?> = mapOf())
306310
interface com.datadog.android.rum.tracking.ViewTrackingStrategy : TrackingStrategy
307311
class com.datadog.android.sqlite.DatadogDatabaseErrorHandler : android.database.DatabaseErrorHandler
308312
constructor(String? = null, android.database.DatabaseErrorHandler = DefaultDatabaseErrorHandler())

features/dd-sdk-android-rum/api/dd-sdk-android-rum.api

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ public final class com/datadog/android/rum/RumAttributes {
5353
public static final field ACTION_TARGET_PARENT_INDEX Ljava/lang/String;
5454
public static final field ACTION_TARGET_PARENT_RESOURCE_ID Ljava/lang/String;
5555
public static final field ACTION_TARGET_RESOURCE_ID Ljava/lang/String;
56+
public static final field ACTION_TARGET_ROLE Ljava/lang/String;
57+
public static final field ACTION_TARGET_SELECTED Ljava/lang/String;
5658
public static final field ACTION_TARGET_TITLE Ljava/lang/String;
5759
public static final field APPLICATION_VERSION Ljava/lang/String;
5860
public static final field CUSTOM_INV_VALUE Ljava/lang/String;
@@ -6857,6 +6859,20 @@ public final class com/datadog/android/rum/tracking/NavigationViewTrackingStrate
68576859
public final fun stopTracking ()V
68586860
}
68596861

6862+
public final class com/datadog/android/rum/tracking/Node {
6863+
public fun <init> (Ljava/lang/String;Ljava/util/Map;)V
6864+
public synthetic fun <init> (Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
6865+
public final fun component1 ()Ljava/lang/String;
6866+
public final fun component2 ()Ljava/util/Map;
6867+
public final fun copy (Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/rum/tracking/Node;
6868+
public static synthetic fun copy$default (Lcom/datadog/android/rum/tracking/Node;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/rum/tracking/Node;
6869+
public fun equals (Ljava/lang/Object;)Z
6870+
public final fun getCustomAttributes ()Ljava/util/Map;
6871+
public final fun getName ()Ljava/lang/String;
6872+
public fun hashCode ()I
6873+
public fun toString ()Ljava/lang/String;
6874+
}
6875+
68606876
public abstract interface class com/datadog/android/rum/tracking/TrackingStrategy {
68616877
public abstract fun register (Lcom/datadog/android/api/SdkCore;Landroid/content/Context;)V
68626878
public abstract fun unregister (Landroid/content/Context;)V
@@ -6868,10 +6884,10 @@ public abstract interface class com/datadog/android/rum/tracking/ViewAttributesP
68686884

68696885
public final class com/datadog/android/rum/tracking/ViewTarget {
68706886
public fun <init> ()V
6871-
public fun <init> (Ljava/lang/ref/WeakReference;Ljava/lang/String;)V
6872-
public synthetic fun <init> (Ljava/lang/ref/WeakReference;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
6887+
public fun <init> (Ljava/lang/ref/WeakReference;Lcom/datadog/android/rum/tracking/Node;)V
6888+
public synthetic fun <init> (Ljava/lang/ref/WeakReference;Lcom/datadog/android/rum/tracking/Node;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
68736889
public fun equals (Ljava/lang/Object;)Z
6874-
public final fun getTag ()Ljava/lang/String;
6890+
public final fun getNode ()Lcom/datadog/android/rum/tracking/Node;
68756891
public final fun getViewRef ()Ljava/lang/ref/WeakReference;
68766892
public fun hashCode ()I
68776893
}

0 commit comments

Comments
 (0)