Skip to content

Commit 087b9cd

Browse files
authored
Merge pull request #2696 from DataDog/yl/account-info/add-entity
RUM-10242: Add AccountInfo data class and provider
2 parents 072d162 + 4dfa69d commit 087b9cd

File tree

9 files changed

+484
-0
lines changed

9 files changed

+484
-0
lines changed

dd-sdk-android-core/api/apiSurface

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ interface com.datadog.android.api.SdkCore
6363
fun setAccountInfo(String, String? = null, Map<String, Any?> = emptyMap())
6464
fun addAccountExtraInfo(Map<String, Any?> = emptyMap())
6565
fun clearAccountInfo()
66+
data class com.datadog.android.api.context.AccountInfo
67+
constructor(String? = null, String? = null, Map<String, Any?> = emptyMap())
6668
data class com.datadog.android.api.context.DatadogContext
6769
constructor(com.datadog.android.DatadogSite, String, String, String, String, String, String, String, TimeInfo, ProcessInfo, NetworkInfo, DeviceInfo, UserInfo, com.datadog.android.privacy.TrackingConsent, String?, Map<String, Map<String, Any?>>)
6870
data class com.datadog.android.api.context.DeviceInfo

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,23 @@ public final class com/datadog/android/api/SdkCore$DefaultImpls {
149149
public static synthetic fun setUserInfo$default (Lcom/datadog/android/api/SdkCore;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)V
150150
}
151151

152+
public final class com/datadog/android/api/context/AccountInfo {
153+
public fun <init> ()V
154+
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V
155+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
156+
public final fun component1 ()Ljava/lang/String;
157+
public final fun component2 ()Ljava/lang/String;
158+
public final fun component3 ()Ljava/util/Map;
159+
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/api/context/AccountInfo;
160+
public static synthetic fun copy$default (Lcom/datadog/android/api/context/AccountInfo;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/api/context/AccountInfo;
161+
public fun equals (Ljava/lang/Object;)Z
162+
public final fun getExtraInfo ()Ljava/util/Map;
163+
public final fun getId ()Ljava/lang/String;
164+
public final fun getName ()Ljava/lang/String;
165+
public fun hashCode ()I
166+
public fun toString ()Ljava/lang/String;
167+
}
168+
152169
public final class com/datadog/android/api/context/DatadogContext {
153170
public fun <init> (Lcom/datadog/android/DatadogSite;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/api/context/TimeInfo;Lcom/datadog/android/api/context/ProcessInfo;Lcom/datadog/android/api/context/NetworkInfo;Lcom/datadog/android/api/context/DeviceInfo;Lcom/datadog/android/api/context/UserInfo;Lcom/datadog/android/privacy/TrackingConsent;Ljava/lang/String;Ljava/util/Map;)V
154171
public final fun component1 ()Lcom/datadog/android/DatadogSite;
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*
2+
* Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0.
3+
* This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
* Copyright 2016-Present Datadog, Inc.
5+
*/
6+
7+
package com.datadog.android.api.context
8+
9+
/**
10+
* Holds information about the current account.
11+
* @property id a unique identifier for the account, or null.
12+
* @property name the name of the account, or null.
13+
* @property extraInfo a dictionary of extra information to the current account.
14+
*/
15+
data class AccountInfo(
16+
val id: String? = null,
17+
val name: String? = null,
18+
val extraInfo: Map<String, Any?> = emptyMap()
19+
)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/*
2+
* Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0.
3+
* This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
* Copyright 2016-Present Datadog, Inc.
5+
*/
6+
7+
package com.datadog.android.core.internal.account
8+
9+
import com.datadog.android.api.context.AccountInfo
10+
import com.datadog.tools.annotation.NoOpImplementation
11+
12+
@NoOpImplementation
13+
internal interface AccountInfoProvider {
14+
15+
fun getAccountInfo(): AccountInfo?
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/*
2+
* Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0.
3+
* This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
* Copyright 2016-Present Datadog, Inc.
5+
*/
6+
7+
package com.datadog.android.core.internal.account
8+
9+
import com.datadog.android.api.InternalLogger
10+
import com.datadog.android.api.context.AccountInfo
11+
12+
internal class DatadogAccountInfoProvider(
13+
private val internalLogger: InternalLogger
14+
) : MutableAccountInfoProvider {
15+
16+
@Volatile
17+
private var internalAccountInfo: AccountInfo? = null
18+
19+
override fun setAccountInfo(
20+
id: String?,
21+
name: String?,
22+
extraInfo: Map<String, Any?>
23+
) {
24+
internalAccountInfo = internalAccountInfo?.copy(
25+
id = id,
26+
name = name,
27+
extraInfo = extraInfo.toMap()
28+
) ?: AccountInfo(
29+
id = id,
30+
name = name,
31+
extraInfo = extraInfo.toMap()
32+
)
33+
}
34+
35+
override fun addExtraInfo(extraInfo: Map<String, Any?>) {
36+
internalAccountInfo?.let {
37+
internalAccountInfo = it.copy(
38+
extraInfo = it.extraInfo + extraInfo
39+
)
40+
} ?: run {
41+
internalLogger.log(
42+
level = InternalLogger.Level.WARN,
43+
target = InternalLogger.Target.USER,
44+
messageBuilder = { MSG_ACCOUNT_NULL }
45+
)
46+
}
47+
}
48+
49+
override fun clearAccountInfo() {
50+
internalAccountInfo = null
51+
}
52+
53+
override fun getAccountInfo(): AccountInfo? {
54+
return internalAccountInfo
55+
}
56+
57+
companion object {
58+
internal const val MSG_ACCOUNT_NULL =
59+
"Failed to add Account ExtraInfo because no Account Info exist yet. Please call `setAccountInfo` first."
60+
}
61+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
* Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0.
3+
* This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
* Copyright 2016-Present Datadog, Inc.
5+
*/
6+
7+
package com.datadog.android.core.internal.account
8+
9+
import com.datadog.tools.annotation.NoOpImplementation
10+
11+
@NoOpImplementation
12+
internal interface MutableAccountInfoProvider : AccountInfoProvider {
13+
14+
fun setAccountInfo(
15+
id: String?,
16+
name: String?,
17+
extraInfo: Map<String, Any?>
18+
)
19+
20+
fun addExtraInfo(extraInfo: Map<String, Any?>)
21+
22+
fun clearAccountInfo()
23+
}

0 commit comments

Comments
 (0)