# 📅 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 36–93 ### 1. Configuração dos Componentes (Linhas 43–48) ```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 49–62) ```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 64–80) ```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 82–93) ```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 96–153 ### `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 155–171 ### `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 173–190 ### `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] ```