diff --git a/CalendarComponents/EventDetail/src/main/kotlin/com/infomaniak/calendar/components/eventdetail/form/EventForm.kt b/CalendarComponents/EventDetail/src/main/kotlin/com/infomaniak/calendar/components/eventdetail/form/EventForm.kt index 6de85f08a..cc9703638 100644 --- a/CalendarComponents/EventDetail/src/main/kotlin/com/infomaniak/calendar/components/eventdetail/form/EventForm.kt +++ b/CalendarComponents/EventDetail/src/main/kotlin/com/infomaniak/calendar/components/eventdetail/form/EventForm.kt @@ -25,8 +25,12 @@ import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateSetOf import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -40,6 +44,7 @@ import com.infomaniak.calendar.components.eventdetail.component.Section import com.infomaniak.calendar.components.eventdetail.component.TitleEditable import com.infomaniak.calendar.components.eventdetail.form.component.AddReminderButton import com.infomaniak.calendar.components.eventdetail.form.component.AllDaySwitch +import com.infomaniak.calendar.components.eventdetail.form.component.ReminderOffsetDialog import com.infomaniak.calendar.components.eventdetail.models.EventColorChoice import com.infomaniak.calendar.components.eventdetail.modifier.EventSharedElement import com.infomaniak.calendar.components.eventdetail.modifier.ProvideEventSharedTransition @@ -100,7 +105,18 @@ fun EventForm( } Section(EventSharedElement.Divider3) { - AddReminderButton(onClick = {}) + var isReminderOffsetDialogVisible by rememberSaveable { mutableStateOf(false) } + + AddReminderButton(onClick = { isReminderOffsetDialogVisible = true }) + + if (isReminderOffsetDialogVisible) { + ReminderOffsetDialog( + selectedOffset = null, + onOffsetSelect = { isReminderOffsetDialogVisible = false }, // TODO: Wire the selected offset to the event reminders + onCustomClick = {}, // TODO: Open the custom reminder editor + onDismissRequest = { isReminderOffsetDialogVisible = false }, + ) + } } Section(EventSharedElement.Divider4) { diff --git a/CalendarComponents/EventDetail/src/main/kotlin/com/infomaniak/calendar/components/eventdetail/form/component/ReminderOffsetDialog.kt b/CalendarComponents/EventDetail/src/main/kotlin/com/infomaniak/calendar/components/eventdetail/form/component/ReminderOffsetDialog.kt new file mode 100644 index 000000000..8925d3af0 --- /dev/null +++ b/CalendarComponents/EventDetail/src/main/kotlin/com/infomaniak/calendar/components/eventdetail/form/component/ReminderOffsetDialog.kt @@ -0,0 +1,104 @@ +/* + * Infomaniak Calendar - Android + * Copyright (C) 2026 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.calendar.components.eventdetail.form.component + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.selection.selectableGroup +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.AlertDialogDefaults +import androidx.compose.material3.BasicAlertDialog +import androidx.compose.material3.ListItem +import androidx.compose.material3.ListItemDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.RadioButton +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import com.infomaniak.calendar.components.foundation.utils.timeFormatter.formatDurationOffset +import com.infomaniak.calendar.components.resources.R +import com.infomaniak.designsystem.core.theme.EsdsTheme +import kotlin.time.Duration +import kotlin.time.Duration.Companion.days +import kotlin.time.Duration.Companion.hours +import kotlin.time.Duration.Companion.minutes + +private val reminderOffsetPresets = listOf( + null, + Duration.ZERO, + (-5).minutes, + (-10).minutes, + (-15).minutes, + (-30).minutes, + (-1).hours, + (-1).days, +) + +@Composable +internal fun ReminderOffsetDialog( + selectedOffset: Duration?, + onOffsetSelect: (offset: Duration?) -> Unit, + onCustomClick: () -> Unit, + onDismissRequest: () -> Unit, +) { + BasicAlertDialog(onDismissRequest = onDismissRequest) { + Surface( + shape = AlertDialogDefaults.shape, + color = AlertDialogDefaults.containerColor, + tonalElevation = AlertDialogDefaults.TonalElevation, + ) { + Column( + Modifier + .selectableGroup() + .verticalScroll(rememberScrollState()) + .padding(EsdsTheme.spacing.md), + ) { + val colors = ListItemDefaults.colors(containerColor = AlertDialogDefaults.containerColor) + + reminderOffsetPresets.forEach { offset -> + val isSelected = offset == selectedOffset + + ListItem( + selected = isSelected, + onClick = { onOffsetSelect(offset) }, + trailingContent = { RadioButton(selected = isSelected, onClick = null) }, + colors = colors, + ) { + offset?.let { Text(it.formatDurationOffset()) } ?: Text(stringResource(R.string.alarmOffsetNone)) + } + } + + ListItem(onClick = onCustomClick, colors = colors) { + Text(stringResource(R.string.customAlarmLabel)) + } + } + } + } +} + +@Preview +@Composable +private fun Preview() { + MaterialTheme { + ReminderOffsetDialog(selectedOffset = null, onOffsetSelect = {}, onCustomClick = {}, onDismissRequest = {}) + } +} diff --git a/CalendarComponents/Resources/src/main/res/values-da/strings.xml b/CalendarComponents/Resources/src/main/res/values-da/strings.xml index 937c049f0..8b6e4c8d7 100644 --- a/CalendarComponents/Resources/src/main/res/values-da/strings.xml +++ b/CalendarComponents/Resources/src/main/res/values-da/strings.xml @@ -17,6 +17,7 @@ --> Tilføj + Ingen Hele dagen Deltagere @@ -53,6 +54,7 @@ Har en placering Søg I dag + Brugerdefineret %d dag %d dage diff --git a/CalendarComponents/Resources/src/main/res/values-de/strings.xml b/CalendarComponents/Resources/src/main/res/values-de/strings.xml index 01746f1de..ec5fd646d 100644 --- a/CalendarComponents/Resources/src/main/res/values-de/strings.xml +++ b/CalendarComponents/Resources/src/main/res/values-de/strings.xml @@ -17,6 +17,7 @@ --> Hinzufügen + Keine Den ganzen Tag Teilnehmer @@ -53,6 +54,7 @@ Hat einen Standort Suchen Heute + Benutzerdefiniert %d Tag %d Tage diff --git a/CalendarComponents/Resources/src/main/res/values-el/strings.xml b/CalendarComponents/Resources/src/main/res/values-el/strings.xml index 0eb8ef5ae..7f2b4932a 100644 --- a/CalendarComponents/Resources/src/main/res/values-el/strings.xml +++ b/CalendarComponents/Resources/src/main/res/values-el/strings.xml @@ -17,6 +17,7 @@ --> Προσθήκη + Καμία Όλη την ημέρα Συμμετέχοντες @@ -53,6 +54,7 @@ Έχει τοποθεσία Αναζήτηση Σήμερα + Προσαρμοσμένο %d ημέρα %d ημέρες diff --git a/CalendarComponents/Resources/src/main/res/values-es/strings.xml b/CalendarComponents/Resources/src/main/res/values-es/strings.xml index 2f085ff97..869a48362 100644 --- a/CalendarComponents/Resources/src/main/res/values-es/strings.xml +++ b/CalendarComponents/Resources/src/main/res/values-es/strings.xml @@ -17,6 +17,7 @@ --> Añadir + Ninguna Todo el día Invitados @@ -53,6 +54,7 @@ Tiene una ubicación Buscar Hoy + Personalizado %d día %d días diff --git a/CalendarComponents/Resources/src/main/res/values-fi/strings.xml b/CalendarComponents/Resources/src/main/res/values-fi/strings.xml index 5a7240484..27de4842d 100644 --- a/CalendarComponents/Resources/src/main/res/values-fi/strings.xml +++ b/CalendarComponents/Resources/src/main/res/values-fi/strings.xml @@ -17,6 +17,7 @@ --> Lisää + Ei mitään Koko päivän Osallistujat @@ -53,6 +54,7 @@ On sijainti Haku Tänään + Mukautettu %d päivä %d päivää diff --git a/CalendarComponents/Resources/src/main/res/values-fr/strings.xml b/CalendarComponents/Resources/src/main/res/values-fr/strings.xml index d0ac0dd7d..6506d3d24 100644 --- a/CalendarComponents/Resources/src/main/res/values-fr/strings.xml +++ b/CalendarComponents/Resources/src/main/res/values-fr/strings.xml @@ -17,6 +17,7 @@ --> Ajouter + Aucun Journée Invités @@ -53,6 +54,7 @@ A un emplacement Rechercher Aujourd’hui + Personnalisé %d jour %d jours diff --git a/CalendarComponents/Resources/src/main/res/values-it/strings.xml b/CalendarComponents/Resources/src/main/res/values-it/strings.xml index afdaea467..dbc33e2c4 100644 --- a/CalendarComponents/Resources/src/main/res/values-it/strings.xml +++ b/CalendarComponents/Resources/src/main/res/values-it/strings.xml @@ -17,6 +17,7 @@ --> Aggiungi + Nessuno Tutto il giorno Invitati @@ -53,6 +54,7 @@ Ha una sede Cerca Oggi + Personalizzato %d giorno %d giorni diff --git a/CalendarComponents/Resources/src/main/res/values-nb/strings.xml b/CalendarComponents/Resources/src/main/res/values-nb/strings.xml index cdf715e17..5fe5fb68d 100644 --- a/CalendarComponents/Resources/src/main/res/values-nb/strings.xml +++ b/CalendarComponents/Resources/src/main/res/values-nb/strings.xml @@ -17,6 +17,7 @@ --> Legg til + Ingen Hele dagen Deltakere @@ -53,6 +54,7 @@ Har en beliggenhet Søk I dag + Egendefinert %d dag %d dager diff --git a/CalendarComponents/Resources/src/main/res/values-nl/strings.xml b/CalendarComponents/Resources/src/main/res/values-nl/strings.xml index aca3784ad..62049234f 100644 --- a/CalendarComponents/Resources/src/main/res/values-nl/strings.xml +++ b/CalendarComponents/Resources/src/main/res/values-nl/strings.xml @@ -17,6 +17,7 @@ --> Toevoegen + Geen De hele dag Deelnemers @@ -53,6 +54,7 @@ Heeft een locatie Zoeken Vandaag + Aangepast %d dag %d dagen diff --git a/CalendarComponents/Resources/src/main/res/values-pl/strings.xml b/CalendarComponents/Resources/src/main/res/values-pl/strings.xml index ea64ca002..1f933d370 100644 --- a/CalendarComponents/Resources/src/main/res/values-pl/strings.xml +++ b/CalendarComponents/Resources/src/main/res/values-pl/strings.xml @@ -17,6 +17,7 @@ --> Dodaj + Brak Przez cały dzień Uczestnicy @@ -65,6 +66,7 @@ Ma lokalizację Szukaj Dziś + Niestandardowe %d dzień %d dni diff --git a/CalendarComponents/Resources/src/main/res/values-pt/strings.xml b/CalendarComponents/Resources/src/main/res/values-pt/strings.xml index f2854fefd..77d6d4925 100644 --- a/CalendarComponents/Resources/src/main/res/values-pt/strings.xml +++ b/CalendarComponents/Resources/src/main/res/values-pt/strings.xml @@ -17,6 +17,7 @@ --> Adicionar + Nenhum O dia todo Convidados @@ -53,6 +54,7 @@ Tem uma localização Pesquisar Hoje + Personalizado %d dia %d dias diff --git a/CalendarComponents/Resources/src/main/res/values-sv/strings.xml b/CalendarComponents/Resources/src/main/res/values-sv/strings.xml index efad674a0..35a005ef0 100644 --- a/CalendarComponents/Resources/src/main/res/values-sv/strings.xml +++ b/CalendarComponents/Resources/src/main/res/values-sv/strings.xml @@ -17,6 +17,7 @@ --> Lägg till + Ingen Hela dagen Deltagare @@ -53,6 +54,7 @@ Har en plats Sök Idag + Anpassad %d dag %d dagar diff --git a/CalendarComponents/Resources/src/main/res/values/strings.xml b/CalendarComponents/Resources/src/main/res/values/strings.xml index 1c9ead37c..556018c4c 100644 --- a/CalendarComponents/Resources/src/main/res/values/strings.xml +++ b/CalendarComponents/Resources/src/main/res/values/strings.xml @@ -17,6 +17,7 @@ --> Add + None All Day Attendees @@ -53,6 +54,7 @@ Has a location Search Today + Custom %d day %d days