From 541f7300bd180ff4fa16344a2c5db6010ab94d72 Mon Sep 17 00:00:00 2001
From: 230421 <230421@epvc.pt>
Date: Mon, 8 Jun 2026 15:58:48 +0100
Subject: [PATCH] =?UTF-8?q?corre=C3=A7ao=20de=20pequenos=20erros=20e=20bug?=
=?UTF-8?q?s=20,=20mudei=20op=C3=A7=C3=A3o=20de=20navega=C3=A7=C3=A3o=20e?=
=?UTF-8?q?=20altera=C3=A7=C3=B5es=20no=20login?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../example/vdcscore/CriarContaActivity.java | 5 +-
.../com/example/vdcscore/LoginActivity.java | 5 +-
.../vdcscore/RecuperarPasswordActivity.java | 5 +-
.../vdcscore/ui/definicoes/ContaActivity.java | 120 +++++++++++-------
app/src/main/res/layout/activity_login.xml | 17 ++-
app/src/main/res/layout/fragment_cup.xml | 6 +-
app/src/main/res/layout/fragment_gallery.xml | 6 +-
.../main/res/layout/fragment_news_detail.xml | 4 +-
8 files changed, 102 insertions(+), 66 deletions(-)
diff --git a/app/src/main/java/com/example/vdcscore/CriarContaActivity.java b/app/src/main/java/com/example/vdcscore/CriarContaActivity.java
index 404e0e4..0497920 100644
--- a/app/src/main/java/com/example/vdcscore/CriarContaActivity.java
+++ b/app/src/main/java/com/example/vdcscore/CriarContaActivity.java
@@ -83,10 +83,7 @@ public class CriarContaActivity extends AppCompatActivity {
finish();
}
} else {
- String errorMessage = "Erro ao criar conta!";
- if (task.getException() != null && task.getException().getMessage() != null) {
- errorMessage = "Erro: " + task.getException().getMessage();
- }
+ String errorMessage = com.example.vdcscore.utils.FirebaseErrorUtils.getErrorMessagePt(task.getException());
Toast.makeText(CriarContaActivity.this, errorMessage, Toast.LENGTH_LONG).show();
}
diff --git a/app/src/main/java/com/example/vdcscore/LoginActivity.java b/app/src/main/java/com/example/vdcscore/LoginActivity.java
index 79bc92d..477ef2e 100644
--- a/app/src/main/java/com/example/vdcscore/LoginActivity.java
+++ b/app/src/main/java/com/example/vdcscore/LoginActivity.java
@@ -124,10 +124,7 @@ public class LoginActivity extends AppCompatActivity {
finish();
} else {
- String errorMessage = "Erro ao fazer login!";
- if (task.getException() != null && task.getException().getMessage() != null) {
- errorMessage = "Erro: " + task.getException().getMessage();
- }
+ String errorMessage = com.example.vdcscore.utils.FirebaseErrorUtils.getErrorMessagePt(task.getException());
Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show();
}
});
diff --git a/app/src/main/java/com/example/vdcscore/RecuperarPasswordActivity.java b/app/src/main/java/com/example/vdcscore/RecuperarPasswordActivity.java
index 7d8320b..8f3f74a 100644
--- a/app/src/main/java/com/example/vdcscore/RecuperarPasswordActivity.java
+++ b/app/src/main/java/com/example/vdcscore/RecuperarPasswordActivity.java
@@ -59,10 +59,7 @@ public class RecuperarPasswordActivity extends AppCompatActivity {
Toast.LENGTH_LONG).show();
voltarLogin();
} else {
- String errorMessage = "Erro ao enviar email de recuperação!";
- if (task.getException() != null && task.getException().getMessage() != null) {
- errorMessage = "Erro: " + task.getException().getMessage();
- }
+ String errorMessage = com.example.vdcscore.utils.FirebaseErrorUtils.getErrorMessagePt(task.getException());
Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show();
}
});
diff --git a/app/src/main/java/com/example/vdcscore/ui/definicoes/ContaActivity.java b/app/src/main/java/com/example/vdcscore/ui/definicoes/ContaActivity.java
index c8b8ce8..3e59c3f 100644
--- a/app/src/main/java/com/example/vdcscore/ui/definicoes/ContaActivity.java
+++ b/app/src/main/java/com/example/vdcscore/ui/definicoes/ContaActivity.java
@@ -134,21 +134,12 @@ public class ContaActivity extends AppCompatActivity {
if (result.getResultCode() == RESULT_OK && result.getData() != null) {
selectedImageUri = result.getData().getData();
if (selectedImageUri != null) {
- try {
- InputStream inputStream = getContentResolver().openInputStream(selectedImageUri);
- if (inputStream != null) {
- Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
- inputStream.close();
- if (bitmap != null) {
- imageProfile.setImageBitmap(bitmap);
- // Não fazemos upload até clicar em Gravar
- } else {
- Toast.makeText(this, "Erro ao carregar imagem", Toast.LENGTH_SHORT).show();
- }
- }
- } catch (Exception e) {
- Toast.makeText(this, "Erro ao carregar imagem: " + e.getMessage(), Toast.LENGTH_SHORT)
- .show();
+ if (imageProfile != null) {
+ imageProfile.setImageTintList(null);
+ Glide.with(this)
+ .load(selectedImageUri)
+ .circleCrop()
+ .into(imageProfile);
}
}
}
@@ -195,6 +186,7 @@ public class ContaActivity extends AppCompatActivity {
private void loadProfileImage(String imageUrl) {
if (imageUrl == null || imageProfile == null) return;
+ imageProfile.setImageTintList(null);
Glide.with(this)
.load(imageUrl)
.placeholder(R.mipmap.ic_launcher_round)
@@ -227,7 +219,7 @@ public class ContaActivity extends AppCompatActivity {
btnSaveAll.setOnClickListener(v -> saveAllChanges());
}
if (btnChangeEmail != null) {
- btnChangeEmail.setOnClickListener(v -> sendEmailVerificationForEmailChange());
+ btnChangeEmail.setOnClickListener(v -> showChangeEmailDialog());
}
if (btnChangePassword != null) {
btnChangePassword.setOnClickListener(v -> sendPasswordResetEmail());
@@ -295,9 +287,8 @@ public class ContaActivity extends AppCompatActivity {
if (task.isSuccessful()) {
Toast.makeText(this, "Alterações guardadas com sucesso!", Toast.LENGTH_SHORT).show();
} else {
- Toast.makeText(this, "Erro ao guardar alterações: " +
- (task.getException() != null ? task.getException().getMessage() : "Erro desconhecido"),
- Toast.LENGTH_SHORT).show();
+ String error = com.example.vdcscore.utils.FirebaseErrorUtils.getErrorMessagePt(task.getException());
+ Toast.makeText(this, "Erro ao guardar alterações: " + error, Toast.LENGTH_SHORT).show();
}
});
}
@@ -394,51 +385,86 @@ public class ContaActivity extends AppCompatActivity {
"Email de alteração de password enviado! Verifique a sua caixa de entrada.",
Toast.LENGTH_LONG).show();
} else {
- String errorMessage = "Erro ao enviar email!";
- if (task.getException() != null && task.getException().getMessage() != null) {
- errorMessage = "Erro: " + task.getException().getMessage();
- }
+ String errorMessage = com.example.vdcscore.utils.FirebaseErrorUtils.getErrorMessagePt(task.getException());
Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show();
}
});
}
- private void sendEmailVerificationForEmailChange() {
+ private void showChangeEmailDialog() {
FirebaseUser user = mAuth.getCurrentUser();
- if (user == null || user.getEmail() == null) {
+ if (user == null) {
Toast.makeText(this, "Utilizador não autenticado", Toast.LENGTH_SHORT).show();
return;
}
- progressDialog.show();
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle("Alterar Email");
- // Enviar email de verificação para alterar email
- user.sendEmailVerification()
+ final TextInputEditText input = new TextInputEditText(this);
+ input.setInputType(android.text.InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
+ input.setHint("Novo email");
+ if (user.getEmail() != null) {
+ input.setText(user.getEmail());
+ }
+
+ android.widget.FrameLayout container = new android.widget.FrameLayout(this);
+ android.widget.FrameLayout.LayoutParams params = new android.widget.FrameLayout.LayoutParams(
+ android.view.ViewGroup.LayoutParams.MATCH_PARENT,
+ android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
+ int marginPx = (int) (20 * getResources().getDisplayMetrics().density);
+ params.leftMargin = marginPx;
+ params.rightMargin = marginPx;
+ params.topMargin = marginPx;
+ params.bottomMargin = marginPx;
+ input.setLayoutParams(params);
+ container.addView(input);
+ builder.setView(container);
+
+ builder.setPositiveButton("Alterar", (dialog, which) -> {
+ String newEmail = input.getText().toString().trim();
+ if (newEmail.isEmpty()) {
+ Toast.makeText(this, "O email não pode estar vazio", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ if (!android.util.Patterns.EMAIL_ADDRESS.matcher(newEmail).matches()) {
+ Toast.makeText(this, "Email inválido", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ if (newEmail.equalsIgnoreCase(user.getEmail())) {
+ Toast.makeText(this, "O novo email é igual ao atual", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ performEmailChange(newEmail);
+ });
+ builder.setNegativeButton("Cancelar", (dialog, which) -> dialog.cancel());
+ builder.show();
+ }
+
+ private void performEmailChange(String newEmail) {
+ FirebaseUser user = mAuth.getCurrentUser();
+ if (user == null) return;
+
+ progressDialog.show();
+ user.verifyBeforeUpdateEmail(newEmail)
.addOnCompleteListener(task -> {
progressDialog.dismiss();
if (task.isSuccessful()) {
Toast.makeText(this,
- "Email de verificação enviado! Verifique a sua caixa de entrada para alterar o email.",
+ "Email de verificação enviado para o novo endereço! Por favor verifique.",
Toast.LENGTH_LONG).show();
+ if (textEmail != null) {
+ textEmail.setText(newEmail);
+ }
} else {
- // Se não conseguir enviar email de verificação, enviar email de reset de
- // password
- // que pode ser usado para alterar o email através do Firebase Console
- mAuth.sendPasswordResetEmail(user.getEmail())
- .addOnCompleteListener(resetTask -> {
- if (resetTask.isSuccessful()) {
- Toast.makeText(this,
- "Email enviado! Verifique a sua caixa de entrada para instruções de alteração.",
- Toast.LENGTH_LONG).show();
- } else {
- String errorMessage = "Erro ao enviar email!";
- if (resetTask.getException() != null
- && resetTask.getException().getMessage() != null) {
- errorMessage = "Erro: " + resetTask.getException().getMessage();
- }
- Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show();
- }
- });
+ if (task.getException() instanceof com.google.firebase.auth.FirebaseAuthRecentLoginRequiredException) {
+ Toast.makeText(this,
+ "Por segurança, precisa de terminar sessão e voltar a entrar antes de mudar o email.",
+ Toast.LENGTH_LONG).show();
+ } else {
+ String error = com.example.vdcscore.utils.FirebaseErrorUtils.getErrorMessagePt(task.getException());
+ Toast.makeText(this, "Erro ao alterar email: " + error, Toast.LENGTH_LONG).show();
+ }
}
});
}
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index ff4a543..86298b2 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -22,12 +22,27 @@
android:id="@+id/logoImage"
android:layout_width="64dp"
android:layout_height="64dp"
- android:layout_marginTop="50dp"
+ android:layout_marginTop="40dp"
android:background="@drawable/brand_icon_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+
+
+
@@ -115,7 +116,8 @@
android:layout_width="36dp"
android:layout_height="36dp"
android:background="@drawable/bg_circle_light_gray"
- android:src="@android:drawable/ic_media_next"
+ android:foreground="?attr/selectableItemBackgroundBorderless"
+ android:src="@drawable/ic_arrow_forward"
android:contentDescription="Próxima"
app:tint="@color/text_2" />
diff --git a/app/src/main/res/layout/fragment_gallery.xml b/app/src/main/res/layout/fragment_gallery.xml
index 8f5f40c..329f9ad 100644
--- a/app/src/main/res/layout/fragment_gallery.xml
+++ b/app/src/main/res/layout/fragment_gallery.xml
@@ -94,7 +94,8 @@
android:layout_width="36dp"
android:layout_height="36dp"
android:background="@drawable/bg_circle_light_gray"
- android:src="@android:drawable/ic_media_previous"
+ android:foreground="?attr/selectableItemBackgroundBorderless"
+ android:src="@drawable/ic_arrow_back"
android:contentDescription="Anterior"
app:tint="@color/text_2" />
@@ -115,7 +116,8 @@
android:layout_width="36dp"
android:layout_height="36dp"
android:background="@drawable/bg_circle_light_gray"
- android:src="@android:drawable/ic_media_next"
+ android:foreground="?attr/selectableItemBackgroundBorderless"
+ android:src="@drawable/ic_arrow_forward"
android:contentDescription="Próxima"
app:tint="@color/text_2" />
diff --git a/app/src/main/res/layout/fragment_news_detail.xml b/app/src/main/res/layout/fragment_news_detail.xml
index f16a893..7a56c09 100644
--- a/app/src/main/res/layout/fragment_news_detail.xml
+++ b/app/src/main/res/layout/fragment_news_detail.xml
@@ -122,7 +122,7 @@
android:fontFamily="@font/font_ibm_plex_sans"
android:text="Anterior"
android:textColor="@color/brand"
- app:icon="@android:drawable/ic_media_previous"
+ app:icon="@drawable/ic_arrow_back"
app:iconTint="@color/brand" />