3.2 KiB
3.2 KiB
🔐 Autenticação — Login e Registo
Pasta:
app/src/main/java/com/example/medcuida/pro/ui/auth/
LoginActivity.java (154 linhas)
Layout:
activity_login.xml
Descrição
Ecrã de entrada na aplicação. Permite login com email/password via Firebase Auth.
Inicialização (onCreate) — Linhas 34–78
- Auto-login: Se já existe sessão ativa → redireciona direto para
MainActivity - Campos: email e password (
TextInputEditText) - Botão "Entrar" →
attemptLogin() - Link "Registar" → abre
RegisterActivity - Link "Esqueci password":
- Valida se o email foi preenchido
- Envia email de recuperação via
mAuth.sendPasswordResetEmail()
attemptLogin() — Linhas 81–98
Validações antes de enviar ao Firebase:
- Email não pode estar vazio
- Password não pode estar vazia
loginUser() — Linhas 100–123
mAuth.signInWithEmailAndPassword(email, password)
- Desativa o botão (evita duplo clique) e mostra "A entrar..."
- Se login OK → chama
checkUserAccess() - Se falhar → mostra mensagem de erro e reativa o botão
checkUserAccess() — Linhas 125–152
Verifica se o utilizador tem perfil configurado (estratégia com fallback):
1º → Procura em 'medicos' → Se existe → Entrar na app
2º → Procura em 'utilizadores' → Se existe → Entrar na app
3º → Não encontrado → Erro + signOut
Se não encontrar em nenhuma coleção → faz signOut() e pede para registar.
RegisterActivity.java (187 linhas)
Layout:
activity_register_medico.xml
Descrição
Ecrã de registo de novos médicos. Cria conta no Firebase Auth e guarda dados no Firestore.
Campos do Formulário
| Campo | Tipo | Obrigatório | Validação |
|---|---|---|---|
| Nome completo | TextInputEditText |
✅ | Não vazio |
| Especialidade | TextInputEditText |
✅ | Não vazio |
| Género | AutoCompleteTextView |
✅ | Não vazio |
TextInputEditText |
✅ | Não vazio | |
| Password | TextInputEditText |
✅ | Mínimo 6 caracteres |
attemptRegister() — Linhas 75–118
Valida todos os campos sequencialmente. Se algum falhar, faz requestFocus() nesse campo.
registerUser() — Linhas 121–155
mAuth.createUserWithEmailAndPassword(email, password)
- Desativa o botão de registo
- Se criar conta OK → chama
saveMedicoData() - Caso especial — email já existe:
- Tenta fazer login com as credenciais fornecidas
- Se login OK → grava os dados (pode ter falhado antes)
- Se login falhar → mostra erro "email já registado"
saveMedicoData() — Linhas 157–185
Grava os dados do médico em duas coleções para compatibilidade:
Map<String, Object> medicoMap = new HashMap<>();
medicoMap.put("id", uid);
medicoMap.put("nome_completo", name);
medicoMap.put("email", email);
medicoMap.put("especialidade", specialty);
medicoMap.put("sexo", gender);
medicoMap.put("tipo", "medico");
| Coleção | Documento |
|---|---|
utilizadores/{uid} |
Dados principais |
medicos/{uid} |
Cópia para compatibilidade |
Após gravar com sucesso → redireciona para MainActivity.