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