1package uo269509.favoritepath.activity;
3import android.content.Intent;
4import android.os.Bundle;
5import android.widget.Button;
6import android.widget.EditText;
7import android.widget.Toast;
9import androidx.appcompat.app.AppCompatActivity;
11import com.google.android.gms.auth.api.signin.GoogleSignIn;
12import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
13import com.google.android.gms.auth.api.signin.GoogleSignInClient;
14import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
15import com.google.android.gms.common.SignInButton;
16import com.google.android.gms.common.api.ApiException;
17import com.google.android.gms.tasks.Task;
18import com.google.firebase.auth.AuthCredential;
19import com.google.firebase.auth.FirebaseAuth;
20import com.google.firebase.auth.FirebaseUser;
21import com.google.firebase.auth.GoogleAuthProvider;
22import com.google.firebase.firestore.CollectionReference;
23import com.google.firebase.firestore.DocumentSnapshot;
24import com.google.firebase.firestore.FirebaseFirestore;
26import java.util.ArrayList;
27import java.util.HashMap;
30import uo269509.favoritepath.R;
34 private static final int RC_SIGN_IN = 1;
35 private EditText emailText;
36 private EditText passwordText;
37 private Button loginButton;
38 private Button registerButton;
39 private SignInButton googleButton;
40 private FirebaseAuth mAuth;
41 private FirebaseFirestore db;
42 GoogleSignInClient mGoogleSignInClient;
50 protected void onCreate(Bundle savedInstanceState) {
51 super.onCreate(savedInstanceState);
52 setContentView(R.layout.activity_login);
54 loginButton.setOnClickListener(v -> loginUser());
55 registerButton.setOnClickListener(v -> registerUser());
56 googleButton.setOnClickListener(v -> signInWithGoogle());
69 super.onActivityResult(requestCode, resultCode, data);
70 if (requestCode == RC_SIGN_IN) {
71 Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
73 GoogleSignInAccount account = task.getResult(ApiException.class);
74 firebaseAuthWithGoogle(account.getIdToken());
75 }
catch (ApiException e) {
76 Toast.makeText(
LoginActivity.this,
"Login fallido", Toast.LENGTH_SHORT).show();
87 private void firebaseAuthWithGoogle(String idToken) {
88 AuthCredential credential = GoogleAuthProvider.getCredential(idToken,
null);
89 mAuth.signInWithCredential(credential)
90 .addOnCompleteListener(
this, task -> {
91 if (task.isSuccessful()) {
92 FirebaseUser user = mAuth.getCurrentUser();
93 createUserInFirebaseFirestore(user.getEmail());
94 Intent intent = new Intent(LoginActivity.this, MainActivity.class);
95 startActivity(intent);
98 Toast.makeText(LoginActivity.this,
"Autenticación fallida", Toast.LENGTH_SHORT).show();
108 private void loginUser() {
109 String email = emailText.getText().toString().trim();
110 String password = passwordText.getText().toString().trim();
111 if(email.isEmpty() || password.isEmpty()){
112 Toast.makeText(LoginActivity.this,
"Rellene todos los campos", Toast.LENGTH_SHORT).show();
114 mAuth.signInWithEmailAndPassword(email, password)
115 .addOnCompleteListener(
this, task -> {
116 if (task.isSuccessful()) {
117 Intent intent = new Intent(LoginActivity.this, MainActivity.class);
118 startActivity(intent);
121 Toast.makeText(LoginActivity.this,
"Login fallido", Toast.LENGTH_SHORT).show();
133 private void registerUser() {
134 String email = emailText.getText().toString().trim();
135 String password = passwordText.getText().toString().trim();
136 if(password.length() < 6){
137 Toast.makeText(LoginActivity.this,
"La contraseña debe tener 6 caracteres como mínimo", Toast.LENGTH_SHORT).show();
139 if(!email.isEmpty() && !password.isEmpty()) {
140 mAuth.createUserWithEmailAndPassword(email, password)
141 .addOnCompleteListener(
this, task -> {
142 if (task.isSuccessful()) {
143 createUserInFirebaseFirestore(email);
144 Intent intent = new Intent(LoginActivity.this, MainActivity.class);
145 startActivity(intent);
148 Toast.makeText(LoginActivity.this,
"Registro fallido",
149 Toast.LENGTH_SHORT).show();
153 Toast.makeText(LoginActivity.this,
"Rellene todos los campos", Toast.LENGTH_SHORT).show();
162 CollectionReference usuarios = db.collection(
"usuarios");
163 usuarios.document(email).get().addOnCompleteListener(task -> {
164 if (task.isSuccessful()) {
165 DocumentSnapshot document = task.getResult();
166 if (!document.exists()) {
167 Map<String, Object> camposUsuario = new HashMap<>();
168 camposUsuario.put(
"nombre", email.split(
"@")[0].trim());
169 camposUsuario.put(
"descripcion",
"");
170 ArrayList<String> nombreColecciones = new ArrayList<>();
171 nombreColecciones.add(
"Rutas propias");
172 nombreColecciones.add(
"Rutas favoritas");
173 camposUsuario.put(
"nombreColecciones",nombreColecciones);
174 usuarios.document(email).set(camposUsuario);
184 private void signInWithGoogle() {
185 mGoogleSignInClient.signOut();
186 startActivityForResult(mGoogleSignInClient.getSignInIntent(), RC_SIGN_IN);
193 emailText = findViewById(R.id.email_text);
194 passwordText = findViewById(R.id.password_text);
195 loginButton = findViewById(R.id.login_btn);
196 registerButton = findViewById(R.id.register_btn);
197 googleButton = findViewById(R.id.google_sign_in_button);
198 mAuth = FirebaseAuth.getInstance();
199 db = FirebaseFirestore.getInstance();
200 mGoogleSignInClient = GoogleSignIn.getClient(
this,
new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestIdToken(getString(R.string.default_web_client_id)).requestEmail().build());
void onActivityResult(int requestCode, int resultCode, Intent data)
void onCreate(Bundle savedInstanceState)
void createUserInFirebaseFirestore(String email)