From 6a3f5a50d91e1fe6f01a9eb1e68d24917ed25ff2 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 13 Mar 2023 10:33:18 +0100 Subject: [PATCH] Create Posthog instance only whe user consent is given, to avoid pinging Posthog server at startup when consent is not given. Note that feature flag will not work, but for now they are not used. All the `?.takeIf { userConsent == true }` could be removed with this change, but let's keep them for safety... --- .../analytics/impl/DefaultVectorAnalytics.kt | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/analytics/impl/DefaultVectorAnalytics.kt b/vector/src/main/java/im/vector/app/features/analytics/impl/DefaultVectorAnalytics.kt index 917c3468c6..42193b9d1e 100644 --- a/vector/src/main/java/im/vector/app/features/analytics/impl/DefaultVectorAnalytics.kt +++ b/vector/src/main/java/im/vector/app/features/analytics/impl/DefaultVectorAnalytics.kt @@ -41,19 +41,23 @@ private val IGNORED_OPTIONS: Options? = null @Singleton class DefaultVectorAnalytics @Inject constructor( - postHogFactory: PostHogFactory, + private val postHogFactory: PostHogFactory, private val sentryAnalytics: SentryAnalytics, - analyticsConfig: AnalyticsConfig, + private val analyticsConfig: AnalyticsConfig, private val analyticsStore: AnalyticsStore, private val lateInitUserPropertiesFactory: LateInitUserPropertiesFactory, @NamedGlobalScope private val globalScope: CoroutineScope ) : VectorAnalytics { - private val posthog: PostHog? = when { - analyticsConfig.isEnabled -> postHogFactory.createPosthog() - else -> { - Timber.tag(analyticsTag.value).w("Analytics is disabled") - null + private var posthog: PostHog? = null + + private fun createPosthog(): PostHog? { + return when { + analyticsConfig.isEnabled -> postHogFactory.createPosthog() + else -> { + Timber.tag(analyticsTag.value).w("Analytics is disabled") + null + } } } @@ -150,6 +154,7 @@ class DefaultVectorAnalytics @Inject constructor( userConsent?.let { _userConsent -> when (_userConsent) { true -> { + posthog = createPosthog() posthog?.optOut(false) identifyPostHog() pendingUserProperties?.let { doUpdateUserProperties(it) } @@ -159,6 +164,7 @@ class DefaultVectorAnalytics @Inject constructor( // When opting out, ensure that the queue is flushed first, or it will be flushed later (after user has revoked consent) posthog?.flush() posthog?.optOut(true) + posthog = null } } }