Skip to content

Commit a5339c4

Browse files
Added 'totalRam', 'processorCount' and 'isLowRamDevice' to DeviceInfo
1 parent cf41629 commit a5339c4

File tree

26 files changed

+318
-88
lines changed

26 files changed

+318
-88
lines changed

dd-sdk-android-core/api/apiSurface

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ data class com.datadog.android.api.context.AccountInfo
7070
data class com.datadog.android.api.context.DatadogContext
7171
constructor(com.datadog.android.DatadogSite, String, String, String, String, Int, String, String, String, TimeInfo, ProcessInfo, NetworkInfo, DeviceInfo, UserInfo, AccountInfo?, com.datadog.android.privacy.TrackingConsent, String?, Map<String, Map<String, Any?>>)
7272
data class com.datadog.android.api.context.DeviceInfo
73-
constructor(String, String, String, DeviceType, String, String, String, String, String, Int?, LocaleInfo)
73+
constructor(String, String, String, DeviceType, String, String, String, String, String, Int?, LocaleInfo, Int?, Int?, Boolean?)
7474
enum com.datadog.android.api.context.DeviceType
7575
- MOBILE
7676
- TABLET

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -208,10 +208,13 @@ public final class com/datadog/android/api/context/DatadogContext {
208208
}
209209

210210
public final class com/datadog/android/api/context/DeviceInfo {
211-
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/api/context/DeviceType;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Lcom/datadog/android/api/context/LocaleInfo;)V
211+
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/api/context/DeviceType;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Lcom/datadog/android/api/context/LocaleInfo;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Boolean;)V
212212
public final fun component1 ()Ljava/lang/String;
213213
public final fun component10 ()Ljava/lang/Integer;
214214
public final fun component11 ()Lcom/datadog/android/api/context/LocaleInfo;
215+
public final fun component12 ()Ljava/lang/Integer;
216+
public final fun component13 ()Ljava/lang/Integer;
217+
public final fun component14 ()Ljava/lang/Boolean;
215218
public final fun component2 ()Ljava/lang/String;
216219
public final fun component3 ()Ljava/lang/String;
217220
public final fun component4 ()Lcom/datadog/android/api/context/DeviceType;
@@ -220,8 +223,8 @@ public final class com/datadog/android/api/context/DeviceInfo {
220223
public final fun component7 ()Ljava/lang/String;
221224
public final fun component8 ()Ljava/lang/String;
222225
public final fun component9 ()Ljava/lang/String;
223-
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/api/context/DeviceType;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Lcom/datadog/android/api/context/LocaleInfo;)Lcom/datadog/android/api/context/DeviceInfo;
224-
public static synthetic fun copy$default (Lcom/datadog/android/api/context/DeviceInfo;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/api/context/DeviceType;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Lcom/datadog/android/api/context/LocaleInfo;ILjava/lang/Object;)Lcom/datadog/android/api/context/DeviceInfo;
226+
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/api/context/DeviceType;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Lcom/datadog/android/api/context/LocaleInfo;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Boolean;)Lcom/datadog/android/api/context/DeviceInfo;
227+
public static synthetic fun copy$default (Lcom/datadog/android/api/context/DeviceInfo;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/api/context/DeviceType;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Lcom/datadog/android/api/context/LocaleInfo;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Boolean;ILjava/lang/Object;)Lcom/datadog/android/api/context/DeviceInfo;
225228
public fun equals (Ljava/lang/Object;)Z
226229
public final fun getArchitecture ()Ljava/lang/String;
227230
public final fun getDeviceBrand ()Ljava/lang/String;
@@ -234,7 +237,10 @@ public final class com/datadog/android/api/context/DeviceInfo {
234237
public final fun getOsMajorVersion ()Ljava/lang/String;
235238
public final fun getOsName ()Ljava/lang/String;
236239
public final fun getOsVersion ()Ljava/lang/String;
240+
public final fun getProcessorCount ()Ljava/lang/Integer;
241+
public final fun getTotalRam ()Ljava/lang/Integer;
237242
public fun hashCode ()I
243+
public final fun isLowRamDevice ()Ljava/lang/Boolean;
238244
public fun toString ()Ljava/lang/String;
239245
}
240246

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ package com.datadog.android.api.context
2020
* @property architecture The CPU architecture of the device.
2121
* @property numberOfDisplays The number of displays on the device.
2222
* @property localeInfo locale information on the device such as timezone and region settings.
23+
* @property processorCount Number of available processors on the device.
24+
* @property totalRam Total RAM available on the device in Megabytes.
25+
* @property isLowRamDevice Whether the device is considered a low RAM device by the OS.
2326
*/
2427
data class DeviceInfo(
2528
val deviceName: String,
@@ -32,5 +35,8 @@ data class DeviceInfo(
3235
val osVersion: String,
3336
val architecture: String,
3437
val numberOfDisplays: Int?,
35-
val localeInfo: LocaleInfo
38+
val localeInfo: LocaleInfo,
39+
val processorCount: Int?,
40+
val totalRam: Int?,
41+
val isLowRamDevice: Boolean?
3642
)

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,10 @@ internal class DatadogContextProvider(
6464
currentLocale = currentLocale,
6565
timeZone = timeZone
6666
)
67-
}
67+
},
68+
processorCount = processorCount,
69+
totalRam = totalRam,
70+
isLowRamDevice = isLowRamDevice
6871
)
6972
},
7073
userInfo = coreFeature.userInfoProvider.getUserInfo(),

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,10 @@ internal class NoOpContextProvider : ContextProvider {
6060
locales = emptyList(),
6161
currentLocale = "",
6262
timeZone = ""
63-
)
63+
),
64+
processorCount = 0,
65+
totalRam = 0,
66+
isLowRamDevice = false
6467
),
6568
userInfo = UserInfo(null, null, null, null, emptyMap()),
6669
accountInfo = null,

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,10 @@ internal interface AndroidInfoProvider {
3535
val currentLocale: String
3636

3737
val timeZone: String
38+
39+
val processorCount: Int
40+
41+
val totalRam: Int?
42+
43+
val isLowRamDevice: Boolean?
3844
}

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
package com.datadog.android.core.internal.system
88

