Skip to content

Commit

Permalink
Implementation of the validity period screen
Browse files Browse the repository at this point in the history
  • Loading branch information
tevincent committed Aug 26, 2024
1 parent e528dd6 commit ed5cb8a
Show file tree
Hide file tree
Showing 9 changed files with 85 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.MutuallyExclusiveOptions
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.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
MutuallyExclusiveOptions(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.invoke(), 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
1 change: 1 addition & 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 Down
1 change: 1 addition & 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 Down
1 change: 1 addition & 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 Down
1 change: 1 addition & 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 Down
7 changes: 4 additions & 3 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,17 @@
<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>
Expand Down

0 comments on commit ed5cb8a

Please sign in to comment.