Files
cuidamais_med/docs/02_AgendaActivity.md
2026-04-22 12:41:12 +01:00

137 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 📅 AgendaActivity.java — Ecrã de Agenda
> **Ficheiro:** `app/src/main/java/com/example/medcuida/pro/AgendaActivity.java`
> **Layout:** `activity_agenda.xml`
> **Linhas de código:** 192
---
## Descrição Geral
A `AgendaActivity` é um **ecrã dedicado à gestão da agenda do médico**. Mostra um calendário interativo e, abaixo dele, a lista de consultas para o dia selecionado.
> ⚠️ Esta Activity funciona de forma **semelhante à tab Agenda do MainActivity**, mas é uma Activity separada, acessível a partir de outras partes da app.
---
## Inicialização (`onCreate`) — Linhas 3693
### 1. Configuração dos Componentes (Linhas 4348)
```java
CalendarView calendarView = findViewById(R.id.calendarView);
recyclerAgenda = findViewById(R.id.recycler_agenda);
textAgendaVazia = findViewById(R.id.text_agenda_vazia);
```
- `CalendarView` → Calendário nativo do Android
- `RecyclerView` → Lista das consultas
- `TextView` → Mensagem quando não há consultas
### 2. Bottom Navigation (Linhas 4962)
```java
bottomNav.setSelectedItemId(R.id.nav_agenda);
```
- Marca a tab "Agenda" como ativa
- Navegação para `MainActivity` (Pacientes) e `PerfilMedicoActivity` (Perfil)
### 3. Configuração do Adapter (Linhas 6480)
```java
adapter = new ConsultaAdapter(
new ConsultaAdapter.OnConsultaActionClickListener() {
void onAceitarClick(Consulta consulta) { aceitarConsulta(consulta); }
void onEliminarClick(Consulta consulta) { eliminarConsulta(consulta); }
},
consulta -> { /* abrir detalhes */ }
);
```
- Implementa dois callbacks:
- **Aceitar** → muda o status para `"aceite"`
- **Eliminar** → remove a consulta do Firestore
- Clique no item → abre `DetalhePacienteActivity`
### 4. Carregamento Inicial (Linhas 8293)
```java
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
loadConsultasForDate(sdf.format(new Date()));
```
- Obtém o UID do médico autenticado
- Carrega as consultas de **hoje**
- Configura o listener do calendário para mudar de dia
---
## Carregamento de Consultas — Linhas 96153
### `loadConsultasForDate(String dateStr)`
**Passo a passo:**
1. **Remove o listener anterior** para evitar fugas de memória
2. **Escuta em tempo real** toda a coleção `consultas`
3. Para cada documento:
- Converte para `Consulta`
- **Verifica se pertence ao médico:**
```java
Object med = c.getMedicos();
if (med instanceof String) { ... }
else if (med instanceof List) { ... }
```
- **Filtra por data** (suporta 3 formatos diferentes)
- **Exclui consultas canceladas**
4. Atualiza o adapter e mostra/esconde a mensagem "vazia"
---
## Ações nas Consultas — Linhas 155171
### `aceitarConsulta(Consulta)`
```java
db.collection("consultas").document(consulta.getId())
.update("status", "aceite")
```
- Atualiza o status para `"aceite"` no Firestore
- Mostra toast de sucesso ou erro
### `eliminarConsulta(Consulta)`
```java
db.collection("consultas").document(consulta.getId())
.delete()
```
- **Apaga permanentemente** a consulta do Firestore
- Mostra toast de sucesso ou erro
---
## Métodos Auxiliares de Data — Linhas 173190
### `convertToISODate(String ddMMyyyy)`
| Entrada | Saída |
|---|---|
| `"22/04/2026"` | `"2026-04-22"` |
### `getAlternativeDate(String paddedDate)`
| Entrada | Saída |
|---|---|
| `"01/04/2026"` | `"1/4/2026"` |
> Estes métodos existem porque os dados no Firestore podem ter formatos de data inconsistentes.
---
## Diagrama de Fluxo
```mermaid
graph TD
A[onCreate] --> B[Configurar CalendarView]
A --> C[Configurar RecyclerView]
A --> D[Carregar consultas de hoje]
B -->|Mudar data| E[loadConsultasForDate]
E --> F{Consultas encontradas?}
F -->|Sim| G[Mostrar lista]
F -->|Não| H[Mostrar 'Sem consultas']
G -->|Aceitar| I[Atualizar status Firestore]
G -->|Eliminar| J[Apagar do Firestore]
G -->|Clicar| K[Abrir DetalhePaciente]
```