3.9 KiB
3.9 KiB
📅 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)
CalendarView calendarView = findViewById(R.id.calendarView);
recyclerAgenda = findViewById(R.id.recycler_agenda);
textAgendaVazia = findViewById(R.id.text_agenda_vazia);
CalendarView→ Calendário nativo do AndroidRecyclerView→ Lista das consultasTextView→ Mensagem quando não há consultas
2. Bottom Navigation (Linhas 49–62)
bottomNav.setSelectedItemId(R.id.nav_agenda);
- Marca a tab "Agenda" como ativa
- Navegação para
MainActivity(Pacientes) ePerfilMedicoActivity(Perfil)
3. Configuração do Adapter (Linhas 64–80)
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
- Aceitar → muda o status para
- Clique no item → abre
DetalhePacienteActivity
4. Carregamento Inicial (Linhas 82–93)
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:
- Remove o listener anterior para evitar fugas de memória
- Escuta em tempo real toda a coleção
consultas - Para cada documento:
- Converte para
Consulta - Verifica se pertence ao médico:
Object med = c.getMedicos(); if (med instanceof String) { ... } else if (med instanceof List) { ... } - Filtra por data (suporta 3 formatos diferentes)
- Exclui consultas canceladas
- Converte para
- Atualiza o adapter e mostra/esconde a mensagem "vazia"
Ações nas Consultas — Linhas 155–171
aceitarConsulta(Consulta)
db.collection("consultas").document(consulta.getId())
.update("status", "aceite")
- Atualiza o status para
"aceite"no Firestore - Mostra toast de sucesso ou erro
eliminarConsulta(Consulta)
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
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]