From 72e39f447cb9dc5db5e689bbfe7cf8ddb36f3fac Mon Sep 17 00:00:00 2001
From: 230421 <230421@epvc.pt>
Date: Tue, 25 Nov 2025 16:55:30 +0000
Subject: [PATCH] Criei menu de login e de criar conta (com design e tudo a
funcionar)
---
.idea/appInsightsSettings.xml | 26 ++++
.idea/deviceManager.xml | 13 ++
.idea/gradle.xml | 1 +
.idea/misc.xml | 1 -
app/build.gradle.kts | 6 +
app/src/main/AndroidManifest.xml | 4 +-
.../example/vdcscore/CriarContaActivity.java | 76 ++++++++++
.../com/example/vdcscore/LoginActivity.java | 59 ++++++++
.../com/example/vdcscore/MainActivity.java | 24 ----
.../main/res/layout/activity_criarconta.xml | 132 ++++++++++++++++++
app/src/main/res/layout/activity_login.xml | 101 ++++++++++++++
app/src/main/res/layout/activity_main.xml | 19 ---
app/src/main/res/values/ids.xml | 4 +
build.gradle.kts | 1 +
gradle/libs.versions.toml | 12 ++
15 files changed, 433 insertions(+), 46 deletions(-)
create mode 100644 .idea/appInsightsSettings.xml
create mode 100644 .idea/deviceManager.xml
create mode 100644 app/src/main/java/com/example/vdcscore/CriarContaActivity.java
create mode 100644 app/src/main/java/com/example/vdcscore/LoginActivity.java
delete mode 100644 app/src/main/java/com/example/vdcscore/MainActivity.java
create mode 100644 app/src/main/res/layout/activity_criarconta.xml
create mode 100644 app/src/main/res/layout/activity_login.xml
delete mode 100644 app/src/main/res/layout/activity_main.xml
create mode 100644 app/src/main/res/values/ids.xml
diff --git a/.idea/appInsightsSettings.xml b/.idea/appInsightsSettings.xml
new file mode 100644
index 0000000..3649bc2
--- /dev/null
+++ b/.idea/appInsightsSettings.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/deviceManager.xml b/.idea/deviceManager.xml
new file mode 100644
index 0000000..91f9558
--- /dev/null
+++ b/.idea/deviceManager.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 97f0a8e..639c779 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -1,5 +1,6 @@
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 74dd639..b2c751a 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,3 @@
-
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 1067509..d25ed1d 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -1,5 +1,6 @@
plugins {
alias(libs.plugins.android.application)
+ alias(libs.plugins.google.gms.google.services)
}
android {
@@ -37,6 +38,11 @@ dependencies {
implementation(libs.material)
implementation(libs.activity)
implementation(libs.constraintlayout)
+ implementation(libs.firebase.auth)
+ implementation(libs.credentials)
+ implementation(libs.credentials.play.services.auth)
+ implementation(libs.googleid)
+ implementation(libs.firebase.database)
testImplementation(libs.junit)
androidTestImplementation(libs.ext.junit)
androidTestImplementation(libs.espresso.core)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f7320e3..86c93f8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -12,8 +12,8 @@
android:supportsRtl="true"
android:theme="@style/Theme.VdcScore">
+ android:name=".CriarContaActivity"
+ android:exported="false">
diff --git a/app/src/main/java/com/example/vdcscore/CriarContaActivity.java b/app/src/main/java/com/example/vdcscore/CriarContaActivity.java
new file mode 100644
index 0000000..0368730
--- /dev/null
+++ b/app/src/main/java/com/example/vdcscore/CriarContaActivity.java
@@ -0,0 +1,76 @@
+package com.example.vdcscore;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+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;
+
+public class CriarContaActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ EdgeToEdge.enable(this);
+ setContentView(R.layout.activity_criarconta);
+ 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;
+ });
+ EditText editPassword2;
+ EditText editEmail;
+ EditText editConfirmPassword;
+ Button btnCreateAccount;
+ TextView txtGoLogin;
+
+
+ editEmail = findViewById(R.id.editEmail);
+ editPassword2 = findViewById(R.id.editPassword2);
+ editConfirmPassword = findViewById(R.id.editConfirmPassword);
+ btnCreateAccount = findViewById(R.id.btnCreateAccount);
+ txtGoLogin = findViewById(R.id.txtGoLogin);
+
+ // Criar conta
+ btnCreateAccount.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ String email = editEmail.getText().toString();
+ String pass = editPassword2.getText().toString();
+ String conf = editConfirmPassword.getText().toString();
+
+ if (email.isEmpty() || pass.isEmpty() || conf.isEmpty()) {
+ Toast.makeText(CriarContaActivity.this, "Preencha todos os campos!", Toast.LENGTH_SHORT).show();
+ return;
+ }
+
+ if (!pass.equals(conf)) {
+ Toast.makeText(CriarContaActivity.this, "As passwords não coincidem!", Toast.LENGTH_SHORT).show();
+ return;
+ }
+
+ // Por agora só mostra mensagem (podemos pôr Firebase ou SQLite depois)
+ Toast.makeText(CriarContaActivity.this, "Conta criada com sucesso!", Toast.LENGTH_SHORT).show();
+
+ finish(); // volta para o login
+ }
+ });
+
+ // Voltar ao login
+ txtGoLogin.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Intent intent = new Intent(CriarContaActivity.this, LoginActivity.class);
+ }
+
+ });
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/vdcscore/LoginActivity.java b/app/src/main/java/com/example/vdcscore/LoginActivity.java
new file mode 100644
index 0000000..81b5927
--- /dev/null
+++ b/app/src/main/java/com/example/vdcscore/LoginActivity.java
@@ -0,0 +1,59 @@
+package com.example.vdcscore;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.Toast;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.google.firebase.auth.FirebaseAuth;
+
+public class LoginActivity extends AppCompatActivity {
+
+ EditText editEmail, editPassword;
+ Button btnLogin;
+ FirebaseAuth mAuth;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_login);
+
+ editEmail = findViewById(R.id.editEmail);
+ editPassword = findViewById(R.id.editPassword2);
+ btnLogin = findViewById(R.id.btnLogin);
+
+ mAuth = FirebaseAuth.getInstance();
+
+ btnLogin.setOnClickListener(v -> loginUser());
+ }
+
+ private void loginUser() {
+ String email = editEmail.getText().toString().trim();
+ String password = editPassword.getText().toString().trim();
+
+ if (email.isEmpty() || password.isEmpty()) {
+ Toast.makeText(this, "Preencha todos os campos", Toast.LENGTH_SHORT).show();
+ return;
+ }
+
+ mAuth.signInWithEmailAndPassword(email, password)
+ .addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+
+ Toast.makeText(this, "Login efetuado!", Toast.LENGTH_SHORT).show();
+
+ // Abre a tua página principal
+ startActivity(new Intent(LoginActivity.this, CriarContaActivity.class));
+ finish();
+
+ } else {
+ Toast.makeText(this,
+ "Erro: " + task.getException().getMessage(),
+ Toast.LENGTH_LONG).show();
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/vdcscore/MainActivity.java b/app/src/main/java/com/example/vdcscore/MainActivity.java
deleted file mode 100644
index b01d9dc..0000000
--- a/app/src/main/java/com/example/vdcscore/MainActivity.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.example.vdcscore;
-
-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 MainActivity extends AppCompatActivity {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- EdgeToEdge.enable(this);
- setContentView(R.layout.activity_main);
- 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/layout/activity_criarconta.xml b/app/src/main/res/layout/activity_criarconta.xml
new file mode 100644
index 0000000..9b169c4
--- /dev/null
+++ b/app/src/main/res/layout/activity_criarconta.xml
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
new file mode 100644
index 0000000..7bac71d
--- /dev/null
+++ b/app/src/main/res/layout/activity_login.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
deleted file mode 100644
index 86a5d97..0000000
--- a/app/src/main/res/layout/activity_main.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values/ids.xml b/app/src/main/res/values/ids.xml
new file mode 100644
index 0000000..a56512a
--- /dev/null
+++ b/app/src/main/res/values/ids.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/build.gradle.kts b/build.gradle.kts
index 3756278..c4f8066 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,4 +1,5 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
alias(libs.plugins.android.application) apply false
+ alias(libs.plugins.google.gms.google.services) apply false
}
\ No newline at end of file
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 1bcc061..8121d3e 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -7,6 +7,12 @@ appcompat = "1.7.1"
material = "1.13.0"
activity = "1.11.0"
constraintlayout = "2.2.1"
+googleGmsGoogleServices = "4.4.4"
+firebaseAuth = "24.0.1"
+credentials = "1.5.0"
+credentialsPlayServicesAuth = "1.5.0"
+googleid = "1.1.1"
+firebaseDatabase = "22.0.1"
[libraries]
junit = { group = "junit", name = "junit", version.ref = "junit" }
@@ -16,7 +22,13 @@ appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "a
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
activity = { group = "androidx.activity", name = "activity", version.ref = "activity" }
constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" }
+firebase-auth = { group = "com.google.firebase", name = "firebase-auth", version.ref = "firebaseAuth" }
+credentials = { group = "androidx.credentials", name = "credentials", version.ref = "credentials" }
+credentials-play-services-auth = { group = "androidx.credentials", name = "credentials-play-services-auth", version.ref = "credentialsPlayServicesAuth" }
+googleid = { group = "com.google.android.libraries.identity.googleid", name = "googleid", version.ref = "googleid" }
+firebase-database = { group = "com.google.firebase", name = "firebase-database", version.ref = "firebaseDatabase" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
+google-gms-google-services = { id = "com.google.gms.google-services", version.ref = "googleGmsGoogleServices" }