Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Matomo basic #450

Merged
merged 9 commits into from
Mar 21, 2025
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,27 @@ import splitties.init.appCtx

object MatomoSwissTransfer : Matomo {

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)

override val tracker: Tracker = with(appCtx) {
Expand All @@ -47,4 +68,12 @@ object MatomoSwissTransfer : Matomo {
}
}
}

fun trackScreen(screen: MatomoScreen) {
trackScreen(path = "/$screen", title = screen.toString())
}

fun trackTransferTypeEvent(name: String) {
trackEvent("transferType", name)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -29,6 +30,8 @@ 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.MatomoSwissTransfer.MatomoScreen
import com.infomaniak.swisstransfer.ui.components.BrandTopAppBar
import com.infomaniak.swisstransfer.ui.components.EmptyState
import com.infomaniak.swisstransfer.ui.components.SwissTransferTopAppBar
Expand Down Expand Up @@ -61,6 +64,8 @@ fun ReceivedScreen(

hasTransfer((uiState as? TransferUiState.Success)?.data?.isNotEmpty() == true)

LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(MatomoScreen.Received) }

ReceivedScreen(
uiState = { uiState },
isFirstTransfer = { sentTransfersAreEmpty },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -30,6 +31,8 @@ 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.MatomoSwissTransfer.MatomoScreen
import com.infomaniak.swisstransfer.ui.components.BrandTopAppBar
import com.infomaniak.swisstransfer.ui.components.NewTransferFab
import com.infomaniak.swisstransfer.ui.components.NewTransferFabType
Expand Down Expand Up @@ -59,6 +62,8 @@ fun SentScreen(

hasTransfer((uiState as? TransferUiState.Success)?.data?.isNotEmpty() == true)

LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(MatomoScreen.Sent) }

LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
transfersViewModel.fetchPendingTransfers()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -38,6 +39,7 @@ fun SettingsDownloadsLimitScreen(
optionTitleRes = R.string.settingsDownloadsLimitTitle,
enumEntries = DownloadLimitOption.entries,
selectedSettingOptionPosition = downloadLimit.ordinal,
matomoValue = MatomoScreen.DownloadLimitSetting,
setSelectedSettingOptionPosition = { position -> onDownloadLimitChange(DownloadLimit.entries[position]) },
navigateBack = navigateBack,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -39,6 +40,7 @@ fun SettingsEmailLanguageScreen(
optionTitleRes = R.string.settingsEmailLanguageTitle,
enumEntries = EmailLanguageOption.entries,
selectedSettingOptionPosition = emailLanguage.ordinal,
matomoValue = MatomoScreen.EmailLanguageSetting,
setSelectedSettingOptionPosition = { position -> onEmailLanguageChange(EmailLanguage.entries[position]) },
navigateBack = navigateBack,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -35,6 +36,8 @@ 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.MatomoSwissTransfer.MatomoScreen
import com.infomaniak.swisstransfer.ui.components.BrandTopAppBar
import com.infomaniak.swisstransfer.ui.components.SmallWindowScreenTitle
import com.infomaniak.swisstransfer.ui.components.SwissTransferTopAppBar
Expand Down Expand Up @@ -66,6 +69,8 @@ fun SettingsScreen(
val selectedSetting = getSelectedSetting()
val windowAdaptiveInfo = LocalWindowAdaptiveInfo.current

LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(MatomoScreen.Settings) }

SwissTransferScaffold(
topBar = {
if (windowAdaptiveInfo.isWindowLarge()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -43,6 +44,7 @@ fun SettingsThemeScreen(
optionTitleRes = R.string.settingsThemeTitle,
enumEntries = ThemeOption.entries,
selectedSettingOptionPosition = theme.ordinal,
matomoValue = MatomoScreen.ThemeSetting,
setSelectedSettingOptionPosition = { position -> onThemeUpdate(Theme.entries[position]) },
navigateBack = navigateBack,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -39,6 +40,7 @@ fun SettingsValidityPeriodScreen(
optionTitleRes = R.string.settingsValidityPeriodTitle,
enumEntries = ValidityPeriodOption.entries,
selectedSettingOptionPosition = validityPeriod.ordinal,
matomoValue = MatomoScreen.ValidityPeriodSetting,
setSelectedSettingOptionPosition = { position -> onValidityPeriodChange(ValidityPeriod.entries[position]) },
navigateBack = navigateBack,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,12 @@ 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.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
Expand All @@ -43,10 +42,14 @@ fun OptionScaffold(
@StringRes optionTitleRes: Int,
enumEntries: List<SettingOption>,
selectedSettingOptionPosition: Int,
matomoValue: MatomoScreen,
setSelectedSettingOptionPosition: (Int) -> Unit,
navigateBack: (() -> Unit)?,
) {
val windowAdaptiveInfo = LocalWindowAdaptiveInfo.current

LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(matomoValue) }

SwissTransferScaffold(
topBar = {
SwissTransferTopAppBar(
Expand Down Expand Up @@ -80,6 +83,7 @@ private fun Preview() {
optionTitleRes = R.string.settingsThemeTitle,
enumEntries = ThemeOption.entries,
selectedSettingOptionPosition = 0,
matomoValue = MatomoScreen.Sent,
setSelectedSettingOptionPosition = {},
navigateBack = {},
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ 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.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
Expand Down Expand Up @@ -140,6 +142,11 @@ private fun ThreePaneScaffoldNavigator<DestinationContent>.navigateToDetails(
direction: TransferDirection,
transferUuid: String,
) {
val matomoScreen = when (direction) {
TransferDirection.SENT -> MatomoScreen.SentTransferDetails
TransferDirection.RECEIVED -> MatomoScreen.ReceivedTransferDetails
}
MatomoSwissTransfer.trackScreen(matomoScreen)
selectItem(context, windowAdaptiveInfo, DestinationContent.RootLevel(direction, transferUuid))
}

Expand All @@ -149,6 +156,7 @@ private fun ThreePaneScaffoldNavigator<DestinationContent>.navigateToFolder(
transferUuid: String,
folderUuid: String,
) {
MatomoSwissTransfer.trackScreen(MatomoScreen.TransferDetailsFileList)
navigateTo(ListDetailPaneScaffoldRole.Detail, DestinationContent.FolderLevel(direction, transferUuid, folderUuid))
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,16 @@ 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.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

Expand All @@ -48,6 +50,7 @@ fun NewTransferFilesDetailsScreen(
) {
val uiState by pickFilesViewModel.filesDetailsUiState.collectAsStateWithLifecycle()

LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(MatomoScreen.NewTransferFileList) }
LaunchedEffect(uiState) {
if (uiState is FilesDetailsUiState.EmptyFiles) navigateBack()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ 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.MatomoSwissTransfer.MatomoScreen
import com.infomaniak.swisstransfer.ui.components.*
import com.infomaniak.swisstransfer.ui.previewparameter.FileUiListPreviewParameter
import com.infomaniak.swisstransfer.ui.screen.main.settings.DownloadLimitOption
Expand Down Expand Up @@ -114,6 +116,7 @@ fun PickFilesScreen(
HandleStartupFilePick(pickFilesViewModel.openFilePickerEvent, ::pickFiles)

LaunchedEffect(Unit) {
MatomoSwissTransfer.trackScreen(MatomoScreen.NewTransfer)
UploadForegroundService.uploadStateFlow.mapSync { it != null }.collect { isUploadOngoing ->
if (isUploadOngoing) {
navigateToUploadProgress()
Expand Down Expand Up @@ -154,7 +157,10 @@ fun PickFilesScreen(
transferMessageCallbacks = pickFilesViewModel.transferMessageCallbacks,
selectedTransferType = GetSetCallbacks(
get = { selectedTransferType },
set = pickFilesViewModel::selectTransferType,
set = { type ->
MatomoSwissTransfer.trackTransferTypeEvent(type.dbValue.matomoValue)
pickFilesViewModel.selectTransferType(type)
},
),
transferOptionsCallbacks = transferOptionsCallbacks,
pickFiles = ::pickFiles,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,15 @@ 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.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
Expand All @@ -41,6 +44,9 @@ fun UploadFailureScreen(
failureState: State<UploadState.Failure>,
cancel: CallableState<Unit>,
) {

LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(MatomoScreen.UploadError) }

val failure: UploadState.Failure by failureState
when (failure) {
UploadState.Failure.AppIntegrityIssue -> UploadFailureScreen(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ 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.MatomoSwissTransfer.MatomoScreen
import com.infomaniak.swisstransfer.ui.components.BottomStickyButtonScaffold
import com.infomaniak.swisstransfer.ui.components.BrandTopAppBar
import com.infomaniak.swisstransfer.ui.components.LargeButton
Expand All @@ -46,6 +48,9 @@ fun UploadOngoingScreen(
adScreenType: UploadProgressAdType,
onCancelClick: () -> Unit,
) {

LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(MatomoScreen.UploadProgress) }

val progress by progressState
BottomStickyButtonScaffold(
topBar = { BrandTopAppBar() },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,12 @@ 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.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
Expand Down Expand Up @@ -58,6 +57,8 @@ private fun UploadRetryScreen(
retry: CallableState<Unit>,
edit: CallableState<Unit>,
) {
LaunchedEffect(Unit) { MatomoSwissTransfer.trackScreen(MatomoScreen.UploadError) }

BottomStickyButtonScaffold(
topBar = { BrandTopAppBar() },
topButton = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ 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.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
Expand All @@ -42,6 +44,7 @@ fun UploadSuccessScreen(
// Now that we are done redirecting, we clear the value stored.
LaunchedEffect(Unit) {
context.lastTransferDataStore.edit { it.clear() }
MatomoSwissTransfer.trackScreen(MatomoScreen.UploadSuccess)
}

BackHandler(onBack = dismissCompleteUpload)
Expand Down
Loading