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

Implement validity period screen #32

Merged
merged 4 commits into from
Aug 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading