2.3 KiB
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:
mAuthedbsã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 aMainActivity. - 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
emailEditTextepasswordEditText. - 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.
- Tenta ler o documento do utilizador na coleção
"medicos". - Se existir, é um médico; vai para a
MainActivity. - 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. - 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.