9+
import android.app.ActivityManager
910
import android.app.UiModeManager
1011
import android.content.Context
1112
import android.content.pm.PackageManager
@@ -127,10 +128,35 @@ internal class DefaultAndroidInfoProvider(
127128
}
128129
}
129130

131+
override val processorCount: Int by lazy(LazyThreadSafetyMode.PUBLICATION) {
132+
Runtime.getRuntime().availableProcessors()
133+
}
134+
135+
override val totalRam: Int? by lazy(LazyThreadSafetyMode.PUBLICATION) {
136+
try {
137+
val activityManager = appContext.getSystemService(ActivityManager::class.java)
138+
val info = ActivityManager.MemoryInfo()
139+
activityManager.getMemoryInfo(info)
140+
(info.totalMem / MB_IN_BYTES).toInt()
141+
} catch (_: Exception) {
142+
null
143+
}
144+
}
145+
146+
override val isLowRamDevice: Boolean? by lazy(LazyThreadSafetyMode.PUBLICATION) {
147+
try {
148+
val activityManager = appContext.getSystemService(ActivityManager::class.java)
149+
activityManager.isLowRamDevice
150+
} catch (_: Exception) {
151+
null
152+
}
153+
}
154+
130155
companion object {
131156

132157
const val FEATURE_GOOGLE_ANDROID_TV = "com.google.android.tv"
133158
const val MIN_TABLET_WIDTH_DP = 800
159+
const val MB_IN_BYTES = 1048576L
134160

135161
private fun resolveDeviceType(model: String, appContext: Context): DeviceType {
136162
return if (isTv(appContext)) {

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,7 @@ internal class NoOpAndroidInfoProvider : AndroidInfoProvider {
2222
override val locales: List<String> = emptyList()
2323
override val currentLocale: String = ""
2424
override val timeZone: String = ""
25+
override val processorCount: Int = 0
26+
override val totalRam: Int? = null
27+
override val isLowRamDevice: Boolean? = null
2528
}

dd-sdk-android-core/src/test/kotlin/com/datadog/android/utils/forge/AndroidInfoProviderForgeryFactory.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ internal class AndroidInfoProviderForgeryFactory : ForgeryFactory<AndroidInfoPro
2727
val locales = forge.aList { forge.aString() }
2828
val currentLocale = forge.aString()
2929
val timeZone = forge.aString()
30+
val processorCount: Int = forge.anInt()
31+
val totalRam: Int = forge.anInt()
32+
val isLowRamDevice: Boolean = forge.aBool()
3033

3134
return object : AndroidInfoProvider {
3235
override val deviceName = deviceName
@@ -42,6 +45,9 @@ internal class AndroidInfoProviderForgeryFactory : ForgeryFactory<AndroidInfoPro
4245
override val locales: List<String> = locales
4346
override val currentLocale: String = currentLocale
4447
override val timeZone: String = timeZone
48+
override val processorCount: Int = processorCount
49+
override val totalRam: Int? = totalRam
50+
override val isLowRamDevice: Boolean? = isLowRamDevice
4551
}
4652
}
4753
}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ class DeviceInfoForgeryFactory : ForgeryFactory<DeviceInfo> {
2424
osMajorVersion = forge.aString(),
2525
architecture = forge.aString(),
2626
numberOfDisplays = forge.aNullable { forge.anInt() },
27-
localeInfo = forge.getForgery()
27+
localeInfo = forge.getForgery(),
28+
processorCount = forge.anInt(),
29+
totalRam = forge.anInt(),
30+
isLowRamDevice = forge.aBool()
2831
)
2932
}
3033
}

0 commit comments

Comments
 (0)