diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a5fcac4..5a2581e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.LifeGrid"> + diff --git a/app/src/main/java/com/example/lifegrid/CriarContaActivity.java b/app/src/main/java/com/example/lifegrid/CriarContaActivity.java index d0b0c40..d3c142e 100644 --- a/app/src/main/java/com/example/lifegrid/CriarContaActivity.java +++ b/app/src/main/java/com/example/lifegrid/CriarContaActivity.java @@ -1,6 +1,14 @@ 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.ProgressBar; +import android.widget.Toast; import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AppCompatActivity; @@ -8,8 +16,21 @@ 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; + public class CriarContaActivity extends AppCompatActivity { + private EditText nomeEditText; + private EditText emailEditText2; + private EditText passwordEditText3; + private EditText passwordEditText2; + private Button loginButton2; + private Button googleButton2; + private ProgressBar loadingProgressBar; + private FirebaseAuth firebaseAuth; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -20,5 +41,135 @@ public class CriarContaActivity extends AppCompatActivity { 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); + googleButton2 = findViewById(R.id.googleButton2); + loadingProgressBar = findViewById(R.id.loadingProgressBar); + + FirebaseApp.initializeApp(this); + firebaseAuth = FirebaseAuth.getInstance(); + + loginButton2.setOnClickListener(v -> criarConta()); + googleButton2.setOnClickListener(v -> + Toast.makeText(this, "Login com Google disponível em breve.", Toast.LENGTH_SHORT).show() + ); + } + + 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 + Toast.makeText(this, + "Conta criada com sucesso! Bem-vindo, " + nome, + Toast.LENGTH_SHORT).show(); + + // 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."; + } + } + Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show(); + } + }); + } + + 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); + googleButton2.setEnabled(!show); + nomeEditText.setEnabled(!show); + emailEditText2.setEnabled(!show); + passwordEditText3.setEnabled(!show); + passwordEditText2.setEnabled(!show); } } \ No newline at end of file diff --git a/app/src/main/java/com/example/lifegrid/LoginActivity.java b/app/src/main/java/com/example/lifegrid/LoginActivity.java index d29b8ba..a3515ee 100644 --- a/app/src/main/java/com/example/lifegrid/LoginActivity.java +++ b/app/src/main/java/com/example/lifegrid/LoginActivity.java @@ -101,7 +101,13 @@ public class LoginActivity extends AppCompatActivity { String welcome = user != null && !TextUtils.isEmpty(user.getEmail()) ? "Bem-vindo, " + user.getEmail() : "Login realizado com sucesso!"; - Toast.makeText(this, welcome, Toast.LENGTH_LONG).show(); + Toast.makeText(this, welcome, Toast.LENGTH_SHORT).show(); + + // Redirecionar para TelaInicialActivity após login bem-sucedido + Intent intent = new Intent(LoginActivity.this, TelaInicialActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); + startActivity(intent); + finish(); // Fechar LoginActivity para não poder voltar com back button } else { Toast.makeText(this, task.getException() != null ? task.getException().getMessage() : "Falha no login", diff --git a/app/src/main/java/com/example/lifegrid/TelaInicialActivity.java b/app/src/main/java/com/example/lifegrid/TelaInicialActivity.java new file mode 100644 index 0000000..863b7b2 --- /dev/null +++ b/app/src/main/java/com/example/lifegrid/TelaInicialActivity.java @@ -0,0 +1,24 @@ +package com.example.lifegrid; + +import android.os.Bundle; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +public class TelaInicialActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EdgeToEdge.enable(this); + setContentView(R.layout.activity_tela_inicial); + 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; + }); + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/logo.png b/app/src/main/res/drawable/logo.png new file mode 100644 index 0000000..6469592 Binary files /dev/null and b/app/src/main/res/drawable/logo.png differ diff --git a/app/src/main/res/layout/activity_criar_conta.xml b/app/src/main/res/layout/activity_criar_conta.xml index 6e549d0..805af91 100644 --- a/app/src/main/res/layout/activity_criar_conta.xml +++ b/app/src/main/res/layout/activity_criar_conta.xml @@ -3,10 +3,22 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main" + android:background="#FFFFFF" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".CriarContaActivity"> + + @@ -24,14 +36,14 @@ android:id="@+id/textView6" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="160dp" + android:layout_marginTop="24dp" android:text="Criar conta" android:textSize="25sp" android:textStyle="bold" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHorizontal_bias="0.166" + app:layout_constraintHorizontal_bias="0.128" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toBottomOf="@+id/logoImageView" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index baf1204..2944149 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -13,14 +13,14 @@ android:id="@+id/textView5" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="192dp" + android:layout_marginTop="24dp" android:text="Bem-vindo/a de volta" android:textSize="25sp" android:textStyle="bold" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHorizontal_bias="0.113" + app:layout_constraintHorizontal_bias="0.154" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toBottomOf="@+id/logoImageView" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_recupear_password.xml b/app/src/main/res/layout/activity_recupear_password.xml index 42ddf10..99cf01d 100644 --- a/app/src/main/res/layout/activity_recupear_password.xml +++ b/app/src/main/res/layout/activity_recupear_password.xml @@ -7,4 +7,76 @@ android:layout_height="match_parent" tools:context=".RecupearPasswordActivity"> +