Files
cuidamais/documentacao_projecto/detalhes_medicamentos_multiplos.md

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 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+