2.1 KiB
2.1 KiB
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 oTimePickerDialoge adiciona o horário à lista se ainda não existir.Collections.sort(): Mantém os chips ordenados cronologicamente.refreshTimeChips(): Recria os chips noChipGroupsempre 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 campotimedo modeloMedication.
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
PendingIntentcorrespondentes para evitar alarmes "fantasma".
Compatibilidade
- O modelo
Medicationnã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+