diff --git a/app/src/main/java/com/example/updateapp/views/activites/LoginActivity.java b/app/src/main/java/com/example/updateapp/views/activites/LoginActivity.java index 8700ad9..f872e4a 100644 --- a/app/src/main/java/com/example/updateapp/views/activites/LoginActivity.java +++ b/app/src/main/java/com/example/updateapp/views/activites/LoginActivity.java @@ -55,6 +55,13 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(binding.getRoot()); auth = FirebaseAuth.getInstance(); + + // Handle prefilled email from OTPActivity redirect + String prefilledEmail = getIntent().getStringExtra("prefilled_email"); + if (prefilledEmail != null && !prefilledEmail.isEmpty()) { + binding.edtEmail.setText(prefilledEmail); + } + googleBtn = findViewById(R.id.google_btn); emailBtn = findViewById(R.id.email_btn); diff --git a/app/src/main/java/com/example/updateapp/views/activites/OTPActivity.java b/app/src/main/java/com/example/updateapp/views/activites/OTPActivity.java index 918ed05..7cf80d6 100644 --- a/app/src/main/java/com/example/updateapp/views/activites/OTPActivity.java +++ b/app/src/main/java/com/example/updateapp/views/activites/OTPActivity.java @@ -186,9 +186,9 @@ private void verifyCredential(PhoneAuthCredential credential) { String msg = e != null ? e.getMessage() : "Unknown linking error"; if (e instanceof FirebaseAuthUserCollisionException) { - Toast.makeText(OTPActivity.this, - "This email is already registered with a different account. Please login with that email or use another email.", - Toast.LENGTH_LONG).show(); + // Email already exists with different account. + // Save phone-based user data to Firestore first, then redirect to login. + saveUserToFirestoreOnCollision(uid, name, email, number, password); } else { Toast.makeText(OTPActivity.this, "Failed to link email: " + msg, @@ -199,6 +199,49 @@ private void verifyCredential(PhoneAuthCredential credential) { }); } + private void saveUserToFirestoreOnCollision(String uid, String name, String email, String number, String password) { + if (name == null) name = ""; + if (email == null) email = ""; + if (number == null) number = ""; + if (password == null) password = ""; + + UserModel user = new UserModel( + name, + email, + number, + password, + "https://firebasestorage.googleapis.com/v0/b/earning-b8942.firebasestorage.app/o/account.png?alt=media&token=***" + ); + + if (dialog.isShowing()) dialog.dismiss(); + + firestore.collection("users") + .document(uid) + .set(user) + .addOnSuccessListener(unused -> { + // User data saved successfully. Now sign out and redirect to login. + auth.signOut(); + Toast.makeText(OTPActivity.this, + "An account with this email already exists. Please login with your email and password.", + Toast.LENGTH_LONG).show(); + Intent intent = new Intent(OTPActivity.this, LoginActivity.class); + intent.putExtra("prefilled_email", email); + startActivity(intent); + finish(); + }) + .addOnFailureListener(e -> { + // Failed to save - still redirect to login with email prefilled. + auth.signOut(); + Toast.makeText(OTPActivity.this, + "Failed to link email: " + e.getMessage() + ". Please login with your existing account.", + Toast.LENGTH_LONG).show(); + Intent intent = new Intent(OTPActivity.this, LoginActivity.class); + intent.putExtra("prefilled_email", email); + startActivity(intent); + finish(); + }); + } + private void saveUserToFirestoreAndContinue(String uid, String name, String email, String number, String password) { if (name == null) name = "";