package com.example.lifegrid; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import android.util.Patterns; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.Toast; import com.example.lifegrid.utils.CustomToast; import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; import com.google.firebase.FirebaseApp; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; /** * CriarContaActivity é a atividade responsável por gerir o registo de novos utilizadores na aplicação LifeGrid. * Permite a criação de conta utilizando Email/Password e validações de formulário. * Também suporta registo integrado via conta Google. */ public class CriarContaActivity extends AppCompatActivity { private EditText nomeEditText; private EditText emailEditText2; private EditText passwordEditText3; private EditText passwordEditText2; private Button loginButton2; private ProgressBar loadingProgressBar; private FirebaseAuth firebaseAuth; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EdgeToEdge.enable(this); setContentView(R.layout.activity_criar_conta); ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); nomeEditText = findViewById(R.id.emailEditText3); emailEditText2 = findViewById(R.id.emailEditText2); passwordEditText3 = findViewById(R.id.passwordEditText3); passwordEditText2 = findViewById(R.id.passwordEditText2); loginButton2 = findViewById(R.id.loginButton2); loadingProgressBar = findViewById(R.id.loadingProgressBar); FirebaseApp.initializeApp(this); firebaseAuth = FirebaseAuth.getInstance(); // Configura o botão de registo para acionar a validação e criação de conta loginButton2.setOnClickListener(v -> criarConta()); ImageView btnBack = findViewById(R.id.btnBack); btnBack.setOnClickListener(v -> finish()); } /** * Extrai os dados dos campos de texto, chama o método de validação, * e caso os dados estejam corretos, regista o utilizador no Firebase Auth. */ private void criarConta() { String nome = nomeEditText.getText().toString().trim(); String email = emailEditText2.getText().toString().trim(); String password = passwordEditText3.getText().toString(); String confirmarPassword = passwordEditText2.getText().toString(); if (!validarDados(nome, email, password, confirmarPassword)) { return; } toggleLoading(true); firebaseAuth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this, task -> { toggleLoading(false); if (task.isSuccessful()) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) { // Conta criada com sucesso - redirecionar para TelaInicialActivity CustomToast.success(this, "Conta criada com sucesso! Bem-vindo, " + nome); // Redirecionar para TelaInicialActivity apenas após sucesso Intent intent = new Intent(CriarContaActivity.this, TelaInicialActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); finish(); // Fechar esta atividade } } else { // Erro ao criar conta - mostrar mensagem de erro String errorMessage = "Erro ao criar conta."; if (task.getException() != null) { errorMessage = task.getException().getMessage(); // Traduzir alguns erros comuns para português if (errorMessage.contains("email address is already in use")) { errorMessage = "Este email já está em uso. Por favor, use outro email."; } else if (errorMessage.contains("network")) { errorMessage = "Erro de conexão. Verifique sua internet."; } else if (errorMessage.contains("weak password")) { errorMessage = "Palavra-passe muito fraca. Use uma palavra-passe mais forte."; } } CustomToast.error(this, errorMessage); } }); } /** * Valida os diferentes campos do formulário para garantir que estão preenchidos * corretamente (tamanho e formato do email) antes de tentar comunicar com o Firebase. */ private boolean validarDados(String nome, String email, String password, String confirmarPassword) { // Validar nome if (TextUtils.isEmpty(nome)) { nomeEditText.setError("Nome obrigatório."); nomeEditText.requestFocus(); return false; } if (nome.length() < 2) { nomeEditText.setError("Nome deve ter pelo menos 2 caracteres."); nomeEditText.requestFocus(); return false; } // Validar email if (TextUtils.isEmpty(email)) { emailEditText2.setError("Email obrigatório."); emailEditText2.requestFocus(); return false; } if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) { emailEditText2.setError("Formato de email inválido."); emailEditText2.requestFocus(); return false; } // Validar password if (TextUtils.isEmpty(password)) { passwordEditText3.setError("Palavra-passe obrigatória."); passwordEditText3.requestFocus(); return false; } if (password.length() < 6) { passwordEditText3.setError("Palavra-passe deve ter pelo menos 6 caracteres."); passwordEditText3.requestFocus(); return false; } // Validar confirmação de password if (TextUtils.isEmpty(confirmarPassword)) { passwordEditText2.setError("Por favor, confirme a palavra-passe."); passwordEditText2.requestFocus(); return false; } if (!password.equals(confirmarPassword)) { passwordEditText2.setError("As palavras-passe não coincidem."); passwordEditText2.requestFocus(); return false; } return true; } private void toggleLoading(boolean show) { loadingProgressBar.setVisibility(show ? View.VISIBLE : View.GONE); loginButton2.setEnabled(!show); nomeEditText.setEnabled(!show); emailEditText2.setEnabled(!show); passwordEditText3.setEnabled(!show); passwordEditText2.setEnabled(!show); } }