Files
cuidamais_med/docs/codigo_detalhado/03_AgendaActivity_Codigo.md
2026-04-22 12:41:12 +01:00

2.5 KiB

📄 Análise de Código: AgendaActivity.java

O ficheiro app/src/main/java/com/example/medcuida/pro/AgendaActivity.java é usado como o ecrã de Calendário/Agenda em "ecrã inteiro", embora a MainActivity também incorpore parte desta vista. O objetivo primário é ver as consultas de um dia específico.

1. Variáveis e onCreate() (Linhas 28 - 94)

  • Tem um CalendarView e uma RecyclerView (que vai conter as listas das consultas).
  • A lógica do BottomNavigationView aqui está alterada: Se clicares em "Pacientes", ele não muda uma View interna (como faz na MainActivity); aqui, ele lança de facto um Intent para voltar para a MainActivity. Se clicares em "Perfil", ele lança a PerfilMedicoActivity.
  • Configura o ConsultaAdapter. Tem "listeners" para Aceitar, Eliminar ou Clicar (abre DetalhePacienteActivity).

2. Gestão do Calendário (Linhas 87 - 93)

  • A app usa um SimpleDateFormat no formato dd/MM/yyyy para saber o dia atual.
  • O calendarView.setOnDateChangeListener é acionado sempre que o médico toca num dia no ecrã. Ele refaz a string da data e chama loadConsultasForDate(selectedDate).

3. Pesquisa de Consultas loadConsultasForDate() (Linhas 96 - 153)

  • Retira a subscrição antiga (agendaListener.remove()) para não ficar com múltiplas consultas de dados abertas na memória.
  • Lê na coleção "consultas".
  • Em vez de fazer uma "Query" no Firestore por data, ele lê quase toda a coleção e filtra localmente no telemóvel (dentro do for(QueryDocumentSnapshot doc : value)).
  • Verifica se o id do médico logado (doctorId) está dentro do atributo medicos da consulta (que pode ser uma String solta ou uma Lista de Strings).
  • Depois, tenta ver se a data coincide. Se a consulta for cancelada, é ignorada.

4. Lógica de Alteração da Consulta (Linhas 155 - 171)

  • aceitarConsulta(): Pega no ID do documento e faz .update("status", "aceite"). O Firestore notifica o telemóvel de imediato graças ao SnapshotListener, e a consulta desaparece/muda de estado na lista sem ser necessário recarregar o ecrã.
  • eliminarConsulta(): Faz um .delete() duro na consulta.

5. Tratamento de Datas Sujas (Linhas 173 - 191)

Estes dois métodos, convertToISODate() e getAlternativeDate(), existem porque a base de dados pode ter lixo (datas como 4/5/2026 em vez de 04/05/2026, ou 2026-05-04). Este bloco garante que, independentemente de quem guardou a consulta, o ecrã mostra o dado na mesma.