186 lines
7.5 KiB
Java
186 lines
7.5 KiB
Java
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);
|
|
}
|
|
} |