Keep screen analytics entirely in the node

This commit is contained in:
Chris Smith 2023-06-23 13:04:24 +01:00
parent f0f1a026f7
commit 67587b836a
4 changed files with 18 additions and 20 deletions

View file

@ -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,
)
}
}

View file

@ -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(

View file

@ -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,
)
}

View file

@ -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)