31 lines
2.3 KiB
Markdown
31 lines
2.3 KiB
Markdown
# 📄 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.
|