From 0eda811522ae028dfd6007c273c87b8ed1fd16c3 Mon Sep 17 00:00:00 2001 From: Tim Chow Date: Fri, 15 Nov 2024 10:17:35 -0600 Subject: [PATCH] Expose AnalyticsClient to all modules (#1210) --- .../api/core/AnalyticsClient.kt | 23 ++++++++++++++++--- .../api/core/BraintreeClient.kt | 14 +---------- .../api/core/ConfigurationLoader.kt | 5 ++-- .../api/core/AnalyticsClientUnitTest.kt | 18 +++++++++------ .../api/core/BraintreeClientUnitTest.kt | 4 +--- .../api/core/ConfigurationLoaderUnitTest.kt | 5 ++-- 6 files changed, 37 insertions(+), 32 deletions(-) diff --git a/BraintreeCore/src/main/java/com/braintreepayments/api/core/AnalyticsClient.kt b/BraintreeCore/src/main/java/com/braintreepayments/api/core/AnalyticsClient.kt index 339cd47707..d2f580d3b1 100644 --- a/BraintreeCore/src/main/java/com/braintreepayments/api/core/AnalyticsClient.kt +++ b/BraintreeCore/src/main/java/com/braintreepayments/api/core/AnalyticsClient.kt @@ -1,6 +1,7 @@ package com.braintreepayments.api.core import android.content.Context +import androidx.annotation.RestrictTo import androidx.work.Data import androidx.work.ExistingWorkPolicy import androidx.work.ListenableWorker @@ -13,8 +14,9 @@ import org.json.JSONObject import java.util.* import java.util.concurrent.TimeUnit +@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) @Suppress("SwallowedException", "TooGenericExceptionCaught") -internal class AnalyticsClient( +class AnalyticsClient internal constructor( private val httpClient: BraintreeHttpClient = BraintreeHttpClient(), private val analyticsDatabase: AnalyticsDatabase = AnalyticsDatabaseProvider().analyticsDatabase, private val workManager: WorkManager = WorkManagerProvider().workManager, @@ -27,10 +29,25 @@ internal class AnalyticsClient( private val applicationContext: Context get() = merchantRepository.applicationContext - fun sendEvent(event: AnalyticsEvent) { + fun sendEvent( + eventName: String, + analyticsEventParams: AnalyticsEventParams = AnalyticsEventParams() + ) { + val analyticsEvent = AnalyticsEvent( + name = eventName, + timestamp = time.currentTime, + payPalContextId = analyticsEventParams.payPalContextId, + linkType = analyticsEventParams.linkType, + isVaultRequest = analyticsEventParams.isVaultRequest, + startTime = analyticsEventParams.startTime, + endTime = analyticsEventParams.endTime, + endpoint = analyticsEventParams.endpoint, + experiment = analyticsEventParams.experiment, + paymentMethodsDisplayed = analyticsEventParams.paymentMethodsDisplayed + ) configurationLoader.loadConfiguration { result -> if (result is ConfigurationLoaderResult.Success) { - scheduleAnalyticsWriteInBackground(event, merchantRepository.authorization) + scheduleAnalyticsWriteInBackground(analyticsEvent, merchantRepository.authorization) scheduleAnalyticsUploadInBackground( configuration = result.configuration, authorization = merchantRepository.authorization, diff --git a/BraintreeCore/src/main/java/com/braintreepayments/api/core/BraintreeClient.kt b/BraintreeCore/src/main/java/com/braintreepayments/api/core/BraintreeClient.kt index 1b50b82002..efc3d56cab 100644 --- a/BraintreeCore/src/main/java/com/braintreepayments/api/core/BraintreeClient.kt +++ b/BraintreeCore/src/main/java/com/braintreepayments/api/core/BraintreeClient.kt @@ -101,19 +101,7 @@ class BraintreeClient internal constructor( eventName: String, params: AnalyticsEventParams = AnalyticsEventParams() ) { - val event = AnalyticsEvent( - name = eventName, - timestamp = time.currentTime, - payPalContextId = params.payPalContextId, - linkType = params.linkType, - isVaultRequest = params.isVaultRequest, - startTime = params.startTime, - endTime = params.endTime, - endpoint = params.endpoint, - experiment = params.experiment, - paymentMethodsDisplayed = params.paymentMethodsDisplayed - ) - analyticsClient.sendEvent(event) + analyticsClient.sendEvent(eventName, params) } /** diff --git a/BraintreeCore/src/main/java/com/braintreepayments/api/core/ConfigurationLoader.kt b/BraintreeCore/src/main/java/com/braintreepayments/api/core/ConfigurationLoader.kt index 657c312415..99430577aa 100644 --- a/BraintreeCore/src/main/java/com/braintreepayments/api/core/ConfigurationLoader.kt +++ b/BraintreeCore/src/main/java/com/braintreepayments/api/core/ConfigurationLoader.kt @@ -52,9 +52,8 @@ internal class ConfigurationLoader( callback.onResult(ConfigurationLoaderResult.Success(configuration, timing)) analyticsClient.sendEvent( - AnalyticsEvent( - name = CoreAnalytics.API_REQUEST_LATENCY, - timestamp = time.currentTime, + eventName = CoreAnalytics.API_REQUEST_LATENCY, + analyticsEventParams = AnalyticsEventParams( startTime = timing?.startTime, endTime = timing?.endTime, endpoint = "/v1/configuration" diff --git a/BraintreeCore/src/test/java/com/braintreepayments/api/core/AnalyticsClientUnitTest.kt b/BraintreeCore/src/test/java/com/braintreepayments/api/core/AnalyticsClientUnitTest.kt index 927a2d4364..50dd581f41 100644 --- a/BraintreeCore/src/test/java/com/braintreepayments/api/core/AnalyticsClientUnitTest.kt +++ b/BraintreeCore/src/test/java/com/braintreepayments/api/core/AnalyticsClientUnitTest.kt @@ -103,9 +103,7 @@ class AnalyticsClientUnitTest { ) } returns mockk() - val event = AnalyticsEvent(eventName, timestamp = 123) - - sut.sendEvent(event) + sut.sendEvent(eventName) val workSpec = workRequestSlot.captured.workSpec assertEquals(AnalyticsWriteToDbWorker::class.java.name, workSpec.workerClassName) @@ -142,7 +140,14 @@ class AnalyticsClientUnitTest { timestamp = 456 ) - sut.sendEvent(event) + sut.sendEvent( + eventName = eventName, + analyticsEventParams = AnalyticsEventParams( + payPalContextId = "fake-paypal-context-id", + linkType = "fake-link-type", + isVaultRequest = true, + ) + ) val workSpec = workRequestSlot.captured.workSpec assertEquals(30000, workSpec.initialDelay) @@ -528,8 +533,7 @@ class AnalyticsClientUnitTest { deviceInspector.getDeviceMetadata(context, configuration, sessionId, integration) } returns metadata - val event = AnalyticsEvent(eventName, timestamp) - sut.sendEvent(event) + sut.sendEvent(eventName) sut.reportCrash(context, configuration, integration, null) @@ -539,7 +543,7 @@ class AnalyticsClientUnitTest { @Test fun `sendEvent enqueues work to upload analytic events with sessionId in the name`() { - sut.sendEvent(AnalyticsEvent("event-name", timestamp)) + sut.sendEvent("event-name") verify { workManager.enqueueUniqueWork( diff --git a/BraintreeCore/src/test/java/com/braintreepayments/api/core/BraintreeClientUnitTest.kt b/BraintreeCore/src/test/java/com/braintreepayments/api/core/BraintreeClientUnitTest.kt index 74f5e0d473..ecba21eace 100644 --- a/BraintreeCore/src/test/java/com/braintreepayments/api/core/BraintreeClientUnitTest.kt +++ b/BraintreeCore/src/test/java/com/braintreepayments/api/core/BraintreeClientUnitTest.kt @@ -326,9 +326,7 @@ class BraintreeClientUnitTest { sut.sendAnalyticsEvent("event.started") verify { - analyticsClient.sendEvent( - match { it.name == "event.started" && it.timestamp == 123L }, - ) + analyticsClient.sendEvent("event.started") } } diff --git a/BraintreeCore/src/test/java/com/braintreepayments/api/core/ConfigurationLoaderUnitTest.kt b/BraintreeCore/src/test/java/com/braintreepayments/api/core/ConfigurationLoaderUnitTest.kt index 586e79b127..49501d9727 100644 --- a/BraintreeCore/src/test/java/com/braintreepayments/api/core/ConfigurationLoaderUnitTest.kt +++ b/BraintreeCore/src/test/java/com/braintreepayments/api/core/ConfigurationLoaderUnitTest.kt @@ -234,9 +234,8 @@ class ConfigurationLoaderUnitTest { verify { analyticsClient.sendEvent( - AnalyticsEvent( - name = CoreAnalytics.API_REQUEST_LATENCY, - timestamp = 123, + eventName = CoreAnalytics.API_REQUEST_LATENCY, + analyticsEventParams = AnalyticsEventParams( startTime = 0, endTime = 10, endpoint = "/v1/configuration"