Skip to content

Commit 76f1e60

Browse files
authored
Merge pull request #2537 from DataDog/nogorodnikov/merge-release-2.19.0-into-master
Merge `release/2.19.0` branch into `master` branch
2 parents e098807 + 8563777 commit 76f1e60

File tree

164 files changed

+4534
-887
lines changed

Some content is hidden

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

164 files changed

+4534
-887
lines changed

.github/workflows/codeql-analysis.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ on:
1010
jobs:
1111
analyze:
1212
name: Analyze
13-
runs-on: ubuntu-20.04
13+
runs-on: ubuntu-latest
1414
permissions:
1515
actions: read
1616
contents: read

.gitlab-ci.yml

+1
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ analysis:detekt-custom:
125125
- ./gradlew :features:dd-sdk-android-rum:customDetektRules
126126
- ./gradlew :features:dd-sdk-android-session-replay:customDetektRules
127127
- ./gradlew :features:dd-sdk-android-session-replay-material:customDetektRules
128+
- ./gradlew :features:dd-sdk-android-session-replay-compose:customDetektRules
128129
- ./gradlew :features:dd-sdk-android-trace:customDetektRules
129130
- ./gradlew :features:dd-sdk-android-trace-otel:customDetektRules
130131
- ./gradlew :features:dd-sdk-android-webview:customDetektRules

CHANGELOG.md

