diff --git a/vector/build.gradle b/vector/build.gradle
index 1b6e81848d..201be09cf6 100644
--- a/vector/build.gradle
+++ b/vector/build.gradle
@@ -462,6 +462,9 @@ dependencies {
implementation libs.dagger.hilt
kapt libs.dagger.hiltCompiler
+ // Analytics
+ implementation 'com.posthog.android:posthog:1.1.2'
+
// gplay flavor only
gplayImplementation('com.google.firebase:firebase-messaging:23.0.0') {
exclude group: 'com.google.firebase', module: 'firebase-core'
diff --git a/vector/src/main/assets/open_source_licenses.html b/vector/src/main/assets/open_source_licenses.html
index 529b7da2f1..29537fc40f 100755
--- a/vector/src/main/assets/open_source_licenses.html
+++ b/vector/src/main/assets/open_source_licenses.html
@@ -262,6 +262,15 @@ SOFTWARE.
+
+ -
+ posthog-android
+
+ https://github.com/PostHog/posthog-android
+ PostHog Android integration is licensed under the MIT License
+
+
+
Apache License
diff --git a/vector/src/main/java/im/vector/app/VectorApplication.kt b/vector/src/main/java/im/vector/app/VectorApplication.kt
index 46f155a8d9..5401c23bf1 100644
--- a/vector/src/main/java/im/vector/app/VectorApplication.kt
+++ b/vector/src/main/java/im/vector/app/VectorApplication.kt
@@ -42,6 +42,7 @@ import dagger.hilt.android.HiltAndroidApp
import im.vector.app.core.di.ActiveSessionHolder
import im.vector.app.core.extensions.configureAndStart
import im.vector.app.core.extensions.startSyncing
+import im.vector.app.features.analytics.VectorAnalytics
import im.vector.app.features.call.webrtc.WebRtcCallManager
import im.vector.app.features.configuration.VectorConfiguration
import im.vector.app.features.disclaimer.doNotShowDisclaimerDialog
@@ -96,6 +97,7 @@ class VectorApplication :
@Inject lateinit var callManager: WebRtcCallManager
@Inject lateinit var invitesAcceptor: InvitesAcceptor
@Inject lateinit var vectorFileLogger: VectorFileLogger
+ @Inject lateinit var vectorAnalytics: VectorAnalytics
// font thread handler
private var fontThreadHandler: Handler? = null
@@ -113,6 +115,7 @@ class VectorApplication :
enableStrictModeIfNeeded()
super.onCreate()
appContext = this
+ vectorAnalytics.init()
invitesAcceptor.initialize()
vectorUncaughtExceptionHandler.activate(this)
diff --git a/vector/src/main/java/im/vector/app/features/analytics/VectorAnalytics.kt b/vector/src/main/java/im/vector/app/features/analytics/VectorAnalytics.kt
index 55e6147461..538508b0de 100644
--- a/vector/src/main/java/im/vector/app/features/analytics/VectorAnalytics.kt
+++ b/vector/src/main/java/im/vector/app/features/analytics/VectorAnalytics.kt
@@ -53,4 +53,9 @@ interface VectorAnalytics {
* To be called when a session is destroyed
*/
suspend fun onSignOut()
+
+ /**
+ * To be called when application is started
+ */
+ fun init()
}
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 7eca77c74f..1d3447efbb 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
@@ -16,14 +16,23 @@
package im.vector.app.features.analytics.impl
+import android.content.Context
+import com.posthog.android.PostHog
+import im.vector.app.features.analytics.AnalyticsConfig
import im.vector.app.features.analytics.VectorAnalytics
import im.vector.app.features.analytics.store.AnalyticsStore
import kotlinx.coroutines.flow.Flow
+import timber.log.Timber
import javax.inject.Inject
+import javax.inject.Singleton
+@Singleton
class DefaultVectorAnalytics @Inject constructor(
+ private val context: Context,
private val analyticsStore: AnalyticsStore
) : VectorAnalytics {
+ private var posthog: PostHog? = null
+
override fun getUserConsent(): Flow {
return analyticsStore.userConsentFlow
}
@@ -52,4 +61,29 @@ class DefaultVectorAnalytics @Inject constructor(
// reset the analyticsId
setAnalyticsId("")
}
+
+ override fun init() {
+ val config: AnalyticsConfig = AnalyticsConfig.getConfig()
+ ?: return Unit.also { Timber.w("Analytics is disabled") }
+
+ posthog = PostHog.Builder(context, config.postHogApiKey, config.postHogHost)
+ // Record certain application events automatically! (off/false by default)
+ // .captureApplicationLifecycleEvents()
+
+ // Record screen views automatically! (off/false by default)
+ // .recordScreenViews()
+
+ // Capture deep links as part of the screen call. (off by default)
+ // .captureDeepLinks()
+
+ // Maximum number of events to keep in queue before flushing (20)
+ // .flushQueueSize(20)
+
+ // Max delay before flushing the queue (30 seconds)
+ // .flushInterval(30, TimeUnit.SECONDS)
+
+ // Enable or disable collection of ANDROID_ID (true)
+ .collectDeviceId(false)
+ .build()
+ }
}