Skip to content

Commit

Permalink
Merge pull request #32 from Infomaniak/settings-validity
Browse files Browse the repository at this point in the history
Implement validity period screen
  • Loading branch information
tevincent authored Aug 26, 2024
2 parents e528dd6 + 011212c commit 30eaa6d
Show file tree
Hide file tree
Showing 9 changed files with 110 additions and 13 deletions.
Original file line number Diff line number Diff line change
@@ -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 <http://www.gnu.org/licenses/>.
*/

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()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ fun SettingsScreenWrapper(
when (destination) {
THEME -> SettingsThemeScreen()
NOTIFICATIONS -> {}
VALIDITY_PERIOD -> {}
VALIDITY_PERIOD -> SettingsValidityPeriodScreen()
DOWNLOAD_LIMIT -> {}
EMAIL_LANGUAGE -> {}
DISCOVER_INFOMANIAK -> {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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(
Expand All @@ -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?
}

Expand All @@ -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) {}
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
<string name="settingsCategoryAbout">Über</string>
<string name="settingsCategoryDefaultSettings">Standardeinstellungen</string>
<string name="settingsCategoryGeneral">General</string>
<string name="settingsNotificationsTitle">Wähle Sie eine Präferenz</string>
<string name="settingsOptionDiscoverInfomaniak">Entdecken Sie Infomaniak</string>
<string name="settingsOptionDownloadLimit">Limit für Downloads</string>
<string name="settingsOptionEmailLanguage">Sprache der E-Mail</string>
Expand All @@ -42,6 +43,11 @@
<string name="settingsOptionValidityPeriod">Dauer der Gültigkeit</string>
<string name="settingsThemeTitle">Wähle ein Thema aus</string>
<string name="settingsTitle">Einstellungen</string>
<string name="settingsValidityPeriodTitle">Legen Sie eine Standardgültigkeitsdauer für Ihre Überweisungen fest</string>
<plurals name="settingsValidityPeriodValue">
<item quantity="one">%d Tag</item>
<item quantity="other">%d Tage</item>
</plurals>
<string name="transferTypeEmail">E-Mail</string>
<string name="transferTypeLink">Link</string>
<string name="transferTypeProximity">In der Nähe</string>
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/res/values-es/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
<string name="settingsCategoryAbout">Quiénes somos</string>
<string name="settingsCategoryDefaultSettings">Ajustes por defecto</string>
<string name="settingsCategoryGeneral">General</string>
<string name="settingsNotificationsTitle">Seleccione una preferencia</string>
<string name="settingsOptionDiscoverInfomaniak">Descubrir Infomaniak</string>
<string name="settingsOptionDownloadLimit">Límite de descarga</string>
<string name="settingsOptionEmailLanguage">Idioma del correo electrónico</string>
Expand All @@ -42,6 +43,11 @@
<string name="settingsOptionValidityPeriod">Periodo de validez</string>
<string name="settingsThemeTitle">Seleccione un tema</string>
<string name="settingsTitle">Parámetros</string>
<string name="settingsValidityPeriodTitle">Establezca un periodo de validez por defecto para sus transferencias</string>
<plurals name="settingsValidityPeriodValue">
<item quantity="one">día %d</item>
<item quantity="other">%d días</item>
</plurals>
<string name="transferTypeEmail">Correo electrónico</string>
<string name="transferTypeLink">Enlace</string>
<string name="transferTypeProximity">Proximidad</string>
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
<string name="settingsCategoryAbout">A propos</string>
<string name="settingsCategoryDefaultSettings">Paramètres par défaut</string>
<string name="settingsCategoryGeneral">Général</string>
<string name="settingsNotificationsTitle">Sélectionne une préférence</string>
<string name="settingsOptionDiscoverInfomaniak">Découvrir Infomaniak</string>
<string name="settingsOptionDownloadLimit">Limite de téléchargements</string>
<string name="settingsOptionEmailLanguage">Langue de l’e-mail</string>
Expand All @@ -42,6 +43,11 @@
<string name="settingsOptionValidityPeriod">Durée de validité</string>
<string name="settingsThemeTitle">Sélectionne un thème</string>
<string name="settingsTitle">Paramètres</string>
<string name="settingsValidityPeriodTitle">Défini une durée de validité par défaut pour tes transferts</string>
<plurals name="settingsValidityPeriodValue">
<item quantity="one">%d jour</item>
<item quantity="other">%d jours</item>
</plurals>
<string name="transferTypeEmail">E-mail</string>
<string name="transferTypeLink">Lien</string>
<string name="transferTypeProximity">A proximité</string>
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/res/values-it/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
<string name="settingsCategoryAbout">Chi siamo</string>
<string name="settingsCategoryDefaultSettings">Impostazioni predefinite</string>
<string name="settingsCategoryGeneral">Generale</string>
<string name="settingsNotificationsTitle">Selezionare una preferenza</string>
<string name="settingsOptionDiscoverInfomaniak">Scoprire Infomaniak</string>
<string name="settingsOptionDownloadLimit">Limite di download</string>
<string name="settingsOptionEmailLanguage">Lingua della posta elettronica</string>
Expand All @@ -42,6 +43,11 @@
<string name="settingsOptionValidityPeriod">Periodo di validità</string>
<string name="settingsThemeTitle">Seleziona un tema</string>
<string name="settingsTitle">Parametri</string>
<string name="settingsValidityPeriodTitle">Imposta un periodo di validità predefinito per i trasferimenti</string>
<plurals name="settingsValidityPeriodValue">
<item quantity="one">%d giorno</item>
<item quantity="other">%d giorni</item>
</plurals>
<string name="transferTypeEmail">Email</string>
<string name="transferTypeLink">Link</string>
<string name="transferTypeProximity">Vicino</string>
Expand Down
12 changes: 9 additions & 3 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,19 +32,25 @@
<string name="settingsCategoryAbout">About</string>
<string name="settingsCategoryDefaultSettings">Default settings</string>
<string name="settingsCategoryGeneral">Général</string>
<string name="settingsNotificationsTitle">Select a preference</string>
<string name="settingsOptionDiscoverInfomaniak">Discover Infomaniak</string>
<string name="settingsOptionDownloadLimit">Download limit</string>
<string name="settingsOptionEmailLanguage">Email language</string>
<string name="settingsOptionGiveFeedback">Give your opinion</string>
<string name="settingsOptionNotifications">Notifications</string>
<string name="settingsOptionShareIdeas">Share your ideas</string>
<string name="settingsOptionTheme">Theme</string>
<string name="settingsOptionThemeDark">Sombre</string>
<string name="settingsOptionThemeLight">Clair</string>
<string name="settingsOptionThemeSystem">Système</string>
<string name="settingsOptionThemeDark">Dark</string>
<string name="settingsOptionThemeLight">Light</string>
<string name="settingsOptionThemeSystem">System</string>
<string name="settingsOptionValidityPeriod">Validity period</string>
<string name="settingsThemeTitle">Select a theme</string>
<string name="settingsTitle">Settings</string>
<string name="settingsValidityPeriodTitle">Set a default validity period for your transfers</string>
<plurals name="settingsValidityPeriodValue">
<item quantity="one">%d day</item>
<item quantity="other">%d days</item>
</plurals>
<string name="transferTypeEmail">Email</string>
<string name="transferTypeLink">Link</string>
<string name="transferTypeProximity">Proximity</string>
Expand Down

0 comments on commit 30eaa6d

Please sign in to comment.