diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsViewModel.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsViewModel.kt index 03fe14a17e..bd66f0b396 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsViewModel.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsViewModel.kt @@ -25,10 +25,6 @@ import com.infomaniak.multiplatform_swisstransfer.common.models.Theme import com.infomaniak.multiplatform_swisstransfer.common.models.ValidityPeriod import com.infomaniak.multiplatform_swisstransfer.managers.AppSettingsManager import com.infomaniak.swisstransfer.di.IoDispatcher -import com.infomaniak.swisstransfer.ui.screen.main.settings.DownloadLimitOption.Companion.toAdvancedOption -import com.infomaniak.swisstransfer.ui.screen.main.settings.EmailLanguageOption.Companion.toAdvancedOption -import com.infomaniak.swisstransfer.ui.screen.main.settings.ValidityPeriodOption.Companion.toAdvancedOption -import com.infomaniak.swisstransfer.ui.screen.main.settings.components.SettingOption import com.infomaniak.swisstransfer.ui.screen.newtransfer.importfiles.PasswordTransferOption import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.CoroutineDispatcher @@ -64,12 +60,5 @@ class SettingsViewModel @Inject constructor( val downloadLimit: DownloadLimit, val passwordOption: PasswordTransferOption, val emailLanguage: EmailLanguage, - ) { - fun toAdvancedOptionsList() = listOf( - validityPeriod.toAdvancedOption(), - downloadLimit.toAdvancedOption(), - passwordOption, - emailLanguage.toAdvancedOption(), - ) - } + ) } diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/NewTransferViewModel.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/NewTransferViewModel.kt index d43f7bcd72..87d90374bd 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/NewTransferViewModel.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/NewTransferViewModel.kt @@ -145,16 +145,16 @@ class NewTransferViewModel @Inject constructor( //region Transfer Advanced Options private val _selectedValidityPeriodOption = MutableStateFlow(null) - val selectedValidityPeriodOption: StateFlow = _selectedValidityPeriodOption + val selectedValidityPeriodOption: StateFlow = _selectedValidityPeriodOption.asStateFlow() private val _selectedDownloadLimitOption = MutableStateFlow(null) - val selectedDownloadLimitOption: StateFlow = _selectedDownloadLimitOption + val selectedDownloadLimitOption: StateFlow = _selectedDownloadLimitOption.asStateFlow() private val _selectedPasswordOption = MutableStateFlow(PasswordTransferOption.NONE) - val selectedPasswordOption: StateFlow = _selectedPasswordOption + val selectedPasswordOption: StateFlow = _selectedPasswordOption.asStateFlow() private val _selectedLanguageOption = MutableStateFlow(null) - val selectedLanguageOption: StateFlow = _selectedLanguageOption + val selectedLanguageOption: StateFlow = _selectedLanguageOption.asStateFlow() fun selectTransferValidityPeriod(validityPeriodOption: ValidityPeriodOption) { _selectedValidityPeriodOption.value = validityPeriodOption diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/ImportFilesScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/ImportFilesScreen.kt index 517ec69a8f..fc70d33a8e 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/ImportFilesScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/ImportFilesScreen.kt @@ -74,9 +74,29 @@ fun ImportFilesScreen( val emailLanguageState by newTransferViewModel.selectedLanguageOption.collectAsStateWithLifecycle() val appSettings by settingsViewModel.appSettingsFlow.collectAsStateWithLifecycle(null) + fun onAdvancedOptionsValueSelected(option: SettingOption) { + when (option) { + is ValidityPeriodOption -> newTransferViewModel.selectTransferValidityPeriod(option) + is DownloadLimitOption -> newTransferViewModel.selectTransferDownloadLimit(option) + is PasswordTransferOption -> newTransferViewModel.selectTransferPasswordOption(option) + is EmailLanguageOption -> newTransferViewModel.selectTransferLanguage(option) + } + } + appSettings?.let { safeAppSettings -> newTransferViewModel.initTransferAdvancedOptionsValues(safeAppSettings) + val advancedOptionsCallbacks = AdvancedOptionsCallbacks( + initialValues = SettingsViewModel.AppSettingsData( + validityPeriod = safeAppSettings.validityPeriod, + downloadLimit = safeAppSettings.downloadLimit, + passwordOption = PasswordTransferOption.NONE, + emailLanguage = safeAppSettings.emailLanguage, + ), + advancedOptionsStates = { listOf(validityPeriodState, downloadLimitState, passwordOptionState, emailLanguageState) }, + onAdvancedOptionsValueSelected = ::onAdvancedOptionsValueSelected, + ) + ImportFilesScreen( files = { files }, filesToImportCount = { filesToImportCount }, @@ -85,25 +105,7 @@ fun ImportFilesScreen( get = { selectedTransferType }, set = newTransferViewModel::selectTransferType, ), - advancedOptionsCallbacks = AdvancedOptionsCallbacks( - initialValues = SettingsViewModel.AppSettingsData( - validityPeriod = safeAppSettings.validityPeriod, - downloadLimit = safeAppSettings.downloadLimit, - passwordOption = PasswordTransferOption.NONE, - emailLanguage = safeAppSettings.emailLanguage, - ), - advancedOptionsStates = { - listOf(validityPeriodState, downloadLimitState, passwordOptionState, emailLanguageState) - }, - onAdvancedOptionsClicked = { option -> - when (option) { - is ValidityPeriodOption -> newTransferViewModel.selectTransferValidityPeriod(option) - is DownloadLimitOption -> newTransferViewModel.selectTransferDownloadLimit(option) - is PasswordTransferOption -> newTransferViewModel.selectTransferPasswordOption(option) - is EmailLanguageOption -> newTransferViewModel.selectTransferLanguage(option) - } - }, - ), + advancedOptionsCallbacks = advancedOptionsCallbacks, removeFileByUid = newTransferViewModel::removeFileByUid, addFiles = newTransferViewModel::importFiles, closeActivity = closeActivity, @@ -188,7 +190,6 @@ private fun ImportFilesScreen( TransferTypeButtons(selectedTransferType) ImportFilesTitle(Modifier.padding(vertical = Margin.Medium), titleRes = R.string.advancedSettingsTitle) TransferAdvancedSettings( - modifier = Modifier, states = advancedOptionsCallbacks.advancedOptionsStates, onClick = ::onAdvancedOptionClicked, ) @@ -196,28 +197,28 @@ private fun ImportFilesScreen( ValidityPeriodBottomSheet( isBottomSheetVisible = { showValidityPeriodBottomSheet }, - onOptionClicked = { advancedOptionsCallbacks.onAdvancedOptionsClicked(it) }, + onOptionClicked = { advancedOptionsCallbacks.onAdvancedOptionsValueSelected(it) }, closeBottomSheet = { showValidityPeriodBottomSheet = false }, initialPosition = advancedOptionsCallbacks.initialValues.validityPeriod.ordinal, ) DownloadLimitBottomSheet( isBottomSheetVisible = { showDownloadLimitBottomSheet }, - onOptionClicked = { advancedOptionsCallbacks.onAdvancedOptionsClicked(it) }, + onOptionClicked = { advancedOptionsCallbacks.onAdvancedOptionsValueSelected(it) }, closeBottomSheet = { showDownloadLimitBottomSheet = false }, initialPosition = advancedOptionsCallbacks.initialValues.downloadLimit.ordinal, ) PasswordOptionBottomSheet( isBottomSheetVisible = { showPasswordOptionBottomSheet }, - onOptionClicked = { advancedOptionsCallbacks.onAdvancedOptionsClicked(it) }, + onOptionClicked = { advancedOptionsCallbacks.onAdvancedOptionsValueSelected(it) }, closeBottomSheet = { showPasswordOptionBottomSheet = false }, initialPosition = advancedOptionsCallbacks.initialValues.passwordOption.ordinal, ) EmailLanguageBottomSheet( isBottomSheetVisible = { showEmailLanguageBottomSheet }, - onOptionClicked = { advancedOptionsCallbacks.onAdvancedOptionsClicked(it) }, + onOptionClicked = { advancedOptionsCallbacks.onAdvancedOptionsValueSelected(it) }, closeBottomSheet = { showEmailLanguageBottomSheet = false }, initialPosition = advancedOptionsCallbacks.initialValues.emailLanguage.ordinal, ) @@ -307,7 +308,7 @@ private fun ImportFilesTitle(modifier: Modifier = Modifier, @StringRes titleRes: data class AdvancedOptionsCallbacks( val initialValues: SettingsViewModel.AppSettingsData, val advancedOptionsStates: () -> List, - val onAdvancedOptionsClicked: (SettingOption) -> Unit, + val onAdvancedOptionsValueSelected: (SettingOption) -> Unit, ) enum class PasswordTransferOption( @@ -335,8 +336,15 @@ private fun ImportFilesScreenPreview(@PreviewParameter(FileUiListPreviewParamete passwordOption = PasswordTransferOption.NONE, emailLanguage = EmailLanguage.FRENCH, ), - advancedOptionsStates = { emptyList() }, - onAdvancedOptionsClicked = {}, + advancedOptionsStates = { + listOf( + ValidityPeriodOption.THIRTY, + DownloadLimitOption.TWO_HUNDRED_FIFTY, + PasswordTransferOption.NONE, + EmailLanguageOption.FRENCH, + ) + }, + onAdvancedOptionsValueSelected = {}, ), removeFileByUid = {}, addFiles = {}, diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/ValidityPeriodOptionBottomSheet.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/TransferOptionsBottomSheets.kt similarity index 95% rename from app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/ValidityPeriodOptionBottomSheet.kt rename to app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/TransferOptionsBottomSheets.kt index d4e52c0d50..c51d900193 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/ValidityPeriodOptionBottomSheet.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/TransferOptionsBottomSheets.kt @@ -34,7 +34,6 @@ import com.infomaniak.swisstransfer.ui.screen.main.settings.components.SingleSel import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme import com.infomaniak.swisstransfer.ui.utils.PreviewAllWindows - @Composable private fun TransferOptionBottomSheetScaffold( isBottomSheetVisible: () -> Boolean, @@ -95,7 +94,7 @@ fun DownloadLimitBottomSheet( initialPosition = initialPosition, titleRes = R.string.settingsOptionDownloadLimit, optionEntries = DownloadLimitOption.entries, - onOptionClicked = { onOptionClicked(it as DownloadLimitOption) }, + onOptionClicked = { onOptionClicked(it as DownloadLimitOption) }, ) } @@ -112,7 +111,7 @@ fun PasswordOptionBottomSheet( initialPosition = initialPosition, titleRes = R.string.settingsOptionPassword, optionEntries = PasswordTransferOption.entries, - onOptionClicked = { onOptionClicked(it as PasswordTransferOption) }, + onOptionClicked = { onOptionClicked(it as PasswordTransferOption) }, ) } @@ -129,7 +128,7 @@ fun EmailLanguageBottomSheet( initialPosition = initialPosition, titleRes = R.string.settingsOptionEmailLanguage, optionEntries = EmailLanguageOption.entries, - onOptionClicked = { onOptionClicked(it as EmailLanguageOption) }, + onOptionClicked = { onOptionClicked(it as EmailLanguageOption) }, ) }