first commit
This commit is contained in:
138
app/src/main/java/com/example/pap/ChatActivity.java
Normal file
138
app/src/main/java/com/example/pap/ChatActivity.java
Normal file
@@ -0,0 +1,138 @@
|
||||
package com.example.pap;
|
||||
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.GradientDrawable;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ScrollView;
|
||||
import android.widget.TextView;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
public class ChatActivity extends AppCompatActivity {
|
||||
|
||||
private LinearLayout chatLayout;
|
||||
private ScrollView chatScrollView;
|
||||
private EditText etNovaMensagem;
|
||||
private Button btnEnviarMensagem;
|
||||
private Button btnVoltarChat;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_chat);
|
||||
|
||||
// 1. Associar os componentes do layout
|
||||
chatLayout = findViewById(R.id.chatLayout);
|
||||
chatScrollView = findViewById(R.id.chatScrollView);
|
||||
etNovaMensagem = findViewById(R.id.etNovaMensagem);
|
||||
btnEnviarMensagem = findViewById(R.id.btnEnviarMensagem);
|
||||
btnVoltarChat = findViewById(R.id.btnVoltarChat);
|
||||
|
||||
// Mensagem inicial da IA ao abrir o ecrã
|
||||
adicionarMensagemBalao("Olá! Sou o teu IA Coach de Saúde. Como te posso ajudar hoje na tua jornada de emagrecimento?", false);
|
||||
|
||||
// 2. Clique no botão de Enviar
|
||||
btnEnviarMensagem.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
String mensagemUser = etNovaMensagem.getText().toString().trim();
|
||||
|
||||
if (!mensagemUser.isEmpty()) {
|
||||
// Adiciona a mensagem do utilizador no ecrã
|
||||
adicionarMensagemBalao(mensagemUser, true);
|
||||
|
||||
// Limpa a caixa de texto
|
||||
etNovaMensagem.setText("");
|
||||
|
||||
// Simula a IA a processar e a responder
|
||||
simularRespostaDaIA(mensagemUser);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 3. Clique no botão de Voltar
|
||||
btnVoltarChat.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Passo 3: Função para desenhar os balões de conversa no ecrã
|
||||
private void adicionarMensagemBalao(String texto, boolean isUser) {
|
||||
TextView textView = new TextView(this);
|
||||
textView.setText(texto);
|
||||
textView.setTextSize(16f);
|
||||
textView.setPadding(32, 24, 32, 24);
|
||||
|
||||
// Configurar as margens e o alinhamento (Direita = Utilizador, Esquerda = IA)
|
||||
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.WRAP_CONTENT,
|
||||
LinearLayout.LayoutParams.WRAP_CONTENT
|
||||
);
|
||||
params.setMargins(0, 16, 0, 16);
|
||||
|
||||
// Configurar o design arredondado do balão
|
||||
GradientDrawable background = new GradientDrawable();
|
||||
background.setCornerRadius(32f);
|
||||
|
||||
if (isUser) {
|
||||
// Estilo do Utilizador (Fundo Verde, Texto Branco, Alinhado à direita)
|
||||
params.gravity = Gravity.END;
|
||||
background.setColor(Color.parseColor("#4CAF50"));
|
||||
textView.setTextColor(Color.WHITE);
|
||||
} else {
|
||||
// Estilo da IA (Fundo Cinza/Branco, Texto Escuro, Alinhado à esquerda)
|
||||
params.gravity = Gravity.START;
|
||||
background.setColor(Color.parseColor("#FFFFFF"));
|
||||
textView.setTextColor(Color.parseColor("#2E3D32"));
|
||||
textView.setElevation(4f); // Dá uma pequena sombra ao balão da IA
|
||||
}
|
||||
|
||||
textView.setLayoutParams(params);
|
||||
textView.setBackground(background);
|
||||
|
||||
// Adicionar o balão ao ecrã
|
||||
chatLayout.addView(textView);
|
||||
|
||||
// Fazer scroll automático para baixo para ver a nova mensagem
|
||||
chatScrollView.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
chatScrollView.fullScroll(ScrollView.FOCUS_DOWN);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Passo 4: Função para simular a inteligência da IA
|
||||
private void simularRespostaDaIA(String perguntaUtilizador) {
|
||||
perguntaUtilizador = perguntaUtilizador.toLowerCase();
|
||||
final String resposta;
|
||||
|
||||
// Regras simples para fingir que a IA está a entender a pergunta
|
||||
if (perguntaUtilizador.contains("água") || perguntaUtilizador.contains("agua")) {
|
||||
resposta = "A hidratação é fundamental! O ideal é beberes pelo menos 2 a 3 litros de água por dia. Já bebeste algum copo hoje?";
|
||||
} else if (perguntaUtilizador.contains("comer") || perguntaUtilizador.contains("fome") || perguntaUtilizador.contains("dieta")) {
|
||||
resposta = "Se sentires fome entre as refeições, opta por snacks saudáveis como uma peça de fruta ou um punhado de frutos secos. Evita os doces!";
|
||||
} else if (perguntaUtilizador.contains("treino") || perguntaUtilizador.contains("exercício") || perguntaUtilizador.contains("correr")) {
|
||||
resposta = "Excelente! O exercício acelera o metabolismo. Lembra-te que a consistência é mais importante do que a intensidade. 30 minutos de caminhada já fazem a diferença.";
|
||||
} else {
|
||||
resposta = "Essa é uma ótima questão! O segredo do emagrecimento é o défice calórico aliado a bons hábitos. Continua focado, estou aqui para te apoiar em cada passo!";
|
||||
}
|
||||
|
||||
// Simular um tempo de "pensamento" da IA (espera 1.5 segundos antes de mostrar a resposta)
|
||||
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
adicionarMensagemBalao(resposta, false);
|
||||
}
|
||||
}, 1500);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user