package com.example.loginsignupauth;
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import androidx.annotation.NonNull;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Patterns;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.developer.gbuttons.GoogleSignInButton;
import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInClient;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
public class LoginActivity extends AppCompatActivity {
private EditText loginEmail, loginPassword;
private TextView signupRedirectText;
private Button loginButton;
private FirebaseAuth auth;
GoogleSignInButton googleBtn;
GoogleSignInOptions gOptions;
GoogleSignInClient gClient;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
loginEmail = findViewById(R.id.login_email);
loginPassword = findViewById(R.id.login_password);
loginButton = findViewById(R.id.login_button);
signupRedirectText = findViewById(R.id.signUpRedirectText);
forgotPassword = findViewById(R.id.forgot_password);
googleBtn = findViewById(R.id.googleBtn);
auth = FirebaseAuth.getInstance();
loginButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String email = loginEmail.getText().toString();
String pass = loginPassword.getText().toString();
if (!email.isEmpty() && Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
auth.signInWithEmailAndPassword(email, pass)
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
public void onSuccess(AuthResult authResult) {
Toast.makeText(LoginActivity.this, "Login Successful", Toast.LENGTH_SHORT).show();
startActivity(new Intent(LoginActivity.this, MainActivity.class));
}).addOnFailureListener(new OnFailureListener() {
public void onFailure(@NonNull Exception e) {
Toast.makeText(LoginActivity.this, "Login Failed", Toast.LENGTH_SHORT).show();
loginPassword.setError("Empty fields are not allowed");
} else if (email.isEmpty()) {
loginEmail.setError("Empty fields are not allowed");
loginEmail.setError("Please enter correct email");
signupRedirectText.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
startActivity(new Intent(LoginActivity.this, SignupActivity.class));
forgotPassword.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this);
View dialogView = getLayoutInflater().inflate(R.layout.dialog_forgot, null);
EditText emailBox = dialogView.findViewById(R.id.emailBox);
builder.setView(dialogView);
AlertDialog dialog = builder.create();
dialogView.findViewById(R.id.btnReset).setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
String userEmail = emailBox.getText().toString();
if (TextUtils.isEmpty(userEmail) && !Patterns.EMAIL_ADDRESS.matcher(userEmail).matches()){
Toast.makeText(LoginActivity.this, "Enter your registered email id", Toast.LENGTH_SHORT).show();
auth.sendPasswordResetEmail(userEmail).addOnCompleteListener(new OnCompleteListener<Void>() {
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Toast.makeText(LoginActivity.this, "Check your email", Toast.LENGTH_SHORT).show();
Toast.makeText(LoginActivity.this, "Unable to send, failed", Toast.LENGTH_SHORT).show();
dialogView.findViewById(R.id.btnCancel).setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
if (dialog.getWindow() != null){
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
gOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail().build();
gClient = GoogleSignIn.getClient(this, gOptions);
GoogleSignInAccount gAccount = GoogleSignIn.getLastSignedInAccount(this);
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
ActivityResultLauncher<Intent> activityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == Activity.RESULT_OK){
Intent data = result.getData();
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
task.getResult(ApiException.class);
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
} catch (ApiException e){
Toast.makeText(LoginActivity.this, "Something went wrong", Toast.LENGTH_SHORT).show();
googleBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent signInIntent = gClient.getSignInIntent();
activityResultLauncher.launch(signInIntent);