Atualizar LoginActivity e ContaActivity

main
230421 2025-12-06 21:47:50 +00:00
parent 49ba834e96
commit 81eb71bd46
4 changed files with 144 additions and 2 deletions

View File

@ -1,8 +1,10 @@
package com.example.vdcscore;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;
@ -15,11 +17,17 @@ public class LoginActivity extends AppCompatActivity {
TextInputEditText editEmail, editPassword;
Button btnLogin;
CheckBox checkRememberMe;
FirebaseAuth mAuth;
private TextView criarContaTextView;
private TextView txtForgotPassword;
private static final String PREFS_NAME = "LoginPrefs";
private static final String KEY_EMAIL = "email";
private static final String KEY_PASSWORD = "password";
private static final String KEY_REMEMBER = "remember";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -28,6 +36,7 @@ public class LoginActivity extends AppCompatActivity {
editEmail = findViewById(R.id.editEmail);
editPassword = findViewById(R.id.editPassword2);
btnLogin = findViewById(R.id.btnLogin);
checkRememberMe = findViewById(R.id.checkRememberMe);
criarContaTextView = findViewById(R.id.txtRegister);
txtForgotPassword = findViewById(R.id.txtForgotPassword);
@ -36,6 +45,45 @@ public class LoginActivity extends AppCompatActivity {
btnLogin.setOnClickListener(v -> loginUser());
criarContaTextView.setOnClickListener(view -> criarConta());
txtForgotPassword.setOnClickListener(view -> recuperarPassword());
// Carregar credenciais guardadas
loadSavedCredentials();
}
private void loadSavedCredentials() {
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
boolean remember = prefs.getBoolean(KEY_REMEMBER, false);
if (remember) {
String savedEmail = prefs.getString(KEY_EMAIL, "");
String savedPassword = prefs.getString(KEY_PASSWORD, "");
if (!savedEmail.isEmpty() && !savedPassword.isEmpty()) {
editEmail.setText(savedEmail);
editPassword.setText(savedPassword);
checkRememberMe.setChecked(true);
// Tentar login automático
autoLogin(savedEmail, savedPassword);
}
}
}
private void autoLogin(String email, String password) {
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(task -> {
if (task.isSuccessful()) {
// Login automático bem-sucedido
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
} else {
// Se o login automático falhar, apenas limpar a password do campo
// O utilizador pode tentar fazer login manualmente
editPassword.setText("");
}
});
}
private void criarConta() {
@ -60,11 +108,19 @@ public class LoginActivity extends AppCompatActivity {
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(task -> {
if (task.isSuccessful()) {
// Guardar credenciais se "Lembrar-me" estiver marcado
if (checkRememberMe.isChecked()) {
saveCredentials(email, password);
} else {
clearSavedCredentials();
}
Toast.makeText(this, "Login efetuado!", Toast.LENGTH_SHORT).show();
// Abre a tua página principal
startActivity(new Intent(LoginActivity.this, MainActivity.class));
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
} else {
@ -77,12 +133,31 @@ public class LoginActivity extends AppCompatActivity {
});
}
private void saveCredentials(String email, String password) {
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(KEY_EMAIL, email);
editor.putString(KEY_PASSWORD, password);
editor.putBoolean(KEY_REMEMBER, true);
editor.apply();
}
private void clearSavedCredentials() {
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.clear();
editor.apply();
}
@Override
protected void onStart() {
super.onStart();
// Verificar se já está autenticado (caso o login automático não tenha funcionado)
if (FirebaseAuth.getInstance().getCurrentUser() != null){
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
}
}
}

View File

@ -3,6 +3,7 @@ package com.example.vdcscore.ui.definicoes;
import android.Manifest;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@ -89,6 +90,7 @@ public class ContaActivity extends AppCompatActivity {
editName = findViewById(R.id.editName);
textEmail = findViewById(R.id.textEmail);
btnSaveName = findViewById(R.id.btnSaveName);
btnLogout = findViewById(R.id.btnLogout);
btnChangePhoto = findViewById(R.id.btnChangePhoto);
cardImageContainer = findViewById(R.id.cardImageContainer);
@ -224,6 +226,28 @@ public class ContaActivity extends AppCompatActivity {
if (btnSaveName != null) {
btnSaveName.setOnClickListener(v -> saveUserName());
}
if (btnLogout != null) {
btnLogout.setOnClickListener(v -> logoutUser());
}
}
private void logoutUser() {
// Limpar credenciais guardadas
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.clear();
editor.apply();
// Fazer logout do Firebase
mAuth.signOut();
Toast.makeText(this, "Sessão terminada", Toast.LENGTH_SHORT).show();
// Voltar para o login
Intent intent = new Intent(ContaActivity.this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
}
private void openImagePicker() {

View File

@ -233,6 +233,39 @@
</com.google.android.material.card.MaterialCardView>
<!-- Logout Section -->
<com.google.android.material.card.MaterialCardView
android:id="@+id/cardLogout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
app:cardCornerRadius="20dp"
app:cardElevation="4dp"
app:cardBackgroundColor="#FFFFFF"
app:strokeWidth="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="24dp">
<Button
android:id="@+id/btnLogout"
android:layout_width="match_parent"
android:layout_height="56dp"
android:backgroundTint="#D32F2F"
android:text="Terminar Sessão"
android:textColor="#FFFFFF"
android:textSize="16sp"
android:textStyle="bold"
android:elevation="2dp"
android:stateListAnimator="@null" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
</androidx.core.widget.NestedScrollView>

View File

@ -146,6 +146,16 @@
</com.google.android.material.textfield.TextInputLayout>
<!-- Remember Me Checkbox -->
<CheckBox
android:id="@+id/checkRememberMe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="12dp"
android:text="Lembrar-me"
android:textColor="#616161"
android:textSize="14sp" />
<!-- Forgot Password Link -->
<TextView
android:id="@+id/txtForgotPassword"