From f873b3254a632783524522b2f61f6d6dc248b1eb Mon Sep 17 00:00:00 2001 From: Vishal Gupta Date: Thu, 30 Jan 2025 14:58:36 +0530 Subject: [PATCH] refactor: add IntegrationsManagementPlugin by default in the PluginChain --- .../sdk/kotlin/android/Analytics.kt | 21 +++++------------- .../plugins/devicemode/IntegrationPlugin.kt | 1 - .../IntegrationsManagementPlugin.kt | 8 +++---- .../customplugins/SampleIntegrationPlugin.kt | 22 +++++++++---------- 4 files changed, 20 insertions(+), 32 deletions(-) diff --git a/android/src/main/kotlin/com/rudderstack/sdk/kotlin/android/Analytics.kt b/android/src/main/kotlin/com/rudderstack/sdk/kotlin/android/Analytics.kt index 1e2b9af63..b8761ac31 100644 --- a/android/src/main/kotlin/com/rudderstack/sdk/kotlin/android/Analytics.kt +++ b/android/src/main/kotlin/com/rudderstack/sdk/kotlin/android/Analytics.kt @@ -79,7 +79,7 @@ class Analytics( internal val activityLifecycleManagementPlugin = ActivityLifecycleManagementPlugin() internal val processLifecycleManagementPlugin = ProcessLifecycleManagementPlugin() - private var integrationsManagementPlugin: IntegrationsManagementPlugin? = null + private var integrationsManagementPlugin = IntegrationsManagementPlugin() private val sessionTrackingPlugin = SessionTrackingPlugin() init { @@ -133,7 +133,7 @@ class Analytics( super.reset(clearAnonymousId) sessionTrackingPlugin.refreshSession() - this.integrationsManagementPlugin?.reset() + integrationsManagementPlugin.reset() } override fun flush() { @@ -141,7 +141,7 @@ class Analytics( super.flush() - this.integrationsManagementPlugin?.flush() + integrationsManagementPlugin.flush() } /** @@ -226,9 +226,7 @@ class Analytics( fun addIntegration(plugin: IntegrationPlugin) { if (!isAnalyticsActive()) return - initIntegrationsManagementPlugin() - - integrationsManagementPlugin?.addIntegration(plugin) + integrationsManagementPlugin.addIntegration(plugin) } /** @@ -239,15 +237,7 @@ class Analytics( fun removeIntegration(plugin: IntegrationPlugin) { if (!isAnalyticsActive()) return - integrationsManagementPlugin?.removeIntegration(plugin) - } - - private fun initIntegrationsManagementPlugin() { - synchronized(this) { - if (integrationsManagementPlugin == null) { - integrationsManagementPlugin = IntegrationsManagementPlugin().also { add(it) } - } - } + integrationsManagementPlugin.removeIntegration(plugin) } private fun setup() { @@ -261,6 +251,7 @@ class Analytics( add(ScreenInfoPlugin()) add(TimezoneInfoPlugin()) add(sessionTrackingPlugin) + add(integrationsManagementPlugin) // Add these plugins at last in chain add(AndroidLifecyclePlugin()) diff --git a/android/src/main/kotlin/com/rudderstack/sdk/kotlin/android/plugins/devicemode/IntegrationPlugin.kt b/android/src/main/kotlin/com/rudderstack/sdk/kotlin/android/plugins/devicemode/IntegrationPlugin.kt index 9485e036f..1e9183005 100644 --- a/android/src/main/kotlin/com/rudderstack/sdk/kotlin/android/plugins/devicemode/IntegrationPlugin.kt +++ b/android/src/main/kotlin/com/rudderstack/sdk/kotlin/android/plugins/devicemode/IntegrationPlugin.kt @@ -56,7 +56,6 @@ abstract class IntegrationPlugin : EventPlugin { * This method must return true if the destination was created successfully, false otherwise. * * @param destinationConfig The configuration for the destination. - * @return true if the destination was created successfully, false otherwise. */ protected abstract fun create(destinationConfig: JsonObject) diff --git a/android/src/main/kotlin/com/rudderstack/sdk/kotlin/android/plugins/devicemode/IntegrationsManagementPlugin.kt b/android/src/main/kotlin/com/rudderstack/sdk/kotlin/android/plugins/devicemode/IntegrationsManagementPlugin.kt index 0755a9616..0f3a01d10 100644 --- a/android/src/main/kotlin/com/rudderstack/sdk/kotlin/android/plugins/devicemode/IntegrationsManagementPlugin.kt +++ b/android/src/main/kotlin/com/rudderstack/sdk/kotlin/android/plugins/devicemode/IntegrationsManagementPlugin.kt @@ -116,11 +116,9 @@ internal class IntegrationsManagementPlugin : Plugin { queuedEventsChannel.trySend(event) } - private fun processEvents() { - analytics.withIntegrationsDispatcher { - for (event in queuedEventsChannel) { - integrationPluginChain.process(event) - } + private suspend fun processEvents() { + for (event in queuedEventsChannel) { + integrationPluginChain.process(event) } } } diff --git a/app/src/main/java/com/rudderstack/sampleapp/analytics/customplugins/SampleIntegrationPlugin.kt b/app/src/main/java/com/rudderstack/sampleapp/analytics/customplugins/SampleIntegrationPlugin.kt index 4d0b844e3..3ea82b77e 100644 --- a/app/src/main/java/com/rudderstack/sampleapp/analytics/customplugins/SampleIntegrationPlugin.kt +++ b/app/src/main/java/com/rudderstack/sampleapp/analytics/customplugins/SampleIntegrationPlugin.kt @@ -3,7 +3,6 @@ package com.rudderstack.sampleapp.analytics.customplugins import com.rudderstack.sdk.kotlin.android.plugins.devicemode.IntegrationPlugin import com.rudderstack.sdk.kotlin.core.internals.logger.LoggerAnalytics import com.rudderstack.sdk.kotlin.core.internals.models.Event -import com.rudderstack.sdk.kotlin.core.internals.models.ScreenEvent import com.rudderstack.sdk.kotlin.core.internals.models.TrackEvent import kotlinx.coroutines.delay import kotlinx.coroutines.runBlocking @@ -34,25 +33,18 @@ class SampleIntegrationPlugin : IntegrationPlugin() { } override fun track(payload: TrackEvent): Event { - LoggerAnalytics.debug("SampleIntegrationPlugin: track event $payload") LoggerAnalytics.debug("SampleIntegrationPlugin: destinationConfig $destinationConfig") + destinationSdk?.track(payload.event, payload.properties) return payload } - override fun screen(payload: ScreenEvent): Event? { - LoggerAnalytics.debug("SampleIntegrationPlugin: screen event $payload") - return super.screen(payload) - } - override fun flush() { - LoggerAnalytics.debug("SampleIntegrationPlugin: flush") - super.flush() + destinationSdk?.flush() } override fun reset() { - LoggerAnalytics.debug("SampleIntegrationPlugin: reset") - super.reset() + destinationSdk?.reset() } } @@ -63,6 +55,14 @@ class SampleDestinationSdk private constructor(private val key: String) { LoggerAnalytics.debug("SampleAmplitudeSdk: track event $event with properties $properties") } + fun flush() { + LoggerAnalytics.debug("SampleAmplitudeSdk: flush") + } + + fun reset() { + LoggerAnalytics.debug("SampleAmplitudeSdk: reset") + } + companion object { fun create(key: String): SampleDestinationSdk {