diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsDurationValidityScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsDurationValidityScreen.kt
new file mode 100644
index 000000000..f61d89bc6
--- /dev/null
+++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsDurationValidityScreen.kt
@@ -0,0 +1,68 @@
+/*
+ * Infomaniak SwissTransfer - Android
+ * Copyright (C) 2024 Infomaniak Network SA
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package com.infomaniak.swisstransfer.ui.screen.main.settings
+
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material3.Surface
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableIntStateOf
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.res.pluralStringResource
+import com.infomaniak.swisstransfer.R
+import com.infomaniak.swisstransfer.ui.screen.main.settings.components.SettingOption
+import com.infomaniak.swisstransfer.ui.screen.main.settings.components.SettingTitle
+import com.infomaniak.swisstransfer.ui.screen.main.settings.components.SingleSelectOptions
+import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme
+import com.infomaniak.swisstransfer.ui.utils.PreviewMobile
+import com.infomaniak.swisstransfer.ui.utils.PreviewTablet
+
+@Composable
+fun SettingsValidityPeriodScreen() {
+ Column(modifier = Modifier.verticalScroll(rememberScrollState())) {
+ SettingTitle(titleRes = R.string.settingsValidityPeriodTitle)
+
+ val (selectedItem, setSelectedItem) = rememberSaveable { mutableIntStateOf(0) } // TODO: Use DataStore or Realm
+ SingleSelectOptions(ValidityPeriod.entries, { selectedItem }, setSelectedItem)
+ }
+}
+
+enum class ValidityPeriod(
+ override val title: @Composable () -> String,
+ override val icon: ImageVector? = null
+) : SettingOption {
+ THIRTY({ pluralStringResource(R.plurals.settingsValidityPeriodValue, 30, 30) }),
+ FIFTEEN({ pluralStringResource(R.plurals.settingsValidityPeriodValue, 15, 15) }),
+ SEVEN({ pluralStringResource(R.plurals.settingsValidityPeriodValue, 7, 7) }),
+ ONE({ pluralStringResource(R.plurals.settingsValidityPeriodValue, 1, 1) }),
+}
+
+@PreviewMobile
+@PreviewTablet
+@Composable
+private fun SettingsThemeScreenPreview() {
+ SwissTransferTheme {
+ Surface {
+ SettingsValidityPeriodScreen()
+ }
+ }
+}
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 f8fefb3be..cb264437b 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
@@ -80,7 +80,7 @@ fun SettingsScreenWrapper(
when (destination) {
THEME -> SettingsThemeScreen()
NOTIFICATIONS -> {}
- VALIDITY_PERIOD -> {}
+ VALIDITY_PERIOD -> SettingsValidityPeriodScreen()
DOWNLOAD_LIMIT -> {}
EMAIL_LANGUAGE -> {}
DISCOVER_INFOMANIAK -> {}
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 7d939e10f..f34ba7d3a 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
@@ -29,6 +29,7 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.res.stringResource
import com.infomaniak.swisstransfer.R
import com.infomaniak.swisstransfer.ui.icons.AppIcons
import com.infomaniak.swisstransfer.ui.icons.app.BlackAndWhiteCircle
@@ -51,10 +52,10 @@ fun SettingsThemeScreen() {
}
}
-enum class ThemeOption(override val title: Int, override val icon: ImageVector) : SettingOption {
- SYSTEM(R.string.settingsOptionThemeSystem, AppIcons.BlackAndWhiteCircle),
- LIGHT(R.string.settingsOptionThemeLight, AppIcons.WhiteCircle),
- DARK(R.string.settingsOptionThemeDark, AppIcons.BlackCircle),
+enum class ThemeOption(override val title: @Composable () -> String, override val icon: ImageVector) : SettingOption {
+ SYSTEM({ stringResource(R.string.settingsOptionThemeSystem) }, AppIcons.BlackAndWhiteCircle),
+ LIGHT({ stringResource(R.string.settingsOptionThemeLight) }, AppIcons.WhiteCircle),
+ DARK({ stringResource(R.string.settingsOptionThemeDark) }, AppIcons.BlackCircle),
}
@PreviewMobile
diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/SingleSelectOptions.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/SingleSelectOptions.kt
index 80175db1e..8f77bfc4a 100644
--- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/SingleSelectOptions.kt
+++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/SingleSelectOptions.kt
@@ -19,7 +19,6 @@
package com.infomaniak.swisstransfer.ui.screen.main.settings.components
import android.content.res.Configuration
-import androidx.annotation.StringRes
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.scaleIn
import androidx.compose.animation.scaleOut
@@ -72,7 +71,7 @@ private fun SettingOptionItem(item: SettingOption, isSelected: Boolean, onClick:
Spacer(modifier = Modifier.width(Margin.Medium))
}
- Text(text = stringResource(id = item.title), Modifier.weight(1f))
+ Text(text = item.title(), Modifier.weight(1f))
if (isSelected) Spacer(modifier = Modifier.width(Margin.Medium))
AnimatedVisibility(
@@ -91,8 +90,7 @@ private fun SettingOptionItem(item: SettingOption, isSelected: Boolean, onClick:
}
interface SettingOption {
- @get:StringRes
- val title: Int
+ val title: @Composable () -> String
val icon: ImageVector?
}
@@ -104,7 +102,7 @@ private fun SettingOptionItemPreview() {
Surface {
Column {
val item = object : SettingOption {
- override val title: Int = R.string.appName
+ override val title: @Composable () -> String = { stringResource(R.string.appName) }
override val icon: ImageVector = AppIcons.Add
}
SettingOptionItem(item, true) {}
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index d85f2e9bf..ac60d4a6c 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -29,6 +29,7 @@
Über
Standardeinstellungen
General
+ Wähle Sie eine Präferenz
Entdecken Sie Infomaniak
Limit für Downloads
Sprache der E-Mail
@@ -42,6 +43,11 @@
Dauer der Gültigkeit
Wähle ein Thema aus
Einstellungen
+ Legen Sie eine Standardgültigkeitsdauer für Ihre Überweisungen fest
+
+ - %d Tag
+ - %d Tage
+
E-Mail
Link
In der Nähe
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 5b559480f..34e6995eb 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -29,6 +29,7 @@
Quiénes somos
Ajustes por defecto
General
+ Seleccione una preferencia
Descubrir Infomaniak
Límite de descarga
Idioma del correo electrónico
@@ -42,6 +43,11 @@
Periodo de validez
Seleccione un tema
Parámetros
+ Establezca un periodo de validez por defecto para sus transferencias
+
+ - día %d
+ - %d días
+
Correo electrónico
Enlace
Proximidad
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 51ec27237..137275e24 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -29,6 +29,7 @@
A propos
Paramètres par défaut
Général
+ Sélectionne une préférence
Découvrir Infomaniak
Limite de téléchargements
Langue de l’e-mail
@@ -42,6 +43,11 @@
Durée de validité
Sélectionne un thème
Paramètres
+ Défini une durée de validité par défaut pour tes transferts
+
+ - %d jour
+ - %d jours
+
E-mail
Lien
A proximité
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 82b500c04..68f434995 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -29,6 +29,7 @@
Chi siamo
Impostazioni predefinite
Generale
+ Selezionare una preferenza
Scoprire Infomaniak
Limite di download
Lingua della posta elettronica
@@ -42,6 +43,11 @@
Periodo di validità
Seleziona un tema
Parametri
+ Imposta un periodo di validità predefinito per i trasferimenti
+
+ - %d giorno
+ - %d giorni
+
Email
Link
Vicino
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index afcec3610..fc365e084 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -32,6 +32,7 @@
About
Default settings
Général
+ Select a preference
Discover Infomaniak
Download limit
Email language
@@ -39,12 +40,17 @@
Notifications
Share your ideas
Theme
- Sombre
- Clair
- Système
+ Dark
+ Light
+ System
Validity period
Select a theme
Settings
+ Set a default validity period for your transfers
+
+ - %d day
+ - %d days
+
Email
Link
Proximity