Skip to content

Commit 54341cd

Browse files
authored
Merge pull request #2702 from DataDog/yl/account-info/implement-core
RUM-10241: Add AccountInfo into CoreFeature and DatadogContext
2 parents f669ed5 + 4d70bbb commit 54341cd

File tree

10 files changed

+41
-10
lines changed

10 files changed

+41
-10
lines changed

dd-sdk-android-core/api/apiSurface

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ interface com.datadog.android.api.SdkCore
6666
data class com.datadog.android.api.context.AccountInfo
6767
constructor(String? = null, String? = null, Map<String, Any?> = emptyMap())
6868
data class com.datadog.android.api.context.DatadogContext
69-
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?>>)
69+
constructor(com.datadog.android.DatadogSite, String, String, String, String, String, String, String, TimeInfo, ProcessInfo, NetworkInfo, DeviceInfo, UserInfo, AccountInfo?, com.datadog.android.privacy.TrackingConsent, String?, Map<String, Map<String, Any?>>)
7070
data class com.datadog.android.api.context.DeviceInfo
7171
constructor(String, String, String, DeviceType, String, String, String, String, String, Int?)
7272
enum com.datadog.android.api.context.DeviceType

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -167,15 +167,16 @@ public final class com/datadog/android/api/context/AccountInfo {
167167
}
168168