+28
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,30 @@
1+
# 2.19.0 / 2025-03-10
2+
3+
* [FEATURE] Core: Introduce anonymous RUM Identifier. See [#2487](https://github.com/DataDog/dd-sdk-android/pull/2487)
4+
* [BUGFIX] Fixing telemetry sampling rate reporting. See [#2503](https://github.com/DataDog/dd-sdk-android/pull/2503)
5+
* [BUGFIX] Allow first build complete to be any number format. See [#2527](https://github.com/DataDog/dd-sdk-android/pull/2527)
6+
* [IMPROVEMENT] RUM View Ended Telemetry now includes TNS and INV. See [#2495](https://github.com/DataDog/dd-sdk-android/pull/2495)
7+
* [IMPROVEMENT] Trace: Forward RUM Session ID in trace headers. See [#2502](https://github.com/DataDog/dd-sdk-android/pull/2502)
8+
* [IMPROVEMENT] View ended instrumentation type attribute support. See [#2504](https://github.com/DataDog/dd-sdk-android/pull/2504)
9+
* [IMPROVEMENT] Support for configuration schema updates for time based strategy of TNS and INV metrics. See [#2505](https://github.com/DataDog/dd-sdk-android/pull/2505)
10+
* [IMPROVEMENT] Core: Change `UploadWorker` visibility from `internal` to `public`. See [#2511](https://github.com/DataDog/dd-sdk-android/pull/2511)
11+
* [IMPROVEMENT] Ensure span logs use 128 bits trace id as hex string. See [#2512](https://github.com/DataDog/dd-sdk-android/pull/2512)
12+
* [IMPROVEMENT] RUM: Refactor `JankStatsActivityLifecycleListener`. See [#2513](https://github.com/DataDog/dd-sdk-android/pull/2513)
13+
* [IMPROVEMENT] Core: Update `UserInfo` API to make id mandatory. See [#2509](https://github.com/DataDog/dd-sdk-android/pull/2509)
14+
* [IMPROVEMENT] Improvements to the upload mechanism. See [#2514](https://github.com/DataDog/dd-sdk-android/pull/2514)
15+
* [IMPROVEMENT] Catch Coroutines errors while getting all threads stacktraces. See [#2522](https://github.com/DataDog/dd-sdk-android/pull/2522)
16+
* [IMPROVEMENT] Support Flutter's FBC and custom INV values. See [#2520](https://github.com/DataDog/dd-sdk-android/pull/2520)
17+
* [IMPROVEMENT] RUM: Add ability to manually add an activity to `JankStats`. See [#2524](https://github.com/DataDog/dd-sdk-android/pull/2524)
18+
* [IMPROVEMENT] Session Replay: Allow definition of custom implementations of specific Session Replay methods. See [#2516](https://github.com/DataDog/dd-sdk-android/pull/2516)
19+
* [IMPROVEMENT] Session Replay: Improve `StateListDrawable` support in session replay. See [#2531](https://github.com/DataDog/dd-sdk-android/pull/2531)
20+
* [MAINTENANCE] Next dev iteration `2.19.0`. See [#2498](https://github.com/DataDog/dd-sdk-android/pull/2498)
21+
* [MAINTENANCE] Fix flaky test in Head-based sampling test suite. See [#2499](https://github.com/DataDog/dd-sdk-android/pull/2499)
22+
* [MAINTENANCE] Session Replay: Add support for Detekt checks for Session Replay Compose module. See [#2507](https://github.com/DataDog/dd-sdk-android/pull/2507)
23+
* [MAINTENANCE] Update AGP version to `8.8.2`. See [#2515](https://github.com/DataDog/dd-sdk-android/pull/2515)
24+
* [MAINTENANCE] RUM: Avoid logging initial `null` `viewLoadingTime` on first call to `addViewLoadingTime`. See [#2517](https://github.com/DataDog/dd-sdk-android/pull/2517)
25+
* [MAINTENANCE] Upgrade github action to use `ubuntu-latest`. See [#2523](https://github.com/DataDog/dd-sdk-android/pull/2523)
26+
* [DOCS] Update SDK performance doc with Session Replay measurements. See [#2481](https://github.com/DataDog/dd-sdk-android/pull/2481)
27+
128
# 2.18.0 / 2025-02-03
229

330
* [FEATURE] Allow disabling 404 span redaction. See [#2496](https://github.com/DataDog/dd-sdk-android/pull/2496)
@@ -294,6 +321,7 @@
294321
* [FEATURE] Trace: Add OpenTelemetry use case into the `vendor-lib` sample. See [#2069](https://github.com/DataDog/dd-sdk-android/pull/2069)
295322
* [FEATURE] Trace: Add the OkHttp Otel extensions module. See [#2073](https://github.com/DataDog/dd-sdk-android/pull/2073)
296323
* [FEATURE] Trace: `OtelTraceProvider.Builder`: introduce the trace rate limit property. See [#2086](https://github.com/DataDog/dd-sdk-android/pull/2086)
324+
* **WARNING**: Existing `com.datadog.trace` package renamed to `com.datadog.legacy.trace`. `com.datadog.trace` package will contain new members, so update your imports accordingly.
297325
* [BUGFIX] Session Replay: Fix time drift in `RecordedDataQueueHandler`. See [#2075](https://github.com/DataDog/dd-sdk-android/pull/2075)
298326
* [IMPROVEMENT] Trace: Remove some unused IAST/CI Visibility classes. See [#2000](https://github.com/DataDog/dd-sdk-android/pull/2000)
299327
* [IMPROVEMENT] Trace: Remove `moshi` dependency from trace module. See [#2003](https://github.com/DataDog/dd-sdk-android/pull/2003)

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

+1-1
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 = "35.0.0"
2222

23-
val VERSION = Version(2, 18, 0, Version.Type.Release)
23+
val VERSION = Version(2, 19, 0, Version.Type.Release)
2424
}
2525

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

dd-sdk-android-core/api/apiSurface

+26-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ object com.datadog.android.Datadog
77
fun setVerbosity(Int)
88
fun getVerbosity(): Int
99
fun setTrackingConsent(com.datadog.android.privacy.TrackingConsent, com.datadog.android.api.SdkCore = getInstance())
10-
fun setUserInfo(String? = null, String? = null, String? = null, Map<String, Any?> = emptyMap(), com.datadog.android.api.SdkCore = getInstance())
10+
fun setUserInfo(String, String? = null, String? = null, Map<String, Any?> = emptyMap(), com.datadog.android.api.SdkCore = getInstance())
11+
DEPRECATED fun setUserInfo(String? = null, String? = null, String? = null, Map<String, Any?> = emptyMap(), com.datadog.android.api.SdkCore = getInstance())
1112
fun addUserProperties(Map<String, Any?>, com.datadog.android.api.SdkCore = getInstance())
1213
fun clearAllData(com.datadog.android.api.SdkCore = getInstance())
1314
fun _internalProxy(String? = null): _InternalProxy
@@ -89,7 +90,7 @@ data class com.datadog.android.api.context.ProcessInfo
8990
data class com.datadog.android.api.context.TimeInfo
9091
constructor(Long, Long, Long, Long)
9192
data class com.datadog.android.api.context.UserInfo
92-
constructor(kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, Map<kotlin.String, kotlin.Any?> = emptyMap())
93+
constructor(kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, Map<kotlin.String, kotlin.Any?> = emptyMap())
9394
interface com.datadog.android.api.feature.Feature
9495
val name: String
9596
fun onInitialize(android.content.Context)
@@ -123,6 +124,7 @@ interface com.datadog.android.api.feature.FeatureSdkCore : com.datadog.android.a
123124
fun removeEventReceiver(String)
124125
fun createSingleThreadExecutorService(String): java.util.concurrent.ExecutorService
125126
fun createScheduledExecutorService(String): java.util.concurrent.ScheduledExecutorService
127+
fun setAnonymousId(java.util.UUID?)
126128
interface com.datadog.android.api.feature.StorageBackedFeature : Feature
127129
val requestFactory: com.datadog.android.api.net.RequestFactory
128130
val storageConfiguration: com.datadog.android.api.storage.FeatureStorageConfiguration
@@ -192,6 +194,10 @@ class com.datadog.android.core.SdkReference
192194
fun get(): com.datadog.android.api.SdkCore?
193195
fun <T> allowThreadDiskReads(() -> T): T
194196
fun <T> allowThreadDiskWrites(() -> T): T
197+
class com.datadog.android.core.UploadWorker : androidx.work.Worker
198+
constructor(android.content.Context, androidx.work.WorkerParameters)
199+
override fun doWork(): Result
200+
companion object
195201
enum com.datadog.android.core.configuration.BackPressureMitigation
196202
- DROP_OLDEST
197203
- IGNORE_NEWEST
@@ -254,6 +260,24 @@ sealed class com.datadog.android.core.feature.event.JvmCrash
254260
constructor(Throwable, String, List<ThreadDump>)
255261
data class com.datadog.android.core.feature.event.ThreadDump
256262
constructor(String, String, String, Boolean)
263+
interface com.datadog.android.core.internal.attributes.LocalAttribute
264+
enum Key
265+
constructor(String)
266+
- CREATION_SAMPLING_RATE
267+
- REPORTING_SAMPLING_RATE
268+
- VIEW_SCOPE_INSTRUMENTATION_TYPE
269+
override fun toString(): String
270+
interface Constant
271+
val key: Key
272+
fun MutableMap<String, Any?>.enrichWithConstantAttribute(LocalAttribute.Constant)
273+
fun MutableMap<String, Any?>.enrichWithNonNullAttribute(LocalAttribute.Key, Any?)
274+
fun MutableMap<String, Any?>.enrichWithLocalAttribute(LocalAttribute.Key, Any?)
275+
enum com.datadog.android.core.internal.attributes.ViewScopeInstrumentationType : LocalAttribute.Constant
276+
- MANUAL
277+
- COMPOSE
278+
- ACTIVITY
279+
- FRAGMENT
280+
override val key: LocalAttribute.Key
257281
class com.datadog.android.core.internal.net.DefaultFirstPartyHostHeaderTypeResolver : FirstPartyHostHeaderTypeResolver
258282
constructor(Map<String, Set<com.datadog.android.trace.TracingHeaderType>>)
259283
override fun isFirstPartyUrl(okhttp3.HttpUrl): Boolean

dd-sdk-android-core/api/dd-sdk-android-core.api

+56-6
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,19 @@ public final class com/datadog/android/Datadog {
3030
public static final fun setTrackingConsent (Lcom/datadog/android/privacy/TrackingConsent;)V
3131
public static final fun setTrackingConsent (Lcom/datadog/android/privacy/TrackingConsent;Lcom/datadog/android/api/SdkCore;)V
3232
public static synthetic fun setTrackingConsent$default (Lcom/datadog/android/privacy/TrackingConsent;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V
33-
public static final fun setUserInfo ()V
3433
public static final fun setUserInfo (Ljava/lang/String;)V
3534
public static final fun setUserInfo (Ljava/lang/String;Ljava/lang/String;)V
3635
public static final fun setUserInfo (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
3736
public static final fun setUserInfo (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V
3837
public static final fun setUserInfo (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lcom/datadog/android/api/SdkCore;)V
3938
public static synthetic fun setUserInfo$default (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V
39+
public static final fun setUserInfoDeprecated ()V
40+
public static final fun setUserInfoDeprecated (Ljava/lang/String;)V
41+
public static final fun setUserInfoDeprecated (Ljava/lang/String;Ljava/lang/String;)V
42+
public static final fun setUserInfoDeprecated (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
43+
public static final fun setUserInfoDeprecated (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V
44+
public static final fun setUserInfoDeprecated (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lcom/datadog/android/api/SdkCore;)V
45+
public static synthetic fun setUserInfoDeprecated$default (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V
4046
public static final fun setVerbosity (I)V
4147
public static final fun stopInstance ()V
4248
public static final fun stopInstance (Ljava/lang/String;)V
@@ -281,18 +287,20 @@ public final class com/datadog/android/api/context/TimeInfo {
281287

282288
public final class com/datadog/android/api/context/UserInfo {
283289
public fun <init> ()V
284-
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V
285-
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
290+
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V
291+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
286292
public final fun component1 ()Ljava/lang/String;
287293
public final fun component2 ()Ljava/lang/String;
288294
public final fun component3 ()Ljava/lang/String;
289-
public final fun component4 ()Ljava/util/Map;
290-
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/api/context/UserInfo;
291-
public static synthetic fun copy$default (Lcom/datadog/android/api/context/UserInfo;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/api/context/UserInfo;
295+
public final fun component4 ()Ljava/lang/String;
296+
public final fun component5 ()Ljava/util/Map;
297+
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/api/context/UserInfo;
298+
public static synthetic fun copy$default (Lcom/datadog/android/api/context/UserInfo;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/api/context/UserInfo;
292299
public fun equals (Ljava/lang/Object;)Z
293300
public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/api/context/UserInfo;
294301
public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/api/context/UserInfo;
295302
public final fun getAdditionalProperties ()Ljava/util/Map;
303+
public final fun getAnonymousId ()Ljava/lang/String;
296304
public final fun getEmail ()Ljava/lang/String;
297305
public final fun getId ()Ljava/lang/String;
298306
public final fun getName ()Ljava/lang/String;
@@ -355,6 +363,7 @@ public abstract interface class com/datadog/android/api/feature/FeatureSdkCore :
355363
public abstract fun registerFeature (Lcom/datadog/android/api/feature/Feature;)V
356364
public abstract fun removeContextUpdateReceiver (Ljava/lang/String;Lcom/datadog/android/api/feature/FeatureContextUpdateReceiver;)V
357365
public abstract fun removeEventReceiver (Ljava/lang/String;)V
366+
public abstract fun setAnonymousId (Ljava/util/UUID;)V
358367
public abstract fun setContextUpdateReceiver (Ljava/lang/String;Lcom/datadog/android/api/feature/FeatureContextUpdateReceiver;)V
359368
public abstract fun setEventReceiver (Ljava/lang/String;Lcom/datadog/android/api/feature/FeatureEventReceiver;)V
360369
public abstract fun updateFeatureContext (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
@@ -545,6 +554,15 @@ public final class com/datadog/android/core/StrictModeExtKt {
545554
public static final fun allowThreadDiskWrites (Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;
546555
}
547556

557+
public final class com/datadog/android/core/UploadWorker : androidx/work/Worker {
558+
public static final field Companion Lcom/datadog/android/core/UploadWorker$Companion;
559+
public fun <init> (Landroid/content/Context;Landroidx/work/WorkerParameters;)V
560+
public fun doWork ()Landroidx/work/ListenableWorker$Result;
561+
}
562+
563+
public final class com/datadog/android/core/UploadWorker$Companion {
564+
}
565+
548566
public final class com/datadog/android/core/configuration/BackPressureMitigation : java/lang/Enum {
549567
public static final field DROP_OLDEST Lcom/datadog/android/core/configuration/BackPressureMitigation;
550568
public static final field IGNORE_NEWEST Lcom/datadog/android/core/configuration/BackPressureMitigation;
@@ -713,6 +731,38 @@ public final class com/datadog/android/core/feature/event/ThreadDump {
713731
public fun toString ()Ljava/lang/String;
714732
}
715733

734+
public abstract interface class com/datadog/android/core/internal/attributes/LocalAttribute {
735+
}
736+
737+
public abstract interface class com/datadog/android/core/internal/attributes/LocalAttribute$Constant {
738+
public abstract fun getKey ()Lcom/datadog/android/core/internal/attributes/LocalAttribute$Key;
739+
}
740+
741+
public final class com/datadog/android/core/internal/attributes/LocalAttribute$Key : java/lang/Enum {
742+
public static final field CREATION_SAMPLING_RATE Lcom/datadog/android/core/internal/attributes/LocalAttribute$Key;
743+
public static final field REPORTING_SAMPLING_RATE Lcom/datadog/android/core/internal/attributes/LocalAttribute$Key;
744+
public static final field VIEW_SCOPE_INSTRUMENTATION_TYPE Lcom/datadog/android/core/internal/attributes/LocalAttribute$Key;
745+
public fun toString ()Ljava/lang/String;
746+
public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/core/internal/attributes/LocalAttribute$Key;
747+
public static fun values ()[Lcom/datadog/android/core/internal/attributes/LocalAttribute$Key;
748+
}
749+
750+
public final class com/datadog/android/core/internal/attributes/LocalAttributeKt {
751+
public static final fun enrichWithConstantAttribute (Ljava/util/Map;Lcom/datadog/android/core/internal/attributes/LocalAttribute$Constant;)Ljava/util/Map;
752+
public static final fun enrichWithLocalAttribute (Ljava/util/Map;Lcom/datadog/android/core/internal/attributes/LocalAttribute$Key;Ljava/lang/Object;)Ljava/util/Map;
753+
public static final fun enrichWithNonNullAttribute (Ljava/util/Map;Lcom/datadog/android/core/internal/attributes/LocalAttribute$Key;Ljava/lang/Object;)Ljava/util/Map;
754+
}
755+
756+
public final class com/datadog/android/core/internal/attributes/ViewScopeInstrumentationType : java/lang/Enum, com/datadog/android/core/internal/attributes/LocalAttribute$Constant {
757+
public static final field ACTIVITY Lcom/datadog/android/core/internal/attributes/ViewScopeInstrumentationType;
758+
public static final field COMPOSE Lcom/datadog/android/core/internal/attributes/ViewScopeInstrumentationType;
759+
public static final field FRAGMENT Lcom/datadog/android/core/internal/attributes/ViewScopeInstrumentationType;
760+
public static final field MANUAL Lcom/datadog/android/core/internal/attributes/ViewScopeInstrumentationType;
761+
public fun getKey ()Lcom/datadog/android/core/internal/attributes/LocalAttribute$Key;
762+
public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/core/internal/attributes/ViewScopeInstrumentationType;
763+
public static fun values ()[Lcom/datadog/android/core/internal/attributes/ViewScopeInstrumentationType;
764+
}
765+
716766
public final class com/datadog/android/core/internal/net/DefaultFirstPartyHostHeaderTypeResolver : com/datadog/android/core/internal/net/FirstPartyHostHeaderTypeResolver {
717767
public fun <init> (Ljava/util/Map;)V
718768
public fun getAllHeaderTypes ()Ljava/util/Set;

dd-sdk-android-core/src/main/kotlin/com/datadog/android/Datadog.kt

+25
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,29 @@ object Datadog {
236236
sdkCore.setTrackingConsent(consent)
237237
}
238238

239+
/**
240+
* Sets the user information.
241+
*
242+
* @param id a unique user identifier (relevant to your business domain)
243+
* @param name (nullable) the user name or alias
244+
* @param email (nullable) the user email
245+
* @param extraInfo additional information. An extra information can be
246+
* nested up to 8 levels deep. Keys using more than 8 levels will be sanitized by SDK.
247+
* @param sdkCore SDK instance to set user info in. If not provided, default SDK instance
248+
* will be used.
249+
*/
250+
@JvmStatic
251+
@JvmOverloads
252+
fun setUserInfo(
253+
id: String,
254+
name: String? = null,
255+
email: String? = null,
256+
extraInfo: Map<String, Any?> = emptyMap(),
257+
sdkCore: SdkCore = getInstance()
258+
) {
259+
sdkCore.setUserInfo(id, name, email, extraInfo)
260+
}
261+
239262
/**
240263
* Sets the user information.
241264
*
@@ -249,6 +272,8 @@ object Datadog {
249272
*/
250273
@JvmStatic
251274
@JvmOverloads
275+
@Deprecated("UserInfo id property is now mandatory.")
276+
@JvmName("setUserInfoDeprecated")
252277
fun setUserInfo(
253278
id: String? = null,
254279
name: String? = null,

0 commit comments

Comments
 (0)