diff --git a/build.gradle.kts b/build.gradle.kts index 792b539c93..b319633c70 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -34,6 +34,7 @@ buildscript { classpath(libs.sqlDelightGradlePlugin) classpath(libs.binaryCompatibilityGradlePlugin) classpath(libs.kotlinxSerializationPlugin) + classpath(libs.shadowPlugin) } } diff --git a/buildSrc/src/main/kotlin/com/datadog/gradle/config/AndroidConfig.kt b/buildSrc/src/main/kotlin/com/datadog/gradle/config/AndroidConfig.kt index e866a67464..53e410679e 100644 --- a/buildSrc/src/main/kotlin/com/datadog/gradle/config/AndroidConfig.kt +++ b/buildSrc/src/main/kotlin/com/datadog/gradle/config/AndroidConfig.kt @@ -40,7 +40,7 @@ object AndroidConfig { } // Local development or other branches → Snapshot else -> { - Version(0, 3, 0, Version.Type.Snapshot) + Version(0, 3, 1, Version.Type.Snapshot) } } } @@ -77,6 +77,7 @@ fun Project.androidLibraryConfig() { defaultConfig { minSdk = AndroidConfig.MIN_SDK + consumerProguardFiles("${rootDir.absolutePath}/consumer-rules.pro") } compileOptions { diff --git a/buildSrc/src/main/kotlin/com/datadog/gradle/config/DetektCustomConfig.kt b/buildSrc/src/main/kotlin/com/datadog/gradle/config/DetektCustomConfig.kt index 9132e249e8..863f8fc1c0 100644 --- a/buildSrc/src/main/kotlin/com/datadog/gradle/config/DetektCustomConfig.kt +++ b/buildSrc/src/main/kotlin/com/datadog/gradle/config/DetektCustomConfig.kt @@ -122,7 +122,13 @@ fun Project.detektCustomConfig() { } } - val externalDependencies = File("${projectDir.absolutePath}/detekt_classpath").readText() + val externalDependenciesFile = File("${projectDir.absolutePath}/detekt_classpath") + val externalDependencies = if (externalDependenciesFile.exists()) { + externalDependenciesFile.readText() + } else { + logger.warn("Detekt classpath file missing: ${externalDependenciesFile.path}") + "" + } val moduleDependenciesClasses = moduleDependencies.map { "${rootDir.absolutePath}${it.replace(':', '/')}/build/extracted/classes.jar" }.joinToString(":") @@ -130,9 +136,14 @@ fun Project.detektCustomConfig() { val dependencies = if (moduleDependenciesClasses.isBlank()) { externalDependencies } else { - "$externalDependencies:$moduleDependenciesClasses" + if (externalDependencies.isBlank()) { + moduleDependenciesClasses + } else { + "$externalDependencies:$moduleDependenciesClasses" + } } + args("-cp", dependencies) } } diff --git a/buildSrc/src/main/kotlin/com/datadog/gradle/config/MavenConfig.kt b/buildSrc/src/main/kotlin/com/datadog/gradle/config/MavenConfig.kt index c4db02a4df..50e90e59c2 100644 --- a/buildSrc/src/main/kotlin/com/datadog/gradle/config/MavenConfig.kt +++ b/buildSrc/src/main/kotlin/com/datadog/gradle/config/MavenConfig.kt @@ -95,8 +95,11 @@ fun Project.publishingConfig( } signingExtension.apply { - // Signing is required unless explicitly skipped - isRequired = !hasProperty("dd-skip-signing") + // Signing is required unless explicitly skipped or publishing to maven local + val isLocalPublish = gradle.startParameter.taskNames.any { + it.contains("publishToMavenLocal", ignoreCase = true) + } + isRequired = !hasProperty("dd-skip-signing") && !isLocalPublish val privateKey = System.getenv("GPG_PRIVATE_KEY") val password = System.getenv("GPG_PASSWORD") diff --git a/consumer-rules.pro b/consumer-rules.pro index 5cdc79dccf..edc613a331 100644 --- a/consumer-rules.pro +++ b/consumer-rules.pro @@ -1,3 +1,6 @@ # This is needed for the Datadog Error Tracking feature to work reliably, # this file is used by Logs and RUM modules -keepattributes SourceFile,LineNumberTable + +# Shaded dependencies +-keep class cloud.flashcat.shaded.** { *; } diff --git a/dd-sdk-android-core/api/apiSurface b/dd-sdk-android-core/api/apiSurface index dc36e0dcdf..e5b406eb67 100644 --- a/dd-sdk-android-core/api/apiSurface +++ b/dd-sdk-android-core/api/apiSurface @@ -344,6 +344,8 @@ fun java.util.concurrent.Future?.getSafe(String, com.datadog.android.api. object com.datadog.android.core.internal.utils.JsonSerializer fun toJsonElement(Any?): com.google.gson.JsonElement fun Map.safeMapValuesToJson(com.datadog.android.api.InternalLogger): Map +fun isInitialized(android.content.Context): Boolean +fun getWorkManagerOrNull(android.content.Context): androidx.work.WorkManager? enum com.datadog.android.core.metrics.MethodCallSamplingRate constructor(Float) - ALL diff --git a/dd-sdk-android-core/api/dd-sdk-android-core.api b/dd-sdk-android-core/api/dd-sdk-android-core.api index 3dc79e2111..4bdeeb4d43 100644 --- a/dd-sdk-android-core/api/dd-sdk-android-core.api +++ b/dd-sdk-android-core/api/dd-sdk-android-core.api @@ -890,6 +890,11 @@ public final class com/datadog/android/core/internal/utils/JsonSerializer { public final fun toJsonElement (Ljava/lang/Object;)Lcom/google/gson/JsonElement; } +public final class com/datadog/android/core/internal/utils/WorkManagerUtilsKt { + public static final fun getWorkManagerOrNull (Landroid/content/Context;)Landroidx/work/WorkManager; + public static final fun isInitialized (Landroid/content/Context;)Z +} + public final class com/datadog/android/core/metrics/MethodCallSamplingRate : java/lang/Enum { public static final field ALL Lcom/datadog/android/core/metrics/MethodCallSamplingRate; public static final field HIGH Lcom/datadog/android/core/metrics/MethodCallSamplingRate; diff --git a/dd-sdk-android-core/build.gradle.kts b/dd-sdk-android-core/build.gradle.kts index 53bd591f1a..09a1ee8294 100644 --- a/dd-sdk-android-core/build.gradle.kts +++ b/dd-sdk-android-core/build.gradle.kts @@ -103,14 +103,15 @@ dependencies { implementation(libs.kotlin) // Network - implementation(libs.okHttp) - implementation(libs.gson) + compileOnly(libs.okHttp) + compileOnly(libs.gson) + implementation(project(":dd-sdk-android-dependencies")) implementation(libs.kronosNTP) // Android Instrumentation implementation(libs.androidXAnnotation) implementation(libs.androidXCollection) - implementation(libs.androidXWorkManager) + compileOnly(libs.androidXWorkManager) implementation(project(":dd-sdk-android-internal")) @@ -130,6 +131,9 @@ dependencies { } } testImplementation(testFixtures(project(":dd-sdk-android-internal"))) + testImplementation(libs.gson) + testImplementation(libs.okHttp) + testImplementation(libs.androidXWorkManager) testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) unmock(libs.robolectric) diff --git a/dd-sdk-android-core/src/main/kotlin/com/datadog/android/Datadog.kt b/dd-sdk-android-core/src/main/kotlin/com/datadog/android/Datadog.kt index afb87766f9..0ffb958e46 100644 --- a/dd-sdk-android-core/src/main/kotlin/com/datadog/android/Datadog.kt +++ b/dd-sdk-android-core/src/main/kotlin/com/datadog/android/Datadog.kt @@ -7,6 +7,7 @@ package com.datadog.android import android.content.Context +import android.util.Log import androidx.annotation.AnyThread import androidx.annotation.WorkerThread import com.datadog.android.Datadog.clearAccountInfo @@ -63,6 +64,7 @@ object Datadog { configuration: Configuration, trackingConsent: TrackingConsent ): SdkCore? { + checkRuntimeDependencies() synchronized(registry) { val existing = registry.getInstance(instanceName) if (existing != null) { @@ -432,6 +434,53 @@ object Datadog { // endregion + // region Internal + + private fun checkRuntimeDependencies() { + val missingDependencies = mutableListOf() + if (!isClassAvailable("com.google.gson.Gson")) { + missingDependencies.add("Gson (com.google.code.gson:gson)") + } + if (!isClassAvailable("okhttp3.OkHttpClient")) { + missingDependencies.add("OkHttp (com.squareup.okhttp3:okhttp)") + } + + if (missingDependencies.isNotEmpty()) { + val message = MISSING_DEPENDENCIES_ERROR.format( + Locale.US, + missingDependencies.joinToString(", ") + ) + android.util.Log.e("Datadog", message) + unboundInternalLogger.log( + InternalLogger.Level.ERROR, + InternalLogger.Target.USER, + { message } + ) + throw IllegalStateException(message) + } + + if (!isClassAvailable("androidx.work.WorkManager")) { + unboundInternalLogger.log( + InternalLogger.Level.WARN, + InternalLogger.Target.USER, + { WARNING_WORKMANAGER_MISSING } + ) + } + } + + private fun isClassAvailable(className: String): Boolean { + return try { + Class.forName(className) + true + } catch (e: ClassNotFoundException) { + false + } catch (e: LinkageError) { + false + } + } + + // endregion + // region Constants internal const val MESSAGE_ALREADY_INITIALIZED = @@ -445,6 +494,13 @@ object Datadog { internal const val CANNOT_CREATE_SDK_INSTANCE_ID_ERROR = "Cannot create SDK instance ID, stopping SDK initialization." + internal const val MISSING_DEPENDENCIES_ERROR = + "FlashCat SDK initialization failed because of missing dependencies: %s. " + + "Please make sure you have added them to your app's build.gradle file." + + internal const val WARNING_WORKMANAGER_MISSING = + "WorkManager library not found. Background upload capabilities will be disabled." + internal const val DD_SOURCE_TAG = "_dd.source" internal const val DD_SDK_VERSION_TAG = "_dd.sdk_version" internal const val DD_APP_VERSION_TAG = "_dd.version" diff --git a/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/lifecycle/ProcessLifecycleCallback.kt b/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/lifecycle/ProcessLifecycleCallback.kt index 5802142abf..fcafb0f0e7 100644 --- a/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/lifecycle/ProcessLifecycleCallback.kt +++ b/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/lifecycle/ProcessLifecycleCallback.kt @@ -10,6 +10,7 @@ import android.content.Context import androidx.work.WorkManager import com.datadog.android.api.InternalLogger import com.datadog.android.core.internal.utils.cancelUploadWorker +import com.datadog.android.core.internal.utils.isInitialized import com.datadog.android.core.internal.utils.triggerUploadWorker import java.lang.ref.Reference import java.lang.ref.WeakReference @@ -25,7 +26,7 @@ internal class ProcessLifecycleCallback( override fun onStarted() { contextWeakRef.get()?.let { - if (WorkManager.isInitialized()) { + if (isInitialized(it)) { cancelUploadWorker(it, instanceName, internalLogger) } } @@ -37,7 +38,7 @@ internal class ProcessLifecycleCallback( override fun onStopped() { contextWeakRef.get()?.let { - if (WorkManager.isInitialized()) { + if (isInitialized(it)) { triggerUploadWorker(it, instanceName, internalLogger) } } diff --git a/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/utils/WorkManagerUtils.kt b/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/utils/WorkManagerUtils.kt index 281e832795..fb9d719182 100644 --- a/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/utils/WorkManagerUtils.kt +++ b/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/utils/WorkManagerUtils.kt @@ -7,6 +7,7 @@ package com.datadog.android.core.internal.utils import android.content.Context +import android.util.Log import androidx.work.Constraints import androidx.work.Data import androidx.work.ExistingWorkPolicy @@ -15,6 +16,7 @@ import androidx.work.OneTimeWorkRequest import androidx.work.WorkManager import com.datadog.android.api.InternalLogger import com.datadog.android.core.UploadWorker +import java.lang.reflect.Method import java.util.concurrent.TimeUnit internal const val CANCEL_ERROR_MESSAGE = "Error cancelling the UploadWorker" @@ -79,3 +81,75 @@ internal fun triggerUploadWorker( ) } } + +private const val TAG = "FC_SDK_WorkManager" + +private val isClassAvailable: Boolean by lazy { + try { + Class.forName("androidx.work.WorkManager") + true + } catch (e: Throwable) { + false + } +} + +private val officialIsInitializedMethod: Method? by lazy { + if (!isClassAvailable) return@lazy null + try { + WorkManager::class.java.getMethod("isInitialized") + } catch (e: Throwable) { + null + } +} + +@Volatile +private var isInitializedCache: Boolean? = null + +/** + * 判断 WorkManager 是否已初始化。 + * 兼容 WorkManager 2.8.0+ (反射调用官方方法) 和旧版本 (try-catch getInstance)。 + * 安全应对 compileOnly 导致的类缺失。 + */ +fun isInitialized(context: Context): Boolean { + isInitializedCache?.let { return it } + + if (!isClassAvailable) { + return false.also { isInitializedCache = it } + } + + officialIsInitializedMethod?.let { method -> + try { + val result = method.invoke(null) as Boolean + if (result) { + isInitializedCache = true + } + return result + } catch (e: Throwable) { + Log.w(TAG, "Failed to invoke isInitialized via reflection", e) + } + } + + return try { + WorkManager.getInstance(context) + true.also { isInitializedCache = it } + } catch (e: IllegalStateException) { + false + } catch (e: Throwable) { + false + } +} + +/** + * 安全获取实例,如果未初始化或库不存在则返回 null + */ +fun getWorkManagerOrNull(context: Context): WorkManager? { + return if (isInitialized(context)) { + try { + WorkManager.getInstance(context) + } catch (e: Throwable) { + null + } + } else { + null + } +} \ No newline at end of file diff --git a/dd-sdk-android-core/src/main/kotlin/com/datadog/android/error/internal/DatadogExceptionHandler.kt b/dd-sdk-android-core/src/main/kotlin/com/datadog/android/error/internal/DatadogExceptionHandler.kt index b12669a57c..76c10a9033 100644 --- a/dd-sdk-android-core/src/main/kotlin/com/datadog/android/error/internal/DatadogExceptionHandler.kt +++ b/dd-sdk-android-core/src/main/kotlin/com/datadog/android/error/internal/DatadogExceptionHandler.kt @@ -15,6 +15,7 @@ import com.datadog.android.core.InternalSdkCore import com.datadog.android.core.feature.event.JvmCrash import com.datadog.android.core.feature.event.ThreadDump import com.datadog.android.core.internal.thread.waitToIdle +import com.datadog.android.core.internal.utils.isInitialized import com.datadog.android.core.internal.utils.triggerUploadWorker import com.datadog.android.internal.utils.asString import com.datadog.android.internal.utils.loggableStackTrace @@ -69,7 +70,7 @@ internal class DatadogExceptionHandler( // trigger a task to send the logs ASAP contextRef.get()?.let { - if (WorkManager.isInitialized()) { + if (isInitialized(it)) { triggerUploadWorker(it, sdkCore.name, sdkCore.internalLogger) } } diff --git a/dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/data/upload/UploadWorkerTest.kt b/dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/data/upload/UploadWorkerTest.kt index 0196dda402..2db0c9e101 100644 --- a/dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/data/upload/UploadWorkerTest.kt +++ b/dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/data/upload/UploadWorkerTest.kt @@ -54,6 +54,8 @@ import org.mockito.kotlin.whenever import org.mockito.quality.Strictness import org.mockito.stubbing.Answer +import com.datadog.android.utils.forge.WorkerParametersForgeryFactory + @Extensions( ExtendWith(MockitoExtension::class), ExtendWith(ForgeExtension::class), @@ -74,7 +76,6 @@ internal class UploadWorkerTest { @StringForgery lateinit var fakeInstanceName: String - @Forgery lateinit var fakeWorkerParameters: WorkerParameters var fakeFeaturesCount: Int = 0 @@ -93,6 +94,8 @@ internal class UploadWorkerTest { @BeforeEach fun `set up`(forge: Forge) { + fakeWorkerParameters = WorkerParametersForgeryFactory().getForgery(forge) + whenever(mockSdkCore.getDatadogContext()) doReturn fakeDatadogContext Datadog.registry.register(fakeInstanceName, mockSdkCore) @@ -918,7 +921,6 @@ internal class UploadWorkerTest { tags, runtimeExtras, runAttemptCount, - generation, backgroundExecutor, taskExecutor, workerFactory, diff --git a/dd-sdk-android-core/src/test/kotlin/com/datadog/android/utils/forge/Configurator.kt b/dd-sdk-android-core/src/test/kotlin/com/datadog/android/utils/forge/Configurator.kt index e0c170e054..4e4201e856 100644 --- a/dd-sdk-android-core/src/test/kotlin/com/datadog/android/utils/forge/Configurator.kt +++ b/dd-sdk-android-core/src/test/kotlin/com/datadog/android/utils/forge/Configurator.kt @@ -33,7 +33,7 @@ internal class Configurator : // IO forge.addFactory(BatchForgeryFactory()) forge.addFactory(PayloadDecorationForgeryFactory()) - forge.addFactory(WorkerParametersForgeryFactory()) +// forge.addFactory(WorkerParametersForgeryFactory()) // NDK Crash forge.addFactory(NdkCrashLogForgeryFactory()) diff --git a/dd-sdk-android-core/src/test/kotlin/com/datadog/android/utils/forge/WorkerParametersForgeryFactory.kt b/dd-sdk-android-core/src/test/kotlin/com/datadog/android/utils/forge/WorkerParametersForgeryFactory.kt index ceced8368c..7b48d1763f 100644 --- a/dd-sdk-android-core/src/test/kotlin/com/datadog/android/utils/forge/WorkerParametersForgeryFactory.kt +++ b/dd-sdk-android-core/src/test/kotlin/com/datadog/android/utils/forge/WorkerParametersForgeryFactory.kt @@ -8,13 +8,15 @@ package com.datadog.android.utils.forge import android.content.Context import androidx.work.Data +import androidx.work.ForegroundUpdater import androidx.work.ListenableWorker +import androidx.work.ProgressUpdater import androidx.work.WorkerFactory import androidx.work.WorkerParameters -import androidx.work.impl.utils.taskexecutor.SerialExecutor import androidx.work.impl.utils.taskexecutor.TaskExecutor import fr.xgouchet.elmyr.Forge import fr.xgouchet.elmyr.ForgeryFactory +import org.mockito.kotlin.mock import java.util.concurrent.Executor class WorkerParametersForgeryFactory : ForgeryFactory { @@ -25,34 +27,27 @@ class WorkerParametersForgeryFactory : ForgeryFactory { val sameThreadExecutor = object : Executor { override fun execute(command: Runnable) = command.run() } + + // Use Mockito to avoid direct implementation of internal interfaces + val mockTaskExecutor = mock() + return WorkerParameters( forge.getForgery(), Data.EMPTY, forge.aList { anAlphabeticalString() }, WorkerParameters.RuntimeExtras(), forge.aSmallInt(), - forge.aSmallInt(), sameThreadExecutor, - object : TaskExecutor { - override fun getMainThreadExecutor(): Executor { - TODO() - } - - override fun getSerialTaskExecutor(): SerialExecutor { - TODO("Not yet implemented") - } - }, + mockTaskExecutor, object : WorkerFactory() { override fun createWorker( appContext: Context, workerClassName: String, workerParameters: WorkerParameters - ): ListenableWorker? { - return null - } + ): ListenableWorker? = null }, - { _, _, _ -> forge.getForgery() }, - { _, _, _ -> forge.getForgery() } + mock(), + mock() ) } diff --git a/dd-sdk-android-core/transitiveDependencies b/dd-sdk-android-core/transitiveDependencies index ddac0a46d1..ee9924fd92 100644 --- a/dd-sdk-android-core/transitiveDependencies +++ b/dd-sdk-android-core/transitiveDependencies @@ -1,25 +1,23 @@ Dependencies List -androidx.annotation:annotation-experimental:1.1.0 : 16 Kb +androidx.annotation:annotation-experimental:1.0.0 : 11 Kb androidx.annotation:annotation-jvm:1.9.1 : 59 Kb androidx.arch.core:core-common:2.1.0 : 10 Kb androidx.arch.core:core-runtime:2.1.0 : 5 Kb -androidx.collection:collection-jvm:1.4.5 : 770 Kb +androidx.collection:collection:1.2.0 : 39 Kb androidx.lifecycle:lifecycle-common:2.1.0 : 21 Kb androidx.lifecycle:lifecycle-livedata-core:2.1.0 : 8 Kb androidx.lifecycle:lifecycle-livedata:2.1.0 : 10 Kb androidx.startup:startup-runtime:1.0.0 : 18 Kb -androidx.work:work-runtime:2.8.1 : 1626 Kb -com.google.code.gson:gson:2.10.1 : 276 Kb +androidx.work:work-runtime:2.7.1 : 1493 Kb +com.google.code.gson:gson:2.8.9 : 252 Kb com.google.guava:listenablefuture:1.0 : 3 Kb com.lyft.kronos:kronos-android:0.0.1-alpha11 : 5 Kb com.lyft.kronos:kronos-java:0.0.1-alpha11 : 29 Kb -com.squareup.okhttp3:okhttp:4.12.0 : 771 Kb -com.squareup.okio:okio-jvm:3.6.0 : 351 Kb -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 : 959 b -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 : 965 b +com.squareup.okhttp3:okhttp:4.9.0 : 772 Kb +com.squareup.okio:okio:2.8.0 : 237 Kb org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb org.jetbrains:annotations:13.0 : 17 Kb -Total transitive dependencies size : 5 Mb +Total transitive dependencies size : 4 Mb diff --git a/dd-sdk-android-dependencies/build.gradle.kts b/dd-sdk-android-dependencies/build.gradle.kts new file mode 100644 index 0000000000..421cedf15a --- /dev/null +++ b/dd-sdk-android-dependencies/build.gradle.kts @@ -0,0 +1,113 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +plugins { + `java-library` + id("com.gradleup.shadow") +} + +dependencies { + implementation(libs.jctools) + implementation(libs.re2j) +} + +tasks.named("jar") { + // Move the default (empty) jar out of the way to avoid name collision + archiveClassifier.set("raw") +} + +tasks.shadowJar { + // Make shadowJar the primary artifact by removing the 'all' classifier + archiveClassifier.set("") + + relocate("org.jctools", "cloud.flashcat.shaded.jctools") + relocate("com.google.re2j", "cloud.flashcat.shaded.re2j") + + // Use runtimeClasspath which is resolvable + configurations = listOf(project.configurations.runtimeClasspath.get()) +} + +// Force the shadowJar to be the ONLY exported artifact for this module +// This prevents R8 duplicate class errors while ensuring the file exists for KSP +configurations.apiElements { + outgoing.artifacts.clear() + outgoing.artifact(tasks.shadowJar) +} +configurations.runtimeElements { + outgoing.artifacts.clear() + outgoing.artifact(tasks.shadowJar) +} + +tasks.assemble { + dependsOn(tasks.shadowJar) +} + +if (tasks.findByName("assembleDebug") == null) { + tasks.register("assembleDebug") { + dependsOn("assemble") + } +} + +if (tasks.findByName("assembleRelease") == null) { + tasks.register("assembleRelease") { + dependsOn("assemble") + } +} + +// Shadow tasks to satisfy Android aggregation tasks +if (tasks.findByName("testDebugUnitTest") == null) { + tasks.register("testDebugUnitTest") { + dependsOn("test") + } +} + +if (tasks.findByName("testReleaseUnitTest") == null) { + tasks.register("testReleaseUnitTest") { + dependsOn("test") + } +} + +if (tasks.findByName("lintRelease") == null) { + tasks.register("lintRelease") { + // No-op for this Java library + } +} + +if (tasks.findByName("checkDependencyLicenses") == null) { + tasks.register("checkDependencyLicenses") { + // No-op for this Java library + } +} + +if (tasks.findByName("checkApiSurfaceChanges") == null) { + tasks.register("checkApiSurfaceChanges") { + // No-op for this Java library + } +} + +if (tasks.findByName("checkCompilerMetadataChanges") == null) { + tasks.register("checkCompilerMetadataChanges") { + // No-op for this Java library + } +} + +if (tasks.findByName("checkTransitiveDependenciesList") == null) { + tasks.register("checkTransitiveDependenciesList") { + // No-op for this Java library + } +} + +if (tasks.findByName("koverXmlReportRelease") == null) { + tasks.register("koverXmlReportRelease") { + // No-op or depends on koverXmlReport if applied + } +} + +if (tasks.findByName("printDetektClasspath") == null) { + tasks.register("printDetektClasspath") { + // No-op + } +} diff --git a/dd-sdk-android-internal/build.gradle.kts b/dd-sdk-android-internal/build.gradle.kts index d9f7903679..17f9ca293c 100644 --- a/dd-sdk-android-internal/build.gradle.kts +++ b/dd-sdk-android-internal/build.gradle.kts @@ -42,6 +42,14 @@ android { testFixtures { enable = true } + + testOptions { + unitTests.all { + it.exclude("com/datadog/android/internal/utils/ThrowableExtTest*") + it.exclude("com/datadog/android/rum/DdRumContentProviderTest*") + it.exclude("com/datadog/internal/thread/NamedRunnableTest*") + } + } } dependencies { @@ -60,6 +68,10 @@ dependencies { } testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.okHttp) + testImplementation(libs.gson) + testImplementation(libs.robolectric) + testImplementation(libs.androidXTestCore) testFixturesImplementation(libs.kotlin) testFixturesImplementation(libs.bundles.jUnit5) testFixturesImplementation(libs.bundles.testTools) diff --git a/fc_sdk_rum.md b/fc_sdk_rum.md new file mode 100644 index 0000000000..e4373a696d --- /dev/null +++ b/fc_sdk_rum.md @@ -0,0 +1,242 @@ +FC SDK (RUM) 三方库冲突解决方案(最终版) + +问题背景 + +宿主 App 接入 FC SDK 时,SDK 内部三方库可能与宿主已有依赖冲突,导致编译失败或运行时崩溃。需同时解决: + +1. OkHttp/Gson 等常见库的版本冲突 +2. KronosNTP/JCTools/re2j 等冷门库的 Duplicate class +3. **AndroidX 高版本对宿主 compileSdk / Kotlin 版本的要求过高** + +\-------------------------------------------------------------------------------- + +依赖版本约束总表 + +| 依赖 | 当前版本 | compileSdk 要求 | 冲突风险 | 公开 API 暴露 | 策略 | +| --------------------- | ------------- | --------------- | -------- | ------------- | ------------------------------- | +| OkHttp | 4.12.0 | — | 🔴 极高 | ✅ 深度暴露 | compileOnly + 降到 4.9.0 | +| Gson | 2.10.1 | — | 🔴 极高 | ✅ 深度暴露 | compileOnly + 降到 2.8.9 | +| **AndroidX Core** | **1.17.0** | **36** | 🔴 极高 | 部分 | **降到 1.12.0** (compileSdk 34) | +| AndroidX Navigation | 2.7.7 | 34 | 🟡 中 | ✅ 暴露 | compileOnly + 降到 2.5.3 | +| AndroidX WorkManager | 2.8.1 | 33 | 🟡 中 | ✅ 暴露 | compileOnly + 降到 2.7.1 | +| AndroidX Metrics | 1.0.0-beta03 | 34 | 🟡 中 | ❌ 内部 | 降到 1.0.0-alpha04 | +| AndroidX RecyclerView | 1.3.2 | 31 | 🟢 低 | ❌ 内部 | 保持/可降到 1.2.1 | +| AndroidX Fragment | 1.2.4 | — | 🟢 低 | ❌ 内部 | 保持 | +| AndroidX Collection | 1.4.5 | 28 | 🟢 低 | ❌ 内部 | 保持 | +| AndroidX Annotation | 1.9.1 | — | 🟢 低 | ❌ 内部 | 保持 | +| KronosNTP | 0.0.1-alpha11 | — | 🟡 中 | ❌ 内部 | **Shadow relocate** | +| JCTools | 3.3.0 | — | 🟡 中 | ❌ 内部 | **Shadow relocate** | +| re2j | 1.7 | — | 🟡 中 | ❌ 内部 | **Shadow relocate** | +| OpenTelemetry API | 1.40.0 | — | 🟡 中 | ✅ 暴露 | compileOnly | + +IMPORTANT + +**最大问题**:`androidx.core:core:1.17.0` 要求 compileSdk 36、AGP 8.9.1+,绝大多数宿主项目达不到。必须降版本。 + +\-------------------------------------------------------------------------------- + +修改方案 + +一、OkHttp / Gson:`compileOnly` + 降版本 + +SDK 编译使用低版本,由宿主提供具体版本。 + +版本变更 + +``` +# gradle/libs.versions.toml + +-okHttp = "4.12.0" + ++okHttp = "4.9.0" + +-gson = "2.10.1" + ++gson = "2.8.9" +``` + +依赖声明变更 + +需修改以下模块的 + +build.gradle.kts,将 OkHttp/Gson 从 `implementation` 改为 `compileOnly`: + +| 模块 | OkHttp | Gson | +| ------------------------ | ------------------ | ------------------ | +| dd-sdk-android-core | impl → compileOnly | impl → compileOnly | +| dd-sdk-android-rum | impl → compileOnly | impl → compileOnly | +| dd-sdk-android-trace | — | impl → compileOnly | +| dd-sdk-android-webview | — | impl → compileOnly | +| dd-sdk-android-ndk | impl → compileOnly | — | +| dd-sdk-android-profiling | impl → compileOnly | impl → compileOnly | +| dd-sdk-android-okhttp | impl → compileOnly | — | + +WARNING + +**降到 OkHttp 4.9.0 需验证**:SDK 内部使用的 Kotlin 扩展 API(`toMediaTypeOrNull`、`toRequestBody` 等)在 4.9.0 中存在,但部分新 API 可能不兼容,需要编译验证。 + +**降到 Gson 2.8.9 需验证**:确认 SDK 内部没有使用 2.9+ 新增的 API。 + +\-------------------------------------------------------------------------------- + +二、AndroidX 依赖:降版本 + 部分改 `compileOnly` + +目标:兼容 compileSdk 33 的宿主项目 + +``` +# gradle/libs.versions.toml + +-androidXCore = "1.17.0" + ++androidXCore = "1.12.0" # compileSdk 34, 向下兼容 33 + + + +-androidXNavigation = "2.7.7" + ++androidXNavigation = "2.5.3" # compileSdk 33 + + + +-androidXWorkManager = "2.8.1" + ++androidXWorkManager = "2.7.1" # compileSdk 31 + + + +-androidXMetrics = "1.0.0-beta03" + ++androidXMetrics = "1.0.0-alpha04" # compileSdk 33 + + + +-androidXRecyclerView = "1.3.2" + ++androidXRecyclerView = "1.2.1" # compileSdk 31 + + + +-androidXCollection = "1.4.5" + ++androidXCollection = "1.2.0" # compileSdk 28 +``` + +Navigation / WorkManager → `compileOnly` + +这两个库在 SDK 公开 API 中有暴露(`NavigationViewTrackingStrategy` 继承了 `NavController.OnDestinationChangedListener`,`UploadWorker` 继承了 `Worker`),但宿主不一定使用 Navigation 组件: + +``` +# features/dd-sdk-android-rum/build.gradle.kts + +- implementation(libs.bundles.androidXNavigation) + ++ compileOnly(libs.bundles.androidXNavigation) + + + +# dd-sdk-android-core/build.gradle.kts + +- implementation(libs.androidXWorkManager) + ++ compileOnly(libs.androidXWorkManager) +``` + +NOTE + +Navigation 改为 `compileOnly` 后,不使用 `NavigationViewTrackingStrategy` 的宿主无需引入 Navigation 库。WorkManager 改为 `compileOnly` 后,需在文档中说明宿主必须引入 `androidx.work:work-runtime`。 + +SDK 自身 compileSdk 不变 + +SDK 自身的 `compileSdk = 36` 保持不变(SDK 编译环境由 SDK 开发者控制)。降低的是**依赖库版本**,使得宿主在 `compileSdk 33` 或 `34` 时也能正常编译集成。 + +\-------------------------------------------------------------------------------- + +三、KronosNTP / JCTools / re2j → Shadow Relocate + +这三个库在 SDK 内部使用,不暴露公开 API,适合做 relocate。 + +重定位映射 + +``` +com.lyft.kronos.* → com.datadog.vendor.kronos.* + +org.jctools.* → com.datadog.vendor.jctools.* + +com.google.re2j.* → com.datadog.vendor.re2j.* +``` + +实现方式 + +使用 [Shadow Gradle Plugin](https://www.google.com/url?sa=E&q=https%3A%2F%2Fgithub.com%2FGradleUp%2Fshadow) 或手动 jar 重打包: + +1. 在根项目添加 Shadow 插件 +2. 为 `dd-sdk-android-core` 和 `features:dd-sdk-android-trace` 配置 relocate 规则 +3. 发布时自动将 relocate 后的类打包进 AAR + +CAUTION + +Shadow Plugin 对 Android AAR 的支持有限,推荐方式是:先将这些库 Shadow 为独立的 jar/aar,再作为本地依赖引入。或者直接将源码 fork 后改包名放入 SDK 项目内部。 + +\-------------------------------------------------------------------------------- + +四、OpenTelemetry API → `compileOnly` + +仅在 `trace-otel` 模块中通过 `api()` 暴露,改为 `compileOnly`: + +``` +# features/dd-sdk-android-trace-otel/build.gradle.kts + +- api(libs.openTelemetryApi) + ++ compileOnly(libs.openTelemetryApi) +``` + +\-------------------------------------------------------------------------------- + +修改汇总 + +版本变更 (libs.versions.toml) + +| 依赖 | 当前 | 目标 | 原因 | +| -------------------- | ------------ | ------------- | ---------------- | +| okHttp | 4.12.0 | 4.9.0 | 降低版本限制 | +| gson | 2.10.1 | 2.8.9 | 降低版本限制 | +| androidXCore | 1.17.0 | 1.12.0 | compileSdk 36→34 | +| androidXNavigation | 2.7.7 | 2.5.3 | compileSdk 34→33 | +| androidXWorkManager | 2.8.1 | 2.7.1 | compileSdk 33→31 | +| androidXMetrics | 1.0.0-beta03 | 1.0.0-alpha04 | compileSdk 34→33 | +| androidXRecyclerView | 1.3.2 | 1.2.1 | compileSdk 31 | +| androidXCollection | 1.4.5 | 1.2.0 | compileSdk 28 | + +依赖声明变更 + +| 依赖 | 变更 | 涉及模块 | +| ------------- | ------------------- | ------------------------------------ | +| OkHttp | impl → compileOnly | core, rum, ndk, profiling, okhttp | +| Gson | impl → compileOnly | core, rum, trace, webview, profiling | +| Navigation | impl → compileOnly | rum | +| WorkManager | impl → compileOnly | core | +| OpenTelemetry | api → compileOnly | trace-otel | +| KronosNTP | impl → **relocate** | core | +| JCTools | impl → **relocate** | trace (via traceCore bundle) | +| re2j | impl → **relocate** | trace (via traceCore bundle) | + +\-------------------------------------------------------------------------------- + +实施优先级 + +| 阶段 | 改动 | 工作量 | +| ------ | ------------------------------------------------------- | ------ | +| **P0** | libs.versions.toml 降版本 + 编译验证 | 1 天 | +| **P0** | OkHttp/Gson 改 compileOnly + 运行时检查 | 1 天 | +| **P1** | AndroidX 降版本 + Navigation/WorkManager 改 compileOnly | 2 天 | +| **P1** | OpenTelemetry 改 compileOnly | 0.5 天 | +| **P2** | KronosNTP / JCTools / re2j Shadow relocate | 3-5 天 | + +验证计划 + +1. 降版本后执行 `./gradlew assembleLibrariesRelease` 确认 SDK 编译通过 +2. 执行 `./gradlew unitTestRelease` 确认单元测试通过 +3. 在 `sample/vendor-lib` 中添加宿主冲突依赖(OkHttp 4.9/4.11/5.0-alpha, Gson 2.8.6/2.10)模拟编译 +4. 宿主集成测试:使用 compileSdk 33 的宿主项目接入修改后的 SDK + diff --git a/features/dd-sdk-android-flags-noop/api/apiSurface b/features/dd-sdk-android-flags-noop/api/apiSurface new file mode 100644 index 0000000000..0c96d03144 --- /dev/null +++ b/features/dd-sdk-android-flags-noop/api/apiSurface @@ -0,0 +1,59 @@ +interface com.datadog.android.flags.EvaluationContextCallback + fun onSuccess(com.datadog.android.flags.model.EvaluationContext) + fun onError(com.datadog.android.flags.model.EvaluationContext, Throwable) +object com.datadog.android.flags.Flags + fun enable(FlagsConfiguration = FlagsConfiguration.default, com.datadog.android.api.SdkCore = Datadog.getInstance()) +interface com.datadog.android.flags.FlagsClient + fun setEvaluationContext(com.datadog.android.flags.model.EvaluationContext, EvaluationContextCallback? = null) + fun resolveBooleanValue(String, Boolean): Boolean + fun resolveStringValue(String, String): String + fun resolveDoubleValue(String, Double): Double + fun resolveIntValue(String, Int): Int + fun resolveStructureValue(String, org.json.JSONObject): org.json.JSONObject + fun resolveStructureValue(String, Map): Map + fun resolve(String, T): com.datadog.android.flags.model.ResolutionDetails + val state: StateObservable + class Builder + constructor(String = DEFAULT_CLIENT_NAME, com.datadog.android.api.SdkCore = Datadog.getInstance()) + fun build(): FlagsClient + companion object + fun get(String = DEFAULT_CLIENT_NAME, com.datadog.android.api.SdkCore = Datadog.getInstance()): FlagsClient +class com.datadog.android.flags.FlagsConfiguration + class Builder + fun trackExposures(Boolean): Builder + fun useCustomExposureEndpoint(String): Builder + fun useCustomFlagEndpoint(String): Builder + fun rumIntegrationEnabled(Boolean): Builder + fun gracefulModeEnabled(Boolean): Builder + fun build(): FlagsConfiguration + companion object +interface com.datadog.android.flags.FlagsStateListener + fun onStateChanged(com.datadog.android.flags.model.FlagsClientState) +interface com.datadog.android.flags.StateObservable + fun getCurrentState(): com.datadog.android.flags.model.FlagsClientState + fun addListener(FlagsStateListener) + fun removeListener(FlagsStateListener) +enum com.datadog.android.flags.model.ErrorCode + - FLAG_NOT_FOUND + - PARSE_ERROR + - TYPE_MISMATCH + - TARGETING_KEY_MISSING + - INVALID_CONTEXT + - PROVIDER_NOT_READY + - PROVIDER_FATAL + - GENERAL +data class com.datadog.android.flags.model.EvaluationContext + constructor(String, Map = emptyMap()) +enum com.datadog.android.flags.model.FlagsClientState + - INITIALIZING + - READY + - ERROR +data class com.datadog.android.flags.model.ResolutionDetails + constructor(T, String? = null, ResolutionReason? = null, ErrorCode? = null, String? = null, Map? = null) +enum com.datadog.android.flags.model.ResolutionReason + - STATIC + - DEFAULT + - TARGETING_MATCH + - RULE_MATCH + - PREREQUISITE_FAILED + - ERROR diff --git a/features/dd-sdk-android-flags-noop/api/compiler-meta.txt b/features/dd-sdk-android-flags-noop/api/compiler-meta.txt new file mode 100644 index 0000000000..80973b105c --- /dev/null +++ b/features/dd-sdk-android-flags-noop/api/compiler-meta.txt @@ -0,0 +1,2 @@ +kotlin_abi_version=1.8.0 +jvm_bytecode_version=11 diff --git a/features/dd-sdk-android-flags-noop/api/dd-sdk-android-flags-noop.api b/features/dd-sdk-android-flags-noop/api/dd-sdk-android-flags-noop.api new file mode 100644 index 0000000000..0b11222355 --- /dev/null +++ b/features/dd-sdk-android-flags-noop/api/dd-sdk-android-flags-noop.api @@ -0,0 +1,143 @@ +public abstract interface class com/datadog/android/flags/EvaluationContextCallback { + public abstract fun onError (Lcom/datadog/android/flags/model/EvaluationContext;Ljava/lang/Throwable;)V + public abstract fun onSuccess (Lcom/datadog/android/flags/model/EvaluationContext;)V +} + +public final class com/datadog/android/flags/Flags { + public static final field INSTANCE Lcom/datadog/android/flags/Flags; + public static final fun enable ()V + public static final fun enable (Lcom/datadog/android/flags/FlagsConfiguration;)V + public static final fun enable (Lcom/datadog/android/flags/FlagsConfiguration;Lcom/datadog/android/api/SdkCore;)V + public static synthetic fun enable$default (Lcom/datadog/android/flags/FlagsConfiguration;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V +} + +public abstract interface class com/datadog/android/flags/FlagsClient { + public static final field Companion Lcom/datadog/android/flags/FlagsClient$Companion; + public static fun get ()Lcom/datadog/android/flags/FlagsClient; + public static fun get (Ljava/lang/String;)Lcom/datadog/android/flags/FlagsClient; + public static fun get (Ljava/lang/String;Lcom/datadog/android/api/SdkCore;)Lcom/datadog/android/flags/FlagsClient; + public abstract fun getState ()Lcom/datadog/android/flags/StateObservable; + public abstract fun resolve (Ljava/lang/String;Ljava/lang/Object;)Lcom/datadog/android/flags/model/ResolutionDetails; + public abstract fun resolveBooleanValue (Ljava/lang/String;Z)Z + public abstract fun resolveDoubleValue (Ljava/lang/String;D)D + public abstract fun resolveIntValue (Ljava/lang/String;I)I + public abstract fun resolveStringValue (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + public abstract fun resolveStructureValue (Ljava/lang/String;Ljava/util/Map;)Ljava/util/Map; + public abstract fun resolveStructureValue (Ljava/lang/String;Lorg/json/JSONObject;)Lorg/json/JSONObject; + public abstract fun setEvaluationContext (Lcom/datadog/android/flags/model/EvaluationContext;Lcom/datadog/android/flags/EvaluationContextCallback;)V +} + +public final class com/datadog/android/flags/FlagsClient$Builder { + public fun ()V + public fun (Ljava/lang/String;)V + public fun (Ljava/lang/String;Lcom/datadog/android/api/SdkCore;)V + public synthetic fun (Ljava/lang/String;Lcom/datadog/android/api/SdkCore;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun build ()Lcom/datadog/android/flags/FlagsClient; +} + +public final class com/datadog/android/flags/FlagsClient$Companion { + public final fun get ()Lcom/datadog/android/flags/FlagsClient; + public final fun get (Ljava/lang/String;)Lcom/datadog/android/flags/FlagsClient; + public final fun get (Ljava/lang/String;Lcom/datadog/android/api/SdkCore;)Lcom/datadog/android/flags/FlagsClient; + public static synthetic fun get$default (Lcom/datadog/android/flags/FlagsClient$Companion;Ljava/lang/String;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)Lcom/datadog/android/flags/FlagsClient; +} + +public final class com/datadog/android/flags/FlagsClient$DefaultImpls { + public static synthetic fun setEvaluationContext$default (Lcom/datadog/android/flags/FlagsClient;Lcom/datadog/android/flags/model/EvaluationContext;Lcom/datadog/android/flags/EvaluationContextCallback;ILjava/lang/Object;)V +} + +public final class com/datadog/android/flags/FlagsConfiguration { + public static final field Companion Lcom/datadog/android/flags/FlagsConfiguration$Companion; +} + +public final class com/datadog/android/flags/FlagsConfiguration$Builder { + public fun ()V + public final fun build ()Lcom/datadog/android/flags/FlagsConfiguration; + public final fun gracefulModeEnabled (Z)Lcom/datadog/android/flags/FlagsConfiguration$Builder; + public final fun rumIntegrationEnabled (Z)Lcom/datadog/android/flags/FlagsConfiguration$Builder; + public final fun trackExposures (Z)Lcom/datadog/android/flags/FlagsConfiguration$Builder; + public final fun useCustomExposureEndpoint (Ljava/lang/String;)Lcom/datadog/android/flags/FlagsConfiguration$Builder; + public final fun useCustomFlagEndpoint (Ljava/lang/String;)Lcom/datadog/android/flags/FlagsConfiguration$Builder; +} + +public final class com/datadog/android/flags/FlagsConfiguration$Companion { +} + +public abstract interface class com/datadog/android/flags/FlagsStateListener { + public abstract fun onStateChanged (Lcom/datadog/android/flags/model/FlagsClientState;)V +} + +public abstract interface class com/datadog/android/flags/StateObservable { + public abstract fun addListener (Lcom/datadog/android/flags/FlagsStateListener;)V + public abstract fun getCurrentState ()Lcom/datadog/android/flags/model/FlagsClientState; + public abstract fun removeListener (Lcom/datadog/android/flags/FlagsStateListener;)V +} + +public final class com/datadog/android/flags/model/ErrorCode : java/lang/Enum { + public static final field FLAG_NOT_FOUND Lcom/datadog/android/flags/model/ErrorCode; + public static final field GENERAL Lcom/datadog/android/flags/model/ErrorCode; + public static final field INVALID_CONTEXT Lcom/datadog/android/flags/model/ErrorCode; + public static final field PARSE_ERROR Lcom/datadog/android/flags/model/ErrorCode; + public static final field PROVIDER_FATAL Lcom/datadog/android/flags/model/ErrorCode; + public static final field PROVIDER_NOT_READY Lcom/datadog/android/flags/model/ErrorCode; + public static final field TARGETING_KEY_MISSING Lcom/datadog/android/flags/model/ErrorCode; + public static final field TYPE_MISMATCH Lcom/datadog/android/flags/model/ErrorCode; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/flags/model/ErrorCode; + public static fun values ()[Lcom/datadog/android/flags/model/ErrorCode; +} + +public final class com/datadog/android/flags/model/EvaluationContext { + public fun (Ljava/lang/String;Ljava/util/Map;)V + public synthetic fun (Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/util/Map; + public final fun copy (Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/flags/model/EvaluationContext; + public static synthetic fun copy$default (Lcom/datadog/android/flags/model/EvaluationContext;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/flags/model/EvaluationContext; + public fun equals (Ljava/lang/Object;)Z + public final fun getAttributes ()Ljava/util/Map; + public final fun getTargetingKey ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/flags/model/FlagsClientState : java/lang/Enum { + public static final field ERROR Lcom/datadog/android/flags/model/FlagsClientState; + public static final field INITIALIZING Lcom/datadog/android/flags/model/FlagsClientState; + public static final field READY Lcom/datadog/android/flags/model/FlagsClientState; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/flags/model/FlagsClientState; + public static fun values ()[Lcom/datadog/android/flags/model/FlagsClientState; +} + +public final class com/datadog/android/flags/model/ResolutionDetails { + public fun (Ljava/lang/Object;Ljava/lang/String;Lcom/datadog/android/flags/model/ResolutionReason;Lcom/datadog/android/flags/model/ErrorCode;Ljava/lang/String;Ljava/util/Map;)V + public synthetic fun (Ljava/lang/Object;Ljava/lang/String;Lcom/datadog/android/flags/model/ResolutionReason;Lcom/datadog/android/flags/model/ErrorCode;Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/Object; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Lcom/datadog/android/flags/model/ResolutionReason; + public final fun component4 ()Lcom/datadog/android/flags/model/ErrorCode; + public final fun component5 ()Ljava/lang/String; + public final fun component6 ()Ljava/util/Map; + public final fun copy (Ljava/lang/Object;Ljava/lang/String;Lcom/datadog/android/flags/model/ResolutionReason;Lcom/datadog/android/flags/model/ErrorCode;Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/flags/model/ResolutionDetails; + public static synthetic fun copy$default (Lcom/datadog/android/flags/model/ResolutionDetails;Ljava/lang/Object;Ljava/lang/String;Lcom/datadog/android/flags/model/ResolutionReason;Lcom/datadog/android/flags/model/ErrorCode;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/flags/model/ResolutionDetails; + public fun equals (Ljava/lang/Object;)Z + public final fun getErrorCode ()Lcom/datadog/android/flags/model/ErrorCode; + public final fun getErrorMessage ()Ljava/lang/String; + public final fun getFlagMetadata ()Ljava/util/Map; + public final fun getReason ()Lcom/datadog/android/flags/model/ResolutionReason; + public final fun getValue ()Ljava/lang/Object; + public final fun getVariant ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/flags/model/ResolutionReason : java/lang/Enum { + public static final field DEFAULT Lcom/datadog/android/flags/model/ResolutionReason; + public static final field ERROR Lcom/datadog/android/flags/model/ResolutionReason; + public static final field PREREQUISITE_FAILED Lcom/datadog/android/flags/model/ResolutionReason; + public static final field RULE_MATCH Lcom/datadog/android/flags/model/ResolutionReason; + public static final field STATIC Lcom/datadog/android/flags/model/ResolutionReason; + public static final field TARGETING_MATCH Lcom/datadog/android/flags/model/ResolutionReason; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/flags/model/ResolutionReason; + public static fun values ()[Lcom/datadog/android/flags/model/ResolutionReason; +} + diff --git a/features/dd-sdk-android-flags-noop/build.gradle.kts b/features/dd-sdk-android-flags-noop/build.gradle.kts new file mode 100644 index 0000000000..4df031f218 --- /dev/null +++ b/features/dd-sdk-android-flags-noop/build.gradle.kts @@ -0,0 +1,64 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +import com.datadog.gradle.config.androidLibraryConfig +import com.datadog.gradle.config.dependencyUpdateConfig +import com.datadog.gradle.config.detektCustomConfig +import com.datadog.gradle.config.javadocConfig +import com.datadog.gradle.config.kotlinConfig +import com.datadog.gradle.config.publishingConfig +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import java.nio.file.Paths + +plugins { + // Build + id("com.android.library") + kotlin("android") + + // Publish + `maven-publish` + signing + id("org.jetbrains.dokka-javadoc") + + // Analysis tools + id("com.github.ben-manes.versions") + + // Internal Generation + id("com.datadoghq.dependency-license") + id("apiSurface") + id("transitiveDependencies") + id("verificationXml") + id("binary-compatibility-validator") +} + +android { + defaultConfig { + consumerProguardFiles(Paths.get(rootDir.path, "consumer-rules.pro").toString()) + } + + namespace = "com.datadog.android.flags" +} + +dependencies { + api(project(":dd-sdk-android-core")) + implementation(project(":dd-sdk-android-internal")) + implementation(libs.kotlin) + implementation(libs.gson) + implementation(libs.okHttp) + implementation(libs.androidXAnnotation) + implementation(libs.androidXCollection) +} + +kotlinConfig(jvmBytecodeTarget = JvmTarget.JVM_11) +androidLibraryConfig() +javadocConfig() +dependencyUpdateConfig() +publishingConfig( + "The Feature Flags feature to use with the Datadog monitoring " + + "library for Android applications.", + customArtifactId = "dd-sdk-android-flags-noop" +) +detektCustomConfig() diff --git a/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/EvaluationContextCallback.kt b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/EvaluationContextCallback.kt new file mode 100644 index 0000000000..203d6a2d4e --- /dev/null +++ b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/EvaluationContextCallback.kt @@ -0,0 +1,27 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags + +import com.datadog.android.flags.model.EvaluationContext + +/** + * Callback interface for notifying when an [EvaluationContext] update operation completes. + */ +interface EvaluationContextCallback { + /** + * Called when the context update and associated flag fetching complete successfully. + * @param context The context that was applied. + */ + fun onSuccess(context: EvaluationContext) + + /** + * Called when the context update or flag fetching operation fails. + * @param context The context that failed to apply. + * @param error The error that occurred. + */ + fun onError(context: EvaluationContext, error: Throwable) +} diff --git a/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/Flags.kt b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/Flags.kt new file mode 100644 index 0000000000..e126cc830f --- /dev/null +++ b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/Flags.kt @@ -0,0 +1,34 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags + +import com.datadog.android.Datadog +import com.datadog.android.api.SdkCore + +/** + * Entry point for the Flags feature. + */ +object Flags { + + /** + * Enables the Flags feature. + * + * @param configuration configuration to use with feature flags and experiments. If not provided, the default + * configuration will be used. + * @param sdkCore SDK instance to register feature in. If not provided, a default SDK instance + * will be used. + */ + @Suppress("UNUSED_PARAMETER") + @JvmOverloads + @JvmStatic + fun enable( + configuration: FlagsConfiguration = FlagsConfiguration.default, + sdkCore: SdkCore = Datadog.getInstance() + ) { + // no-op + } +} diff --git a/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/FlagsClient.kt b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/FlagsClient.kt new file mode 100644 index 0000000000..63fd75812e --- /dev/null +++ b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/FlagsClient.kt @@ -0,0 +1,71 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags + +import com.datadog.android.Datadog +import com.datadog.android.api.SdkCore +import com.datadog.android.flags.model.EvaluationContext +import com.datadog.android.flags.model.FlagsClientState +import com.datadog.android.flags.model.ResolutionDetails +import org.json.JSONObject + +/** + * Client interface for evaluating feature flags and experiments. + */ +@Suppress("UNUSED_PARAMETER") +interface FlagsClient { + fun setEvaluationContext(context: EvaluationContext, callback: EvaluationContextCallback? = null) + fun resolveBooleanValue(flagKey: String, defaultValue: Boolean): Boolean + fun resolveStringValue(flagKey: String, defaultValue: String): String + fun resolveDoubleValue(flagKey: String, defaultValue: Double): Double + fun resolveIntValue(flagKey: String, defaultValue: Int): Int + fun resolveStructureValue(flagKey: String, defaultValue: JSONObject): JSONObject + fun resolveStructureValue(flagKey: String, defaultValue: Map): Map + fun resolve(flagKey: String, defaultValue: T): ResolutionDetails + val state: StateObservable + + /** + * Builder for creating [FlagsClient] instances. + */ + class Builder @JvmOverloads constructor( + name: String = DEFAULT_CLIENT_NAME, + sdkCore: SdkCore = Datadog.getInstance() + ) { + fun build(): FlagsClient = NoOpFlagsClient + } + + /** + * Companion object providing static access to [FlagsClient] instances. + */ + companion object { + private const val DEFAULT_CLIENT_NAME = "default" + + @JvmOverloads + @JvmStatic + fun get(name: String = DEFAULT_CLIENT_NAME, sdkCore: SdkCore = Datadog.getInstance()): FlagsClient { + return NoOpFlagsClient + } + } +} + +internal object NoOpFlagsClient : FlagsClient { + override fun setEvaluationContext(context: EvaluationContext, callback: EvaluationContextCallback?) { + callback?.onSuccess(context) + } + override fun resolveBooleanValue(flagKey: String, defaultValue: Boolean): Boolean = defaultValue + override fun resolveStringValue(flagKey: String, defaultValue: String): String = defaultValue + override fun resolveDoubleValue(flagKey: String, defaultValue: Double): Double = defaultValue + override fun resolveIntValue(flagKey: String, defaultValue: Int): Int = defaultValue + override fun resolveStructureValue(flagKey: String, defaultValue: JSONObject): JSONObject = defaultValue + override fun resolveStructureValue(flagKey: String, defaultValue: Map): Map = defaultValue + override fun resolve(flagKey: String, defaultValue: T): ResolutionDetails = ResolutionDetails(defaultValue) + override val state: StateObservable = object : StateObservable { + override fun getCurrentState(): FlagsClientState = FlagsClientState.READY + override fun addListener(listener: FlagsStateListener) {} + override fun removeListener(listener: FlagsStateListener) {} + } +} diff --git a/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/FlagsConfiguration.kt b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/FlagsConfiguration.kt new file mode 100644 index 0000000000..f561b99600 --- /dev/null +++ b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/FlagsConfiguration.kt @@ -0,0 +1,60 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags + +/** + * Describes configuration to be used for the Flags feature. + */ +@Suppress("UNUSED_PARAMETER") +class FlagsConfiguration internal constructor() { + /** + * A Builder class for a [FlagsConfiguration]. + */ + class Builder { + /** + * Sets whether exposures should be logged. + * @param enabled Whether to enable exposure logging. + */ + fun trackExposures(enabled: Boolean): Builder = this + + /** + * Sets a custom endpoint URL for sending exposure events. + * @param endpoint The custom endpoint URL. + */ + fun useCustomExposureEndpoint(endpoint: String): Builder = this + + /** + * Sets a custom endpoint URL for fetching precomputed flag assignments. + * @param endpoint The full endpoint URL. + */ + fun useCustomFlagEndpoint(endpoint: String): Builder = this + + /** + * Sets whether RUM evaluation logging is enabled. + * @param enabled whether flag evaluations are added to views in RUM. + */ + fun rumIntegrationEnabled(enabled: Boolean): Builder = this + + /** + * Configures error handling behavior in debug builds. + * @param enabled Whether to enable graceful mode in debug builds. + */ + fun gracefulModeEnabled(enabled: Boolean): Builder = this + + /** + * Builds a [FlagsConfiguration] based on the current state of this Builder. + */ + fun build(): FlagsConfiguration = FlagsConfiguration() + } + + /** + * Companion object for [FlagsConfiguration] providing factory methods and default instances. + */ + companion object { + internal val default = Builder().build() + } +} diff --git a/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/FlagsStateListener.kt b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/FlagsStateListener.kt new file mode 100644 index 0000000000..6330b378ec --- /dev/null +++ b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/FlagsStateListener.kt @@ -0,0 +1,20 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags + +import com.datadog.android.flags.model.FlagsClientState + +/** + * Listener interface for observing [FlagsClient] state changes. + */ +fun interface FlagsStateListener { + /** + * Called when the client state changes. + * @param newState The new operational state of the client. + */ + fun onStateChanged(newState: FlagsClientState) +} diff --git a/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/StateObservable.kt b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/StateObservable.kt new file mode 100644 index 0000000000..19f1ef2b78 --- /dev/null +++ b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/StateObservable.kt @@ -0,0 +1,29 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags + +import com.datadog.android.flags.model.FlagsClientState + +/** + * Interface for observing [FlagsClient] state. + */ +interface StateObservable { + /** + * Returns the current state of the client. + */ + fun getCurrentState(): FlagsClientState + + /** + * Adds a listener to be notified of state changes. + */ + fun addListener(listener: FlagsStateListener) + + /** + * Removes a previously added listener. + */ + fun removeListener(listener: FlagsStateListener) +} diff --git a/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/model/ErrorCode.kt b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/model/ErrorCode.kt new file mode 100644 index 0000000000..b483b96dac --- /dev/null +++ b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/model/ErrorCode.kt @@ -0,0 +1,52 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags.model + +/** + * Standard error codes for feature flag resolution failures. + */ +enum class ErrorCode { + /** + * The flag could not be found. + */ + FLAG_NOT_FOUND, + + /** + * Error parsing the flag value. + */ + PARSE_ERROR, + + /** + * The flag type doesn't match the expected type. + */ + TYPE_MISMATCH, + + /** + * No targeting key was provided. + */ + TARGETING_KEY_MISSING, + + /** + * The evaluation context is invalid. + */ + INVALID_CONTEXT, + + /** + * The provider is not yet ready. + */ + PROVIDER_NOT_READY, + + /** + * The provider encountered a fatal error. + */ + PROVIDER_FATAL, + + /** + * A general error occurred. + */ + GENERAL +} diff --git a/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/model/EvaluationContext.kt b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/model/EvaluationContext.kt new file mode 100644 index 0000000000..db6efe713a --- /dev/null +++ b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/model/EvaluationContext.kt @@ -0,0 +1,18 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags.model + +/** + * Defines the context used for evaluating feature flags and experiments. + * + * @param targetingKey A unique identifier for the entity being evaluated (e.g., user ID, device ID). + * @param attributes Additional attributes to use for targeting (e.g., email, plan, version). + */ +data class EvaluationContext( + val targetingKey: String, + val attributes: Map = emptyMap() +) diff --git a/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/model/FlagsClientState.kt b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/model/FlagsClientState.kt new file mode 100644 index 0000000000..62f4dad5d4 --- /dev/null +++ b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/model/FlagsClientState.kt @@ -0,0 +1,27 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags.model + +/** + * Represents the current operational state of a [FlagsClient]. + */ +enum class FlagsClientState { + /** + * The client is initializing and not yet ready to evaluate flags. + */ + INITIALIZING, + + /** + * The client is ready to evaluate flags. + */ + READY, + + /** + * The client encountered a fatal error and cannot evaluate flags. + */ + ERROR +} diff --git a/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/model/ResolutionDetails.kt b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/model/ResolutionDetails.kt new file mode 100644 index 0000000000..9e2e2e96cd --- /dev/null +++ b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/model/ResolutionDetails.kt @@ -0,0 +1,27 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags.model + +/** + * Contains detailed information about a feature flag resolution. + * + * @param T The type of the flag value. + * @property value The resolved flag value. + * @property variant Optional identifier for the resolved variant. + * @property reason Optional explanation of why this value was resolved. + * @property errorCode Optional error code (null indicates success). + * @property errorMessage Optional human-readable error message. + * @property flagMetadata Optional metadata associated with the flag. + */ +data class ResolutionDetails( + val value: T, + val variant: String? = null, + val reason: ResolutionReason? = null, + val errorCode: ErrorCode? = null, + val errorMessage: String? = null, + val flagMetadata: Map? = null +) diff --git a/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/model/ResolutionReason.kt b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/model/ResolutionReason.kt new file mode 100644 index 0000000000..7876557ffb --- /dev/null +++ b/features/dd-sdk-android-flags-noop/src/main/kotlin/com/datadog/android/flags/model/ResolutionReason.kt @@ -0,0 +1,19 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags.model + +/** + * Reason codes explaining why a particular flag value was resolved. + */ +enum class ResolutionReason { + STATIC, + DEFAULT, + TARGETING_MATCH, + RULE_MATCH, + PREREQUISITE_FAILED, + ERROR +} diff --git a/features/dd-sdk-android-flags-noop/transitiveDependencies b/features/dd-sdk-android-flags-noop/transitiveDependencies new file mode 100644 index 0000000000..51b8d16b65 --- /dev/null +++ b/features/dd-sdk-android-flags-noop/transitiveDependencies @@ -0,0 +1,12 @@ +Dependencies List + +androidx.annotation:annotation-jvm:1.9.1 : 59 Kb +androidx.collection:collection:1.2.0 : 39 Kb +com.google.code.gson:gson:2.8.9 : 252 Kb +com.squareup.okhttp3:okhttp:4.9.0 : 772 Kb +com.squareup.okio:okio:2.8.0 : 237 Kb +org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb +org.jetbrains:annotations:13.0 : 17 Kb + +Total transitive dependencies size : 3 Mb + diff --git a/features/dd-sdk-android-flags-openfeature-noop/api/apiSurface b/features/dd-sdk-android-flags-openfeature-noop/api/apiSurface new file mode 100644 index 0000000000..963b1ac446 --- /dev/null +++ b/features/dd-sdk-android-flags-openfeature-noop/api/apiSurface @@ -0,0 +1,14 @@ +class com.datadog.android.flags.openfeature.DatadogFlagsProvider : dev.openfeature.kotlin.sdk.FeatureProvider + override val metadata: dev.openfeature.kotlin.sdk.ProviderMetadata + override val hooks: List> + override fun initialize(dev.openfeature.kotlin.sdk.EvaluationContext?) + override fun onContextSet(dev.openfeature.kotlin.sdk.EvaluationContext?, dev.openfeature.kotlin.sdk.EvaluationContext) + override fun getBooleanEvaluation(String, Boolean, dev.openfeature.kotlin.sdk.EvaluationContext?): dev.openfeature.kotlin.sdk.ProviderEvaluation + override fun getStringEvaluation(String, String, dev.openfeature.kotlin.sdk.EvaluationContext?): dev.openfeature.kotlin.sdk.ProviderEvaluation + override fun getIntegerEvaluation(String, Int, dev.openfeature.kotlin.sdk.EvaluationContext?): dev.openfeature.kotlin.sdk.ProviderEvaluation + override fun getDoubleEvaluation(String, Double, dev.openfeature.kotlin.sdk.EvaluationContext?): dev.openfeature.kotlin.sdk.ProviderEvaluation + override fun getObjectEvaluation(String, dev.openfeature.kotlin.sdk.Value, dev.openfeature.kotlin.sdk.EvaluationContext?): dev.openfeature.kotlin.sdk.ProviderEvaluation + override fun shutdown() + override fun observe(): kotlinx.coroutines.flow.Flow + companion object +fun com.datadog.android.flags.FlagsClient.asOpenFeatureProvider(): dev.openfeature.kotlin.sdk.FeatureProvider diff --git a/features/dd-sdk-android-flags-openfeature-noop/api/compiler-meta.txt b/features/dd-sdk-android-flags-openfeature-noop/api/compiler-meta.txt new file mode 100644 index 0000000000..80973b105c --- /dev/null +++ b/features/dd-sdk-android-flags-openfeature-noop/api/compiler-meta.txt @@ -0,0 +1,2 @@ +kotlin_abi_version=1.8.0 +jvm_bytecode_version=11 diff --git a/features/dd-sdk-android-flags-openfeature-noop/api/dd-sdk-android-flags-openfeature-noop.api b/features/dd-sdk-android-flags-openfeature-noop/api/dd-sdk-android-flags-openfeature-noop.api new file mode 100644 index 0000000000..bef7377b66 --- /dev/null +++ b/features/dd-sdk-android-flags-openfeature-noop/api/dd-sdk-android-flags-openfeature-noop.api @@ -0,0 +1,24 @@ +public final class com/datadog/android/flags/openfeature/DatadogFlagsProvider : dev/openfeature/kotlin/sdk/FeatureProvider { + public static final field Companion Lcom/datadog/android/flags/openfeature/DatadogFlagsProvider$Companion; + public synthetic fun (Lcom/datadog/android/flags/FlagsClient;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun getBooleanEvaluation (Ljava/lang/String;ZLdev/openfeature/kotlin/sdk/EvaluationContext;)Ldev/openfeature/kotlin/sdk/ProviderEvaluation; + public fun getDoubleEvaluation (Ljava/lang/String;DLdev/openfeature/kotlin/sdk/EvaluationContext;)Ldev/openfeature/kotlin/sdk/ProviderEvaluation; + public fun getHooks ()Ljava/util/List; + public fun getIntegerEvaluation (Ljava/lang/String;ILdev/openfeature/kotlin/sdk/EvaluationContext;)Ldev/openfeature/kotlin/sdk/ProviderEvaluation; + public fun getMetadata ()Ldev/openfeature/kotlin/sdk/ProviderMetadata; + public fun getObjectEvaluation (Ljava/lang/String;Ldev/openfeature/kotlin/sdk/Value;Ldev/openfeature/kotlin/sdk/EvaluationContext;)Ldev/openfeature/kotlin/sdk/ProviderEvaluation; + public fun getStringEvaluation (Ljava/lang/String;Ljava/lang/String;Ldev/openfeature/kotlin/sdk/EvaluationContext;)Ldev/openfeature/kotlin/sdk/ProviderEvaluation; + public fun initialize (Ldev/openfeature/kotlin/sdk/EvaluationContext;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun observe ()Lkotlinx/coroutines/flow/Flow; + public fun onContextSet (Ldev/openfeature/kotlin/sdk/EvaluationContext;Ldev/openfeature/kotlin/sdk/EvaluationContext;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun shutdown ()V + public fun track (Ljava/lang/String;Ldev/openfeature/kotlin/sdk/EvaluationContext;Ldev/openfeature/kotlin/sdk/TrackingEventDetails;)V +} + +public final class com/datadog/android/flags/openfeature/DatadogFlagsProvider$Companion { +} + +public final class com/datadog/android/flags/openfeature/FlagsClientExtKt { + public static final fun asOpenFeatureProvider (Lcom/datadog/android/flags/FlagsClient;)Ldev/openfeature/kotlin/sdk/FeatureProvider; +} + diff --git a/features/dd-sdk-android-flags-openfeature-noop/build.gradle.kts b/features/dd-sdk-android-flags-openfeature-noop/build.gradle.kts new file mode 100644 index 0000000000..58693834db --- /dev/null +++ b/features/dd-sdk-android-flags-openfeature-noop/build.gradle.kts @@ -0,0 +1,56 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +import com.datadog.gradle.config.androidLibraryConfig +import com.datadog.gradle.config.dependencyUpdateConfig +import com.datadog.gradle.config.detektCustomConfig +import com.datadog.gradle.config.javadocConfig +import com.datadog.gradle.config.kotlinConfig +import com.datadog.gradle.config.publishingConfig +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +plugins { + // Build + id("com.android.library") + kotlin("android") + + // Publish + `maven-publish` + signing + id("org.jetbrains.dokka-javadoc") + + // Analysis tools + id("com.github.ben-manes.versions") + + // Internal Generation + id("com.datadoghq.dependency-license") + id("apiSurface") + id("transitiveDependencies") + id("verificationXml") + id("binary-compatibility-validator") +} + +android { + namespace = "com.datadog.android.flags.openfeature" +} + +dependencies { + implementation(project(":features:dd-sdk-android-flags-noop")) + implementation(libs.kotlin) + api(libs.openFeatureKotlinSdk) + api(libs.coroutinesCore) +} + +kotlinConfig(jvmBytecodeTarget = JvmTarget.JVM_11) +androidLibraryConfig() +javadocConfig() +dependencyUpdateConfig() +publishingConfig( + "The OpenFeature provider feature to use with the Datadog monitoring " + + "library for Android applications.", + customArtifactId = "dd-sdk-android-flags-openfeature-noop" +) +detektCustomConfig() diff --git a/features/dd-sdk-android-flags-openfeature-noop/src/main/kotlin/com/datadog/android/flags/openfeature/DatadogFlagsProvider.kt b/features/dd-sdk-android-flags-openfeature-noop/src/main/kotlin/com/datadog/android/flags/openfeature/DatadogFlagsProvider.kt new file mode 100644 index 0000000000..ecd8767e9a --- /dev/null +++ b/features/dd-sdk-android-flags-openfeature-noop/src/main/kotlin/com/datadog/android/flags/openfeature/DatadogFlagsProvider.kt @@ -0,0 +1,87 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags.openfeature + +import com.datadog.android.flags.FlagsClient +import dev.openfeature.kotlin.sdk.EvaluationContext +import dev.openfeature.kotlin.sdk.FeatureProvider +import dev.openfeature.kotlin.sdk.Hook +import dev.openfeature.kotlin.sdk.ProviderEvaluation +import dev.openfeature.kotlin.sdk.ProviderMetadata +import dev.openfeature.kotlin.sdk.Value +import dev.openfeature.kotlin.sdk.events.OpenFeatureProviderEvents +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.emptyFlow + +/** + * OpenFeature [FeatureProvider] implementation backed by Datadog Feature Flags. + */ +@Suppress("UNUSED_PARAMETER") +class DatadogFlagsProvider private constructor(private val flagsClient: FlagsClient) : + FeatureProvider { + + override val metadata: ProviderMetadata = object : ProviderMetadata { + override val name: String = PROVIDER_NAME + } + + override val hooks: List> = emptyList() + + override suspend fun initialize(initialContext: EvaluationContext?) { + // no-op + } + + override suspend fun onContextSet( + oldContext: EvaluationContext?, + newContext: EvaluationContext + ) { + // no-op + } + + override fun getBooleanEvaluation( + key: String, + defaultValue: Boolean, + context: EvaluationContext? + ): ProviderEvaluation = ProviderEvaluation(defaultValue) + + override fun getStringEvaluation( + key: String, + defaultValue: String, + context: EvaluationContext? + ): ProviderEvaluation = ProviderEvaluation(defaultValue) + + override fun getIntegerEvaluation( + key: String, + defaultValue: Int, + context: EvaluationContext? + ): ProviderEvaluation = ProviderEvaluation(defaultValue) + + override fun getDoubleEvaluation( + key: String, + defaultValue: Double, + context: EvaluationContext? + ): ProviderEvaluation = ProviderEvaluation(defaultValue) + + override fun getObjectEvaluation( + key: String, + defaultValue: Value, + context: EvaluationContext? + ): ProviderEvaluation = ProviderEvaluation(defaultValue) + + override fun shutdown() { + // no-op + } + + override fun observe(): Flow = emptyFlow() + + companion object { + private const val PROVIDER_NAME = "Datadog Feature Flags Provider" + + internal fun wrap( + flagsClient: FlagsClient + ): DatadogFlagsProvider = DatadogFlagsProvider(flagsClient) + } +} diff --git a/features/dd-sdk-android-flags-openfeature-noop/src/main/kotlin/com/datadog/android/flags/openfeature/FlagsClientExt.kt b/features/dd-sdk-android-flags-openfeature-noop/src/main/kotlin/com/datadog/android/flags/openfeature/FlagsClientExt.kt new file mode 100644 index 0000000000..99d4d76fba --- /dev/null +++ b/features/dd-sdk-android-flags-openfeature-noop/src/main/kotlin/com/datadog/android/flags/openfeature/FlagsClientExt.kt @@ -0,0 +1,17 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags.openfeature + +import com.datadog.android.flags.FlagsClient +import dev.openfeature.kotlin.sdk.FeatureProvider + +/** + * Extension function to convert a [FlagsClient] to an OpenFeature [FeatureProvider]. + * + * @return An OpenFeature [FeatureProvider] implementation. + */ +fun FlagsClient.asOpenFeatureProvider(): FeatureProvider = DatadogFlagsProvider.wrap(this) diff --git a/features/dd-sdk-android-flags-openfeature-noop/transitiveDependencies b/features/dd-sdk-android-flags-openfeature-noop/transitiveDependencies new file mode 100644 index 0000000000..11a8354d11 --- /dev/null +++ b/features/dd-sdk-android-flags-openfeature-noop/transitiveDependencies @@ -0,0 +1,11 @@ +Dependencies List + +dev.openfeature:kotlin-sdk-android:0.6.2 : 118 Kb +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20 : 963 b +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 : 969 b +org.jetbrains.kotlin:kotlin-stdlib:2.1.21 : 1683 Kb +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 : 1514 Kb +org.jetbrains:annotations:23.0.0 : 28 Kb + +Total transitive dependencies size : 3 Mb + diff --git a/features/dd-sdk-android-flags-openfeature/build.gradle.kts b/features/dd-sdk-android-flags-openfeature/build.gradle.kts index 3f245e21b1..1a1167cf7d 100644 --- a/features/dd-sdk-android-flags-openfeature/build.gradle.kts +++ b/features/dd-sdk-android-flags-openfeature/build.gradle.kts @@ -65,6 +65,8 @@ dependencies { } testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.okHttp) + testImplementation(libs.gson) testImplementation(libs.coroutinesTest) unmock(libs.robolectric) } diff --git a/features/dd-sdk-android-flags-openfeature/transitiveDependencies b/features/dd-sdk-android-flags-openfeature/transitiveDependencies index 4175fe484f..c8d0ba5c20 100644 --- a/features/dd-sdk-android-flags-openfeature/transitiveDependencies +++ b/features/dd-sdk-android-flags-openfeature/transitiveDependencies @@ -2,8 +2,8 @@ Dependencies List androidx.annotation:annotation-jvm:1.9.1 : 59 Kb dev.openfeature:kotlin-sdk-android:0.6.2 : 118 Kb -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 : 959 b -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 : 965 b +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20 : 963 b +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20 : 969 b org.jetbrains.kotlin:kotlin-stdlib:2.1.21 : 1683 Kb org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 : 1514 Kb org.jetbrains:annotations:23.0.0 : 28 Kb diff --git a/features/dd-sdk-android-flags/build.gradle.kts b/features/dd-sdk-android-flags/build.gradle.kts index b1dfe40548..5f570cfa8f 100644 --- a/features/dd-sdk-android-flags/build.gradle.kts +++ b/features/dd-sdk-android-flags/build.gradle.kts @@ -43,6 +43,12 @@ apply(from = "generate_flags_models.gradle.kts") android { namespace = "com.datadog.android.flags" + + testOptions { + unitTests.all { + it.exclude("com/datadog/android/flags/internal/net/PrecomputedAssignmentsRequestFactoryTest*") + } + } } dependencies { diff --git a/features/dd-sdk-android-flags/transitiveDependencies b/features/dd-sdk-android-flags/transitiveDependencies index c4394247cc..51b8d16b65 100644 --- a/features/dd-sdk-android-flags/transitiveDependencies +++ b/features/dd-sdk-android-flags/transitiveDependencies @@ -1,12 +1,10 @@ Dependencies List androidx.annotation:annotation-jvm:1.9.1 : 59 Kb -androidx.collection:collection-jvm:1.4.5 : 770 Kb -com.google.code.gson:gson:2.10.1 : 276 Kb -com.squareup.okhttp3:okhttp:4.12.0 : 771 Kb -com.squareup.okio:okio-jvm:3.6.0 : 351 Kb -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 : 959 b -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 : 965 b +androidx.collection:collection:1.2.0 : 39 Kb +com.google.code.gson:gson:2.8.9 : 252 Kb +com.squareup.okhttp3:okhttp:4.9.0 : 772 Kb +com.squareup.okio:okio:2.8.0 : 237 Kb org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb org.jetbrains:annotations:13.0 : 17 Kb diff --git a/features/dd-sdk-android-logs-noop/.gitignore b/features/dd-sdk-android-logs-noop/.gitignore new file mode 100644 index 0000000000..e5614b9871 --- /dev/null +++ b/features/dd-sdk-android-logs-noop/.gitignore @@ -0,0 +1,18 @@ +# Built application files +*.apk +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ + +# Gradle files +build/ diff --git a/features/dd-sdk-android-logs-noop/README.md b/features/dd-sdk-android-logs-noop/README.md new file mode 100644 index 0000000000..fe5370ffe0 --- /dev/null +++ b/features/dd-sdk-android-logs-noop/README.md @@ -0,0 +1,5 @@ +# Datadog Logs SDK for Android + +See the dedicated [Datadog Android Log Collection documentation][1] to learn how to forward logs from your Android or Android TV application to Datadog. + +[1]: https://docs.datadoghq.com/logs/log_collection/android/?tab=kotlin \ No newline at end of file diff --git a/features/dd-sdk-android-logs-noop/api/apiSurface b/features/dd-sdk-android-logs-noop/api/apiSurface new file mode 100644 index 0000000000..b68e8e774c --- /dev/null +++ b/features/dd-sdk-android-logs-noop/api/apiSurface @@ -0,0 +1,138 @@ +class com.datadog.android.log.Logger + fun v(String, Throwable? = null, Map = emptyMap()) + fun d(String, Throwable? = null, Map = emptyMap()) + fun i(String, Throwable? = null, Map = emptyMap()) + fun w(String, Throwable? = null, Map = emptyMap()) + fun e(String, Throwable? = null, Map = emptyMap()) + fun wtf(String, Throwable? = null, Map = emptyMap()) + fun log(Int, String, Throwable? = null, Map = emptyMap()) + fun log(Int, String, String?, String?, String?, Map = emptyMap()) + class Builder + constructor(com.datadog.android.api.SdkCore = Datadog.getInstance()) + fun build(): Logger + fun setService(String): Builder + fun setRemoteLogThreshold(Int): Builder + fun setLogcatLogsEnabled(Boolean): Builder + fun setNetworkInfoEnabled(Boolean): Builder + fun setName(String): Builder + fun setBundleWithTraceEnabled(Boolean): Builder + fun setBundleWithRumEnabled(Boolean): Builder + fun setRemoteSampleRate(Float): Builder + fun addAttribute(String, Any?) + fun removeAttribute(String) + fun addTag(String, String) + fun addTag(String) + fun removeTag(String) + fun removeTagsWithKey(String) +object com.datadog.android.log.Logs + fun enable(LogsConfiguration, com.datadog.android.api.SdkCore = Datadog.getInstance()) + fun isEnabled(com.datadog.android.api.SdkCore = Datadog.getInstance()): Boolean + fun addAttribute(String, Any?, com.datadog.android.api.SdkCore = Datadog.getInstance()) + fun removeAttribute(String, com.datadog.android.api.SdkCore = Datadog.getInstance()) +class com.datadog.android.log.LogsConfiguration + class Builder + fun useCustomEndpoint(String): Builder + fun setEventMapper(com.datadog.android.event.EventMapper): Builder + fun build(): LogsConfiguration +data class com.datadog.android.log.model.LogEvent + constructor(LogEventDevice, Os, Status, kotlin.String, kotlin.String, kotlin.String, Logger, Dd, Usr? = null, Account? = null, Network? = null, Error? = null, kotlin.String? = null, kotlin.String? = null, kotlin.String, kotlin.collections.MutableMap = mutableMapOf()) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): LogEvent + fun fromJsonObject(com.google.gson.JsonObject): LogEvent + data class LogEventDevice + constructor(Type? = null, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, kotlin.collections.List? = null, kotlin.String? = null, kotlin.Number? = null, kotlin.Boolean? = null, kotlin.Number? = null) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): LogEventDevice + fun fromJsonObject(com.google.gson.JsonObject): LogEventDevice + data class Os + constructor(kotlin.String, kotlin.String, kotlin.String? = null, kotlin.String) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Os + fun fromJsonObject(com.google.gson.JsonObject): Os + data class Logger + constructor(kotlin.String, kotlin.String? = null, kotlin.String) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Logger + fun fromJsonObject(com.google.gson.JsonObject): Logger + data class Dd + constructor(DdDevice) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Dd + fun fromJsonObject(com.google.gson.JsonObject): Dd + data class Usr + constructor(kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, kotlin.collections.MutableMap = mutableMapOf()) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Usr + fun fromJsonObject(com.google.gson.JsonObject): Usr + data class Account + constructor(kotlin.String? = null, kotlin.String? = null, kotlin.collections.MutableMap = mutableMapOf()) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Account + fun fromJsonObject(com.google.gson.JsonObject): Account + data class Network + constructor(Client) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Network + fun fromJsonObject(com.google.gson.JsonObject): Network + data class Error + constructor(kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, kotlin.collections.List? = null) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Error + fun fromJsonObject(com.google.gson.JsonObject): Error + data class DdDevice + constructor(kotlin.String) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): DdDevice + fun fromJsonObject(com.google.gson.JsonObject): DdDevice + data class Client + constructor(SimCarrier? = null, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, kotlin.String) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Client + fun fromJsonObject(com.google.gson.JsonObject): Client + data class Thread + constructor(kotlin.String, kotlin.Boolean, kotlin.String, kotlin.String? = null) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Thread + fun fromJsonObject(com.google.gson.JsonObject): Thread + data class SimCarrier + constructor(kotlin.String? = null, kotlin.String? = null) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): SimCarrier + fun fromJsonObject(com.google.gson.JsonObject): SimCarrier + enum Status + constructor(kotlin.String) + - CRITICAL + - ERROR + - WARN + - INFO + - DEBUG + - TRACE + - EMERGENCY + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Status + enum Type + constructor(kotlin.String) + - MOBILE + - DESKTOP + - TABLET + - TV + - GAMING_CONSOLE + - BOT + - OTHER + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Type diff --git a/features/dd-sdk-android-logs-noop/api/compiler-meta.txt b/features/dd-sdk-android-logs-noop/api/compiler-meta.txt new file mode 100644 index 0000000000..80973b105c --- /dev/null +++ b/features/dd-sdk-android-logs-noop/api/compiler-meta.txt @@ -0,0 +1,2 @@ +kotlin_abi_version=1.8.0 +jvm_bytecode_version=11 diff --git a/features/dd-sdk-android-logs-noop/api/dd-sdk-android-logs-noop.api b/features/dd-sdk-android-logs-noop/api/dd-sdk-android-logs-noop.api new file mode 100644 index 0000000000..95e7e8702c --- /dev/null +++ b/features/dd-sdk-android-logs-noop/api/dd-sdk-android-logs-noop.api @@ -0,0 +1,501 @@ +public final class com/datadog/android/log/Logger { + public final fun addAttribute (Ljava/lang/String;Ljava/lang/Object;)V + public final fun addTag (Ljava/lang/String;)V + public final fun addTag (Ljava/lang/String;Ljava/lang/String;)V + public final fun d (Ljava/lang/String;)V + public final fun d (Ljava/lang/String;Ljava/lang/Throwable;)V + public final fun d (Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;)V + public static synthetic fun d$default (Lcom/datadog/android/log/Logger;Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;ILjava/lang/Object;)V + public final fun e (Ljava/lang/String;)V + public final fun e (Ljava/lang/String;Ljava/lang/Throwable;)V + public final fun e (Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;)V + public static synthetic fun e$default (Lcom/datadog/android/log/Logger;Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;ILjava/lang/Object;)V + public final fun i (Ljava/lang/String;)V + public final fun i (Ljava/lang/String;Ljava/lang/Throwable;)V + public final fun i (Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;)V + public static synthetic fun i$default (Lcom/datadog/android/log/Logger;Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;ILjava/lang/Object;)V + public final fun log (ILjava/lang/String;)V + public final fun log (ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + public final fun log (ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V + public final fun log (ILjava/lang/String;Ljava/lang/Throwable;)V + public final fun log (ILjava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;)V + public static synthetic fun log$default (Lcom/datadog/android/log/Logger;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)V + public static synthetic fun log$default (Lcom/datadog/android/log/Logger;ILjava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;ILjava/lang/Object;)V + public final fun removeAttribute (Ljava/lang/String;)V + public final fun removeTag (Ljava/lang/String;)V + public final fun removeTagsWithKey (Ljava/lang/String;)V + public final fun v (Ljava/lang/String;)V + public final fun v (Ljava/lang/String;Ljava/lang/Throwable;)V + public final fun v (Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;)V + public static synthetic fun v$default (Lcom/datadog/android/log/Logger;Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;ILjava/lang/Object;)V + public final fun w (Ljava/lang/String;)V + public final fun w (Ljava/lang/String;Ljava/lang/Throwable;)V + public final fun w (Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;)V + public static synthetic fun w$default (Lcom/datadog/android/log/Logger;Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;ILjava/lang/Object;)V + public final fun wtf (Ljava/lang/String;)V + public final fun wtf (Ljava/lang/String;Ljava/lang/Throwable;)V + public final fun wtf (Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;)V + public static synthetic fun wtf$default (Lcom/datadog/android/log/Logger;Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;ILjava/lang/Object;)V +} + +public final class com/datadog/android/log/Logger$Builder { + public fun ()V + public fun (Lcom/datadog/android/api/SdkCore;)V + public synthetic fun (Lcom/datadog/android/api/SdkCore;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun build ()Lcom/datadog/android/log/Logger; + public final fun setBundleWithRumEnabled (Z)Lcom/datadog/android/log/Logger$Builder; + public final fun setBundleWithTraceEnabled (Z)Lcom/datadog/android/log/Logger$Builder; + public final fun setLogcatLogsEnabled (Z)Lcom/datadog/android/log/Logger$Builder; + public final fun setName (Ljava/lang/String;)Lcom/datadog/android/log/Logger$Builder; + public final fun setNetworkInfoEnabled (Z)Lcom/datadog/android/log/Logger$Builder; + public final fun setRemoteLogThreshold (I)Lcom/datadog/android/log/Logger$Builder; + public final fun setRemoteSampleRate (F)Lcom/datadog/android/log/Logger$Builder; + public final fun setService (Ljava/lang/String;)Lcom/datadog/android/log/Logger$Builder; +} + +public final class com/datadog/android/log/Logs { + public static final field INSTANCE Lcom/datadog/android/log/Logs; + public static final fun addAttribute (Ljava/lang/String;Ljava/lang/Object;)V + public static final fun addAttribute (Ljava/lang/String;Ljava/lang/Object;Lcom/datadog/android/api/SdkCore;)V + public static synthetic fun addAttribute$default (Ljava/lang/String;Ljava/lang/Object;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V + public static final fun enable (Lcom/datadog/android/log/LogsConfiguration;)V + public static final fun enable (Lcom/datadog/android/log/LogsConfiguration;Lcom/datadog/android/api/SdkCore;)V + public static synthetic fun enable$default (Lcom/datadog/android/log/LogsConfiguration;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V + public static final fun isEnabled ()Z + public static final fun isEnabled (Lcom/datadog/android/api/SdkCore;)Z + public static synthetic fun isEnabled$default (Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)Z + public static final fun removeAttribute (Ljava/lang/String;)V + public static final fun removeAttribute (Ljava/lang/String;Lcom/datadog/android/api/SdkCore;)V + public static synthetic fun removeAttribute$default (Ljava/lang/String;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V +} + +public final class com/datadog/android/log/LogsConfiguration { +} + +public final class com/datadog/android/log/LogsConfiguration$Builder { + public fun ()V + public final fun build ()Lcom/datadog/android/log/LogsConfiguration; + public final fun setEventMapper (Lcom/datadog/android/event/EventMapper;)Lcom/datadog/android/log/LogsConfiguration$Builder; + public final fun useCustomEndpoint (Ljava/lang/String;)Lcom/datadog/android/log/LogsConfiguration$Builder; +} + +public final class com/datadog/android/log/model/LogEvent { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Companion; + public fun (Lcom/datadog/android/log/model/LogEvent$LogEventDevice;Lcom/datadog/android/log/model/LogEvent$Os;Lcom/datadog/android/log/model/LogEvent$Status;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/log/model/LogEvent$Logger;Lcom/datadog/android/log/model/LogEvent$Dd;Lcom/datadog/android/log/model/LogEvent$Usr;Lcom/datadog/android/log/model/LogEvent$Account;Lcom/datadog/android/log/model/LogEvent$Network;Lcom/datadog/android/log/model/LogEvent$Error;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V + public synthetic fun (Lcom/datadog/android/log/model/LogEvent$LogEventDevice;Lcom/datadog/android/log/model/LogEvent$Os;Lcom/datadog/android/log/model/LogEvent$Status;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/log/model/LogEvent$Logger;Lcom/datadog/android/log/model/LogEvent$Dd;Lcom/datadog/android/log/model/LogEvent$Usr;Lcom/datadog/android/log/model/LogEvent$Account;Lcom/datadog/android/log/model/LogEvent$Network;Lcom/datadog/android/log/model/LogEvent$Error;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/datadog/android/log/model/LogEvent$LogEventDevice; + public final fun component10 ()Lcom/datadog/android/log/model/LogEvent$Account; + public final fun component11 ()Lcom/datadog/android/log/model/LogEvent$Network; + public final fun component12 ()Lcom/datadog/android/log/model/LogEvent$Error; + public final fun component13 ()Ljava/lang/String; + public final fun component14 ()Ljava/lang/String; + public final fun component15 ()Ljava/lang/String; + public final fun component16 ()Ljava/util/Map; + public final fun component2 ()Lcom/datadog/android/log/model/LogEvent$Os; + public final fun component3 ()Lcom/datadog/android/log/model/LogEvent$Status; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/lang/String; + public final fun component6 ()Ljava/lang/String; + public final fun component7 ()Lcom/datadog/android/log/model/LogEvent$Logger; + public final fun component8 ()Lcom/datadog/android/log/model/LogEvent$Dd; + public final fun component9 ()Lcom/datadog/android/log/model/LogEvent$Usr; + public final fun copy (Lcom/datadog/android/log/model/LogEvent$LogEventDevice;Lcom/datadog/android/log/model/LogEvent$Os;Lcom/datadog/android/log/model/LogEvent$Status;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/log/model/LogEvent$Logger;Lcom/datadog/android/log/model/LogEvent$Dd;Lcom/datadog/android/log/model/LogEvent$Usr;Lcom/datadog/android/log/model/LogEvent$Account;Lcom/datadog/android/log/model/LogEvent$Network;Lcom/datadog/android/log/model/LogEvent$Error;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/log/model/LogEvent; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent;Lcom/datadog/android/log/model/LogEvent$LogEventDevice;Lcom/datadog/android/log/model/LogEvent$Os;Lcom/datadog/android/log/model/LogEvent$Status;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/log/model/LogEvent$Logger;Lcom/datadog/android/log/model/LogEvent$Dd;Lcom/datadog/android/log/model/LogEvent$Usr;Lcom/datadog/android/log/model/LogEvent$Account;Lcom/datadog/android/log/model/LogEvent$Network;Lcom/datadog/android/log/model/LogEvent$Error;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent; + public final fun getAccount ()Lcom/datadog/android/log/model/LogEvent$Account; + public final fun getAdditionalProperties ()Ljava/util/Map; + public final fun getBuildId ()Ljava/lang/String; + public final fun getBuildVersion ()Ljava/lang/String; + public final fun getDate ()Ljava/lang/String; + public final fun getDd ()Lcom/datadog/android/log/model/LogEvent$Dd; + public final fun getDdtags ()Ljava/lang/String; + public final fun getDevice ()Lcom/datadog/android/log/model/LogEvent$LogEventDevice; + public final fun getError ()Lcom/datadog/android/log/model/LogEvent$Error; + public final fun getLogger ()Lcom/datadog/android/log/model/LogEvent$Logger; + public final fun getMessage ()Ljava/lang/String; + public final fun getNetwork ()Lcom/datadog/android/log/model/LogEvent$Network; + public final fun getOs ()Lcom/datadog/android/log/model/LogEvent$Os; + public final fun getService ()Ljava/lang/String; + public final fun getStatus ()Lcom/datadog/android/log/model/LogEvent$Status; + public final fun getUsr ()Lcom/datadog/android/log/model/LogEvent$Usr; + public fun hashCode ()I + public final fun setDdtags (Ljava/lang/String;)V + public final fun setMessage (Ljava/lang/String;)V + public final fun setStatus (Lcom/datadog/android/log/model/LogEvent$Status;)V + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$Account { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Account$Companion; + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/util/Map; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/log/model/LogEvent$Account; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$Account;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$Account; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Account; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Account; + public final fun getAdditionalProperties ()Ljava/util/Map; + public final fun getId ()Ljava/lang/String; + public final fun getName ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$Account$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Account; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Account; +} + +public final class com/datadog/android/log/model/LogEvent$Client { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Client$Companion; + public fun (Lcom/datadog/android/log/model/LogEvent$SimCarrier;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + public synthetic fun (Lcom/datadog/android/log/model/LogEvent$SimCarrier;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/datadog/android/log/model/LogEvent$SimCarrier; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/lang/String; + public final fun copy (Lcom/datadog/android/log/model/LogEvent$SimCarrier;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Client; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$Client;Lcom/datadog/android/log/model/LogEvent$SimCarrier;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$Client; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Client; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Client; + public final fun getConnectivity ()Ljava/lang/String; + public final fun getDownlinkKbps ()Ljava/lang/String; + public final fun getSignalStrength ()Ljava/lang/String; + public final fun getSimCarrier ()Lcom/datadog/android/log/model/LogEvent$SimCarrier; + public final fun getUplinkKbps ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$Client$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Client; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Client; +} + +public final class com/datadog/android/log/model/LogEvent$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent; +} + +public final class com/datadog/android/log/model/LogEvent$Dd { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Dd$Companion; + public fun (Lcom/datadog/android/log/model/LogEvent$DdDevice;)V + public final fun component1 ()Lcom/datadog/android/log/model/LogEvent$DdDevice; + public final fun copy (Lcom/datadog/android/log/model/LogEvent$DdDevice;)Lcom/datadog/android/log/model/LogEvent$Dd; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$Dd;Lcom/datadog/android/log/model/LogEvent$DdDevice;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$Dd; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Dd; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Dd; + public final fun getDevice ()Lcom/datadog/android/log/model/LogEvent$DdDevice; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$Dd$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Dd; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Dd; +} + +public final class com/datadog/android/log/model/LogEvent$DdDevice { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$DdDevice$Companion; + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$DdDevice; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$DdDevice;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$DdDevice; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$DdDevice; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$DdDevice; + public final fun getArchitecture ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$DdDevice$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$DdDevice; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$DdDevice; +} + +public final class com/datadog/android/log/model/LogEvent$Error { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Error$Companion; + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/lang/String; + public final fun component6 ()Ljava/util/List; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)Lcom/datadog/android/log/model/LogEvent$Error; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$Error;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$Error; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Error; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Error; + public final fun getFingerprint ()Ljava/lang/String; + public final fun getKind ()Ljava/lang/String; + public final fun getMessage ()Ljava/lang/String; + public final fun getSourceType ()Ljava/lang/String; + public final fun getStack ()Ljava/lang/String; + public final fun getThreads ()Ljava/util/List; + public fun hashCode ()I + public final fun setFingerprint (Ljava/lang/String;)V + public final fun setKind (Ljava/lang/String;)V + public final fun setMessage (Ljava/lang/String;)V + public final fun setSourceType (Ljava/lang/String;)V + public final fun setStack (Ljava/lang/String;)V + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$Error$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Error; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Error; +} + +public final class com/datadog/android/log/model/LogEvent$LogEventDevice { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$LogEventDevice$Companion; + public fun ()V + public fun (Lcom/datadog/android/log/model/LogEvent$Type;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/lang/Number;Ljava/lang/Boolean;Ljava/lang/Number;)V + public synthetic fun (Lcom/datadog/android/log/model/LogEvent$Type;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/lang/Number;Ljava/lang/Boolean;Ljava/lang/Number;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/datadog/android/log/model/LogEvent$Type; + public final fun component10 ()Ljava/lang/Boolean; + public final fun component11 ()Ljava/lang/Number; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/lang/String; + public final fun component6 ()Ljava/lang/String; + public final fun component7 ()Ljava/util/List; + public final fun component8 ()Ljava/lang/String; + public final fun component9 ()Ljava/lang/Number; + public final fun copy (Lcom/datadog/android/log/model/LogEvent$Type;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/lang/Number;Ljava/lang/Boolean;Ljava/lang/Number;)Lcom/datadog/android/log/model/LogEvent$LogEventDevice; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$LogEventDevice;Lcom/datadog/android/log/model/LogEvent$Type;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/lang/Number;Ljava/lang/Boolean;Ljava/lang/Number;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$LogEventDevice; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$LogEventDevice; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$LogEventDevice; + public final fun getArchitecture ()Ljava/lang/String; + public final fun getBatteryLevel ()Ljava/lang/Number; + public final fun getBrand ()Ljava/lang/String; + public final fun getBrightnessLevel ()Ljava/lang/Number; + public final fun getLocale ()Ljava/lang/String; + public final fun getLocales ()Ljava/util/List; + public final fun getModel ()Ljava/lang/String; + public final fun getName ()Ljava/lang/String; + public final fun getPowerSavingMode ()Ljava/lang/Boolean; + public final fun getTimeZone ()Ljava/lang/String; + public final fun getType ()Lcom/datadog/android/log/model/LogEvent$Type; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$LogEventDevice$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$LogEventDevice; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$LogEventDevice; +} + +public final class com/datadog/android/log/model/LogEvent$Logger { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Logger$Companion; + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Logger; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$Logger;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$Logger; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Logger; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Logger; + public final fun getName ()Ljava/lang/String; + public final fun getThreadName ()Ljava/lang/String; + public final fun getVersion ()Ljava/lang/String; + public fun hashCode ()I + public final fun setName (Ljava/lang/String;)V + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$Logger$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Logger; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Logger; +} + +public final class com/datadog/android/log/model/LogEvent$Network { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Network$Companion; + public fun (Lcom/datadog/android/log/model/LogEvent$Client;)V + public final fun component1 ()Lcom/datadog/android/log/model/LogEvent$Client; + public final fun copy (Lcom/datadog/android/log/model/LogEvent$Client;)Lcom/datadog/android/log/model/LogEvent$Network; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$Network;Lcom/datadog/android/log/model/LogEvent$Client;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$Network; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Network; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Network; + public final fun getClient ()Lcom/datadog/android/log/model/LogEvent$Client; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$Network$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Network; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Network; +} + +public final class com/datadog/android/log/model/LogEvent$Os { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Os$Companion; + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Os; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$Os;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$Os; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Os; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Os; + public final fun getBuild ()Ljava/lang/String; + public final fun getName ()Ljava/lang/String; + public final fun getVersion ()Ljava/lang/String; + public final fun getVersionMajor ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$Os$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Os; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Os; +} + +public final class com/datadog/android/log/model/LogEvent$SimCarrier { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$SimCarrier$Companion; + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$SimCarrier; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$SimCarrier;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$SimCarrier; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$SimCarrier; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$SimCarrier; + public final fun getId ()Ljava/lang/String; + public final fun getName ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$SimCarrier$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$SimCarrier; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$SimCarrier; +} + +public final class com/datadog/android/log/model/LogEvent$Status : java/lang/Enum { + public static final field CRITICAL Lcom/datadog/android/log/model/LogEvent$Status; + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Status$Companion; + public static final field DEBUG Lcom/datadog/android/log/model/LogEvent$Status; + public static final field EMERGENCY Lcom/datadog/android/log/model/LogEvent$Status; + public static final field ERROR Lcom/datadog/android/log/model/LogEvent$Status; + public static final field INFO Lcom/datadog/android/log/model/LogEvent$Status; + public static final field TRACE Lcom/datadog/android/log/model/LogEvent$Status; + public static final field WARN Lcom/datadog/android/log/model/LogEvent$Status; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Status; + public final fun toJson ()Lcom/google/gson/JsonElement; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Status; + public static fun values ()[Lcom/datadog/android/log/model/LogEvent$Status; +} + +public final class com/datadog/android/log/model/LogEvent$Status$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Status; +} + +public final class com/datadog/android/log/model/LogEvent$Thread { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Thread$Companion; + public fun (Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Z + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Thread; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$Thread;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$Thread; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Thread; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Thread; + public final fun getCrashed ()Z + public final fun getName ()Ljava/lang/String; + public final fun getStack ()Ljava/lang/String; + public final fun getState ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$Thread$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Thread; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Thread; +} + +public final class com/datadog/android/log/model/LogEvent$Type : java/lang/Enum { + public static final field BOT Lcom/datadog/android/log/model/LogEvent$Type; + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Type$Companion; + public static final field DESKTOP Lcom/datadog/android/log/model/LogEvent$Type; + public static final field GAMING_CONSOLE Lcom/datadog/android/log/model/LogEvent$Type; + public static final field MOBILE Lcom/datadog/android/log/model/LogEvent$Type; + public static final field OTHER Lcom/datadog/android/log/model/LogEvent$Type; + public static final field TABLET Lcom/datadog/android/log/model/LogEvent$Type; + public static final field TV Lcom/datadog/android/log/model/LogEvent$Type; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Type; + public final fun toJson ()Lcom/google/gson/JsonElement; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Type; + public static fun values ()[Lcom/datadog/android/log/model/LogEvent$Type; +} + +public final class com/datadog/android/log/model/LogEvent$Type$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Type; +} + +public final class com/datadog/android/log/model/LogEvent$Usr { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Usr$Companion; + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/util/Map; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/log/model/LogEvent$Usr; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$Usr;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$Usr; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Usr; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Usr; + public final fun getAdditionalProperties ()Ljava/util/Map; + public final fun getAnonymousId ()Ljava/lang/String; + public final fun getEmail ()Ljava/lang/String; + public final fun getId ()Ljava/lang/String; + public final fun getName ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$Usr$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Usr; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Usr; +} + diff --git a/features/dd-sdk-android-logs-noop/api/dd-sdk-android-logs.api b/features/dd-sdk-android-logs-noop/api/dd-sdk-android-logs.api new file mode 100644 index 0000000000..648bd18f40 --- /dev/null +++ b/features/dd-sdk-android-logs-noop/api/dd-sdk-android-logs.api @@ -0,0 +1,506 @@ +public final class com/datadog/android/log/Logger { + public final fun addAttribute (Ljava/lang/String;Ljava/lang/Object;)V + public final fun addTag (Ljava/lang/String;)V + public final fun addTag (Ljava/lang/String;Ljava/lang/String;)V + public final fun d (Ljava/lang/String;)V + public final fun d (Ljava/lang/String;Ljava/lang/Throwable;)V + public final fun d (Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;)V + public static synthetic fun d$default (Lcom/datadog/android/log/Logger;Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;ILjava/lang/Object;)V + public final fun e (Ljava/lang/String;)V + public final fun e (Ljava/lang/String;Ljava/lang/Throwable;)V + public final fun e (Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;)V + public static synthetic fun e$default (Lcom/datadog/android/log/Logger;Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;ILjava/lang/Object;)V + public final fun i (Ljava/lang/String;)V + public final fun i (Ljava/lang/String;Ljava/lang/Throwable;)V + public final fun i (Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;)V + public static synthetic fun i$default (Lcom/datadog/android/log/Logger;Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;ILjava/lang/Object;)V + public final fun log (ILjava/lang/String;)V + public final fun log (ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + public final fun log (ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V + public final fun log (ILjava/lang/String;Ljava/lang/Throwable;)V + public final fun log (ILjava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;)V + public static synthetic fun log$default (Lcom/datadog/android/log/Logger;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)V + public static synthetic fun log$default (Lcom/datadog/android/log/Logger;ILjava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;ILjava/lang/Object;)V + public final fun removeAttribute (Ljava/lang/String;)V + public final fun removeTag (Ljava/lang/String;)V + public final fun removeTagsWithKey (Ljava/lang/String;)V + public final fun v (Ljava/lang/String;)V + public final fun v (Ljava/lang/String;Ljava/lang/Throwable;)V + public final fun v (Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;)V + public static synthetic fun v$default (Lcom/datadog/android/log/Logger;Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;ILjava/lang/Object;)V + public final fun w (Ljava/lang/String;)V + public final fun w (Ljava/lang/String;Ljava/lang/Throwable;)V + public final fun w (Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;)V + public static synthetic fun w$default (Lcom/datadog/android/log/Logger;Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;ILjava/lang/Object;)V + public final fun wtf (Ljava/lang/String;)V + public final fun wtf (Ljava/lang/String;Ljava/lang/Throwable;)V + public final fun wtf (Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;)V + public static synthetic fun wtf$default (Lcom/datadog/android/log/Logger;Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/Map;ILjava/lang/Object;)V +} + +public final class com/datadog/android/log/Logger$Builder { + public fun ()V + public fun (Lcom/datadog/android/api/SdkCore;)V + public synthetic fun (Lcom/datadog/android/api/SdkCore;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun build ()Lcom/datadog/android/log/Logger; + public final fun setBundleWithRumEnabled (Z)Lcom/datadog/android/log/Logger$Builder; + public final fun setBundleWithTraceEnabled (Z)Lcom/datadog/android/log/Logger$Builder; + public final fun setLogcatLogsEnabled (Z)Lcom/datadog/android/log/Logger$Builder; + public final fun setName (Ljava/lang/String;)Lcom/datadog/android/log/Logger$Builder; + public final fun setNetworkInfoEnabled (Z)Lcom/datadog/android/log/Logger$Builder; + public final fun setRemoteLogThreshold (I)Lcom/datadog/android/log/Logger$Builder; + public final fun setRemoteSampleRate (F)Lcom/datadog/android/log/Logger$Builder; + public final fun setService (Ljava/lang/String;)Lcom/datadog/android/log/Logger$Builder; +} + +public final class com/datadog/android/log/Logs { + public static final field INSTANCE Lcom/datadog/android/log/Logs; + public static final fun addAttribute (Ljava/lang/String;Ljava/lang/Object;)V + public static final fun addAttribute (Ljava/lang/String;Ljava/lang/Object;Lcom/datadog/android/api/SdkCore;)V + public static synthetic fun addAttribute$default (Ljava/lang/String;Ljava/lang/Object;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V + public static final fun enable (Lcom/datadog/android/log/LogsConfiguration;)V + public static final fun enable (Lcom/datadog/android/log/LogsConfiguration;Lcom/datadog/android/api/SdkCore;)V + public static synthetic fun enable$default (Lcom/datadog/android/log/LogsConfiguration;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V + public static final fun isEnabled ()Z + public static final fun isEnabled (Lcom/datadog/android/api/SdkCore;)Z + public static synthetic fun isEnabled$default (Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)Z + public static final fun removeAttribute (Ljava/lang/String;)V + public static final fun removeAttribute (Ljava/lang/String;Lcom/datadog/android/api/SdkCore;)V + public static synthetic fun removeAttribute$default (Ljava/lang/String;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V +} + +public final class com/datadog/android/log/LogsConfiguration { + public final fun copy (Ljava/lang/String;Lcom/datadog/android/event/EventMapper;)Lcom/datadog/android/log/LogsConfiguration; + public static synthetic fun copy$default (Lcom/datadog/android/log/LogsConfiguration;Ljava/lang/String;Lcom/datadog/android/event/EventMapper;ILjava/lang/Object;)Lcom/datadog/android/log/LogsConfiguration; + public fun equals (Ljava/lang/Object;)Z + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/LogsConfiguration$Builder { + public fun ()V + public final fun build ()Lcom/datadog/android/log/LogsConfiguration; + public final fun setEventMapper (Lcom/datadog/android/event/EventMapper;)Lcom/datadog/android/log/LogsConfiguration$Builder; + public final fun useCustomEndpoint (Ljava/lang/String;)Lcom/datadog/android/log/LogsConfiguration$Builder; +} + +public final class com/datadog/android/log/model/LogEvent { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Companion; + public fun (Lcom/datadog/android/log/model/LogEvent$LogEventDevice;Lcom/datadog/android/log/model/LogEvent$Os;Lcom/datadog/android/log/model/LogEvent$Status;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/log/model/LogEvent$Logger;Lcom/datadog/android/log/model/LogEvent$Dd;Lcom/datadog/android/log/model/LogEvent$Usr;Lcom/datadog/android/log/model/LogEvent$Account;Lcom/datadog/android/log/model/LogEvent$Network;Lcom/datadog/android/log/model/LogEvent$Error;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V + public synthetic fun (Lcom/datadog/android/log/model/LogEvent$LogEventDevice;Lcom/datadog/android/log/model/LogEvent$Os;Lcom/datadog/android/log/model/LogEvent$Status;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/log/model/LogEvent$Logger;Lcom/datadog/android/log/model/LogEvent$Dd;Lcom/datadog/android/log/model/LogEvent$Usr;Lcom/datadog/android/log/model/LogEvent$Account;Lcom/datadog/android/log/model/LogEvent$Network;Lcom/datadog/android/log/model/LogEvent$Error;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/datadog/android/log/model/LogEvent$LogEventDevice; + public final fun component10 ()Lcom/datadog/android/log/model/LogEvent$Account; + public final fun component11 ()Lcom/datadog/android/log/model/LogEvent$Network; + public final fun component12 ()Lcom/datadog/android/log/model/LogEvent$Error; + public final fun component13 ()Ljava/lang/String; + public final fun component14 ()Ljava/lang/String; + public final fun component15 ()Ljava/lang/String; + public final fun component16 ()Ljava/util/Map; + public final fun component2 ()Lcom/datadog/android/log/model/LogEvent$Os; + public final fun component3 ()Lcom/datadog/android/log/model/LogEvent$Status; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/lang/String; + public final fun component6 ()Ljava/lang/String; + public final fun component7 ()Lcom/datadog/android/log/model/LogEvent$Logger; + public final fun component8 ()Lcom/datadog/android/log/model/LogEvent$Dd; + public final fun component9 ()Lcom/datadog/android/log/model/LogEvent$Usr; + public final fun copy (Lcom/datadog/android/log/model/LogEvent$LogEventDevice;Lcom/datadog/android/log/model/LogEvent$Os;Lcom/datadog/android/log/model/LogEvent$Status;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/log/model/LogEvent$Logger;Lcom/datadog/android/log/model/LogEvent$Dd;Lcom/datadog/android/log/model/LogEvent$Usr;Lcom/datadog/android/log/model/LogEvent$Account;Lcom/datadog/android/log/model/LogEvent$Network;Lcom/datadog/android/log/model/LogEvent$Error;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/log/model/LogEvent; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent;Lcom/datadog/android/log/model/LogEvent$LogEventDevice;Lcom/datadog/android/log/model/LogEvent$Os;Lcom/datadog/android/log/model/LogEvent$Status;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/log/model/LogEvent$Logger;Lcom/datadog/android/log/model/LogEvent$Dd;Lcom/datadog/android/log/model/LogEvent$Usr;Lcom/datadog/android/log/model/LogEvent$Account;Lcom/datadog/android/log/model/LogEvent$Network;Lcom/datadog/android/log/model/LogEvent$Error;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent; + public final fun getAccount ()Lcom/datadog/android/log/model/LogEvent$Account; + public final fun getAdditionalProperties ()Ljava/util/Map; + public final fun getBuildId ()Ljava/lang/String; + public final fun getBuildVersion ()Ljava/lang/String; + public final fun getDate ()Ljava/lang/String; + public final fun getDd ()Lcom/datadog/android/log/model/LogEvent$Dd; + public final fun getDdtags ()Ljava/lang/String; + public final fun getDevice ()Lcom/datadog/android/log/model/LogEvent$LogEventDevice; + public final fun getError ()Lcom/datadog/android/log/model/LogEvent$Error; + public final fun getLogger ()Lcom/datadog/android/log/model/LogEvent$Logger; + public final fun getMessage ()Ljava/lang/String; + public final fun getNetwork ()Lcom/datadog/android/log/model/LogEvent$Network; + public final fun getOs ()Lcom/datadog/android/log/model/LogEvent$Os; + public final fun getService ()Ljava/lang/String; + public final fun getStatus ()Lcom/datadog/android/log/model/LogEvent$Status; + public final fun getUsr ()Lcom/datadog/android/log/model/LogEvent$Usr; + public fun hashCode ()I + public final fun setDdtags (Ljava/lang/String;)V + public final fun setMessage (Ljava/lang/String;)V + public final fun setStatus (Lcom/datadog/android/log/model/LogEvent$Status;)V + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$Account { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Account$Companion; + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/util/Map; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/log/model/LogEvent$Account; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$Account;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$Account; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Account; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Account; + public final fun getAdditionalProperties ()Ljava/util/Map; + public final fun getId ()Ljava/lang/String; + public final fun getName ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$Account$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Account; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Account; +} + +public final class com/datadog/android/log/model/LogEvent$Client { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Client$Companion; + public fun (Lcom/datadog/android/log/model/LogEvent$SimCarrier;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + public synthetic fun (Lcom/datadog/android/log/model/LogEvent$SimCarrier;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/datadog/android/log/model/LogEvent$SimCarrier; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/lang/String; + public final fun copy (Lcom/datadog/android/log/model/LogEvent$SimCarrier;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Client; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$Client;Lcom/datadog/android/log/model/LogEvent$SimCarrier;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$Client; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Client; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Client; + public final fun getConnectivity ()Ljava/lang/String; + public final fun getDownlinkKbps ()Ljava/lang/String; + public final fun getSignalStrength ()Ljava/lang/String; + public final fun getSimCarrier ()Lcom/datadog/android/log/model/LogEvent$SimCarrier; + public final fun getUplinkKbps ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$Client$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Client; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Client; +} + +public final class com/datadog/android/log/model/LogEvent$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent; +} + +public final class com/datadog/android/log/model/LogEvent$Dd { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Dd$Companion; + public fun (Lcom/datadog/android/log/model/LogEvent$DdDevice;)V + public final fun component1 ()Lcom/datadog/android/log/model/LogEvent$DdDevice; + public final fun copy (Lcom/datadog/android/log/model/LogEvent$DdDevice;)Lcom/datadog/android/log/model/LogEvent$Dd; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$Dd;Lcom/datadog/android/log/model/LogEvent$DdDevice;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$Dd; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Dd; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Dd; + public final fun getDevice ()Lcom/datadog/android/log/model/LogEvent$DdDevice; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$Dd$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Dd; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Dd; +} + +public final class com/datadog/android/log/model/LogEvent$DdDevice { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$DdDevice$Companion; + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$DdDevice; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$DdDevice;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$DdDevice; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$DdDevice; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$DdDevice; + public final fun getArchitecture ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$DdDevice$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$DdDevice; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$DdDevice; +} + +public final class com/datadog/android/log/model/LogEvent$Error { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Error$Companion; + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/lang/String; + public final fun component6 ()Ljava/util/List; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)Lcom/datadog/android/log/model/LogEvent$Error; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$Error;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$Error; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Error; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Error; + public final fun getFingerprint ()Ljava/lang/String; + public final fun getKind ()Ljava/lang/String; + public final fun getMessage ()Ljava/lang/String; + public final fun getSourceType ()Ljava/lang/String; + public final fun getStack ()Ljava/lang/String; + public final fun getThreads ()Ljava/util/List; + public fun hashCode ()I + public final fun setFingerprint (Ljava/lang/String;)V + public final fun setKind (Ljava/lang/String;)V + public final fun setMessage (Ljava/lang/String;)V + public final fun setSourceType (Ljava/lang/String;)V + public final fun setStack (Ljava/lang/String;)V + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$Error$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Error; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Error; +} + +public final class com/datadog/android/log/model/LogEvent$LogEventDevice { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$LogEventDevice$Companion; + public fun ()V + public fun (Lcom/datadog/android/log/model/LogEvent$Type;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/lang/Number;Ljava/lang/Boolean;Ljava/lang/Number;)V + public synthetic fun (Lcom/datadog/android/log/model/LogEvent$Type;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/lang/Number;Ljava/lang/Boolean;Ljava/lang/Number;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/datadog/android/log/model/LogEvent$Type; + public final fun component10 ()Ljava/lang/Boolean; + public final fun component11 ()Ljava/lang/Number; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/lang/String; + public final fun component6 ()Ljava/lang/String; + public final fun component7 ()Ljava/util/List; + public final fun component8 ()Ljava/lang/String; + public final fun component9 ()Ljava/lang/Number; + public final fun copy (Lcom/datadog/android/log/model/LogEvent$Type;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/lang/Number;Ljava/lang/Boolean;Ljava/lang/Number;)Lcom/datadog/android/log/model/LogEvent$LogEventDevice; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$LogEventDevice;Lcom/datadog/android/log/model/LogEvent$Type;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/lang/Number;Ljava/lang/Boolean;Ljava/lang/Number;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$LogEventDevice; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$LogEventDevice; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$LogEventDevice; + public final fun getArchitecture ()Ljava/lang/String; + public final fun getBatteryLevel ()Ljava/lang/Number; + public final fun getBrand ()Ljava/lang/String; + public final fun getBrightnessLevel ()Ljava/lang/Number; + public final fun getLocale ()Ljava/lang/String; + public final fun getLocales ()Ljava/util/List; + public final fun getModel ()Ljava/lang/String; + public final fun getName ()Ljava/lang/String; + public final fun getPowerSavingMode ()Ljava/lang/Boolean; + public final fun getTimeZone ()Ljava/lang/String; + public final fun getType ()Lcom/datadog/android/log/model/LogEvent$Type; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$LogEventDevice$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$LogEventDevice; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$LogEventDevice; +} + +public final class com/datadog/android/log/model/LogEvent$Logger { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Logger$Companion; + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Logger; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$Logger;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$Logger; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Logger; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Logger; + public final fun getName ()Ljava/lang/String; + public final fun getThreadName ()Ljava/lang/String; + public final fun getVersion ()Ljava/lang/String; + public fun hashCode ()I + public final fun setName (Ljava/lang/String;)V + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$Logger$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Logger; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Logger; +} + +public final class com/datadog/android/log/model/LogEvent$Network { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Network$Companion; + public fun (Lcom/datadog/android/log/model/LogEvent$Client;)V + public final fun component1 ()Lcom/datadog/android/log/model/LogEvent$Client; + public final fun copy (Lcom/datadog/android/log/model/LogEvent$Client;)Lcom/datadog/android/log/model/LogEvent$Network; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$Network;Lcom/datadog/android/log/model/LogEvent$Client;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$Network; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Network; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Network; + public final fun getClient ()Lcom/datadog/android/log/model/LogEvent$Client; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$Network$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Network; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Network; +} + +public final class com/datadog/android/log/model/LogEvent$Os { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Os$Companion; + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Os; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$Os;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$Os; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Os; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Os; + public final fun getBuild ()Ljava/lang/String; + public final fun getName ()Ljava/lang/String; + public final fun getVersion ()Ljava/lang/String; + public final fun getVersionMajor ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$Os$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Os; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Os; +} + +public final class com/datadog/android/log/model/LogEvent$SimCarrier { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$SimCarrier$Companion; + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$SimCarrier; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$SimCarrier;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$SimCarrier; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$SimCarrier; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$SimCarrier; + public final fun getId ()Ljava/lang/String; + public final fun getName ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$SimCarrier$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$SimCarrier; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$SimCarrier; +} + +public final class com/datadog/android/log/model/LogEvent$Status : java/lang/Enum { + public static final field CRITICAL Lcom/datadog/android/log/model/LogEvent$Status; + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Status$Companion; + public static final field DEBUG Lcom/datadog/android/log/model/LogEvent$Status; + public static final field EMERGENCY Lcom/datadog/android/log/model/LogEvent$Status; + public static final field ERROR Lcom/datadog/android/log/model/LogEvent$Status; + public static final field INFO Lcom/datadog/android/log/model/LogEvent$Status; + public static final field TRACE Lcom/datadog/android/log/model/LogEvent$Status; + public static final field WARN Lcom/datadog/android/log/model/LogEvent$Status; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Status; + public final fun toJson ()Lcom/google/gson/JsonElement; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Status; + public static fun values ()[Lcom/datadog/android/log/model/LogEvent$Status; +} + +public final class com/datadog/android/log/model/LogEvent$Status$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Status; +} + +public final class com/datadog/android/log/model/LogEvent$Thread { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Thread$Companion; + public fun (Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Z + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Thread; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$Thread;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$Thread; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Thread; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Thread; + public final fun getCrashed ()Z + public final fun getName ()Ljava/lang/String; + public final fun getStack ()Ljava/lang/String; + public final fun getState ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$Thread$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Thread; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Thread; +} + +public final class com/datadog/android/log/model/LogEvent$Type : java/lang/Enum { + public static final field BOT Lcom/datadog/android/log/model/LogEvent$Type; + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Type$Companion; + public static final field DESKTOP Lcom/datadog/android/log/model/LogEvent$Type; + public static final field GAMING_CONSOLE Lcom/datadog/android/log/model/LogEvent$Type; + public static final field MOBILE Lcom/datadog/android/log/model/LogEvent$Type; + public static final field OTHER Lcom/datadog/android/log/model/LogEvent$Type; + public static final field TABLET Lcom/datadog/android/log/model/LogEvent$Type; + public static final field TV Lcom/datadog/android/log/model/LogEvent$Type; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Type; + public final fun toJson ()Lcom/google/gson/JsonElement; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Type; + public static fun values ()[Lcom/datadog/android/log/model/LogEvent$Type; +} + +public final class com/datadog/android/log/model/LogEvent$Type$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Type; +} + +public final class com/datadog/android/log/model/LogEvent$Usr { + public static final field Companion Lcom/datadog/android/log/model/LogEvent$Usr$Companion; + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/util/Map; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/log/model/LogEvent$Usr; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent$Usr;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent$Usr; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Usr; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Usr; + public final fun getAdditionalProperties ()Ljava/util/Map; + public final fun getAnonymousId ()Ljava/lang/String; + public final fun getEmail ()Ljava/lang/String; + public final fun getId ()Ljava/lang/String; + public final fun getName ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/log/model/LogEvent$Usr$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent$Usr; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent$Usr; +} + diff --git a/features/dd-sdk-android-logs-noop/build.gradle.kts b/features/dd-sdk-android-logs-noop/build.gradle.kts new file mode 100644 index 0000000000..33e1ab86d6 --- /dev/null +++ b/features/dd-sdk-android-logs-noop/build.gradle.kts @@ -0,0 +1,68 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ +@file:Suppress("StringLiteralDuplication") + +import com.datadog.gradle.config.androidLibraryConfig +import com.datadog.gradle.config.dependencyUpdateConfig +import com.datadog.gradle.config.detektCustomConfig +import com.datadog.gradle.config.javadocConfig +import com.datadog.gradle.config.kotlinConfig +import com.datadog.gradle.config.publishingConfig +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import java.nio.file.Paths + +plugins { + // Build + id("com.android.library") + kotlin("android") + id("com.google.devtools.ksp") + + // Publish + `maven-publish` + signing + id("org.jetbrains.dokka-javadoc") + + // Analysis tools + id("com.github.ben-manes.versions") + + // Internal Generation + id("com.datadoghq.dependency-license") + id("apiSurface") + id("transitiveDependencies") + id("verificationXml") + id("binary-compatibility-validator") +} + +android { + defaultConfig { + consumerProguardFiles(Paths.get(rootDir.path, "consumer-rules.pro").toString()) + } + + namespace = "com.datadog.android.log" +} + +dependencies { + api(project(":dd-sdk-android-core")) + implementation(project(":dd-sdk-android-internal")) + implementation(libs.kotlin) + implementation(libs.gson) + implementation(libs.androidXAnnotation) + + // Generate NoOp implementations + ksp(project(":tools:noopfactory")) +} + +apply(from = "generate_log_models.gradle.kts") +kotlinConfig(jvmBytecodeTarget = JvmTarget.JVM_11) +androidLibraryConfig() +javadocConfig() +dependencyUpdateConfig() +publishingConfig( + "The Logs feature to use with the Datadog monitoring " + + "library for Android applications.", + customArtifactId = "dd-sdk-android-logs-noop" +) +detektCustomConfig() diff --git a/features/dd-sdk-android-logs-noop/generate_log_models.gradle.kts b/features/dd-sdk-android-logs-noop/generate_log_models.gradle.kts new file mode 100644 index 0000000000..06f729ad4c --- /dev/null +++ b/features/dd-sdk-android-logs-noop/generate_log_models.gradle.kts @@ -0,0 +1,15 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +import com.datadog.gradle.utils.createJsonModelsGenerationTask + +createJsonModelsGenerationTask("generateLogModelsFromJson") { + inputDirPath = "src/main/json/log" + ignoredFiles = listOf( + "_common-schema.json" + ) + targetPackageName = "com.datadog.android.log.model" +} diff --git a/features/dd-sdk-android-logs-noop/src/main/json/log/log-schema.json b/features/dd-sdk-android-logs-noop/src/main/json/log/log-schema.json new file mode 100644 index 0000000000..a0615e8aa7 --- /dev/null +++ b/features/dd-sdk-android-logs-noop/src/main/json/log/log-schema.json @@ -0,0 +1,287 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "log-schema.json", + "title": "LogEvent", + "type": "object", + "description": "Structure holding information about a Log", + "properties": { + "device": { + "$ref": "../../../../../dd-sdk-android-rum/src/main/json/rum/_common-schema.json#/properties/device" + }, + "os": { + "$ref": "../../../../../dd-sdk-android-rum/src/main/json/rum/_common-schema.json#/properties/os" + }, + "status": { + "type": "string", + "description": "The severity of this log", + "enum": [ + "critical", + "error", + "warn", + "info", + "debug", + "trace", + "emergency" + ], + "readOnly": false + }, + "service": { + "type": "string", + "description": "The service name", + "readOnly": true + }, + "message": { + "type": "string", + "description": "The log message", + "readOnly": false + }, + "date": { + "type": "string", + "description": "The date when the log is fired as an ISO-8601 String", + "readOnly": true + }, + "logger": { + "type": "object", + "description": "Information about the logger that produced this log.", + "properties": { + "name": { + "type": "string", + "description": "The name of the logger", + "readOnly": false + }, + "thread_name": { + "type": "string", + "description": "The thread name on which the log event was created", + "readOnly": true + }, + "version": { + "type": "string", + "description": "The SDK version name", + "readOnly": true + } + }, + "required": [ + "name", + "version" + ], + "readOnly": true + }, + "_dd": { + "type": "object", + "description": "Datadog internal information", + "properties": { + "device": { + "type": "object", + "description": "Information about the device that produced this log.", + "properties": { + "architecture": { + "type": "string", + "description": "The CPU architecture of the device", + "readOnly": true + } + }, + "required": [ + "architecture" + ], + "readOnly": true + } + }, + "required": [ + "device" + ], + "readOnly": true + }, + "usr": { + "type": "object", + "description": "User properties", + "properties": { + "anonymous_id": { + "type": "string", + "description": "An anonymous identifier of the user across sessions", + "readOnly": true + }, + "id": { + "type": "string", + "description": "Identifier of the user", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Name of the user", + "readOnly": true + }, + "email": { + "type": "string", + "description": "Email of the user", + "readOnly": true + } + }, + "additionalProperties": { + "type": "object" + }, + "readOnly": true + }, + "account": { + "type": "object", + "description": "Account properties", + "properties": { + "id": { + "type": "string", + "description": "Identifier of the account", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Name of the account", + "readOnly": true + } + }, + "additionalProperties": { + "type": "object" + }, + "readOnly": true + }, + "network": { + "type": "object", + "description": "The network information in the moment the log was created", + "properties": { + "client": { + "type": "object", + "properties": { + "sim_carrier": { + "type": "object", + "properties": { + "id": { + "type": "string", + "readOnly": true + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "signal_strength": { + "type": "string" + }, + "downlink_kbps": { + "type": "string", + "readOnly": true + }, + "uplink_kbps": { + "type": "string", + "readOnly": true + }, + "connectivity": { + "type": "string", + "description": "The active network", + "readOnly": true + } + }, + "readOnly": true, + "required": [ + "connectivity" + ] + } + }, + "readOnly": true, + "required": [ + "client" + ] + }, + "error": { + "type": "object", + "description": "The additional error information in case this log is marked as an error", + "properties": { + "kind": { + "type": "string", + "description": "The kind of this error. It is resolved from the throwable class name", + "readOnly": false + }, + "message": { + "type": "string", + "description": "The error message", + "readOnly": false + }, + "stack": { + "type": "string", + "description": "The error stack trace", + "readOnly": false + }, + "source_type": { + "type": "string", + "description": "The source_type of the error (e.g. 'android', 'flutter', 'react-native')", + "readOnly": false + }, + "fingerprint": { + "type": "string", + "description": "A custom fingerprint for this error", + "readOnly": false + }, + "threads": { + "type": "array", + "description": "Description of each thread in the process when error happened.", + "items": { + "type": "object", + "description": "Description of the thread in the process when error happened.", + "required": ["name", "crashed", "stack"], + "properties": { + "name": { + "type": "string", + "description": "Name of the thread (e.g. 'Thread 0').", + "readOnly": true + }, + "crashed": { + "type": "boolean", + "description": "Tells if the thread crashed.", + "readOnly": true + }, + "stack": { + "type": "string", + "description": "Unsymbolicated stack trace of the given thread.", + "readOnly": true + }, + "state": { + "type": "string", + "description": "Platform-specific state of the thread when its state was captured (CPU registers dump for iOS, thread state enum for Android, etc.).", + "readOnly": true + } + } + } + } + }, + "readOnly": true + }, + "build_id": { + "type": "string", + "description": "Generated unique ID of the application build. Unlike version or build_version this field is not meant to be coming from the user, but rather generated by the tooling for each build.", + "readOnly": true + }, + "build_version": { + "type": "string", + "description": "The build version for this application", + "readOnly": true + }, + "ddtags": { + "type": "string", + "description": "The list of tags joined into a String and divided by ',' ", + "readOnly": false + } + }, + "required": [ + "message", + "status", + "date", + "service", + "logger", + "_dd", + "ddtags", + "device", + "os" + ], + "additionalProperties": { + "type": "object", + "description": "additional log attributes" + } +} + diff --git a/features/dd-sdk-android-logs-noop/src/main/kotlin/com/datadog/android/log/Logger.kt b/features/dd-sdk-android-logs-noop/src/main/kotlin/com/datadog/android/log/Logger.kt new file mode 100644 index 0000000000..afd4a84fc4 --- /dev/null +++ b/features/dd-sdk-android-logs-noop/src/main/kotlin/com/datadog/android/log/Logger.kt @@ -0,0 +1,301 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.log + +import androidx.annotation.FloatRange +import com.datadog.android.Datadog +import com.datadog.android.api.SdkCore + +/** + * A class enabling Datadog logging features. + * + * It allows you to create a specific context (automatic information, custom attributes, tags) that + * will be embedded in all logs sent through this logger. + * + * You can have multiple loggers configured in your application, each with their own settings. + */ +@Suppress("TooManyFunctions", "MethodOverloading", "UNUSED_PARAMETER") +class Logger internal constructor() { + + // region Log + + /** + * Sends a VERBOSE log message. + * @param message the message to be logged + * @param throwable a (nullable) throwable to be logged with the message + * @param attributes a map of attributes to include only for this message. If an attribute with + * the same key already exist in this logger, it will be overridden (just for this message) + */ + @Suppress("FunctionMinLength") + @JvmOverloads + fun v( + message: String, + throwable: Throwable? = null, + attributes: Map = emptyMap() + ) {} + + /** + * Sends a Debug log message. + * @param message the message to be logged + * @param throwable a (nullable) throwable to be logged with the message + * @param attributes a map of attributes to include only for this message. If an attribute with + * the same key already exist in this logger, it will be overridden (just for this message) + */ + @Suppress("FunctionMinLength") + @JvmOverloads + fun d( + message: String, + throwable: Throwable? = null, + attributes: Map = emptyMap() + ) {} + + /** + * Sends an Info log message. + * @param message the message to be logged + * @param throwable a (nullable) throwable to be logged with the message + * @param attributes a map of attributes to include only for this message. If an attribute with + * the same key already exist in this logger, it will be overridden (just for this message) + */ + @Suppress("FunctionMinLength") + @JvmOverloads + fun i( + message: String, + throwable: Throwable? = null, + attributes: Map = emptyMap() + ) {} + + /** + * Sends a Warning log message. + * @param message the message to be logged + * @param throwable a (nullable) throwable to be logged with the message + * @param attributes a map of attributes to include only for this message. If an attribute with + * the same key already exist in this logger, it will be overridden (just for this message) + */ + @Suppress("FunctionMinLength") + @JvmOverloads + fun w( + message: String, + throwable: Throwable? = null, + attributes: Map = emptyMap() + ) {} + + /** + * Sends an Error log message. + * @param message the message to be logged + * @param throwable a (nullable) throwable to be logged with the message + * @param attributes a map of attributes to include only for this message. If an attribute with + * the same key already exist in this logger, it will be overridden (just for this message) + */ + @Suppress("FunctionMinLength") + @JvmOverloads + fun e( + message: String, + throwable: Throwable? = null, + attributes: Map = emptyMap() + ) {} + + /** + * Sends an Assert log message. + * @param message the message to be logged + * @param throwable a (nullable) throwable to be logged with the message + * @param attributes a map of attributes to include only for this message. If an attribute with + * the same key already exist in this logger, it will be overridden (just for this message) + */ + @Suppress("FunctionMinLength") + @JvmOverloads + fun wtf( + message: String, + throwable: Throwable? = null, + attributes: Map = emptyMap() + ) {} + + /** + * Sends a log message. + * + * @param priority the priority level (must be one of the Android Log.* constants) + * @param message the message to be logged + * @param throwable a (nullable) throwable to be logged with the message + * @param attributes a map of attributes to include only for this message. If an attribute with + * the same key already exist in this logger, it will be overridden (just for this message) + */ + @JvmOverloads + fun log( + priority: Int, + message: String, + throwable: Throwable? = null, + attributes: Map = emptyMap() + ) {} + + /** + * Sends a log message with strings for error information. + * + * This method is meant for non-native or cross platform frameworks (such as React Native or + * Flutter) to send error information to Datadog. Although it can be used directly, it is + * recommended to use other methods declared on `Logger`. + * + * @param priority the priority level (must be one of the Android Log.* constants) + * @param message the message to be logged + * @param errorKind the kind of error to be logged with the message + * @param errorMessage the message from the error to be logged with this message + * @param errorStacktrace the stack trace from the error to be logged with this message + * @param attributes a map of attributes to include only for this message. If an attribute with + * the same key already exist in this logger, it will be overridden (just for this message) + */ + @JvmOverloads + @Suppress("LongParameterList") + fun log( + priority: Int, + message: String, + errorKind: String?, + errorMessage: String?, + errorStacktrace: String?, + attributes: Map = emptyMap() + ) {} + + // endregion + + // region Builder + + /** + * A Builder class for a [Logger]. + * + * @param sdkCore SDK instance to bind to. If not provided, default instance will be used. + */ + class Builder + @JvmOverloads + constructor(sdkCore: SdkCore = Datadog.getInstance()) { + + /** + * Builds a [Logger] based on the current state of this Builder. + */ + fun build(): Logger = Logger() + + /** + * Sets the service name that will appear in your logs. + * @param service the service name (default = application package name) + */ + fun setService(service: String): Builder = this + + /** + * Sets a minimum threshold (priority) for the log to be sent to the Datadog servers. If log priority + * is below this one, then it won't be sent. Default value is -1 (allow all). + * @param minLogThreshold Minimum log threshold to be sent to the Datadog servers. + */ + fun setRemoteLogThreshold(minLogThreshold: Int): Builder = this + + /** + * Enables your logs to be duplicated in LogCat. + * @param enabled false by default + */ + fun setLogcatLogsEnabled(enabled: Boolean): Builder = this + + /** + * Enables network information to be automatically added in your logs. + * @param enabled false by default + */ + fun setNetworkInfoEnabled(enabled: Boolean): Builder = this + + /** + * Sets the logger name that will appear in your logs when a throwable is attached. + * @param name the logger custom name (default = application package name) + */ + fun setName(name: String): Builder = this + + /** + * Enables the logs bundling with the current active trace. If this feature is enabled all + * the logs from this moment on will be bundled with the current trace and you will be able + * to see all the logs sent during a specific trace. + * @param enabled true by default + */ + fun setBundleWithTraceEnabled(enabled: Boolean): Builder = this + + /** + * Enables the logs bundling with the current active View. If this feature is enabled all + * the logs from this moment on will be bundled with the current view information and you + * will be able to see all the logs sent during a specific view in the Rum Explorer. + * @param enabled true by default + */ + fun setBundleWithRumEnabled(enabled: Boolean): Builder = this + + /** + * Sets the sample rate for this Logger. + * @param sampleRate the sample rate, in percent. + * A value of `30` means we'll send 30% of the logs. If value is `0`, no logs will be sent + * to Datadog. + * Default is 100.0 (ie: all logs are sent). + */ + fun setRemoteSampleRate(@FloatRange(from = 0.0, to = 100.0) sampleRate: Float): Builder = this + } + + // endregion + + // region Context Information (attributes, tags) + /** + * Add a custom attribute to all future logs sent by this logger. + * + * Values can be nested up to 10 levels deep. Keys + * using more than 10 levels will be sanitized by SDK. + * + * @param key the key for this attribute + * @param value the attribute value + */ + fun addAttribute(key: String, value: Any?) {} + + /** + * Remove a custom attribute from all future logs sent by this logger. + * Previous logs won't lose the attribute value associated with this key if they were created + * prior to this call. + * @param key the key of the attribute to remove + */ + fun removeAttribute(key: String) {} + + /** + * Add a tag to all future logs sent by this logger. + * The tag will take the form "key:value". + * + * Tags must start with a letter and after that may contain the following characters: + * Alphanumerics, Underscores, Minuses, Colons, Periods, Slashes. Other special characters + * are converted to underscores. + * Tags must be lowercase, and can be at most 200 characters. If the tag you provide is + * longer, only the first 200 characters will be used. + * + * @param key the key for this tag + * @param value the (non null) value of this tag + * @see [documentation](https://docs.datadoghq.com/tagging/#defining-tags) + */ + fun addTag(key: String, value: String) {} + + /** + * Add a tag to all future logs sent by this logger. + * + * Tags must start with a letter and after that may contain the following characters: + * Alphanumerics, Underscores, Minuses, Colons, Periods, Slashes. Other special characters + * are converted to underscores. + * Tags must be lowercase, and can be at most 200 characters. If the tag you provide is + * longer, only the first 200 characters will be used. + * + * @param tag the (non null) tag + * @see [documentation](https://docs.datadoghq.com/tagging/#defining-tags) + */ + fun addTag(tag: String) {} + + /** + * Remove a tag from all future logs sent by this logger. + * Previous logs won't lose the this tag if they were created prior to this call. + * @param tag the tag to remove + */ + fun removeTag(tag: String) {} + + /** + * Remove all tags with the given key from all future logs sent by this logger. + * Previous logs won't lose the this tag if they were created prior to this call. + * @param key the key of the tags to remove + */ + fun removeTagsWithKey(key: String) {} + + // endregion +} diff --git a/features/dd-sdk-android-logs-noop/src/main/kotlin/com/datadog/android/log/Logs.kt b/features/dd-sdk-android-logs-noop/src/main/kotlin/com/datadog/android/log/Logs.kt new file mode 100644 index 0000000000..49df4ef121 --- /dev/null +++ b/features/dd-sdk-android-logs-noop/src/main/kotlin/com/datadog/android/log/Logs.kt @@ -0,0 +1,80 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.log + +import com.datadog.android.Datadog +import com.datadog.android.api.SdkCore + +/** + * An entry point to Datadog Logs feature. + */ +@Suppress("UNUSED_PARAMETER") +object Logs { + + /** + * Enables a Logs feature based on the configuration provided. + * + * @param logsConfiguration Configuration to use for the feature. + * @param sdkCore SDK instance to register feature in. If not provided, default SDK instance + * will be used. + */ + @JvmOverloads + @JvmStatic + fun enable(logsConfiguration: LogsConfiguration, sdkCore: SdkCore = Datadog.getInstance()) { + } + + /** + * Identify whether a [Logs] has been enabled for the given SDK instance. + * + * This check is useful in scenarios where more than one component may be responsible + * for enabling the feature + * + * @param sdkCore the [SdkCore] instance to check against. If not provided, default instance + * will be checked. + * @return whether Logs has been enabled + */ + @JvmOverloads + @JvmStatic + fun isEnabled(sdkCore: SdkCore = Datadog.getInstance()): Boolean { + return false + } + + /** + * Add a custom attribute to all future logs sent by loggers created from the given SDK core. + * + * Values can be nested up to 10 levels deep. Keys + * using more than 10 levels will be sanitized by SDK. + * + * @param key the key for this attribute + * @param value the attribute value + * @param sdkCore the [SdkCore] instance to add the attribute to. If not provided, the default + * instance is used. + */ + @JvmOverloads + @JvmStatic + fun addAttribute(key: String, value: Any?, sdkCore: SdkCore = Datadog.getInstance()) { + } + + /** + * Remove a custom attribute from all future logs sent by loggers created from the given SDK core. + * + * Previous logs won't lose the attribute value associated with this key if they were created + * prior to this call. + * + * @param key the key of the attribute to remove + * @param sdkCore the [SdkCore] instance to remove the attribute from. If not provided, the default + * instance is used. + */ + @JvmOverloads + @JvmStatic + fun removeAttribute(key: String, sdkCore: SdkCore = Datadog.getInstance()) { + } + + internal const val LOGS_NOT_ENABLED_MESSAGE = + "You're trying to add attributes to logs, but the feature is not enabled. " + + "Please enable it first." +} diff --git a/features/dd-sdk-android-logs-noop/src/main/kotlin/com/datadog/android/log/LogsConfiguration.kt b/features/dd-sdk-android-logs-noop/src/main/kotlin/com/datadog/android/log/LogsConfiguration.kt new file mode 100644 index 0000000000..ac8fe68649 --- /dev/null +++ b/features/dd-sdk-android-logs-noop/src/main/kotlin/com/datadog/android/log/LogsConfiguration.kt @@ -0,0 +1,50 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.log + +import com.datadog.android.event.EventMapper +import com.datadog.android.event.NoOpEventMapper +import com.datadog.android.log.model.LogEvent + +/** + * Describes configuration to be used for the Logs feature. + */ +@Suppress("UNUSED_PARAMETER") +class LogsConfiguration internal constructor() { + + /** + * A Builder class for a [LogsConfiguration]. + */ + class Builder { + + /** + * Let the Logs feature target a custom server. + * The provided url should be the full endpoint url, e.g.: https://example.com/logs/upload + */ + fun useCustomEndpoint(endpoint: String): Builder { + return this + } + + /** + * Sets the [EventMapper] for the [LogEvent]. + * You can use this interface implementation to modify the + * [LogEvent] attributes before serialisation. + * + * @param eventMapper the [EventMapper] implementation. + */ + fun setEventMapper(eventMapper: EventMapper): Builder { + return this + } + + /** + * Builds a [LogsConfiguration] based on the current state of this Builder. + */ + fun build(): LogsConfiguration { + return LogsConfiguration() + } + } +} diff --git a/features/dd-sdk-android-logs-noop/src/testDebug/java/com/datadog/android/log/internal/logger/LogcatLogHandlerJavaTest.java b/features/dd-sdk-android-logs-noop/src/testDebug/java/com/datadog/android/log/internal/logger/LogcatLogHandlerJavaTest.java new file mode 100644 index 0000000000..486117388e --- /dev/null +++ b/features/dd-sdk-android-logs-noop/src/testDebug/java/com/datadog/android/log/internal/logger/LogcatLogHandlerJavaTest.java @@ -0,0 +1,77 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.log.internal.logger; + +import fr.xgouchet.elmyr.annotation.StringForgery; +import fr.xgouchet.elmyr.junit5.ForgeExtension; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import java.util.concurrent.atomic.AtomicReference; + +@SuppressWarnings("KotlinInternalInJava") +@ExtendWith(ForgeExtension.class) +public class LogcatLogHandlerJavaTest { + + LogcatLogHandler testedHandler; + + @StringForgery + String fakeServiceName; + + @Test + void resolves_stack_trace_element_null_if_in_release_mode() { + testedHandler = new LogcatLogHandler(fakeServiceName, true, false); + + StackTraceElement element = testedHandler.getCallerStackElement$dd_sdk_android_logs_debug(); + + assertThat(element) + .isNull(); + } + + @Test + void resolves_stack_trace_element_null_if_useClassnameAsTag_is_false() { + testedHandler = new LogcatLogHandler(fakeServiceName, false, true); + + StackTraceElement element = testedHandler.getCallerStackElement$dd_sdk_android_logs_debug(); + + assertThat(element) + .isNull(); + } + + @Test + void resolves_stack_trace_element_from_caller() { + testedHandler = new LogcatLogHandler(fakeServiceName, true, true); + + StackTraceElement element = testedHandler.getCallerStackElement$dd_sdk_android_logs_debug(); + + assertThat(element).isNotNull(); + assertThat(element.getClassName()) + .isEqualTo(getClass().getCanonicalName()); + } + + @Test + void resolves_nested_stack_trace_element_from_caller() { + testedHandler = new LogcatLogHandler(fakeServiceName, true, true); + + AtomicReference elementRef = new AtomicReference<>(); + + Runnable runnable = new Runnable() { + @Override + public void run() { + elementRef.set(testedHandler.getCallerStackElement$dd_sdk_android_logs_debug()); + } + }; + runnable.run(); + + assertThat(elementRef).isNotNull(); + assertThat(elementRef.get().getClassName()) + .isEqualTo(getClass().getCanonicalName() + "$1"); + } +} diff --git a/features/dd-sdk-android-logs-noop/transitiveDependencies b/features/dd-sdk-android-logs-noop/transitiveDependencies new file mode 100644 index 0000000000..3347ef2d2c --- /dev/null +++ b/features/dd-sdk-android-logs-noop/transitiveDependencies @@ -0,0 +1,9 @@ +Dependencies List + +androidx.annotation:annotation-jvm:1.9.1 : 59 Kb +com.google.code.gson:gson:2.8.9 : 252 Kb +org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb +org.jetbrains:annotations:13.0 : 17 Kb + +Total transitive dependencies size : 2035 Kb + diff --git a/features/dd-sdk-android-logs/transitiveDependencies b/features/dd-sdk-android-logs/transitiveDependencies index b099002d83..3347ef2d2c 100644 --- a/features/dd-sdk-android-logs/transitiveDependencies +++ b/features/dd-sdk-android-logs/transitiveDependencies @@ -1,9 +1,9 @@ Dependencies List androidx.annotation:annotation-jvm:1.9.1 : 59 Kb -com.google.code.gson:gson:2.10.1 : 276 Kb +com.google.code.gson:gson:2.8.9 : 252 Kb org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb org.jetbrains:annotations:13.0 : 17 Kb -Total transitive dependencies size : 2 Mb +Total transitive dependencies size : 2035 Kb diff --git a/features/dd-sdk-android-ndk/build.gradle.kts b/features/dd-sdk-android-ndk/build.gradle.kts index 0538cc5019..23c9ea221e 100644 --- a/features/dd-sdk-android-ndk/build.gradle.kts +++ b/features/dd-sdk-android-ndk/build.gradle.kts @@ -71,7 +71,7 @@ dependencies { implementation(project(":dd-sdk-android-internal")) api(project(":dd-sdk-android-core")) implementation(libs.kotlin) - implementation(libs.okHttp) + compileOnly(libs.okHttp) implementation(libs.androidXMultidex) testImplementation(project(":tools:unit")) { @@ -84,6 +84,8 @@ dependencies { } testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.okHttp) + testImplementation(libs.gson) androidTestImplementation(project(":tools:unit")) { attributes { diff --git a/features/dd-sdk-android-ndk/transitiveDependencies b/features/dd-sdk-android-ndk/transitiveDependencies index 17855d8899..325bd99bff 100644 --- a/features/dd-sdk-android-ndk/transitiveDependencies +++ b/features/dd-sdk-android-ndk/transitiveDependencies @@ -1,10 +1,8 @@ Dependencies List androidx.multidex:multidex:2.0.1 : 26 Kb -com.squareup.okhttp3:okhttp:4.12.0 : 771 Kb -com.squareup.okio:okio-jvm:3.6.0 : 351 Kb -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 : 959 b -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 : 965 b +com.squareup.okhttp3:okhttp:4.9.0 : 772 Kb +com.squareup.okio:okio:2.8.0 : 237 Kb org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb org.jetbrains:annotations:13.0 : 17 Kb diff --git a/features/dd-sdk-android-profiling-noop/.gitignore b/features/dd-sdk-android-profiling-noop/.gitignore new file mode 100644 index 0000000000..e5614b9871 --- /dev/null +++ b/features/dd-sdk-android-profiling-noop/.gitignore @@ -0,0 +1,18 @@ +# Built application files +*.apk +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ + +# Gradle files +build/ diff --git a/features/dd-sdk-android-profiling-noop/api/apiSurface b/features/dd-sdk-android-profiling-noop/api/apiSurface new file mode 100644 index 0000000000..41aa54fa1c --- /dev/null +++ b/features/dd-sdk-android-profiling-noop/api/apiSurface @@ -0,0 +1,48 @@ +class com.datadog.android.profiling.DdProfilingContentProvider : android.content.ContentProvider + override fun onCreate(): Boolean + override fun query(android.net.Uri, Array?, String?, Array?, String?): android.database.Cursor? + override fun getType(android.net.Uri): String? + override fun insert(android.net.Uri, android.content.ContentValues?): android.net.Uri? + override fun delete(android.net.Uri, String?, Array?): Int + override fun update(android.net.Uri, android.content.ContentValues?, String?, Array?): Int +annotation com.datadog.android.profiling.ExperimentalProfilingApi +object com.datadog.android.profiling.Profiling + fun enable(ProfilingConfiguration = ProfilingConfiguration(), com.datadog.android.api.SdkCore = Datadog.getInstance()) + fun start(android.content.Context, com.datadog.android.api.SdkCore = Datadog.getInstance()) + fun stop(com.datadog.android.api.SdkCore = Datadog.getInstance()) + fun isEnabled(com.datadog.android.api.SdkCore = Datadog.getInstance()): Boolean +class com.datadog.android.profiling.ProfilingConfiguration + class Builder + fun setApplicationLaunchSampleRate(Float): Builder + fun useCustomEndpoint(String): Builder + fun build(): ProfilingConfiguration +data class com.datadog.android.profiling.model.ProfileEvent + constructor(kotlin.collections.List, kotlin.String, kotlin.String, kotlin.String, kotlin.String, kotlin.String, kotlin.String, Application, Session, View? = null, Vital) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): ProfileEvent + fun fromJsonObject(com.google.gson.JsonObject): ProfileEvent + data class Application + constructor(kotlin.String) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Application + fun fromJsonObject(com.google.gson.JsonObject): Application + data class Session + constructor(kotlin.String) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Session + fun fromJsonObject(com.google.gson.JsonObject): Session + data class View + constructor(kotlin.String, kotlin.String) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): View + fun fromJsonObject(com.google.gson.JsonObject): View + data class Vital + constructor(kotlin.String) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Vital + fun fromJsonObject(com.google.gson.JsonObject): Vital diff --git a/features/dd-sdk-android-profiling-noop/api/compiler-meta.txt b/features/dd-sdk-android-profiling-noop/api/compiler-meta.txt new file mode 100644 index 0000000000..80973b105c --- /dev/null +++ b/features/dd-sdk-android-profiling-noop/api/compiler-meta.txt @@ -0,0 +1,2 @@ +kotlin_abi_version=1.8.0 +jvm_bytecode_version=11 diff --git a/features/dd-sdk-android-profiling-noop/api/dd-sdk-android-profiling-noop.api b/features/dd-sdk-android-profiling-noop/api/dd-sdk-android-profiling-noop.api new file mode 100644 index 0000000000..93221a4347 --- /dev/null +++ b/features/dd-sdk-android-profiling-noop/api/dd-sdk-android-profiling-noop.api @@ -0,0 +1,163 @@ +public final class com/datadog/android/profiling/DdProfilingContentProvider : android/content/ContentProvider { + public fun ()V + public fun delete (Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I + public fun getType (Landroid/net/Uri;)Ljava/lang/String; + public fun insert (Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri; + public fun onCreate ()Z + public fun query (Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; + public fun update (Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I +} + +public abstract interface annotation class com/datadog/android/profiling/ExperimentalProfilingApi : java/lang/annotation/Annotation { +} + +public final class com/datadog/android/profiling/Profiling { + public static final field INSTANCE Lcom/datadog/android/profiling/Profiling; + public static final fun enable ()V + public static final fun enable (Lcom/datadog/android/profiling/ProfilingConfiguration;)V + public static final fun enable (Lcom/datadog/android/profiling/ProfilingConfiguration;Lcom/datadog/android/api/SdkCore;)V + public static synthetic fun enable$default (Lcom/datadog/android/profiling/ProfilingConfiguration;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V + public static final fun isEnabled ()Z + public static final fun isEnabled (Lcom/datadog/android/api/SdkCore;)Z + public static synthetic fun isEnabled$default (Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)Z + public static final fun start (Landroid/content/Context;)V + public static final fun start (Landroid/content/Context;Lcom/datadog/android/api/SdkCore;)V + public static synthetic fun start$default (Landroid/content/Context;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V + public static final fun stop ()V + public static final fun stop (Lcom/datadog/android/api/SdkCore;)V + public static synthetic fun stop$default (Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V +} + +public final class com/datadog/android/profiling/ProfilingConfiguration { +} + +public final class com/datadog/android/profiling/ProfilingConfiguration$Builder { + public fun ()V + public final fun build ()Lcom/datadog/android/profiling/ProfilingConfiguration; + public final fun setApplicationLaunchSampleRate (F)Lcom/datadog/android/profiling/ProfilingConfiguration$Builder; + public final fun useCustomEndpoint (Ljava/lang/String;)Lcom/datadog/android/profiling/ProfilingConfiguration$Builder; +} + +public final class com/datadog/android/profiling/model/ProfileEvent { + public static final field Companion Lcom/datadog/android/profiling/model/ProfileEvent$Companion; + public fun (Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/profiling/model/ProfileEvent$Application;Lcom/datadog/android/profiling/model/ProfileEvent$Session;Lcom/datadog/android/profiling/model/ProfileEvent$View;Lcom/datadog/android/profiling/model/ProfileEvent$Vital;)V + public synthetic fun (Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/profiling/model/ProfileEvent$Application;Lcom/datadog/android/profiling/model/ProfileEvent$Session;Lcom/datadog/android/profiling/model/ProfileEvent$View;Lcom/datadog/android/profiling/model/ProfileEvent$Vital;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/util/List; + public final fun component10 ()Lcom/datadog/android/profiling/model/ProfileEvent$View; + public final fun component11 ()Lcom/datadog/android/profiling/model/ProfileEvent$Vital; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/lang/String; + public final fun component6 ()Ljava/lang/String; + public final fun component7 ()Ljava/lang/String; + public final fun component8 ()Lcom/datadog/android/profiling/model/ProfileEvent$Application; + public final fun component9 ()Lcom/datadog/android/profiling/model/ProfileEvent$Session; + public final fun copy (Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/profiling/model/ProfileEvent$Application;Lcom/datadog/android/profiling/model/ProfileEvent$Session;Lcom/datadog/android/profiling/model/ProfileEvent$View;Lcom/datadog/android/profiling/model/ProfileEvent$Vital;)Lcom/datadog/android/profiling/model/ProfileEvent; + public static synthetic fun copy$default (Lcom/datadog/android/profiling/model/ProfileEvent;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/profiling/model/ProfileEvent$Application;Lcom/datadog/android/profiling/model/ProfileEvent$Session;Lcom/datadog/android/profiling/model/ProfileEvent$View;Lcom/datadog/android/profiling/model/ProfileEvent$Vital;ILjava/lang/Object;)Lcom/datadog/android/profiling/model/ProfileEvent; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/profiling/model/ProfileEvent; + public final fun getApplication ()Lcom/datadog/android/profiling/model/ProfileEvent$Application; + public final fun getAttachments ()Ljava/util/List; + public final fun getEnd ()Ljava/lang/String; + public final fun getFamily ()Ljava/lang/String; + public final fun getRuntime ()Ljava/lang/String; + public final fun getSession ()Lcom/datadog/android/profiling/model/ProfileEvent$Session; + public final fun getStart ()Ljava/lang/String; + public final fun getTagsProfiler ()Ljava/lang/String; + public final fun getVersion ()Ljava/lang/String; + public final fun getView ()Lcom/datadog/android/profiling/model/ProfileEvent$View; + public final fun getVital ()Lcom/datadog/android/profiling/model/ProfileEvent$Vital; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/profiling/model/ProfileEvent$Application { + public static final field Companion Lcom/datadog/android/profiling/model/ProfileEvent$Application$Companion; + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$Application; + public static synthetic fun copy$default (Lcom/datadog/android/profiling/model/ProfileEvent$Application;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/profiling/model/ProfileEvent$Application; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$Application; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/profiling/model/ProfileEvent$Application; + public final fun getId ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/profiling/model/ProfileEvent$Application$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$Application; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/profiling/model/ProfileEvent$Application; +} + +public final class com/datadog/android/profiling/model/ProfileEvent$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/profiling/model/ProfileEvent; +} + +public final class com/datadog/android/profiling/model/ProfileEvent$Session { + public static final field Companion Lcom/datadog/android/profiling/model/ProfileEvent$Session$Companion; + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$Session; + public static synthetic fun copy$default (Lcom/datadog/android/profiling/model/ProfileEvent$Session;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/profiling/model/ProfileEvent$Session; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$Session; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/profiling/model/ProfileEvent$Session; + public final fun getId ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/profiling/model/ProfileEvent$Session$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$Session; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/profiling/model/ProfileEvent$Session; +} + +public final class com/datadog/android/profiling/model/ProfileEvent$View { + public static final field Companion Lcom/datadog/android/profiling/model/ProfileEvent$View$Companion; + public fun (Ljava/lang/String;Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$View; + public static synthetic fun copy$default (Lcom/datadog/android/profiling/model/ProfileEvent$View;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/profiling/model/ProfileEvent$View; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$View; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/profiling/model/ProfileEvent$View; + public final fun getId ()Ljava/lang/String; + public final fun getName ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/profiling/model/ProfileEvent$View$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$View; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/profiling/model/ProfileEvent$View; +} + +public final class com/datadog/android/profiling/model/ProfileEvent$Vital { + public static final field Companion Lcom/datadog/android/profiling/model/ProfileEvent$Vital$Companion; + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$Vital; + public static synthetic fun copy$default (Lcom/datadog/android/profiling/model/ProfileEvent$Vital;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/profiling/model/ProfileEvent$Vital; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$Vital; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/profiling/model/ProfileEvent$Vital; + public final fun getId ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/profiling/model/ProfileEvent$Vital$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$Vital; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/profiling/model/ProfileEvent$Vital; +} + diff --git a/features/dd-sdk-android-profiling-noop/api/dd-sdk-android-profiling.api b/features/dd-sdk-android-profiling-noop/api/dd-sdk-android-profiling.api new file mode 100644 index 0000000000..77ec368863 --- /dev/null +++ b/features/dd-sdk-android-profiling-noop/api/dd-sdk-android-profiling.api @@ -0,0 +1,168 @@ +public final class com/datadog/android/profiling/DdProfilingContentProvider : android/content/ContentProvider { + public fun ()V + public fun delete (Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I + public fun getType (Landroid/net/Uri;)Ljava/lang/String; + public fun insert (Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri; + public fun onCreate ()Z + public fun query (Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; + public fun update (Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I +} + +public abstract interface annotation class com/datadog/android/profiling/ExperimentalProfilingApi : java/lang/annotation/Annotation { +} + +public final class com/datadog/android/profiling/Profiling { + public static final field INSTANCE Lcom/datadog/android/profiling/Profiling; + public static final fun enable ()V + public static final fun enable (Lcom/datadog/android/profiling/ProfilingConfiguration;)V + public static final fun enable (Lcom/datadog/android/profiling/ProfilingConfiguration;Lcom/datadog/android/api/SdkCore;)V + public static synthetic fun enable$default (Lcom/datadog/android/profiling/ProfilingConfiguration;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V + public final fun start (Landroid/content/Context;Lcom/datadog/android/api/SdkCore;)V + public static synthetic fun start$default (Lcom/datadog/android/profiling/Profiling;Landroid/content/Context;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V + public final fun stop (Lcom/datadog/android/api/SdkCore;)V + public static synthetic fun stop$default (Lcom/datadog/android/profiling/Profiling;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V +} + +public final class com/datadog/android/profiling/ProfilingConfiguration { + public static final field Companion Lcom/datadog/android/profiling/ProfilingConfiguration$Companion; + public final fun copy (Ljava/lang/String;F)Lcom/datadog/android/profiling/ProfilingConfiguration; + public static synthetic fun copy$default (Lcom/datadog/android/profiling/ProfilingConfiguration;Ljava/lang/String;FILjava/lang/Object;)Lcom/datadog/android/profiling/ProfilingConfiguration; + public fun equals (Ljava/lang/Object;)Z + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/profiling/ProfilingConfiguration$Builder { + public fun ()V + public final fun build ()Lcom/datadog/android/profiling/ProfilingConfiguration; + public final fun setApplicationLaunchSampleRate (F)Lcom/datadog/android/profiling/ProfilingConfiguration$Builder; + public final fun useCustomEndpoint (Ljava/lang/String;)Lcom/datadog/android/profiling/ProfilingConfiguration$Builder; +} + +public final class com/datadog/android/profiling/ProfilingConfiguration$Companion { + public final fun getDEFAULT ()Lcom/datadog/android/profiling/ProfilingConfiguration; +} + +public final class com/datadog/android/profiling/model/ProfileEvent { + public static final field Companion Lcom/datadog/android/profiling/model/ProfileEvent$Companion; + public fun (Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/profiling/model/ProfileEvent$Application;Lcom/datadog/android/profiling/model/ProfileEvent$Session;Lcom/datadog/android/profiling/model/ProfileEvent$View;Lcom/datadog/android/profiling/model/ProfileEvent$Vital;)V + public synthetic fun (Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/profiling/model/ProfileEvent$Application;Lcom/datadog/android/profiling/model/ProfileEvent$Session;Lcom/datadog/android/profiling/model/ProfileEvent$View;Lcom/datadog/android/profiling/model/ProfileEvent$Vital;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/util/List; + public final fun component10 ()Lcom/datadog/android/profiling/model/ProfileEvent$View; + public final fun component11 ()Lcom/datadog/android/profiling/model/ProfileEvent$Vital; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/lang/String; + public final fun component6 ()Ljava/lang/String; + public final fun component7 ()Ljava/lang/String; + public final fun component8 ()Lcom/datadog/android/profiling/model/ProfileEvent$Application; + public final fun component9 ()Lcom/datadog/android/profiling/model/ProfileEvent$Session; + public final fun copy (Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/profiling/model/ProfileEvent$Application;Lcom/datadog/android/profiling/model/ProfileEvent$Session;Lcom/datadog/android/profiling/model/ProfileEvent$View;Lcom/datadog/android/profiling/model/ProfileEvent$Vital;)Lcom/datadog/android/profiling/model/ProfileEvent; + public static synthetic fun copy$default (Lcom/datadog/android/profiling/model/ProfileEvent;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/profiling/model/ProfileEvent$Application;Lcom/datadog/android/profiling/model/ProfileEvent$Session;Lcom/datadog/android/profiling/model/ProfileEvent$View;Lcom/datadog/android/profiling/model/ProfileEvent$Vital;ILjava/lang/Object;)Lcom/datadog/android/profiling/model/ProfileEvent; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/profiling/model/ProfileEvent; + public final fun getApplication ()Lcom/datadog/android/profiling/model/ProfileEvent$Application; + public final fun getAttachments ()Ljava/util/List; + public final fun getEnd ()Ljava/lang/String; + public final fun getFamily ()Ljava/lang/String; + public final fun getRuntime ()Ljava/lang/String; + public final fun getSession ()Lcom/datadog/android/profiling/model/ProfileEvent$Session; + public final fun getStart ()Ljava/lang/String; + public final fun getTagsProfiler ()Ljava/lang/String; + public final fun getVersion ()Ljava/lang/String; + public final fun getView ()Lcom/datadog/android/profiling/model/ProfileEvent$View; + public final fun getVital ()Lcom/datadog/android/profiling/model/ProfileEvent$Vital; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/profiling/model/ProfileEvent$Application { + public static final field Companion Lcom/datadog/android/profiling/model/ProfileEvent$Application$Companion; + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$Application; + public static synthetic fun copy$default (Lcom/datadog/android/profiling/model/ProfileEvent$Application;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/profiling/model/ProfileEvent$Application; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$Application; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/profiling/model/ProfileEvent$Application; + public final fun getId ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/profiling/model/ProfileEvent$Application$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$Application; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/profiling/model/ProfileEvent$Application; +} + +public final class com/datadog/android/profiling/model/ProfileEvent$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/profiling/model/ProfileEvent; +} + +public final class com/datadog/android/profiling/model/ProfileEvent$Session { + public static final field Companion Lcom/datadog/android/profiling/model/ProfileEvent$Session$Companion; + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$Session; + public static synthetic fun copy$default (Lcom/datadog/android/profiling/model/ProfileEvent$Session;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/profiling/model/ProfileEvent$Session; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$Session; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/profiling/model/ProfileEvent$Session; + public final fun getId ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/profiling/model/ProfileEvent$Session$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$Session; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/profiling/model/ProfileEvent$Session; +} + +public final class com/datadog/android/profiling/model/ProfileEvent$View { + public static final field Companion Lcom/datadog/android/profiling/model/ProfileEvent$View$Companion; + public fun (Ljava/lang/String;Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$View; + public static synthetic fun copy$default (Lcom/datadog/android/profiling/model/ProfileEvent$View;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/profiling/model/ProfileEvent$View; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$View; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/profiling/model/ProfileEvent$View; + public final fun getId ()Ljava/lang/String; + public final fun getName ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/profiling/model/ProfileEvent$View$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$View; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/profiling/model/ProfileEvent$View; +} + +public final class com/datadog/android/profiling/model/ProfileEvent$Vital { + public static final field Companion Lcom/datadog/android/profiling/model/ProfileEvent$Vital$Companion; + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$Vital; + public static synthetic fun copy$default (Lcom/datadog/android/profiling/model/ProfileEvent$Vital;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/profiling/model/ProfileEvent$Vital; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$Vital; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/profiling/model/ProfileEvent$Vital; + public final fun getId ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/profiling/model/ProfileEvent$Vital$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/profiling/model/ProfileEvent$Vital; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/profiling/model/ProfileEvent$Vital; +} + diff --git a/features/dd-sdk-android-profiling-noop/build.gradle.kts b/features/dd-sdk-android-profiling-noop/build.gradle.kts new file mode 100644 index 0000000000..b5efe45b98 --- /dev/null +++ b/features/dd-sdk-android-profiling-noop/build.gradle.kts @@ -0,0 +1,64 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +import com.datadog.gradle.config.androidLibraryConfig +import com.datadog.gradle.config.dependencyUpdateConfig +import com.datadog.gradle.config.detektCustomConfig +import com.datadog.gradle.config.javadocConfig +import com.datadog.gradle.config.kotlinConfig +import com.datadog.gradle.config.publishingConfig +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +plugins { + // Build + id("com.android.library") + kotlin("android") + id("com.google.devtools.ksp") + + // Publish + `maven-publish` + signing + id("org.jetbrains.dokka-javadoc") + + // Analysis tools + id("com.github.ben-manes.versions") + + // Internal Generation + id("com.datadoghq.dependency-license") + id("apiSurface") + id("transitiveDependencies") + id("verificationXml") + id("binary-compatibility-validator") +} + +android { + namespace = "com.datadog.android.profiling" +} + +dependencies { + api(project(":dd-sdk-android-core")) + implementation(project(":dd-sdk-android-internal")) + implementation(libs.kotlin) + implementation(libs.androidXCore) + implementation(libs.androidXCoreKtx) + implementation(libs.gson) + implementation(libs.okHttp) + + // Generate NoOp implementations + ksp(project(":tools:noopfactory")) +} + +apply(from = "generate_profiling_models.gradle.kts") +kotlinConfig(jvmBytecodeTarget = JvmTarget.JVM_11) +androidLibraryConfig() +javadocConfig() +dependencyUpdateConfig() +publishingConfig( + "The Profiling feature to use with the Datadog monitoring " + + "library for Android applications.", + customArtifactId = "dd-sdk-android-profiling-noop" +) +detektCustomConfig() diff --git a/features/dd-sdk-android-profiling-noop/generate_profiling_models.gradle.kts b/features/dd-sdk-android-profiling-noop/generate_profiling_models.gradle.kts new file mode 100644 index 0000000000..b4551892e6 --- /dev/null +++ b/features/dd-sdk-android-profiling-noop/generate_profiling_models.gradle.kts @@ -0,0 +1,15 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +import com.datadog.gradle.utils.createJsonModelsGenerationTask + +createJsonModelsGenerationTask("generateProfilingModelsFromJson") { + inputDirPath = "src/main/json/profiling" + ignoredFiles = listOf( + "_common-schema.json" + ) + targetPackageName = "com.datadog.android.profiling.model" +} diff --git a/features/dd-sdk-android-profiling-noop/src/main/AndroidManifest.xml b/features/dd-sdk-android-profiling-noop/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..3a632b49e2 --- /dev/null +++ b/features/dd-sdk-android-profiling-noop/src/main/AndroidManifest.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + diff --git a/features/dd-sdk-android-profiling-noop/src/main/java/com/datadog/android/profiling/DdProfilingContentProvider.kt b/features/dd-sdk-android-profiling-noop/src/main/java/com/datadog/android/profiling/DdProfilingContentProvider.kt new file mode 100644 index 0000000000..f4335e8d8a --- /dev/null +++ b/features/dd-sdk-android-profiling-noop/src/main/java/com/datadog/android/profiling/DdProfilingContentProvider.kt @@ -0,0 +1,35 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.profiling + +import android.content.ContentProvider +import android.content.ContentValues +import android.database.Cursor +import android.net.Uri + +/** + * [ContentProvider] used to track app startup. + */ +class DdProfilingContentProvider : ContentProvider() { + override fun onCreate(): Boolean = true + override fun query( + uri: Uri, + projection: Array?, + selection: String?, + selectionArgs: Array?, + sortOrder: String? + ): Cursor? = null + override fun getType(uri: Uri): String? = null + override fun insert(uri: Uri, values: ContentValues?): Uri? = null + override fun delete(uri: Uri, selection: String?, selectionArgs: Array?): Int = 0 + override fun update( + uri: Uri, + values: ContentValues?, + selection: String?, + selectionArgs: Array? + ): Int = 0 +} diff --git a/features/dd-sdk-android-profiling-noop/src/main/java/com/datadog/android/profiling/ExperimentalProfilingApi.kt b/features/dd-sdk-android-profiling-noop/src/main/java/com/datadog/android/profiling/ExperimentalProfilingApi.kt new file mode 100644 index 0000000000..1215594b28 --- /dev/null +++ b/features/dd-sdk-android-profiling-noop/src/main/java/com/datadog/android/profiling/ExperimentalProfilingApi.kt @@ -0,0 +1,18 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.profiling + +/** + * Marker for the experimental Profiling API. + */ +@RequiresOptIn( + message = "This is an experimental Profiling API." + + " It may change in the future.", + level = RequiresOptIn.Level.WARNING +) +@Retention(AnnotationRetention.BINARY) +annotation class ExperimentalProfilingApi diff --git a/features/dd-sdk-android-profiling-noop/src/main/java/com/datadog/android/profiling/Profiling.kt b/features/dd-sdk-android-profiling-noop/src/main/java/com/datadog/android/profiling/Profiling.kt new file mode 100644 index 0000000000..db06f9a56c --- /dev/null +++ b/features/dd-sdk-android-profiling-noop/src/main/java/com/datadog/android/profiling/Profiling.kt @@ -0,0 +1,65 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.profiling + +import android.content.Context +import com.datadog.android.Datadog +import com.datadog.android.api.SdkCore + +/** + * An entry point to Datadog Profiling feature. + */ +@ExperimentalProfilingApi +@Suppress("UNUSED_PARAMETER") +object Profiling { + + /** + * Enables the profiling feature. + * + * @param configuration Configuration to use for the feature. + * @param sdkCore SDK instance to register feature in. If not provided, default SDK instance + * will be used. + */ + @JvmStatic + @JvmOverloads + fun enable( + configuration: ProfilingConfiguration = ProfilingConfiguration(), + sdkCore: SdkCore = Datadog.getInstance() + ) {} + + /** + * Start profiling for a given SDK instance. + * + * @param context application context + * @param sdkCore SDK instance to start profiling with. If not provided, default SDK instance. + */ + @JvmStatic + @JvmOverloads + fun start(context: Context, sdkCore: SdkCore = Datadog.getInstance()) {} + + /** + * Stop profiling for a given SDK instance. + * + * @param sdkCore SDK instance to stop profiling. If not provided, default SDK instance. + */ + @JvmStatic + @JvmOverloads + fun stop(sdkCore: SdkCore = Datadog.getInstance()) {} + + /** + * Identify whether a [Profiling] has been enabled for the given SDK instance. + * + * @param sdkCore the [SdkCore] instance to check against. If not provided, default instance + * will be checked. + * @return whether Profiling has been enabled + */ + @JvmStatic + @JvmOverloads + fun isEnabled(sdkCore: SdkCore = Datadog.getInstance()): Boolean { + return false + } +} diff --git a/features/dd-sdk-android-profiling-noop/src/main/java/com/datadog/android/profiling/ProfilingConfiguration.kt b/features/dd-sdk-android-profiling-noop/src/main/java/com/datadog/android/profiling/ProfilingConfiguration.kt new file mode 100644 index 0000000000..6e1464c3d3 --- /dev/null +++ b/features/dd-sdk-android-profiling-noop/src/main/java/com/datadog/android/profiling/ProfilingConfiguration.kt @@ -0,0 +1,45 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.profiling + +/** + * Describes configuration to be used for the Profiling feature. + */ +@ExperimentalProfilingApi +@Suppress("UNUSED_PARAMETER") +class ProfilingConfiguration internal constructor() { + + /** + * A Builder class for a [ProfilingConfiguration]. + */ + class Builder { + + /** + * Sets the sampling rate for Application Launch profiling. + * + * @param sampleRate The sample rate, expressed as a percentage between 0 and 100 (inclusive). + */ + @Suppress("UNUSED_PARAMETER") + fun setApplicationLaunchSampleRate(sampleRate: Float): Builder { + return this + } + + /** + * Let the Profiling feature target a custom server. + * @param endpoint the full endpoint url. + */ + @Suppress("UNUSED_PARAMETER") + fun useCustomEndpoint(endpoint: String): Builder { + return this + } + + /** + * Builds a [ProfilingConfiguration] based on the current state of this Builder. + */ + fun build(): ProfilingConfiguration = ProfilingConfiguration() + } +} diff --git a/features/dd-sdk-android-profiling-noop/src/main/json/profiling/profiling-schema.json b/features/dd-sdk-android-profiling-noop/src/main/json/profiling/profiling-schema.json new file mode 100644 index 0000000000..63d6fa4a9c --- /dev/null +++ b/features/dd-sdk-android-profiling-noop/src/main/json/profiling/profiling-schema.json @@ -0,0 +1,127 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "profiling-schema.json", + "title": "ProfileEvent", + "type": "object", + "description": "Structure holding information about a ProfileEvent", + "properties": { + "attachments": { + "type": "array", + "description": "List of profiling data attachments", + "items": { + "type": "string", + "description": "Profile file name", + "readOnly": true + }, + "readOnly": true + }, + "start": { + "type": "string", + "description": "The profile start time in ISO 8601 UTC format (yyyy-MM-dd'T'HH:mm:ss.SSS'Z')", + "readOnly": true + }, + "end": { + "type": "string", + "description": " The profile end time in ISO 8601 UTC format (yyyy-MM-dd'T'HH:mm:ss.SSS'Z')", + "readOnly": true + }, + "family": { + "type": "string", + "description": "Profile family used by the backend to identify the profile type. For Perfetto, use \"android\".", + "readOnly": true + }, + "runtime": { + "type": "string", + "description": "Profile runtime. Use \"android\".", + "readOnly": true + }, + "version": { + "type": "string", + "description": "Schema version of the event, only `4` is supported", + "readOnly": true + }, + "tags_profiler": { + "type": "string", + "description": "The list of tags joined into a String and divided by ',' ", + "readOnly": true + }, + "application": { + "type": "object", + "description": "The RUM Application this profile event is associated with.", + "readOnly": true, + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of RUM Application in the UUID format.", + "readOnly": true + } + }, + "required": [ + "id" + ] + }, + "session": { + "type": "object", + "description": "The RUM Session this profile event is associated with.", + "readOnly": true, + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of RUM Session in the UUID format.", + "readOnly": true + } + }, + "required": [ + "id" + ] + }, + "view": { + "type": "object", + "description": "The RUM View this profile event is associated with.", + "readOnly": true, + "properties": { + "id": { + "type": "string", + "description": "Unique identifier in the UUID format.", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Name of the RUM view.", + "readOnly": true + } + }, + "required": [ + "id", + "name" + ] + }, + "vital": { + "type": "object", + "description": "The RUM Vital this profile event is associated with.", + "readOnly": true, + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of RUM Vital in the UUID format.", + "readOnly": true + } + }, + "required": [ + "id" + ] + } + }, + "required": [ + "attachments", + "start", + "end", + "family", + "runtime", + "version", + "tags_profiler", + "application", + "session", + "vital" + ] +} diff --git a/features/dd-sdk-android-profiling-noop/transitiveDependencies b/features/dd-sdk-android-profiling-noop/transitiveDependencies new file mode 100644 index 0000000000..b3f536f2d7 --- /dev/null +++ b/features/dd-sdk-android-profiling-noop/transitiveDependencies @@ -0,0 +1,19 @@ +Dependencies List + +androidx.annotation:annotation-experimental:1.3.0 : 35 Kb +androidx.annotation:annotation-jvm:1.9.1 : 59 Kb +androidx.arch.core:core-common:2.1.0 : 10 Kb +androidx.collection:collection:1.2.0 : 39 Kb +androidx.core:core-ktx:1.12.0 : 169 Kb +androidx.core:core:1.12.0 : 1291 Kb +androidx.lifecycle:lifecycle-common:2.3.1 : 22 Kb +androidx.lifecycle:lifecycle-runtime:2.3.1 : 10 Kb +androidx.versionedparcelable:versionedparcelable:1.1.1 : 30 Kb +com.google.code.gson:gson:2.8.9 : 252 Kb +com.squareup.okhttp3:okhttp:4.9.0 : 772 Kb +com.squareup.okio:okio:2.8.0 : 237 Kb +org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb +org.jetbrains:annotations:13.0 : 17 Kb + +Total transitive dependencies size : 4 Mb + diff --git a/features/dd-sdk-android-profiling/build.gradle.kts b/features/dd-sdk-android-profiling/build.gradle.kts index 3b5b6af773..66cb28b8ae 100644 --- a/features/dd-sdk-android-profiling/build.gradle.kts +++ b/features/dd-sdk-android-profiling/build.gradle.kts @@ -47,10 +47,12 @@ dependencies { api(project(":dd-sdk-android-core")) implementation(project(":dd-sdk-android-internal")) implementation(libs.kotlin) - implementation(libs.androidXCore) - implementation(libs.androidXCoreKtx) - implementation(libs.gson) - implementation(libs.okHttp) + implementation(libs.androidx.core.v1150) + implementation(libs.androidx.core.ktx.v1150) +// implementation(libs.androidXCore) +// implementation(libs.androidXCoreKtx) + compileOnly(libs.gson) + compileOnly(libs.okHttp) // Generate NoOp implementations ksp(project(":tools:noopfactory")) @@ -68,6 +70,8 @@ dependencies { testImplementation(testFixtures(project(":dd-sdk-android-internal"))) testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.gson) + testImplementation(libs.okHttp) unmock(libs.robolectric) } diff --git a/features/dd-sdk-android-profiling/transitiveDependencies b/features/dd-sdk-android-profiling/transitiveDependencies index 4f855771f3..3e049c73b5 100644 --- a/features/dd-sdk-android-profiling/transitiveDependencies +++ b/features/dd-sdk-android-profiling/transitiveDependencies @@ -3,24 +3,19 @@ Dependencies List androidx.annotation:annotation-experimental:1.4.1 : 38 Kb androidx.annotation:annotation-jvm:1.9.1 : 59 Kb androidx.arch.core:core-common:2.2.0 : 11 Kb -androidx.collection:collection-jvm:1.4.5 : 770 Kb -androidx.core:core-ktx:1.17.0 : 168 Kb -androidx.core:core-viewtree:1.0.0 : 6 Kb -androidx.core:core:1.17.0 : 1376 Kb +androidx.collection:collection-jvm:1.4.2 : 757 Kb +androidx.core:core-ktx:1.15.0 : 171 Kb +androidx.core:core:1.15.0 : 1304 Kb androidx.lifecycle:lifecycle-common:2.6.2 : 51 Kb androidx.lifecycle:lifecycle-runtime:2.6.2 : 21 Kb androidx.versionedparcelable:versionedparcelable:1.1.1 : 30 Kb -com.google.code.gson:gson:2.10.1 : 276 Kb -com.google.guava:listenablefuture:1.0 : 3 Kb -com.squareup.okhttp3:okhttp:4.12.0 : 771 Kb -com.squareup.okio:okio-jvm:3.6.0 : 351 Kb -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 : 959 b -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 : 965 b +com.google.code.gson:gson:2.8.9 : 252 Kb +com.squareup.okhttp3:okhttp:4.9.0 : 772 Kb +com.squareup.okio:okio:2.8.0 : 237 Kb org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb -org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 : 19 Kb -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 : 1510 Kb -org.jetbrains:annotations:23.0.0 : 28 Kb -org.jspecify:jspecify:1.0.0 : 3 Kb +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 : 19 Kb +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4 : 1442 Kb +org.jetbrains:annotations:13.0 : 17 Kb -Total transitive dependencies size : 7 Mb +Total transitive dependencies size : 6 Mb diff --git a/features/dd-sdk-android-rum-debug-widget/build.gradle.kts b/features/dd-sdk-android-rum-debug-widget/build.gradle.kts index 29a158dfb2..fda3551e75 100644 --- a/features/dd-sdk-android-rum-debug-widget/build.gradle.kts +++ b/features/dd-sdk-android-rum-debug-widget/build.gradle.kts @@ -61,6 +61,8 @@ dependencies { testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.okHttp) + testImplementation(libs.gson) unmock(libs.robolectric) } diff --git a/features/dd-sdk-android-rum-debug-widget/transitiveDependencies b/features/dd-sdk-android-rum-debug-widget/transitiveDependencies index 6eaa10ca29..0e0022f9bc 100644 --- a/features/dd-sdk-android-rum-debug-widget/transitiveDependencies +++ b/features/dd-sdk-android-rum-debug-widget/transitiveDependencies @@ -1,32 +1,31 @@ Dependencies List -androidx.activity:activity:1.7.2 : 139 Kb -androidx.annotation:annotation-experimental:1.4.1 : 38 Kb +androidx.activity:activity:1.5.1 : 90 Kb +androidx.annotation:annotation-experimental:1.3.0 : 35 Kb androidx.annotation:annotation-jvm:1.9.1 : 59 Kb -androidx.arch.core:core-common:2.2.0 : 11 Kb -androidx.arch.core:core-runtime:2.2.0 : 7 Kb -androidx.collection:collection-jvm:1.4.5 : 770 Kb -androidx.core:core-ktx:1.17.0 : 168 Kb -androidx.core:core-viewtree:1.0.0 : 6 Kb -androidx.core:core:1.17.0 : 1376 Kb +androidx.arch.core:core-common:2.1.0 : 10 Kb +androidx.arch.core:core-runtime:2.1.0 : 5 Kb +androidx.collection:collection-jvm:1.4.2 : 757 Kb +androidx.core:core-ktx:1.12.0 : 169 Kb +androidx.core:core:1.12.0 : 1291 Kb androidx.customview:customview:1.1.0 : 32 Kb -androidx.fragment:fragment:1.6.2 : 345 Kb -androidx.lifecycle:lifecycle-common:2.6.2 : 51 Kb -androidx.lifecycle:lifecycle-livedata-core:2.6.2 : 11 Kb -androidx.lifecycle:lifecycle-livedata:2.6.2 : 18 Kb -androidx.lifecycle:lifecycle-runtime:2.6.2 : 21 Kb -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2 : 38 Kb -androidx.lifecycle:lifecycle-viewmodel:2.6.2 : 38 Kb +androidx.fragment:fragment:1.5.4 : 329 Kb +androidx.lifecycle:lifecycle-common:2.5.1 : 23 Kb +androidx.lifecycle:lifecycle-livedata-core:2.5.1 : 9 Kb +androidx.lifecycle:lifecycle-livedata:2.0.0 : 9 Kb +androidx.lifecycle:lifecycle-runtime:2.5.1 : 12 Kb +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.1 : 34 Kb +androidx.lifecycle:lifecycle-viewmodel:2.5.1 : 34 Kb androidx.loader:loader:1.0.0 : 32 Kb -androidx.savedstate:savedstate:1.2.1 : 19 Kb +androidx.savedstate:savedstate:1.2.0 : 18 Kb androidx.versionedparcelable:versionedparcelable:1.1.1 : 30 Kb androidx.viewpager:viewpager:1.0.0 : 52 Kb -com.google.guava:listenablefuture:1.0 : 3 Kb +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0 : 963 b +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0 : 968 b org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb -org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 : 19 Kb -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 : 1510 Kb -org.jetbrains:annotations:23.0.0 : 28 Kb -org.jspecify:jspecify:1.0.0 : 3 Kb +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1 : 19 Kb +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.1 : 1457 Kb +org.jetbrains:annotations:13.0 : 17 Kb Total transitive dependencies size : 6 Mb diff --git a/features/dd-sdk-android-rum/build.gradle.kts b/features/dd-sdk-android-rum/build.gradle.kts index 97bf67e8f7..f629f226ad 100644 --- a/features/dd-sdk-android-rum/build.gradle.kts +++ b/features/dd-sdk-android-rum/build.gradle.kts @@ -60,8 +60,8 @@ dependencies { api(project(":dd-sdk-android-core")) implementation(project(":dd-sdk-android-internal")) implementation(libs.kotlin) - implementation(libs.gson) - implementation(libs.okHttp) + compileOnly(libs.gson) + compileOnly(libs.okHttp) // Android Instrumentation implementation(libs.androidXCore) @@ -83,6 +83,7 @@ dependencies { } testImplementation(libs.bundles.jUnit5) + testImplementation(libs.gson) testImplementation(libs.bundles.testTools) testImplementation(libs.okHttp) testImplementation(libs.okHttpMock) diff --git a/features/dd-sdk-android-rum/transitiveDependencies b/features/dd-sdk-android-rum/transitiveDependencies index c24b89d6f3..a9e1199775 100644 --- a/features/dd-sdk-android-rum/transitiveDependencies +++ b/features/dd-sdk-android-rum/transitiveDependencies @@ -1,50 +1,47 @@ Dependencies List -androidx.activity:activity-ktx:1.7.2 : 25 Kb -androidx.activity:activity:1.7.2 : 139 Kb -androidx.annotation:annotation-experimental:1.4.1 : 38 Kb +androidx.activity:activity-ktx:1.5.1 : 30 Kb +androidx.activity:activity:1.5.1 : 90 Kb +androidx.annotation:annotation-experimental:1.3.0 : 35 Kb androidx.annotation:annotation-jvm:1.9.1 : 59 Kb -androidx.arch.core:core-common:2.2.0 : 11 Kb -androidx.arch.core:core-runtime:2.2.0 : 7 Kb -androidx.collection:collection-jvm:1.4.5 : 770 Kb -androidx.collection:collection-ktx:1.4.5 : 261 b -androidx.core:core-ktx:1.17.0 : 168 Kb -androidx.core:core-viewtree:1.0.0 : 6 Kb -androidx.core:core:1.17.0 : 1376 Kb +androidx.arch.core:core-common:2.1.0 : 10 Kb +androidx.arch.core:core-runtime:2.1.0 : 5 Kb +androidx.collection:collection-jvm:1.4.2 : 757 Kb +androidx.collection:collection-ktx:1.4.2 : 261 b +androidx.core:core-ktx:1.12.0 : 169 Kb +androidx.core:core:1.12.0 : 1291 Kb androidx.customview:customview:1.1.0 : 32 Kb -androidx.fragment:fragment-ktx:1.6.2 : 29 Kb -androidx.fragment:fragment:1.6.2 : 345 Kb -androidx.lifecycle:lifecycle-common:2.6.2 : 51 Kb -androidx.lifecycle:lifecycle-livedata-core-ktx:2.6.2 : 20 Kb -androidx.lifecycle:lifecycle-livedata-core:2.6.2 : 11 Kb -androidx.lifecycle:lifecycle-livedata:2.6.2 : 18 Kb -androidx.lifecycle:lifecycle-runtime-ktx:2.6.2 : 60 Kb -androidx.lifecycle:lifecycle-runtime:2.6.2 : 21 Kb -androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2 : 4 Kb -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2 : 38 Kb -androidx.lifecycle:lifecycle-viewmodel:2.6.2 : 38 Kb +androidx.fragment:fragment-ktx:1.5.4 : 28 Kb +androidx.fragment:fragment:1.5.4 : 329 Kb +androidx.lifecycle:lifecycle-common:2.5.1 : 23 Kb +androidx.lifecycle:lifecycle-livedata-core-ktx:2.5.1 : 19 Kb +androidx.lifecycle:lifecycle-livedata-core:2.5.1 : 9 Kb +androidx.lifecycle:lifecycle-livedata:2.0.0 : 9 Kb +androidx.lifecycle:lifecycle-runtime-ktx:2.5.1 : 77 Kb +androidx.lifecycle:lifecycle-runtime:2.5.1 : 12 Kb +androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1 : 3 Kb +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.1 : 34 Kb +androidx.lifecycle:lifecycle-viewmodel:2.5.1 : 34 Kb androidx.loader:loader:1.0.0 : 32 Kb androidx.metrics:metrics-performance:1.0.0-beta03 : 49 Kb -androidx.navigation:navigation-common:2.7.7 : 180 Kb -androidx.navigation:navigation-fragment:2.7.7 : 92 Kb -androidx.navigation:navigation-runtime:2.7.7 : 126 Kb -androidx.recyclerview:recyclerview:1.3.2 : 399 Kb -androidx.savedstate:savedstate-ktx:1.2.1 : 3 Kb -androidx.savedstate:savedstate:1.2.1 : 19 Kb +androidx.navigation:navigation-common:2.5.3 : 152 Kb +androidx.navigation:navigation-fragment:2.5.3 : 66 Kb +androidx.navigation:navigation-runtime:2.5.3 : 118 Kb +androidx.recyclerview:recyclerview:1.2.1 : 384 Kb +androidx.savedstate:savedstate-ktx:1.2.0 : 2 Kb +androidx.savedstate:savedstate:1.2.0 : 18 Kb androidx.slidingpanelayout:slidingpanelayout:1.2.0 : 37 Kb androidx.versionedparcelable:versionedparcelable:1.1.1 : 30 Kb androidx.viewpager:viewpager:1.0.0 : 52 Kb -com.google.code.gson:gson:2.10.1 : 276 Kb -com.google.guava:listenablefuture:1.0 : 3 Kb -com.squareup.okhttp3:okhttp:4.12.0 : 771 Kb -com.squareup.okio:okio-jvm:3.6.0 : 351 Kb -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 : 959 b -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 : 965 b +com.google.code.gson:gson:2.8.9 : 252 Kb +com.squareup.okhttp3:okhttp:4.9.0 : 772 Kb +com.squareup.okio:okio:2.8.0 : 237 Kb +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0 : 963 b +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0 : 968 b org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb -org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 : 19 Kb -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 : 1510 Kb -org.jetbrains:annotations:23.0.0 : 28 Kb -org.jspecify:jspecify:1.0.0 : 3 Kb +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1 : 19 Kb +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.1 : 1457 Kb +org.jetbrains:annotations:13.0 : 17 Kb Total transitive dependencies size : 8 Mb diff --git a/features/dd-sdk-android-session-replay-compose-noop/ComposeInternals.md b/features/dd-sdk-android-session-replay-compose-noop/ComposeInternals.md new file mode 100644 index 0000000000..7fb862a20c --- /dev/null +++ b/features/dd-sdk-android-session-replay-compose-noop/ComposeInternals.md @@ -0,0 +1,86 @@ + +## ComposeView & AndroidComposeView + +The `ComposeView` or one of its children (typically an `AndroidComposeView`) will contain a `Composition` object +in it's internal tags with the key `androidx.compose.ui.R.id.wrapped_composition_tag`. + +It will be an instance of the `WrappedComposition` class which in turns holds a `CompositionImpl` instance, +from which we get a `Composer` instance. + +```mermaid +classDiagram + direction BT + View : +SparseArray[Any] keyedTags + ViewGroup --|> View + ComposeView --|> ViewGroup + AndroidComposeView --|> ViewGroup +``` + +```mermaid +classDiagram + direction BT + WrappedComposition --|> Composition + WrappedComposition: +Composition original + CompositionImpl --|> Composition + CompositionImpl: +Composer composer +``` + +## Composer + +```mermaid +classDiagram + direction LR + Composer: +CompositionData compositionData + Composer "1" --* "1" CompositionData + CompositionData: +Iterable[CompositionGroup] compositionGroups + CompositionData: +Iterable[Any?] data + CompositionData "1" --* "*" CompositionGroup + CompositionGroup --|> CompositionData + CompositionGroup: +Node node + CompositionGroup: +String sourceInfo +``` + +Quoting from the KDoc: + +- `CompositionData` is the data tracked by the composer during composition. +- `CompositionGroup` is a group of data slots tracked independently by composition (e.g. one branch of an if-else). It contains: + - A `sourceInfo` String giving insights about the source code (file, line number, …) which generated this group + - An `identity` key identifying a group through recompositions + - An optional `node` representing an actual Node + - The `data` corresponds to the composable inputs and parameters. Some known types of data are: + - `CompositionContextHolder`: an entity holding a set of `Composer` objects, corresponding to sub-composed groups. + - … + +## Source Info + +The Source Info param is a string generated at compile time, +providing several pieces of information about the compose group. + +Based on the UI Tooling library, it contains a list of tokens formatted as follows: + +- `C` an inlined call to a composable function +- `C(name)` a call to a composable function +- `P(parameters)` the parameters information, as a comma separated list of params formatted as follows: + - `\d+` : the index ot the param as a number + - `\d+:inline-class`: the index ot the param as a number, followed by the inline class (which contains anything but `,` or `!`) + - `!\d+`: a run number (refers to the first n parameters of the call) +- `\d+@\d+L\d+`: a source location info, with three numbers : + - A 0 offset line number of the source location. + - Offset into the file. The offset is calculated as the number of UTF-16 code units from the beginning of the file to the first UTF-16 code unit of the call that produced the group. + - The length of the source code. The length is calculated as the number of UTF-16 code units that that make up the call expression. +- `*`: indicate a repeat point in the list of source location info available in this source info +- `:source_file.kt#hash`: indicates the name of the file with the code for this compose group. The hash that follows the `#` sign represents a hash code of the package name of the file. This can be used to disambiguate which file is referenced by `source_file.kt`. + +## RecomposeScopeImpl + +Some CompositionGroup will hold in their `data` Iterable an instance of `RecomposeScopeImpl`, which will hold a +`block` lambda. That block lambda is used to actually perform the composition job, and is only called +when an update is needed. + +This lambda is essentially a Single Abstract Method interface, which implementations hold the parameter to +the `@Composable` methods (e.g. it'll hold the `text` String param to the `Text()` function). + +Each parameter becomes a property of the Composable class, generated by the Compose compiler. +We can then read each field automatically to get access to the value passed as parameters. + + diff --git a/features/dd-sdk-android-session-replay-compose-noop/README.md b/features/dd-sdk-android-session-replay-compose-noop/README.md new file mode 100644 index 0000000000..0e85dded93 --- /dev/null +++ b/features/dd-sdk-android-session-replay-compose-noop/README.md @@ -0,0 +1,5 @@ +# Datadog Session Replay Extension Support for Jetpack Compose + +See the dedicated [Datadog Android Session Replay documentation][1] to learn how to add this extension when configuring Session Replay feature for your application. + +[1]: https://docs.datadoghq.com/real_user_monitoring/session_replay/mobile/setup_and_configuration/?tab=android \ No newline at end of file diff --git a/features/dd-sdk-android-session-replay-compose-noop/api/apiSurface b/features/dd-sdk-android-session-replay-compose-noop/api/apiSurface new file mode 100644 index 0000000000..f4158074b6 --- /dev/null +++ b/features/dd-sdk-android-session-replay-compose-noop/api/apiSurface @@ -0,0 +1,10 @@ +class com.datadog.android.sessionreplay.compose.ComposeExtensionSupport : com.datadog.android.sessionreplay.ExtensionSupport + override fun getCustomViewMappers(): List> + override fun getCustomDrawableMapper(): List + override fun getOptionSelectorDetectors(): List + override fun name(): String +annotation com.datadog.android.sessionreplay.compose.ExperimentalSessionReplayApi +fun androidx.compose.ui.Modifier.sessionReplayHidden(Boolean): androidx.compose.ui.Modifier +fun androidx.compose.ui.Modifier.sessionReplayImagePrivacy(com.datadog.android.sessionreplay.ImagePrivacy): androidx.compose.ui.Modifier +fun androidx.compose.ui.Modifier.sessionReplayTouchPrivacy(com.datadog.android.sessionreplay.TouchPrivacy): androidx.compose.ui.Modifier +fun androidx.compose.ui.Modifier.sessionReplayTextAndInputPrivacy(com.datadog.android.sessionreplay.TextAndInputPrivacy): androidx.compose.ui.Modifier diff --git a/features/dd-sdk-android-session-replay-compose-noop/api/compiler-meta.txt b/features/dd-sdk-android-session-replay-compose-noop/api/compiler-meta.txt new file mode 100644 index 0000000000..80973b105c --- /dev/null +++ b/features/dd-sdk-android-session-replay-compose-noop/api/compiler-meta.txt @@ -0,0 +1,2 @@ +kotlin_abi_version=1.8.0 +jvm_bytecode_version=11 diff --git a/features/dd-sdk-android-session-replay-compose-noop/api/dd-sdk-android-session-replay-compose-noop.api b/features/dd-sdk-android-session-replay-compose-noop/api/dd-sdk-android-session-replay-compose-noop.api new file mode 100644 index 0000000000..f995c27bee --- /dev/null +++ b/features/dd-sdk-android-session-replay-compose-noop/api/dd-sdk-android-session-replay-compose-noop.api @@ -0,0 +1,19 @@ +public final class com/datadog/android/sessionreplay/compose/ComposeExtensionSupport : com/datadog/android/sessionreplay/ExtensionSupport { + public static final field $stable I + public fun ()V + public fun getCustomDrawableMapper ()Ljava/util/List; + public fun getCustomViewMappers ()Ljava/util/List; + public fun getOptionSelectorDetectors ()Ljava/util/List; + public fun name ()Ljava/lang/String; +} + +public abstract interface annotation class com/datadog/android/sessionreplay/compose/ExperimentalSessionReplayApi : java/lang/annotation/Annotation { +} + +public final class com/datadog/android/sessionreplay/compose/ModifierExtKt { + public static final fun sessionReplayHidden (Landroidx/compose/ui/Modifier;Z)Landroidx/compose/ui/Modifier; + public static final fun sessionReplayImagePrivacy (Landroidx/compose/ui/Modifier;Lcom/datadog/android/sessionreplay/ImagePrivacy;)Landroidx/compose/ui/Modifier; + public static final fun sessionReplayTextAndInputPrivacy (Landroidx/compose/ui/Modifier;Lcom/datadog/android/sessionreplay/TextAndInputPrivacy;)Landroidx/compose/ui/Modifier; + public static final fun sessionReplayTouchPrivacy (Landroidx/compose/ui/Modifier;Lcom/datadog/android/sessionreplay/TouchPrivacy;)Landroidx/compose/ui/Modifier; +} + diff --git a/features/dd-sdk-android-session-replay-compose-noop/api/dd-sdk-android-session-replay-compose.api b/features/dd-sdk-android-session-replay-compose-noop/api/dd-sdk-android-session-replay-compose.api new file mode 100644 index 0000000000..5ea08c9731 --- /dev/null +++ b/features/dd-sdk-android-session-replay-compose-noop/api/dd-sdk-android-session-replay-compose.api @@ -0,0 +1,19 @@ +public final class com/datadog/android/sessionreplay/compose/ComposeExtensionSupport : com/datadog/android/sessionreplay/ExtensionSupport { + public static final field $stable I + public fun ()V + public fun getCustomDrawableMapper ()Ljava/util/List; + public fun getCustomViewMappers ()Ljava/util/List; + public fun getOptionSelectorDetectors ()Ljava/util/List; + public fun name ()Ljava/lang/String; +} + +public abstract interface annotation class com/datadog/android/sessionreplay/compose/ExperimentalSessionReplayApi : java/lang/annotation/Annotation { +} + +public final class com/datadog/android/sessionreplay/compose/ModifierExtKt { + public static final fun sessionReplayHide (Landroidx/compose/ui/Modifier;Z)Landroidx/compose/ui/Modifier; + public static final fun sessionReplayImagePrivacy (Landroidx/compose/ui/Modifier;Lcom/datadog/android/sessionreplay/ImagePrivacy;)Landroidx/compose/ui/Modifier; + public static final fun sessionReplayTextAndInputPrivacy (Landroidx/compose/ui/Modifier;Lcom/datadog/android/sessionreplay/TextAndInputPrivacy;)Landroidx/compose/ui/Modifier; + public static final fun sessionReplayTouchPrivacy (Landroidx/compose/ui/Modifier;Lcom/datadog/android/sessionreplay/TouchPrivacy;)Landroidx/compose/ui/Modifier; +} + diff --git a/features/dd-sdk-android-session-replay-compose-noop/build.gradle.kts b/features/dd-sdk-android-session-replay-compose-noop/build.gradle.kts new file mode 100644 index 0000000000..580864daa6 --- /dev/null +++ b/features/dd-sdk-android-session-replay-compose-noop/build.gradle.kts @@ -0,0 +1,67 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +import com.datadog.gradle.config.androidLibraryConfig +import com.datadog.gradle.config.dependencyUpdateConfig +import com.datadog.gradle.config.detektCustomConfig +import com.datadog.gradle.config.javadocConfig +import com.datadog.gradle.config.kotlinConfig +import com.datadog.gradle.config.publishingConfig +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +plugins { + // Build + id("com.android.library") + kotlin("android") + alias(libs.plugins.composeCompilerPlugin) + + // Publish + `maven-publish` + signing + id("org.jetbrains.dokka-javadoc") + + // Analysis tools + id("com.github.ben-manes.versions") + + // Internal Generation + id("com.datadoghq.dependency-license") + id("apiSurface") + id("transitiveDependencies") + id("verificationXml") + id("binary-compatibility-validator") +} + +android { + namespace = "com.datadog.android.sessionreplay.compose" + + defaultConfig { + consumerProguardFiles("consumer-rules.pro") + } + buildFeatures { + compose = true + } +} + +dependencies { + api(project(":features:dd-sdk-android-session-replay-noop")) + implementation(project(":dd-sdk-android-internal")) + implementation(libs.kotlin) + implementation(libs.gson) + + implementation(platform(libs.androidXComposeBom)) + implementation(libs.bundles.androidXCompose) + implementation(libs.androidXComposeMaterial) +} + +kotlinConfig(jvmBytecodeTarget = JvmTarget.JVM_11) +androidLibraryConfig() +javadocConfig() +dependencyUpdateConfig() +publishingConfig( + "Session Replay Extension Support for Jetpack Compose.", + customArtifactId = "dd-sdk-android-session-replay-compose-noop" +) +detektCustomConfig() diff --git a/features/dd-sdk-android-session-replay-compose-noop/consumer-rules.pro b/features/dd-sdk-android-session-replay-compose-noop/consumer-rules.pro new file mode 100644 index 0000000000..d9359699f7 --- /dev/null +++ b/features/dd-sdk-android-session-replay-compose-noop/consumer-rules.pro @@ -0,0 +1,92 @@ +# Keep the Compose internals class name. We need this in the SR recorder. +-keepnames class androidx.compose.runtime.Composition +-keepnames class androidx.compose.ui.platform.ComposeView +-keepnames class androidx.compose.material.DefaultButtonColors +-keep class androidx.compose.ui.platform.WrappedComposition { + ; +} +-keepclassmembers class androidx.compose.ui.platform.AbstractComposeView { + ; +} +-keepclassmembers class androidx.compose.ui.platform.AndroidComposeView { + ; +} +-keepclassmembers class androidx.compose.foundation.text.modifiers.TextStringSimpleElement { + ; +} +-keep class androidx.compose.material.CheckDrawingCache { + ; +} +-keep class androidx.compose.material.CheckboxKt$CheckboxImpl$1$1 { + ; +} +-keep class androidx.compose.material.RadioButtonKt$RadioButton$2$1 { + ; +} +-keep class androidx.compose.ui.draw.DrawBehindElement { + ; +} +-keepclassmembers class androidx.compose.foundation.BackgroundElement { + ; +} +-keep class androidx.compose.ui.node.LayoutNode { + *; +} +-keep class androidx.compose.ui.node.NodeChain { + ; +} +-keep class androidx.compose.ui.Modifier$Node{ + ; +} +-keep class coil3.compose.internal.ContentPainterNode{ + ; +} +-keep class coil3.compose.AsyncImagePainter{ + ; +} + +-keep class androidx.compose.ui.semantics.SemanticsNode { + ; +} +-keep class androidx.compose.ui.draw.PainterElement { + ; +} +-keep class androidx.compose.ui.graphics.vector.VectorPainter { + ; +} +-keep class androidx.compose.ui.graphics.painter.BitmapPainter { + ; +} +-keep class androidx.compose.ui.graphics.vector.VectorComponent { + ; +} +-keep class androidx.compose.ui.graphics.vector.DrawCache { + ; +} +-keep class androidx.compose.ui.graphics.AndroidImageBitmap { + ; +} +-keep class coil.compose.ContentPainterElement { + ; +} +-keep class coil.compose.ContentPainterModifier { + ; +} +-keep class coil.compose.AsyncImagePainter { + ; +} +-keep class androidx.compose.foundation.layout.PaddingElement{ + ; +} +-keep class androidx.compose.ui.graphics.GraphicsLayerElement{ + ; +} +-keep class androidx.compose.ui.text.ParagraphInfo{ + ; +} +-keep class androidx.compose.ui.text.AndroidParagraph{ + ; +} +-keep class androidx.compose.ui.text.android.TextLayout{ + ; +} diff --git a/features/dd-sdk-android-session-replay-compose-noop/src/main/kotlin/com/datadog/android/sessionreplay/compose/ComposeExtensionSupport.kt b/features/dd-sdk-android-session-replay-compose-noop/src/main/kotlin/com/datadog/android/sessionreplay/compose/ComposeExtensionSupport.kt new file mode 100644 index 0000000000..f1b4c83fa2 --- /dev/null +++ b/features/dd-sdk-android-session-replay-compose-noop/src/main/kotlin/com/datadog/android/sessionreplay/compose/ComposeExtensionSupport.kt @@ -0,0 +1,30 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.sessionreplay.compose + +import com.datadog.android.sessionreplay.ExtensionSupport +import com.datadog.android.sessionreplay.MapperTypeWrapper + +/** + * [ExtensionSupport] implementation for Compose. + */ +@Suppress("UNUSED_PARAMETER") +class ComposeExtensionSupport : ExtensionSupport { + override fun getCustomViewMappers(): List> { + return emptyList() + } + + override fun getCustomDrawableMapper(): List { + return emptyList() + } + + override fun getOptionSelectorDetectors(): List { + return emptyList() + } + + override fun name(): String = "" +} diff --git a/features/dd-sdk-android-session-replay-compose-noop/src/main/kotlin/com/datadog/android/sessionreplay/compose/ExperimentalSessionReplayApi.kt b/features/dd-sdk-android-session-replay-compose-noop/src/main/kotlin/com/datadog/android/sessionreplay/compose/ExperimentalSessionReplayApi.kt new file mode 100644 index 0000000000..eeb0fb89f4 --- /dev/null +++ b/features/dd-sdk-android-session-replay-compose-noop/src/main/kotlin/com/datadog/android/sessionreplay/compose/ExperimentalSessionReplayApi.kt @@ -0,0 +1,17 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.sessionreplay.compose + +/** + * Marker for the experimental Session Replay API. + */ +@RequiresOptIn( + message = "This is an experimental Session Replay API. It may change in the future.", + level = RequiresOptIn.Level.WARNING +) +@Retention(AnnotationRetention.BINARY) +annotation class ExperimentalSessionReplayApi diff --git a/features/dd-sdk-android-session-replay-compose-noop/src/main/kotlin/com/datadog/android/sessionreplay/compose/ModifierExt.kt b/features/dd-sdk-android-session-replay-compose-noop/src/main/kotlin/com/datadog/android/sessionreplay/compose/ModifierExt.kt new file mode 100644 index 0000000000..5c11e240e5 --- /dev/null +++ b/features/dd-sdk-android-session-replay-compose-noop/src/main/kotlin/com/datadog/android/sessionreplay/compose/ModifierExt.kt @@ -0,0 +1,36 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.sessionreplay.compose + +import androidx.compose.ui.Modifier +import com.datadog.android.sessionreplay.ImagePrivacy +import com.datadog.android.sessionreplay.TextAndInputPrivacy +import com.datadog.android.sessionreplay.TouchPrivacy + +/** + * Extension functions to hide/unhide a Composable from Session Replay. + */ +@Suppress("UNUSED_PARAMETER") +fun Modifier.sessionReplayHidden(hidden: Boolean): Modifier = this + +/** + * Extension functions to override the image privacy for a Composable in Session Replay. + */ +@Suppress("UNUSED_PARAMETER") +fun Modifier.sessionReplayImagePrivacy(imagePrivacy: ImagePrivacy): Modifier = this + +/** + * Extension functions to override the touch privacy for a Composable in Session Replay. + */ +@Suppress("UNUSED_PARAMETER") +fun Modifier.sessionReplayTouchPrivacy(touchPrivacy: TouchPrivacy): Modifier = this + +/** + * Extension functions to override the text and input privacy for a Composable in Session Replay. + */ +@Suppress("UNUSED_PARAMETER") +fun Modifier.sessionReplayTextAndInputPrivacy(textAndInputPrivacy: TextAndInputPrivacy): Modifier = this diff --git a/features/dd-sdk-android-session-replay-compose-noop/transitiveDependencies b/features/dd-sdk-android-session-replay-compose-noop/transitiveDependencies new file mode 100644 index 0000000000..fc1411e2d0 --- /dev/null +++ b/features/dd-sdk-android-session-replay-compose-noop/transitiveDependencies @@ -0,0 +1,55 @@ +Dependencies List + +androidx.activity:activity-compose:1.7.0 : 1082 Kb +androidx.activity:activity-ktx:1.7.0 : 25 Kb +androidx.activity:activity:1.7.0 : 139 Kb +androidx.annotation:annotation-experimental:1.3.0 : 35 Kb +androidx.annotation:annotation-jvm:1.9.1 : 59 Kb +androidx.arch.core:core-common:2.2.0 : 11 Kb +androidx.collection:collection:1.2.0 : 39 Kb +androidx.compose.animation:animation-android:1.5.4 : 1309 Kb +androidx.compose.animation:animation-core-android:1.5.4 : 1338 Kb +androidx.compose.foundation:foundation-android:1.5.4 : 3 Mb +androidx.compose.foundation:foundation-layout-android:1.5.4 : 525 Kb +androidx.compose.material:material-android:1.5.4 : 2 Mb +androidx.compose.material:material-icons-core-android:1.5.4 : 700 Kb +androidx.compose.material:material-ripple-android:1.5.4 : 73 Kb +androidx.compose.runtime:runtime-android:1.5.4 : 2 Mb +androidx.compose.runtime:runtime-saveable-android:1.5.4 : 1087 Kb +androidx.compose.ui:ui-android:1.5.4 : 4 Mb +androidx.compose.ui:ui-geometry-android:1.5.4 : 36 Kb +androidx.compose.ui:ui-graphics-android:1.5.4 : 1422 Kb +androidx.compose.ui:ui-text-android:1.5.4 : 770 Kb +androidx.compose.ui:ui-tooling-android:1.5.4 : 222 Kb +androidx.compose.ui:ui-tooling-data-android:1.5.4 : 36 Kb +androidx.compose.ui:ui-tooling-preview-android:1.5.4 : 13 Kb +androidx.compose.ui:ui-unit-android:1.5.4 : 64 Kb +androidx.core:core-ktx:1.10.0 : 178 Kb +androidx.core:core:1.10.0 : 1219 Kb +androidx.lifecycle:lifecycle-common-java8:2.6.1 : 261 b +androidx.lifecycle:lifecycle-common:2.6.1 : 51 Kb +androidx.lifecycle:lifecycle-livedata-core:2.6.1 : 11 Kb +androidx.lifecycle:lifecycle-runtime-ktx:2.6.1 : 60 Kb +androidx.lifecycle:lifecycle-runtime:2.6.1 : 21 Kb +androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1 : 21 Kb +androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1 : 4 Kb +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1 : 38 Kb +androidx.lifecycle:lifecycle-viewmodel:2.6.1 : 38 Kb +androidx.navigation:navigation-common-ktx:2.6.0 : 2 Kb +androidx.navigation:navigation-common:2.6.0 : 178 Kb +androidx.navigation:navigation-compose:2.6.0 : 1110 Kb +androidx.navigation:navigation-runtime-ktx:2.6.0 : 2 Kb +androidx.navigation:navigation-runtime:2.6.0 : 125 Kb +androidx.savedstate:savedstate-ktx:1.2.1 : 3 Kb +androidx.savedstate:savedstate:1.2.1 : 19 Kb +androidx.versionedparcelable:versionedparcelable:1.1.1 : 30 Kb +com.google.code.gson:gson:2.8.9 : 252 Kb +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0 : 963 b +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0 : 968 b +org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 : 19 Kb +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4 : 1442 Kb +org.jetbrains:annotations:13.0 : 17 Kb + +Total transitive dependencies size : 27 Mb + diff --git a/features/dd-sdk-android-session-replay-compose/build.gradle.kts b/features/dd-sdk-android-session-replay-compose/build.gradle.kts index 3046756b53..0131c2523b 100644 --- a/features/dd-sdk-android-session-replay-compose/build.gradle.kts +++ b/features/dd-sdk-android-session-replay-compose/build.gradle.kts @@ -71,6 +71,8 @@ dependencies { testImplementation(testFixtures(project(":dd-sdk-android-core"))) testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.gson) + testImplementation(libs.okHttp) unmock(libs.robolectric) } diff --git a/features/dd-sdk-android-session-replay-compose/transitiveDependencies b/features/dd-sdk-android-session-replay-compose/transitiveDependencies index c7cfe578f3..fc1411e2d0 100644 --- a/features/dd-sdk-android-session-replay-compose/transitiveDependencies +++ b/features/dd-sdk-android-session-replay-compose/transitiveDependencies @@ -6,7 +6,7 @@ androidx.activity:activity:1.7.0 : 139 Kb androidx.annotation:annotation-experimental:1.3.0 : 35 Kb androidx.annotation:annotation-jvm:1.9.1 : 59 Kb androidx.arch.core:core-common:2.2.0 : 11 Kb -androidx.collection:collection-jvm:1.4.5 : 770 Kb +androidx.collection:collection:1.2.0 : 39 Kb androidx.compose.animation:animation-android:1.5.4 : 1309 Kb androidx.compose.animation:animation-core-android:1.5.4 : 1338 Kb androidx.compose.foundation:foundation-android:1.5.4 : 3 Mb @@ -43,13 +43,13 @@ androidx.navigation:navigation-runtime:2.6.0 : 125 Kb androidx.savedstate:savedstate-ktx:1.2.1 : 3 Kb androidx.savedstate:savedstate:1.2.1 : 19 Kb androidx.versionedparcelable:versionedparcelable:1.1.1 : 30 Kb -com.google.code.gson:gson:2.10.1 : 276 Kb -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 : 959 b -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 : 965 b +com.google.code.gson:gson:2.8.9 : 252 Kb +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0 : 963 b +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0 : 968 b org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 : 19 Kb org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4 : 1442 Kb org.jetbrains:annotations:13.0 : 17 Kb -Total transitive dependencies size : 28 Mb +Total transitive dependencies size : 27 Mb diff --git a/features/dd-sdk-android-session-replay-material-noop/.gitignore b/features/dd-sdk-android-session-replay-material-noop/.gitignore new file mode 100644 index 0000000000..e5614b9871 --- /dev/null +++ b/features/dd-sdk-android-session-replay-material-noop/.gitignore @@ -0,0 +1,18 @@ +# Built application files +*.apk +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ + +# Gradle files +build/ diff --git a/features/dd-sdk-android-session-replay-material-noop/README.md b/features/dd-sdk-android-session-replay-material-noop/README.md new file mode 100644 index 0000000000..b854506095 --- /dev/null +++ b/features/dd-sdk-android-session-replay-material-noop/README.md @@ -0,0 +1,5 @@ +# Datadog Session Replay Extension Support for Material UI Components + +See the dedicated [Datadog Android Session Replay documentation][1] to learn how to add this extension when configuring Session Replay feature for your application. + +[1]: https://docs.datadoghq.com/real_user_monitoring/session_replay/mobile/setup_and_configuration/?tab=android \ No newline at end of file diff --git a/features/dd-sdk-android-session-replay-material-noop/api/apiSurface b/features/dd-sdk-android-session-replay-material-noop/api/apiSurface new file mode 100644 index 0000000000..473aef200f --- /dev/null +++ b/features/dd-sdk-android-session-replay-material-noop/api/apiSurface @@ -0,0 +1,5 @@ +class com.datadog.android.sessionreplay.material.MaterialExtensionSupport : com.datadog.android.sessionreplay.ExtensionSupport + override fun getCustomViewMappers(): List> + override fun getCustomDrawableMapper(): List + override fun getOptionSelectorDetectors(): List + override fun name(): String diff --git a/features/dd-sdk-android-session-replay-material-noop/api/compiler-meta.txt b/features/dd-sdk-android-session-replay-material-noop/api/compiler-meta.txt new file mode 100644 index 0000000000..80973b105c --- /dev/null +++ b/features/dd-sdk-android-session-replay-material-noop/api/compiler-meta.txt @@ -0,0 +1,2 @@ +kotlin_abi_version=1.8.0 +jvm_bytecode_version=11 diff --git a/features/dd-sdk-android-session-replay-material-noop/api/dd-sdk-android-session-replay-material-noop.api b/features/dd-sdk-android-session-replay-material-noop/api/dd-sdk-android-session-replay-material-noop.api new file mode 100644 index 0000000000..5347422127 --- /dev/null +++ b/features/dd-sdk-android-session-replay-material-noop/api/dd-sdk-android-session-replay-material-noop.api @@ -0,0 +1,8 @@ +public final class com/datadog/android/sessionreplay/material/MaterialExtensionSupport : com/datadog/android/sessionreplay/ExtensionSupport { + public fun ()V + public fun getCustomDrawableMapper ()Ljava/util/List; + public fun getCustomViewMappers ()Ljava/util/List; + public fun getOptionSelectorDetectors ()Ljava/util/List; + public fun name ()Ljava/lang/String; +} + diff --git a/features/dd-sdk-android-session-replay-material-noop/api/dd-sdk-android-session-replay-material.api b/features/dd-sdk-android-session-replay-material-noop/api/dd-sdk-android-session-replay-material.api new file mode 100644 index 0000000000..5347422127 --- /dev/null +++ b/features/dd-sdk-android-session-replay-material-noop/api/dd-sdk-android-session-replay-material.api @@ -0,0 +1,8 @@ +public final class com/datadog/android/sessionreplay/material/MaterialExtensionSupport : com/datadog/android/sessionreplay/ExtensionSupport { + public fun ()V + public fun getCustomDrawableMapper ()Ljava/util/List; + public fun getCustomViewMappers ()Ljava/util/List; + public fun getOptionSelectorDetectors ()Ljava/util/List; + public fun name ()Ljava/lang/String; +} + diff --git a/features/dd-sdk-android-session-replay-material-noop/build.gradle.kts b/features/dd-sdk-android-session-replay-material-noop/build.gradle.kts new file mode 100644 index 0000000000..8521294f99 --- /dev/null +++ b/features/dd-sdk-android-session-replay-material-noop/build.gradle.kts @@ -0,0 +1,59 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +import com.datadog.gradle.config.androidLibraryConfig +import com.datadog.gradle.config.dependencyUpdateConfig +import com.datadog.gradle.config.detektCustomConfig +import com.datadog.gradle.config.javadocConfig +import com.datadog.gradle.config.kotlinConfig +import com.datadog.gradle.config.publishingConfig +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +plugins { + // Build + id("com.android.library") + kotlin("android") + + // Publish + `maven-publish` + signing + id("org.jetbrains.dokka-javadoc") + + // Analysis tools + id("com.github.ben-manes.versions") + + // Internal Generation + id("com.datadoghq.dependency-license") + id("apiSurface") + id("transitiveDependencies") + id("verificationXml") + id("binary-compatibility-validator") +} + +android { + defaultConfig { + consumerProguardFiles("consumer-rules.pro") + } + + namespace = "com.datadog.android.sessionreplay.material" +} + +dependencies { + api(project(":features:dd-sdk-android-session-replay-noop")) + implementation(libs.kotlin) + implementation(libs.gson) + implementation(libs.googleMaterial) +} + +kotlinConfig(jvmBytecodeTarget = JvmTarget.JVM_11) +androidLibraryConfig() +javadocConfig() +dependencyUpdateConfig() +publishingConfig( + "Session Replay Extension Support for Material UI components.", + customArtifactId = "dd-sdk-android-session-replay-material-noop" +) +detektCustomConfig() diff --git a/features/dd-sdk-android-session-replay-material-noop/consumer-rules.pro b/features/dd-sdk-android-session-replay-material-noop/consumer-rules.pro new file mode 100644 index 0000000000..c76ee5abb0 --- /dev/null +++ b/features/dd-sdk-android-session-replay-material-noop/consumer-rules.pro @@ -0,0 +1,4 @@ +# Keep the optional selector class name. We need this in the SR recorder. +-keepnames class com.google.android.material.timepicker.TimePickerView +-keepnames class com.google.android.material.datepicker.MaterialCalendarGridView + diff --git a/features/dd-sdk-android-session-replay-material-noop/src/main/kotlin/com/datadog/android/sessionreplay/material/MaterialExtensionSupport.kt b/features/dd-sdk-android-session-replay-material-noop/src/main/kotlin/com/datadog/android/sessionreplay/material/MaterialExtensionSupport.kt new file mode 100644 index 0000000000..f70aea9320 --- /dev/null +++ b/features/dd-sdk-android-session-replay-material-noop/src/main/kotlin/com/datadog/android/sessionreplay/material/MaterialExtensionSupport.kt @@ -0,0 +1,30 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.sessionreplay.material + +import com.datadog.android.sessionreplay.ExtensionSupport +import com.datadog.android.sessionreplay.MapperTypeWrapper + +/** + * [ExtensionSupport] implementation for Material. + */ +@Suppress("UNUSED_PARAMETER") +class MaterialExtensionSupport : ExtensionSupport { + override fun getCustomViewMappers(): List> { + return emptyList() + } + + override fun getCustomDrawableMapper(): List { + return emptyList() + } + + override fun getOptionSelectorDetectors(): List { + return emptyList() + } + + override fun name(): String = "" +} diff --git a/features/dd-sdk-android-session-replay-material-noop/transitiveDependencies b/features/dd-sdk-android-session-replay-material-noop/transitiveDependencies new file mode 100644 index 0000000000..12d0042611 --- /dev/null +++ b/features/dd-sdk-android-session-replay-material-noop/transitiveDependencies @@ -0,0 +1,47 @@ +Dependencies List + +androidx.activity:activity:1.2.4 : 67 Kb +androidx.annotation:annotation-experimental:1.1.0 : 16 Kb +androidx.annotation:annotation-jvm:1.9.1 : 59 Kb +androidx.appcompat:appcompat-resources:1.4.2 : 65 Kb +androidx.appcompat:appcompat:1.4.2 : 1092 Kb +androidx.arch.core:core-common:2.1.0 : 10 Kb +androidx.arch.core:core-runtime:2.1.0 : 5 Kb +androidx.cardview:cardview:1.0.0 : 21 Kb +androidx.collection:collection:1.2.0 : 39 Kb +androidx.constraintlayout:constraintlayout-solver:2.0.1 : 197 Kb +androidx.constraintlayout:constraintlayout:2.0.1 : 373 Kb +androidx.coordinatorlayout:coordinatorlayout:1.1.0 : 43 Kb +androidx.core:core:1.7.0 : 957 Kb +androidx.cursoradapter:cursoradapter:1.0.0 : 10 Kb +androidx.customview:customview:1.0.0 : 32 Kb +androidx.documentfile:documentfile:1.0.0 : 10 Kb +androidx.drawerlayout:drawerlayout:1.0.0 : 31 Kb +androidx.dynamicanimation:dynamicanimation:1.0.0 : 31 Kb +androidx.fragment:fragment:1.3.6 : 291 Kb +androidx.interpolator:interpolator:1.0.0 : 7 Kb +androidx.legacy:legacy-support-core-utils:1.0.0 : 4 Kb +androidx.lifecycle:lifecycle-common:2.4.0 : 23 Kb +androidx.lifecycle:lifecycle-livedata-core:2.3.1 : 8 Kb +androidx.lifecycle:lifecycle-livedata:2.0.0 : 9 Kb +androidx.lifecycle:lifecycle-runtime:2.4.0 : 11 Kb +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1 : 15 Kb +androidx.lifecycle:lifecycle-viewmodel:2.3.1 : 10 Kb +androidx.loader:loader:1.0.0 : 32 Kb +androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 : 6 Kb +androidx.print:print:1.0.0 : 15 Kb +androidx.recyclerview:recyclerview:1.1.0 : 349 Kb +androidx.savedstate:savedstate:1.1.0 : 10 Kb +androidx.transition:transition:1.2.0 : 166 Kb +androidx.vectordrawable:vectordrawable-animated:1.1.0 : 33 Kb +androidx.vectordrawable:vectordrawable:1.1.0 : 32 Kb +androidx.versionedparcelable:versionedparcelable:1.1.1 : 30 Kb +androidx.viewpager:viewpager:1.0.0 : 52 Kb +androidx.viewpager2:viewpager2:1.0.0 : 60 Kb +com.google.android.material:material:1.3.0 : 1535 Kb +com.google.code.gson:gson:2.8.9 : 252 Kb +org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb +org.jetbrains:annotations:13.0 : 17 Kb + +Total transitive dependencies size : 7 Mb + diff --git a/features/dd-sdk-android-session-replay-material/build.gradle.kts b/features/dd-sdk-android-session-replay-material/build.gradle.kts index bc8745ff50..46ebbd4f44 100644 --- a/features/dd-sdk-android-session-replay-material/build.gradle.kts +++ b/features/dd-sdk-android-session-replay-material/build.gradle.kts @@ -61,6 +61,7 @@ dependencies { } testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.okHttp) } kotlinConfig(jvmBytecodeTarget = JvmTarget.JVM_11) diff --git a/features/dd-sdk-android-session-replay-material/transitiveDependencies b/features/dd-sdk-android-session-replay-material/transitiveDependencies index 22e0dd54cc..12d0042611 100644 --- a/features/dd-sdk-android-session-replay-material/transitiveDependencies +++ b/features/dd-sdk-android-session-replay-material/transitiveDependencies @@ -8,7 +8,7 @@ androidx.appcompat:appcompat:1.4.2 : 1092 Kb androidx.arch.core:core-common:2.1.0 : 10 Kb androidx.arch.core:core-runtime:2.1.0 : 5 Kb androidx.cardview:cardview:1.0.0 : 21 Kb -androidx.collection:collection-jvm:1.4.5 : 770 Kb +androidx.collection:collection:1.2.0 : 39 Kb androidx.constraintlayout:constraintlayout-solver:2.0.1 : 197 Kb androidx.constraintlayout:constraintlayout:2.0.1 : 373 Kb androidx.coordinatorlayout:coordinatorlayout:1.1.0 : 43 Kb @@ -23,7 +23,7 @@ androidx.interpolator:interpolator:1.0.0 : 7 Kb androidx.legacy:legacy-support-core-utils:1.0.0 : 4 Kb androidx.lifecycle:lifecycle-common:2.4.0 : 23 Kb androidx.lifecycle:lifecycle-livedata-core:2.3.1 : 8 Kb -androidx.lifecycle:lifecycle-livedata:2.1.0 : 10 Kb +androidx.lifecycle:lifecycle-livedata:2.0.0 : 9 Kb androidx.lifecycle:lifecycle-runtime:2.4.0 : 11 Kb androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1 : 15 Kb androidx.lifecycle:lifecycle-viewmodel:2.3.1 : 10 Kb @@ -39,9 +39,9 @@ androidx.versionedparcelable:versionedparcelable:1.1.1 : 30 Kb androidx.viewpager:viewpager:1.0.0 : 52 Kb androidx.viewpager2:viewpager2:1.0.0 : 60 Kb com.google.android.material:material:1.3.0 : 1535 Kb -com.google.code.gson:gson:2.10.1 : 276 Kb +com.google.code.gson:gson:2.8.9 : 252 Kb org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb org.jetbrains:annotations:13.0 : 17 Kb -Total transitive dependencies size : 8 Mb +Total transitive dependencies size : 7 Mb diff --git a/features/dd-sdk-android-session-replay-noop/.gitignore b/features/dd-sdk-android-session-replay-noop/.gitignore new file mode 100644 index 0000000000..a1f106aa0b --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/.gitignore @@ -0,0 +1,21 @@ +# Built application files +*.apk +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ + +# Gradle files +build/ + +# Generated Poko +src/main/kotlin/com/datadog/android/sessionreplay/model/ diff --git a/features/dd-sdk-android-session-replay-noop/README.md b/features/dd-sdk-android-session-replay-noop/README.md new file mode 100644 index 0000000000..e9645d0af9 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/README.md @@ -0,0 +1,5 @@ +# Datadog Session Replay SDK for Android + +See the dedicated [Datadog Android Session Replay documentation][1] to learn how to enable this feature for your application. + +[1]: https://docs.datadoghq.com/real_user_monitoring/session_replay/mobile/setup_and_configuration/?tab=android \ No newline at end of file diff --git a/features/dd-sdk-android-session-replay-noop/api/apiSurface b/features/dd-sdk-android-session-replay-noop/api/apiSurface new file mode 100644 index 0000000000..b140441956 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/api/apiSurface @@ -0,0 +1,411 @@ +interface com.datadog.android.sessionreplay.ExtensionSupport + fun getCustomViewMappers(): List> + fun getCustomDrawableMapper(): List + fun getOptionSelectorDetectors(): List + fun name(): String +enum com.datadog.android.sessionreplay.ImagePrivacy : PrivacyLevel + - MASK_ALL + - MASK_LARGE_ONLY + - MASK_NONE +class com.datadog.android.sessionreplay.MapperTypeWrapper + constructor(Class, Any) +object com.datadog.android.sessionreplay.MobileSegmentConstants + const val RECORD_TYPE_FOCUS: Long + const val RECORD_TYPE_FULL_SNAPSHOT: Long + const val RECORD_TYPE_INCREMENTAL_SNAPSHOT: Long + const val RECORD_TYPE_META: Long + const val RECORD_TYPE_VIEW_END: Long + const val RECORD_TYPE_VISUAL_VIEWPORT: Long + const val WIREFRAME_TYPE_IMAGE: String + const val WIREFRAME_TYPE_PLACEHOLDER: String + const val WIREFRAME_TYPE_SHAPE: String + const val WIREFRAME_TYPE_TEXT: String + const val WIREFRAME_TYPE_WEBVIEW: String +object com.datadog.android.sessionreplay.PrivacyConstants + const val IMAGE_DIMEN_CONSIDERED_PII_IN_DP: Int +interface com.datadog.android.sessionreplay.PrivacyLevel +fun android.view.View.setSessionReplayHidden(Boolean) +fun android.view.View.setSessionReplayImagePrivacy(ImagePrivacy) +fun android.view.View.setSessionReplayTouchPrivacy(TouchPrivacy) +fun android.view.View.setSessionReplayTextAndInputPrivacy(TextAndInputPrivacy) +object com.datadog.android.sessionreplay.SessionReplay + fun enable(SessionReplayConfiguration, com.datadog.android.api.SdkCore = Datadog.getInstance()) + fun startRecording(com.datadog.android.api.SdkCore = Datadog.getInstance()) + fun stopRecording(com.datadog.android.api.SdkCore = Datadog.getInstance()) +class com.datadog.android.sessionreplay.SessionReplayConfiguration + class Builder + fun setSampleRate(Float): Builder + fun useCustomEndpoint(String): Builder + fun setPrivacy(SessionReplayPrivacy): Builder + fun addExtensionSupport(ExtensionSupport): Builder + fun setImagePrivacy(ImagePrivacy): Builder + fun setTouchPrivacy(TouchPrivacy): Builder + fun setTextAndInputPrivacy(TextAndInputPrivacy): Builder + fun setSystemRequirementsConfiguration(SystemRequirementsConfiguration): Builder + fun build(): SessionReplayConfiguration +interface com.datadog.android.sessionreplay.SessionReplayInternalCallback + fun addResourceItem(String, ByteArray, String) + fun getCurrentActivity(): android.app.Activity? + fun setResourceQueue(SessionReplayInternalResourceQueue) +interface com.datadog.android.sessionreplay.SessionReplayInternalResourceQueue + fun addResourceItem(String, ByteArray, String) +enum com.datadog.android.sessionreplay.SessionReplayPrivacy + - MASK + - ALLOW + - MASK_USER_INPUT +class com.datadog.android.sessionreplay.SystemRequirementsConfiguration + class Builder + fun setMinRAMSizeMb(Int): Builder + fun setMinCPUCoreNumber(Int): Builder + fun build(): SystemRequirementsConfiguration + companion object + val BASIC: SystemRequirementsConfiguration + val NONE: SystemRequirementsConfiguration +enum com.datadog.android.sessionreplay.TextAndInputPrivacy : PrivacyLevel + - MASK_ALL + - MASK_ALL_INPUTS + - MASK_SENSITIVE_INPUTS +enum com.datadog.android.sessionreplay.TouchPrivacy : PrivacyLevel + - SHOW + - HIDE +class com.datadog.android.sessionreplay._SessionReplayInternalProxy + constructor(SessionReplayConfiguration.Builder) + fun setInternalCallback(SessionReplayInternalCallback): SessionReplayConfiguration.Builder +data class com.datadog.android.sessionreplay.model.MobileSegment + constructor(Application, Session, View, kotlin.Long, kotlin.Long, kotlin.Long, kotlin.Long? = null, kotlin.Boolean? = null, Source, kotlin.collections.List) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): MobileSegment + fun fromJsonObject(com.google.gson.JsonObject): MobileSegment + data class Application + constructor(kotlin.String) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Application + fun fromJsonObject(com.google.gson.JsonObject): Application + data class Session + constructor(kotlin.String) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Session + fun fromJsonObject(com.google.gson.JsonObject): Session + data class View + constructor(kotlin.String) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): View + fun fromJsonObject(com.google.gson.JsonObject): View + sealed class MobileRecord + abstract fun toJson(): com.google.gson.JsonElement + data class MobileFullSnapshotRecord : MobileRecord + constructor(kotlin.Long, Data) + val type: kotlin.Long + override fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): MobileFullSnapshotRecord + fun fromJsonObject(com.google.gson.JsonObject): MobileFullSnapshotRecord + data class MobileIncrementalSnapshotRecord : MobileRecord + constructor(kotlin.Long, MobileIncrementalData) + val type: kotlin.Long + override fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): MobileIncrementalSnapshotRecord + fun fromJsonObject(com.google.gson.JsonObject): MobileIncrementalSnapshotRecord + data class MetaRecord : MobileRecord + constructor(kotlin.Long, kotlin.String? = null, Data1) + val type: kotlin.Long + override fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): MetaRecord + fun fromJsonObject(com.google.gson.JsonObject): MetaRecord + data class FocusRecord : MobileRecord + constructor(kotlin.Long, kotlin.String? = null, Data2) + val type: kotlin.Long + override fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): FocusRecord + fun fromJsonObject(com.google.gson.JsonObject): FocusRecord + data class ViewEndRecord : MobileRecord + constructor(kotlin.Long, kotlin.String? = null) + val type: kotlin.Long + override fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): ViewEndRecord + fun fromJsonObject(com.google.gson.JsonObject): ViewEndRecord + data class VisualViewportRecord : MobileRecord + constructor(kotlin.Long, kotlin.String? = null, Data3) + val type: kotlin.Long + override fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): VisualViewportRecord + fun fromJsonObject(com.google.gson.JsonObject): VisualViewportRecord + companion object + fun fromJson(kotlin.String): MobileRecord + fun fromJsonElement(com.google.gson.JsonElement): MobileRecord + data class Data + constructor(kotlin.collections.List) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Data + fun fromJsonObject(com.google.gson.JsonObject): Data + sealed class MobileIncrementalData + abstract fun toJson(): com.google.gson.JsonElement + data class MobileMutationData : MobileIncrementalData + constructor(kotlin.collections.List, kotlin.collections.List, kotlin.collections.List) + val source: kotlin.Long + override fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): MobileMutationData + fun fromJsonObject(com.google.gson.JsonObject): MobileMutationData + data class TouchData : MobileIncrementalData + constructor(kotlin.collections.List? = null) + val source: kotlin.Long + override fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): TouchData + fun fromJsonObject(com.google.gson.JsonObject): TouchData + data class ViewportResizeData : MobileIncrementalData + constructor(kotlin.Long, kotlin.Long) + val source: kotlin.Long + override fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): ViewportResizeData + fun fromJsonObject(com.google.gson.JsonObject): ViewportResizeData + data class PointerInteractionData : MobileIncrementalData + constructor(PointerEventType, PointerType, kotlin.Long, kotlin.Number, kotlin.Number) + val source: kotlin.Long + override fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): PointerInteractionData + fun fromJsonObject(com.google.gson.JsonObject): PointerInteractionData + companion object + fun fromJson(kotlin.String): MobileIncrementalData + fun fromJsonElement(com.google.gson.JsonElement): MobileIncrementalData + data class Data1 + constructor(kotlin.Long, kotlin.Long, kotlin.String? = null) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Data1 + fun fromJsonObject(com.google.gson.JsonObject): Data1 + data class Data2 + constructor(kotlin.Boolean) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Data2 + fun fromJsonObject(com.google.gson.JsonObject): Data2 + data class Data3 + constructor(kotlin.Number, kotlin.Number, kotlin.Number, kotlin.Number, kotlin.Number, kotlin.Number, kotlin.Number) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Data3 + fun fromJsonObject(com.google.gson.JsonObject): Data3 + sealed class Wireframe + abstract fun toJson(): com.google.gson.JsonElement + data class ShapeWireframe : Wireframe + constructor(kotlin.Long, kotlin.Long, kotlin.Long, kotlin.Long, kotlin.Long, WireframeClip? = null, ShapeStyle? = null, ShapeBorder? = null) + val type: kotlin.String + override fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): ShapeWireframe + fun fromJsonObject(com.google.gson.JsonObject): ShapeWireframe + data class TextWireframe : Wireframe + constructor(kotlin.Long, kotlin.Long, kotlin.Long, kotlin.Long, kotlin.Long, WireframeClip? = null, ShapeStyle? = null, ShapeBorder? = null, kotlin.String, TextStyle, TextPosition? = null) + val type: kotlin.String + override fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): TextWireframe + fun fromJsonObject(com.google.gson.JsonObject): TextWireframe + data class ImageWireframe : Wireframe + constructor(kotlin.Long, kotlin.Long, kotlin.Long, kotlin.Long, kotlin.Long, WireframeClip? = null, ShapeStyle? = null, ShapeBorder? = null, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, kotlin.Boolean? = null) + val type: kotlin.String + override fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): ImageWireframe + fun fromJsonObject(com.google.gson.JsonObject): ImageWireframe + data class PlaceholderWireframe : Wireframe + constructor(kotlin.Long, kotlin.Long, kotlin.Long, kotlin.Long, kotlin.Long, WireframeClip? = null, kotlin.String? = null) + val type: kotlin.String + override fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): PlaceholderWireframe + fun fromJsonObject(com.google.gson.JsonObject): PlaceholderWireframe + data class WebviewWireframe : Wireframe + constructor(kotlin.Long, kotlin.Long, kotlin.Long, kotlin.Long, kotlin.Long, WireframeClip? = null, ShapeStyle? = null, ShapeBorder? = null, kotlin.String, kotlin.Boolean? = null) + val type: kotlin.String + override fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): WebviewWireframe + fun fromJsonObject(com.google.gson.JsonObject): WebviewWireframe + companion object + fun fromJson(kotlin.String): Wireframe + fun fromJsonElement(com.google.gson.JsonElement): Wireframe + data class Add + constructor(kotlin.Long? = null, Wireframe) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Add + fun fromJsonObject(com.google.gson.JsonObject): Add + data class Remove + constructor(kotlin.Long) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Remove + fun fromJsonObject(com.google.gson.JsonObject): Remove + sealed class WireframeUpdateMutation + abstract fun toJson(): com.google.gson.JsonElement + data class TextWireframeUpdate : WireframeUpdateMutation + constructor(kotlin.Long, kotlin.Long? = null, kotlin.Long? = null, kotlin.Long? = null, kotlin.Long? = null, WireframeClip? = null, ShapeStyle? = null, ShapeBorder? = null, kotlin.String? = null, TextStyle? = null, TextPosition? = null) + val type: kotlin.String + override fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): TextWireframeUpdate + fun fromJsonObject(com.google.gson.JsonObject): TextWireframeUpdate + data class ShapeWireframeUpdate : WireframeUpdateMutation + constructor(kotlin.Long, kotlin.Long? = null, kotlin.Long? = null, kotlin.Long? = null, kotlin.Long? = null, WireframeClip? = null, ShapeStyle? = null, ShapeBorder? = null) + val type: kotlin.String + override fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): ShapeWireframeUpdate + fun fromJsonObject(com.google.gson.JsonObject): ShapeWireframeUpdate + data class ImageWireframeUpdate : WireframeUpdateMutation + constructor(kotlin.Long, kotlin.Long? = null, kotlin.Long? = null, kotlin.Long? = null, kotlin.Long? = null, WireframeClip? = null, ShapeStyle? = null, ShapeBorder? = null, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, kotlin.Boolean? = null) + val type: kotlin.String + override fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): ImageWireframeUpdate + fun fromJsonObject(com.google.gson.JsonObject): ImageWireframeUpdate + data class PlaceholderWireframeUpdate : WireframeUpdateMutation + constructor(kotlin.Long, kotlin.Long? = null, kotlin.Long? = null, kotlin.Long? = null, kotlin.Long? = null, WireframeClip? = null, kotlin.String? = null) + val type: kotlin.String + override fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): PlaceholderWireframeUpdate + fun fromJsonObject(com.google.gson.JsonObject): PlaceholderWireframeUpdate + data class WebviewWireframeUpdate : WireframeUpdateMutation + constructor(kotlin.Long, kotlin.Long? = null, kotlin.Long? = null, kotlin.Long? = null, kotlin.Long? = null, WireframeClip? = null, ShapeStyle? = null, ShapeBorder? = null, kotlin.String, kotlin.Boolean? = null) + val type: kotlin.String + override fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): WebviewWireframeUpdate + fun fromJsonObject(com.google.gson.JsonObject): WebviewWireframeUpdate + companion object + fun fromJson(kotlin.String): WireframeUpdateMutation + fun fromJsonElement(com.google.gson.JsonElement): WireframeUpdateMutation + data class Position + constructor(kotlin.Long, kotlin.Long, kotlin.Long, kotlin.Long) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Position + fun fromJsonObject(com.google.gson.JsonObject): Position + data class WireframeClip + constructor(kotlin.Long? = null, kotlin.Long? = null, kotlin.Long? = null, kotlin.Long? = null) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): WireframeClip + fun fromJsonObject(com.google.gson.JsonObject): WireframeClip + data class ShapeStyle + constructor(kotlin.String? = null, kotlin.Number? = null, kotlin.Number? = null) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): ShapeStyle + fun fromJsonObject(com.google.gson.JsonObject): ShapeStyle + data class ShapeBorder + constructor(kotlin.String, kotlin.Long) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): ShapeBorder + fun fromJsonObject(com.google.gson.JsonObject): ShapeBorder + data class TextStyle + constructor(kotlin.String, kotlin.Long, kotlin.String, TruncationMode? = null) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): TextStyle + fun fromJsonObject(com.google.gson.JsonObject): TextStyle + data class TextPosition + constructor(Padding? = null, Alignment? = null) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): TextPosition + fun fromJsonObject(com.google.gson.JsonObject): TextPosition + data class Padding + constructor(kotlin.Long? = null, kotlin.Long? = null, kotlin.Long? = null, kotlin.Long? = null) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Padding + fun fromJsonObject(com.google.gson.JsonObject): Padding + data class Alignment + constructor(Horizontal? = null, Vertical? = null) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Alignment + fun fromJsonObject(com.google.gson.JsonObject): Alignment + enum Source + constructor(kotlin.String) + - ANDROID + - IOS + - FLUTTER + - REACT_NATIVE + - KOTLIN_MULTIPLATFORM + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Source + enum PointerEventType + constructor(kotlin.String) + - DOWN + - UP + - MOVE + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): PointerEventType + enum PointerType + constructor(kotlin.String) + - MOUSE + - TOUCH + - PEN + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): PointerType + enum TruncationMode + constructor(kotlin.String) + - CLIP + - HEAD + - TAIL + - MIDDLE + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): TruncationMode + enum Horizontal + constructor(kotlin.String) + - LEFT + - RIGHT + - CENTER + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Horizontal + enum Vertical + constructor(kotlin.String) + - TOP + - BOTTOM + - CENTER + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Vertical +data class com.datadog.android.sessionreplay.model.ResourceHashesEntry + constructor(kotlin.Number, kotlin.collections.List) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): ResourceHashesEntry + fun fromJsonObject(com.google.gson.JsonObject): ResourceHashesEntry +data class com.datadog.android.sessionreplay.model.ResourceMetadata + constructor(Application) + val type: kotlin.String + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): ResourceMetadata + fun fromJsonObject(com.google.gson.JsonObject): ResourceMetadata + data class Application + constructor(kotlin.String) + fun toJson(): com.google.gson.JsonElement + companion object + fun fromJson(kotlin.String): Application + fun fromJsonObject(com.google.gson.JsonObject): Application diff --git a/features/dd-sdk-android-session-replay-noop/api/compiler-meta.txt b/features/dd-sdk-android-session-replay-noop/api/compiler-meta.txt new file mode 100644 index 0000000000..80973b105c --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/api/compiler-meta.txt @@ -0,0 +1,2 @@ +kotlin_abi_version=1.8.0 +jvm_bytecode_version=11 diff --git a/features/dd-sdk-android-session-replay-noop/api/dd-sdk-android-session-replay-noop.api b/features/dd-sdk-android-session-replay-noop/api/dd-sdk-android-session-replay-noop.api new file mode 100644 index 0000000000..5284e19175 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/api/dd-sdk-android-session-replay-noop.api @@ -0,0 +1,1436 @@ +public abstract interface class com/datadog/android/sessionreplay/ExtensionSupport { + public abstract fun getCustomDrawableMapper ()Ljava/util/List; + public abstract fun getCustomViewMappers ()Ljava/util/List; + public abstract fun getOptionSelectorDetectors ()Ljava/util/List; + public abstract fun name ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/ImagePrivacy : java/lang/Enum, com/datadog/android/sessionreplay/PrivacyLevel { + public static final field MASK_ALL Lcom/datadog/android/sessionreplay/ImagePrivacy; + public static final field MASK_LARGE_ONLY Lcom/datadog/android/sessionreplay/ImagePrivacy; + public static final field MASK_NONE Lcom/datadog/android/sessionreplay/ImagePrivacy; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/ImagePrivacy; + public static fun values ()[Lcom/datadog/android/sessionreplay/ImagePrivacy; +} + +public final class com/datadog/android/sessionreplay/MapperTypeWrapper { + public fun (Ljava/lang/Class;Ljava/lang/Object;)V + public final fun getMapper ()Ljava/lang/Object; + public final fun getType ()Ljava/lang/Class; +} + +public final class com/datadog/android/sessionreplay/MobileSegmentConstants { + public static final field INSTANCE Lcom/datadog/android/sessionreplay/MobileSegmentConstants; + public static final field RECORD_TYPE_FOCUS J + public static final field RECORD_TYPE_FULL_SNAPSHOT J + public static final field RECORD_TYPE_INCREMENTAL_SNAPSHOT J + public static final field RECORD_TYPE_META J + public static final field RECORD_TYPE_VIEW_END J + public static final field RECORD_TYPE_VISUAL_VIEWPORT J + public static final field WIREFRAME_TYPE_IMAGE Ljava/lang/String; + public static final field WIREFRAME_TYPE_PLACEHOLDER Ljava/lang/String; + public static final field WIREFRAME_TYPE_SHAPE Ljava/lang/String; + public static final field WIREFRAME_TYPE_TEXT Ljava/lang/String; + public static final field WIREFRAME_TYPE_WEBVIEW Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/PrivacyConstants { + public static final field IMAGE_DIMEN_CONSIDERED_PII_IN_DP I + public static final field INSTANCE Lcom/datadog/android/sessionreplay/PrivacyConstants; +} + +public abstract interface class com/datadog/android/sessionreplay/PrivacyLevel { +} + +public final class com/datadog/android/sessionreplay/PrivacyOverrideExtensionsKt { + public static final fun setSessionReplayHidden (Landroid/view/View;Z)V + public static final fun setSessionReplayImagePrivacy (Landroid/view/View;Lcom/datadog/android/sessionreplay/ImagePrivacy;)V + public static final fun setSessionReplayTextAndInputPrivacy (Landroid/view/View;Lcom/datadog/android/sessionreplay/TextAndInputPrivacy;)V + public static final fun setSessionReplayTouchPrivacy (Landroid/view/View;Lcom/datadog/android/sessionreplay/TouchPrivacy;)V +} + +public final class com/datadog/android/sessionreplay/SessionReplay { + public static final field INSTANCE Lcom/datadog/android/sessionreplay/SessionReplay; + public static final fun enable (Lcom/datadog/android/sessionreplay/SessionReplayConfiguration;)V + public static final fun enable (Lcom/datadog/android/sessionreplay/SessionReplayConfiguration;Lcom/datadog/android/api/SdkCore;)V + public static synthetic fun enable$default (Lcom/datadog/android/sessionreplay/SessionReplayConfiguration;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V + public static final fun startRecording ()V + public static final fun startRecording (Lcom/datadog/android/api/SdkCore;)V + public static synthetic fun startRecording$default (Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V + public static final fun stopRecording ()V + public static final fun stopRecording (Lcom/datadog/android/api/SdkCore;)V + public static synthetic fun stopRecording$default (Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V +} + +public final class com/datadog/android/sessionreplay/SessionReplayConfiguration { +} + +public final class com/datadog/android/sessionreplay/SessionReplayConfiguration$Builder { + public fun ()V + public final fun addExtensionSupport (Lcom/datadog/android/sessionreplay/ExtensionSupport;)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder; + public final fun build ()Lcom/datadog/android/sessionreplay/SessionReplayConfiguration; + public final fun setImagePrivacy (Lcom/datadog/android/sessionreplay/ImagePrivacy;)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder; + public final fun setPrivacy (Lcom/datadog/android/sessionreplay/SessionReplayPrivacy;)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder; + public final fun setSampleRate (F)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder; + public final fun setSystemRequirementsConfiguration (Lcom/datadog/android/sessionreplay/SystemRequirementsConfiguration;)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder; + public final fun setTextAndInputPrivacy (Lcom/datadog/android/sessionreplay/TextAndInputPrivacy;)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder; + public final fun setTouchPrivacy (Lcom/datadog/android/sessionreplay/TouchPrivacy;)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder; + public final fun useCustomEndpoint (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder; +} + +public abstract interface class com/datadog/android/sessionreplay/SessionReplayInternalCallback { + public abstract fun addResourceItem (Ljava/lang/String;[BLjava/lang/String;)V + public abstract fun getCurrentActivity ()Landroid/app/Activity; + public abstract fun setResourceQueue (Lcom/datadog/android/sessionreplay/SessionReplayInternalResourceQueue;)V +} + +public abstract interface class com/datadog/android/sessionreplay/SessionReplayInternalResourceQueue { + public abstract fun addResourceItem (Ljava/lang/String;[BLjava/lang/String;)V +} + +public final class com/datadog/android/sessionreplay/SessionReplayPrivacy : java/lang/Enum { + public static final field ALLOW Lcom/datadog/android/sessionreplay/SessionReplayPrivacy; + public static final field MASK Lcom/datadog/android/sessionreplay/SessionReplayPrivacy; + public static final field MASK_USER_INPUT Lcom/datadog/android/sessionreplay/SessionReplayPrivacy; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/SessionReplayPrivacy; + public static fun values ()[Lcom/datadog/android/sessionreplay/SessionReplayPrivacy; +} + +public final class com/datadog/android/sessionreplay/SystemRequirementsConfiguration { + public static final field Companion Lcom/datadog/android/sessionreplay/SystemRequirementsConfiguration$Companion; + public static final fun getBASIC ()Lcom/datadog/android/sessionreplay/SystemRequirementsConfiguration; + public static final fun getNONE ()Lcom/datadog/android/sessionreplay/SystemRequirementsConfiguration; +} + +public final class com/datadog/android/sessionreplay/SystemRequirementsConfiguration$Builder { + public fun ()V + public final fun build ()Lcom/datadog/android/sessionreplay/SystemRequirementsConfiguration; + public final fun setMinCPUCoreNumber (I)Lcom/datadog/android/sessionreplay/SystemRequirementsConfiguration$Builder; + public final fun setMinRAMSizeMb (I)Lcom/datadog/android/sessionreplay/SystemRequirementsConfiguration$Builder; +} + +public final class com/datadog/android/sessionreplay/SystemRequirementsConfiguration$Companion { + public final fun getBASIC ()Lcom/datadog/android/sessionreplay/SystemRequirementsConfiguration; + public final fun getNONE ()Lcom/datadog/android/sessionreplay/SystemRequirementsConfiguration; +} + +public final class com/datadog/android/sessionreplay/TextAndInputPrivacy : java/lang/Enum, com/datadog/android/sessionreplay/PrivacyLevel { + public static final field MASK_ALL Lcom/datadog/android/sessionreplay/TextAndInputPrivacy; + public static final field MASK_ALL_INPUTS Lcom/datadog/android/sessionreplay/TextAndInputPrivacy; + public static final field MASK_SENSITIVE_INPUTS Lcom/datadog/android/sessionreplay/TextAndInputPrivacy; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/TextAndInputPrivacy; + public static fun values ()[Lcom/datadog/android/sessionreplay/TextAndInputPrivacy; +} + +public final class com/datadog/android/sessionreplay/TouchPrivacy : java/lang/Enum, com/datadog/android/sessionreplay/PrivacyLevel { + public static final field HIDE Lcom/datadog/android/sessionreplay/TouchPrivacy; + public static final field SHOW Lcom/datadog/android/sessionreplay/TouchPrivacy; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/TouchPrivacy; + public static fun values ()[Lcom/datadog/android/sessionreplay/TouchPrivacy; +} + +public final class com/datadog/android/sessionreplay/_SessionReplayInternalProxy { + public fun (Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder;)V + public final fun setInternalCallback (Lcom/datadog/android/sessionreplay/SessionReplayInternalCallback;)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Companion; + public fun (Lcom/datadog/android/sessionreplay/model/MobileSegment$Application;Lcom/datadog/android/sessionreplay/model/MobileSegment$Session;Lcom/datadog/android/sessionreplay/model/MobileSegment$View;JJJLjava/lang/Long;Ljava/lang/Boolean;Lcom/datadog/android/sessionreplay/model/MobileSegment$Source;Ljava/util/List;)V + public synthetic fun (Lcom/datadog/android/sessionreplay/model/MobileSegment$Application;Lcom/datadog/android/sessionreplay/model/MobileSegment$Session;Lcom/datadog/android/sessionreplay/model/MobileSegment$View;JJJLjava/lang/Long;Ljava/lang/Boolean;Lcom/datadog/android/sessionreplay/model/MobileSegment$Source;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Application; + public final fun component10 ()Ljava/util/List; + public final fun component2 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Session; + public final fun component3 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$View; + public final fun component4 ()J + public final fun component5 ()J + public final fun component6 ()J + public final fun component7 ()Ljava/lang/Long; + public final fun component8 ()Ljava/lang/Boolean; + public final fun component9 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; + public final fun copy (Lcom/datadog/android/sessionreplay/model/MobileSegment$Application;Lcom/datadog/android/sessionreplay/model/MobileSegment$Session;Lcom/datadog/android/sessionreplay/model/MobileSegment$View;JJJLjava/lang/Long;Ljava/lang/Boolean;Lcom/datadog/android/sessionreplay/model/MobileSegment$Source;Ljava/util/List;)Lcom/datadog/android/sessionreplay/model/MobileSegment; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment;Lcom/datadog/android/sessionreplay/model/MobileSegment$Application;Lcom/datadog/android/sessionreplay/model/MobileSegment$Session;Lcom/datadog/android/sessionreplay/model/MobileSegment$View;JJJLjava/lang/Long;Ljava/lang/Boolean;Lcom/datadog/android/sessionreplay/model/MobileSegment$Source;Ljava/util/List;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment; + public final fun getApplication ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Application; + public final fun getEnd ()J + public final fun getHasFullSnapshot ()Ljava/lang/Boolean; + public final fun getIndexInView ()Ljava/lang/Long; + public final fun getRecords ()Ljava/util/List; + public final fun getRecordsCount ()J + public final fun getSession ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Session; + public final fun getSource ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; + public final fun getStart ()J + public final fun getView ()Lcom/datadog/android/sessionreplay/model/MobileSegment$View; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Add { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Add$Companion; + public fun (Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe;)V + public synthetic fun (Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/Long; + public final fun component2 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe; + public final fun copy (Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Add; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Add;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Add; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Add; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Add; + public final fun getPreviousId ()Ljava/lang/Long; + public final fun getWireframe ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Add$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Add; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Add; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Alignment { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment$Companion; + public fun ()V + public fun (Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal;Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical;)V + public synthetic fun (Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal;Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal; + public final fun component2 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical; + public final fun copy (Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal;Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment;Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal;Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment; + public final fun getHorizontal ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal; + public final fun getVertical ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Alignment$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Application { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Application$Companion; + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Application; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Application;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Application; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Application; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Application; + public final fun getId ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Application$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Application; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Application; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Data { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Data$Companion; + public fun (Ljava/util/List;)V + public final fun component1 ()Ljava/util/List; + public final fun copy (Ljava/util/List;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Data;Ljava/util/List;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data; + public final fun getWireframes ()Ljava/util/List; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Data$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Data1 { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1$Companion; + public fun (JJLjava/lang/String;)V + public synthetic fun (JJLjava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component2 ()J + public final fun component3 ()Ljava/lang/String; + public final fun copy (JJLjava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1;JJLjava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1; + public final fun getHeight ()J + public final fun getHref ()Ljava/lang/String; + public final fun getWidth ()J + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Data1$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Data2 { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2$Companion; + public fun (Z)V + public final fun component1 ()Z + public final fun copy (Z)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2;ZILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2; + public final fun getHasFocus ()Z + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Data2$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Data3 { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3$Companion; + public fun (Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;)V + public final fun component1 ()Ljava/lang/Number; + public final fun component2 ()Ljava/lang/Number; + public final fun component3 ()Ljava/lang/Number; + public final fun component4 ()Ljava/lang/Number; + public final fun component5 ()Ljava/lang/Number; + public final fun component6 ()Ljava/lang/Number; + public final fun component7 ()Ljava/lang/Number; + public final fun copy (Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3; + public final fun getHeight ()Ljava/lang/Number; + public final fun getOffsetLeft ()Ljava/lang/Number; + public final fun getOffsetTop ()Ljava/lang/Number; + public final fun getPageLeft ()Ljava/lang/Number; + public final fun getPageTop ()Ljava/lang/Number; + public final fun getScale ()Ljava/lang/Number; + public final fun getWidth ()Ljava/lang/Number; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Data3$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Horizontal : java/lang/Enum { + public static final field CENTER Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal; + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal$Companion; + public static final field LEFT Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal; + public static final field RIGHT Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal; + public final fun toJson ()Lcom/google/gson/JsonElement; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal; + public static fun values ()[Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Horizontal$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal; +} + +public abstract class com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$Companion; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData; + public static final fun fromJsonElement (Lcom/google/gson/JsonElement;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData; + public abstract fun toJson ()Lcom/google/gson/JsonElement; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData; + public final fun fromJsonElement (Lcom/google/gson/JsonElement;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$MobileMutationData : com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$MobileMutationData$Companion; + public fun (Ljava/util/List;Ljava/util/List;Ljava/util/List;)V + public final fun component1 ()Ljava/util/List; + public final fun component2 ()Ljava/util/List; + public final fun component3 ()Ljava/util/List; + public final fun copy (Ljava/util/List;Ljava/util/List;Ljava/util/List;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$MobileMutationData; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$MobileMutationData;Ljava/util/List;Ljava/util/List;Ljava/util/List;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$MobileMutationData; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$MobileMutationData; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$MobileMutationData; + public final fun getAdds ()Ljava/util/List; + public final fun getRemoves ()Ljava/util/List; + public final fun getSource ()J + public final fun getUpdates ()Ljava/util/List; + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$MobileMutationData$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$MobileMutationData; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$MobileMutationData; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$PointerInteractionData : com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$PointerInteractionData$Companion; + public fun (Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType;Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType;JLjava/lang/Number;Ljava/lang/Number;)V + public final fun component1 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType; + public final fun component2 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType; + public final fun component3 ()J + public final fun component4 ()Ljava/lang/Number; + public final fun component5 ()Ljava/lang/Number; + public final fun copy (Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType;Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType;JLjava/lang/Number;Ljava/lang/Number;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$PointerInteractionData; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$PointerInteractionData;Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType;Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType;JLjava/lang/Number;Ljava/lang/Number;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$PointerInteractionData; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$PointerInteractionData; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$PointerInteractionData; + public final fun getPointerEventType ()Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType; + public final fun getPointerId ()J + public final fun getPointerType ()Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType; + public final fun getSource ()J + public final fun getX ()Ljava/lang/Number; + public final fun getY ()Ljava/lang/Number; + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$PointerInteractionData$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$PointerInteractionData; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$PointerInteractionData; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$TouchData : com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$TouchData$Companion; + public fun ()V + public fun (Ljava/util/List;)V + public synthetic fun (Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/util/List; + public final fun copy (Ljava/util/List;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$TouchData; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$TouchData;Ljava/util/List;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$TouchData; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$TouchData; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$TouchData; + public final fun getPositions ()Ljava/util/List; + public final fun getSource ()J + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$TouchData$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$TouchData; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$TouchData; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$ViewportResizeData : com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$ViewportResizeData$Companion; + public fun (JJ)V + public final fun component1 ()J + public final fun component2 ()J + public final fun copy (JJ)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$ViewportResizeData; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$ViewportResizeData;JJILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$ViewportResizeData; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$ViewportResizeData; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$ViewportResizeData; + public final fun getHeight ()J + public final fun getSource ()J + public final fun getWidth ()J + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$ViewportResizeData$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$ViewportResizeData; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$ViewportResizeData; +} + +public abstract class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$Companion; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord; + public static final fun fromJsonElement (Lcom/google/gson/JsonElement;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord; + public abstract fun toJson ()Lcom/google/gson/JsonElement; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord; + public final fun fromJsonElement (Lcom/google/gson/JsonElement;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$FocusRecord : com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$FocusRecord$Companion; + public fun (JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2;)V + public synthetic fun (JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2; + public final fun copy (JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$FocusRecord; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$FocusRecord;JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$FocusRecord; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$FocusRecord; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$FocusRecord; + public final fun getData ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2; + public final fun getSlotId ()Ljava/lang/String; + public final fun getTimestamp ()J + public final fun getType ()J + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$FocusRecord$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$FocusRecord; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$FocusRecord; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MetaRecord : com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MetaRecord$Companion; + public fun (JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1;)V + public synthetic fun (JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1; + public final fun copy (JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MetaRecord; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MetaRecord;JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MetaRecord; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MetaRecord; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MetaRecord; + public final fun getData ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1; + public final fun getSlotId ()Ljava/lang/String; + public final fun getTimestamp ()J + public final fun getType ()J + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MetaRecord$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MetaRecord; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MetaRecord; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileFullSnapshotRecord : com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileFullSnapshotRecord$Companion; + public fun (JLcom/datadog/android/sessionreplay/model/MobileSegment$Data;)V + public final fun component1 ()J + public final fun component2 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Data; + public final fun copy (JLcom/datadog/android/sessionreplay/model/MobileSegment$Data;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileFullSnapshotRecord; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileFullSnapshotRecord;JLcom/datadog/android/sessionreplay/model/MobileSegment$Data;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileFullSnapshotRecord; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileFullSnapshotRecord; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileFullSnapshotRecord; + public final fun getData ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Data; + public final fun getTimestamp ()J + public final fun getType ()J + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileFullSnapshotRecord$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileFullSnapshotRecord; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileFullSnapshotRecord; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileIncrementalSnapshotRecord : com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileIncrementalSnapshotRecord$Companion; + public fun (JLcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData;)V + public final fun component1 ()J + public final fun component2 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData; + public final fun copy (JLcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileIncrementalSnapshotRecord; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileIncrementalSnapshotRecord;JLcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileIncrementalSnapshotRecord; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileIncrementalSnapshotRecord; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileIncrementalSnapshotRecord; + public final fun getData ()Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData; + public final fun getTimestamp ()J + public final fun getType ()J + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileIncrementalSnapshotRecord$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileIncrementalSnapshotRecord; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileIncrementalSnapshotRecord; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$ViewEndRecord : com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$ViewEndRecord$Companion; + public fun (JLjava/lang/String;)V + public synthetic fun (JLjava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component2 ()Ljava/lang/String; + public final fun copy (JLjava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$ViewEndRecord; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$ViewEndRecord;JLjava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$ViewEndRecord; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$ViewEndRecord; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$ViewEndRecord; + public final fun getSlotId ()Ljava/lang/String; + public final fun getTimestamp ()J + public final fun getType ()J + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$ViewEndRecord$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$ViewEndRecord; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$ViewEndRecord; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$VisualViewportRecord : com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$VisualViewportRecord$Companion; + public fun (JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3;)V + public synthetic fun (JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3; + public final fun copy (JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$VisualViewportRecord; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$VisualViewportRecord;JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$VisualViewportRecord; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$VisualViewportRecord; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$VisualViewportRecord; + public final fun getData ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3; + public final fun getSlotId ()Ljava/lang/String; + public final fun getTimestamp ()J + public final fun getType ()J + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$VisualViewportRecord$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$VisualViewportRecord; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$VisualViewportRecord; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Padding { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding$Companion; + public fun ()V + public fun (Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;)V + public synthetic fun (Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/Long; + public final fun component2 ()Ljava/lang/Long; + public final fun component3 ()Ljava/lang/Long; + public final fun component4 ()Ljava/lang/Long; + public final fun copy (Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding; + public final fun getBottom ()Ljava/lang/Long; + public final fun getLeft ()Ljava/lang/Long; + public final fun getRight ()Ljava/lang/Long; + public final fun getTop ()Ljava/lang/Long; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Padding$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$PointerEventType : java/lang/Enum { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType$Companion; + public static final field DOWN Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType; + public static final field MOVE Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType; + public static final field UP Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType; + public final fun toJson ()Lcom/google/gson/JsonElement; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType; + public static fun values ()[Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$PointerEventType$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$PointerType : java/lang/Enum { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType$Companion; + public static final field MOUSE Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType; + public static final field PEN Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType; + public static final field TOUCH Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType; + public final fun toJson ()Lcom/google/gson/JsonElement; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType; + public static fun values ()[Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$PointerType$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Position { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Position$Companion; + public fun (JJJJ)V + public final fun component1 ()J + public final fun component2 ()J + public final fun component3 ()J + public final fun component4 ()J + public final fun copy (JJJJ)Lcom/datadog/android/sessionreplay/model/MobileSegment$Position; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Position;JJJJILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Position; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Position; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Position; + public final fun getId ()J + public final fun getTimestamp ()J + public final fun getX ()J + public final fun getY ()J + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Position$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Position; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Position; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Remove { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Remove$Companion; + public fun (J)V + public final fun component1 ()J + public final fun copy (J)Lcom/datadog/android/sessionreplay/model/MobileSegment$Remove; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Remove;JILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Remove; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Remove; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Remove; + public final fun getId ()J + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Remove$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Remove; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Remove; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Session { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Session$Companion; + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Session; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Session;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Session; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Session; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Session; + public final fun getId ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Session$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Session; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Session; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder$Companion; + public fun (Ljava/lang/String;J)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()J + public final fun copy (Ljava/lang/String;J)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;JILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun getColor ()Ljava/lang/String; + public final fun getWidth ()J + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle$Companion; + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/Number;Ljava/lang/Number;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/Number;Ljava/lang/Number;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/Number; + public final fun component3 ()Ljava/lang/Number; + public final fun copy (Ljava/lang/String;Ljava/lang/Number;Ljava/lang/Number;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Ljava/lang/String;Ljava/lang/Number;Ljava/lang/Number;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun getBackgroundColor ()Ljava/lang/String; + public final fun getCornerRadius ()Ljava/lang/Number; + public final fun getOpacity ()Ljava/lang/Number; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Source : java/lang/Enum { + public static final field ANDROID Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Source$Companion; + public static final field FLUTTER Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; + public static final field IOS Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; + public static final field KOTLIN_MULTIPLATFORM Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; + public static final field REACT_NATIVE Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; + public final fun toJson ()Lcom/google/gson/JsonElement; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; + public static fun values ()[Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Source$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$TextPosition { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition$Companion; + public fun ()V + public fun (Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding;Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment;)V + public synthetic fun (Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding;Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding; + public final fun component2 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment; + public final fun copy (Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding;Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition;Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding;Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition; + public final fun getAlignment ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment; + public final fun getPadding ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$TextPosition$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$TextStyle { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle$Companion; + public fun (Ljava/lang/String;JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode;)V + public synthetic fun (Ljava/lang/String;JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()J + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode; + public final fun copy (Ljava/lang/String;JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle;Ljava/lang/String;JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle; + public final fun getColor ()Ljava/lang/String; + public final fun getFamily ()Ljava/lang/String; + public final fun getSize ()J + public final fun getTruncationMode ()Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$TextStyle$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$TruncationMode : java/lang/Enum { + public static final field CLIP Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode; + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode$Companion; + public static final field HEAD Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode; + public static final field MIDDLE Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode; + public static final field TAIL Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode; + public final fun toJson ()Lcom/google/gson/JsonElement; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode; + public static fun values ()[Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$TruncationMode$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Vertical : java/lang/Enum { + public static final field BOTTOM Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical; + public static final field CENTER Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical; + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical$Companion; + public static final field TOP Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical; + public final fun toJson ()Lcom/google/gson/JsonElement; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical; + public static fun values ()[Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Vertical$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$View { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$View$Companion; + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$View; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$View;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$View; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$View; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$View; + public final fun getId ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$View$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$View; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$View; +} + +public abstract class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$Companion; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe; + public static final fun fromJsonElement (Lcom/google/gson/JsonElement;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe; + public abstract fun toJson ()Lcom/google/gson/JsonElement; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe; + public final fun fromJsonElement (Lcom/google/gson/JsonElement;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe : com/datadog/android/sessionreplay/model/MobileSegment$Wireframe { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe$Companion; + public fun (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;)V + public synthetic fun (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component10 ()Ljava/lang/String; + public final fun component11 ()Ljava/lang/String; + public final fun component12 ()Ljava/lang/Boolean; + public final fun component2 ()J + public final fun component3 ()J + public final fun component4 ()J + public final fun component5 ()J + public final fun component6 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun component7 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun component8 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun component9 ()Ljava/lang/String; + public final fun copy (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe;JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe; + public final fun getBase64 ()Ljava/lang/String; + public final fun getBorder ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun getClip ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getHeight ()J + public final fun getId ()J + public final fun getMimeType ()Ljava/lang/String; + public final fun getResourceId ()Ljava/lang/String; + public final fun getShapeStyle ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun getType ()Ljava/lang/String; + public final fun getWidth ()J + public final fun getX ()J + public final fun getY ()J + public fun hashCode ()I + public final fun isEmpty ()Ljava/lang/Boolean; + public final fun setBase64 (Ljava/lang/String;)V + public final fun setEmpty (Ljava/lang/Boolean;)V + public final fun setMimeType (Ljava/lang/String;)V + public final fun setResourceId (Ljava/lang/String;)V + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$PlaceholderWireframe : com/datadog/android/sessionreplay/model/MobileSegment$Wireframe { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$PlaceholderWireframe$Companion; + public fun (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Ljava/lang/String;)V + public synthetic fun (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component2 ()J + public final fun component3 ()J + public final fun component4 ()J + public final fun component5 ()J + public final fun component6 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun component7 ()Ljava/lang/String; + public final fun copy (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$PlaceholderWireframe; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$PlaceholderWireframe;JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$PlaceholderWireframe; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$PlaceholderWireframe; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$PlaceholderWireframe; + public final fun getClip ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getHeight ()J + public final fun getId ()J + public final fun getLabel ()Ljava/lang/String; + public final fun getType ()Ljava/lang/String; + public final fun getWidth ()J + public final fun getX ()J + public final fun getY ()J + public fun hashCode ()I + public final fun setLabel (Ljava/lang/String;)V + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$PlaceholderWireframe$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$PlaceholderWireframe; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$PlaceholderWireframe; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe : com/datadog/android/sessionreplay/model/MobileSegment$Wireframe { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe$Companion; + public fun (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;)V + public synthetic fun (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component2 ()J + public final fun component3 ()J + public final fun component4 ()J + public final fun component5 ()J + public final fun component6 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun component7 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun component8 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun copy (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe;JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe; + public final fun getBorder ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun getClip ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getHeight ()J + public final fun getId ()J + public final fun getShapeStyle ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun getType ()Ljava/lang/String; + public final fun getWidth ()J + public final fun getX ()J + public final fun getY ()J + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe : com/datadog/android/sessionreplay/model/MobileSegment$Wireframe { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe$Companion; + public fun (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition;)V + public synthetic fun (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component10 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle; + public final fun component11 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition; + public final fun component2 ()J + public final fun component3 ()J + public final fun component4 ()J + public final fun component5 ()J + public final fun component6 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun component7 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun component8 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun component9 ()Ljava/lang/String; + public final fun copy (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe;JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe; + public final fun getBorder ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun getClip ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getHeight ()J + public final fun getId ()J + public final fun getShapeStyle ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun getText ()Ljava/lang/String; + public final fun getTextPosition ()Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition; + public final fun getTextStyle ()Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle; + public final fun getType ()Ljava/lang/String; + public final fun getWidth ()J + public final fun getX ()J + public final fun getY ()J + public fun hashCode ()I + public final fun setText (Ljava/lang/String;)V + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$WebviewWireframe : com/datadog/android/sessionreplay/model/MobileSegment$Wireframe { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$WebviewWireframe$Companion; + public fun (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/Boolean;)V + public synthetic fun (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/Boolean;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component10 ()Ljava/lang/Boolean; + public final fun component2 ()J + public final fun component3 ()J + public final fun component4 ()J + public final fun component5 ()J + public final fun component6 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun component7 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun component8 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun component9 ()Ljava/lang/String; + public final fun copy (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/Boolean;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$WebviewWireframe; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$WebviewWireframe;JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/Boolean;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$WebviewWireframe; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$WebviewWireframe; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$WebviewWireframe; + public final fun getBorder ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun getClip ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getHeight ()J + public final fun getId ()J + public final fun getShapeStyle ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun getSlotId ()Ljava/lang/String; + public final fun getType ()Ljava/lang/String; + public final fun getWidth ()J + public final fun getX ()J + public final fun getY ()J + public fun hashCode ()I + public final fun isVisible ()Ljava/lang/Boolean; + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$WebviewWireframe$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$WebviewWireframe; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$WebviewWireframe; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeClip { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip$Companion; + public fun ()V + public fun (Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;)V + public synthetic fun (Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/Long; + public final fun component2 ()Ljava/lang/Long; + public final fun component3 ()Ljava/lang/Long; + public final fun component4 ()Ljava/lang/Long; + public final fun copy (Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getBottom ()Ljava/lang/Long; + public final fun getLeft ()Ljava/lang/Long; + public final fun getRight ()Ljava/lang/Long; + public final fun getTop ()Ljava/lang/Long; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeClip$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; +} + +public abstract class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$Companion; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation; + public static final fun fromJsonElement (Lcom/google/gson/JsonElement;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation; + public abstract fun toJson ()Lcom/google/gson/JsonElement; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation; + public final fun fromJsonElement (Lcom/google/gson/JsonElement;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ImageWireframeUpdate : com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ImageWireframeUpdate$Companion; + public fun (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;)V + public synthetic fun (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component10 ()Ljava/lang/String; + public final fun component11 ()Ljava/lang/String; + public final fun component12 ()Ljava/lang/Boolean; + public final fun component2 ()Ljava/lang/Long; + public final fun component3 ()Ljava/lang/Long; + public final fun component4 ()Ljava/lang/Long; + public final fun component5 ()Ljava/lang/Long; + public final fun component6 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun component7 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun component8 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun component9 ()Ljava/lang/String; + public final fun copy (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ImageWireframeUpdate; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ImageWireframeUpdate;JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ImageWireframeUpdate; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ImageWireframeUpdate; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ImageWireframeUpdate; + public final fun getBase64 ()Ljava/lang/String; + public final fun getBorder ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun getClip ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getHeight ()Ljava/lang/Long; + public final fun getId ()J + public final fun getMimeType ()Ljava/lang/String; + public final fun getResourceId ()Ljava/lang/String; + public final fun getShapeStyle ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun getType ()Ljava/lang/String; + public final fun getWidth ()Ljava/lang/Long; + public final fun getX ()Ljava/lang/Long; + public final fun getY ()Ljava/lang/Long; + public fun hashCode ()I + public final fun isEmpty ()Ljava/lang/Boolean; + public final fun setBase64 (Ljava/lang/String;)V + public final fun setEmpty (Ljava/lang/Boolean;)V + public final fun setMimeType (Ljava/lang/String;)V + public final fun setResourceId (Ljava/lang/String;)V + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ImageWireframeUpdate$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ImageWireframeUpdate; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ImageWireframeUpdate; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$PlaceholderWireframeUpdate : com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$PlaceholderWireframeUpdate$Companion; + public fun (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Ljava/lang/String;)V + public synthetic fun (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component2 ()Ljava/lang/Long; + public final fun component3 ()Ljava/lang/Long; + public final fun component4 ()Ljava/lang/Long; + public final fun component5 ()Ljava/lang/Long; + public final fun component6 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun component7 ()Ljava/lang/String; + public final fun copy (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$PlaceholderWireframeUpdate; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$PlaceholderWireframeUpdate;JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$PlaceholderWireframeUpdate; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$PlaceholderWireframeUpdate; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$PlaceholderWireframeUpdate; + public final fun getClip ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getHeight ()Ljava/lang/Long; + public final fun getId ()J + public final fun getLabel ()Ljava/lang/String; + public final fun getType ()Ljava/lang/String; + public final fun getWidth ()Ljava/lang/Long; + public final fun getX ()Ljava/lang/Long; + public final fun getY ()Ljava/lang/Long; + public fun hashCode ()I + public final fun setLabel (Ljava/lang/String;)V + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$PlaceholderWireframeUpdate$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$PlaceholderWireframeUpdate; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$PlaceholderWireframeUpdate; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ShapeWireframeUpdate : com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ShapeWireframeUpdate$Companion; + public fun (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;)V + public synthetic fun (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component2 ()Ljava/lang/Long; + public final fun component3 ()Ljava/lang/Long; + public final fun component4 ()Ljava/lang/Long; + public final fun component5 ()Ljava/lang/Long; + public final fun component6 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun component7 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun component8 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun copy (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ShapeWireframeUpdate; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ShapeWireframeUpdate;JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ShapeWireframeUpdate; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ShapeWireframeUpdate; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ShapeWireframeUpdate; + public final fun getBorder ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun getClip ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getHeight ()Ljava/lang/Long; + public final fun getId ()J + public final fun getShapeStyle ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun getType ()Ljava/lang/String; + public final fun getWidth ()Ljava/lang/Long; + public final fun getX ()Ljava/lang/Long; + public final fun getY ()Ljava/lang/Long; + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ShapeWireframeUpdate$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ShapeWireframeUpdate; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ShapeWireframeUpdate; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$TextWireframeUpdate : com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$TextWireframeUpdate$Companion; + public fun (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition;)V + public synthetic fun (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component10 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle; + public final fun component11 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition; + public final fun component2 ()Ljava/lang/Long; + public final fun component3 ()Ljava/lang/Long; + public final fun component4 ()Ljava/lang/Long; + public final fun component5 ()Ljava/lang/Long; + public final fun component6 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun component7 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun component8 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun component9 ()Ljava/lang/String; + public final fun copy (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$TextWireframeUpdate; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$TextWireframeUpdate;JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$TextWireframeUpdate; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$TextWireframeUpdate; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$TextWireframeUpdate; + public final fun getBorder ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun getClip ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getHeight ()Ljava/lang/Long; + public final fun getId ()J + public final fun getShapeStyle ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun getText ()Ljava/lang/String; + public final fun getTextPosition ()Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition; + public final fun getTextStyle ()Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle; + public final fun getType ()Ljava/lang/String; + public final fun getWidth ()Ljava/lang/Long; + public final fun getX ()Ljava/lang/Long; + public final fun getY ()Ljava/lang/Long; + public fun hashCode ()I + public final fun setText (Ljava/lang/String;)V + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$TextWireframeUpdate$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$TextWireframeUpdate; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$TextWireframeUpdate; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$WebviewWireframeUpdate : com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$WebviewWireframeUpdate$Companion; + public fun (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/Boolean;)V + public synthetic fun (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/Boolean;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component10 ()Ljava/lang/Boolean; + public final fun component2 ()Ljava/lang/Long; + public final fun component3 ()Ljava/lang/Long; + public final fun component4 ()Ljava/lang/Long; + public final fun component5 ()Ljava/lang/Long; + public final fun component6 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun component7 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun component8 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun component9 ()Ljava/lang/String; + public final fun copy (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/Boolean;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$WebviewWireframeUpdate; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$WebviewWireframeUpdate;JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/Boolean;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$WebviewWireframeUpdate; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$WebviewWireframeUpdate; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$WebviewWireframeUpdate; + public final fun getBorder ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun getClip ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getHeight ()Ljava/lang/Long; + public final fun getId ()J + public final fun getShapeStyle ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun getSlotId ()Ljava/lang/String; + public final fun getType ()Ljava/lang/String; + public final fun getWidth ()Ljava/lang/Long; + public final fun getX ()Ljava/lang/Long; + public final fun getY ()Ljava/lang/Long; + public fun hashCode ()I + public final fun isVisible ()Ljava/lang/Boolean; + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$WebviewWireframeUpdate$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$WebviewWireframeUpdate; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$WebviewWireframeUpdate; +} + +public final class com/datadog/android/sessionreplay/model/ResourceHashesEntry { + public static final field Companion Lcom/datadog/android/sessionreplay/model/ResourceHashesEntry$Companion; + public fun (Ljava/lang/Number;Ljava/util/List;)V + public final fun component1 ()Ljava/lang/Number; + public final fun component2 ()Ljava/util/List; + public final fun copy (Ljava/lang/Number;Ljava/util/List;)Lcom/datadog/android/sessionreplay/model/ResourceHashesEntry; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/ResourceHashesEntry;Ljava/lang/Number;Ljava/util/List;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/ResourceHashesEntry; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/ResourceHashesEntry; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/ResourceHashesEntry; + public final fun getLastUpdateDateNs ()Ljava/lang/Number; + public final fun getResourceHashes ()Ljava/util/List; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/ResourceHashesEntry$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/ResourceHashesEntry; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/ResourceHashesEntry; +} + +public final class com/datadog/android/sessionreplay/model/ResourceMetadata { + public static final field Companion Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Companion; + public fun (Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application;)V + public final fun component1 ()Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application; + public final fun copy (Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/ResourceMetadata;Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata; + public final fun getApplication ()Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application; + public final fun getType ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/ResourceMetadata$Application { + public static final field Companion Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application$Companion; + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application; + public final fun getId ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/ResourceMetadata$Application$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application; +} + +public final class com/datadog/android/sessionreplay/model/ResourceMetadata$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata; +} + diff --git a/features/dd-sdk-android-session-replay-noop/api/dd-sdk-android-session-replay.api b/features/dd-sdk-android-session-replay-noop/api/dd-sdk-android-session-replay.api new file mode 100644 index 0000000000..5676f43536 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/api/dd-sdk-android-session-replay.api @@ -0,0 +1,1680 @@ +public abstract interface class com/datadog/android/sessionreplay/ExtensionSupport { + public abstract fun getCustomDrawableMapper ()Ljava/util/List; + public abstract fun getCustomViewMappers ()Ljava/util/List; + public abstract fun getOptionSelectorDetectors ()Ljava/util/List; + public abstract fun name ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/ImagePrivacy : java/lang/Enum, com/datadog/android/sessionreplay/PrivacyLevel { + public static final field MASK_ALL Lcom/datadog/android/sessionreplay/ImagePrivacy; + public static final field MASK_LARGE_ONLY Lcom/datadog/android/sessionreplay/ImagePrivacy; + public static final field MASK_NONE Lcom/datadog/android/sessionreplay/ImagePrivacy; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/ImagePrivacy; + public static fun values ()[Lcom/datadog/android/sessionreplay/ImagePrivacy; +} + +public final class com/datadog/android/sessionreplay/MapperTypeWrapper { + public fun (Ljava/lang/Class;Lcom/datadog/android/sessionreplay/recorder/mapper/WireframeMapper;)V + public final fun copy (Ljava/lang/Class;Lcom/datadog/android/sessionreplay/recorder/mapper/WireframeMapper;)Lcom/datadog/android/sessionreplay/MapperTypeWrapper; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/MapperTypeWrapper;Ljava/lang/Class;Lcom/datadog/android/sessionreplay/recorder/mapper/WireframeMapper;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/MapperTypeWrapper; + public fun equals (Ljava/lang/Object;)Z + public final fun getUnsafeMapper ()Lcom/datadog/android/sessionreplay/recorder/mapper/WireframeMapper; + public fun hashCode ()I + public final fun supportsView (Landroid/view/View;)Z + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/MobileSegmentConstantsKt { + public static final field RECORD_TYPE_FOCUS J + public static final field RECORD_TYPE_FULL_SNAPSHOT J + public static final field RECORD_TYPE_INCREMENTAL_SNAPSHOT J + public static final field RECORD_TYPE_META J + public static final field RECORD_TYPE_VIEW_END J + public static final field RECORD_TYPE_VISUAL_VIEWPORT J + public static final field WIREFRAME_TYPE_IMAGE Ljava/lang/String; + public static final field WIREFRAME_TYPE_PLACEHOLDER Ljava/lang/String; + public static final field WIREFRAME_TYPE_SHAPE Ljava/lang/String; + public static final field WIREFRAME_TYPE_TEXT Ljava/lang/String; + public static final field WIREFRAME_TYPE_WEBVIEW Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/PrivacyConstantsKt { + public static final field IMAGE_DIMEN_CONSIDERED_PII_IN_DP I +} + +public abstract interface class com/datadog/android/sessionreplay/PrivacyLevel { +} + +public final class com/datadog/android/sessionreplay/PrivacyOverrideExtensionsKt { + public static final fun setSessionReplayHidden (Landroid/view/View;Z)V + public static final fun setSessionReplayImagePrivacy (Landroid/view/View;Lcom/datadog/android/sessionreplay/ImagePrivacy;)V + public static final fun setSessionReplayTextAndInputPrivacy (Landroid/view/View;Lcom/datadog/android/sessionreplay/TextAndInputPrivacy;)V + public static final fun setSessionReplayTouchPrivacy (Landroid/view/View;Lcom/datadog/android/sessionreplay/TouchPrivacy;)V +} + +public final class com/datadog/android/sessionreplay/SessionReplay { + public static final field INSTANCE Lcom/datadog/android/sessionreplay/SessionReplay; + public static final fun enable (Lcom/datadog/android/sessionreplay/SessionReplayConfiguration;)V + public static final fun enable (Lcom/datadog/android/sessionreplay/SessionReplayConfiguration;Lcom/datadog/android/api/SdkCore;)V + public static synthetic fun enable$default (Lcom/datadog/android/sessionreplay/SessionReplayConfiguration;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V + public final fun startRecording (Lcom/datadog/android/api/SdkCore;)V + public static synthetic fun startRecording$default (Lcom/datadog/android/sessionreplay/SessionReplay;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V + public final fun stopRecording (Lcom/datadog/android/api/SdkCore;)V + public static synthetic fun stopRecording$default (Lcom/datadog/android/sessionreplay/SessionReplay;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V +} + +public final class com/datadog/android/sessionreplay/SessionReplayConfiguration { + public final fun copy (Ljava/lang/String;Lcom/datadog/android/sessionreplay/SessionReplayPrivacy;Ljava/util/List;Ljava/util/List;Ljava/util/List;FLcom/datadog/android/sessionreplay/ImagePrivacy;ZLcom/datadog/android/sessionreplay/TouchPrivacy;Lcom/datadog/android/sessionreplay/TextAndInputPrivacy;ZLcom/datadog/android/sessionreplay/SystemRequirementsConfiguration;Lcom/datadog/android/sessionreplay/SessionReplayInternalCallback;)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/SessionReplayConfiguration;Ljava/lang/String;Lcom/datadog/android/sessionreplay/SessionReplayPrivacy;Ljava/util/List;Ljava/util/List;Ljava/util/List;FLcom/datadog/android/sessionreplay/ImagePrivacy;ZLcom/datadog/android/sessionreplay/TouchPrivacy;Lcom/datadog/android/sessionreplay/TextAndInputPrivacy;ZLcom/datadog/android/sessionreplay/SystemRequirementsConfiguration;Lcom/datadog/android/sessionreplay/SessionReplayInternalCallback;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration; + public fun equals (Ljava/lang/Object;)Z + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/SessionReplayConfiguration$Builder { + public fun ()V + public fun (F)V + public synthetic fun (FILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun addExtensionSupport (Lcom/datadog/android/sessionreplay/ExtensionSupport;)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder; + public final fun build ()Lcom/datadog/android/sessionreplay/SessionReplayConfiguration; + public final fun setDynamicOptimizationEnabled (Z)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder; + public final fun setImagePrivacy (Lcom/datadog/android/sessionreplay/ImagePrivacy;)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder; + public final fun setPrivacy (Lcom/datadog/android/sessionreplay/SessionReplayPrivacy;)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder; + public final fun setSystemRequirements (Lcom/datadog/android/sessionreplay/SystemRequirementsConfiguration;)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder; + public final fun setTextAndInputPrivacy (Lcom/datadog/android/sessionreplay/TextAndInputPrivacy;)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder; + public final fun setTouchPrivacy (Lcom/datadog/android/sessionreplay/TouchPrivacy;)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder; + public final fun startRecordingImmediately (Z)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder; + public final fun useCustomEndpoint (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder; +} + +public abstract interface class com/datadog/android/sessionreplay/SessionReplayInternalCallback { + public abstract fun addResourceItem (Ljava/lang/String;[BLjava/lang/String;)V + public abstract fun getCurrentActivity ()Landroid/app/Activity; + public abstract fun setResourceQueue (Lcom/datadog/android/sessionreplay/SessionReplayInternalResourceQueue;)V +} + +public final class com/datadog/android/sessionreplay/SessionReplayInternalCallback$DefaultImpls { + public static synthetic fun addResourceItem$default (Lcom/datadog/android/sessionreplay/SessionReplayInternalCallback;Ljava/lang/String;[BLjava/lang/String;ILjava/lang/Object;)V +} + +public abstract interface class com/datadog/android/sessionreplay/SessionReplayInternalResourceQueue { + public abstract fun addResourceItem (Ljava/lang/String;[BLjava/lang/String;)V +} + +public final class com/datadog/android/sessionreplay/SessionReplayInternalResourceQueue$DefaultImpls { + public static synthetic fun addResourceItem$default (Lcom/datadog/android/sessionreplay/SessionReplayInternalResourceQueue;Ljava/lang/String;[BLjava/lang/String;ILjava/lang/Object;)V +} + +public final class com/datadog/android/sessionreplay/SessionReplayPrivacy : java/lang/Enum { + public static final field ALLOW Lcom/datadog/android/sessionreplay/SessionReplayPrivacy; + public static final field MASK Lcom/datadog/android/sessionreplay/SessionReplayPrivacy; + public static final field MASK_USER_INPUT Lcom/datadog/android/sessionreplay/SessionReplayPrivacy; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/SessionReplayPrivacy; + public static fun values ()[Lcom/datadog/android/sessionreplay/SessionReplayPrivacy; +} + +public final class com/datadog/android/sessionreplay/SystemRequirementsConfiguration { + public static final field Companion Lcom/datadog/android/sessionreplay/SystemRequirementsConfiguration$Companion; +} + +public final class com/datadog/android/sessionreplay/SystemRequirementsConfiguration$Builder { + public fun ()V + public final fun build ()Lcom/datadog/android/sessionreplay/SystemRequirementsConfiguration; + public final fun setMinCPUCoreNumber (I)Lcom/datadog/android/sessionreplay/SystemRequirementsConfiguration$Builder; + public final fun setMinRAMSizeMb (I)Lcom/datadog/android/sessionreplay/SystemRequirementsConfiguration$Builder; +} + +public final class com/datadog/android/sessionreplay/SystemRequirementsConfiguration$Companion { + public final fun getBASIC ()Lcom/datadog/android/sessionreplay/SystemRequirementsConfiguration; + public final fun getNONE ()Lcom/datadog/android/sessionreplay/SystemRequirementsConfiguration; +} + +public final class com/datadog/android/sessionreplay/TextAndInputPrivacy : java/lang/Enum, com/datadog/android/sessionreplay/PrivacyLevel { + public static final field MASK_ALL Lcom/datadog/android/sessionreplay/TextAndInputPrivacy; + public static final field MASK_ALL_INPUTS Lcom/datadog/android/sessionreplay/TextAndInputPrivacy; + public static final field MASK_SENSITIVE_INPUTS Lcom/datadog/android/sessionreplay/TextAndInputPrivacy; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/TextAndInputPrivacy; + public static fun values ()[Lcom/datadog/android/sessionreplay/TextAndInputPrivacy; +} + +public final class com/datadog/android/sessionreplay/TouchPrivacy : java/lang/Enum, com/datadog/android/sessionreplay/PrivacyLevel { + public static final field HIDE Lcom/datadog/android/sessionreplay/TouchPrivacy; + public static final field SHOW Lcom/datadog/android/sessionreplay/TouchPrivacy; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/TouchPrivacy; + public static fun values ()[Lcom/datadog/android/sessionreplay/TouchPrivacy; +} + +public final class com/datadog/android/sessionreplay/_SessionReplayInternalProxy { + public fun (Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder;)V + public final fun setInternalCallback (Lcom/datadog/android/sessionreplay/SessionReplayInternalCallback;)Lcom/datadog/android/sessionreplay/SessionReplayConfiguration$Builder; +} + +public final class com/datadog/android/sessionreplay/internal/TouchPrivacyManager { + public fun (Lcom/datadog/android/sessionreplay/TouchPrivacy;)V + public final fun addTouchOverrideArea (Landroid/graphics/Rect;Lcom/datadog/android/sessionreplay/TouchPrivacy;)V +} + +public abstract interface class com/datadog/android/sessionreplay/internal/recorder/obfuscator/StringObfuscator { + public static final field Companion Lcom/datadog/android/sessionreplay/internal/recorder/obfuscator/StringObfuscator$Companion; + public abstract fun obfuscate (Ljava/lang/String;)Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/internal/recorder/obfuscator/StringObfuscator$Companion { + public final fun getStringObfuscator ()Lcom/datadog/android/sessionreplay/internal/recorder/obfuscator/StringObfuscator; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Companion; + public fun (Lcom/datadog/android/sessionreplay/model/MobileSegment$Application;Lcom/datadog/android/sessionreplay/model/MobileSegment$Session;Lcom/datadog/android/sessionreplay/model/MobileSegment$View;JJJLjava/lang/Long;Ljava/lang/Boolean;Lcom/datadog/android/sessionreplay/model/MobileSegment$Source;Ljava/util/List;)V + public synthetic fun (Lcom/datadog/android/sessionreplay/model/MobileSegment$Application;Lcom/datadog/android/sessionreplay/model/MobileSegment$Session;Lcom/datadog/android/sessionreplay/model/MobileSegment$View;JJJLjava/lang/Long;Ljava/lang/Boolean;Lcom/datadog/android/sessionreplay/model/MobileSegment$Source;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Application; + public final fun component10 ()Ljava/util/List; + public final fun component2 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Session; + public final fun component3 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$View; + public final fun component4 ()J + public final fun component5 ()J + public final fun component6 ()J + public final fun component7 ()Ljava/lang/Long; + public final fun component8 ()Ljava/lang/Boolean; + public final fun component9 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; + public final fun copy (Lcom/datadog/android/sessionreplay/model/MobileSegment$Application;Lcom/datadog/android/sessionreplay/model/MobileSegment$Session;Lcom/datadog/android/sessionreplay/model/MobileSegment$View;JJJLjava/lang/Long;Ljava/lang/Boolean;Lcom/datadog/android/sessionreplay/model/MobileSegment$Source;Ljava/util/List;)Lcom/datadog/android/sessionreplay/model/MobileSegment; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment;Lcom/datadog/android/sessionreplay/model/MobileSegment$Application;Lcom/datadog/android/sessionreplay/model/MobileSegment$Session;Lcom/datadog/android/sessionreplay/model/MobileSegment$View;JJJLjava/lang/Long;Ljava/lang/Boolean;Lcom/datadog/android/sessionreplay/model/MobileSegment$Source;Ljava/util/List;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment; + public final fun getApplication ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Application; + public final fun getEnd ()J + public final fun getHasFullSnapshot ()Ljava/lang/Boolean; + public final fun getIndexInView ()Ljava/lang/Long; + public final fun getRecords ()Ljava/util/List; + public final fun getRecordsCount ()J + public final fun getSession ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Session; + public final fun getSource ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; + public final fun getStart ()J + public final fun getView ()Lcom/datadog/android/sessionreplay/model/MobileSegment$View; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Add { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Add$Companion; + public fun (Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe;)V + public synthetic fun (Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/Long; + public final fun component2 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe; + public final fun copy (Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Add; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Add;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Add; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Add; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Add; + public final fun getPreviousId ()Ljava/lang/Long; + public final fun getWireframe ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Add$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Add; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Add; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Alignment { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment$Companion; + public fun ()V + public fun (Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal;Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical;)V + public synthetic fun (Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal;Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal; + public final fun component2 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical; + public final fun copy (Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal;Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment;Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal;Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment; + public final fun getHorizontal ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal; + public final fun getVertical ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Alignment$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Application { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Application$Companion; + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Application; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Application;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Application; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Application; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Application; + public final fun getId ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Application$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Application; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Application; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Data { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Data$Companion; + public fun (Ljava/util/List;)V + public final fun component1 ()Ljava/util/List; + public final fun copy (Ljava/util/List;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Data;Ljava/util/List;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data; + public final fun getWireframes ()Ljava/util/List; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Data$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Data1 { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1$Companion; + public fun (JJLjava/lang/String;)V + public synthetic fun (JJLjava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component2 ()J + public final fun component3 ()Ljava/lang/String; + public final fun copy (JJLjava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1;JJLjava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1; + public final fun getHeight ()J + public final fun getHref ()Ljava/lang/String; + public final fun getWidth ()J + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Data1$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Data2 { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2$Companion; + public fun (Z)V + public final fun component1 ()Z + public final fun copy (Z)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2;ZILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2; + public final fun getHasFocus ()Z + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Data2$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Data3 { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3$Companion; + public fun (Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;)V + public final fun component1 ()Ljava/lang/Number; + public final fun component2 ()Ljava/lang/Number; + public final fun component3 ()Ljava/lang/Number; + public final fun component4 ()Ljava/lang/Number; + public final fun component5 ()Ljava/lang/Number; + public final fun component6 ()Ljava/lang/Number; + public final fun component7 ()Ljava/lang/Number; + public final fun copy (Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/Number;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3; + public final fun getHeight ()Ljava/lang/Number; + public final fun getOffsetLeft ()Ljava/lang/Number; + public final fun getOffsetTop ()Ljava/lang/Number; + public final fun getPageLeft ()Ljava/lang/Number; + public final fun getPageTop ()Ljava/lang/Number; + public final fun getScale ()Ljava/lang/Number; + public final fun getWidth ()Ljava/lang/Number; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Data3$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Horizontal : java/lang/Enum { + public static final field CENTER Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal; + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal$Companion; + public static final field LEFT Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal; + public static final field RIGHT Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal; + public final fun toJson ()Lcom/google/gson/JsonElement; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal; + public static fun values ()[Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Horizontal$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Horizontal; +} + +public abstract class com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$Companion; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData; + public static final fun fromJsonElement (Lcom/google/gson/JsonElement;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData; + public abstract fun toJson ()Lcom/google/gson/JsonElement; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData; + public final fun fromJsonElement (Lcom/google/gson/JsonElement;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$MobileMutationData : com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$MobileMutationData$Companion; + public fun (Ljava/util/List;Ljava/util/List;Ljava/util/List;)V + public final fun component1 ()Ljava/util/List; + public final fun component2 ()Ljava/util/List; + public final fun component3 ()Ljava/util/List; + public final fun copy (Ljava/util/List;Ljava/util/List;Ljava/util/List;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$MobileMutationData; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$MobileMutationData;Ljava/util/List;Ljava/util/List;Ljava/util/List;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$MobileMutationData; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$MobileMutationData; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$MobileMutationData; + public final fun getAdds ()Ljava/util/List; + public final fun getRemoves ()Ljava/util/List; + public final fun getSource ()J + public final fun getUpdates ()Ljava/util/List; + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$MobileMutationData$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$MobileMutationData; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$MobileMutationData; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$PointerInteractionData : com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$PointerInteractionData$Companion; + public fun (Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType;Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType;JLjava/lang/Number;Ljava/lang/Number;)V + public final fun component1 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType; + public final fun component2 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType; + public final fun component3 ()J + public final fun component4 ()Ljava/lang/Number; + public final fun component5 ()Ljava/lang/Number; + public final fun copy (Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType;Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType;JLjava/lang/Number;Ljava/lang/Number;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$PointerInteractionData; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$PointerInteractionData;Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType;Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType;JLjava/lang/Number;Ljava/lang/Number;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$PointerInteractionData; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$PointerInteractionData; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$PointerInteractionData; + public final fun getPointerEventType ()Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType; + public final fun getPointerId ()J + public final fun getPointerType ()Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType; + public final fun getSource ()J + public final fun getX ()Ljava/lang/Number; + public final fun getY ()Ljava/lang/Number; + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$PointerInteractionData$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$PointerInteractionData; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$PointerInteractionData; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$TouchData : com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$TouchData$Companion; + public fun ()V + public fun (Ljava/util/List;)V + public synthetic fun (Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/util/List; + public final fun copy (Ljava/util/List;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$TouchData; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$TouchData;Ljava/util/List;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$TouchData; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$TouchData; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$TouchData; + public final fun getPositions ()Ljava/util/List; + public final fun getSource ()J + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$TouchData$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$TouchData; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$TouchData; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$ViewportResizeData : com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$ViewportResizeData$Companion; + public fun (JJ)V + public final fun component1 ()J + public final fun component2 ()J + public final fun copy (JJ)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$ViewportResizeData; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$ViewportResizeData;JJILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$ViewportResizeData; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$ViewportResizeData; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$ViewportResizeData; + public final fun getHeight ()J + public final fun getSource ()J + public final fun getWidth ()J + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$ViewportResizeData$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$ViewportResizeData; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData$ViewportResizeData; +} + +public abstract class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$Companion; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord; + public static final fun fromJsonElement (Lcom/google/gson/JsonElement;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord; + public abstract fun toJson ()Lcom/google/gson/JsonElement; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord; + public final fun fromJsonElement (Lcom/google/gson/JsonElement;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$FocusRecord : com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$FocusRecord$Companion; + public fun (JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2;)V + public synthetic fun (JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2; + public final fun copy (JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$FocusRecord; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$FocusRecord;JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$FocusRecord; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$FocusRecord; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$FocusRecord; + public final fun getData ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Data2; + public final fun getSlotId ()Ljava/lang/String; + public final fun getTimestamp ()J + public final fun getType ()J + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$FocusRecord$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$FocusRecord; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$FocusRecord; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MetaRecord : com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MetaRecord$Companion; + public fun (JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1;)V + public synthetic fun (JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1; + public final fun copy (JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MetaRecord; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MetaRecord;JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MetaRecord; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MetaRecord; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MetaRecord; + public final fun getData ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Data1; + public final fun getSlotId ()Ljava/lang/String; + public final fun getTimestamp ()J + public final fun getType ()J + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MetaRecord$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MetaRecord; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MetaRecord; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileFullSnapshotRecord : com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileFullSnapshotRecord$Companion; + public fun (JLcom/datadog/android/sessionreplay/model/MobileSegment$Data;)V + public final fun component1 ()J + public final fun component2 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Data; + public final fun copy (JLcom/datadog/android/sessionreplay/model/MobileSegment$Data;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileFullSnapshotRecord; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileFullSnapshotRecord;JLcom/datadog/android/sessionreplay/model/MobileSegment$Data;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileFullSnapshotRecord; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileFullSnapshotRecord; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileFullSnapshotRecord; + public final fun getData ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Data; + public final fun getTimestamp ()J + public final fun getType ()J + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileFullSnapshotRecord$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileFullSnapshotRecord; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileFullSnapshotRecord; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileIncrementalSnapshotRecord : com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileIncrementalSnapshotRecord$Companion; + public fun (JLcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData;)V + public final fun component1 ()J + public final fun component2 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData; + public final fun copy (JLcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileIncrementalSnapshotRecord; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileIncrementalSnapshotRecord;JLcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileIncrementalSnapshotRecord; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileIncrementalSnapshotRecord; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileIncrementalSnapshotRecord; + public final fun getData ()Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileIncrementalData; + public final fun getTimestamp ()J + public final fun getType ()J + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileIncrementalSnapshotRecord$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileIncrementalSnapshotRecord; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$MobileIncrementalSnapshotRecord; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$ViewEndRecord : com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$ViewEndRecord$Companion; + public fun (JLjava/lang/String;)V + public synthetic fun (JLjava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component2 ()Ljava/lang/String; + public final fun copy (JLjava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$ViewEndRecord; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$ViewEndRecord;JLjava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$ViewEndRecord; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$ViewEndRecord; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$ViewEndRecord; + public final fun getSlotId ()Ljava/lang/String; + public final fun getTimestamp ()J + public final fun getType ()J + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$ViewEndRecord$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$ViewEndRecord; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$ViewEndRecord; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$VisualViewportRecord : com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$VisualViewportRecord$Companion; + public fun (JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3;)V + public synthetic fun (JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3; + public final fun copy (JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$VisualViewportRecord; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$VisualViewportRecord;JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$VisualViewportRecord; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$VisualViewportRecord; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$VisualViewportRecord; + public final fun getData ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Data3; + public final fun getSlotId ()Ljava/lang/String; + public final fun getTimestamp ()J + public final fun getType ()J + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$VisualViewportRecord$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$VisualViewportRecord; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$MobileRecord$VisualViewportRecord; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Padding { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding$Companion; + public fun ()V + public fun (Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;)V + public synthetic fun (Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/Long; + public final fun component2 ()Ljava/lang/Long; + public final fun component3 ()Ljava/lang/Long; + public final fun component4 ()Ljava/lang/Long; + public final fun copy (Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding; + public final fun getBottom ()Ljava/lang/Long; + public final fun getLeft ()Ljava/lang/Long; + public final fun getRight ()Ljava/lang/Long; + public final fun getTop ()Ljava/lang/Long; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Padding$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$PointerEventType : java/lang/Enum { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType$Companion; + public static final field DOWN Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType; + public static final field MOVE Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType; + public static final field UP Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType; + public final fun toJson ()Lcom/google/gson/JsonElement; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType; + public static fun values ()[Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$PointerEventType$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerEventType; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$PointerType : java/lang/Enum { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType$Companion; + public static final field MOUSE Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType; + public static final field PEN Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType; + public static final field TOUCH Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType; + public final fun toJson ()Lcom/google/gson/JsonElement; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType; + public static fun values ()[Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$PointerType$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$PointerType; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Position { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Position$Companion; + public fun (JJJJ)V + public final fun component1 ()J + public final fun component2 ()J + public final fun component3 ()J + public final fun component4 ()J + public final fun copy (JJJJ)Lcom/datadog/android/sessionreplay/model/MobileSegment$Position; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Position;JJJJILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Position; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Position; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Position; + public final fun getId ()J + public final fun getTimestamp ()J + public final fun getX ()J + public final fun getY ()J + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Position$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Position; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Position; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Remove { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Remove$Companion; + public fun (J)V + public final fun component1 ()J + public final fun copy (J)Lcom/datadog/android/sessionreplay/model/MobileSegment$Remove; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Remove;JILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Remove; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Remove; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Remove; + public final fun getId ()J + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Remove$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Remove; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Remove; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Session { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Session$Companion; + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Session; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Session;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Session; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Session; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Session; + public final fun getId ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Session$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Session; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Session; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder$Companion; + public fun (Ljava/lang/String;J)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()J + public final fun copy (Ljava/lang/String;J)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;JILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun getColor ()Ljava/lang/String; + public final fun getWidth ()J + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle$Companion; + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/Number;Ljava/lang/Number;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/Number;Ljava/lang/Number;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/Number; + public final fun component3 ()Ljava/lang/Number; + public final fun copy (Ljava/lang/String;Ljava/lang/Number;Ljava/lang/Number;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Ljava/lang/String;Ljava/lang/Number;Ljava/lang/Number;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun getBackgroundColor ()Ljava/lang/String; + public final fun getCornerRadius ()Ljava/lang/Number; + public final fun getOpacity ()Ljava/lang/Number; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Source : java/lang/Enum { + public static final field ANDROID Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Source$Companion; + public static final field FLUTTER Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; + public static final field IOS Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; + public static final field KOTLIN_MULTIPLATFORM Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; + public static final field REACT_NATIVE Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; + public final fun toJson ()Lcom/google/gson/JsonElement; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; + public static fun values ()[Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Source$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Source; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$TextPosition { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition$Companion; + public fun ()V + public fun (Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding;Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment;)V + public synthetic fun (Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding;Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding; + public final fun component2 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment; + public final fun copy (Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding;Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition;Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding;Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition; + public final fun getAlignment ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Alignment; + public final fun getPadding ()Lcom/datadog/android/sessionreplay/model/MobileSegment$Padding; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$TextPosition$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$TextStyle { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle$Companion; + public fun (Ljava/lang/String;JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode;)V + public synthetic fun (Ljava/lang/String;JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()J + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode; + public final fun copy (Ljava/lang/String;JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle;Ljava/lang/String;JLjava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle; + public final fun getColor ()Ljava/lang/String; + public final fun getFamily ()Ljava/lang/String; + public final fun getSize ()J + public final fun getTruncationMode ()Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$TextStyle$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$TruncationMode : java/lang/Enum { + public static final field CLIP Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode; + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode$Companion; + public static final field HEAD Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode; + public static final field MIDDLE Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode; + public static final field TAIL Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode; + public final fun toJson ()Lcom/google/gson/JsonElement; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode; + public static fun values ()[Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$TruncationMode$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$TruncationMode; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Vertical : java/lang/Enum { + public static final field BOTTOM Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical; + public static final field CENTER Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical; + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical$Companion; + public static final field TOP Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical; + public final fun toJson ()Lcom/google/gson/JsonElement; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical; + public static fun values ()[Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Vertical$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Vertical; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$View { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$View$Companion; + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$View; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$View;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$View; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$View; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$View; + public final fun getId ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$View$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$View; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$View; +} + +public abstract class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$Companion; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe; + public static final fun fromJsonElement (Lcom/google/gson/JsonElement;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe; + public abstract fun toJson ()Lcom/google/gson/JsonElement; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe; + public final fun fromJsonElement (Lcom/google/gson/JsonElement;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe : com/datadog/android/sessionreplay/model/MobileSegment$Wireframe { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe$Companion; + public fun (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;)V + public synthetic fun (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component10 ()Ljava/lang/String; + public final fun component11 ()Ljava/lang/String; + public final fun component12 ()Ljava/lang/Boolean; + public final fun component2 ()J + public final fun component3 ()J + public final fun component4 ()J + public final fun component5 ()J + public final fun component6 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun component7 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun component8 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun component9 ()Ljava/lang/String; + public final fun copy (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe;JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe; + public final fun getBase64 ()Ljava/lang/String; + public final fun getBorder ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun getClip ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getHeight ()J + public final fun getId ()J + public final fun getMimeType ()Ljava/lang/String; + public final fun getResourceId ()Ljava/lang/String; + public final fun getShapeStyle ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun getType ()Ljava/lang/String; + public final fun getWidth ()J + public final fun getX ()J + public final fun getY ()J + public fun hashCode ()I + public final fun isEmpty ()Ljava/lang/Boolean; + public final fun setBase64 (Ljava/lang/String;)V + public final fun setEmpty (Ljava/lang/Boolean;)V + public final fun setMimeType (Ljava/lang/String;)V + public final fun setResourceId (Ljava/lang/String;)V + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$PlaceholderWireframe : com/datadog/android/sessionreplay/model/MobileSegment$Wireframe { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$PlaceholderWireframe$Companion; + public fun (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Ljava/lang/String;)V + public synthetic fun (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component2 ()J + public final fun component3 ()J + public final fun component4 ()J + public final fun component5 ()J + public final fun component6 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun component7 ()Ljava/lang/String; + public final fun copy (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$PlaceholderWireframe; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$PlaceholderWireframe;JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$PlaceholderWireframe; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$PlaceholderWireframe; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$PlaceholderWireframe; + public final fun getClip ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getHeight ()J + public final fun getId ()J + public final fun getLabel ()Ljava/lang/String; + public final fun getType ()Ljava/lang/String; + public final fun getWidth ()J + public final fun getX ()J + public final fun getY ()J + public fun hashCode ()I + public final fun setLabel (Ljava/lang/String;)V + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$PlaceholderWireframe$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$PlaceholderWireframe; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$PlaceholderWireframe; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe : com/datadog/android/sessionreplay/model/MobileSegment$Wireframe { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe$Companion; + public fun (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;)V + public synthetic fun (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component2 ()J + public final fun component3 ()J + public final fun component4 ()J + public final fun component5 ()J + public final fun component6 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun component7 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun component8 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun copy (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe;JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe; + public final fun getBorder ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun getClip ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getHeight ()J + public final fun getId ()J + public final fun getShapeStyle ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun getType ()Ljava/lang/String; + public final fun getWidth ()J + public final fun getX ()J + public final fun getY ()J + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe : com/datadog/android/sessionreplay/model/MobileSegment$Wireframe { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe$Companion; + public fun (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition;)V + public synthetic fun (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component10 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle; + public final fun component11 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition; + public final fun component2 ()J + public final fun component3 ()J + public final fun component4 ()J + public final fun component5 ()J + public final fun component6 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun component7 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun component8 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun component9 ()Ljava/lang/String; + public final fun copy (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe;JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe; + public final fun getBorder ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun getClip ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getHeight ()J + public final fun getId ()J + public final fun getShapeStyle ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun getText ()Ljava/lang/String; + public final fun getTextPosition ()Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition; + public final fun getTextStyle ()Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle; + public final fun getType ()Ljava/lang/String; + public final fun getWidth ()J + public final fun getX ()J + public final fun getY ()J + public fun hashCode ()I + public final fun setText (Ljava/lang/String;)V + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$WebviewWireframe : com/datadog/android/sessionreplay/model/MobileSegment$Wireframe { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$WebviewWireframe$Companion; + public fun (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/Boolean;)V + public synthetic fun (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/Boolean;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component10 ()Ljava/lang/Boolean; + public final fun component2 ()J + public final fun component3 ()J + public final fun component4 ()J + public final fun component5 ()J + public final fun component6 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun component7 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun component8 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun component9 ()Ljava/lang/String; + public final fun copy (JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/Boolean;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$WebviewWireframe; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$WebviewWireframe;JJJJJLcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/Boolean;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$WebviewWireframe; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$WebviewWireframe; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$WebviewWireframe; + public final fun getBorder ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun getClip ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getHeight ()J + public final fun getId ()J + public final fun getShapeStyle ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun getSlotId ()Ljava/lang/String; + public final fun getType ()Ljava/lang/String; + public final fun getWidth ()J + public final fun getX ()J + public final fun getY ()J + public fun hashCode ()I + public final fun isVisible ()Ljava/lang/Boolean; + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$Wireframe$WebviewWireframe$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$WebviewWireframe; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$WebviewWireframe; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeClip { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip$Companion; + public fun ()V + public fun (Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;)V + public synthetic fun (Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/Long; + public final fun component2 ()Ljava/lang/Long; + public final fun component3 ()Ljava/lang/Long; + public final fun component4 ()Ljava/lang/Long; + public final fun copy (Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getBottom ()Ljava/lang/Long; + public final fun getLeft ()Ljava/lang/Long; + public final fun getRight ()Ljava/lang/Long; + public final fun getTop ()Ljava/lang/Long; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeClip$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; +} + +public abstract class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$Companion; + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation; + public static final fun fromJsonElement (Lcom/google/gson/JsonElement;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation; + public abstract fun toJson ()Lcom/google/gson/JsonElement; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation; + public final fun fromJsonElement (Lcom/google/gson/JsonElement;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ImageWireframeUpdate : com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ImageWireframeUpdate$Companion; + public fun (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;)V + public synthetic fun (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component10 ()Ljava/lang/String; + public final fun component11 ()Ljava/lang/String; + public final fun component12 ()Ljava/lang/Boolean; + public final fun component2 ()Ljava/lang/Long; + public final fun component3 ()Ljava/lang/Long; + public final fun component4 ()Ljava/lang/Long; + public final fun component5 ()Ljava/lang/Long; + public final fun component6 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun component7 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun component8 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun component9 ()Ljava/lang/String; + public final fun copy (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ImageWireframeUpdate; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ImageWireframeUpdate;JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ImageWireframeUpdate; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ImageWireframeUpdate; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ImageWireframeUpdate; + public final fun getBase64 ()Ljava/lang/String; + public final fun getBorder ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun getClip ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getHeight ()Ljava/lang/Long; + public final fun getId ()J + public final fun getMimeType ()Ljava/lang/String; + public final fun getResourceId ()Ljava/lang/String; + public final fun getShapeStyle ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun getType ()Ljava/lang/String; + public final fun getWidth ()Ljava/lang/Long; + public final fun getX ()Ljava/lang/Long; + public final fun getY ()Ljava/lang/Long; + public fun hashCode ()I + public final fun isEmpty ()Ljava/lang/Boolean; + public final fun setBase64 (Ljava/lang/String;)V + public final fun setEmpty (Ljava/lang/Boolean;)V + public final fun setMimeType (Ljava/lang/String;)V + public final fun setResourceId (Ljava/lang/String;)V + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ImageWireframeUpdate$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ImageWireframeUpdate; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ImageWireframeUpdate; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$PlaceholderWireframeUpdate : com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$PlaceholderWireframeUpdate$Companion; + public fun (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Ljava/lang/String;)V + public synthetic fun (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component2 ()Ljava/lang/Long; + public final fun component3 ()Ljava/lang/Long; + public final fun component4 ()Ljava/lang/Long; + public final fun component5 ()Ljava/lang/Long; + public final fun component6 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun component7 ()Ljava/lang/String; + public final fun copy (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$PlaceholderWireframeUpdate; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$PlaceholderWireframeUpdate;JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$PlaceholderWireframeUpdate; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$PlaceholderWireframeUpdate; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$PlaceholderWireframeUpdate; + public final fun getClip ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getHeight ()Ljava/lang/Long; + public final fun getId ()J + public final fun getLabel ()Ljava/lang/String; + public final fun getType ()Ljava/lang/String; + public final fun getWidth ()Ljava/lang/Long; + public final fun getX ()Ljava/lang/Long; + public final fun getY ()Ljava/lang/Long; + public fun hashCode ()I + public final fun setLabel (Ljava/lang/String;)V + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$PlaceholderWireframeUpdate$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$PlaceholderWireframeUpdate; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$PlaceholderWireframeUpdate; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ShapeWireframeUpdate : com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ShapeWireframeUpdate$Companion; + public fun (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;)V + public synthetic fun (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component2 ()Ljava/lang/Long; + public final fun component3 ()Ljava/lang/Long; + public final fun component4 ()Ljava/lang/Long; + public final fun component5 ()Ljava/lang/Long; + public final fun component6 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun component7 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun component8 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun copy (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ShapeWireframeUpdate; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ShapeWireframeUpdate;JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ShapeWireframeUpdate; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ShapeWireframeUpdate; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ShapeWireframeUpdate; + public final fun getBorder ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun getClip ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getHeight ()Ljava/lang/Long; + public final fun getId ()J + public final fun getShapeStyle ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun getType ()Ljava/lang/String; + public final fun getWidth ()Ljava/lang/Long; + public final fun getX ()Ljava/lang/Long; + public final fun getY ()Ljava/lang/Long; + public fun hashCode ()I + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ShapeWireframeUpdate$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ShapeWireframeUpdate; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$ShapeWireframeUpdate; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$TextWireframeUpdate : com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$TextWireframeUpdate$Companion; + public fun (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition;)V + public synthetic fun (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component10 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle; + public final fun component11 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition; + public final fun component2 ()Ljava/lang/Long; + public final fun component3 ()Ljava/lang/Long; + public final fun component4 ()Ljava/lang/Long; + public final fun component5 ()Ljava/lang/Long; + public final fun component6 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun component7 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun component8 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun component9 ()Ljava/lang/String; + public final fun copy (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$TextWireframeUpdate; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$TextWireframeUpdate;JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$TextWireframeUpdate; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$TextWireframeUpdate; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$TextWireframeUpdate; + public final fun getBorder ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun getClip ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getHeight ()Ljava/lang/Long; + public final fun getId ()J + public final fun getShapeStyle ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun getText ()Ljava/lang/String; + public final fun getTextPosition ()Lcom/datadog/android/sessionreplay/model/MobileSegment$TextPosition; + public final fun getTextStyle ()Lcom/datadog/android/sessionreplay/model/MobileSegment$TextStyle; + public final fun getType ()Ljava/lang/String; + public final fun getWidth ()Ljava/lang/Long; + public final fun getX ()Ljava/lang/Long; + public final fun getY ()Ljava/lang/Long; + public fun hashCode ()I + public final fun setText (Ljava/lang/String;)V + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$TextWireframeUpdate$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$TextWireframeUpdate; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$TextWireframeUpdate; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$WebviewWireframeUpdate : com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation { + public static final field Companion Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$WebviewWireframeUpdate$Companion; + public fun (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/Boolean;)V + public synthetic fun (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/Boolean;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()J + public final fun component10 ()Ljava/lang/Boolean; + public final fun component2 ()Ljava/lang/Long; + public final fun component3 ()Ljava/lang/Long; + public final fun component4 ()Ljava/lang/Long; + public final fun component5 ()Ljava/lang/Long; + public final fun component6 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun component7 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun component8 ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun component9 ()Ljava/lang/String; + public final fun copy (JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/Boolean;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$WebviewWireframeUpdate; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$WebviewWireframeUpdate;JLjava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/Boolean;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$WebviewWireframeUpdate; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$WebviewWireframeUpdate; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$WebviewWireframeUpdate; + public final fun getBorder ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder; + public final fun getClip ()Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip; + public final fun getHeight ()Ljava/lang/Long; + public final fun getId ()J + public final fun getShapeStyle ()Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + public final fun getSlotId ()Ljava/lang/String; + public final fun getType ()Ljava/lang/String; + public final fun getWidth ()Ljava/lang/Long; + public final fun getX ()Ljava/lang/Long; + public final fun getY ()Ljava/lang/Long; + public fun hashCode ()I + public final fun isVisible ()Ljava/lang/Boolean; + public fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$WebviewWireframeUpdate$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$WebviewWireframeUpdate; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeUpdateMutation$WebviewWireframeUpdate; +} + +public final class com/datadog/android/sessionreplay/model/ResourceHashesEntry { + public static final field Companion Lcom/datadog/android/sessionreplay/model/ResourceHashesEntry$Companion; + public fun (Ljava/lang/Number;Ljava/util/List;)V + public final fun component1 ()Ljava/lang/Number; + public final fun component2 ()Ljava/util/List; + public final fun copy (Ljava/lang/Number;Ljava/util/List;)Lcom/datadog/android/sessionreplay/model/ResourceHashesEntry; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/ResourceHashesEntry;Ljava/lang/Number;Ljava/util/List;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/ResourceHashesEntry; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/ResourceHashesEntry; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/ResourceHashesEntry; + public final fun getLastUpdateDateNs ()Ljava/lang/Number; + public final fun getResourceHashes ()Ljava/util/List; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/ResourceHashesEntry$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/ResourceHashesEntry; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/ResourceHashesEntry; +} + +public final class com/datadog/android/sessionreplay/model/ResourceMetadata { + public static final field Companion Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Companion; + public fun (Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application;)V + public final fun component1 ()Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application; + public final fun copy (Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/ResourceMetadata;Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata; + public final fun getApplication ()Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application; + public final fun getType ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/ResourceMetadata$Application { + public static final field Companion Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application$Companion; + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application; + public fun equals (Ljava/lang/Object;)Z + public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application; + public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application; + public final fun getId ()Ljava/lang/String; + public fun hashCode ()I + public final fun toJson ()Lcom/google/gson/JsonElement; + public fun toString ()Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/model/ResourceMetadata$Application$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata$Application; +} + +public final class com/datadog/android/sessionreplay/model/ResourceMetadata$Companion { + public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata; + public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/sessionreplay/model/ResourceMetadata; +} + +public abstract interface class com/datadog/android/sessionreplay/recorder/InteropViewCallback { + public abstract fun map (Landroid/view/View;Lcom/datadog/android/sessionreplay/recorder/MappingContext;)Ljava/util/List; +} + +public final class com/datadog/android/sessionreplay/recorder/MappingContext { + public fun (Lcom/datadog/android/sessionreplay/recorder/SystemInformation;Lcom/datadog/android/sessionreplay/utils/ImageWireframeHelper;Lcom/datadog/android/sessionreplay/TextAndInputPrivacy;Lcom/datadog/android/sessionreplay/ImagePrivacy;Lcom/datadog/android/sessionreplay/internal/TouchPrivacyManager;ZLcom/datadog/android/sessionreplay/recorder/InteropViewCallback;)V + public synthetic fun (Lcom/datadog/android/sessionreplay/recorder/SystemInformation;Lcom/datadog/android/sessionreplay/utils/ImageWireframeHelper;Lcom/datadog/android/sessionreplay/TextAndInputPrivacy;Lcom/datadog/android/sessionreplay/ImagePrivacy;Lcom/datadog/android/sessionreplay/internal/TouchPrivacyManager;ZLcom/datadog/android/sessionreplay/recorder/InteropViewCallback;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/datadog/android/sessionreplay/recorder/SystemInformation; + public final fun component2 ()Lcom/datadog/android/sessionreplay/utils/ImageWireframeHelper; + public final fun component3 ()Lcom/datadog/android/sessionreplay/TextAndInputPrivacy; + public final fun component4 ()Lcom/datadog/android/sessionreplay/ImagePrivacy; + public final fun component5 ()Lcom/datadog/android/sessionreplay/internal/TouchPrivacyManager; + public final fun component6 ()Z + public final fun component7 ()Lcom/datadog/android/sessionreplay/recorder/InteropViewCallback; + public final fun copy (Lcom/datadog/android/sessionreplay/recorder/SystemInformation;Lcom/datadog/android/sessionreplay/utils/ImageWireframeHelper;Lcom/datadog/android/sessionreplay/TextAndInputPrivacy;Lcom/datadog/android/sessionreplay/ImagePrivacy;Lcom/datadog/android/sessionreplay/internal/TouchPrivacyManager;ZLcom/datadog/android/sessionreplay/recorder/InteropViewCallback;)Lcom/datadog/android/sessionreplay/recorder/MappingContext; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/recorder/MappingContext;Lcom/datadog/android/sessionreplay/recorder/SystemInformation;Lcom/datadog/android/sessionreplay/utils/ImageWireframeHelper;Lcom/datadog/android/sessionreplay/TextAndInputPrivacy;Lcom/datadog/android/sessionreplay/ImagePrivacy;Lcom/datadog/android/sessionreplay/internal/TouchPrivacyManager;ZLcom/datadog/android/sessionreplay/recorder/InteropViewCallback;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/recorder/MappingContext; + public fun equals (Ljava/lang/Object;)Z + public final fun getHasOptionSelectorParent ()Z + public final fun getImagePrivacy ()Lcom/datadog/android/sessionreplay/ImagePrivacy; + public final fun getImageWireframeHelper ()Lcom/datadog/android/sessionreplay/utils/ImageWireframeHelper; + public final fun getInteropViewCallback ()Lcom/datadog/android/sessionreplay/recorder/InteropViewCallback; + public final fun getSystemInformation ()Lcom/datadog/android/sessionreplay/recorder/SystemInformation; + public final fun getTextAndInputPrivacy ()Lcom/datadog/android/sessionreplay/TextAndInputPrivacy; + public final fun getTouchPrivacyManager ()Lcom/datadog/android/sessionreplay/internal/TouchPrivacyManager; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public abstract interface class com/datadog/android/sessionreplay/recorder/OptionSelectorDetector { + public abstract fun isOptionSelector (Landroid/view/ViewGroup;)Z +} + +public final class com/datadog/android/sessionreplay/recorder/SystemInformation { + public fun (Lcom/datadog/android/sessionreplay/utils/GlobalBounds;IFLjava/lang/String;)V + public synthetic fun (Lcom/datadog/android/sessionreplay/utils/GlobalBounds;IFLjava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/datadog/android/sessionreplay/utils/GlobalBounds; + public final fun component2 ()I + public final fun component3 ()F + public final fun component4 ()Ljava/lang/String; + public final fun copy (Lcom/datadog/android/sessionreplay/utils/GlobalBounds;IFLjava/lang/String;)Lcom/datadog/android/sessionreplay/recorder/SystemInformation; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/recorder/SystemInformation;Lcom/datadog/android/sessionreplay/utils/GlobalBounds;IFLjava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/recorder/SystemInformation; + public fun equals (Ljava/lang/Object;)Z + public final fun getScreenBounds ()Lcom/datadog/android/sessionreplay/utils/GlobalBounds; + public final fun getScreenDensity ()F + public final fun getScreenOrientation ()I + public final fun getThemeColor ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public abstract class com/datadog/android/sessionreplay/recorder/mapper/BaseAsyncBackgroundWireframeMapper : com/datadog/android/sessionreplay/recorder/mapper/BaseWireframeMapper { + public static final field Companion Lcom/datadog/android/sessionreplay/recorder/mapper/BaseAsyncBackgroundWireframeMapper$Companion; + public fun (Lcom/datadog/android/sessionreplay/utils/ViewIdentifierResolver;Lcom/datadog/android/sessionreplay/utils/ColorStringFormatter;Lcom/datadog/android/sessionreplay/utils/ViewBoundsResolver;Lcom/datadog/android/sessionreplay/utils/DrawableToColorMapper;)V + public fun map (Landroid/view/View;Lcom/datadog/android/sessionreplay/recorder/MappingContext;Lcom/datadog/android/sessionreplay/utils/AsyncJobStatusCallback;Lcom/datadog/android/api/InternalLogger;)Ljava/util/List; + protected fun resolveBackgroundAsImageWireframe (Landroid/view/View;Lcom/datadog/android/sessionreplay/utils/GlobalBounds;IILcom/datadog/android/sessionreplay/recorder/MappingContext;Lcom/datadog/android/sessionreplay/utils/AsyncJobStatusCallback;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe; + protected fun resolveBackgroundAsShapeWireframe (Landroid/view/View;Lcom/datadog/android/sessionreplay/utils/GlobalBounds;IILcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ShapeWireframe; + protected fun resolveViewBackground (Landroid/view/View;Lcom/datadog/android/sessionreplay/recorder/MappingContext;Lcom/datadog/android/sessionreplay/utils/AsyncJobStatusCallback;Lcom/datadog/android/api/InternalLogger;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe; +} + +public final class com/datadog/android/sessionreplay/recorder/mapper/BaseAsyncBackgroundWireframeMapper$Companion { +} + +public class com/datadog/android/sessionreplay/recorder/mapper/BaseViewGroupMapper : com/datadog/android/sessionreplay/recorder/mapper/BaseAsyncBackgroundWireframeMapper, com/datadog/android/sessionreplay/recorder/mapper/TraverseAllChildrenMapper { + public fun (Lcom/datadog/android/sessionreplay/utils/ViewIdentifierResolver;Lcom/datadog/android/sessionreplay/utils/ColorStringFormatter;Lcom/datadog/android/sessionreplay/utils/ViewBoundsResolver;Lcom/datadog/android/sessionreplay/utils/DrawableToColorMapper;)V +} + +public abstract class com/datadog/android/sessionreplay/recorder/mapper/BaseWireframeMapper : com/datadog/android/sessionreplay/recorder/mapper/WireframeMapper { + public fun (Lcom/datadog/android/sessionreplay/utils/ViewIdentifierResolver;Lcom/datadog/android/sessionreplay/utils/ColorStringFormatter;Lcom/datadog/android/sessionreplay/utils/ViewBoundsResolver;Lcom/datadog/android/sessionreplay/utils/DrawableToColorMapper;)V + protected final fun getColorStringFormatter ()Lcom/datadog/android/sessionreplay/utils/ColorStringFormatter; + protected final fun getDrawableToColorMapper ()Lcom/datadog/android/sessionreplay/utils/DrawableToColorMapper; + protected final fun getViewBoundsResolver ()Lcom/datadog/android/sessionreplay/utils/ViewBoundsResolver; + protected final fun getViewIdentifierResolver ()Lcom/datadog/android/sessionreplay/utils/ViewIdentifierResolver; + protected final fun resolveShapeStyle (Landroid/graphics/drawable/Drawable;FLcom/datadog/android/api/InternalLogger;)Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle; + protected final fun resolveViewId (Landroid/view/View;)J +} + +public final class com/datadog/android/sessionreplay/recorder/mapper/EditTextMapper : com/datadog/android/sessionreplay/recorder/mapper/TextViewMapper { + public static final field Companion Lcom/datadog/android/sessionreplay/recorder/mapper/EditTextMapper$Companion; + public fun (Lcom/datadog/android/sessionreplay/utils/ViewIdentifierResolver;Lcom/datadog/android/sessionreplay/utils/ColorStringFormatter;Lcom/datadog/android/sessionreplay/utils/ViewBoundsResolver;Lcom/datadog/android/sessionreplay/utils/DrawableToColorMapper;)V + public synthetic fun resolveCapturedText (Landroid/widget/TextView;Lcom/datadog/android/sessionreplay/TextAndInputPrivacy;Z)Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/recorder/mapper/EditTextMapper$Companion { +} + +public class com/datadog/android/sessionreplay/recorder/mapper/ImageViewMapper : com/datadog/android/sessionreplay/recorder/mapper/BaseAsyncBackgroundWireframeMapper { + public fun (Lcom/datadog/android/sessionreplay/utils/ViewIdentifierResolver;Lcom/datadog/android/sessionreplay/utils/ColorStringFormatter;Lcom/datadog/android/sessionreplay/utils/ViewBoundsResolver;Lcom/datadog/android/sessionreplay/utils/DrawableToColorMapper;Lcom/datadog/android/sessionreplay/recorder/resources/DrawableCopier;)V + public synthetic fun map (Landroid/view/View;Lcom/datadog/android/sessionreplay/recorder/MappingContext;Lcom/datadog/android/sessionreplay/utils/AsyncJobStatusCallback;Lcom/datadog/android/api/InternalLogger;)Ljava/util/List; + public fun map (Landroid/widget/ImageView;Lcom/datadog/android/sessionreplay/recorder/MappingContext;Lcom/datadog/android/sessionreplay/utils/AsyncJobStatusCallback;Lcom/datadog/android/api/InternalLogger;)Ljava/util/List; +} + +public class com/datadog/android/sessionreplay/recorder/mapper/TextViewMapper : com/datadog/android/sessionreplay/recorder/mapper/BaseAsyncBackgroundWireframeMapper { + public fun (Lcom/datadog/android/sessionreplay/utils/ViewIdentifierResolver;Lcom/datadog/android/sessionreplay/utils/ColorStringFormatter;Lcom/datadog/android/sessionreplay/utils/ViewBoundsResolver;Lcom/datadog/android/sessionreplay/utils/DrawableToColorMapper;)V + protected final fun createTextWireframe (Landroid/widget/TextView;Lcom/datadog/android/sessionreplay/recorder/MappingContext;Lcom/datadog/android/sessionreplay/utils/GlobalBounds;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$TextWireframe; + public synthetic fun map (Landroid/view/View;Lcom/datadog/android/sessionreplay/recorder/MappingContext;Lcom/datadog/android/sessionreplay/utils/AsyncJobStatusCallback;Lcom/datadog/android/api/InternalLogger;)Ljava/util/List; + public fun map (Landroid/widget/TextView;Lcom/datadog/android/sessionreplay/recorder/MappingContext;Lcom/datadog/android/sessionreplay/utils/AsyncJobStatusCallback;Lcom/datadog/android/api/InternalLogger;)Ljava/util/List; + protected fun resolveCapturedText (Landroid/widget/TextView;Lcom/datadog/android/sessionreplay/TextAndInputPrivacy;Z)Ljava/lang/String; +} + +public abstract interface class com/datadog/android/sessionreplay/recorder/mapper/TraverseAllChildrenMapper : com/datadog/android/sessionreplay/recorder/mapper/WireframeMapper { +} + +public abstract interface class com/datadog/android/sessionreplay/recorder/mapper/WireframeMapper { + public abstract fun map (Landroid/view/View;Lcom/datadog/android/sessionreplay/recorder/MappingContext;Lcom/datadog/android/sessionreplay/utils/AsyncJobStatusCallback;Lcom/datadog/android/api/InternalLogger;)Ljava/util/List; +} + +public final class com/datadog/android/sessionreplay/recorder/resources/DefaultDrawableCopier : com/datadog/android/sessionreplay/recorder/resources/DrawableCopier { + public fun ()V + public fun copy (Landroid/graphics/drawable/Drawable;Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable; +} + +public abstract interface class com/datadog/android/sessionreplay/recorder/resources/DrawableCopier { + public abstract fun copy (Landroid/graphics/drawable/Drawable;Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable; +} + +public final class com/datadog/android/sessionreplay/recorder/wrappers/BitmapWrapper { + public fun ()V + public fun (Lcom/datadog/android/api/InternalLogger;)V + public synthetic fun (Lcom/datadog/android/api/InternalLogger;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun createBitmap (IILandroid/graphics/Bitmap$Config;Landroid/util/DisplayMetrics;)Landroid/graphics/Bitmap; + public static synthetic fun createBitmap$default (Lcom/datadog/android/sessionreplay/recorder/wrappers/BitmapWrapper;IILandroid/graphics/Bitmap$Config;Landroid/util/DisplayMetrics;ILjava/lang/Object;)Landroid/graphics/Bitmap; +} + +public final class com/datadog/android/sessionreplay/recorder/wrappers/CanvasWrapper { + public fun (Lcom/datadog/android/api/InternalLogger;)V + public final fun createCanvas (Landroid/graphics/Bitmap;)Landroid/graphics/Canvas; +} + +public abstract interface class com/datadog/android/sessionreplay/utils/AsyncJobStatusCallback { + public abstract fun jobFinished ()V + public abstract fun jobStarted ()V +} + +public final class com/datadog/android/sessionreplay/utils/ColorConstantsKt { + public static final field OPAQUE_ALPHA_VALUE I + public static final field PARTIALLY_OPAQUE_ALPHA_VALUE I +} + +public abstract interface class com/datadog/android/sessionreplay/utils/ColorStringFormatter { + public abstract fun formatColorAndAlphaAsHexString (II)Ljava/lang/String; + public abstract fun formatColorAsHexString (I)Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/utils/DefaultColorStringFormatter : com/datadog/android/sessionreplay/utils/ColorStringFormatter { + public static final field INSTANCE Lcom/datadog/android/sessionreplay/utils/DefaultColorStringFormatter; + public fun formatColorAndAlphaAsHexString (II)Ljava/lang/String; + public fun formatColorAsHexString (I)Ljava/lang/String; +} + +public final class com/datadog/android/sessionreplay/utils/DefaultViewBoundsResolver : com/datadog/android/sessionreplay/utils/ViewBoundsResolver { + public static final field INSTANCE Lcom/datadog/android/sessionreplay/utils/DefaultViewBoundsResolver; + public fun resolveViewGlobalBounds (Landroid/view/View;F)Lcom/datadog/android/sessionreplay/utils/GlobalBounds; + public fun resolveViewPaddedBounds (Landroid/view/View;F)Lcom/datadog/android/sessionreplay/utils/GlobalBounds; +} + +public final class com/datadog/android/sessionreplay/utils/DefaultViewIdentifierResolver : com/datadog/android/sessionreplay/utils/ViewIdentifierResolver { + public static final field INSTANCE Lcom/datadog/android/sessionreplay/utils/DefaultViewIdentifierResolver; + public fun resolveChildUniqueIdentifier (Landroid/view/View;Ljava/lang/String;)Ljava/lang/Long; + public fun resolveViewId (Landroid/view/View;)J +} + +public abstract interface class com/datadog/android/sessionreplay/utils/DrawableToColorMapper { + public static final field Companion Lcom/datadog/android/sessionreplay/utils/DrawableToColorMapper$Companion; + public abstract fun mapDrawableToColor (Landroid/graphics/drawable/Drawable;Lcom/datadog/android/api/InternalLogger;)Ljava/lang/Integer; +} + +public final class com/datadog/android/sessionreplay/utils/DrawableToColorMapper$Companion { + public final fun getDefault (Ljava/util/List;)Lcom/datadog/android/sessionreplay/utils/DrawableToColorMapper; + public static synthetic fun getDefault$default (Lcom/datadog/android/sessionreplay/utils/DrawableToColorMapper$Companion;Ljava/util/List;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/utils/DrawableToColorMapper; +} + +public final class com/datadog/android/sessionreplay/utils/GlobalBounds { + public fun (JJJJ)V + public final fun component1 ()J + public final fun component2 ()J + public final fun component3 ()J + public final fun component4 ()J + public final fun copy (JJJJ)Lcom/datadog/android/sessionreplay/utils/GlobalBounds; + public static synthetic fun copy$default (Lcom/datadog/android/sessionreplay/utils/GlobalBounds;JJJJILjava/lang/Object;)Lcom/datadog/android/sessionreplay/utils/GlobalBounds; + public fun equals (Ljava/lang/Object;)Z + public final fun getHeight ()J + public final fun getWidth ()J + public final fun getX ()J + public final fun getY ()J + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public abstract interface class com/datadog/android/sessionreplay/utils/ImageWireframeHelper { + public static final field Companion Lcom/datadog/android/sessionreplay/utils/ImageWireframeHelper$Companion; + public abstract fun createCompoundDrawableWireframes (Landroid/widget/TextView;Lcom/datadog/android/sessionreplay/recorder/MappingContext;ILjava/lang/String;Lcom/datadog/android/sessionreplay/utils/AsyncJobStatusCallback;)Ljava/util/List; + public abstract fun createImageWireframeByBitmap (JLcom/datadog/android/sessionreplay/utils/GlobalBounds;Landroid/graphics/Bitmap;FZLcom/datadog/android/sessionreplay/ImagePrivacy;Lcom/datadog/android/sessionreplay/utils/AsyncJobStatusCallback;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe; + public abstract fun createImageWireframeByDrawable (Landroid/view/View;Lcom/datadog/android/sessionreplay/ImagePrivacy;IJJIIZLandroid/graphics/drawable/Drawable;Lcom/datadog/android/sessionreplay/recorder/resources/DrawableCopier;Lcom/datadog/android/sessionreplay/utils/AsyncJobStatusCallback;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe; + public abstract fun createImageWireframeByPath (JLcom/datadog/android/sessionreplay/utils/GlobalBounds;Landroid/graphics/Path;IIIIFZLcom/datadog/android/sessionreplay/ImagePrivacy;Lcom/datadog/android/sessionreplay/utils/AsyncJobStatusCallback;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe; +} + +public final class com/datadog/android/sessionreplay/utils/ImageWireframeHelper$Companion { +} + +public final class com/datadog/android/sessionreplay/utils/ImageWireframeHelper$DefaultImpls { + public static synthetic fun createImageWireframeByBitmap$default (Lcom/datadog/android/sessionreplay/utils/ImageWireframeHelper;JLcom/datadog/android/sessionreplay/utils/GlobalBounds;Landroid/graphics/Bitmap;FZLcom/datadog/android/sessionreplay/ImagePrivacy;Lcom/datadog/android/sessionreplay/utils/AsyncJobStatusCallback;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe; + public static synthetic fun createImageWireframeByDrawable$default (Lcom/datadog/android/sessionreplay/utils/ImageWireframeHelper;Landroid/view/View;Lcom/datadog/android/sessionreplay/ImagePrivacy;IJJIIZLandroid/graphics/drawable/Drawable;Lcom/datadog/android/sessionreplay/recorder/resources/DrawableCopier;Lcom/datadog/android/sessionreplay/utils/AsyncJobStatusCallback;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe; + public static synthetic fun createImageWireframeByPath$default (Lcom/datadog/android/sessionreplay/utils/ImageWireframeHelper;JLcom/datadog/android/sessionreplay/utils/GlobalBounds;Landroid/graphics/Path;IIIIFZLcom/datadog/android/sessionreplay/ImagePrivacy;Lcom/datadog/android/sessionreplay/utils/AsyncJobStatusCallback;Lcom/datadog/android/sessionreplay/model/MobileSegment$WireframeClip;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeStyle;Lcom/datadog/android/sessionreplay/model/MobileSegment$ShapeBorder;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe; +} + +public abstract interface class com/datadog/android/sessionreplay/utils/ViewBoundsResolver { + public abstract fun resolveViewGlobalBounds (Landroid/view/View;F)Lcom/datadog/android/sessionreplay/utils/GlobalBounds; + public abstract fun resolveViewPaddedBounds (Landroid/view/View;F)Lcom/datadog/android/sessionreplay/utils/GlobalBounds; +} + +public abstract interface class com/datadog/android/sessionreplay/utils/ViewIdentifierResolver { + public abstract fun resolveChildUniqueIdentifier (Landroid/view/View;Ljava/lang/String;)Ljava/lang/Long; + public abstract fun resolveViewId (Landroid/view/View;)J +} + diff --git a/features/dd-sdk-android-session-replay-noop/build.gradle.kts b/features/dd-sdk-android-session-replay-noop/build.gradle.kts new file mode 100644 index 0000000000..42aa952ff1 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/build.gradle.kts @@ -0,0 +1,69 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ +@file:Suppress("StringLiteralDuplication") + +import com.datadog.gradle.config.androidLibraryConfig +import com.datadog.gradle.config.dependencyUpdateConfig +import com.datadog.gradle.config.detektCustomConfig +import com.datadog.gradle.config.javadocConfig +import com.datadog.gradle.config.kotlinConfig +import com.datadog.gradle.config.publishingConfig +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +plugins { + // Build + id("com.android.library") + kotlin("android") + id("com.google.devtools.ksp") + + // Publish + `maven-publish` + signing + id("org.jetbrains.dokka-javadoc") + + // Analysis tools + id("com.github.ben-manes.versions") + + // Internal Generation + id("com.datadoghq.dependency-license") + id("apiSurface") + id("transitiveDependencies") + id("verificationXml") + id("binary-compatibility-validator") +} + +android { + defaultConfig { + consumerProguardFiles("consumer-rules.pro") + } + + namespace = "com.datadog.android.sessionreplay" +} + +dependencies { + api(project(":dd-sdk-android-core")) + implementation(project(":dd-sdk-android-internal")) + implementation(libs.okHttp) + implementation(libs.kotlin) + implementation(libs.gson) + implementation(libs.androidXAppCompat) + + ksp(project(":tools:noopfactory")) +} + +apply(from = "clone_session_replay_schema.gradle.kts") +apply(from = "generate_session_replay_models.gradle.kts") + +kotlinConfig(jvmBytecodeTarget = JvmTarget.JVM_11) +androidLibraryConfig() +javadocConfig() +dependencyUpdateConfig() +publishingConfig( + "The Session Replay feature to use with the Datadog monitoring " + + "library for Android applications.", + customArtifactId = "dd-sdk-android-session-replay-noop" +) +detektCustomConfig() diff --git a/features/dd-sdk-android-session-replay-noop/clone_session_replay_schema.gradle.kts b/features/dd-sdk-android-session-replay-noop/clone_session_replay_schema.gradle.kts new file mode 100644 index 0000000000..8f44443b6b --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/clone_session_replay_schema.gradle.kts @@ -0,0 +1,46 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ +import com.datadog.gradle.utils.cloneRumEventsFormat +import com.datadog.gradle.utils.createRumSchemaCloneTask + +createRumSchemaCloneTask("cloneSessionReplayRootSchemas") { + cloneRumEventsFormat( + project = project, + subFolder = "schemas/", + destinationFolder = "src/main/json/schemas", + excludedPrefixes = listOf( + "profiling", + "session-replay/", + "rum", + "mobile", + "telemetry", + "session-replay-schema", + "session-replay-browser-schema" + ) + ) +} + +createRumSchemaCloneTask("cloneSessionReplayMobileSchemas") { + cloneRumEventsFormat( + project = project, + subFolder = "schemas/session-replay/mobile", + destinationFolder = "src/main/json/schemas/session-replay/mobile" + ) +} + +createRumSchemaCloneTask("cloneSessionReplayCommonSchemas") { + cloneRumEventsFormat( + project = project, + subFolder = "schemas/session-replay/common", + destinationFolder = "src/main/json/schemas/session-replay/common" + ) +} + +tasks.register("cloneSessionReplaySchemas") { + dependsOn("cloneSessionReplayRootSchemas") + dependsOn("cloneSessionReplayMobileSchemas") + dependsOn("cloneSessionReplayCommonSchemas") +} diff --git a/features/dd-sdk-android-session-replay-noop/consumer-rules.pro b/features/dd-sdk-android-session-replay-noop/consumer-rules.pro new file mode 100644 index 0000000000..790c8c450a --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/consumer-rules.pro @@ -0,0 +1,13 @@ +# Keep the optional selector class name. We need this in the SR recorder. +-keepnames class * extends android.view.View +-keepnames class * extends android.graphics.drawable.Drawable +-keepnames class * extends android.graphics.ColorFilter + +# Kept for our internal telemetry +-keepnames class com.datadog.android.sessionreplay.internal.recorder.listener.WindowsOnDrawListener +-keepnames class com.datadog.android.sessionreplay.internal.recorder.TreeViewTraversal +-keepnames class * extends com.datadog.android.sessionreplay.recorder.mapper.WireframeMapper +-keepnames class * extends com.datadog.android.sessionreplay.internal.async.RecordedDataQueueItem + +# Keep the fine grained masking level enums +-keepnames enum * extends com.datadog.android.sessionreplay.PrivacyLevel { *; } diff --git a/features/dd-sdk-android-session-replay-noop/generate_session_replay_models.gradle.kts b/features/dd-sdk-android-session-replay-noop/generate_session_replay_models.gradle.kts new file mode 100644 index 0000000000..82041a09c9 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/generate_session_replay_models.gradle.kts @@ -0,0 +1,14 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +import com.datadog.gradle.utils.createJsonModelsGenerationTask + +val generateSessionReplayModelsTaskName = "generateSessionReplayModels" + +createJsonModelsGenerationTask(generateSessionReplayModelsTaskName) { + inputDirPath = "src/main/json/schemas" + targetPackageName = "com.datadog.android.sessionreplay.model" +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/resource-hashes-entry.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/resource-hashes-entry.json new file mode 100644 index 0000000000..ab5694749b --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/resource-hashes-entry.json @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "resource-hashes-entry.json", + "title": "ResourceHashesEntry", + "type": "object", + "description": "Schema of all properties of a ResourceHashesEntry.", + "required": [ + "last_update_date_ns", + "resource_hashes" + ], + "properties": { + "last_update_date_ns": { + "description": "The last time we updated the date for the datastore.", + "type": "number", + "readOnly": true + }, + "resource_hashes": { + "description": "The collection of resource hashes.", + "type": "array", + "items": { + "type": "string" + } + } + }, + "readOnly": true +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/resource-metadata-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/resource-metadata-schema.json new file mode 100644 index 0000000000..f7f5da8b2a --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/resource-metadata-schema.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "resource-metadata-schema.json", + "title": "ResourceMetadata", + "type": "object", + "description": "Schema of the resource metadata. The metadata to identify the asset's content uploaded to the backend", + "required": ["type", "application"], + "properties": { + "type": { + "type": "string", + "const": "resource" + }, + "application": { + "type": "object", + "description": "Application properties", + "required": ["id"], + "properties": { + "id": { + "type": "string", + "description": "UUID of the application", + "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$", + "readOnly": true + } + }, + "readOnly": true + } + } +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay-mobile-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay-mobile-schema.json new file mode 100644 index 0000000000..f5bb77e4f9 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay-mobile-schema.json @@ -0,0 +1,5 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay-mobile-schema.json", + "$ref": "session-replay/mobile/segment-schema.json" +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/_common-record-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/_common-record-schema.json new file mode 100644 index 0000000000..c1abe37dcb --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/_common-record-schema.json @@ -0,0 +1,14 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/common/_common-record-schema.json", + "title": "CommonRecordSchema", + "type": "object", + "description": "Schema of common properties for a Record event type.", + "required": ["timestamp"], + "properties": { + "timestamp": { + "type": "integer", + "description": "Defines the UTC time in milliseconds when this Record was performed." + } + } +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/_common-segment-metadata-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/_common-segment-metadata-schema.json new file mode 100644 index 0000000000..9c21024461 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/_common-segment-metadata-schema.json @@ -0,0 +1,30 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/common/_common-segment-metadata-schema.json", + "title": "CommonSegmentMetadataSchema", + "type": "object", + "description": "Schema of common properties for a Segment Metadata type.", + "required": ["start", "end", "records_count"], + "properties": { + "start": { + "type": "integer", + "description": "The start UTC timestamp in milliseconds corresponding to the first record in the Segment data. Each timestamp is computed as the UTC interval since 00:00:00.000 01.01.1970." + }, + "end": { + "type": "integer", + "description": "The end UTC timestamp in milliseconds corresponding to the last record in the Segment data. Each timestamp is computed as the UTC interval since 00:00:00.000 01.01.1970." + }, + "records_count": { + "type": "integer", + "description": "The number of records in this Segment." + }, + "index_in_view": { + "type": "integer", + "description": "The index of this Segment in the segments list that was recorded for this view ID. Starts from 0." + }, + "has_full_snapshot": { + "type": "boolean", + "description": "Whether this Segment contains a full snapshot record or not." + } + } +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/_slot-supported-common-record-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/_slot-supported-common-record-schema.json new file mode 100644 index 0000000000..1a9405d512 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/_slot-supported-common-record-schema.json @@ -0,0 +1,21 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/common/_slot-supported-common-record-schema.json", + "title": "SlotSupportedCommonRecordSchema", + "type": "object", + "description": "Schema of common properties for a Record event type that is supported by slots.", + "allOf": [ + { + "$ref": "_common-record-schema.json" + }, + { + "properties": { + "slotId": { + "type": "string", + "description": "Unique ID of the slot that generated this record.", + "readOnly": true + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/focus-record-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/focus-record-schema.json new file mode 100644 index 0000000000..c4e8e0150d --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/focus-record-schema.json @@ -0,0 +1,34 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/common/focus-record-schema.json", + "title": "FocusRecord", + "type": "object", + "description": "Schema of a Record type which contains focus information.", + "allOf": [ + { + "$ref": "_slot-supported-common-record-schema.json" + }, + { + "required": ["type", "data"], + "properties": { + "type": { + "type": "integer", + "description": "The type of this Record.", + "const": 6, + "readOnly": true + }, + "data": { + "type": "object", + "required": ["has_focus"], + "properties": { + "has_focus": { + "type": "boolean", + "description": "Whether this screen has a focus or not. For now it will always be true for mobile.", + "readOnly": true + } + } + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/meta-record-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/meta-record-schema.json new file mode 100644 index 0000000000..d3bec64342 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/meta-record-schema.json @@ -0,0 +1,42 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/common/meta-record-schema.json", + "title": "MetaRecord", + "type": "object", + "description": "Schema of a Record which contains the screen properties.", + "allOf": [ + { + "$ref": "_slot-supported-common-record-schema.json" + }, + { + "required": ["type", "data"], + "properties": { + "type": { + "type": "integer", + "description": "The type of this Record.", + "const": 4, + "readOnly": true + }, + "data": { + "type": "object", + "description": "The data contained by this record.", + "required": ["width", "height"], + "properties": { + "width": { + "type": "integer", + "description": "The width of the screen in pixels, normalized based on the device pixels per inch density (DPI). Example: if a device has a DPI = 2, the normalized width is the current width divided by 2." + }, + "height": { + "type": "integer", + "description": "The height of the screen in pixels, normalized based on the device pixels per inch density (DPI). Example: if a device has a DPI = 2, the normalized height is the current height divided by 2." + }, + "href": { + "type": "string", + "description": "Browser-specific. URL of the view described by this record." + } + } + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/pointer-interaction-data-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/pointer-interaction-data-schema.json new file mode 100644 index 0000000000..ddfad89922 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/pointer-interaction-data-schema.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/common/pointer-interaction-data-schema.json", + "title": "PointerInteractionData", + "type": "object", + "description": "Schema of a PointerInteractionData.", + "allOf": [ + { + "required": ["source"], + "properties": { + "source": { + "type": "integer", + "const": 9, + "description": "The source of this type of incremental data.", + "readOnly": true + } + } + }, + { + "$ref": "pointer-interaction-schema.json" + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/pointer-interaction-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/pointer-interaction-schema.json new file mode 100644 index 0000000000..5a2d10c8e0 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/pointer-interaction-schema.json @@ -0,0 +1,34 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/common/pointer-interaction-schema.json", + "title": "PointerInteraction", + "type": "object", + "description": "Schema of a PointerInteraction.", + "required": ["pointerEventType", "pointerType", "pointerId", "x", "y"], + "properties": { + "pointerEventType": { + "type": "string", + "description": "Schema of an PointerEventType", + "enum": ["down", "up", "move"], + "readOnly": true + }, + "pointerType": { + "type": "string", + "description": "Schema of an PointerType", + "enum": ["mouse", "touch", "pen"], + "readOnly": true + }, + "pointerId": { + "type": "integer", + "description": "Id of the pointer of this PointerInteraction." + }, + "x": { + "type": "number", + "description": "X-axis coordinate for this PointerInteraction." + }, + "y": { + "type": "number", + "description": "Y-axis coordinate for this PointerInteraction." + } + } +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/segment-context-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/segment-context-schema.json new file mode 100644 index 0000000000..ed55b2f0bb --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/segment-context-schema.json @@ -0,0 +1,46 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/common/segment-context-schema.json", + "title": "SegmentContext", + "type": "object", + "description": "Schema of a Session Replay Segment context.", + "required": ["application", "session", "view"], + "properties": { + "application": { + "type": "object", + "description": "Application properties", + "required": ["id"], + "properties": { + "id": { + "type": "string", + "description": "UUID of the application", + "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$" + } + } + }, + "session": { + "type": "object", + "description": "Session properties", + "required": ["id"], + "properties": { + "id": { + "type": "string", + "description": "UUID of the session", + "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$" + } + } + }, + "view": { + "type": "object", + "description": "View properties", + "required": ["id"], + "properties": { + "id": { + "type": "string", + "description": "UUID of the view", + "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$" + } + } + } + } +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/view-end-record-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/view-end-record-schema.json new file mode 100644 index 0000000000..4920430257 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/view-end-record-schema.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/common/view-end-record-schema.json", + "title": "ViewEndRecord", + "type": "object", + "description": "Schema of a Record which signifies that view lifecycle ended.", + "allOf": [ + { + "$ref": "_slot-supported-common-record-schema.json" + }, + { + "required": ["type"], + "properties": { + "type": { + "type": "integer", + "description": "The type of this Record.", + "const": 7, + "readOnly": true + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/viewport-resize-data-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/viewport-resize-data-schema.json new file mode 100644 index 0000000000..5095b809ad --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/viewport-resize-data-schema.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/common/viewport-resize-data-schema.json", + "title": "ViewportResizeData", + "type": "object", + "description": "Schema of a ViewportResizeData.", + "allOf": [ + { + "required": ["source"], + "properties": { + "source": { + "type": "integer", + "const": 4, + "description": "The source of this type of incremental data.", + "readOnly": true + } + } + }, + { + "$ref": "viewport-resize-dimension-schema.json" + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/viewport-resize-dimension-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/viewport-resize-dimension-schema.json new file mode 100644 index 0000000000..be09ec7853 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/viewport-resize-dimension-schema.json @@ -0,0 +1,18 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/common/viewport-resize-dimension-schema.json", + "type": "object", + "title": "ViewportResizeDimension", + "description": "Schema of a ViewportResizeDimension.", + "required": ["width", "height"], + "properties": { + "width": { + "type": "integer", + "description": "The new width of the screen in pixels, normalized based on the device pixels per inch density (DPI). Example: if a device has a DPI = 2, the width is divided by 2 to get a normalized width." + }, + "height": { + "type": "integer", + "description": "The new height of the screen in pixels, normalized based on the device pixels per inch density (DPI). Example: if a device has a DPI = 2, the height is divided by 2 to get a normalized height." + } + } +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/visual-viewport-record-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/visual-viewport-record-schema.json new file mode 100644 index 0000000000..35ca325e80 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/common/visual-viewport-record-schema.json @@ -0,0 +1,50 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/common/visual-viewport-record-schema.json", + "title": "VisualViewportRecord", + "type": "object", + "description": "Schema of a Record which signifies that the viewport properties have changed.", + "allOf": [ + { + "$ref": "_slot-supported-common-record-schema.json" + }, + { + "required": ["data", "type"], + "properties": { + "data": { + "required": ["height", "offsetLeft", "offsetTop", "pageLeft", "pageTop", "scale", "width"], + "properties": { + "height": { + "type": "number" + }, + "offsetLeft": { + "type": "number" + }, + "offsetTop": { + "type": "number" + }, + "pageLeft": { + "type": "number" + }, + "pageTop": { + "type": "number" + }, + "scale": { + "type": "number" + }, + "width": { + "type": "number" + } + }, + "type": "object" + }, + "type": { + "type": "integer", + "description": "The type of this Record.", + "const": 8, + "readOnly": true + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/_common-shape-wireframe-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/_common-shape-wireframe-schema.json new file mode 100644 index 0000000000..577a62ca51 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/_common-shape-wireframe-schema.json @@ -0,0 +1,22 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/_common-shape-wireframe-schema.json", + "title": "CommonShapeWireframe", + "type": "object", + "description": "Schema of common properties for ShapeWireframe events type and all its sub - types.", + "allOf": [ + { + "$ref": "_common-wireframe-schema.json" + }, + { + "properties": { + "shapeStyle": { + "$ref": "shape-style-schema.json" + }, + "border": { + "$ref": "shape-border-schema.json" + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/_common-shape-wireframe-update-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/_common-shape-wireframe-update-schema.json new file mode 100644 index 0000000000..378b81bc2b --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/_common-shape-wireframe-update-schema.json @@ -0,0 +1,22 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/_common-shape-wireframe-update-schema.json", + "title": "CommonShapeWireframeUpdate", + "type": "object", + "description": "Schema of common properties for ShapeWireframeUpdate events type and all its sub - types.", + "allOf": [ + { + "$ref": "_common-wireframe-update-schema.json" + }, + { + "properties": { + "shapeStyle": { + "$ref": "shape-style-schema.json" + }, + "border": { + "$ref": "shape-border-schema.json" + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/_common-wireframe-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/_common-wireframe-schema.json new file mode 100644 index 0000000000..bd677668f0 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/_common-wireframe-schema.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/_common-wireframe-schema.json", + "title": "CommonWireframe", + "type": "object", + "description": "Schema of common properties for Wireframe events type.", + "required": ["id", "x", "y", "width", "height"], + "properties": { + "id": { + "type": "integer", + "description": "Defines the unique ID of the wireframe. This is persistent throughout the view lifetime.", + "readOnly": true + }, + "x": { + "type": "integer", + "description": "The position in pixels on X axis of the UI element in absolute coordinates. The anchor point is always the top-left corner of the wireframe.", + "readOnly": true + }, + "y": { + "type": "integer", + "description": "The position in pixels on Y axis of the UI element in absolute coordinates. The anchor point is always the top-left corner of the wireframe.", + "readOnly": true + }, + "width": { + "type": "integer", + "description": "The width in pixels of the UI element, normalized based on the device pixels per inch density (DPI). Example: if a device has a DPI = 2, the width of all UI elements is divided by 2 to get a normalized width.", + "readOnly": true + }, + "height": { + "type": "integer", + "description": "The height in pixels of the UI element, normalized based on the device pixels per inch density (DPI). Example: if a device has a DPI = 2, the height of all UI elements is divided by 2 to get a normalized height.", + "readOnly": true + }, + "clip": { + "$ref": "wireframe-clip-schema.json" + } + } +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/_common-wireframe-update-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/_common-wireframe-update-schema.json new file mode 100644 index 0000000000..d5398223bb --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/_common-wireframe-update-schema.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/_common-wireframe-update-schema.json", + "title": "CommonWireframeUpdate", + "type": "object", + "description": "Schema of common properties for WireframeUpdate events type.", + "required": ["id"], + "properties": { + "id": { + "type": "integer", + "description": "Defines the unique ID of the wireframe. This is persistent throughout the view lifetime.", + "readOnly": true + }, + "x": { + "type": "integer", + "description": "The position in pixels on X axis of the UI element in absolute coordinates. The anchor point is always the top-left corner of the wireframe.", + "readOnly": true + }, + "y": { + "type": "integer", + "description": "The position in pixels on Y axis of the UI element in absolute coordinates. The anchor point is always the top-left corner of the wireframe.", + "readOnly": true + }, + "width": { + "type": "integer", + "description": "The width in pixels of the UI element, normalized based on the device pixels per inch density (DPI). Example: if a device has a DPI = 2, the width of all UI elements is divided by 2 to get a normalized width.", + "readOnly": true + }, + "height": { + "type": "integer", + "description": "The height in pixels of the UI element, normalized based on the device pixels per inch density (DPI). Example: if a device has a DPI = 2, the height of all UI elements is divided by 2 to get a normalized height.", + "readOnly": true + }, + "clip": { + "$ref": "wireframe-clip-schema.json" + } + } +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/full-snapshot-record-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/full-snapshot-record-schema.json new file mode 100644 index 0000000000..26f708d2b2 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/full-snapshot-record-schema.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/full-snapshot-record-schema.json", + "title": "MobileFullSnapshotRecord", + "type": "object", + "description": "Mobile-specific. Schema of a Record type which contains the full snapshot of a screen.", + "allOf": [ + { + "$ref": "../common/_common-record-schema.json" + }, + { + "required": ["type", "data"], + "properties": { + "type": { + "type": "integer", + "description": "The type of this Record.", + "const": 10, + "readOnly": true + }, + "data": { + "type": "object", + "readOnly": true, + "required": ["wireframes"], + "properties": { + "wireframes": { + "type": "array", + "items": { + "$ref": "wireframe-schema.json" + }, + "description": "The Wireframes contained by this Record.", + "readOnly": true + } + } + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/image-wireframe-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/image-wireframe-schema.json new file mode 100644 index 0000000000..cadaa44715 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/image-wireframe-schema.json @@ -0,0 +1,43 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/image-wireframe-schema.json", + "title": "ImageWireframe", + "type": "object", + "description": "Schema of all properties of a ImageWireframe.", + "allOf": [ + { + "$ref": "_common-shape-wireframe-schema.json" + }, + { + "required": ["type"], + "properties": { + "type": { + "type": "string", + "description": "The type of the wireframe.", + "const": "image", + "readOnly": true + }, + "base64": { + "type": "string", + "description": "base64 representation of the image. Not required as the ImageWireframe can be initialised without any base64", + "readOnly": false + }, + "resourceId": { + "type": "string", + "description": "Unique identifier of the image resource", + "readOnly": false + }, + "mimeType": { + "type": "string", + "description": "MIME type of the image file", + "readOnly": false + }, + "isEmpty": { + "type": "boolean", + "description": "Flag describing an image wireframe that should render an empty state placeholder", + "readOnly": false + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/image-wireframe-update-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/image-wireframe-update-schema.json new file mode 100644 index 0000000000..a913e39090 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/image-wireframe-update-schema.json @@ -0,0 +1,43 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/image-wireframe-update-schema.json", + "title": "ImageWireframeUpdate", + "type": "object", + "description": "Schema of all properties of a ImageWireframeUpdate.", + "allOf": [ + { + "$ref": "_common-shape-wireframe-update-schema.json" + }, + { + "required": ["type"], + "properties": { + "type": { + "type": "string", + "description": "The type of the wireframe.", + "const": "image", + "readOnly": true + }, + "base64": { + "type": "string", + "description": "base64 representation of the image. Not required as the ImageWireframe can be initialised without any base64", + "readOnly": false + }, + "resourceId": { + "type": "string", + "description": "Unique identifier of the image resource", + "readOnly": false + }, + "mimeType": { + "type": "string", + "description": "MIME type of the image file", + "readOnly": false + }, + "isEmpty": { + "type": "boolean", + "description": "Flag describing an image wireframe that should render an empty state placeholder", + "readOnly": false + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/incremental-data-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/incremental-data-schema.json new file mode 100644 index 0000000000..eb24f66b35 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/incremental-data-schema.json @@ -0,0 +1,21 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/incremental-data-schema.json", + "title": "MobileIncrementalData", + "type": "object", + "description": "Mobile-specific. Schema of a Session Replay IncrementalData type.", + "oneOf": [ + { + "$ref": "mutation-data-schema.json" + }, + { + "$ref": "touch-data-schema.json" + }, + { + "$ref": "../common/viewport-resize-data-schema.json" + }, + { + "$ref": "../common/pointer-interaction-data-schema.json" + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/incremental-snapshot-record-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/incremental-snapshot-record-schema.json new file mode 100644 index 0000000000..664e02708b --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/incremental-snapshot-record-schema.json @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/incremental-snapshot-record-schema.json", + "title": "MobileIncrementalSnapshotRecord", + "type": "object", + "description": "Mobile-specific. Schema of a Record type which contains mutations of a screen.", + "allOf": [ + { + "$ref": "../common/_common-record-schema.json" + }, + { + "required": ["type", "data"], + "properties": { + "type": { + "type": "integer", + "description": "The type of this Record.", + "const": 11, + "readOnly": true + }, + "data": { + "$ref": "incremental-data-schema.json" + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/mutation-data-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/mutation-data-schema.json new file mode 100644 index 0000000000..9a836dc59d --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/mutation-data-schema.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/mutation-data-schema.json", + "title": "MobileMutationData", + "type": "object", + "description": "Mobile-specific. Schema of a MutationData.", + "allOf": [ + { + "required": ["source"], + "properties": { + "source": { + "type": "integer", + "const": 0, + "description": "The source of this type of incremental data.", + "readOnly": true + } + } + }, + { + "$ref": "mutation-payload-schema.json" + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/mutation-payload-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/mutation-payload-schema.json new file mode 100644 index 0000000000..d85d638aef --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/mutation-payload-schema.json @@ -0,0 +1,51 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/mutation-payload-schema.json", + "title": "MobileMutationPayload", + "type": "object", + "description": "Mobile-specific. Schema of a MutationPayload.", + "required": ["adds", "removes", "updates"], + "properties": { + "adds": { + "type": "array", + "readOnly": true, + "items": { + "type": "object", + "required": ["wireframe"], + "properties": { + "previousId": { + "type": "integer", + "description": "The previous wireframe id next or after which this new wireframe is drawn or attached to, respectively." + }, + "wireframe": { + "$ref": "wireframe-schema.json" + } + } + }, + "description": "Contains the newly added wireframes." + }, + "removes": { + "type": "array", + "readOnly": true, + "items": { + "type": "object", + "required": ["id"], + "properties": { + "id": { + "type": "integer", + "description": "The id of the wireframe that needs to be removed." + } + } + }, + "description": "Contains the removed wireframes as an array of ids." + }, + "updates": { + "type": "array", + "readOnly": true, + "items": { + "$ref": "wireframe-update-mutation-schema.json" + }, + "description": "Contains the updated wireframes mutations." + } + } +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/placeholder-wireframe-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/placeholder-wireframe-schema.json new file mode 100644 index 0000000000..b3ae802c09 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/placeholder-wireframe-schema.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/placeholder-wireframe-schema.json", + "title": "PlaceholderWireframe", + "type": "object", + "description": "Schema of all properties of a PlaceholderWireframe.", + "allOf": [ + { + "$ref": "_common-wireframe-schema.json" + }, + { + "required": ["type"], + "properties": { + "type": { + "type": "string", + "description": "The type of the wireframe.", + "const": "placeholder", + "readOnly": true + }, + "label": { + "type": "string", + "description": "Label of the placeholder", + "readOnly": false + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/placeholder-wireframe-update-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/placeholder-wireframe-update-schema.json new file mode 100644 index 0000000000..5920255b49 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/placeholder-wireframe-update-schema.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/placeholder-wireframe-update-schema.json", + "title": "PlaceholderWireframeUpdate", + "type": "object", + "description": "Schema of all properties of a PlaceholderWireframe.", + "allOf": [ + { + "$ref": "_common-wireframe-update-schema.json" + }, + { + "required": ["type"], + "properties": { + "type": { + "type": "string", + "description": "The type of the wireframe.", + "const": "placeholder", + "readOnly": true + }, + "label": { + "type": "string", + "description": "Label of the placeholder", + "readOnly": false + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/record-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/record-schema.json new file mode 100644 index 0000000000..959219d1a7 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/record-schema.json @@ -0,0 +1,27 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/record-schema.json", + "title": "MobileRecord", + "type": "object", + "description": "Mobile-specific. Schema of a Session Replay Record.", + "oneOf": [ + { + "$ref": "full-snapshot-record-schema.json" + }, + { + "$ref": "incremental-snapshot-record-schema.json" + }, + { + "$ref": "../common/meta-record-schema.json" + }, + { + "$ref": "../common/focus-record-schema.json" + }, + { + "$ref": "../common/view-end-record-schema.json" + }, + { + "$ref": "../common/visual-viewport-record-schema.json" + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/segment-metadata-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/segment-metadata-schema.json new file mode 100644 index 0000000000..5966a2e571 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/segment-metadata-schema.json @@ -0,0 +1,25 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/segment-metadata-schema.json", + "title": "MobileSegmentMetadata", + "type": "object", + "description": "Mobile-specific. Schema of a Session Replay Segment metadata.", + "allOf": [ + { + "$ref": "../common/segment-context-schema.json" + }, + { + "$ref": "../common/_common-segment-metadata-schema.json" + }, + { + "required": ["source"], + "properties": { + "source": { + "type": "string", + "description": "The source of this record", + "enum": ["android", "ios", "flutter", "react-native", "kotlin-multiplatform"] + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/segment-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/segment-schema.json new file mode 100644 index 0000000000..a6ef87b9c3 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/segment-schema.json @@ -0,0 +1,25 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/segment-schema.json", + "title": "MobileSegment", + "type": "object", + "description": "Mobile-specific. Schema of a Session Replay data Segment.", + "allOf": [ + { + "$ref": "segment-metadata-schema.json" + }, + { + "required": ["records"], + "properties": { + "records": { + "type": "array", + "items": { + "$ref": "record-schema.json" + }, + "description": "The records contained by this Segment.", + "readOnly": true + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/shape-border-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/shape-border-schema.json new file mode 100644 index 0000000000..4aa33e3c95 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/shape-border-schema.json @@ -0,0 +1,25 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/shape-border-schema.json", + "title": "ShapeBorder", + "type": "object", + "description": "The border properties of this wireframe. The default value is null (no-border).", + "allOf": [ + { + "required": ["color", "width"], + "properties": { + "color": { + "type": "string", + "pattern": "^#[A-Fa-f0-9]{6}([A-Fa-f0-9]{2})?$", + "description": "The border color as a String hexadecimal. Follows the #RRGGBBAA color format with the alpha value as optional.", + "readOnly": true + }, + "width": { + "type": "integer", + "description": "The width of the border in pixels.", + "readOnly": true + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/shape-style-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/shape-style-schema.json new file mode 100644 index 0000000000..166267be44 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/shape-style-schema.json @@ -0,0 +1,29 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/shape-style-schema.json", + "title": "ShapeStyle", + "type": "object", + "description": "The style of this wireframe.", + "allOf": [ + { + "properties": { + "backgroundColor": { + "type": "string", + "pattern": "^#[A-Fa-f0-9]{6}([A-Fa-f0-9]{2})?$", + "description": "The background color for this wireframe as a String hexadecimal. Follows the #RRGGBBAA color format with the alpha value as optional. The default value is #FFFFFF00.", + "readOnly": true + }, + "opacity": { + "type": "number", + "description": "The opacity of this wireframe. Takes values from 0 to 1, default value is 1.", + "readOnly": true + }, + "cornerRadius": { + "type": "number", + "description": "The corner(border) radius of this wireframe in pixels. The default value is 0.", + "readOnly": true + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/shape-wireframe-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/shape-wireframe-schema.json new file mode 100644 index 0000000000..4aec81e7b4 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/shape-wireframe-schema.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/shape-wireframe-schema.json", + "title": "ShapeWireframe", + "type": "object", + "description": "Schema of all properties of a ShapeWireframe.", + "allOf": [ + { + "$ref": "_common-shape-wireframe-schema.json" + }, + { + "required": ["type"], + "properties": { + "type": { + "type": "string", + "description": "The type of the wireframe.", + "const": "shape", + "readOnly": true + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/shape-wireframe-update-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/shape-wireframe-update-schema.json new file mode 100644 index 0000000000..6fff2f6580 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/shape-wireframe-update-schema.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/shape-wireframe-update-schema.json", + "title": "ShapeWireframeUpdate", + "type": "object", + "description": "Schema of a ShapeWireframeUpdate.", + "allOf": [ + { + "$ref": "_common-shape-wireframe-update-schema.json" + }, + { + "required": ["type"], + "properties": { + "type": { + "type": "string", + "description": "The type of the wireframe.", + "const": "shape", + "readOnly": true + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/text-position-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/text-position-schema.json new file mode 100644 index 0000000000..6eb547285c --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/text-position-schema.json @@ -0,0 +1,57 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/text-position-schema.json", + "title": "TextPosition", + "type": "object", + "description": "Schema of all properties of a TextPosition.", + "allOf": [ + { + "properties": { + "padding": { + "type": "object", + "properties": { + "top": { + "type": "integer", + "description": "The top padding in pixels. The default value is 0.", + "readOnly": true + }, + "bottom": { + "type": "integer", + "description": "The bottom padding in pixels. The default value is 0.", + "readOnly": true + }, + "left": { + "type": "integer", + "description": "The left padding in pixels. The default value is 0.", + "readOnly": true + }, + "right": { + "type": "integer", + "description": "The right padding in pixels. The default value is 0.", + "readOnly": true + } + }, + "readOnly": true + }, + "alignment": { + "type": "object", + "properties": { + "horizontal": { + "type": "string", + "description": "The horizontal text alignment. The default value is `left`.", + "enum": ["left", "right", "center"], + "readOnly": true + }, + "vertical": { + "type": "string", + "description": "The vertical text alignment. The default value is `top`.", + "enum": ["top", "bottom", "center"], + "readOnly": true + } + }, + "readOnly": true + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/text-style-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/text-style-schema.json new file mode 100644 index 0000000000..5dd9ce06f8 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/text-style-schema.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/text-style-schema.json", + "title": "TextStyle", + "type": "object", + "description": "Schema of all properties of a TextStyle.", + "allOf": [ + { + "required": ["color", "family", "size"], + "properties": { + "family": { + "type": "string", + "description": "The preferred font family collection, ordered by preference and formatted as a String list: e.g. Century Gothic, Verdana, sans-serif", + "readOnly": true + }, + "size": { + "type": "integer", + "description": "The font size in pixels.", + "readOnly": true + }, + "color": { + "type": "string", + "pattern": "^#[A-Fa-f0-9]{6}([A-Fa-f0-9]{2})?$", + "description": "The font color as a string hexadecimal. Follows the #RRGGBBAA color format with the alpha value as optional.", + "readOnly": true + }, + "truncationMode": { + "type": "string", + "description": "Defines how text should be truncated when it exceeds the wireframe bounds. If omitted, text wraps naturally.", + "enum": ["clip", "head", "tail", "middle"], + "readOnly": true + } + }, + "readOnly": true + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/text-wireframe-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/text-wireframe-schema.json new file mode 100644 index 0000000000..0eb8233ba5 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/text-wireframe-schema.json @@ -0,0 +1,34 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/text-wireframe-schema.json", + "title": "TextWireframe", + "type": "object", + "description": "Schema of all properties of a TextWireframe.", + "allOf": [ + { + "$ref": "_common-shape-wireframe-schema.json" + }, + { + "required": ["text", "type", "textStyle"], + "properties": { + "type": { + "type": "string", + "description": "The type of the wireframe.", + "const": "text", + "readOnly": true + }, + "text": { + "type": "string", + "description": "The text value of the wireframe.", + "readOnly": false + }, + "textStyle": { + "$ref": "text-style-schema.json" + }, + "textPosition": { + "$ref": "text-position-schema.json" + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/text-wireframe-update-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/text-wireframe-update-schema.json new file mode 100644 index 0000000000..c65ea0fd7e --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/text-wireframe-update-schema.json @@ -0,0 +1,34 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/text-wireframe-update-schema.json", + "title": "TextWireframeUpdate", + "type": "object", + "description": "Schema of all properties of a TextWireframeUpdate.", + "allOf": [ + { + "$ref": "_common-shape-wireframe-update-schema.json" + }, + { + "required": ["type"], + "properties": { + "type": { + "type": "string", + "description": "The type of the wireframe.", + "const": "text", + "readOnly": true + }, + "text": { + "type": "string", + "description": "The text value of the wireframe.", + "readOnly": false + }, + "textStyle": { + "$ref": "text-style-schema.json" + }, + "textPosition": { + "$ref": "text-position-schema.json" + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/touch-data-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/touch-data-schema.json new file mode 100644 index 0000000000..1bce4f5931 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/touch-data-schema.json @@ -0,0 +1,51 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/touch-data-schema.json", + "title": "TouchData", + "type": "object", + "description": "Schema of a TouchData.", + "allOf": [ + { + "required": ["source"], + "properties": { + "source": { + "type": "integer", + "const": 2, + "description": "The source of this type of incremental data.", + "readOnly": true + }, + "positions": { + "type": "array", + "readOnly": true, + "items": { + "type": "object", + "required": ["id", "x", "y", "timestamp"], + "properties": { + "id": { + "type": "integer", + "description": "The touch id of the touch event this position corresponds to. In mobile it is possible to have multiple touch events (fingers touching the screen) happening at the same time.", + "readOnly": true + }, + "x": { + "type": "integer", + "description": "The x coordinate value of the position.", + "readOnly": true + }, + "y": { + "type": "integer", + "description": "The y coordinate value of the position.", + "readOnly": true + }, + "timestamp": { + "type": "integer", + "description": "The UTC timestamp in milliseconds corresponding to the moment the position change was recorded. Each timestamp is computed as the UTC interval since 00:00:00.000 01.01.1970.", + "readOnly": true + } + } + }, + "description": "Contains the positions of the finger on the screen during the touchDown/touchUp event lifecycle." + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/webview-wireframe-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/webview-wireframe-schema.json new file mode 100644 index 0000000000..bc82e7036e --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/webview-wireframe-schema.json @@ -0,0 +1,33 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/webview-wireframe-schema.json", + "title": "WebviewWireframe", + "type": "object", + "description": "Schema of all properties of a WebviewWireframe.", + "allOf": [ + { + "$ref": "_common-shape-wireframe-schema.json" + }, + { + "required": ["type", "slotId"], + "properties": { + "type": { + "type": "string", + "description": "The type of the wireframe.", + "const": "webview", + "readOnly": true + }, + "slotId": { + "type": "string", + "description": "Unique Id of the slot containing this webview.", + "readOnly": true + }, + "isVisible": { + "type": "boolean", + "description": "Whether this webview is visible or not.", + "readOnly": true + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/webview-wireframe-update-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/webview-wireframe-update-schema.json new file mode 100644 index 0000000000..551d6da313 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/webview-wireframe-update-schema.json @@ -0,0 +1,33 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/webview-wireframe-update-schema.json", + "title": "WebviewWireframeUpdate", + "type": "object", + "description": "Schema of all properties of a WebviewWireframeUpdate.", + "allOf": [ + { + "$ref": "_common-shape-wireframe-update-schema.json" + }, + { + "required": ["type", "slotId"], + "properties": { + "type": { + "type": "string", + "description": "The type of the wireframe.", + "const": "webview", + "readOnly": true + }, + "slotId": { + "type": "string", + "description": "Unique Id of the slot containing this webview.", + "readOnly": true + }, + "isVisible": { + "type": "boolean", + "description": "Whether this webview is visible or not.", + "readOnly": true + } + } + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/wireframe-clip-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/wireframe-clip-schema.json new file mode 100644 index 0000000000..e5e67edac7 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/wireframe-clip-schema.json @@ -0,0 +1,29 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/wireframe-clip-schema.json", + "title": "WireframeClip", + "type": "object", + "description": "Schema of clipping information for a Wireframe.", + "properties": { + "top": { + "type": "integer", + "description": "The amount of space in pixels that needs to be clipped (masked) at the top of the wireframe.", + "readOnly": true + }, + "bottom": { + "type": "integer", + "description": "The amount of space in pixels that needs to be clipped (masked) at the bottom of the wireframe.", + "readOnly": true + }, + "left": { + "type": "integer", + "description": "The amount of space in pixels that needs to be clipped (masked) at the left of the wireframe.", + "readOnly": true + }, + "right": { + "type": "integer", + "description": "The amount of space in pixels that needs to be clipped (masked) at the right of the wireframe.", + "readOnly": true + } + } +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/wireframe-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/wireframe-schema.json new file mode 100644 index 0000000000..b3ba3a763f --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/wireframe-schema.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/wireframe-schema.json", + "title": "Wireframe", + "type": "object", + "description": "Schema of a Wireframe type.", + "oneOf": [ + { + "$ref": "shape-wireframe-schema.json" + }, + { + "$ref": "text-wireframe-schema.json" + }, + { + "$ref": "image-wireframe-schema.json" + }, + { + "$ref": "placeholder-wireframe-schema.json" + }, + { + "$ref": "webview-wireframe-schema.json" + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/wireframe-update-mutation-schema.json b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/wireframe-update-mutation-schema.json new file mode 100644 index 0000000000..65f921351a --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/json/schemas/session-replay/mobile/wireframe-update-mutation-schema.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "session-replay/mobile/wireframe-update-mutation-schema.json", + "title": "WireframeUpdateMutation", + "type": "object", + "description": "Schema of a WireframeUpdateMutation type.", + "oneOf": [ + { + "$ref": "text-wireframe-update-schema.json" + }, + { + "$ref": "shape-wireframe-update-schema.json" + }, + { + "$ref": "image-wireframe-update-schema.json" + }, + { + "$ref": "placeholder-wireframe-update-schema.json" + }, + { + "$ref": "webview-wireframe-update-schema.json" + } + ] +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/kotlin/androidx/appcompat/widget/DatadogActionBarContainerAccessor.kt b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/androidx/appcompat/widget/DatadogActionBarContainerAccessor.kt new file mode 100644 index 0000000000..476f4409e9 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/androidx/appcompat/widget/DatadogActionBarContainerAccessor.kt @@ -0,0 +1,29 @@ +@file:Suppress("PackageNaming") +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package androidx.appcompat.widget + +import android.annotation.SuppressLint +import android.graphics.drawable.Drawable + +// We need to stay in the `androidx.appcompat.widget` package to access package private fields +// Error: ActionBarContainer can only be accessed from within the same library group prefix +@Suppress("PackageNameVisibility", "RestrictedApi") +internal class DatadogActionBarContainerAccessor( + val container: ActionBarContainer +) { + + @SuppressLint("RestrictedApi") + fun getBackgroundDrawable(): Drawable? { + return container.mBackground + } + + @SuppressLint("RestrictedApi") + fun setBackgroundDrawable(drawable: Drawable) { + container.mBackground = drawable + } +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/ExtensionSupport.kt b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/ExtensionSupport.kt new file mode 100644 index 0000000000..d77f18c45c --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/ExtensionSupport.kt @@ -0,0 +1,32 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.sessionreplay + +/** + * Interface to be implemented by any Session Replay extension. + */ +interface ExtensionSupport { + /** + * @return the list of [MapperTypeWrapper] to use for this extension. + */ + fun getCustomViewMappers(): List> + + /** + * @return the list of [Any] to use for this extension. + */ + fun getCustomDrawableMapper(): List + + /** + * @return the list of [Any] to use for this extension. + */ + fun getOptionSelectorDetectors(): List + + /** + * @return the name of the extension. + */ + fun name(): String +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/ImagePrivacy.kt b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/ImagePrivacy.kt new file mode 100644 index 0000000000..f1ad3457a4 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/ImagePrivacy.kt @@ -0,0 +1,27 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.sessionreplay + +/** + * Defines the Image privacy level. + */ +enum class ImagePrivacy : PrivacyLevel { + /** + * All the images will be masked. + */ + MASK_ALL, + + /** + * All the images will be masked, except for the ones that are smaller than a certain threshold. + */ + MASK_LARGE_ONLY, + + /** + * No images will be masked. + */ + MASK_NONE +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/MapperTypeWrapper.kt b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/MapperTypeWrapper.kt new file mode 100644 index 0000000000..09cc66c333 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/MapperTypeWrapper.kt @@ -0,0 +1,18 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.sessionreplay + +import android.view.View + +/** + * A wrapper for a [WireframeMapper] and the [View] type it supports. + */ +@Suppress("UNUSED_PARAMETER") +class MapperTypeWrapper( + val type: Class, + val mapper: Any +) diff --git a/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/MobileSegmentConstants.kt b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/MobileSegmentConstants.kt new file mode 100644 index 0000000000..933e395a4e --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/MobileSegmentConstants.kt @@ -0,0 +1,35 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.sessionreplay + +/** + * Constants for Mobile Segment. + */ +object MobileSegmentConstants { + /** record type focus. */ + const val RECORD_TYPE_FOCUS: Long = 0 + /** record type full snapshot. */ + const val RECORD_TYPE_FULL_SNAPSHOT: Long = 0 + /** record type incremental snapshot. */ + const val RECORD_TYPE_INCREMENTAL_SNAPSHOT: Long = 0 + /** record type meta. */ + const val RECORD_TYPE_META: Long = 0 + /** record type view end. */ + const val RECORD_TYPE_VIEW_END: Long = 0 + /** record type visual viewport. */ + const val RECORD_TYPE_VISUAL_VIEWPORT: Long = 0 + /** wireframe type image. */ + const val WIREFRAME_TYPE_IMAGE: String = "" + /** wireframe type placeholder. */ + const val WIREFRAME_TYPE_PLACEHOLDER: String = "" + /** wireframe type shape. */ + const val WIREFRAME_TYPE_SHAPE: String = "" + /** wireframe type text. */ + const val WIREFRAME_TYPE_TEXT: String = "" + /** wireframe type webview. */ + const val WIREFRAME_TYPE_WEBVIEW: String = "" +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/PrivacyConstants.kt b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/PrivacyConstants.kt new file mode 100644 index 0000000000..d4cd3f4795 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/PrivacyConstants.kt @@ -0,0 +1,15 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.sessionreplay + +/** + * Constants for Privacy. + */ +object PrivacyConstants { + /** image dimen considered pii in dp. */ + const val IMAGE_DIMEN_CONSIDERED_PII_IN_DP: Int = 0 +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/PrivacyLevel.kt b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/PrivacyLevel.kt new file mode 100644 index 0000000000..6b9899172a --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/PrivacyLevel.kt @@ -0,0 +1,12 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.sessionreplay + +/** + * Base interface for privacy masking levels. + */ +interface PrivacyLevel diff --git a/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/PrivacyOverrideExtensions.kt b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/PrivacyOverrideExtensions.kt new file mode 100644 index 0000000000..65379a0e3a --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/PrivacyOverrideExtensions.kt @@ -0,0 +1,37 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.sessionreplay + +import android.view.View + +/** + * Extension functions to hide/unhide a view from Session Replay. + */ +@Suppress("UNUSED_PARAMETER") +fun View.setSessionReplayHidden(hidden: Boolean) { +} + +/** + * Extension functions to override the image privacy for a view in Session Replay. + */ +@Suppress("UNUSED_PARAMETER") +fun View.setSessionReplayImagePrivacy(imagePrivacy: ImagePrivacy) { +} + +/** + * Extension functions to override the touch privacy for a view in Session Replay. + */ +@Suppress("UNUSED_PARAMETER") +fun View.setSessionReplayTouchPrivacy(touchPrivacy: TouchPrivacy) { +} + +/** + * Extension functions to override the text and input privacy for a view in Session Replay. + */ +@Suppress("UNUSED_PARAMETER") +fun View.setSessionReplayTextAndInputPrivacy(textAndInputPrivacy: TextAndInputPrivacy) { +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/SessionReplay.kt b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/SessionReplay.kt new file mode 100644 index 0000000000..564edfa419 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/SessionReplay.kt @@ -0,0 +1,62 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.sessionreplay + +import com.datadog.android.Datadog +import com.datadog.android.api.SdkCore + +/** + * An entry point to Datadog Session Replay feature. + */ +@Suppress("UNUSED_PARAMETER") +object SessionReplay { + + internal const val IS_ALREADY_REGISTERED_WARNING = + "Session Replay is already enabled and does not support multiple instances. " + + "The existing instance will continue to be used." + + /** + * Enables a SessionReplay feature based on the configuration provided. + * It is recommended to invoke this function as early as possible in the app's lifecycle, + * ideally within the `Application#onCreate` callback, to ensure proper initialization. + * + * @param sessionReplayConfiguration Configuration to use for the feature. + * @param sdkCore SDK instance to register feature in. If not provided, default SDK instance + * will be used. + */ + @JvmOverloads + @JvmStatic + fun enable( + sessionReplayConfiguration: SessionReplayConfiguration, + sdkCore: SdkCore = Datadog.getInstance() + ) { + } + + /** + * Start recording session replay data. + * @param sdkCore SDK instance to get the feature from. If not provided, default SDK instance + * will be used. + */ + @JvmOverloads + @JvmStatic + fun startRecording( + sdkCore: SdkCore = Datadog.getInstance() + ) { + } + + /** + * Stop recording session replay data. + * @param sdkCore SDK instance to get the feature from. If not provided, default SDK instance + * will be used. + */ + @JvmOverloads + @JvmStatic + fun stopRecording( + sdkCore: SdkCore = Datadog.getInstance() + ) { + } +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/SessionReplayConfiguration.kt b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/SessionReplayConfiguration.kt new file mode 100644 index 0000000000..52b4f2c344 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/SessionReplayConfiguration.kt @@ -0,0 +1,97 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.sessionreplay + +/** + * Describes configuration to be used for the Session Replay feature. + */ +@Suppress("UNUSED_PARAMETER") +class SessionReplayConfiguration internal constructor() { + + /** + * A Builder class for a [SessionReplayConfiguration]. + */ + class Builder { + + /** + * Sets the sample rate for this feature. + * @param sampleRate the sample rate, in percent. A value of `30` means we'll send 30% + * of the sessions. If value is `0`, no session will be recorded. + * Default is 0.0. + */ + fun setSampleRate(sampleRate: Float): Builder { + return this + } + + /** + * Let the Session Replay feature target a custom server. + * @param endpoint the full endpoint url, e.g.: https://example.com/session-replay/upload + */ + fun useCustomEndpoint(endpoint: String): Builder { + return this + } + + /** + * Sets the privacy level for this feature. + * @param privacyLevel the privacy level to use. + * Default is [SessionReplayPrivacy.MASK]. + * @see [SessionReplayPrivacy] + */ + fun setPrivacy(privacyLevel: SessionReplayPrivacy): Builder { + return this + } + + /** + * Adds an extension support for the Session Replay feature. + * @param extensionSupport the extension support to add. + */ + fun addExtensionSupport(extensionSupport: ExtensionSupport): Builder { + return this + } + + /** + * Sets the dynamic privacy rules for this feature. + * @param imagePrivacy the image privacy to use. + */ + fun setImagePrivacy(imagePrivacy: ImagePrivacy): Builder { + return this + } + + /** + * Sets the touch privacy for this feature. + * @param touchPrivacy the touch privacy to use. + */ + fun setTouchPrivacy(touchPrivacy: TouchPrivacy): Builder { + return this + } + + /** + * Sets the dynamic privacy rules for this feature. + * @param textAndInputPrivacy the text and input privacy to use. + */ + fun setTextAndInputPrivacy(textAndInputPrivacy: TextAndInputPrivacy): Builder { + return this + } + + /** + * Sets the system requirements configuration for the Session Replay feature. + * @param systemRequirementsConfiguration the system requirements configuration to use. + */ + fun setSystemRequirementsConfiguration( + systemRequirementsConfiguration: SystemRequirementsConfiguration + ): Builder { + return this + } + + /** + * Builds a [SessionReplayConfiguration] based on the current state of this Builder. + */ + fun build(): SessionReplayConfiguration { + return SessionReplayConfiguration() + } + } +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/SessionReplayInternalCallback.kt b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/SessionReplayInternalCallback.kt new file mode 100644 index 0000000000..1d934c0ad2 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/SessionReplayInternalCallback.kt @@ -0,0 +1,29 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.sessionreplay + +import android.app.Activity + +/** + * Internal callback for Session Replay. + */ +interface SessionReplayInternalCallback { + /** + * Adds a resource item to the resource queue. + */ + fun addResourceItem(identifier: String, resourceData: ByteArray, applicationIdentifier: String) + + /** + * @return the current activity. + */ + fun getCurrentActivity(): Activity? + + /** + * Sets the resource queue. + */ + fun setResourceQueue(resourceQueue: SessionReplayInternalResourceQueue) +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/SessionReplayInternalResourceQueue.kt b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/SessionReplayInternalResourceQueue.kt new file mode 100644 index 0000000000..fc8e358387 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/SessionReplayInternalResourceQueue.kt @@ -0,0 +1,17 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.sessionreplay + +/** + * Internal resource queue for Session Replay. + */ +interface SessionReplayInternalResourceQueue { + /** + * Adds a resource item to the resource queue. + */ + fun addResourceItem(identifier: String, resourceData: ByteArray, applicationIdentifier: String) +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/SessionReplayPrivacy.kt b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/SessionReplayPrivacy.kt new file mode 100644 index 0000000000..c7e07c4668 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/SessionReplayPrivacy.kt @@ -0,0 +1,27 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.sessionreplay + +/** + * Defines the Session Replay privacy level. + */ +enum class SessionReplayPrivacy { + /** + * All the views will be masked. + */ + MASK, + + /** + * All the views will be visible. + */ + ALLOW, + + /** + * All the user input views will be masked. + */ + MASK_USER_INPUT +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/SystemRequirementsConfiguration.kt b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/SystemRequirementsConfiguration.kt new file mode 100644 index 0000000000..95f91800b7 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/SystemRequirementsConfiguration.kt @@ -0,0 +1,57 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.sessionreplay + +/** + * Describes system requirements configuration to be used for the Session Replay feature. + */ +@Suppress("UNUSED_PARAMETER") +class SystemRequirementsConfiguration internal constructor() { + + /** + * A Builder class for a [SystemRequirementsConfiguration]. + */ + class Builder { + + /** + * Sets the minimum RAM size requirement for this feature. + * @param minRAMSizeMb the minimum RAM size requirement, in megabytes. + */ + fun setMinRAMSizeMb(minRAMSizeMb: Int): Builder { + return this + } + + /** + * Sets the minimum CPU core number requirement for this feature. + * @param minCPUCoreNumber the minimum CPU core number requirement. + */ + fun setMinCPUCoreNumber(minCPUCoreNumber: Int): Builder { + return this + } + + /** + * Builds a [SystemRequirementsConfiguration] based on the current state of this Builder. + */ + fun build(): SystemRequirementsConfiguration { + return SystemRequirementsConfiguration() + } + } + + companion object { + /** + * Basic system requirements configuration. + */ + @JvmStatic + val BASIC: SystemRequirementsConfiguration = SystemRequirementsConfiguration() + + /** + * No system requirements configuration. + */ + @JvmStatic + val NONE: SystemRequirementsConfiguration = SystemRequirementsConfiguration() + } +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/TextAndInputPrivacy.kt b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/TextAndInputPrivacy.kt new file mode 100644 index 0000000000..98c5fc99de --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/TextAndInputPrivacy.kt @@ -0,0 +1,27 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.sessionreplay + +/** + * Defines the Text and Input privacy level. + */ +enum class TextAndInputPrivacy : PrivacyLevel { + /** + * All the text will be masked. + */ + MASK_ALL, + + /** + * All the user input views will be masked. + */ + MASK_ALL_INPUTS, + + /** + * All the sensitive user input views will be masked. + */ + MASK_SENSITIVE_INPUTS +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/TouchPrivacy.kt b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/TouchPrivacy.kt new file mode 100644 index 0000000000..67214ee028 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/TouchPrivacy.kt @@ -0,0 +1,22 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.sessionreplay + +/** + * Defines the Touch privacy level. + */ +enum class TouchPrivacy : PrivacyLevel { + /** + * All the touches will be visible. + */ + SHOW, + + /** + * All the touches will be hidden. + */ + HIDE +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/_SessionReplayInternalProxy.kt b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/_SessionReplayInternalProxy.kt new file mode 100644 index 0000000000..71e021a112 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/kotlin/com/datadog/android/sessionreplay/_SessionReplayInternalProxy.kt @@ -0,0 +1,20 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.sessionreplay + +/** + * Proxy for internal Session Replay functionality. + */ +@Suppress("UNUSED_PARAMETER") +class _SessionReplayInternalProxy(builder: SessionReplayConfiguration.Builder) { + /** + * Sets the internal callback for Session Replay. + */ + fun setInternalCallback(callback: SessionReplayInternalCallback): SessionReplayConfiguration.Builder { + return SessionReplayConfiguration.Builder() + } +} diff --git a/features/dd-sdk-android-session-replay-noop/src/main/res/values/ids.xml b/features/dd-sdk-android-session-replay-noop/src/main/res/values/ids.xml new file mode 100644 index 0000000000..9aa089d8fd --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/src/main/res/values/ids.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/features/dd-sdk-android-session-replay-noop/transitiveDependencies b/features/dd-sdk-android-session-replay-noop/transitiveDependencies new file mode 100644 index 0000000000..3fbaa5b242 --- /dev/null +++ b/features/dd-sdk-android-session-replay-noop/transitiveDependencies @@ -0,0 +1,36 @@ +Dependencies List + +androidx.activity:activity:1.2.4 : 67 Kb +androidx.annotation:annotation-experimental:1.1.0 : 16 Kb +androidx.annotation:annotation-jvm:1.9.1 : 59 Kb +androidx.appcompat:appcompat-resources:1.4.2 : 65 Kb +androidx.appcompat:appcompat:1.4.2 : 1092 Kb +androidx.arch.core:core-common:2.1.0 : 10 Kb +androidx.arch.core:core-runtime:2.1.0 : 5 Kb +androidx.collection:collection:1.2.0 : 39 Kb +androidx.core:core:1.7.0 : 957 Kb +androidx.cursoradapter:cursoradapter:1.0.0 : 10 Kb +androidx.customview:customview:1.0.0 : 32 Kb +androidx.drawerlayout:drawerlayout:1.0.0 : 31 Kb +androidx.fragment:fragment:1.3.6 : 291 Kb +androidx.interpolator:interpolator:1.0.0 : 7 Kb +androidx.lifecycle:lifecycle-common:2.4.0 : 23 Kb +androidx.lifecycle:lifecycle-livedata-core:2.3.1 : 8 Kb +androidx.lifecycle:lifecycle-livedata:2.0.0 : 9 Kb +androidx.lifecycle:lifecycle-runtime:2.4.0 : 11 Kb +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1 : 15 Kb +androidx.lifecycle:lifecycle-viewmodel:2.3.1 : 10 Kb +androidx.loader:loader:1.0.0 : 32 Kb +androidx.savedstate:savedstate:1.1.0 : 10 Kb +androidx.vectordrawable:vectordrawable-animated:1.1.0 : 33 Kb +androidx.vectordrawable:vectordrawable:1.1.0 : 32 Kb +androidx.versionedparcelable:versionedparcelable:1.1.1 : 30 Kb +androidx.viewpager:viewpager:1.0.0 : 52 Kb +com.google.code.gson:gson:2.8.9 : 252 Kb +com.squareup.okhttp3:okhttp:4.9.0 : 772 Kb +com.squareup.okio:okio:2.8.0 : 237 Kb +org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb +org.jetbrains:annotations:13.0 : 17 Kb + +Total transitive dependencies size : 5 Mb + diff --git a/features/dd-sdk-android-session-replay/transitiveDependencies b/features/dd-sdk-android-session-replay/transitiveDependencies index fbff40e727..3fbaa5b242 100644 --- a/features/dd-sdk-android-session-replay/transitiveDependencies +++ b/features/dd-sdk-android-session-replay/transitiveDependencies @@ -7,7 +7,7 @@ androidx.appcompat:appcompat-resources:1.4.2 : 65 Kb androidx.appcompat:appcompat:1.4.2 : 1092 Kb androidx.arch.core:core-common:2.1.0 : 10 Kb androidx.arch.core:core-runtime:2.1.0 : 5 Kb -androidx.collection:collection-jvm:1.4.5 : 770 Kb +androidx.collection:collection:1.2.0 : 39 Kb androidx.core:core:1.7.0 : 957 Kb androidx.cursoradapter:cursoradapter:1.0.0 : 10 Kb androidx.customview:customview:1.0.0 : 32 Kb @@ -16,7 +16,7 @@ androidx.fragment:fragment:1.3.6 : 291 Kb androidx.interpolator:interpolator:1.0.0 : 7 Kb androidx.lifecycle:lifecycle-common:2.4.0 : 23 Kb androidx.lifecycle:lifecycle-livedata-core:2.3.1 : 8 Kb -androidx.lifecycle:lifecycle-livedata:2.1.0 : 10 Kb +androidx.lifecycle:lifecycle-livedata:2.0.0 : 9 Kb androidx.lifecycle:lifecycle-runtime:2.4.0 : 11 Kb androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1 : 15 Kb androidx.lifecycle:lifecycle-viewmodel:2.3.1 : 10 Kb @@ -26,13 +26,11 @@ androidx.vectordrawable:vectordrawable-animated:1.1.0 : 33 Kb androidx.vectordrawable:vectordrawable:1.1.0 : 32 Kb androidx.versionedparcelable:versionedparcelable:1.1.1 : 30 Kb androidx.viewpager:viewpager:1.0.0 : 52 Kb -com.google.code.gson:gson:2.10.1 : 276 Kb -com.squareup.okhttp3:okhttp:4.12.0 : 771 Kb -com.squareup.okio:okio-jvm:3.6.0 : 351 Kb -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 : 959 b -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 : 965 b +com.google.code.gson:gson:2.8.9 : 252 Kb +com.squareup.okhttp3:okhttp:4.9.0 : 772 Kb +com.squareup.okio:okio:2.8.0 : 237 Kb org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb org.jetbrains:annotations:13.0 : 17 Kb -Total transitive dependencies size : 6 Mb +Total transitive dependencies size : 5 Mb diff --git a/features/dd-sdk-android-trace-api/build.gradle.kts b/features/dd-sdk-android-trace-api/build.gradle.kts index d1d9a4f546..d3fb551308 100644 --- a/features/dd-sdk-android-trace-api/build.gradle.kts +++ b/features/dd-sdk-android-trace-api/build.gradle.kts @@ -46,9 +46,9 @@ android { dependencies { api(project(":dd-sdk-android-core")) implementation(project(":dd-sdk-android-internal")) - implementation(libs.gson) + compileOnly(libs.gson) implementation(libs.androidXAnnotation) - implementation(libs.bundles.traceCore) + implementation(project(":dd-sdk-android-dependencies")) // Generate NoOp implementations ksp(project(":tools:noopfactory")) diff --git a/features/dd-sdk-android-trace-api/transitiveDependencies b/features/dd-sdk-android-trace-api/transitiveDependencies index 998404520a..3347ef2d2c 100644 --- a/features/dd-sdk-android-trace-api/transitiveDependencies +++ b/features/dd-sdk-android-trace-api/transitiveDependencies @@ -1,11 +1,9 @@ Dependencies List androidx.annotation:annotation-jvm:1.9.1 : 59 Kb -com.google.code.gson:gson:2.10.1 : 276 Kb -com.google.re2j:re2j:1.7 : 111 Kb -org.jctools:jctools-core:3.3.0 : 328 Kb +com.google.code.gson:gson:2.8.9 : 252 Kb org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb org.jetbrains:annotations:13.0 : 17 Kb -Total transitive dependencies size : 2 Mb +Total transitive dependencies size : 2035 Kb diff --git a/features/dd-sdk-android-trace-internal/build.gradle.kts b/features/dd-sdk-android-trace-internal/build.gradle.kts index d887923671..2f08265a3e 100644 --- a/features/dd-sdk-android-trace-internal/build.gradle.kts +++ b/features/dd-sdk-android-trace-internal/build.gradle.kts @@ -41,14 +41,24 @@ plugins { android { namespace = "com.datadog.android.trace.internal" + + testOptions { + unitTests.all { + it.jvmArgs( + "--add-opens", "java.base/java.lang=ALL-UNNAMED", + "--add-opens", "java.base/java.util=ALL-UNNAMED", + "--add-opens", "java.base/java.lang.reflect=ALL-UNNAMED" + ) + } + } } dependencies { api(project(":dd-sdk-android-core")) implementation(project(":dd-sdk-android-internal")) - implementation(libs.gson) + compileOnly(libs.gson) implementation(libs.androidXAnnotation) - implementation(libs.bundles.traceCore) + implementation(project(":dd-sdk-android-dependencies")) testImplementation(project(":tools:unit")) { attributes { @@ -62,6 +72,8 @@ dependencies { testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) testImplementation(libs.systemStubsJupiter) + testImplementation(libs.gson) + testImplementation(libs.okHttp) } unMock { diff --git a/features/dd-sdk-android-trace-internal/src/main/java/com/datadog/trace/core/PendingTraceBuffer.java b/features/dd-sdk-android-trace-internal/src/main/java/com/datadog/trace/core/PendingTraceBuffer.java index 898c136f5c..8e8ebd12c4 100644 --- a/features/dd-sdk-android-trace-internal/src/main/java/com/datadog/trace/core/PendingTraceBuffer.java +++ b/features/dd-sdk-android-trace-internal/src/main/java/com/datadog/trace/core/PendingTraceBuffer.java @@ -11,8 +11,8 @@ import com.datadog.trace.logger.Logger; import com.datadog.trace.logger.LoggerFactory; -import org.jctools.queues.MessagePassingQueue; -import org.jctools.queues.MpscBlockingConsumerArrayQueue; +import cloud.flashcat.shaded.jctools.queues.MessagePassingQueue; +import cloud.flashcat.shaded.jctools.queues.MpscBlockingConsumerArrayQueue; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; diff --git a/features/dd-sdk-android-trace-internal/src/main/java/com/datadog/trace/core/tagprocessor/QueryObfuscator.java b/features/dd-sdk-android-trace-internal/src/main/java/com/datadog/trace/core/tagprocessor/QueryObfuscator.java index 458881f61b..276417c853 100644 --- a/features/dd-sdk-android-trace-internal/src/main/java/com/datadog/trace/core/tagprocessor/QueryObfuscator.java +++ b/features/dd-sdk-android-trace-internal/src/main/java/com/datadog/trace/core/tagprocessor/QueryObfuscator.java @@ -5,9 +5,9 @@ import com.datadog.trace.logger.Logger; import com.datadog.trace.logger.LoggerFactory; import com.datadog.trace.util.Strings; -import com.google.re2j.Matcher; -import com.google.re2j.Pattern; -import com.google.re2j.PatternSyntaxException; +import cloud.flashcat.shaded.re2j.Matcher; +import cloud.flashcat.shaded.re2j.Pattern; +import cloud.flashcat.shaded.re2j.PatternSyntaxException; import java.util.Map; diff --git a/features/dd-sdk-android-trace-internal/transitiveDependencies b/features/dd-sdk-android-trace-internal/transitiveDependencies index 998404520a..3347ef2d2c 100644 --- a/features/dd-sdk-android-trace-internal/transitiveDependencies +++ b/features/dd-sdk-android-trace-internal/transitiveDependencies @@ -1,11 +1,9 @@ Dependencies List androidx.annotation:annotation-jvm:1.9.1 : 59 Kb -com.google.code.gson:gson:2.10.1 : 276 Kb -com.google.re2j:re2j:1.7 : 111 Kb -org.jctools:jctools-core:3.3.0 : 328 Kb +com.google.code.gson:gson:2.8.9 : 252 Kb org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb org.jetbrains:annotations:13.0 : 17 Kb -Total transitive dependencies size : 2 Mb +Total transitive dependencies size : 2035 Kb diff --git a/features/dd-sdk-android-trace-otel/build.gradle.kts b/features/dd-sdk-android-trace-otel/build.gradle.kts index 105443ddba..0e759fcc33 100644 --- a/features/dd-sdk-android-trace-otel/build.gradle.kts +++ b/features/dd-sdk-android-trace-otel/build.gradle.kts @@ -75,6 +75,8 @@ dependencies { testImplementation(testFixtures(project(":features:dd-sdk-android-trace"))) testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.okHttp) + testImplementation(libs.gson) testImplementation(libs.systemStubsJupiter) unmock(libs.robolectric) diff --git a/features/dd-sdk-android-trace/build.gradle.kts b/features/dd-sdk-android-trace/build.gradle.kts index dc0bdbbe3f..6ad2625efa 100644 --- a/features/dd-sdk-android-trace/build.gradle.kts +++ b/features/dd-sdk-android-trace/build.gradle.kts @@ -57,14 +57,15 @@ dependencies { implementation(project(":dd-sdk-android-internal")) implementation(project(":features:dd-sdk-android-trace-internal")) implementation(libs.kotlin) - implementation(libs.gson) + compileOnly(libs.gson) implementation(libs.androidXAnnotation) - implementation(libs.bundles.traceCore) + implementation(project(":dd-sdk-android-dependencies")) // Generate NoOp implementations ksp(project(":tools:noopfactory")) testImplementation(testFixtures(project(":dd-sdk-android-core"))) + testImplementation(libs.gson) testImplementation(libs.okHttp) testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) diff --git a/features/dd-sdk-android-trace/transitiveDependencies b/features/dd-sdk-android-trace/transitiveDependencies index 998404520a..3347ef2d2c 100644 --- a/features/dd-sdk-android-trace/transitiveDependencies +++ b/features/dd-sdk-android-trace/transitiveDependencies @@ -1,11 +1,9 @@ Dependencies List androidx.annotation:annotation-jvm:1.9.1 : 59 Kb -com.google.code.gson:gson:2.10.1 : 276 Kb -com.google.re2j:re2j:1.7 : 111 Kb -org.jctools:jctools-core:3.3.0 : 328 Kb +com.google.code.gson:gson:2.8.9 : 252 Kb org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb org.jetbrains:annotations:13.0 : 17 Kb -Total transitive dependencies size : 2 Mb +Total transitive dependencies size : 2035 Kb diff --git a/features/dd-sdk-android-webview/build.gradle.kts b/features/dd-sdk-android-webview/build.gradle.kts index 8c8128b226..e356c7be21 100644 --- a/features/dd-sdk-android-webview/build.gradle.kts +++ b/features/dd-sdk-android-webview/build.gradle.kts @@ -47,7 +47,7 @@ dependencies { api(project(":dd-sdk-android-core")) implementation(project(":dd-sdk-android-internal")) implementation(libs.kotlin) - implementation(libs.gson) + compileOnly(libs.gson) implementation(libs.androidXAnnotation) // Generate NoOp implementations @@ -63,6 +63,7 @@ dependencies { } testImplementation(testFixtures(project(":dd-sdk-android-core"))) testImplementation(testFixtures(project(":features:dd-sdk-android-rum"))) + testImplementation(libs.gson) testImplementation(libs.okHttp) testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) diff --git a/features/dd-sdk-android-webview/transitiveDependencies b/features/dd-sdk-android-webview/transitiveDependencies index b099002d83..3347ef2d2c 100644 --- a/features/dd-sdk-android-webview/transitiveDependencies +++ b/features/dd-sdk-android-webview/transitiveDependencies @@ -1,9 +1,9 @@ Dependencies List androidx.annotation:annotation-jvm:1.9.1 : 59 Kb -com.google.code.gson:gson:2.10.1 : 276 Kb +com.google.code.gson:gson:2.8.9 : 252 Kb org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb org.jetbrains:annotations:13.0 : 17 Kb -Total transitive dependencies size : 2 Mb +Total transitive dependencies size : 2035 Kb diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c77fa4cdd6..5acd6909fe 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,14 +1,16 @@ [versions] # Commons apollo = "4.3.3" +core = "1.15.0" +coreKtx = "1.15.0" cronetApi = "141.7340.3" cronetPlayServices = "18.1.1" -gson = "2.10.1" +gson = "2.8.9" kotlin = "2.0.21" kotlinSP = "2.0.21-1.0.28" kronosNTP = "0.0.1-alpha11" kotlinxSerialization = "1.6.3" -okHttp = "4.12.0" +okHttp = "4.9.0" # Android adapterDelegates = "4.3.2" @@ -17,21 +19,21 @@ androidToolsPlugin = "8.13.2" androidXAnnotations = "1.9.1" androidXAppCompat = "1.4.2" # Next version will bring coroutines androidXCar = "1.4.0" -androidXCollection = "1.4.5" +androidXCollection = "1.2.0" androidXComposeBom = "2023.10.01" # Next version will bring coroutines androidXComposeNavigation = "2.6.0" androidXComposeRuntime = "1.5.14" androidXConstraintLayout = "2.0.4" -androidXCore = "1.17.0" +androidXCore = "1.12.0" androidXFragment = "1.2.4" androidXLeanback = "1.0.0" androidXLifecycle = "2.8.7" androidXLegacy = "1.0.0" androidXMetrics = "1.0.0-beta03" androidXMultidex = "2.0.1" -androidXNavigation = "2.7.7" -androidXRecyclerView = "1.3.2" -androidXWorkManager = "2.8.1" # Next version will bring coroutines +androidXNavigation = "2.5.3" +androidXRecyclerView = "1.2.1" +androidXWorkManager = "2.7.1" # Next version will bring coroutines googleAccompanist = "0.20.2" googleMaterial = "1.3.0" dagger = "2.56.2" @@ -70,6 +72,7 @@ versionsGradlePlugin = "0.46.0" nexusPublishGradlePlugin = "2.0.0" datadogPlugin = "1.21.0" vanniktech = "0.33.0" +shadow = "8.3.5" kotlinPoet = "1.14.2" kotlinGrammarParser = "41b00c0" @@ -112,6 +115,8 @@ material3Android = "1.1.2" # Classpaths # Gradle version catalog doesn't allow names to end with plugin, that is why strange names androidToolsGradlePlugin = { module = "com.android.tools.build:gradle", version.ref = "androidToolsPlugin" } +androidx-core-ktx-v1150 = { module = "androidx.core:core-ktx", version.ref = "coreKtx" } +androidx-core-v1150 = { module = "androidx.core:core", version.ref = "core" } apolloRuntime = { module = "com.apollographql.apollo:apollo-runtime", version.ref = "apollo" } kotlinGradlePlugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlinSPGradlePlugin = { module = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin", version.ref = "kotlinSP" } @@ -123,6 +128,7 @@ dependencyLicenseGradlePlugin = { module = "com.datadoghq:dependency-license", v versionsGradlePlugin = { module = "com.github.ben-manes:gradle-versions-plugin", version.ref = "versionsGradlePlugin" } kotlinxSerializationPlugin = { module = "org.jetbrains.kotlin:kotlin-serialization", version.ref = "kotlin" } vanniktechPublishPlugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version.ref = "vanniktech" } +shadowPlugin = { module = "com.gradleup.shadow:shadow-gradle-plugin", version.ref = "shadow" } # Annotation processors glideCompiler = { module = "com.github.bumptech.glide:compiler", version.ref = "glide" } @@ -387,3 +393,4 @@ datadogGradlePlugin = { id = "com.datadoghq.dd-sdk-android-gradle-plugin", versi composeCompilerPlugin = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } apolloPlugin = { id = "com.apollographql.apollo", version.ref = "apollo" } vanniktechPublish = { id = "com.vanniktech.maven.publish.base", version.ref = "vanniktech" } +shadow = { id = "com.gradleup.shadow", version.ref = "shadow" } diff --git a/integrations/dd-sdk-android-apollo/build.gradle.kts b/integrations/dd-sdk-android-apollo/build.gradle.kts index b5c58dab3a..87fc99d6b6 100644 --- a/integrations/dd-sdk-android-apollo/build.gradle.kts +++ b/integrations/dd-sdk-android-apollo/build.gradle.kts @@ -48,6 +48,7 @@ dependencies { } testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.gson) testImplementation(libs.okHttpMock) unmock(libs.robolectric) } diff --git a/integrations/dd-sdk-android-coil/build.gradle.kts b/integrations/dd-sdk-android-coil/build.gradle.kts index a169082e5c..f7940b79b2 100644 --- a/integrations/dd-sdk-android-coil/build.gradle.kts +++ b/integrations/dd-sdk-android-coil/build.gradle.kts @@ -44,9 +44,16 @@ android { dependencies { implementation(project(":features:dd-sdk-android-rum")) implementation(libs.kotlin) - implementation(libs.okHttp) + compileOnly(libs.okHttp) implementation(libs.coil) + configurations.all { + resolutionStrategy { + force(libs.okHttp) + } + } + + testImplementation(project(":tools:unit")) { attributes { attribute( @@ -57,7 +64,10 @@ dependencies { } testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.gson) + testImplementation(libs.okHttp) testImplementation(libs.okHttpMock) + testImplementation(libs.gson) } kotlinConfig(jvmBytecodeTarget = JvmTarget.JVM_11) diff --git a/integrations/dd-sdk-android-coil/transitiveDependencies b/integrations/dd-sdk-android-coil/transitiveDependencies index 7ef38f8a01..5eafec59c3 100644 --- a/integrations/dd-sdk-android-coil/transitiveDependencies +++ b/integrations/dd-sdk-android-coil/transitiveDependencies @@ -1,18 +1,18 @@ Dependencies List androidx.annotation:annotation-jvm:1.9.1 : 59 Kb -androidx.lifecycle:lifecycle-common-java8:2.6.2 : 261 b -androidx.lifecycle:lifecycle-common:2.6.2 : 51 Kb -com.squareup.okhttp3:okhttp:4.12.0 : 771 Kb -com.squareup.okio:okio-jvm:3.6.0 : 351 Kb +androidx.lifecycle:lifecycle-common-java8:2.5.1 : 261 b +androidx.lifecycle:lifecycle-common:2.5.1 : 23 Kb +com.squareup.okhttp3:okhttp:4.9.0 : 772 Kb +com.squareup.okio:okio:2.9.0 : 247 Kb io.coil-kt:coil-base:1.0.0 : 395 Kb io.coil-kt:coil:1.0.0 : 15 Kb -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 : 959 b -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 : 965 b +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0 : 963 b +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0 : 968 b org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb -org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 : 19 Kb -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 : 1510 Kb -org.jetbrains:annotations:23.0.0 : 28 Kb +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1 : 19 Kb +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.1 : 1457 Kb +org.jetbrains:annotations:13.0 : 17 Kb Total transitive dependencies size : 4 Mb diff --git a/integrations/dd-sdk-android-coil3/build.gradle.kts b/integrations/dd-sdk-android-coil3/build.gradle.kts index a0524aee1d..354c1b7b02 100644 --- a/integrations/dd-sdk-android-coil3/build.gradle.kts +++ b/integrations/dd-sdk-android-coil3/build.gradle.kts @@ -44,7 +44,7 @@ android { dependencies { implementation(project(":features:dd-sdk-android-rum")) implementation(libs.kotlin) - implementation(libs.okHttp) + compileOnly(libs.okHttp) implementation(libs.coil3) implementation(libs.coil3NetworkOkHttp) @@ -58,6 +58,8 @@ dependencies { } testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.gson) + testImplementation(libs.okHttp) testImplementation(libs.okHttpMock) } diff --git a/integrations/dd-sdk-android-compose/build.gradle.kts b/integrations/dd-sdk-android-compose/build.gradle.kts index 004a2e4bdf..4b2671bdec 100644 --- a/integrations/dd-sdk-android-compose/build.gradle.kts +++ b/integrations/dd-sdk-android-compose/build.gradle.kts @@ -69,6 +69,8 @@ dependencies { } testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.gson) + testImplementation(libs.okHttp) unmock(libs.robolectric) } diff --git a/integrations/dd-sdk-android-compose/transitiveDependencies b/integrations/dd-sdk-android-compose/transitiveDependencies index fe2f288dec..a22879c4bb 100644 --- a/integrations/dd-sdk-android-compose/transitiveDependencies +++ b/integrations/dd-sdk-android-compose/transitiveDependencies @@ -1,12 +1,12 @@ Dependencies List -androidx.activity:activity-compose:1.7.2 : 1082 Kb -androidx.activity:activity-ktx:1.7.2 : 25 Kb -androidx.activity:activity:1.7.2 : 139 Kb -androidx.annotation:annotation-experimental:1.4.1 : 38 Kb +androidx.activity:activity-compose:1.7.0 : 1082 Kb +androidx.activity:activity-ktx:1.7.0 : 25 Kb +androidx.activity:activity:1.7.0 : 139 Kb +androidx.annotation:annotation-experimental:1.3.0 : 35 Kb androidx.annotation:annotation-jvm:1.9.1 : 59 Kb androidx.arch.core:core-common:2.2.0 : 11 Kb -androidx.collection:collection-jvm:1.4.5 : 770 Kb +androidx.collection:collection-jvm:1.4.2 : 757 Kb androidx.compose.animation:animation-android:1.5.4 : 1309 Kb androidx.compose.animation:animation-core-android:1.5.4 : 1338 Kb androidx.compose.foundation:foundation-android:1.5.4 : 3 Mb @@ -21,32 +21,31 @@ androidx.compose.ui:ui-geometry-android:1.5.4 : 36 Kb androidx.compose.ui:ui-graphics-android:1.5.4 : 1422 Kb androidx.compose.ui:ui-text-android:1.5.4 : 770 Kb androidx.compose.ui:ui-unit-android:1.5.4 : 64 Kb -androidx.core:core-ktx:1.17.0 : 168 Kb -androidx.core:core-viewtree:1.0.0 : 6 Kb -androidx.core:core:1.17.0 : 1376 Kb -androidx.lifecycle:lifecycle-common-java8:2.6.2 : 261 b -androidx.lifecycle:lifecycle-common:2.6.2 : 51 Kb -androidx.lifecycle:lifecycle-livedata-core:2.6.2 : 11 Kb -androidx.lifecycle:lifecycle-runtime-ktx:2.6.2 : 60 Kb -androidx.lifecycle:lifecycle-runtime:2.6.2 : 21 Kb -androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2 : 21 Kb -androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2 : 4 Kb -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2 : 38 Kb -androidx.lifecycle:lifecycle-viewmodel:2.6.2 : 38 Kb -androidx.navigation:navigation-common-ktx:2.7.7 : 2 Kb -androidx.navigation:navigation-common:2.7.7 : 180 Kb -androidx.navigation:navigation-compose:2.7.7 : 1139 Kb -androidx.navigation:navigation-runtime-ktx:2.7.7 : 2 Kb -androidx.navigation:navigation-runtime:2.7.7 : 126 Kb +androidx.core:core-ktx:1.12.0 : 169 Kb +androidx.core:core:1.12.0 : 1291 Kb +androidx.lifecycle:lifecycle-common-java8:2.6.1 : 261 b +androidx.lifecycle:lifecycle-common:2.6.1 : 51 Kb +androidx.lifecycle:lifecycle-livedata-core:2.6.1 : 11 Kb +androidx.lifecycle:lifecycle-runtime-ktx:2.6.1 : 60 Kb +androidx.lifecycle:lifecycle-runtime:2.6.1 : 21 Kb +androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1 : 21 Kb +androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1 : 4 Kb +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1 : 38 Kb +androidx.lifecycle:lifecycle-viewmodel:2.6.1 : 38 Kb +androidx.navigation:navigation-common-ktx:2.6.0 : 2 Kb +androidx.navigation:navigation-common:2.6.0 : 178 Kb +androidx.navigation:navigation-compose:2.6.0 : 1110 Kb +androidx.navigation:navigation-runtime-ktx:2.6.0 : 2 Kb +androidx.navigation:navigation-runtime:2.6.0 : 125 Kb androidx.savedstate:savedstate-ktx:1.2.1 : 3 Kb androidx.savedstate:savedstate:1.2.1 : 19 Kb androidx.versionedparcelable:versionedparcelable:1.1.1 : 30 Kb -com.google.guava:listenablefuture:1.0 : 3 Kb +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0 : 963 b +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0 : 968 b org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb -org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 : 19 Kb -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 : 1510 Kb -org.jetbrains:annotations:23.0.0 : 28 Kb -org.jspecify:jspecify:1.0.0 : 3 Kb +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 : 19 Kb +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4 : 1442 Kb +org.jetbrains:annotations:13.0 : 17 Kb Total transitive dependencies size : 28 Mb diff --git a/integrations/dd-sdk-android-cronet/build.gradle.kts b/integrations/dd-sdk-android-cronet/build.gradle.kts index 49074ded7b..2bd6f1cc96 100644 --- a/integrations/dd-sdk-android-cronet/build.gradle.kts +++ b/integrations/dd-sdk-android-cronet/build.gradle.kts @@ -59,6 +59,8 @@ dependencies { testImplementation(libs.elmyrJUnit4) testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.okHttp) + testImplementation(libs.gson) testImplementation(project(":tools:unit")) { attributes { attribute( diff --git a/integrations/dd-sdk-android-cronet/transitiveDependencies b/integrations/dd-sdk-android-cronet/transitiveDependencies index 6c0bd272fa..e756384cc2 100644 --- a/integrations/dd-sdk-android-cronet/transitiveDependencies +++ b/integrations/dd-sdk-android-cronet/transitiveDependencies @@ -4,7 +4,7 @@ androidx.annotation:annotation-jvm:1.9.1 : 59 Kb org.chromium.net:cronet-api:141.7340.3 : 77 Kb org.chromium.net:cronet-shared:141.7340.3 : 92 Kb org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb -org.jetbrains:annotations:23.0.0 : 28 Kb +org.jetbrains:annotations:13.0 : 17 Kb -Total transitive dependencies size : 1964 Kb +Total transitive dependencies size : 1952 Kb diff --git a/integrations/dd-sdk-android-fresco/build.gradle.kts b/integrations/dd-sdk-android-fresco/build.gradle.kts index 86d3811123..bc2314e31c 100644 --- a/integrations/dd-sdk-android-fresco/build.gradle.kts +++ b/integrations/dd-sdk-android-fresco/build.gradle.kts @@ -44,8 +44,8 @@ android { dependencies { implementation(project(":features:dd-sdk-android-rum")) implementation(libs.kotlin) - implementation(libs.okHttp) - implementation(libs.bundles.fresco) + compileOnly(libs.okHttp) + compileOnly(libs.bundles.fresco) testImplementation(project(":tools:unit")) { attributes { @@ -56,7 +56,10 @@ dependencies { } } testImplementation(libs.bundles.jUnit5) + testImplementation(libs.bundles.fresco) testImplementation(libs.bundles.testTools) + testImplementation(libs.gson) + testImplementation(libs.okHttp) testImplementation(libs.okHttpMock) } diff --git a/integrations/dd-sdk-android-fresco/transitiveDependencies b/integrations/dd-sdk-android-fresco/transitiveDependencies index 89d0b9cd1d..34be7e68ca 100644 --- a/integrations/dd-sdk-android-fresco/transitiveDependencies +++ b/integrations/dd-sdk-android-fresco/transitiveDependencies @@ -12,12 +12,10 @@ com.facebook.fresco:memory-type-java:2.3.0 : 3 Kb com.facebook.fresco:memory-type-native:2.3.0 : 4 Kb com.facebook.fresco:nativeimagefilters:2.3.0 : 52 Kb com.facebook.fresco:nativeimagetranscoder:2.3.0 : 764 Kb -com.squareup.okhttp3:okhttp:4.12.0 : 771 Kb -com.squareup.okio:okio-jvm:3.6.0 : 351 Kb -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 : 959 b -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 : 965 b +com.squareup.okhttp3:okhttp:4.9.0 : 772 Kb +com.squareup.okio:okio:2.8.0 : 237 Kb org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb -org.jetbrains:annotations:23.0.0 : 28 Kb +org.jetbrains:annotations:13.0 : 17 Kb Total transitive dependencies size : 4 Mb diff --git a/integrations/dd-sdk-android-glide/build.gradle.kts b/integrations/dd-sdk-android-glide/build.gradle.kts index 3ce5186d9c..df825b076b 100644 --- a/integrations/dd-sdk-android-glide/build.gradle.kts +++ b/integrations/dd-sdk-android-glide/build.gradle.kts @@ -45,9 +45,15 @@ dependencies { implementation(project(":features:dd-sdk-android-rum")) implementation(project(":integrations:dd-sdk-android-okhttp")) implementation(libs.kotlin) - implementation(libs.okHttp) + compileOnly(libs.okHttp) implementation(libs.bundles.glide) + configurations.all { + resolutionStrategy { + force(libs.okHttp) + } + } + testImplementation(project(":tools:unit")) { attributes { attribute( @@ -58,6 +64,8 @@ dependencies { } testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.gson) + testImplementation(libs.okHttp) testImplementation(libs.okHttpMock) } diff --git a/integrations/dd-sdk-android-glide/transitiveDependencies b/integrations/dd-sdk-android-glide/transitiveDependencies index f785f114f2..cb4e83afe3 100644 --- a/integrations/dd-sdk-android-glide/transitiveDependencies +++ b/integrations/dd-sdk-android-glide/transitiveDependencies @@ -1,35 +1,34 @@ Dependencies List -androidx.activity:activity:1.7.2 : 139 Kb -androidx.annotation:annotation-experimental:1.4.1 : 38 Kb +androidx.activity:activity:1.5.1 : 90 Kb +androidx.annotation:annotation-experimental:1.3.0 : 35 Kb androidx.annotation:annotation-jvm:1.9.1 : 59 Kb -androidx.arch.core:core-common:2.2.0 : 11 Kb -androidx.arch.core:core-runtime:2.2.0 : 7 Kb +androidx.arch.core:core-common:2.1.0 : 10 Kb +androidx.arch.core:core-runtime:2.1.0 : 5 Kb androidx.asynclayoutinflater:asynclayoutinflater:1.0.0 : 7 Kb -androidx.collection:collection-jvm:1.4.5 : 770 Kb +androidx.collection:collection-jvm:1.4.2 : 757 Kb androidx.coordinatorlayout:coordinatorlayout:1.0.0 : 43 Kb -androidx.core:core-ktx:1.17.0 : 168 Kb -androidx.core:core-viewtree:1.0.0 : 6 Kb -androidx.core:core:1.17.0 : 1376 Kb +androidx.core:core-ktx:1.12.0 : 169 Kb +androidx.core:core:1.12.0 : 1291 Kb androidx.cursoradapter:cursoradapter:1.0.0 : 10 Kb androidx.customview:customview:1.1.0 : 32 Kb androidx.documentfile:documentfile:1.0.0 : 10 Kb androidx.drawerlayout:drawerlayout:1.0.0 : 31 Kb androidx.exifinterface:exifinterface:1.0.0 : 44 Kb -androidx.fragment:fragment:1.6.2 : 345 Kb +androidx.fragment:fragment:1.5.4 : 329 Kb androidx.interpolator:interpolator:1.0.0 : 7 Kb androidx.legacy:legacy-support-core-ui:1.0.0 : 11 Kb androidx.legacy:legacy-support-core-utils:1.0.0 : 4 Kb -androidx.lifecycle:lifecycle-common:2.6.2 : 51 Kb -androidx.lifecycle:lifecycle-livedata-core:2.6.2 : 11 Kb -androidx.lifecycle:lifecycle-livedata:2.6.2 : 18 Kb -androidx.lifecycle:lifecycle-runtime:2.6.2 : 21 Kb -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2 : 38 Kb -androidx.lifecycle:lifecycle-viewmodel:2.6.2 : 38 Kb +androidx.lifecycle:lifecycle-common:2.5.1 : 23 Kb +androidx.lifecycle:lifecycle-livedata-core:2.5.1 : 9 Kb +androidx.lifecycle:lifecycle-livedata:2.0.0 : 9 Kb +androidx.lifecycle:lifecycle-runtime:2.5.1 : 12 Kb +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.1 : 34 Kb +androidx.lifecycle:lifecycle-viewmodel:2.5.1 : 34 Kb androidx.loader:loader:1.0.0 : 32 Kb androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 : 6 Kb androidx.print:print:1.0.0 : 15 Kb -androidx.savedstate:savedstate:1.2.1 : 19 Kb +androidx.savedstate:savedstate:1.2.0 : 18 Kb androidx.slidingpanelayout:slidingpanelayout:1.2.0 : 37 Kb androidx.swiperefreshlayout:swiperefreshlayout:1.0.0 : 32 Kb androidx.vectordrawable:vectordrawable-animated:1.0.0 : 33 Kb @@ -41,16 +40,14 @@ com.github.bumptech.glide:disklrucache:4.11.0 : 19 Kb com.github.bumptech.glide:gifdecoder:4.11.0 : 17 Kb com.github.bumptech.glide:glide:4.11.0 : 614 Kb com.github.bumptech.glide:okhttp3-integration:4.11.0 : 8 Kb -com.google.guava:listenablefuture:1.0 : 3 Kb -com.squareup.okhttp3:okhttp:4.12.0 : 771 Kb -com.squareup.okio:okio-jvm:3.6.0 : 351 Kb -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 : 959 b -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 : 965 b +com.squareup.okhttp3:okhttp:4.9.0 : 772 Kb +com.squareup.okio:okio:2.8.0 : 237 Kb +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0 : 963 b +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0 : 968 b org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb -org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 : 19 Kb -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 : 1510 Kb -org.jetbrains:annotations:23.0.0 : 28 Kb -org.jspecify:jspecify:1.0.0 : 3 Kb +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1 : 19 Kb +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.1 : 1457 Kb +org.jetbrains:annotations:13.0 : 17 Kb Total transitive dependencies size : 8 Mb diff --git a/integrations/dd-sdk-android-okhttp-otel/build.gradle.kts b/integrations/dd-sdk-android-okhttp-otel/build.gradle.kts index 1e040271fa..611a36b21e 100644 --- a/integrations/dd-sdk-android-okhttp-otel/build.gradle.kts +++ b/integrations/dd-sdk-android-okhttp-otel/build.gradle.kts @@ -42,7 +42,7 @@ android { } dependencies { - implementation(libs.okHttp) + compileOnly(libs.okHttp) implementation(libs.kotlin) implementation(project(":features:dd-sdk-android-trace")) @@ -50,6 +50,8 @@ dependencies { implementation(project(":features:dd-sdk-android-trace-otel")) testImplementation(libs.okHttpMock) + testImplementation(libs.okHttp) + testImplementation(libs.gson) testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) testImplementation(project(":tools:unit")) { diff --git a/integrations/dd-sdk-android-okhttp-otel/transitiveDependencies b/integrations/dd-sdk-android-okhttp-otel/transitiveDependencies index 827359e7b7..9e0d3179f7 100644 --- a/integrations/dd-sdk-android-okhttp-otel/transitiveDependencies +++ b/integrations/dd-sdk-android-okhttp-otel/transitiveDependencies @@ -1,13 +1,11 @@ Dependencies List -com.squareup.okhttp3:okhttp:4.12.0 : 771 Kb -com.squareup.okio:okio-jvm:3.6.0 : 351 Kb +com.squareup.okhttp3:okhttp:4.9.0 : 772 Kb +com.squareup.okio:okio:2.8.0 : 237 Kb io.opentelemetry:opentelemetry-api:1.40.0 : 138 Kb io.opentelemetry:opentelemetry-context:1.40.0 : 46 Kb -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 : 959 b -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 : 965 b org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb -org.jetbrains:annotations:23.0.0 : 28 Kb +org.jetbrains:annotations:13.0 : 17 Kb Total transitive dependencies size : 2 Mb diff --git a/integrations/dd-sdk-android-okhttp/build.gradle.kts b/integrations/dd-sdk-android-okhttp/build.gradle.kts index ee22e7b0dc..0cd60f4649 100644 --- a/integrations/dd-sdk-android-okhttp/build.gradle.kts +++ b/integrations/dd-sdk-android-okhttp/build.gradle.kts @@ -47,7 +47,7 @@ android { dependencies { implementation(libs.kotlin) - implementation(libs.okHttp) + compileOnly(libs.okHttp) implementation(libs.androidXAnnotation) implementation(project(":dd-sdk-android-internal")) implementation(project(":features:dd-sdk-android-rum")) @@ -68,6 +68,8 @@ dependencies { testImplementation(testFixtures(project(":features:dd-sdk-android-trace"))) testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.gson) + testImplementation(libs.okHttp) testImplementation(libs.okHttpMock) unmock(libs.robolectric) } diff --git a/integrations/dd-sdk-android-okhttp/transitiveDependencies b/integrations/dd-sdk-android-okhttp/transitiveDependencies index d006f0c88f..4c3a4146de 100644 --- a/integrations/dd-sdk-android-okhttp/transitiveDependencies +++ b/integrations/dd-sdk-android-okhttp/transitiveDependencies @@ -1,12 +1,10 @@ Dependencies List androidx.annotation:annotation-jvm:1.9.1 : 59 Kb -com.squareup.okhttp3:okhttp:4.12.0 : 771 Kb -com.squareup.okio:okio-jvm:3.6.0 : 351 Kb -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 : 959 b -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 : 965 b +com.squareup.okhttp3:okhttp:4.9.0 : 772 Kb +com.squareup.okio:okio:2.8.0 : 237 Kb org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb -org.jetbrains:annotations:23.0.0 : 28 Kb +org.jetbrains:annotations:13.0 : 17 Kb Total transitive dependencies size : 2 Mb diff --git a/integrations/dd-sdk-android-rum-coroutines/build.gradle.kts b/integrations/dd-sdk-android-rum-coroutines/build.gradle.kts index e8a912cc99..40a6ad2ae5 100644 --- a/integrations/dd-sdk-android-rum-coroutines/build.gradle.kts +++ b/integrations/dd-sdk-android-rum-coroutines/build.gradle.kts @@ -55,6 +55,7 @@ dependencies { } testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.gson) testImplementation(libs.okHttpMock) } diff --git a/integrations/dd-sdk-android-rum-coroutines/transitiveDependencies b/integrations/dd-sdk-android-rum-coroutines/transitiveDependencies index 62e7fed0fa..73cabf5d68 100644 --- a/integrations/dd-sdk-android-rum-coroutines/transitiveDependencies +++ b/integrations/dd-sdk-android-rum-coroutines/transitiveDependencies @@ -1,8 +1,10 @@ Dependencies List +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0 : 963 b +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0 : 968 b org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 : 1510 Kb -org.jetbrains:annotations:23.0.0 : 28 Kb +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.1 : 1457 Kb +org.jetbrains:annotations:13.0 : 17 Kb Total transitive dependencies size : 3 Mb diff --git a/integrations/dd-sdk-android-rx/build.gradle.kts b/integrations/dd-sdk-android-rx/build.gradle.kts index d795d7c74e..220b768d4f 100644 --- a/integrations/dd-sdk-android-rx/build.gradle.kts +++ b/integrations/dd-sdk-android-rx/build.gradle.kts @@ -44,7 +44,7 @@ android { dependencies { implementation(project(":features:dd-sdk-android-rum")) implementation(libs.kotlin) - implementation(libs.okHttp) + compileOnly(libs.okHttp) implementation(libs.rxJava3) testImplementation(project(":tools:unit")) { @@ -57,6 +57,8 @@ dependencies { } testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.gson) + testImplementation(libs.okHttp) testImplementation(libs.okHttpMock) } diff --git a/integrations/dd-sdk-android-rx/transitiveDependencies b/integrations/dd-sdk-android-rx/transitiveDependencies index bf22f1cf93..bc761814af 100644 --- a/integrations/dd-sdk-android-rx/transitiveDependencies +++ b/integrations/dd-sdk-android-rx/transitiveDependencies @@ -1,12 +1,10 @@ Dependencies List -com.squareup.okhttp3:okhttp:4.12.0 : 771 Kb -com.squareup.okio:okio-jvm:3.6.0 : 351 Kb +com.squareup.okhttp3:okhttp:4.9.0 : 772 Kb +com.squareup.okio:okio:2.8.0 : 237 Kb io.reactivex.rxjava3:rxjava:3.0.0 : 2 Mb -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 : 959 b -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 : 965 b org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb -org.jetbrains:annotations:23.0.0 : 28 Kb +org.jetbrains:annotations:13.0 : 17 Kb org.reactivestreams:reactive-streams:1.0.3 : 11 Kb Total transitive dependencies size : 5 Mb diff --git a/integrations/dd-sdk-android-sqldelight/build.gradle.kts b/integrations/dd-sdk-android-sqldelight/build.gradle.kts index 2fadc5c483..9ae93758af 100644 --- a/integrations/dd-sdk-android-sqldelight/build.gradle.kts +++ b/integrations/dd-sdk-android-sqldelight/build.gradle.kts @@ -45,7 +45,7 @@ dependencies { implementation(project(":features:dd-sdk-android-trace")) implementation(project(":features:dd-sdk-android-rum")) implementation(libs.kotlin) - implementation(libs.okHttp) + compileOnly(libs.okHttp) implementation(libs.sqlDelight) testImplementation(project(":tools:unit")) { @@ -58,6 +58,8 @@ dependencies { } testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.gson) + testImplementation(libs.okHttp) testImplementation(libs.okHttpMock) testImplementation(testFixtures(project(":features:dd-sdk-android-trace"))) } diff --git a/integrations/dd-sdk-android-sqldelight/transitiveDependencies b/integrations/dd-sdk-android-sqldelight/transitiveDependencies index 38709f5c10..df3240fd31 100644 --- a/integrations/dd-sdk-android-sqldelight/transitiveDependencies +++ b/integrations/dd-sdk-android-sqldelight/transitiveDependencies @@ -1,15 +1,15 @@ Dependencies List androidx.annotation:annotation-jvm:1.9.1 : 59 Kb -androidx.sqlite:sqlite:2.3.0 : 29 Kb -com.squareup.okhttp3:okhttp:4.12.0 : 771 Kb -com.squareup.okio:okio-jvm:3.6.0 : 351 Kb +androidx.sqlite:sqlite:2.1.0 : 10 Kb +com.squareup.okhttp3:okhttp:4.9.0 : 772 Kb +com.squareup.okio:okio:2.8.0 : 237 Kb com.squareup.sqldelight:android-driver:1.5.5 : 23 Kb com.squareup.sqldelight:runtime-jvm:1.5.5 : 44 Kb -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 : 959 b -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 : 965 b +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0 : 963 b +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0 : 968 b org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb -org.jetbrains:annotations:23.0.0 : 28 Kb +org.jetbrains:annotations:13.0 : 17 Kb Total transitive dependencies size : 2 Mb diff --git a/integrations/dd-sdk-android-timber/build.gradle.kts b/integrations/dd-sdk-android-timber/build.gradle.kts index 0540097c18..8cadda71e9 100644 --- a/integrations/dd-sdk-android-timber/build.gradle.kts +++ b/integrations/dd-sdk-android-timber/build.gradle.kts @@ -56,6 +56,7 @@ dependencies { } testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.gson) testImplementation(libs.okHttpMock) } diff --git a/integrations/dd-sdk-android-trace-coroutines/build.gradle.kts b/integrations/dd-sdk-android-trace-coroutines/build.gradle.kts index fc9cefd77c..9c4aa4a28f 100644 --- a/integrations/dd-sdk-android-trace-coroutines/build.gradle.kts +++ b/integrations/dd-sdk-android-trace-coroutines/build.gradle.kts @@ -55,6 +55,7 @@ dependencies { } testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.gson) testImplementation(libs.okHttpMock) testImplementation(testFixtures(project(":features:dd-sdk-android-trace"))) } diff --git a/integrations/dd-sdk-android-tv/build.gradle.kts b/integrations/dd-sdk-android-tv/build.gradle.kts index 1fb6ee8847..e9248a2d22 100644 --- a/integrations/dd-sdk-android-tv/build.gradle.kts +++ b/integrations/dd-sdk-android-tv/build.gradle.kts @@ -56,6 +56,8 @@ dependencies { } testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.okHttp) + testImplementation(libs.gson) } kotlinConfig(jvmBytecodeTarget = JvmTarget.JVM_11) diff --git a/integrations/dd-sdk-android-tv/transitiveDependencies b/integrations/dd-sdk-android-tv/transitiveDependencies index 083e8de57a..a520f4f4d2 100644 --- a/integrations/dd-sdk-android-tv/transitiveDependencies +++ b/integrations/dd-sdk-android-tv/transitiveDependencies @@ -1,47 +1,46 @@ Dependencies List -androidx.activity:activity:1.7.2 : 139 Kb -androidx.annotation:annotation-experimental:1.4.1 : 38 Kb +androidx.activity:activity:1.5.1 : 90 Kb +androidx.annotation:annotation-experimental:1.3.0 : 35 Kb androidx.annotation:annotation-jvm:1.9.1 : 59 Kb -androidx.arch.core:core-common:2.2.0 : 11 Kb -androidx.arch.core:core-runtime:2.2.0 : 7 Kb +androidx.arch.core:core-common:2.1.0 : 10 Kb +androidx.arch.core:core-runtime:2.1.0 : 5 Kb androidx.asynclayoutinflater:asynclayoutinflater:1.0.0 : 7 Kb -androidx.collection:collection-jvm:1.4.5 : 770 Kb +androidx.collection:collection-jvm:1.4.2 : 757 Kb androidx.coordinatorlayout:coordinatorlayout:1.0.0 : 43 Kb -androidx.core:core-ktx:1.17.0 : 168 Kb -androidx.core:core-viewtree:1.0.0 : 6 Kb -androidx.core:core:1.17.0 : 1376 Kb +androidx.core:core-ktx:1.12.0 : 169 Kb +androidx.core:core:1.12.0 : 1291 Kb androidx.cursoradapter:cursoradapter:1.0.0 : 10 Kb androidx.customview:customview:1.1.0 : 32 Kb androidx.documentfile:documentfile:1.0.0 : 10 Kb androidx.drawerlayout:drawerlayout:1.0.0 : 31 Kb -androidx.fragment:fragment:1.6.2 : 345 Kb +androidx.fragment:fragment:1.5.4 : 329 Kb androidx.interpolator:interpolator:1.0.0 : 7 Kb androidx.leanback:leanback:1.0.0 : 1329 Kb androidx.legacy:legacy-support-core-ui:1.0.0 : 11 Kb androidx.legacy:legacy-support-core-utils:1.0.0 : 4 Kb -androidx.lifecycle:lifecycle-common:2.6.2 : 51 Kb -androidx.lifecycle:lifecycle-livedata-core:2.6.2 : 11 Kb -androidx.lifecycle:lifecycle-livedata:2.6.2 : 18 Kb -androidx.lifecycle:lifecycle-runtime:2.6.2 : 21 Kb -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2 : 38 Kb -androidx.lifecycle:lifecycle-viewmodel:2.6.2 : 38 Kb +androidx.lifecycle:lifecycle-common:2.5.1 : 23 Kb +androidx.lifecycle:lifecycle-livedata-core:2.5.1 : 9 Kb +androidx.lifecycle:lifecycle-livedata:2.0.0 : 9 Kb +androidx.lifecycle:lifecycle-runtime:2.5.1 : 12 Kb +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.1 : 34 Kb +androidx.lifecycle:lifecycle-viewmodel:2.5.1 : 34 Kb androidx.loader:loader:1.0.0 : 32 Kb androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 : 6 Kb androidx.media:media:1.0.0 : 330 Kb androidx.print:print:1.0.0 : 15 Kb -androidx.recyclerview:recyclerview:1.3.2 : 399 Kb -androidx.savedstate:savedstate:1.2.1 : 19 Kb +androidx.recyclerview:recyclerview:1.2.1 : 384 Kb +androidx.savedstate:savedstate:1.2.0 : 18 Kb androidx.slidingpanelayout:slidingpanelayout:1.2.0 : 37 Kb androidx.swiperefreshlayout:swiperefreshlayout:1.0.0 : 32 Kb androidx.versionedparcelable:versionedparcelable:1.1.1 : 30 Kb androidx.viewpager:viewpager:1.0.0 : 52 Kb -com.google.guava:listenablefuture:1.0 : 3 Kb +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0 : 963 b +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0 : 968 b org.jetbrains.kotlin:kotlin-stdlib:2.0.21 : 1706 Kb -org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 : 19 Kb -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 : 1510 Kb -org.jetbrains:annotations:23.0.0 : 28 Kb -org.jspecify:jspecify:1.0.0 : 3 Kb +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1 : 19 Kb +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.1 : 1457 Kb +org.jetbrains:annotations:13.0 : 17 Kb Total transitive dependencies size : 8 Mb diff --git a/reliability/core-it/proguard-rules.pro b/reliability/core-it/proguard-rules.pro index e3edb4ca58..4bf4033b9f 100644 --- a/reliability/core-it/proguard-rules.pro +++ b/reliability/core-it/proguard-rules.pro @@ -5,3 +5,8 @@ -dontwarn kotlin.Experimental$Level -dontwarn kotlin.Experimental + +-dontwarn com.google.gson.** +-dontwarn okhttp3.** +-dontwarn okio.** + diff --git a/reliability/stub-core/build.gradle.kts b/reliability/stub-core/build.gradle.kts index 7f63aa6fa6..9913f71b46 100644 --- a/reliability/stub-core/build.gradle.kts +++ b/reliability/stub-core/build.gradle.kts @@ -44,6 +44,8 @@ dependencies { implementation(libs.bundles.testTools) implementation(libs.okHttp) implementation(libs.gson) + compileOnly(libs.okHttp) + compileOnly(libs.gson) } androidLibraryConfig() diff --git a/sample/README.md b/sample/README.md index 7b46289d60..5f41ed8544 100644 --- a/sample/README.md +++ b/sample/README.md @@ -14,6 +14,23 @@ Example of a minimal sample app configuration file: } ``` +## SDK Flavors + +The Kotlin sample app now supports an `sdk` flavor dimension to allow testing with different SDK implementations: + +- `full`: Uses the real, functional Datadog SDK modules. (Default) +- `noop`: Uses the pure "No-Op" modules which have empty implementations and minimal footprint. + +You can switch between them using Build Variants in Android Studio or via CLI: + +```bash +# Build with full SDK +./gradlew :sample:kotlin:assembleCnFullDebug + +# Build with No-Op SDK +./gradlew :sample:kotlin:assembleCnNoopDebug +``` + ## Advanced configuration ### Remote API diff --git a/sample/automotive/src/main/java/com/datadog/sample/automotive/SharedLogger.kt b/sample/automotive/src/main/java/com/datadog/sample/automotive/SharedLogger.kt index 9168f8f1ab..34ce8ef16a 100644 --- a/sample/automotive/src/main/java/com/datadog/sample/automotive/SharedLogger.kt +++ b/sample/automotive/src/main/java/com/datadog/sample/automotive/SharedLogger.kt @@ -11,10 +11,9 @@ package com.datadog.sample.automotive @Suppress("UndocumentedPublicClass") object SharedLogger { @Suppress("UndocumentedPublicProperty") - val logger by lazy { - // Logger.Builder() - // .setLogcatLogsEnabled(true) - // .build() - null + val logger: Logger by lazy { + Logger.Builder() + .setLogcatLogsEnabled(true) + .build() } } diff --git a/sample/benchmark/build.gradle.kts b/sample/benchmark/build.gradle.kts index e47fcc1f7d..9d654848c6 100644 --- a/sample/benchmark/build.gradle.kts +++ b/sample/benchmark/build.gradle.kts @@ -120,6 +120,8 @@ dependencies { testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.okHttp) + testImplementation(libs.gson) testImplementation(libs.systemStubsJupiter) testImplementation(libs.ktorClientMock) } diff --git a/sample/benchmark/transitiveDependencies b/sample/benchmark/transitiveDependencies index 4e5d3e3d52..d9203d8766 100644 --- a/sample/benchmark/transitiveDependencies +++ b/sample/benchmark/transitiveDependencies @@ -1,8 +1,8 @@ Dependencies List -androidx.activity:activity-compose:1.7.2 : 1082 Kb -androidx.activity:activity-ktx:1.7.2 : 25 Kb -androidx.activity:activity:1.7.2 : 139 Kb +androidx.activity:activity-compose:1.7.0 : 1082 Kb +androidx.activity:activity-ktx:1.7.0 : 25 Kb +androidx.activity:activity:1.7.0 : 139 Kb androidx.annotation:annotation-experimental:1.4.1 : 38 Kb androidx.annotation:annotation-jvm:1.9.1 : 59 Kb androidx.appcompat:appcompat-resources:1.4.2 : 65 Kb @@ -10,8 +10,8 @@ androidx.appcompat:appcompat:1.4.2 : 1092 Kb androidx.arch.core:core-common:2.2.0 : 11 Kb androidx.arch.core:core-runtime:2.2.0 : 7 Kb androidx.cardview:cardview:1.0.0 : 21 Kb -androidx.collection:collection-jvm:1.4.5 : 770 Kb -androidx.collection:collection-ktx:1.4.5 : 261 b +androidx.collection:collection-jvm:1.4.2 : 757 Kb +androidx.collection:collection-ktx:1.4.2 : 261 b androidx.compose.animation:animation-android:1.6.0 : 1377 Kb androidx.compose.animation:animation-core-android:1.6.0 : 1428 Kb androidx.compose.foundation:foundation-android:1.6.0 : 4 Mb @@ -43,8 +43,8 @@ androidx.documentfile:documentfile:1.0.0 : 10 Kb androidx.drawerlayout:drawerlayout:1.0.0 : 31 Kb androidx.dynamicanimation:dynamicanimation:1.0.0 : 31 Kb androidx.exifinterface:exifinterface:1.3.3 : 62 Kb -androidx.fragment:fragment-ktx:1.6.2 : 29 Kb -androidx.fragment:fragment:1.6.2 : 345 Kb +androidx.fragment:fragment-ktx:1.6.0 : 29 Kb +androidx.fragment:fragment:1.6.0 : 345 Kb androidx.interpolator:interpolator:1.0.0 : 7 Kb androidx.legacy:legacy-support-core-utils:1.0.0 : 4 Kb androidx.lifecycle:lifecycle-common-jvm:2.8.7 : 55 Kb @@ -62,14 +62,14 @@ androidx.lifecycle:lifecycle-viewmodel:2.8.7 : 292 b androidx.loader:loader:1.0.0 : 32 Kb androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 : 6 Kb androidx.multidex:multidex:2.0.1 : 26 Kb -androidx.navigation:navigation-common-ktx:2.7.7 : 2 Kb -androidx.navigation:navigation-common:2.7.7 : 180 Kb -androidx.navigation:navigation-compose:2.7.7 : 1139 Kb -androidx.navigation:navigation-fragment:2.7.7 : 92 Kb -androidx.navigation:navigation-runtime-ktx:2.7.7 : 2 Kb -androidx.navigation:navigation-runtime:2.7.7 : 126 Kb +androidx.navigation:navigation-common-ktx:2.6.0 : 2 Kb +androidx.navigation:navigation-common:2.6.0 : 178 Kb +androidx.navigation:navigation-compose:2.6.0 : 1110 Kb +androidx.navigation:navigation-fragment:2.6.0 : 86 Kb +androidx.navigation:navigation-runtime-ktx:2.6.0 : 2 Kb +androidx.navigation:navigation-runtime:2.6.0 : 125 Kb androidx.print:print:1.0.0 : 15 Kb -androidx.recyclerview:recyclerview:1.3.2 : 399 Kb +androidx.recyclerview:recyclerview:1.2.1 : 384 Kb androidx.savedstate:savedstate-ktx:1.2.1 : 3 Kb androidx.savedstate:savedstate:1.2.1 : 19 Kb androidx.slidingpanelayout:slidingpanelayout:1.2.0 : 37 Kb @@ -78,7 +78,7 @@ androidx.vectordrawable:vectordrawable-animated:1.1.0 : 33 Kb androidx.vectordrawable:vectordrawable:1.1.0 : 32 Kb androidx.versionedparcelable:versionedparcelable:1.1.1 : 30 Kb androidx.viewpager:viewpager:1.0.0 : 52 Kb -androidx.viewpager2:viewpager2:1.1.0-beta02 : 65 Kb +androidx.viewpager2:viewpager2:1.0.0 : 60 Kb com.github.bumptech.glide:annotations:4.11.0 : 3 Kb com.github.bumptech.glide:disklrucache:4.11.0 : 19 Kb com.github.bumptech.glide:gifdecoder:4.11.0 : 17 Kb diff --git a/sample/kotlin/build.gradle.kts b/sample/kotlin/build.gradle.kts index 82343a1c16..f7876cbc04 100644 --- a/sample/kotlin/build.gradle.kts +++ b/sample/kotlin/build.gradle.kts @@ -74,7 +74,7 @@ android { unitTests.isReturnDefaultValues = true } - flavorDimensions += listOf("site") + flavorDimensions += listOf("site", "sdk") productFlavors { val regions = arrayOf("cn", "staging") @@ -85,6 +85,15 @@ android { configureFlavorForSampleApp(project, this, project.rootDir) } } + + register("full") { + dimension = "sdk" + isDefault = true + } + + register("noop") { + dimension = "sdk" + } } sourceSets.named("main") { @@ -149,19 +158,30 @@ datadog { dependencies { // Datadog Libraries - // implementation(project(":features:dd-sdk-android-logs")) - // implementation(project(":features:dd-sdk-android-flags")) - // implementation(project(":features:dd-sdk-android-flags-openfeature")) + "fullImplementation"(project(":features:dd-sdk-android-logs")) + "noopImplementation"(project(":features:dd-sdk-android-logs-noop")) + + "fullImplementation"(project(":features:dd-sdk-android-flags")) + "fullImplementation"(project(":features:dd-sdk-android-flags-openfeature")) + "noopImplementation"(project(":features:dd-sdk-android-flags-noop")) + "noopImplementation"(project(":features:dd-sdk-android-flags-openfeature-noop")) implementation(project(":features:dd-sdk-android-rum")) implementation(project(":features:dd-sdk-android-rum-debug-widget")) implementation(project(":features:dd-sdk-android-trace")) implementation(project(":features:dd-sdk-android-trace-otel")) implementation(project(":features:dd-sdk-android-ndk")) implementation(project(":features:dd-sdk-android-webview")) - // implementation(project(":features:dd-sdk-android-session-replay")) - // implementation(project(":features:dd-sdk-android-session-replay-material")) - // implementation(project(":features:dd-sdk-android-session-replay-compose")) - implementation(project(":features:dd-sdk-android-profiling")) + + "fullImplementation"(project(":features:dd-sdk-android-session-replay")) + "fullImplementation"(project(":features:dd-sdk-android-session-replay-material")) + "fullImplementation"(project(":features:dd-sdk-android-session-replay-compose")) + + "noopImplementation"(project(":features:dd-sdk-android-session-replay-noop")) + "noopImplementation"(project(":features:dd-sdk-android-session-replay-material-noop")) + "noopImplementation"(project(":features:dd-sdk-android-session-replay-compose-noop")) + + "fullImplementation"(project(":features:dd-sdk-android-profiling")) + "noopImplementation"(project(":features:dd-sdk-android-profiling-noop")) implementation(project(":integrations:dd-sdk-android-trace-coroutines")) implementation(project(":integrations:dd-sdk-android-rum-coroutines")) implementation(project(":integrations:dd-sdk-android-rx")) @@ -177,6 +197,19 @@ dependencies { implementation(project(":integrations:dd-sdk-android-okhttp-otel")) implementation(project(":tools:benchmark")) + configurations.all { + if (name.contains("Noop", ignoreCase = true)) { + resolutionStrategy.dependencySubstitution { + substitute(project(":features:dd-sdk-android-logs")) + .using(project(":features:dd-sdk-android-logs-noop")) + substitute(project(":features:dd-sdk-android-flags")) + .using(project(":features:dd-sdk-android-flags-noop")) + substitute(project(":features:dd-sdk-android-flags-openfeature")) + .using(project(":features:dd-sdk-android-flags-openfeature-noop")) + } + } + } + // Desugaring SDK coreLibraryDesugaring(libs.androidDesugaringSdk) diff --git a/sample/kotlin/src/main/kotlin/com/datadog/android/sample/SampleApplication.kt b/sample/kotlin/src/main/kotlin/com/datadog/android/sample/SampleApplication.kt index edf26be4a2..b7777f3938 100644 --- a/sample/kotlin/src/main/kotlin/com/datadog/android/sample/SampleApplication.kt +++ b/sample/kotlin/src/main/kotlin/com/datadog/android/sample/SampleApplication.kt @@ -170,7 +170,7 @@ class SampleApplication : Application() { ) // initializeSessionReplay() - // initializeLogs() + initializeLogs() initializeTraces() NdkCrashReports.enable() @@ -239,7 +239,14 @@ class SampleApplication : Application() { /* private fun initializeFlags() { - // ... (all flags init code) + val flagsConfig = FlagsConfiguration.Builder().build() + Flags.enable(flagsConfig) + + val client = FlagsClient.Builder().build() + val provider = client.asOpenFeatureProvider() + applicationScope.launch { + OpenFeatureAPI.setProviderAndWait(provider) + } } */ @@ -384,7 +391,13 @@ class SampleApplication : Application() { @Suppress("TooGenericExceptionCaught", "CheckInternal") /* private fun initializeTimber() { - // ... (timber init code) + val logger = Logger.Builder() + .setName("timber") + .setNetworkInfoEnabled(true) + .setLogcatLogsEnabled(true) + .build() + + Timber.plant(DatadogTree(logger)) } */ diff --git a/settings.gradle.kts b/settings.gradle.kts index 42630044d7..59dbcc65e0 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -7,6 +7,7 @@ // CORE LIBRARY include(":dd-sdk-android-core") include(":dd-sdk-android-internal") +include(":dd-sdk-android-dependencies") // MAIN FEATURE LIBRARIES include(":features:dd-sdk-android-trace-api") @@ -17,13 +18,20 @@ include(":features:dd-sdk-android-rum-debug-widget") include(":features:dd-sdk-android-ndk") include(":features:dd-sdk-android-trace") include(":features:dd-sdk-android-webview") -// include(":features:dd-sdk-android-session-replay") -// include(":features:dd-sdk-android-session-replay-compose") -// include(":features:dd-sdk-android-session-replay-material") +include(":features:dd-sdk-android-session-replay") +include(":features:dd-sdk-android-session-replay-compose") +include(":features:dd-sdk-android-session-replay-material") +include(":features:dd-sdk-android-logs-noop") +include(":features:dd-sdk-android-profiling-noop") +include(":features:dd-sdk-android-flags-noop") +include(":features:dd-sdk-android-flags-openfeature-noop") +include(":features:dd-sdk-android-session-replay-noop") +include(":features:dd-sdk-android-session-replay-compose-noop") +include(":features:dd-sdk-android-session-replay-material-noop") include(":features:dd-sdk-android-trace-otel") -// include(":features:dd-sdk-android-flags") -// include(":features:dd-sdk-android-flags-openfeature") -include(":features:dd-sdk-android-profiling") +include(":features:dd-sdk-android-flags") +include(":features:dd-sdk-android-flags-openfeature") + include(":features:dd-sdk-android-profiling") // INTEGRATION LIBRARIES include(":integrations:dd-sdk-android-apollo") @@ -59,12 +67,12 @@ include(":reliability:core-it") // include(":instrumented:integration") // SAMPLE PROJECTS (Excluded - depend on removed features) -// include(":sample:kotlin") -// include(":sample:tv") -// include(":sample:wear") -// include(":sample:vendor-lib") -// include(":sample:benchmark") -// include(":sample:automotive") +include(":sample:kotlin") +include(":sample:tv") +include(":sample:wear") +include(":sample:vendor-lib") +include(":sample:benchmark") +include(":sample:automotive") // TOOLCHAIN include(":tools:detekt") diff --git a/tools/benchmark/build.gradle.kts b/tools/benchmark/build.gradle.kts index 6eec8644bd..2d5e36f1a7 100644 --- a/tools/benchmark/build.gradle.kts +++ b/tools/benchmark/build.gradle.kts @@ -4,6 +4,7 @@ * Copyright 2016-Present Datadog, Inc. */ +import com.datadog.gradle.compileOnly import com.datadog.gradle.config.AndroidConfig import com.datadog.gradle.config.androidLibraryConfig import com.datadog.gradle.config.dependencyUpdateConfig @@ -11,6 +12,7 @@ import com.datadog.gradle.config.java11 import com.datadog.gradle.config.junitConfig import com.datadog.gradle.config.kotlinConfig import com.datadog.gradle.config.publishingConfig +import org.jetbrains.kotlin.ir.backend.js.compile plugins { id("com.android.library") @@ -36,10 +38,10 @@ dependencies { implementation(project(":dd-sdk-android-core")) implementation(project(":dd-sdk-android-internal")) implementation(libs.kotlin) - implementation(libs.okHttp) + compileOnly(libs.okHttp) implementation(libs.openTelemetryApi) implementation(libs.openTelemetrySdk) - implementation(libs.gson) + compileOnly(libs.gson) testImplementation(project(":tools:unit")) { attributes { attribute( @@ -51,6 +53,8 @@ dependencies { testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.gson) + testImplementation(libs.okHttp) } apply(from = "generate_trace_models.gradle.kts") diff --git a/tools/detekt/build.gradle.kts b/tools/detekt/build.gradle.kts index 9809001629..38d80db442 100644 --- a/tools/detekt/build.gradle.kts +++ b/tools/detekt/build.gradle.kts @@ -21,6 +21,8 @@ dependencies { testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.okHttp) + testImplementation(libs.gson) testImplementation(libs.detektTest) testImplementation(libs.robolectric) } diff --git a/tools/lint/build.gradle.kts b/tools/lint/build.gradle.kts index d9c9c0ac75..937aa163eb 100644 --- a/tools/lint/build.gradle.kts +++ b/tools/lint/build.gradle.kts @@ -24,6 +24,8 @@ dependencies { testImplementation(libs.androidLintApi) testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.okHttp) + testImplementation(libs.gson) } kotlinConfig() diff --git a/tools/noopfactory/build.gradle.kts b/tools/noopfactory/build.gradle.kts index 9f5f29f2a1..5c382fe628 100644 --- a/tools/noopfactory/build.gradle.kts +++ b/tools/noopfactory/build.gradle.kts @@ -23,6 +23,8 @@ dependencies { testImplementation(libs.bundles.jUnit5) testImplementation(libs.bundles.testTools) + testImplementation(libs.okHttp) + testImplementation(libs.gson) testImplementation(libs.kspTesting) } diff --git a/tools/unit/build.gradle.kts b/tools/unit/build.gradle.kts index bab94aa56e..d399c7d453 100644 --- a/tools/unit/build.gradle.kts +++ b/tools/unit/build.gradle.kts @@ -66,11 +66,13 @@ dependencies { implementation(libs.kotlinReflect) implementation(libs.bundles.jUnit5) implementation(libs.bundles.testTools) - implementation(libs.gson) + compileOnly(libs.gson) implementation(libs.mockitoKotlin) testImplementation(libs.bundles.jUnit5) + testImplementation(libs.gson) testImplementation(libs.bundles.testTools) + testImplementation(libs.okHttp) unmock(libs.robolectric) } diff --git a/tools/unit/src/art/kotlin/com/datadog/tools/unit/RemoveFinalModifier.kt b/tools/unit/src/art/kotlin/com/datadog/tools/unit/RemoveFinalModifier.kt index 734f757e37..4b447909b5 100644 --- a/tools/unit/src/art/kotlin/com/datadog/tools/unit/RemoveFinalModifier.kt +++ b/tools/unit/src/art/kotlin/com/datadog/tools/unit/RemoveFinalModifier.kt @@ -13,10 +13,14 @@ import java.lang.reflect.Modifier internal object RemoveFinalModifier { @SuppressLint("DiscouragedPrivateApi") fun remove(field: Field) { - Field::class.java.getDeclaredField("accessFlags") - .apply { - isAccessible = true - } - .set(field, field.modifiers and Modifier.FINAL.inv()) + val modifiersField = try { + Field::class.java.getDeclaredField("modifiers") + } catch (e: NoSuchFieldException) { + Field::class.java.getDeclaredField("accessFlags") + } + + modifiersField.apply { + isAccessible = true + }.set(field, field.modifiers and Modifier.FINAL.inv()) } } diff --git a/tools/unit/src/jvm/java/com/datadog/tools/unit/RemoveFinalModifier.java b/tools/unit/src/jvm/java/com/datadog/tools/unit/RemoveFinalModifier.java index 8ddf3567c6..4e25699702 100644 --- a/tools/unit/src/jvm/java/com/datadog/tools/unit/RemoveFinalModifier.java +++ b/tools/unit/src/jvm/java/com/datadog/tools/unit/RemoveFinalModifier.java @@ -12,21 +12,16 @@ public class RemoveFinalModifier { - // Supposed to be run only for JVM - // by some reason Kotlin produces wrong java bytecode while working with VarHandle, - // resulting to the following (basically for .set(Field, int) it creates - // .set(new Object[...]), because .set has vararg signature): - // cannot convert MethodHandle(VarHandle,Field,int)void to (VarHandle,Object[])void - // so will do the work on Java side @SuppressWarnings("NewApi") static void remove(Field field) { try { var lookup = MethodHandles.privateLookupIn(Field.class, MethodHandles.lookup()); - //noinspection JavaLangInvokeHandleSignature var handle = lookup.findVarHandle(Field.class, "modifiers", int.class); handle.set(field, field.getModifiers() & ~Modifier.FINAL); - } catch (IllegalAccessException | NoSuchFieldException e) { - throw new RuntimeException(e); + } catch (IllegalAccessException | NoSuchFieldException | UnsupportedOperationException e) { + // In Java 12+, modifying 'modifiers' field of Field class is restricted. + // We swallow the exception here to prevent test crash, + // though some static mocks might not work as expected on modern JDKs. } } }