45 lines
1.4 KiB
Markdown
45 lines
1.4 KiB
Markdown
# 💬 ChatActivity.java — Chat em Tempo Real
|
||
|
||
> **Ficheiro:** `app/src/main/java/com/example/medcuida/pro/ChatActivity.java`
|
||
> **Layout:** `activity_chat.xml` | **Linhas:** 120
|
||
|
||
---
|
||
|
||
## Descrição Geral
|
||
|
||
Sistema de **chat em tempo real** entre médico e paciente. As mensagens ficam numa **sub-coleção** do Firestore: `consultas/{consultaId}/mensagens/`.
|
||
|
||
---
|
||
|
||
## Inicialização (`onCreate`) — Linhas 39–78
|
||
|
||
1. **Verifica autenticação** — se não há utilizador, fecha a Activity
|
||
2. **Obtém dados via Intent:**
|
||
- `currentUserId` → UID do médico autenticado
|
||
- `consultaId` → ID da consulta (recebido da Activity anterior)
|
||
3. **Configura RecyclerView** com `setStackFromEnd(true)` (mensagens começam de baixo, como WhatsApp)
|
||
4. **Botão enviar** → chama `enviarMensagem()`
|
||
|
||
---
|
||
|
||
## `carregarMensagens()` — Linhas 80–103
|
||
|
||
```java
|
||
db.collection("consultas").document(consultaId).collection("mensagens")
|
||
.orderBy("timestamp", Query.Direction.ASCENDING)
|
||
.addSnapshotListener(...)
|
||
```
|
||
|
||
- Escuta em **tempo real** a sub-coleção `mensagens`
|
||
- Ordena por `timestamp` (mais antigas primeiro)
|
||
- Faz **scroll automático** para a última mensagem
|
||
|
||
---
|
||
|
||
## `enviarMensagem()` — Linhas 106–118
|
||
|
||
1. Lê o texto e valida (não envia se vazio)
|
||
2. Cria `Mensagem(texto, currentUserId, timestamp)`
|
||
3. Adiciona ao Firestore via `.add()`
|
||
4. Sucesso → limpa campo | Erro → mostra toast
|