falta so o chat

This commit is contained in:
2026-04-22 12:41:12 +01:00
parent 96d1985998
commit 2f3b03fe05
444 changed files with 22203 additions and 20079 deletions

View File

@@ -0,0 +1,30 @@
# 📄 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.