From 5f642f6b9986baf3fed6fd6f9ef8df28d4316795 Mon Sep 17 00:00:00 2001 From: Evgenii Kozlov Date: Thu, 9 Nov 2023 15:56:12 +0100 Subject: [PATCH] DROID-1835 Analytics | Added space-deletion events (#528) --- .../analytics/base/EventsDictionary.kt | 4 ++ .../OnboardingWhatIsRecoveryPhraseScreen.kt | 6 ++- .../settings/space/SpaceSettingsFragment.kt | 6 ++- .../anytype/ui/spaces/DeleteSpaceWarning.kt | 6 ++- .../spaces/SpaceSettingsViewModel.kt | 41 +++++++++++++++++++ 5 files changed, 60 insertions(+), 3 deletions(-) diff --git a/analytics/src/main/java/com/anytypeio/anytype/analytics/base/EventsDictionary.kt b/analytics/src/main/java/com/anytypeio/anytype/analytics/base/EventsDictionary.kt index 358373732e..a042b4e83b 100644 --- a/analytics/src/main/java/com/anytypeio/anytype/analytics/base/EventsDictionary.kt +++ b/analytics/src/main/java/com/anytypeio/anytype/analytics/base/EventsDictionary.kt @@ -20,6 +20,9 @@ object EventsDictionary { // Settings events const val screenSettingSpacesSpaceIndex = "ScreenSettingsSpaceIndex" + const val clickDeleteSpace = "ClickDeleteSpace" + const val clickDeleteSpaceWarning = "ClickDeleteSpaceWarning" + const val deleteSpace = "DeleteSpace" const val wallpaperSet = "SettingsWallpaperSet" @@ -207,6 +210,7 @@ object EventsDictionary { const val objPowerTool = "Powertool" const val objTurnInto = "TurnInto" const val screenSettings = "ScreenSettings" + const val settings = "Settings" const val screenDeletion = "ScreenDeletion" const val navigation = "Navigation" } diff --git a/app/src/main/java/com/anytypeio/anytype/ui/onboarding/screens/signup/OnboardingWhatIsRecoveryPhraseScreen.kt b/app/src/main/java/com/anytypeio/anytype/ui/onboarding/screens/signup/OnboardingWhatIsRecoveryPhraseScreen.kt index 89070a0696..74e670172b 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/onboarding/screens/signup/OnboardingWhatIsRecoveryPhraseScreen.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/onboarding/screens/signup/OnboardingWhatIsRecoveryPhraseScreen.kt @@ -12,7 +12,9 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.wrapContentHeight +import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -47,7 +49,9 @@ fun PreviewWhatIsRecoveryPhraseScreen() { @Composable fun WhatIsRecoveryPhraseScreen() { Column( - modifier = Modifier.padding(horizontal = 24.dp) + modifier = Modifier + .padding(horizontal = 24.dp) + .verticalScroll(rememberScrollState()) ) { Dragger( modifier = Modifier diff --git a/app/src/main/java/com/anytypeio/anytype/ui/settings/space/SpaceSettingsFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/settings/space/SpaceSettingsFragment.kt index 6c34c994a0..9ef0c0069c 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/settings/space/SpaceSettingsFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/settings/space/SpaceSettingsFragment.kt @@ -82,10 +82,14 @@ class SpaceSettingsFragment : BaseBottomSheetComposeFragment() { spaceData = vm.spaceViewState.collectAsStateWithLifecycle().value, onDeleteSpaceClicked = throttledClick( onClick = { + vm.onDeleteSpaceClicked() val dialog = DeleteSpaceWarning.new() dialog.onDeletionAccepted = { dialog.dismiss() - vm.onDeleteSpaceClicked() + vm.onDeleteSpaceAcceptedClicked() + } + dialog.onDeletionCancelled = { + vm.onDeleteSpaceWarningCancelled() } dialog.show(childFragmentManager, null) } diff --git a/app/src/main/java/com/anytypeio/anytype/ui/spaces/DeleteSpaceWarning.kt b/app/src/main/java/com/anytypeio/anytype/ui/spaces/DeleteSpaceWarning.kt index 3e37383bfb..5151fec39c 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/spaces/DeleteSpaceWarning.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/spaces/DeleteSpaceWarning.kt @@ -20,6 +20,7 @@ class DeleteSpaceWarning : BaseBottomSheetComposeFragment() { private val name: String get() = arg(ARG_NAME) var onDeletionAccepted: () -> Unit = {} + var onDeletionCancelled: () -> Unit = {} override fun onCreateView( inflater: LayoutInflater, @@ -35,7 +36,10 @@ class DeleteSpaceWarning : BaseBottomSheetComposeFragment() { cancelButtonText = stringResource(R.string.back), title = stringResource(R.string.delete_space_title), subtitle = stringResource(R.string.delete_space_subtitle), - onNegativeClick = { dismiss() }, + onNegativeClick = { + onDeletionCancelled() + dismiss() + }, onPositiveClick = { onDeletionAccepted() }, isInProgress = false ) diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/spaces/SpaceSettingsViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/spaces/SpaceSettingsViewModel.kt index 41ef05857f..201b8f128b 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/spaces/SpaceSettingsViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/spaces/SpaceSettingsViewModel.kt @@ -4,6 +4,10 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope 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.Filepath import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.PERSONAL_SPACE_TYPE @@ -154,6 +158,42 @@ class SpaceSettingsViewModel( } fun onDeleteSpaceClicked() { + viewModelScope.launch { + analytics.sendEvent( + eventName = EventsDictionary.clickDeleteSpace, + props = Props(mapOf(EventsPropertiesKey.route to EventsDictionary.Routes.settings)) + ) + } + } + + fun onDeleteSpaceWarningCancelled() { + viewModelScope.launch { + analytics.sendEvent( + eventName = EventsDictionary.clickDeleteSpaceWarning, + props = Props( + mapOf( + EventsPropertiesKey.type to "Cancel" + ) + ) + ) + } + } + + fun onDeleteSpaceAcceptedClicked() { + viewModelScope.launch { + analytics.sendEvent( + eventName = EventsDictionary.clickDeleteSpaceWarning, + props = Props( + mapOf( + EventsPropertiesKey.type to "Delete" + ) + ) + ) + } + proceedWithSpaceDeletion() + } + + private fun proceedWithSpaceDeletion() { val state = spaceViewState.value if (state is ViewState.Success) { val space = state.data.spaceId @@ -167,6 +207,7 @@ class SpaceSettingsViewModel( viewModelScope.launch { deleteSpace.async(params = SpaceId(space)).fold( onSuccess = { + analytics.sendEvent(eventName = EventsDictionary.deleteSpace) fallbackToPersonalSpaceAfterDeletion(personalSpaceId) }, onFailure = {