From b237b123c7dd49b5bd362d137975c60aa757372d Mon Sep 17 00:00:00 2001 From: Johannes Marbach Date: Sat, 17 Jun 2023 21:11:44 +0200 Subject: [PATCH] Add analytics events for room creation --- changelog.d/627.feature | 1 + features/createroom/impl/build.gradle.kts | 2 ++ .../impl/configureroom/ConfigureRoomPresenter.kt | 8 +++++++- .../createroom/impl/root/CreateRoomRootPresenter.kt | 4 ++++ .../impl/configureroom/ConfigureRoomPresenterTests.kt | 4 ++++ .../createroom/impl/root/CreateRoomRootPresenterTests.kt | 6 +++++- 6 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 changelog.d/627.feature diff --git a/changelog.d/627.feature b/changelog.d/627.feature new file mode 100644 index 0000000000..0b875fc536 --- /dev/null +++ b/changelog.d/627.feature @@ -0,0 +1 @@ +Add analytics events for room creation diff --git a/features/createroom/impl/build.gradle.kts b/features/createroom/impl/build.gradle.kts index f203501315..fd7a6d6f5e 100644 --- a/features/createroom/impl/build.gradle.kts +++ b/features/createroom/impl/build.gradle.kts @@ -49,6 +49,7 @@ dependencies { implementation(projects.libraries.mediapickers.api) implementation(projects.libraries.mediaupload.api) implementation(projects.libraries.usersearch.impl) + implementation(projects.services.analytics.api) implementation(libs.coil.compose) api(projects.features.createroom.api) @@ -59,6 +60,7 @@ dependencies { testImplementation(libs.test.truth) testImplementation(libs.test.turbine) testImplementation(libs.test.robolectric) + testImplementation(projects.features.analytics.test) testImplementation(projects.libraries.matrix.test) testImplementation(projects.libraries.mediapickers.test) testImplementation(projects.libraries.mediaupload.test) diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt index ca714b1e59..8879f4be1c 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt @@ -25,6 +25,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import im.vector.app.features.analytics.plan.CreatedRoom import io.element.android.features.createroom.impl.CreateRoomConfig import io.element.android.features.createroom.impl.CreateRoomDataStore import io.element.android.libraries.architecture.Async @@ -39,6 +40,7 @@ import io.element.android.libraries.matrix.api.createroom.RoomVisibility import io.element.android.libraries.matrix.ui.media.AvatarAction import io.element.android.libraries.mediapickers.api.PickerProvider import io.element.android.libraries.mediaupload.api.MediaPreProcessor +import io.element.android.services.analytics.api.AnalyticsService import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch @@ -49,6 +51,7 @@ class ConfigureRoomPresenter @Inject constructor( private val matrixClient: MatrixClient, private val mediaPickerProvider: PickerProvider, private val mediaPreProcessor: MediaPreProcessor, + private val analyticsService: AnalyticsService, ) : Presenter { @Composable @@ -124,7 +127,10 @@ class ConfigureRoomPresenter @Inject constructor( avatar = avatarUrl, ) matrixClient.createRoom(params).getOrThrow() - .also { dataStore.clearCachedData() } + .also { + dataStore.clearCachedData() + analyticsService.capture(CreatedRoom(isDM = false)) + } }.execute(createRoomAction) } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt index 7b5c6b7cf1..9e9b3b28a4 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt @@ -21,6 +21,7 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import im.vector.app.features.analytics.plan.CreatedRoom import io.element.android.features.createroom.impl.userlist.SelectionMode import io.element.android.features.createroom.impl.userlist.UserListDataStore import io.element.android.features.createroom.impl.userlist.UserListPresenter @@ -32,6 +33,7 @@ import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.usersearch.api.UserRepository +import io.element.android.services.analytics.api.AnalyticsService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import javax.inject.Inject @@ -41,6 +43,7 @@ class CreateRoomRootPresenter @Inject constructor( private val userRepository: UserRepository, private val userListDataStore: UserListDataStore, private val matrixClient: MatrixClient, + private val analyticsService: AnalyticsService, ) : Presenter { private val presenter by lazy { @@ -88,6 +91,7 @@ class CreateRoomRootPresenter @Inject constructor( private fun CoroutineScope.createDM(user: MatrixUser, startDmAction: MutableState>) = launch { suspend { matrixClient.createDM(user.userId).getOrThrow() + .also { analyticsService.capture(CreatedRoom(isDM = true)) } }.execute(startDmAction) } } diff --git a/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenterTests.kt b/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenterTests.kt index 736fca9cb4..0c73d16a7e 100644 --- a/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenterTests.kt +++ b/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenterTests.kt @@ -21,6 +21,7 @@ import app.cash.molecule.RecompositionClock import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat +import io.element.android.features.analytics.test.FakeAnalyticsService import io.element.android.features.createroom.impl.CreateRoomConfig import io.element.android.features.createroom.impl.CreateRoomDataStore import io.element.android.features.createroom.impl.userlist.UserListDataStore @@ -62,6 +63,7 @@ class ConfigureRoomPresenterTests { private lateinit var fakeMatrixClient: FakeMatrixClient private lateinit var fakePickerProvider: FakePickerProvider private lateinit var fakeMediaPreProcessor: FakeMediaPreProcessor + private lateinit var fakeAnalyticsService: FakeAnalyticsService @Before fun setup() { @@ -70,11 +72,13 @@ class ConfigureRoomPresenterTests { createRoomDataStore = CreateRoomDataStore(userListDataStore) fakePickerProvider = FakePickerProvider() fakeMediaPreProcessor = FakeMediaPreProcessor() + fakeAnalyticsService = FakeAnalyticsService() presenter = ConfigureRoomPresenter( dataStore = createRoomDataStore, matrixClient = fakeMatrixClient, mediaPickerProvider = fakePickerProvider, mediaPreProcessor = fakeMediaPreProcessor, + analyticsService = fakeAnalyticsService, ) mockkStatic(File::readBytes) diff --git a/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenterTests.kt b/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenterTests.kt index 0d0fdcce44..a2c1cf96a9 100644 --- a/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenterTests.kt +++ b/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenterTests.kt @@ -20,6 +20,7 @@ import app.cash.molecule.RecompositionClock import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat +import io.element.android.features.analytics.test.FakeAnalyticsService import io.element.android.features.createroom.impl.userlist.FakeUserListPresenter import io.element.android.features.createroom.impl.userlist.FakeUserListPresenterFactory import io.element.android.features.createroom.impl.userlist.UserListDataStore @@ -43,17 +44,20 @@ class CreateRoomRootPresenterTests { private lateinit var presenter: CreateRoomRootPresenter private lateinit var fakeUserListPresenter: FakeUserListPresenter private lateinit var fakeMatrixClient: FakeMatrixClient + private lateinit var fakeAnalyticsService: FakeAnalyticsService @Before fun setup() { fakeUserListPresenter = FakeUserListPresenter() fakeMatrixClient = FakeMatrixClient() + fakeAnalyticsService = FakeAnalyticsService() userRepository = FakeUserRepository() presenter = CreateRoomRootPresenter( presenterFactory = FakeUserListPresenterFactory(fakeUserListPresenter), userRepository = userRepository, userListDataStore = UserListDataStore(), - matrixClient = fakeMatrixClient + matrixClient = fakeMatrixClient, + analyticsService = fakeAnalyticsService, ) }