Analytics: Fix a race condition

This commit is contained in:
Benoit Marty 2021-11-24 17:24:08 +01:00 committed by Benoit Marty
parent 24a6080090
commit 2968be2233
1 changed files with 16 additions and 7 deletions

View File

@ -40,6 +40,7 @@ class DefaultVectorAnalytics @Inject constructor(
private var posthog: PostHog? = null private var posthog: PostHog? = null
private var userConsent: Boolean = false private var userConsent: Boolean = false
private var analyticsId: String? = null
override fun getUserConsent(): Flow<Boolean> { override fun getUserConsent(): Flow<Boolean> {
return analyticsStore.userConsentFlow return analyticsStore.userConsentFlow
@ -83,17 +84,23 @@ class DefaultVectorAnalytics @Inject constructor(
getAnalyticsId() getAnalyticsId()
.onEach { id -> .onEach { id ->
Timber.tag(analyticsTag.value).d("Analytics Id updated to '$id'") Timber.tag(analyticsTag.value).d("Analytics Id updated to '$id'")
if (id.isEmpty()) { analyticsId = id
Timber.tag(analyticsTag.value).d("reset") identifyPostHog()
posthog?.reset()
} else {
Timber.tag(analyticsTag.value).d("identify")
posthog?.identify(id)
}
} }
.launchIn(GlobalScope) .launchIn(GlobalScope)
} }
private fun identifyPostHog() {
val id = analyticsId ?: return
if (id.isEmpty()) {
Timber.tag(analyticsTag.value).d("reset")
posthog?.reset()
} else {
Timber.tag(analyticsTag.value).d("identify")
posthog?.identify(id)
}
}
@Suppress("EXPERIMENTAL_API_USAGE") @Suppress("EXPERIMENTAL_API_USAGE")
private fun observeUserConsent() { private fun observeUserConsent() {
getUserConsent() getUserConsent()
@ -134,6 +141,8 @@ class DefaultVectorAnalytics @Inject constructor(
.collectDeviceId(false) .collectDeviceId(false)
.logLevel(getLogLevel()) .logLevel(getLogLevel())
.build() .build()
identifyPostHog()
} }
private fun getLogLevel(): PostHog.LogLevel { private fun getLogLevel(): PostHog.LogLevel {