From 67587b836afc821e29b290fa50d0caff7f9211ba Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Fri, 23 Jun 2023 13:04:24 +0100 Subject: [PATCH] Keep screen analytics entirely in the node --- .../impl/configureroom/ConfigureRoomNode.kt | 11 ++++++++++- .../impl/configureroom/ConfigureRoomView.kt | 9 --------- .../createroom/impl/root/CreateRoomRootNode.kt | 9 ++++++++- .../createroom/impl/root/CreateRoomRootView.kt | 9 --------- 4 files changed, 18 insertions(+), 20 deletions(-) diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomNode.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomNode.kt index c313e8a992..b09863b205 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomNode.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomNode.kt @@ -18,12 +18,14 @@ package io.element.android.features.createroom.impl.configureroom import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import com.bumble.appyx.core.lifecycle.subscribe import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins import dagger.assisted.Assisted import dagger.assisted.AssistedInject +import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.anvilannotations.ContributesNode import io.element.android.features.createroom.impl.di.CreateRoomScope import io.element.android.libraries.matrix.api.core.RoomId @@ -37,6 +39,14 @@ class ConfigureRoomNode @AssistedInject constructor( private val analyticsService: AnalyticsService, ) : Node(buildContext, plugins = plugins) { + init { + lifecycle.subscribe( + onResume = { + analyticsService.screen(MobileScreen(screenName = MobileScreen.ScreenName.CreateRoom)) + } + ) + } + interface Callback : Plugin { fun onCreateRoomSuccess(roomId: RoomId) } @@ -53,7 +63,6 @@ class ConfigureRoomNode @AssistedInject constructor( modifier = modifier, onBackPressed = this::navigateUp, onRoomCreated = this::onRoomCreated, - analyticsService = analyticsService, ) } } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt index 48c8efc010..703fa268e2 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt @@ -48,7 +48,6 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.features.createroom.impl.R import io.element.android.features.createroom.impl.components.RoomPrivacyOption import io.element.android.libraries.architecture.Async @@ -66,7 +65,6 @@ import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.ui.components.AvatarActionBottomSheet import io.element.android.libraries.matrix.ui.components.SelectedUsersList import io.element.android.libraries.matrix.ui.components.UnsavedAvatar -import io.element.android.services.analytics.api.AnalyticsService import kotlinx.coroutines.launch import io.element.android.libraries.ui.strings.R as StringR @@ -77,14 +75,7 @@ fun ConfigureRoomView( modifier: Modifier = Modifier, onBackPressed: () -> Unit = {}, onRoomCreated: (RoomId) -> Unit = {}, - analyticsService: AnalyticsService? = null, ) { - analyticsService?.let { - LaunchedEffect(Unit) { - it.screen(MobileScreen(screenName = MobileScreen.ScreenName.CreateRoom)) - } - } - val coroutineScope = rememberCoroutineScope() val focusManager = LocalFocusManager.current val itemActionsBottomSheetState = rememberModalBottomSheetState( diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootNode.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootNode.kt index df6e6cc8a7..4089be0fa2 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootNode.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootNode.kt @@ -20,12 +20,14 @@ import android.content.Context import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext +import com.bumble.appyx.core.lifecycle.subscribe import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins import dagger.assisted.Assisted import dagger.assisted.AssistedInject +import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.androidutils.system.startSharePlainTextIntent import io.element.android.libraries.core.meta.BuildMeta @@ -62,6 +64,12 @@ class CreateRoomRootNode @AssistedInject constructor( } } + init { + lifecycle.subscribe( + onResume = { analyticsService.screen(MobileScreen(screenName = MobileScreen.ScreenName.StartChat)) } + ) + } + @Composable override fun View(modifier: Modifier) { val state = presenter.present() @@ -73,7 +81,6 @@ class CreateRoomRootNode @AssistedInject constructor( onNewRoomClicked = callback::onCreateNewRoom, onOpenDM = callback::onStartChatSuccess, onInviteFriendsClicked = { invitePeople(context) }, - analyticsService = analyticsService, ) } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt index a4b5b48511..05dd8d04fb 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt @@ -41,7 +41,6 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.features.createroom.impl.R import io.element.android.features.createroom.impl.components.UserListView import io.element.android.libraries.architecture.Async @@ -55,7 +54,6 @@ import io.element.android.libraries.designsystem.theme.components.IconButton import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.matrix.api.core.RoomId -import io.element.android.services.analytics.api.AnalyticsService import io.element.android.libraries.designsystem.R as DrawableR import io.element.android.libraries.ui.strings.R as StringR @@ -68,14 +66,7 @@ fun CreateRoomRootView( onNewRoomClicked: () -> Unit = {}, onOpenDM: (RoomId) -> Unit = {}, onInviteFriendsClicked: () -> Unit = {}, - analyticsService: AnalyticsService? = null, ) { - analyticsService?.let { - LaunchedEffect(Unit) { - it.screen(MobileScreen(screenName = MobileScreen.ScreenName.StartChat)) - } - } - if (state.startDmAction is Async.Success) { LaunchedEffect(state.startDmAction) { onOpenDM(state.startDmAction.state)