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

3.9 KiB
Raw Blame History

📅 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)

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)

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)

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)

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:
      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)

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 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

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]