27 lines
2.5 KiB
Markdown
27 lines
2.5 KiB
Markdown
# 📄 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.
|