ja meti o droplist nos medicamentos
This commit is contained in:
34
documentacao_projecto/detalhes_medicamentos_multiplos.md
Normal file
34
documentacao_projecto/detalhes_medicamentos_multiplos.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# 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+*
|
||||
Reference in New Issue
Block a user