From 9b57a8724208f1a2977c27552be3e4d94f2b9adc Mon Sep 17 00:00:00 2001 From: Fabian DEVEL <fabian.devel@infomaniak.com> Date: Thu, 20 Mar 2025 09:40:50 +0100 Subject: [PATCH 1/9] feat(Matomo): Track 3 principal screens --- .../swisstransfer/ui/MatomoSwissTransfer.kt | 8 ++++++++ .../ui/navigation/NavigationDestination.kt | 20 +++++++++++++------ .../ui/screen/main/MainScreen.kt | 4 ++++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/MatomoSwissTransfer.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/MatomoSwissTransfer.kt index 241ac01e6..a99c0adb4 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/MatomoSwissTransfer.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/MatomoSwissTransfer.kt @@ -47,4 +47,12 @@ object MatomoSwissTransfer : Matomo { } } } + + fun trackScreen(title: String) { + trackScreen(path = "/$title", title = title) + } + + fun trackTransferTypeEvent(name: String) { + trackEvent("transferType", name) + } } diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/navigation/NavigationDestination.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/navigation/NavigationDestination.kt index 1c60f2a62..bc6aa831e 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/navigation/NavigationDestination.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/navigation/NavigationDestination.kt @@ -26,6 +26,7 @@ import androidx.navigation.navDeepLink import androidx.navigation.toRoute import com.infomaniak.core.sentry.SentryLog import com.infomaniak.swisstransfer.BuildConfig +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer import com.infomaniak.swisstransfer.ui.navigation.MainNavigation.SettingsDestination.getDeeplinkDirection import com.infomaniak.swisstransfer.ui.screen.main.DeeplinkViewModel.Companion.SENT_DEEPLINK_SUFFIX import com.infomaniak.swisstransfer.ui.screen.newtransfer.pickfiles.components.TransferTypeUi @@ -35,7 +36,7 @@ import kotlinx.serialization.Serializable * Sealed class representing the navigation arguments for the main navigation flow. */ @Serializable -sealed class MainNavigation : NavigationDestination() { +sealed class MainNavigation(override val matomoValue: String? = null) : NavigationDestination() { protected inline fun <reified T : MainNavigation> NavGraphBuilder.getDeeplinkDirection( noinline content: @Composable (AnimatedContentScope.(NavBackStackEntry) -> Unit), @@ -50,7 +51,7 @@ sealed class MainNavigation : NavigationDestination() { // If it has to be renamed, don't forget to rename `*DestinationName` in the companion object too. @Serializable - data class SentDestination(val transferUuid: String? = null) : MainNavigation() { + data class SentDestination(val transferUuid: String? = null) : MainNavigation("SentView") { companion object { fun NavGraphBuilder.sentDestination(content: @Composable (AnimatedContentScope.(NavBackStackEntry) -> Unit)) { @@ -61,7 +62,7 @@ sealed class MainNavigation : NavigationDestination() { // If it has to be renamed, don't forget to rename `*DestinationName` in the companion object too. @Serializable - data class ReceivedDestination(val transferUuid: String? = null) : MainNavigation() { + data class ReceivedDestination(val transferUuid: String? = null) : MainNavigation("ReceivedView") { companion object { fun NavGraphBuilder.receivedDestination(content: @Composable (AnimatedContentScope.(NavBackStackEntry) -> Unit)) { @@ -71,7 +72,7 @@ sealed class MainNavigation : NavigationDestination() { } @Serializable - data object SettingsDestination : MainNavigation() + data object SettingsDestination : MainNavigation("SettingsView") companion object { private val TAG = MainNavigation::class.java.simpleName @@ -110,7 +111,7 @@ sealed class MainNavigation : NavigationDestination() { * Sealed class representing the navigation arguments for the new transfer flow. */ @Serializable -sealed class NewTransferNavigation : NavigationDestination() { +sealed class NewTransferNavigation(override val matomoValue: String? = null) : NavigationDestination() { @Serializable data object PickFilesDestination : NewTransferNavigation() @@ -138,4 +139,11 @@ sealed class NewTransferNavigation : NavigationDestination() { * Sealed class representing navigation arguments with a title resource. */ @Serializable -sealed class NavigationDestination +sealed class NavigationDestination { + + protected abstract val matomoValue: String? + + fun trackScreen() { + matomoValue?.let { MatomoSwissTransfer.trackScreen(title = it) } + } +} diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/MainScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/MainScreen.kt index 12a4ae24b..2657ac1ec 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/MainScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/MainScreen.kt @@ -39,6 +39,10 @@ fun MainScreen(deeplinkTransferDirection: TransferDirection? = null) { derivedStateOf { navBackStackEntry?.toMainDestination() ?: MainNavigation.startDestination } } + LaunchedEffect(currentDestination) { + currentDestination.trackScreen() + } + MainScaffold( navController = navController, currentDestination = currentDestination, From ca6e7ec7517abc9d791f4f05ae2a2eb497596e98 Mon Sep 17 00:00:00 2001 From: Fabian DEVEL <fabian.devel@infomaniak.com> Date: Thu, 20 Mar 2025 09:42:46 +0100 Subject: [PATCH 2/9] feat(Matomo): Add tracking on the transfer type --- .../ui/screen/newtransfer/pickfiles/PickFilesScreen.kt | 6 +++++- .../newtransfer/pickfiles/components/TransferTypeButtons.kt | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/PickFilesScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/PickFilesScreen.kt index f3b7f9346..d9168ff7e 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/PickFilesScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/PickFilesScreen.kt @@ -45,6 +45,7 @@ import com.google.accompanist.permissions.rememberPermissionState import com.infomaniak.core.mapSync import com.infomaniak.multiplatform_swisstransfer.common.interfaces.ui.FileUi import com.infomaniak.swisstransfer.R +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer import com.infomaniak.swisstransfer.ui.components.* import com.infomaniak.swisstransfer.ui.previewparameter.FileUiListPreviewParameter import com.infomaniak.swisstransfer.ui.screen.main.settings.DownloadLimitOption @@ -154,7 +155,10 @@ fun PickFilesScreen( transferMessageCallbacks = pickFilesViewModel.transferMessageCallbacks, selectedTransferType = GetSetCallbacks( get = { selectedTransferType }, - set = pickFilesViewModel::selectTransferType, + set = { type -> + MatomoSwissTransfer.trackTransferTypeEvent(type.matomoValue) + pickFilesViewModel.selectTransferType(type) + }, ), transferOptionsCallbacks = transferOptionsCallbacks, pickFiles = ::pickFiles, diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/components/TransferTypeButtons.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/components/TransferTypeButtons.kt index 685392694..66fcf5a91 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/components/TransferTypeButtons.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/components/TransferTypeButtons.kt @@ -72,6 +72,7 @@ enum class TransferTypeUi( @StringRes val titleRes: Int, @StringRes @PluralsRes val descriptionRes: Int?, val dbValue: TransferType, + val matomoValue: String, ) { QrCode( buttonIcon = AppIcons.QrCode, @@ -79,6 +80,7 @@ enum class TransferTypeUi( titleRes = R.string.uploadSuccessQrTitle, descriptionRes = null, dbValue = TransferType.QR_CODE, + matomoValue = "qrCode", ), Mail( buttonIcon = AppIcons.Envelope, @@ -86,6 +88,7 @@ enum class TransferTypeUi( titleRes = R.string.uploadSuccessEmailTitle, descriptionRes = R.plurals.uploadSuccessEmailDescription, dbValue = TransferType.MAIL, + matomoValue = "email", ), Link( buttonIcon = AppIcons.Chain, @@ -93,6 +96,7 @@ enum class TransferTypeUi( titleRes = R.string.uploadSuccessLinkTitle, descriptionRes = R.string.uploadSuccessLinkDescription, dbValue = TransferType.LINK, + matomoValue = "link", ), Proximity( buttonIcon = AppIcons.WifiWave, @@ -100,6 +104,7 @@ enum class TransferTypeUi( titleRes = R.string.uploadSuccessLinkTitle, descriptionRes = R.string.uploadSuccessLinkDescription, dbValue = TransferType.PROXIMITY, + matomoValue = "proximity", ); companion object { From a2e7c135ca328ddb0f5d704142260695556f86d8 Mon Sep 17 00:00:00 2001 From: Fabian DEVEL <fabian.devel@infomaniak.com> Date: Thu, 20 Mar 2025 09:45:26 +0100 Subject: [PATCH 3/9] feat(Matomo): Add tracking on TransferDetailsView --- .../ui/screen/main/transfers/TransfersScreenWrapper.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/transfers/TransfersScreenWrapper.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/transfers/TransfersScreenWrapper.kt index 6e7f7be5e..fa274a7b2 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/transfers/TransfersScreenWrapper.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/transfers/TransfersScreenWrapper.kt @@ -33,6 +33,7 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.infomaniak.multiplatform_swisstransfer.common.models.TransferDirection import com.infomaniak.swisstransfer.R +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer import com.infomaniak.swisstransfer.ui.components.* import com.infomaniak.swisstransfer.ui.images.AppImages.AppIllus import com.infomaniak.swisstransfer.ui.images.illus.mascotWithMagnifyingGlass.MascotWithMagnifyingGlass @@ -140,6 +141,7 @@ private fun ThreePaneScaffoldNavigator<DestinationContent>.navigateToDetails( direction: TransferDirection, transferUuid: String, ) { + MatomoSwissTransfer.trackScreen("${direction.matomoValue}TransferDetailsView") selectItem(context, windowAdaptiveInfo, DestinationContent.RootLevel(direction, transferUuid)) } From dbc8525994a61e9234de235f68f49675c48e1ae7 Mon Sep 17 00:00:00 2001 From: Fabian DEVEL <fabian.devel@infomaniak.com> Date: Thu, 20 Mar 2025 11:34:16 +0100 Subject: [PATCH 4/9] feat(Matomo): Add tracking on Upload sub views --- .../ui/navigation/NavigationDestination.kt | 17 +++++++---------- .../NewTransferFilesDetailsScreen.kt | 2 ++ .../newtransfer/pickfiles/PickFilesScreen.kt | 1 + .../newtransfer/upload/UploadFailureScreen.kt | 5 +++++ .../newtransfer/upload/UploadProgressScreen.kt | 4 ++++ .../newtransfer/upload/UploadRetryScreen.kt | 8 ++++---- .../newtransfer/upload/UploadSuccessScreen.kt | 2 ++ .../validateemail/ValidateUserEmailScreen.kt | 4 ++++ 8 files changed, 29 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/navigation/NavigationDestination.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/navigation/NavigationDestination.kt index bc6aa831e..4d0a37fde 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/navigation/NavigationDestination.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/navigation/NavigationDestination.kt @@ -36,7 +36,11 @@ import kotlinx.serialization.Serializable * Sealed class representing the navigation arguments for the main navigation flow. */ @Serializable -sealed class MainNavigation(override val matomoValue: String? = null) : NavigationDestination() { +sealed class MainNavigation(private val matomoValue: String? = null) : NavigationDestination() { + + fun trackScreen() { + matomoValue?.let { MatomoSwissTransfer.trackScreen(title = it) } + } protected inline fun <reified T : MainNavigation> NavGraphBuilder.getDeeplinkDirection( noinline content: @Composable (AnimatedContentScope.(NavBackStackEntry) -> Unit), @@ -111,7 +115,7 @@ sealed class MainNavigation(override val matomoValue: String? = null) : Navigati * Sealed class representing the navigation arguments for the new transfer flow. */ @Serializable -sealed class NewTransferNavigation(override val matomoValue: String? = null) : NavigationDestination() { +sealed class NewTransferNavigation : NavigationDestination() { @Serializable data object PickFilesDestination : NewTransferNavigation() @@ -139,11 +143,4 @@ sealed class NewTransferNavigation(override val matomoValue: String? = null) : N * Sealed class representing navigation arguments with a title resource. */ @Serializable -sealed class NavigationDestination { - - protected abstract val matomoValue: String? - - fun trackScreen() { - matomoValue?.let { MatomoSwissTransfer.trackScreen(title = it) } - } -} +sealed class NavigationDestination diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/filesdetails/NewTransferFilesDetailsScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/filesdetails/NewTransferFilesDetailsScreen.kt index e7ccd14f2..098c824a9 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/filesdetails/NewTransferFilesDetailsScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/filesdetails/NewTransferFilesDetailsScreen.kt @@ -27,6 +27,7 @@ import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.infomaniak.multiplatform_swisstransfer.common.interfaces.ui.FileUi +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer import com.infomaniak.swisstransfer.ui.components.SinglePaneScaffold import com.infomaniak.swisstransfer.ui.components.SwissTransferTopAppBar import com.infomaniak.swisstransfer.ui.components.TopAppBarButtons @@ -48,6 +49,7 @@ fun NewTransferFilesDetailsScreen( ) { val uiState by pickFilesViewModel.filesDetailsUiState.collectAsStateWithLifecycle() + LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen("NewTransferFileListView") } LaunchedEffect(uiState) { if (uiState is FilesDetailsUiState.EmptyFiles) navigateBack() } diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/PickFilesScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/PickFilesScreen.kt index d9168ff7e..6c08a9de1 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/PickFilesScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/PickFilesScreen.kt @@ -115,6 +115,7 @@ fun PickFilesScreen( HandleStartupFilePick(pickFilesViewModel.openFilePickerEvent, ::pickFiles) LaunchedEffect(Unit) { + MatomoSwissTransfer.trackScreen("NewTransferView") UploadForegroundService.uploadStateFlow.mapSync { it != null }.collect { isUploadOngoing -> if (isUploadOngoing) { navigateToUploadProgress() diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadFailureScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadFailureScreen.kt index 5e4e8b444..0af2804df 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadFailureScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadFailureScreen.kt @@ -22,12 +22,14 @@ import androidx.compose.foundation.Image import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Surface import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.State import androidx.compose.runtime.getValue import androidx.compose.ui.res.stringResource import com.infomaniak.core.compose.basics.CallableState import com.infomaniak.swisstransfer.BuildConfig import com.infomaniak.swisstransfer.R +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer import com.infomaniak.swisstransfer.ui.components.* import com.infomaniak.swisstransfer.ui.images.AppImages.AppIllus import com.infomaniak.swisstransfer.ui.images.illus.appIntegrity.GhostScrollCrossPointing @@ -41,6 +43,9 @@ fun UploadFailureScreen( failureState: State<UploadState.Failure>, cancel: CallableState<Unit>, ) { + + LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen("UploadErrorView") } + val failure: UploadState.Failure by failureState when (failure) { UploadState.Failure.AppIntegrityIssue -> UploadFailureScreen( diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadProgressScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadProgressScreen.kt index 92f91e797..d2a8e64a2 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadProgressScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadProgressScreen.kt @@ -28,6 +28,7 @@ import androidx.compose.ui.draw.alpha import androidx.compose.ui.res.stringResource import com.infomaniak.core.R import com.infomaniak.swisstransfer.R.string +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer import com.infomaniak.swisstransfer.ui.components.BottomStickyButtonScaffold import com.infomaniak.swisstransfer.ui.components.BrandTopAppBar import com.infomaniak.swisstransfer.ui.components.LargeButton @@ -46,6 +47,9 @@ fun UploadOngoingScreen( adScreenType: UploadProgressAdType, onCancelClick: () -> Unit, ) { + + LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen("UploadProgressView") } + val progress by progressState BottomStickyButtonScaffold( topBar = { BrandTopAppBar() }, diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadRetryScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadRetryScreen.kt index ff7977e23..f8cb317ef 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadRetryScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadRetryScreen.kt @@ -19,13 +19,11 @@ package com.infomaniak.swisstransfer.ui.screen.newtransfer.upload import androidx.compose.foundation.Image import androidx.compose.material3.Surface -import androidx.compose.runtime.Composable -import androidx.compose.runtime.State -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.* import androidx.compose.ui.res.stringResource import com.infomaniak.core.R import com.infomaniak.core.compose.basics.CallableState +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer import com.infomaniak.swisstransfer.ui.components.* import com.infomaniak.swisstransfer.ui.images.AppImages.AppIllus import com.infomaniak.swisstransfer.ui.images.illus.uploadError.GhostMagnifyingGlassQuestionMark @@ -41,6 +39,8 @@ fun UploadRetryScreen( retry: CallableState<Unit>, edit: CallableState<Unit>, ) { + LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen("UploadRetryView") } + when (val error: UploadState.Retry = errorState.value) { is UploadState.Retry.EmailValidationRequired -> { ValidateUserEmailScreen( diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadSuccessScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadSuccessScreen.kt index f15926932..d53403b17 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadSuccessScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadSuccessScreen.kt @@ -23,6 +23,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.platform.LocalContext import androidx.datastore.preferences.core.edit +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer import com.infomaniak.swisstransfer.ui.screen.newtransfer.pickfiles.components.TransferTypeUi import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme import com.infomaniak.swisstransfer.ui.utils.PreviewAllWindows @@ -42,6 +43,7 @@ fun UploadSuccessScreen( // Now that we are done redirecting, we clear the value stored. LaunchedEffect(Unit) { context.lastTransferDataStore.edit { it.clear() } + MatomoSwissTransfer.trackScreen("UploadSuccessView") } BackHandler(onBack = dismissCompleteUpload) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/validateemail/ValidateUserEmailScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/validateemail/ValidateUserEmailScreen.kt index 40375d00e..cdff24cfc 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/validateemail/ValidateUserEmailScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/validateemail/ValidateUserEmailScreen.kt @@ -39,6 +39,7 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.infomaniak.core.sentry.SentryLog import com.infomaniak.swisstransfer.R +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer import com.infomaniak.swisstransfer.ui.components.BottomStickyButtonScaffold import com.infomaniak.swisstransfer.ui.components.LargeButton import com.infomaniak.swisstransfer.ui.components.SwissTransferTopAppBar @@ -64,6 +65,7 @@ fun ValidateUserEmailScreen( state: UploadState.Retry.EmailValidationRequired, validateUserEmailViewModel: ValidateUserEmailViewModel = hiltViewModel(), ) { + val emailToValidate = state.info.authorEmail val uiState by validateUserEmailViewModel.uiState.collectAsStateWithLifecycle() val isLoading by remember { derivedStateOf { uiState == ValidateEmailUiState.Loading } } @@ -73,6 +75,8 @@ fun ValidateUserEmailScreen( val context = LocalContext.current val scope = rememberCoroutineScope() + LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen("VerifyMailView") } + BackHandler { editTransfer() } HandleUnknownValidationError({ uiState }, snackbarHostState) From d6b624e180a244410e9b2e70810ec18de16d7111 Mon Sep 17 00:00:00 2001 From: Fabian DEVEL <fabian.devel@infomaniak.com> Date: Thu, 20 Mar 2025 13:34:02 +0100 Subject: [PATCH 5/9] feat(Matomo): Track the same way retry and failure screens to be iso with iOS --- .../com/infomaniak/swisstransfer/ui/MatomoSwissTransfer.kt | 2 ++ .../ui/screen/newtransfer/upload/UploadFailureScreen.kt | 2 +- .../ui/screen/newtransfer/upload/UploadRetryScreen.kt | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/MatomoSwissTransfer.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/MatomoSwissTransfer.kt index a99c0adb4..443c54ada 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/MatomoSwissTransfer.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/MatomoSwissTransfer.kt @@ -30,6 +30,8 @@ import splitties.init.appCtx object MatomoSwissTransfer : Matomo { + const val UPLOAD_ERROR_SCREEN_TITLE = "UploadErrorView" + private val scope = CoroutineScope(Dispatchers.Default) override val tracker: Tracker = with(appCtx) { diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadFailureScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadFailureScreen.kt index 0af2804df..c2044c516 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadFailureScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadFailureScreen.kt @@ -44,7 +44,7 @@ fun UploadFailureScreen( cancel: CallableState<Unit>, ) { - LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen("UploadErrorView") } + LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(MatomoSwissTransfer.UPLOAD_ERROR_SCREEN_TITLE) } val failure: UploadState.Failure by failureState when (failure) { diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadRetryScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadRetryScreen.kt index f8cb317ef..37c7dbd57 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadRetryScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadRetryScreen.kt @@ -39,8 +39,6 @@ fun UploadRetryScreen( retry: CallableState<Unit>, edit: CallableState<Unit>, ) { - LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen("UploadRetryView") } - when (val error: UploadState.Retry = errorState.value) { is UploadState.Retry.EmailValidationRequired -> { ValidateUserEmailScreen( @@ -58,6 +56,8 @@ private fun UploadRetryScreen( retry: CallableState<Unit>, edit: CallableState<Unit>, ) { + LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(MatomoSwissTransfer.UPLOAD_ERROR_SCREEN_TITLE) } + BottomStickyButtonScaffold( topBar = { BrandTopAppBar() }, topButton = { From def29b3c1398e76497982a1324025fc7d464dff8 Mon Sep 17 00:00:00 2001 From: Fabian DEVEL <fabian.devel@infomaniak.com> Date: Thu, 20 Mar 2025 14:02:04 +0100 Subject: [PATCH 6/9] feat(Matomo): Track the settings views --- .../main/settings/SettingsDownloadsLimitScreen.kt | 1 + .../main/settings/SettingsEmailLanguageScreen.kt | 1 + .../ui/screen/main/settings/SettingsThemeScreen.kt | 1 + .../main/settings/SettingsValidityPeriodScreen.kt | 1 + .../screen/main/settings/components/OptionScaffold.kt | 11 +++++++---- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsDownloadsLimitScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsDownloadsLimitScreen.kt index f1000a7bf..b92de37b5 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsDownloadsLimitScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsDownloadsLimitScreen.kt @@ -38,6 +38,7 @@ fun SettingsDownloadsLimitScreen( optionTitleRes = R.string.settingsDownloadsLimitTitle, enumEntries = DownloadLimitOption.entries, selectedSettingOptionPosition = downloadLimit.ordinal, + matomoValue = "DownloadLimit", setSelectedSettingOptionPosition = { position -> onDownloadLimitChange(DownloadLimit.entries[position]) }, navigateBack = navigateBack, ) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsEmailLanguageScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsEmailLanguageScreen.kt index 58a2a95ce..262e7bce0 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsEmailLanguageScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsEmailLanguageScreen.kt @@ -39,6 +39,7 @@ fun SettingsEmailLanguageScreen( optionTitleRes = R.string.settingsEmailLanguageTitle, enumEntries = EmailLanguageOption.entries, selectedSettingOptionPosition = emailLanguage.ordinal, + matomoValue = "EmailLanguage", setSelectedSettingOptionPosition = { position -> onEmailLanguageChange(EmailLanguage.entries[position]) }, navigateBack = navigateBack, ) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt index 9289b2db0..082995ad4 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt @@ -43,6 +43,7 @@ fun SettingsThemeScreen( optionTitleRes = R.string.settingsThemeTitle, enumEntries = ThemeOption.entries, selectedSettingOptionPosition = theme.ordinal, + matomoValue = "Theme", setSelectedSettingOptionPosition = { position -> onThemeUpdate(Theme.entries[position]) }, navigateBack = navigateBack, ) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsValidityPeriodScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsValidityPeriodScreen.kt index 5027ff8ac..52bf4b81c 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsValidityPeriodScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsValidityPeriodScreen.kt @@ -39,6 +39,7 @@ fun SettingsValidityPeriodScreen( optionTitleRes = R.string.settingsValidityPeriodTitle, enumEntries = ValidityPeriodOption.entries, selectedSettingOptionPosition = validityPeriod.ordinal, + matomoValue = "ValidityPeriod", setSelectedSettingOptionPosition = { position -> onValidityPeriodChange(ValidityPeriod.entries[position]) }, navigateBack = navigateBack, ) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/OptionScaffold.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/OptionScaffold.kt index 914500204..d33639c26 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/OptionScaffold.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/OptionScaffold.kt @@ -21,13 +21,11 @@ import androidx.annotation.StringRes import androidx.compose.foundation.layout.Column import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import com.infomaniak.swisstransfer.R +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer import com.infomaniak.swisstransfer.ui.components.SwissTransferTopAppBar import com.infomaniak.swisstransfer.ui.components.TopAppBarButtons import com.infomaniak.swisstransfer.ui.screen.main.components.SwissTransferScaffold @@ -43,10 +41,14 @@ fun OptionScaffold( @StringRes optionTitleRes: Int, enumEntries: List<SettingOption>, selectedSettingOptionPosition: Int, + matomoValue: String, setSelectedSettingOptionPosition: (Int) -> Unit, navigateBack: (() -> Unit)?, ) { val windowAdaptiveInfo = LocalWindowAdaptiveInfo.current + + LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen("${matomoValue}SettingView") } + SwissTransferScaffold( topBar = { SwissTransferTopAppBar( @@ -80,6 +82,7 @@ private fun Preview() { optionTitleRes = R.string.settingsThemeTitle, enumEntries = ThemeOption.entries, selectedSettingOptionPosition = 0, + matomoValue = "", setSelectedSettingOptionPosition = {}, navigateBack = {}, ) From 18c25a86ce9960b766698498b513c040484bc397 Mon Sep 17 00:00:00 2001 From: Fabian DEVEL <fabian.devel@infomaniak.com> Date: Thu, 20 Mar 2025 15:05:03 +0100 Subject: [PATCH 7/9] feat(Matomo): Stay kiss in the main view tracking to avoid double tracking on deeplink --- .../ui/navigation/NavigationDestination.kt | 13 ++++--------- .../swisstransfer/ui/screen/main/MainScreen.kt | 4 ---- .../ui/screen/main/received/ReceivedScreen.kt | 4 ++++ .../swisstransfer/ui/screen/main/sent/SentScreen.kt | 4 ++++ .../ui/screen/main/settings/SettingsScreen.kt | 4 ++++ .../screen/main/transfers/TransfersScreenWrapper.kt | 1 + 6 files changed, 17 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/navigation/NavigationDestination.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/navigation/NavigationDestination.kt index 4d0a37fde..1c60f2a62 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/navigation/NavigationDestination.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/navigation/NavigationDestination.kt @@ -26,7 +26,6 @@ import androidx.navigation.navDeepLink import androidx.navigation.toRoute import com.infomaniak.core.sentry.SentryLog import com.infomaniak.swisstransfer.BuildConfig -import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer import com.infomaniak.swisstransfer.ui.navigation.MainNavigation.SettingsDestination.getDeeplinkDirection import com.infomaniak.swisstransfer.ui.screen.main.DeeplinkViewModel.Companion.SENT_DEEPLINK_SUFFIX import com.infomaniak.swisstransfer.ui.screen.newtransfer.pickfiles.components.TransferTypeUi @@ -36,11 +35,7 @@ import kotlinx.serialization.Serializable * Sealed class representing the navigation arguments for the main navigation flow. */ @Serializable -sealed class MainNavigation(private val matomoValue: String? = null) : NavigationDestination() { - - fun trackScreen() { - matomoValue?.let { MatomoSwissTransfer.trackScreen(title = it) } - } +sealed class MainNavigation : NavigationDestination() { protected inline fun <reified T : MainNavigation> NavGraphBuilder.getDeeplinkDirection( noinline content: @Composable (AnimatedContentScope.(NavBackStackEntry) -> Unit), @@ -55,7 +50,7 @@ sealed class MainNavigation(private val matomoValue: String? = null) : Navigatio // If it has to be renamed, don't forget to rename `*DestinationName` in the companion object too. @Serializable - data class SentDestination(val transferUuid: String? = null) : MainNavigation("SentView") { + data class SentDestination(val transferUuid: String? = null) : MainNavigation() { companion object { fun NavGraphBuilder.sentDestination(content: @Composable (AnimatedContentScope.(NavBackStackEntry) -> Unit)) { @@ -66,7 +61,7 @@ sealed class MainNavigation(private val matomoValue: String? = null) : Navigatio // If it has to be renamed, don't forget to rename `*DestinationName` in the companion object too. @Serializable - data class ReceivedDestination(val transferUuid: String? = null) : MainNavigation("ReceivedView") { + data class ReceivedDestination(val transferUuid: String? = null) : MainNavigation() { companion object { fun NavGraphBuilder.receivedDestination(content: @Composable (AnimatedContentScope.(NavBackStackEntry) -> Unit)) { @@ -76,7 +71,7 @@ sealed class MainNavigation(private val matomoValue: String? = null) : Navigatio } @Serializable - data object SettingsDestination : MainNavigation("SettingsView") + data object SettingsDestination : MainNavigation() companion object { private val TAG = MainNavigation::class.java.simpleName diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/MainScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/MainScreen.kt index 2657ac1ec..12a4ae24b 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/MainScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/MainScreen.kt @@ -39,10 +39,6 @@ fun MainScreen(deeplinkTransferDirection: TransferDirection? = null) { derivedStateOf { navBackStackEntry?.toMainDestination() ?: MainNavigation.startDestination } } - LaunchedEffect(currentDestination) { - currentDestination.trackScreen() - } - MainScaffold( navController = navController, currentDestination = currentDestination, diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/received/ReceivedScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/received/ReceivedScreen.kt index 7c91ec0fd..54886e269 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/received/ReceivedScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/received/ReceivedScreen.kt @@ -21,6 +21,7 @@ import androidx.compose.foundation.Image import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.material3.Surface import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource @@ -29,6 +30,7 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.infomaniak.multiplatform_swisstransfer.common.models.TransferDirection import com.infomaniak.swisstransfer.R +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer import com.infomaniak.swisstransfer.ui.components.BrandTopAppBar import com.infomaniak.swisstransfer.ui.components.EmptyState import com.infomaniak.swisstransfer.ui.components.SwissTransferTopAppBar @@ -61,6 +63,8 @@ fun ReceivedScreen( hasTransfer((uiState as? TransferUiState.Success)?.data?.isNotEmpty() == true) + LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen("ReceivedView") } + ReceivedScreen( uiState = { uiState }, isFirstTransfer = { sentTransfersAreEmpty }, diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentScreen.kt index 2be16e6f1..159e838e6 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentScreen.kt @@ -20,6 +20,7 @@ package com.infomaniak.swisstransfer.ui.screen.main.sent import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.material3.Surface import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource @@ -30,6 +31,7 @@ import androidx.lifecycle.compose.LifecycleEventEffect import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.infomaniak.multiplatform_swisstransfer.common.models.TransferDirection import com.infomaniak.swisstransfer.R +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer import com.infomaniak.swisstransfer.ui.components.BrandTopAppBar import com.infomaniak.swisstransfer.ui.components.NewTransferFab import com.infomaniak.swisstransfer.ui.components.NewTransferFabType @@ -59,6 +61,8 @@ fun SentScreen( hasTransfer((uiState as? TransferUiState.Success)?.data?.isNotEmpty() == true) + LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen("SentView") } + LifecycleEventEffect(Lifecycle.Event.ON_RESUME) { transfersViewModel.fetchPendingTransfers() } diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsScreen.kt index cf4a10b2f..0c86bef9d 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsScreen.kt @@ -26,6 +26,7 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.res.stringResource @@ -35,6 +36,7 @@ import com.infomaniak.multiplatform_swisstransfer.common.models.Theme import com.infomaniak.multiplatform_swisstransfer.common.models.ValidityPeriod import com.infomaniak.swisstransfer.BuildConfig import com.infomaniak.swisstransfer.R +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer import com.infomaniak.swisstransfer.ui.components.BrandTopAppBar import com.infomaniak.swisstransfer.ui.components.SmallWindowScreenTitle import com.infomaniak.swisstransfer.ui.components.SwissTransferTopAppBar @@ -66,6 +68,8 @@ fun SettingsScreen( val selectedSetting = getSelectedSetting() val windowAdaptiveInfo = LocalWindowAdaptiveInfo.current + LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen("SettingsView") } + SwissTransferScaffold( topBar = { if (windowAdaptiveInfo.isWindowLarge()) { diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/transfers/TransfersScreenWrapper.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/transfers/TransfersScreenWrapper.kt index fa274a7b2..a7099d08f 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/transfers/TransfersScreenWrapper.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/transfers/TransfersScreenWrapper.kt @@ -151,6 +151,7 @@ private fun ThreePaneScaffoldNavigator<DestinationContent>.navigateToFolder( transferUuid: String, folderUuid: String, ) { + MatomoSwissTransfer.trackScreen("TransferDetailsFileListView") navigateTo(ListDetailPaneScaffoldRole.Detail, DestinationContent.FolderLevel(direction, transferUuid, folderUuid)) } From 070fdaa63fbf8513072a3f89788869f22fc6416c Mon Sep 17 00:00:00 2001 From: Fabian DEVEL <fabian.devel@infomaniak.com> Date: Thu, 20 Mar 2025 15:09:50 +0100 Subject: [PATCH 8/9] feat(Matomo): Use the new matomoValue of TransferType --- .../ui/screen/newtransfer/pickfiles/PickFilesScreen.kt | 2 +- .../newtransfer/pickfiles/components/TransferTypeButtons.kt | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/PickFilesScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/PickFilesScreen.kt index 6c08a9de1..1000a4cdb 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/PickFilesScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/PickFilesScreen.kt @@ -157,7 +157,7 @@ fun PickFilesScreen( selectedTransferType = GetSetCallbacks( get = { selectedTransferType }, set = { type -> - MatomoSwissTransfer.trackTransferTypeEvent(type.matomoValue) + MatomoSwissTransfer.trackTransferTypeEvent(type.dbValue.matomoValue) pickFilesViewModel.selectTransferType(type) }, ), diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/components/TransferTypeButtons.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/components/TransferTypeButtons.kt index 66fcf5a91..685392694 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/components/TransferTypeButtons.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/components/TransferTypeButtons.kt @@ -72,7 +72,6 @@ enum class TransferTypeUi( @StringRes val titleRes: Int, @StringRes @PluralsRes val descriptionRes: Int?, val dbValue: TransferType, - val matomoValue: String, ) { QrCode( buttonIcon = AppIcons.QrCode, @@ -80,7 +79,6 @@ enum class TransferTypeUi( titleRes = R.string.uploadSuccessQrTitle, descriptionRes = null, dbValue = TransferType.QR_CODE, - matomoValue = "qrCode", ), Mail( buttonIcon = AppIcons.Envelope, @@ -88,7 +86,6 @@ enum class TransferTypeUi( titleRes = R.string.uploadSuccessEmailTitle, descriptionRes = R.plurals.uploadSuccessEmailDescription, dbValue = TransferType.MAIL, - matomoValue = "email", ), Link( buttonIcon = AppIcons.Chain, @@ -96,7 +93,6 @@ enum class TransferTypeUi( titleRes = R.string.uploadSuccessLinkTitle, descriptionRes = R.string.uploadSuccessLinkDescription, dbValue = TransferType.LINK, - matomoValue = "link", ), Proximity( buttonIcon = AppIcons.WifiWave, @@ -104,7 +100,6 @@ enum class TransferTypeUi( titleRes = R.string.uploadSuccessLinkTitle, descriptionRes = R.string.uploadSuccessLinkDescription, dbValue = TransferType.PROXIMITY, - matomoValue = "proximity", ); companion object { From 0fae024ce0e5dd6a3706f0fad33e875ff085543d Mon Sep 17 00:00:00 2001 From: Fabian DEVEL <fabian.devel@infomaniak.com> Date: Fri, 21 Mar 2025 10:32:07 +0100 Subject: [PATCH 9/9] feat(Matomo): Create a MatomoScreen enum to group all strings --- .../swisstransfer/ui/MatomoSwissTransfer.kt | 25 ++++++++++++++++--- .../ui/screen/main/received/ReceivedScreen.kt | 3 ++- .../ui/screen/main/sent/SentScreen.kt | 3 ++- .../settings/SettingsDownloadsLimitScreen.kt | 3 ++- .../settings/SettingsEmailLanguageScreen.kt | 3 ++- .../ui/screen/main/settings/SettingsScreen.kt | 3 ++- .../main/settings/SettingsThemeScreen.kt | 3 ++- .../settings/SettingsValidityPeriodScreen.kt | 3 ++- .../settings/components/OptionScaffold.kt | 7 +++--- .../main/transfers/TransfersScreenWrapper.kt | 9 +++++-- .../NewTransferFilesDetailsScreen.kt | 5 ++-- .../newtransfer/pickfiles/PickFilesScreen.kt | 3 ++- .../newtransfer/upload/UploadFailureScreen.kt | 3 ++- .../upload/UploadProgressScreen.kt | 3 ++- .../newtransfer/upload/UploadRetryScreen.kt | 3 ++- .../newtransfer/upload/UploadSuccessScreen.kt | 3 ++- .../validateemail/ValidateUserEmailScreen.kt | 3 ++- 17 files changed, 62 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/MatomoSwissTransfer.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/MatomoSwissTransfer.kt index 443c54ada..6b0496d30 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/MatomoSwissTransfer.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/MatomoSwissTransfer.kt @@ -30,7 +30,26 @@ import splitties.init.appCtx object MatomoSwissTransfer : Matomo { - const val UPLOAD_ERROR_SCREEN_TITLE = "UploadErrorView" + enum class MatomoScreen { + Sent, + Received, + Settings, + NewTransfer, + NewTransferFileList, + VerifyMail, + UploadProgress, + UploadError, + UploadSuccess, + SentTransferDetails, + ReceivedTransferDetails, + TransferDetailsFileList, + ThemeSetting, + ValidityPeriodSetting, + DownloadLimitSetting, + EmailLanguageSetting; + + override fun toString() = "${name}View" + } private val scope = CoroutineScope(Dispatchers.Default) @@ -50,8 +69,8 @@ object MatomoSwissTransfer : Matomo { } } - fun trackScreen(title: String) { - trackScreen(path = "/$title", title = title) + fun trackScreen(screen: MatomoScreen) { + trackScreen(path = "/$screen", title = screen.toString()) } fun trackTransferTypeEvent(name: String) { diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/received/ReceivedScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/received/ReceivedScreen.kt index 54886e269..c63875463 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/received/ReceivedScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/received/ReceivedScreen.kt @@ -31,6 +31,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.infomaniak.multiplatform_swisstransfer.common.models.TransferDirection import com.infomaniak.swisstransfer.R import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer.MatomoScreen import com.infomaniak.swisstransfer.ui.components.BrandTopAppBar import com.infomaniak.swisstransfer.ui.components.EmptyState import com.infomaniak.swisstransfer.ui.components.SwissTransferTopAppBar @@ -63,7 +64,7 @@ fun ReceivedScreen( hasTransfer((uiState as? TransferUiState.Success)?.data?.isNotEmpty() == true) - LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen("ReceivedView") } + LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(MatomoScreen.Received) } ReceivedScreen( uiState = { uiState }, diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentScreen.kt index 159e838e6..f15fccb3c 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentScreen.kt @@ -32,6 +32,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.infomaniak.multiplatform_swisstransfer.common.models.TransferDirection import com.infomaniak.swisstransfer.R import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer.MatomoScreen import com.infomaniak.swisstransfer.ui.components.BrandTopAppBar import com.infomaniak.swisstransfer.ui.components.NewTransferFab import com.infomaniak.swisstransfer.ui.components.NewTransferFabType @@ -61,7 +62,7 @@ fun SentScreen( hasTransfer((uiState as? TransferUiState.Success)?.data?.isNotEmpty() == true) - LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen("SentView") } + LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(MatomoScreen.Sent) } LifecycleEventEffect(Lifecycle.Event.ON_RESUME) { transfersViewModel.fetchPendingTransfers() diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsDownloadsLimitScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsDownloadsLimitScreen.kt index b92de37b5..cd1f07ce2 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsDownloadsLimitScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsDownloadsLimitScreen.kt @@ -22,6 +22,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.vector.ImageVector import com.infomaniak.multiplatform_swisstransfer.common.models.DownloadLimit import com.infomaniak.swisstransfer.R +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer.MatomoScreen import com.infomaniak.swisstransfer.ui.screen.main.settings.components.OptionScaffold import com.infomaniak.swisstransfer.ui.screen.main.settings.components.SettingOption import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme @@ -38,7 +39,7 @@ fun SettingsDownloadsLimitScreen( optionTitleRes = R.string.settingsDownloadsLimitTitle, enumEntries = DownloadLimitOption.entries, selectedSettingOptionPosition = downloadLimit.ordinal, - matomoValue = "DownloadLimit", + matomoValue = MatomoScreen.DownloadLimitSetting, setSelectedSettingOptionPosition = { position -> onDownloadLimitChange(DownloadLimit.entries[position]) }, navigateBack = navigateBack, ) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsEmailLanguageScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsEmailLanguageScreen.kt index 262e7bce0..e8512aa6a 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsEmailLanguageScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsEmailLanguageScreen.kt @@ -23,6 +23,7 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.stringResource import com.infomaniak.multiplatform_swisstransfer.common.models.EmailLanguage import com.infomaniak.swisstransfer.R +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer.MatomoScreen import com.infomaniak.swisstransfer.ui.screen.main.settings.components.OptionScaffold import com.infomaniak.swisstransfer.ui.screen.main.settings.components.SettingOption import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme @@ -39,7 +40,7 @@ fun SettingsEmailLanguageScreen( optionTitleRes = R.string.settingsEmailLanguageTitle, enumEntries = EmailLanguageOption.entries, selectedSettingOptionPosition = emailLanguage.ordinal, - matomoValue = "EmailLanguage", + matomoValue = MatomoScreen.EmailLanguageSetting, setSelectedSettingOptionPosition = { position -> onEmailLanguageChange(EmailLanguage.entries[position]) }, navigateBack = navigateBack, ) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsScreen.kt index 0c86bef9d..a6a79d029 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsScreen.kt @@ -37,6 +37,7 @@ import com.infomaniak.multiplatform_swisstransfer.common.models.ValidityPeriod import com.infomaniak.swisstransfer.BuildConfig import com.infomaniak.swisstransfer.R import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer.MatomoScreen import com.infomaniak.swisstransfer.ui.components.BrandTopAppBar import com.infomaniak.swisstransfer.ui.components.SmallWindowScreenTitle import com.infomaniak.swisstransfer.ui.components.SwissTransferTopAppBar @@ -68,7 +69,7 @@ fun SettingsScreen( val selectedSetting = getSelectedSetting() val windowAdaptiveInfo = LocalWindowAdaptiveInfo.current - LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen("SettingsView") } + LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(MatomoScreen.Settings) } SwissTransferScaffold( topBar = { diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt index 082995ad4..38adfdf3b 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt @@ -23,6 +23,7 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.stringResource import com.infomaniak.multiplatform_swisstransfer.common.models.Theme import com.infomaniak.swisstransfer.R +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer.MatomoScreen import com.infomaniak.swisstransfer.ui.images.AppImages.AppIcons import com.infomaniak.swisstransfer.ui.images.icons.CircleBlack import com.infomaniak.swisstransfer.ui.images.icons.CircleBlackAndWhite @@ -43,7 +44,7 @@ fun SettingsThemeScreen( optionTitleRes = R.string.settingsThemeTitle, enumEntries = ThemeOption.entries, selectedSettingOptionPosition = theme.ordinal, - matomoValue = "Theme", + matomoValue = MatomoScreen.ThemeSetting, setSelectedSettingOptionPosition = { position -> onThemeUpdate(Theme.entries[position]) }, navigateBack = navigateBack, ) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsValidityPeriodScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsValidityPeriodScreen.kt index 52bf4b81c..3a559b49a 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsValidityPeriodScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsValidityPeriodScreen.kt @@ -23,6 +23,7 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.pluralStringResource import com.infomaniak.multiplatform_swisstransfer.common.models.ValidityPeriod import com.infomaniak.swisstransfer.R +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer.MatomoScreen import com.infomaniak.swisstransfer.ui.screen.main.settings.components.OptionScaffold import com.infomaniak.swisstransfer.ui.screen.main.settings.components.SettingOption import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme @@ -39,7 +40,7 @@ fun SettingsValidityPeriodScreen( optionTitleRes = R.string.settingsValidityPeriodTitle, enumEntries = ValidityPeriodOption.entries, selectedSettingOptionPosition = validityPeriod.ordinal, - matomoValue = "ValidityPeriod", + matomoValue = MatomoScreen.ValidityPeriodSetting, setSelectedSettingOptionPosition = { position -> onValidityPeriodChange(ValidityPeriod.entries[position]) }, navigateBack = navigateBack, ) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/OptionScaffold.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/OptionScaffold.kt index d33639c26..4d89a5807 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/OptionScaffold.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/OptionScaffold.kt @@ -26,6 +26,7 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier import com.infomaniak.swisstransfer.R import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer.MatomoScreen import com.infomaniak.swisstransfer.ui.components.SwissTransferTopAppBar import com.infomaniak.swisstransfer.ui.components.TopAppBarButtons import com.infomaniak.swisstransfer.ui.screen.main.components.SwissTransferScaffold @@ -41,13 +42,13 @@ fun OptionScaffold( @StringRes optionTitleRes: Int, enumEntries: List<SettingOption>, selectedSettingOptionPosition: Int, - matomoValue: String, + matomoValue: MatomoScreen, setSelectedSettingOptionPosition: (Int) -> Unit, navigateBack: (() -> Unit)?, ) { val windowAdaptiveInfo = LocalWindowAdaptiveInfo.current - LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen("${matomoValue}SettingView") } + LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(matomoValue) } SwissTransferScaffold( topBar = { @@ -82,7 +83,7 @@ private fun Preview() { optionTitleRes = R.string.settingsThemeTitle, enumEntries = ThemeOption.entries, selectedSettingOptionPosition = 0, - matomoValue = "", + matomoValue = MatomoScreen.Sent, setSelectedSettingOptionPosition = {}, navigateBack = {}, ) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/transfers/TransfersScreenWrapper.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/transfers/TransfersScreenWrapper.kt index a7099d08f..082a2c911 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/transfers/TransfersScreenWrapper.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/transfers/TransfersScreenWrapper.kt @@ -34,6 +34,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.infomaniak.multiplatform_swisstransfer.common.models.TransferDirection import com.infomaniak.swisstransfer.R import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer.MatomoScreen import com.infomaniak.swisstransfer.ui.components.* import com.infomaniak.swisstransfer.ui.images.AppImages.AppIllus import com.infomaniak.swisstransfer.ui.images.illus.mascotWithMagnifyingGlass.MascotWithMagnifyingGlass @@ -141,7 +142,11 @@ private fun ThreePaneScaffoldNavigator<DestinationContent>.navigateToDetails( direction: TransferDirection, transferUuid: String, ) { - MatomoSwissTransfer.trackScreen("${direction.matomoValue}TransferDetailsView") + val matomoScreen = when (direction) { + TransferDirection.SENT -> MatomoScreen.SentTransferDetails + TransferDirection.RECEIVED -> MatomoScreen.ReceivedTransferDetails + } + MatomoSwissTransfer.trackScreen(matomoScreen) selectItem(context, windowAdaptiveInfo, DestinationContent.RootLevel(direction, transferUuid)) } @@ -151,7 +156,7 @@ private fun ThreePaneScaffoldNavigator<DestinationContent>.navigateToFolder( transferUuid: String, folderUuid: String, ) { - MatomoSwissTransfer.trackScreen("TransferDetailsFileListView") + MatomoSwissTransfer.trackScreen(MatomoScreen.TransferDetailsFileList) navigateTo(ListDetailPaneScaffoldRole.Detail, DestinationContent.FolderLevel(direction, transferUuid, folderUuid)) } diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/filesdetails/NewTransferFilesDetailsScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/filesdetails/NewTransferFilesDetailsScreen.kt index 098c824a9..c2d2f9535 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/filesdetails/NewTransferFilesDetailsScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/filesdetails/NewTransferFilesDetailsScreen.kt @@ -28,14 +28,15 @@ import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.infomaniak.multiplatform_swisstransfer.common.interfaces.ui.FileUi import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer.MatomoScreen import com.infomaniak.swisstransfer.ui.components.SinglePaneScaffold import com.infomaniak.swisstransfer.ui.components.SwissTransferTopAppBar import com.infomaniak.swisstransfer.ui.components.TopAppBarButtons import com.infomaniak.swisstransfer.ui.components.transfer.FilesDetailsScreen import com.infomaniak.swisstransfer.ui.previewparameter.FileUiListPreviewParameter import com.infomaniak.swisstransfer.ui.screen.main.components.SwissTransferScaffold -import com.infomaniak.swisstransfer.ui.screen.newtransfer.pickfiles.PickFilesViewModel.FilesDetailsUiState import com.infomaniak.swisstransfer.ui.screen.newtransfer.pickfiles.PickFilesViewModel +import com.infomaniak.swisstransfer.ui.screen.newtransfer.pickfiles.PickFilesViewModel.FilesDetailsUiState import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme import com.infomaniak.swisstransfer.ui.utils.PreviewAllWindows @@ -49,7 +50,7 @@ fun NewTransferFilesDetailsScreen( ) { val uiState by pickFilesViewModel.filesDetailsUiState.collectAsStateWithLifecycle() - LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen("NewTransferFileListView") } + LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(MatomoScreen.NewTransferFileList) } LaunchedEffect(uiState) { if (uiState is FilesDetailsUiState.EmptyFiles) navigateBack() } diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/PickFilesScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/PickFilesScreen.kt index 1000a4cdb..a83882f3f 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/PickFilesScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/pickfiles/PickFilesScreen.kt @@ -46,6 +46,7 @@ import com.infomaniak.core.mapSync import com.infomaniak.multiplatform_swisstransfer.common.interfaces.ui.FileUi import com.infomaniak.swisstransfer.R import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer.MatomoScreen import com.infomaniak.swisstransfer.ui.components.* import com.infomaniak.swisstransfer.ui.previewparameter.FileUiListPreviewParameter import com.infomaniak.swisstransfer.ui.screen.main.settings.DownloadLimitOption @@ -115,7 +116,7 @@ fun PickFilesScreen( HandleStartupFilePick(pickFilesViewModel.openFilePickerEvent, ::pickFiles) LaunchedEffect(Unit) { - MatomoSwissTransfer.trackScreen("NewTransferView") + MatomoSwissTransfer.trackScreen(MatomoScreen.NewTransfer) UploadForegroundService.uploadStateFlow.mapSync { it != null }.collect { isUploadOngoing -> if (isUploadOngoing) { navigateToUploadProgress() diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadFailureScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadFailureScreen.kt index c2044c516..84696fd16 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadFailureScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadFailureScreen.kt @@ -30,6 +30,7 @@ import com.infomaniak.core.compose.basics.CallableState import com.infomaniak.swisstransfer.BuildConfig import com.infomaniak.swisstransfer.R import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer.MatomoScreen import com.infomaniak.swisstransfer.ui.components.* import com.infomaniak.swisstransfer.ui.images.AppImages.AppIllus import com.infomaniak.swisstransfer.ui.images.illus.appIntegrity.GhostScrollCrossPointing @@ -44,7 +45,7 @@ fun UploadFailureScreen( cancel: CallableState<Unit>, ) { - LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(MatomoSwissTransfer.UPLOAD_ERROR_SCREEN_TITLE) } + LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(MatomoScreen.UploadError) } val failure: UploadState.Failure by failureState when (failure) { diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadProgressScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadProgressScreen.kt index d2a8e64a2..1b6588a44 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadProgressScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadProgressScreen.kt @@ -29,6 +29,7 @@ import androidx.compose.ui.res.stringResource import com.infomaniak.core.R import com.infomaniak.swisstransfer.R.string import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer.MatomoScreen import com.infomaniak.swisstransfer.ui.components.BottomStickyButtonScaffold import com.infomaniak.swisstransfer.ui.components.BrandTopAppBar import com.infomaniak.swisstransfer.ui.components.LargeButton @@ -48,7 +49,7 @@ fun UploadOngoingScreen( onCancelClick: () -> Unit, ) { - LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen("UploadProgressView") } + LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(MatomoScreen.UploadProgress) } val progress by progressState BottomStickyButtonScaffold( diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadRetryScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadRetryScreen.kt index 37c7dbd57..383dbd943 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadRetryScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadRetryScreen.kt @@ -24,6 +24,7 @@ import androidx.compose.ui.res.stringResource import com.infomaniak.core.R import com.infomaniak.core.compose.basics.CallableState import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer.MatomoScreen import com.infomaniak.swisstransfer.ui.components.* import com.infomaniak.swisstransfer.ui.images.AppImages.AppIllus import com.infomaniak.swisstransfer.ui.images.illus.uploadError.GhostMagnifyingGlassQuestionMark @@ -56,7 +57,7 @@ private fun UploadRetryScreen( retry: CallableState<Unit>, edit: CallableState<Unit>, ) { - LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(MatomoSwissTransfer.UPLOAD_ERROR_SCREEN_TITLE) } + LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(MatomoScreen.UploadError) } BottomStickyButtonScaffold( topBar = { BrandTopAppBar() }, diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadSuccessScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadSuccessScreen.kt index d53403b17..7b2eb5ea4 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadSuccessScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/upload/UploadSuccessScreen.kt @@ -24,6 +24,7 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.platform.LocalContext import androidx.datastore.preferences.core.edit import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer.MatomoScreen import com.infomaniak.swisstransfer.ui.screen.newtransfer.pickfiles.components.TransferTypeUi import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme import com.infomaniak.swisstransfer.ui.utils.PreviewAllWindows @@ -43,7 +44,7 @@ fun UploadSuccessScreen( // Now that we are done redirecting, we clear the value stored. LaunchedEffect(Unit) { context.lastTransferDataStore.edit { it.clear() } - MatomoSwissTransfer.trackScreen("UploadSuccessView") + MatomoSwissTransfer.trackScreen(MatomoScreen.UploadSuccess) } BackHandler(onBack = dismissCompleteUpload) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/validateemail/ValidateUserEmailScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/validateemail/ValidateUserEmailScreen.kt index cdff24cfc..6d479bdbe 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/validateemail/ValidateUserEmailScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/validateemail/ValidateUserEmailScreen.kt @@ -40,6 +40,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.infomaniak.core.sentry.SentryLog import com.infomaniak.swisstransfer.R import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer +import com.infomaniak.swisstransfer.ui.MatomoSwissTransfer.MatomoScreen import com.infomaniak.swisstransfer.ui.components.BottomStickyButtonScaffold import com.infomaniak.swisstransfer.ui.components.LargeButton import com.infomaniak.swisstransfer.ui.components.SwissTransferTopAppBar @@ -75,7 +76,7 @@ fun ValidateUserEmailScreen( val context = LocalContext.current val scope = rememberCoroutineScope() - LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen("VerifyMailView") } + LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(MatomoScreen.VerifyMail) } BackHandler { editTransfer() }