262 lines
11 KiB
Java
262 lines
11 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.ProgressBar;
|
|
import android.widget.TextView;
|
|
import android.widget.Toast;
|
|
|
|
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 androidx.credentials.CredentialManager;
|
|
|
|
import androidx.credentials.Credential;
|
|
import androidx.credentials.CustomCredential;
|
|
import androidx.credentials.GetCredentialRequest;
|
|
import androidx.credentials.GetCredentialResponse;
|
|
import androidx.credentials.exceptions.GetCredentialException;
|
|
import androidx.credentials.exceptions.NoCredentialException;
|
|
|
|
import com.google.android.libraries.identity.googleid.GetGoogleIdOption;
|
|
import com.google.android.libraries.identity.googleid.GoogleIdTokenCredential;
|
|
import com.google.android.libraries.identity.googleid.GoogleIdTokenParsingException;
|
|
import com.google.firebase.FirebaseApp;
|
|
import com.google.firebase.auth.AuthCredential;
|
|
import com.google.firebase.auth.FirebaseAuth;
|
|
import com.google.firebase.auth.FirebaseUser;
|
|
import com.google.firebase.auth.GoogleAuthProvider;
|
|
|
|
public class LoginActivity extends AppCompatActivity {
|
|
|
|
private TextView textView5;
|
|
private TextView textView1;
|
|
private TextView criarContaTextView;
|
|
private TextView emailTextView;
|
|
private EditText emailEditText;
|
|
private TextView passTextView;
|
|
private EditText passwordEditText;
|
|
private TextView passesquecerTextView;
|
|
private Button loginButton;
|
|
private Button googleButton;
|
|
private TextView ouTextView;
|
|
private ProgressBar loadingProgressBar;
|
|
private FirebaseAuth firebaseAuth;
|
|
private CredentialManager credentialManager;
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
EdgeToEdge.enable(this);
|
|
setContentView(R.layout.activity_login);
|
|
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;
|
|
});
|
|
textView5 = findViewById(R.id.textView5);
|
|
textView1 = findViewById(R.id.textView1);
|
|
criarContaTextView = findViewById(R.id.criarContaTextView);
|
|
emailTextView = findViewById(R.id.emailTextView);
|
|
emailEditText = findViewById(R.id.emailEditText);
|
|
passTextView = findViewById(R.id.passTextView);
|
|
passwordEditText = findViewById(R.id.passwordEditText);
|
|
passesquecerTextView = findViewById(R.id.passesquecerTextView);
|
|
loginButton = findViewById(R.id.loginButton);
|
|
googleButton = findViewById(R.id.googleButton);
|
|
ouTextView = findViewById(R.id.ouTextView);
|
|
loadingProgressBar = findViewById(R.id.loadingProgressBar);
|
|
|
|
FirebaseApp.initializeApp(this);
|
|
firebaseAuth = FirebaseAuth.getInstance();
|
|
credentialManager = CredentialManager.create(this);
|
|
|
|
loginButton.setOnClickListener(v -> validarLogin());
|
|
criarContaTextView.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View view) {
|
|
Intent intent = new Intent(LoginActivity.this, CriarContaActivity.class);
|
|
startActivity(intent);
|
|
}
|
|
});
|
|
passesquecerTextView.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View view) {
|
|
String email = emailEditText.getText().toString().trim();
|
|
Intent intent = new Intent(LoginActivity.this, RecupearPasswordActivity.class);
|
|
// Passar o email digitado no login para a atividade de recuperação
|
|
if (!TextUtils.isEmpty(email)) {
|
|
intent.putExtra("email", email);
|
|
}
|
|
startActivity(intent);
|
|
}
|
|
});
|
|
googleButton.setOnClickListener(v -> signInWithGoogle());
|
|
}
|
|
|
|
private void validarLogin() {
|
|
String email = emailEditText.getText().toString().trim();
|
|
String password = passwordEditText.getText().toString();
|
|
|
|
if (!validarEspaços(email, password)) {
|
|
return;
|
|
}
|
|
|
|
toggleLoading(true);
|
|
|
|
firebaseAuth.signInWithEmailAndPassword(email, password)
|
|
.addOnCompleteListener(this, task -> {
|
|
toggleLoading(false);
|
|
if (task.isSuccessful()) {
|
|
FirebaseUser user = task.getResult().getUser();
|
|
String welcome = user != null && !TextUtils.isEmpty(user.getEmail())
|
|
? "Bem-vindo, " + user.getEmail()
|
|
: "Login realizado com sucesso!";
|
|
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",
|
|
Toast.LENGTH_LONG).show();
|
|
}
|
|
});
|
|
}
|
|
|
|
private void recupearPassword() {
|
|
String email = emailEditText.getText().toString().trim();
|
|
if (TextUtils.isEmpty(email)) {
|
|
emailEditText.setError("Informe o email para recuperar a palavra-passe.");
|
|
emailEditText.requestFocus();
|
|
return;
|
|
}
|
|
|
|
toggleLoading(true);
|
|
firebaseAuth.sendPasswordResetEmail(email)
|
|
.addOnCompleteListener(this, task -> {
|
|
toggleLoading(false);
|
|
if (task.isSuccessful()) {
|
|
Toast.makeText(this,
|
|
"Email de recuperação enviado para " + email,
|
|
Toast.LENGTH_LONG).show();
|
|
} else {
|
|
Toast.makeText(this,
|
|
task.getException() != null ? task.getException().getMessage() : "Erro ao enviar email",
|
|
Toast.LENGTH_LONG).show();
|
|
}
|
|
});
|
|
}
|
|
|
|
private boolean validarEspaços(String email, String password) {
|
|
if (TextUtils.isEmpty(email)) {
|
|
emailEditText.setError("Email obrigatório.");
|
|
emailEditText.requestFocus();
|
|
return false;
|
|
}
|
|
|
|
if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
|
|
emailEditText.setError("Formato de email inválido.");
|
|
emailEditText.requestFocus();
|
|
return false;
|
|
}
|
|
|
|
if (TextUtils.isEmpty(password)) {
|
|
passwordEditText.setError("Palavra-passe obrigatória.");
|
|
passwordEditText.requestFocus();
|
|
return false;
|
|
}
|
|
|
|
if (password.length() < 6) {
|
|
passwordEditText.setError("Mínimo de 6 caracteres.");
|
|
passwordEditText.requestFocus();
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private void signInWithGoogle() {
|
|
String webClientId = getString(R.string.default_web_client_id);
|
|
|
|
if (webClientId.equals("YOUR_WEB_CLIENT_ID_HERE")) {
|
|
Toast.makeText(this, "Por favor, configure o Web Client ID no Firebase Console.", Toast.LENGTH_LONG).show();
|
|
return;
|
|
}
|
|
|
|
GetGoogleIdOption googleIdOption = new GetGoogleIdOption.Builder()
|
|
.setFilterByAuthorizedAccounts(false)
|
|
.setServerClientId(webClientId)
|
|
.build();
|
|
|
|
GetCredentialRequest request = new GetCredentialRequest.Builder()
|
|
.addCredentialOption(googleIdOption)
|
|
.build();
|
|
|
|
toggleLoading(true);
|
|
|
|
credentialManager.getCredential(
|
|
this,
|
|
request,
|
|
null
|
|
);
|
|
}
|
|
|
|
private void handleGoogleSignInResult(GetCredentialResponse result) {
|
|
Credential credential = result.getCredential();
|
|
|
|
if (credential instanceof CustomCredential) {
|
|
CustomCredential customCredential = (CustomCredential) credential;
|
|
if (GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL.equals(customCredential.getType())) {
|
|
GoogleIdTokenCredential googleIdTokenCredential = GoogleIdTokenCredential
|
|
.createFrom(customCredential.getData());
|
|
String idToken = googleIdTokenCredential.getIdToken();
|
|
firebaseAuthWithGoogle(idToken);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void firebaseAuthWithGoogle(String idToken) {
|
|
AuthCredential credential = GoogleAuthProvider.getCredential(idToken, null);
|
|
firebaseAuth.signInWithCredential(credential)
|
|
.addOnCompleteListener(this, task -> {
|
|
toggleLoading(false);
|
|
if (task.isSuccessful()) {
|
|
FirebaseUser user = firebaseAuth.getCurrentUser();
|
|
String welcome = user != null && !TextUtils.isEmpty(user.getDisplayName())
|
|
? "Bem-vindo, " + user.getDisplayName()
|
|
: "Login com Google realizado com sucesso!";
|
|
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();
|
|
} else {
|
|
Toast.makeText(this,
|
|
task.getException() != null ? task.getException().getMessage() : "Falha no login com Google",
|
|
Toast.LENGTH_LONG).show();
|
|
}
|
|
});
|
|
}
|
|
|
|
private void toggleLoading(boolean show) {
|
|
loadingProgressBar.setVisibility(show ? View.VISIBLE : View.GONE);
|
|
loginButton.setEnabled(!show);
|
|
googleButton.setEnabled(!show);
|
|
criarContaTextView.setEnabled(!show);
|
|
passesquecerTextView.setEnabled(!show);
|
|
}
|
|
} |