35 lines
2.1 KiB
Markdown
35 lines
2.1 KiB
Markdown
# Detalhes da Implementação: Múltiplos Horários de Medicamentos
|
|
|
|
Este documento detalha as mudanças técnicas feitas em 15 de Abril de 2026 para suportar múltiplos horários num único medicamento.
|
|
|
|
## Motivação
|
|
Anteriormente, cada medicamento podia ter apenas um horário (ex: "08:00"). Se o utilizador precisasse de tomar o mesmo comprimido de 8 em 8 horas, teria de criar 3 entradas separadas. Agora, uma única entrada suporta todos os horários.
|
|
|
|
## Alterações Técnicas
|
|
|
|
### 1. Layout (`dialog_add_medication.xml`)
|
|
- **Removido:** `TextView (text_med_time)` que exibia o horário fixo.
|
|
- **Adicionado:**
|
|
- `ChipGroup (chip_group_times)` para exibir dinamicamente os horários selecionados.
|
|
- `MaterialButton (btn_add_time)` com texto "Adicionar" para abrir o seletor.
|
|
|
|
### 2. Diálogo (`MedicationDialog.java`)
|
|
- **Estado:** Agora guarda uma `List<String> selectedTimes`.
|
|
- **Lógica de Seleção:**
|
|
- `showTimePicker()`: Abre o `TimePickerDialog` e adiciona o horário à lista se ainda não existir.
|
|
- `Collections.sort()`: Mantém os chips ordenados cronologicamente.
|
|
- `refreshTimeChips()`: Recria os chips no `ChipGroup` sempre que a lista muda.
|
|
- **Persistência:** No momento de guardar, a lista de horários é unida por vírgulas (ex: `"08:00, 14:00, 20:00"`) no campo `time` do modelo `Medication`.
|
|
|
|
### 3. Fragmento e Alarmes (`MedicationFragment.java`)
|
|
- **Agendamento:** Quando um medicamento é guardado, o código faz o `split(",\\s*")` na string de horários e percorre cada um.
|
|
- **IDs de Alarme Únicos:** Para cada horário, gera um ID único usando `(nome + horario).hashCode()`. Isso evita que um alarme substitua o outro.
|
|
- **Limpeza:** Antes de atualizar ou ao eliminar, o sistema percorre os horários antigos e cancela todos os `PendingIntent` correspondentes para evitar alarmes "fantasma".
|
|
|
|
## Compatibilidade
|
|
- O modelo `Medication` não precisou de alteração de campo, mantendo a compatibilidade com a base de dados Firestore atual.
|
|
- A lista principal (`MedicationAdapter`) apenas exibe a string combinada, o que é visualmente limpo para o utilizador.
|
|
|
|
---
|
|
*Documentação técnica de implementação - Cuida+*
|