2.5 KiB
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
CalendarViewe umaRecyclerView(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 umIntentpara voltar para aMainActivity. Se clicares em "Perfil", ele lança aPerfilMedicoActivity. - Configura o
ConsultaAdapter. Tem "listeners" para Aceitar, Eliminar ou Clicar (abreDetalhePacienteActivity).
2. Gestão do Calendário (Linhas 87 - 93)
- A app usa um
SimpleDateFormatno formatodd/MM/yyyypara 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 chamaloadConsultasForDate(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 atributomedicosda 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 aoSnapshotListener, 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.