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

2.3 KiB

📄 Análise de Código: LoginActivity.java

Esta classe (app/src/main/java/com/example/medcuida/pro/ui/auth/LoginActivity.java) gere toda a entrada do médico no sistema.

1. Importações e Declarações (Linhas 1 - 33)

Importa elementos do Firebase (FirebaseAuth, FirebaseUser, FirebaseFirestore) e componentes da interface (TextInputEditText, MaterialButton).

2. Inicialização onCreate() (Linhas 34 - 79)

  • Instâncias Firebase: mAuth e db são inicializados.
  • Proteção de Sessão: Se mAuth.getCurrentUser() != null, significa que o utilizador já está logado. Ele nem sequer abre o ecrã; avança logo para a MainActivity.
  • Ligações da Interface: Mapeia botões (Login) e links (Registo, Recuperação de Pass) aos IDs do ficheiro XML.
  • Botão Recuperar Password: Se carregado, verifica se o campo do email não está vazio. Se estiver cheio, chama mAuth.sendPasswordResetEmail(email).

3. Tentativa de Login attemptLogin() (Linhas 81 - 98)

  • Puxa o texto dos inputs emailEditText e passwordEditText.
  • Valida os campos: se um deles estiver vazio, dá erro (setError) e foca o campo.
  • Passa as credenciais para o loginUser().

4. O Método loginUser() (Linhas 100 - 123)

  • Experiência de Utilizador (UX): Bloqueia o botão e muda o texto para "A entrar..." (assim evita que o médico clique duas vezes).
  • Faz a chamada ao Firebase: mAuth.signInWithEmailAndPassword().
  • Se Sucesso: Pega no UID gerado e atira-o para o checkUserAccess().
  • Se Falha: Mostra a mensagem de erro (Ex: "Password errada") e reativa o botão de login.

5. Validação de Papel (Role) checkUserAccess() (Linhas 125 - 153)

Como a base de dados tem tanto pacientes como médicos, este método é crucial para garantir que um "paciente" não entra na app dos médicos por engano.

  1. Tenta ler o documento do utilizador na coleção "medicos".
  2. Se existir, é um médico; vai para a MainActivity.
  3. Se não existir, tenta ler na coleção "utilizadores". Isto acontece porque em versões antigas/outras ramificações da app, os médicos também podem estar aí registados.
  4. Se também não estiver aí, avisa "Esta conta não tem perfil configurado" e faz sign out imediatamente, forçando o ecrã a ficar no Login.