169169
public final class com/datadog/android/api/context/DatadogContext {
170-
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
170+
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/api/context/AccountInfo;Lcom/datadog/android/privacy/TrackingConsent;Ljava/lang/String;Ljava/util/Map;)V
171171
public final fun component1 ()Lcom/datadog/android/DatadogSite;
172172
public final fun component10 ()Lcom/datadog/android/api/context/ProcessInfo;
173173
public final fun component11 ()Lcom/datadog/android/api/context/NetworkInfo;
174174
public final fun component12 ()Lcom/datadog/android/api/context/DeviceInfo;
175175
public final fun component13 ()Lcom/datadog/android/api/context/UserInfo;
176-
public final fun component14 ()Lcom/datadog/android/privacy/TrackingConsent;
177-
public final fun component15 ()Ljava/lang/String;
178-
public final fun component16 ()Ljava/util/Map;
176+
public final fun component14 ()Lcom/datadog/android/api/context/AccountInfo;
177+
public final fun component15 ()Lcom/datadog/android/privacy/TrackingConsent;
178+
public final fun component16 ()Ljava/lang/String;
179+
public final fun component17 ()Ljava/util/Map;
179180
public final fun component2 ()Ljava/lang/String;
180181
public final fun component3 ()Ljava/lang/String;
181182
public final fun component4 ()Ljava/lang/String;
@@ -184,9 +185,10 @@ public final class com/datadog/android/api/context/DatadogContext {
184185
public final fun component7 ()Ljava/lang/String;
185186
public final fun component8 ()Ljava/lang/String;
186187
public final fun component9 ()Lcom/datadog/android/api/context/TimeInfo;
187-
public final fun copy (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;)Lcom/datadog/android/api/context/DatadogContext;
188-
public static synthetic fun copy$default (Lcom/datadog/android/api/context/DatadogContext;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;ILjava/lang/Object;)Lcom/datadog/android/api/context/DatadogContext;
188+
public final fun copy (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/api/context/AccountInfo;Lcom/datadog/android/privacy/TrackingConsent;Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/api/context/DatadogContext;
189+
public static synthetic fun copy$default (Lcom/datadog/android/api/context/DatadogContext;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/api/context/AccountInfo;Lcom/datadog/android/privacy/TrackingConsent;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/api/context/DatadogContext;
189190
public fun equals (Ljava/lang/Object;)Z
191+
public final fun getAccountInfo ()Lcom/datadog/android/api/context/AccountInfo;
190192
public final fun getAppBuildId ()Ljava/lang/String;
191193
public final fun getClientToken ()Ljava/lang/String;
192194
public final fun getDeviceInfo ()Lcom/datadog/android/api/context/DeviceInfo;

dd-sdk-android-core/src/main/kotlin/com/datadog/android/api/context/DatadogContext.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import com.datadog.android.privacy.TrackingConsent
2929
* @property networkInfo information about the current network availability and quality
3030
* @property deviceInfo information about device
3131
* @property userInfo information about the current user
32+
* @property accountInfo information about the current account
3233
* @property trackingConsent information about the current tracking consent
3334
* @property appBuildId unique build ID of the running application. Will be missing if Datadog Gradle Plugin is not applied or obfuscation is not enabled for the running build.
3435
* @property featuresContext agnostic dictionary with information from all features registered to
@@ -48,6 +49,7 @@ data class DatadogContext(
4849
val networkInfo: NetworkInfo,
4950
val deviceInfo: DeviceInfo,
5051
val userInfo: UserInfo,
52+
val accountInfo: AccountInfo?,
5153
val trackingConsent: TrackingConsent,
5254
val appBuildId: String?,
5355
val featuresContext: Map<String, Map<String, Any?>>

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ import com.datadog.android.core.configuration.BatchSize
2626
import com.datadog.android.core.configuration.Configuration
2727
import com.datadog.android.core.configuration.UploadFrequency
2828
import com.datadog.android.core.configuration.UploadSchedulerStrategy
29+
import com.datadog.android.core.internal.account.DatadogAccountInfoProvider
30+
import com.datadog.android.core.internal.account.MutableAccountInfoProvider
31+
import com.datadog.android.core.internal.account.NoOpMutableAccountInfoProvider
2932
import com.datadog.android.core.internal.data.upload.CurlInterceptor
3033
import com.datadog.android.core.internal.data.upload.GzipRequestInterceptor
3134
import com.datadog.android.core.internal.data.upload.RotatingDnsResolver
@@ -120,6 +123,7 @@ internal class CoreFeature(
120123
internal var timeProvider: TimeProvider = NoOpTimeProvider()
121124
internal var trackingConsentProvider: ConsentProvider = NoOpConsentProvider()
122125
internal var userInfoProvider: MutableUserInfoProvider = NoOpMutableUserInfoProvider()
126+
internal var accountInfoProvider: MutableAccountInfoProvider = NoOpMutableAccountInfoProvider()
123127
internal var contextProvider: ContextProvider = NoOpContextProvider()
124128

125129
internal lateinit var okHttpClient: OkHttpClient
@@ -525,6 +529,9 @@ internal class CoreFeature(
525529

526530
// User Info Provider
527531
setupUserInfoProvider()
532+
533+
// Account Info Provider
534+
accountInfoProvider = DatadogAccountInfoProvider(internalLogger)
528535
}
529536

530537
private fun setupUserInfoProvider() {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ internal class DatadogContextProvider(val coreFeature: CoreFeature) : ContextPro
5656
)
5757
},
5858
userInfo = coreFeature.userInfoProvider.getUserInfo(),
59+
accountInfo = coreFeature.accountInfoProvider.getAccountInfo(),
5960
trackingConsent = coreFeature.trackingConsentProvider.getConsent(),
6061
appBuildId = coreFeature.appBuildId,
6162
// toMap call here (and in getFeatureContext) is VERY important - this will make

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -193,17 +193,17 @@ internal class DatadogCore(
193193
name: String?,
194194
extraInfo: Map<String, Any?>
195195
) {
196-
// TODO RUM-10241: Implement set account info in Datadog Core
196+
coreFeature.accountInfoProvider.setAccountInfo(id, name, extraInfo)
197197
}
198198

199199
override fun addAccountExtraInfo(
200200
extraInfo: Map<String, Any?>
201201
) {
202-
// TODO RUM-10241: Implement set account info in Datadog Core
202+
coreFeature.accountInfoProvider.addExtraInfo(extraInfo)
203203
}
204204

205205
override fun clearAccountInfo() {
206-
// TODO RUM-10241: Implement set account info in Datadog Core
206+
coreFeature.accountInfoProvider.clearAccountInfo()
207207
}
208208

209209
/** @inheritDoc */

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ internal class NoOpContextProvider : ContextProvider {
5656
architecture = "",
5757
numberOfDisplays = null
5858
),
59+
accountInfo = null,
5960
userInfo = UserInfo(null, null, null, null, emptyMap()),
6061
trackingConsent = TrackingConsent.NOT_GRANTED,
6162
appBuildId = null,

dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/DatadogContextProviderTest.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
package com.datadog.android.core.internal
88

99
import android.app.Application
10+
import com.datadog.android.api.context.AccountInfo
1011
import com.datadog.android.api.context.NetworkInfo
1112
import com.datadog.android.api.context.UserInfo
1213
import com.datadog.android.core.internal.system.AndroidInfoProvider
@@ -56,6 +57,9 @@ internal class DatadogContextProviderTest {
5657
@Forgery
5758
lateinit var fakeUserInfo: UserInfo
5859

60+
@Forgery
61+
lateinit var fakeAccountInfo: AccountInfo
62+
5963
@Forgery
6064
lateinit var fakeAndroidInfo: AndroidInfoProvider
6165

@@ -73,6 +77,7 @@ internal class DatadogContextProviderTest {
7377
testedProvider = DatadogContextProvider(coreFeature.mockInstance)
7478

7579
whenever(coreFeature.mockInstance.userInfoProvider.getUserInfo()) doReturn fakeUserInfo
80+
whenever(coreFeature.mockInstance.accountInfoProvider.getAccountInfo()) doReturn fakeAccountInfo
7681
whenever(
7782
coreFeature.mockInstance.networkInfoProvider.getLatestNetworkInfo()
7883
) doReturn fakeNetworkInfo
@@ -151,6 +156,14 @@ internal class DatadogContextProviderTest {
151156
assertThat(context.userInfo.additionalProperties)
152157
.isEqualTo(fakeUserInfo.additionalProperties)
153158

159+
// account info
160+
assertThat(context.accountInfo).isNotNull
161+
context.accountInfo?.let {
162+
assertThat(it.id).isEqualTo(fakeAccountInfo.id)
163+
assertThat(it.name).isEqualTo(fakeAccountInfo.name)
164+
assertThat(it.extraInfo).isEqualTo(fakeAccountInfo.extraInfo)
165+
}
166+
154167
assertThat(context.appBuildId).isEqualTo(coreFeature.mockInstance.appBuildId)
155168
assertThat(context.trackingConsent).isEqualTo(fakeTrackingConsent)
156169

dd-sdk-android-core/src/test/kotlin/com/datadog/android/utils/config/CoreFeatureTestConfiguration.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import com.datadog.android.core.configuration.BatchSize
1212
import com.datadog.android.core.configuration.UploadFrequency
1313
import com.datadog.android.core.internal.ContextProvider
1414
import com.datadog.android.core.internal.CoreFeature
15+
import com.datadog.android.core.internal.account.MutableAccountInfoProvider
1516
import com.datadog.android.core.internal.net.DefaultFirstPartyHostHeaderTypeResolver
1617
import com.datadog.android.core.internal.net.info.NetworkInfoProvider
1718
import com.datadog.android.core.internal.persistence.file.FilePersistenceConfig
@@ -66,6 +67,7 @@ internal class CoreFeatureTestConfiguration<T : Context>(
6667
lateinit var mockNetworkInfoProvider: NetworkInfoProvider
6768
lateinit var mockSystemInfoProvider: SystemInfoProvider
6869
lateinit var mockUserInfoProvider: MutableUserInfoProvider
70+
lateinit var mockAccountInfoProvider: MutableAccountInfoProvider
6971
lateinit var mockTrackingConsentProvider: ConsentProvider
7072
lateinit var mockAndroidInfoProvider: AndroidInfoProvider
7173
lateinit var mockAppVersionProvider: AppVersionProvider
@@ -120,6 +122,7 @@ internal class CoreFeatureTestConfiguration<T : Context>(
120122
mockNetworkInfoProvider = mock()
121123
mockSystemInfoProvider = mock()
122124
mockUserInfoProvider = mock()
125+
mockAccountInfoProvider = mock()
123126
mockAndroidInfoProvider = mock()
124127
mockTrackingConsentProvider = mock { on { getConsent() } doReturn TrackingConsent.PENDING }
125128
mockAppVersionProvider = mock { on { version } doReturn appContext.fakeVersionName }
@@ -153,6 +156,7 @@ internal class CoreFeatureTestConfiguration<T : Context>(
153156
whenever(mockInstance.networkInfoProvider) doReturn mockNetworkInfoProvider
154157
whenever(mockInstance.systemInfoProvider) doReturn mockSystemInfoProvider
155158
whenever(mockInstance.userInfoProvider) doReturn mockUserInfoProvider
159+
whenever(mockInstance.accountInfoProvider) doReturn mockAccountInfoProvider
156160
whenever(mockInstance.trackingConsentProvider) doReturn mockTrackingConsentProvider
157161
whenever(mockInstance.androidInfoProvider) doReturn mockAndroidInfoProvider
158162
whenever(mockInstance.contextProvider) doReturn mockContextProvider

dd-sdk-android-core/src/testFixtures/kotlin/com/datadog/android/tests/elmyr/DatadogContextForgeryFactory.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class DatadogContextForgeryFactory : ForgeryFactory<DatadogContext> {
3131
networkInfo = forge.getForgery(),
3232
deviceInfo = forge.getForgery(),
3333
userInfo = forge.getForgery(),
34+
accountInfo = forge.getForgery(),
3435
trackingConsent = forge.aValueFrom(TrackingConsent::class.java),
3536
appBuildId = forge.aNullable { getForgery<UUID>().toString() },
3637
// building nested maps with default size slows down tests quite a lot, so will use

0 commit comments

Comments
 (0)