mirror of
https://github.com/anyproto/anytype-kotlin.git
synced 2025-06-08 05:47:05 +09:00
DROID-3226 Analytics | Enhancement | Add analytics for the new navigation flow (#2078)
This commit is contained in:
parent
a8e00b3f62
commit
cf36b0b1a1
9 changed files with 126 additions and 30 deletions
|
@ -191,6 +191,8 @@ object EventsDictionary {
|
|||
const val CLICK_ONBOARDING_TOOLTIP_TYPE_CLOSE = "Close"
|
||||
|
||||
// Sharing spaces
|
||||
|
||||
const val clickQuote = "ClickQuote"
|
||||
const val shareSpace = "ShareSpace"
|
||||
const val screenSettingsSpaceShare = "ScreenSettingsSpaceShare"
|
||||
const val screenStopShare = "ScreenStopShare"
|
||||
|
|
|
@ -91,11 +91,11 @@ fun HomeScreen(
|
|||
onHomeButtonClicked: () -> Unit,
|
||||
onCreateNewObjectClicked: () -> Unit,
|
||||
onCreateNewObjectLongClicked: () -> Unit,
|
||||
onShareButtonClicked: () -> Unit,
|
||||
onNavBarShareButtonClicked: () -> Unit,
|
||||
onObjectCheckboxClicked: (Id, Boolean) -> Unit,
|
||||
onSpaceWidgetClicked: () -> Unit,
|
||||
onMove: (List<WidgetView>, FromIndex, ToIndex) -> Unit,
|
||||
onSpaceShareIconClicked: (ObjectWrapper.SpaceView) -> Unit,
|
||||
onSpaceWidgetShareIconClicked: (ObjectWrapper.SpaceView) -> Unit,
|
||||
onSeeAllObjectsClicked: (WidgetView.Gallery) -> Unit,
|
||||
onCreateObjectInsideWidget: (Id) -> Unit,
|
||||
onCreateDataViewObject: (WidgetId, ViewId?) -> Unit
|
||||
|
@ -116,7 +116,7 @@ fun HomeScreen(
|
|||
onSpaceWidgetClicked = onSpaceWidgetClicked,
|
||||
onMove = onMove,
|
||||
onObjectCheckboxClicked = onObjectCheckboxClicked,
|
||||
onSpaceShareIconClicked = onSpaceShareIconClicked,
|
||||
onSpaceWidgetShareIconClicked = onSpaceWidgetShareIconClicked,
|
||||
onSeeAllObjectsClicked = onSeeAllObjectsClicked,
|
||||
onCreateWidget = onCreateWidget,
|
||||
onCreateObjectInsideWidget = onCreateObjectInsideWidget,
|
||||
|
@ -162,7 +162,7 @@ fun HomeScreen(
|
|||
searchClick = onSearchClicked,
|
||||
addDocClick = onCreateNewObjectClicked,
|
||||
addDocLongClick = onCreateNewObjectLongClicked,
|
||||
onShareButtonClicked = onShareButtonClicked,
|
||||
onShareButtonClicked = onNavBarShareButtonClicked,
|
||||
onHomeButtonClicked = onHomeButtonClicked
|
||||
)
|
||||
}
|
||||
|
@ -187,7 +187,7 @@ private fun WidgetList(
|
|||
onMove: (List<WidgetView>, FromIndex, ToIndex) -> Unit,
|
||||
onObjectCheckboxClicked: (Id, Boolean) -> Unit,
|
||||
onSpaceWidgetClicked: () -> Unit,
|
||||
onSpaceShareIconClicked: (ObjectWrapper.SpaceView) -> Unit,
|
||||
onSpaceWidgetShareIconClicked: (ObjectWrapper.SpaceView) -> Unit,
|
||||
onSeeAllObjectsClicked: (WidgetView.Gallery) -> Unit,
|
||||
onCreateWidget: () -> Unit,
|
||||
onCreateObjectInsideWidget: (Id) -> Unit,
|
||||
|
@ -229,7 +229,7 @@ private fun WidgetList(
|
|||
name = item.space.name.orEmpty(),
|
||||
icon = item.icon,
|
||||
spaceType = item.type,
|
||||
onSpaceShareIconClicked = { onSpaceShareIconClicked(item.space) },
|
||||
onSpaceShareIconClicked = { onSpaceWidgetShareIconClicked(item.space) },
|
||||
isShared = item.isShared,
|
||||
membersCount = item.membersCount
|
||||
)
|
||||
|
|
|
@ -112,7 +112,7 @@ class HomeScreenFragment : BaseComposeFragment(),
|
|||
) {
|
||||
HomeScreenToolbar(
|
||||
spaceIconView = view?.icon ?: SpaceIconView.Loading,
|
||||
onSpaceIconClicked = vm::onSpaceSettingsClicked,
|
||||
onSpaceIconClicked = vm::onSpaceWidgetClicked,
|
||||
membersCount = view?.membersCount ?: 0,
|
||||
name = view?.space?.name.orEmpty(),
|
||||
onBackButtonClicked = {
|
||||
|
@ -176,16 +176,16 @@ class HomeScreenFragment : BaseComposeFragment(),
|
|||
onClick = { vm.onCreateNewObjectLongClicked() }
|
||||
),
|
||||
onSpaceWidgetClicked = throttledClick(
|
||||
onClick = vm::onSpaceSettingsClicked
|
||||
onClick = vm::onSpaceWidgetClicked
|
||||
),
|
||||
onBundledWidgetClicked = vm::onBundledWidgetClicked,
|
||||
onMove = vm::onMove,
|
||||
onObjectCheckboxClicked = vm::onObjectCheckboxClicked,
|
||||
onSpaceShareIconClicked = vm::onSpaceShareIconClicked,
|
||||
onSpaceWidgetShareIconClicked = vm::onSpaceWidgetShareIconClicked,
|
||||
onSeeAllObjectsClicked = vm::onSeeAllObjectsClicked,
|
||||
onCreateObjectInsideWidget = vm::onCreateObjectInsideWidget,
|
||||
onCreateDataViewObject = vm::onCreateDataViewObject,
|
||||
onShareButtonClicked = vm::onSpaceShareIconClicked,
|
||||
onNavBarShareButtonClicked = vm::onNavBarShareIconClicked,
|
||||
navPanelState = vm.navPanelState.collectAsStateWithLifecycle().value,
|
||||
onHomeButtonClicked = vm::onHomeButtonClicked,
|
||||
)
|
||||
|
|
|
@ -265,6 +265,7 @@ import com.anytypeio.anytype.presentation.extension.getObjRelationsViews
|
|||
import com.anytypeio.anytype.presentation.extension.getRecommendedRelations
|
||||
import com.anytypeio.anytype.presentation.extension.getUrlForFileContent
|
||||
import com.anytypeio.anytype.presentation.navigation.NavPanelState
|
||||
import com.anytypeio.anytype.presentation.navigation.leftButtonClickAnalytics
|
||||
import com.anytypeio.anytype.presentation.objects.getCreateObjectParams
|
||||
import com.anytypeio.anytype.presentation.objects.getObjectTypeViewsForSBPage
|
||||
import com.anytypeio.anytype.presentation.objects.getProperType
|
||||
|
@ -297,6 +298,7 @@ import kotlinx.coroutines.flow.debounce
|
|||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
import kotlinx.coroutines.flow.filter
|
||||
import kotlinx.coroutines.flow.filterNotNull
|
||||
import kotlinx.coroutines.flow.firstOrNull
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
|
@ -1208,12 +1210,14 @@ class EditorViewModel(
|
|||
}
|
||||
|
||||
fun onShareButtonClicked() {
|
||||
proceedWithLeftButtonAnalytics()
|
||||
dispatch(
|
||||
Command.OpenShareScreen(vmParams.space)
|
||||
)
|
||||
}
|
||||
|
||||
fun onHomeButtonClicked() {
|
||||
proceedWithLeftButtonAnalytics()
|
||||
Timber.d("onHomeButtonClicked, ")
|
||||
if (stateData.value == ViewState.NotExist) {
|
||||
exitToSpaceHome()
|
||||
|
@ -1226,6 +1230,12 @@ class EditorViewModel(
|
|||
exitBack()
|
||||
}
|
||||
|
||||
private fun proceedWithLeftButtonAnalytics() {
|
||||
viewModelScope.launch {
|
||||
navPanelState.firstOrNull()?.leftButtonClickAnalytics(analytics)
|
||||
}
|
||||
}
|
||||
|
||||
private fun exitBack() {
|
||||
when (session.value) {
|
||||
Session.ERROR -> navigate(EventWrapper(AppNavigation.Command.Exit))
|
||||
|
|
|
@ -91,6 +91,7 @@ import com.anytypeio.anytype.presentation.home.Command.ChangeWidgetType.Companio
|
|||
import com.anytypeio.anytype.presentation.navigation.DeepLinkToObjectDelegate
|
||||
import com.anytypeio.anytype.presentation.navigation.NavPanelState
|
||||
import com.anytypeio.anytype.presentation.navigation.NavigationViewModel
|
||||
import com.anytypeio.anytype.presentation.navigation.leftButtonClickAnalytics
|
||||
import com.anytypeio.anytype.presentation.objects.getCreateObjectParams
|
||||
import com.anytypeio.anytype.presentation.search.Subscriptions
|
||||
import com.anytypeio.anytype.presentation.sets.prefillNewObjectDetails
|
||||
|
@ -1764,7 +1765,7 @@ class HomeScreenViewModel(
|
|||
}
|
||||
}
|
||||
|
||||
fun onSpaceShareIconClicked(spaceView: ObjectWrapper.SpaceView) {
|
||||
fun onSpaceWidgetShareIconClicked(spaceView: ObjectWrapper.SpaceView) {
|
||||
viewModelScope.launch {
|
||||
val space = spaceView.targetSpaceId
|
||||
if (space != null) {
|
||||
|
@ -1775,19 +1776,20 @@ class HomeScreenViewModel(
|
|||
}
|
||||
}
|
||||
|
||||
fun onSpaceShareIconClicked() {
|
||||
fun onNavBarShareIconClicked() {
|
||||
viewModelScope.launch {
|
||||
commands.emit(
|
||||
Command.ShareSpace(SpaceId(spaceManager.get()))
|
||||
)
|
||||
navPanelState.value.leftButtonClickAnalytics(analytics)
|
||||
}
|
||||
viewModelScope.launch {
|
||||
commands.emit(Command.ShareSpace(SpaceId(spaceManager.get())))
|
||||
}
|
||||
}
|
||||
|
||||
fun onHomeButtonClicked() {
|
||||
// Do nothing
|
||||
// Do nothing, as home button is not visible on space home screen.
|
||||
}
|
||||
|
||||
fun onSpaceSettingsClicked() {
|
||||
fun onSpaceWidgetClicked() {
|
||||
viewModelScope.launch {
|
||||
commands.emit(
|
||||
Command.OpenSpaceSettings(
|
||||
|
@ -1825,10 +1827,6 @@ class HomeScreenViewModel(
|
|||
}
|
||||
}
|
||||
|
||||
fun onBackLongClicked() {
|
||||
navigate(destination = Navigation.OpenSpaceSwitcher)
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
super.onCleared()
|
||||
Timber.d("onCleared")
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
package com.anytypeio.anytype.presentation.navigation
|
||||
|
||||
import com.anytypeio.anytype.analytics.base.Analytics
|
||||
import com.anytypeio.anytype.analytics.base.EventsDictionary
|
||||
import com.anytypeio.anytype.analytics.base.EventsPropertiesKey
|
||||
import com.anytypeio.anytype.analytics.base.sendEvent
|
||||
import com.anytypeio.anytype.analytics.props.Props
|
||||
import com.anytypeio.anytype.core_models.multiplayer.SpaceMemberPermissions
|
||||
|
||||
sealed class NavPanelState {
|
||||
|
@ -68,4 +73,46 @@ sealed class NavPanelState {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun NavPanelState.leftButtonClickAnalytics(analytics: Analytics) {
|
||||
when (val state = this) {
|
||||
is NavPanelState.Default -> {
|
||||
when (state.leftButtonState) {
|
||||
is NavPanelState.LeftButtonState.AddMembers -> {
|
||||
analytics.sendEvent(
|
||||
eventName = EventsDictionary.screenSettingsSpaceShare,
|
||||
props = Props(
|
||||
mapOf(
|
||||
EventsPropertiesKey.route to EventsDictionary.Routes.navigation
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
is NavPanelState.LeftButtonState.Comment -> {
|
||||
analytics.sendEvent(eventName = EventsDictionary.clickQuote)
|
||||
}
|
||||
|
||||
NavPanelState.LeftButtonState.Home -> {
|
||||
// Do nothing.
|
||||
}
|
||||
|
||||
NavPanelState.LeftButtonState.ViewMembers -> {
|
||||
analytics.sendEvent(
|
||||
eventName = EventsDictionary.screenSettingsSpaceMembers,
|
||||
props = Props(
|
||||
mapOf(
|
||||
EventsPropertiesKey.route to EventsDictionary.Routes.navigation
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NavPanelState.Init -> {
|
||||
// Do nothing.
|
||||
}
|
||||
}
|
||||
}
|
|
@ -78,6 +78,7 @@ import com.anytypeio.anytype.core_models.SupportedLayouts
|
|||
import com.anytypeio.anytype.core_models.TimeInMillis
|
||||
import com.anytypeio.anytype.presentation.extension.getObject
|
||||
import com.anytypeio.anytype.presentation.navigation.NavPanelState
|
||||
import com.anytypeio.anytype.presentation.navigation.leftButtonClickAnalytics
|
||||
import com.anytypeio.anytype.presentation.objects.getCreateObjectParams
|
||||
import com.anytypeio.anytype.presentation.objects.isCreateObjectAllowed
|
||||
import com.anytypeio.anytype.presentation.objects.isTemplatesAllowed
|
||||
|
@ -126,6 +127,7 @@ import kotlinx.coroutines.flow.distinctUntilChanged
|
|||
import kotlinx.coroutines.flow.emptyFlow
|
||||
import kotlinx.coroutines.flow.filterIsInstance
|
||||
import kotlinx.coroutines.flow.filterNotNull
|
||||
import kotlinx.coroutines.flow.firstOrNull
|
||||
import kotlinx.coroutines.flow.flatMapLatest
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.flow.mapLatest
|
||||
|
@ -1619,6 +1621,9 @@ class ObjectSetViewModel(
|
|||
}
|
||||
|
||||
fun onHomeButtonClicked() {
|
||||
viewModelScope.launch {
|
||||
navPanelState.firstOrNull()?.leftButtonClickAnalytics(analytics)
|
||||
}
|
||||
viewModelScope.launch {
|
||||
dispatch(AppNavigation.Command.ExitToSpaceHome)
|
||||
}
|
||||
|
@ -1626,11 +1631,10 @@ class ObjectSetViewModel(
|
|||
|
||||
fun onShareButtonClicked() {
|
||||
viewModelScope.launch {
|
||||
dispatch(
|
||||
AppNavigation.Command.OpenShareScreen(
|
||||
vmParams.space
|
||||
)
|
||||
)
|
||||
navPanelState.firstOrNull()?.leftButtonClickAnalytics(analytics)
|
||||
}
|
||||
viewModelScope.launch {
|
||||
dispatch(AppNavigation.Command.OpenShareScreen(vmParams.space))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,9 @@ import com.anytypeio.anytype.core_models.Block
|
|||
import com.anytypeio.anytype.core_models.Filepath
|
||||
import com.anytypeio.anytype.core_models.Id
|
||||
import com.anytypeio.anytype.core_models.ObjectWrapper
|
||||
import com.anytypeio.anytype.core_models.PRIVATE_SPACE_TYPE
|
||||
import com.anytypeio.anytype.core_models.Relations
|
||||
import com.anytypeio.anytype.core_models.SHARED_SPACE_TYPE
|
||||
import com.anytypeio.anytype.core_models.SpaceType
|
||||
import com.anytypeio.anytype.core_models.UNKNOWN_SPACE_TYPE
|
||||
import com.anytypeio.anytype.core_models.asSpaceType
|
||||
|
@ -289,6 +291,38 @@ class SpaceSettingsViewModel(
|
|||
}
|
||||
|
||||
fun onSharePrivateSpaceClicked() {
|
||||
viewModelScope.launch {
|
||||
val data = spaceViewState.value
|
||||
when(data) {
|
||||
is ViewState.Success -> {
|
||||
when(data.data.spaceType) {
|
||||
PRIVATE_SPACE_TYPE -> {
|
||||
analytics.sendEvent(
|
||||
eventName = EventsDictionary.screenSettingsSpaceShare,
|
||||
props = Props(
|
||||
mapOf(
|
||||
EventsPropertiesKey.route to EventsDictionary.Routes.settings
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
SHARED_SPACE_TYPE -> {
|
||||
analytics.sendEvent(
|
||||
eventName = EventsDictionary.screenSettingsSpaceMembers,
|
||||
props = Props(
|
||||
mapOf(
|
||||
EventsPropertiesKey.route to EventsDictionary.Routes.settings
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
// Do nothing.
|
||||
}
|
||||
}
|
||||
}
|
||||
viewModelScope.launch {
|
||||
val data = spaceViewState.value
|
||||
if (data is ViewState.Success) {
|
||||
|
|
|
@ -50,6 +50,7 @@ import com.anytypeio.anytype.presentation.home.OpenObjectNavigation
|
|||
import com.anytypeio.anytype.presentation.home.navigation
|
||||
import com.anytypeio.anytype.presentation.navigation.DefaultObjectView
|
||||
import com.anytypeio.anytype.presentation.navigation.NavPanelState
|
||||
import com.anytypeio.anytype.presentation.navigation.leftButtonClickAnalytics
|
||||
import com.anytypeio.anytype.presentation.objects.ObjectAction
|
||||
import com.anytypeio.anytype.presentation.objects.getCreateObjectParams
|
||||
import com.anytypeio.anytype.presentation.objects.mapFileObjectToView
|
||||
|
@ -74,6 +75,7 @@ import kotlinx.coroutines.flow.catch
|
|||
import kotlinx.coroutines.flow.combine
|
||||
import kotlinx.coroutines.flow.debounce
|
||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
import kotlinx.coroutines.flow.firstOrNull
|
||||
import kotlinx.coroutines.flow.flatMapLatest
|
||||
import kotlinx.coroutines.flow.flowOn
|
||||
import kotlinx.coroutines.flow.map
|
||||
|
@ -874,13 +876,12 @@ class CollectionViewModel(
|
|||
}
|
||||
|
||||
fun onShareButtonClicked() {
|
||||
viewModelScope.launch {
|
||||
navPanelState.value.leftButtonClickAnalytics(analytics)
|
||||
}
|
||||
launch { commands.emit(OpenShareScreen(vmParams.spaceId)) }
|
||||
}
|
||||
|
||||
fun onBackLongClicked() {
|
||||
launch { commands.emit(ExitToSpaceWidgets) }
|
||||
}
|
||||
|
||||
fun onSearchClicked(space: Id) {
|
||||
viewModelScope.sendEvent(
|
||||
analytics = analytics,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue