diff --git a/auth/src/main/AndroidManifest.xml b/auth/src/main/AndroidManifest.xml index cec5875b2..132ced9f4 100644 --- a/auth/src/main/AndroidManifest.xml +++ b/auth/src/main/AndroidManifest.xml @@ -37,12 +37,6 @@ android:exported="false" android:theme="@style/FirebaseUI"/> - - () { @Override public void onSuccess(AuthResult authResult) { - // Get the social AuthCredential from the IDPResponse object, link - // it to the email/password account. AuthCredential authCredential = AuthCredentialHelper.getAuthCredential(mIdpResponse); - authResult.getUser().linkWithCredential(authCredential); - firebaseAuth.signOut(); - - // Sign in with the credential - firebaseAuth.signInWithCredential(authCredential) - .addOnFailureListener( - new TaskFailureLogger(TAG, - "Error signing in with credential")) - .addOnSuccessListener( - new OnSuccessListener() { - @Override - public void onSuccess(AuthResult authResult) { - mActivityHelper.saveCredentialsOrFinish( - mSaveSmartLock, - authResult.getUser(), - password, - mIdpResponse); - } - }); + + // If authCredential is null, the user only has an email account. + // Otherwise, the user has an email account that we need to link to an idp. + if (authCredential == null) { + mActivityHelper.saveCredentialsOrFinish( + mSaveSmartLock, + authResult.getUser(), + password, + new IdpResponse(EmailAuthProvider.PROVIDER_ID, email)); + } else { + authResult.getUser() + .linkWithCredential(authCredential) + .addOnFailureListener(new TaskFailureLogger( + TAG, "Error signing in with credential")) + .addOnSuccessListener(new OnSuccessListener() { + @Override + public void onSuccess(AuthResult authResult) { + mActivityHelper.saveCredentialsOrFinish( + mSaveSmartLock, + authResult.getUser(), + mIdpResponse); + } + }); + } } }) .addOnFailureListener(this, new OnFailureListener() { diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java index 5962e4d91..1e8a3e649 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java @@ -31,7 +31,6 @@ import com.firebase.ui.auth.ui.email.fieldvalidators.EmailFieldValidator; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; -import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseAuthInvalidUserException; /** @@ -47,12 +46,12 @@ public class RecoverPasswordActivity extends AppCompatBase implements View.OnCli protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.forgot_password_layout); - String email = getIntent().getStringExtra(ExtraConstants.EXTRA_EMAIL); - - mEmailFieldValidator = new EmailFieldValidator( - (TextInputLayout) findViewById(R.id.email_layout)); + mEmailFieldValidator = + new EmailFieldValidator((TextInputLayout) findViewById(R.id.email_layout)); mEmailEditText = (EditText) findViewById(R.id.email); + + String email = getIntent().getStringExtra(ExtraConstants.EXTRA_EMAIL); if (email != null) { mEmailEditText.setText(email); } @@ -61,8 +60,8 @@ protected void onCreate(Bundle savedInstanceState) { } private void next(final String email) { - FirebaseAuth firebaseAuth = mActivityHelper.getFirebaseAuth(); - firebaseAuth.sendPasswordResetEmail(email) + mActivityHelper.getFirebaseAuth() + .sendPasswordResetEmail(email) .addOnFailureListener( new TaskFailureLogger(TAG, "Error sending password reset email")) .addOnSuccessListener(new OnSuccessListener() { @@ -89,11 +88,10 @@ public void onFailure(@NonNull Exception e) { @Override public void onClick(View view) { if (view.getId() == R.id.button_done) { - if (!mEmailFieldValidator.validate(mEmailEditText.getText())) { - return; + if (mEmailFieldValidator.validate(mEmailEditText.getText())) { + mActivityHelper.showLoadingDialog(R.string.progress_dialog_sending); + next(mEmailEditText.getText().toString()); } - mActivityHelper.showLoadingDialog(R.string.progress_dialog_sending); - next(mEmailEditText.getText().toString()); } } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailActivity.java index e200743ba..44ea4d187 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailActivity.java @@ -43,6 +43,7 @@ import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.TaskFailureLogger; import com.firebase.ui.auth.ui.accountlink.WelcomeBackIdpPrompt; +import com.firebase.ui.auth.ui.accountlink.WelcomeBackPasswordPrompt; import com.firebase.ui.auth.ui.email.fieldvalidators.EmailFieldValidator; import com.firebase.ui.auth.ui.email.fieldvalidators.PasswordFieldValidator; import com.firebase.ui.auth.ui.email.fieldvalidators.RequiredFieldValidator; @@ -249,12 +250,13 @@ public void onSuccess(ProviderQueryResult result) { String provider = providers.get(0); if (provider.equalsIgnoreCase(EmailAuthProvider.PROVIDER_ID)) { - Intent signInIntent = SignInActivity.createIntent( - RegisterEmailActivity.this, - mActivityHelper.getFlowParams(), - email); - mActivityHelper.startActivityForResult(signInIntent, - RC_SIGN_IN); + mActivityHelper.startActivityForResult( + WelcomeBackPasswordPrompt.createIntent( + RegisterEmailActivity.this, + mActivityHelper.getFlowParams(), + new IdpResponse(EmailAuthProvider.PROVIDER_ID, + email)), + RC_SIGN_IN); } else { Intent intent = WelcomeBackIdpPrompt.createIntent( RegisterEmailActivity.this, @@ -313,8 +315,7 @@ public void onComplete(@NonNull Task task) { mSaveSmartLock, user, password, - new IdpResponse(EmailAuthProvider.PROVIDER_ID, - email)); + new IdpResponse(EmailAuthProvider.PROVIDER_ID, email)); } }); } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/SignInActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/SignInActivity.java deleted file mode 100644 index 48b3e521b..000000000 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/SignInActivity.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the - * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.firebase.ui.auth.ui.email; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.design.widget.TextInputLayout; -import android.view.View; -import android.widget.Button; -import android.widget.EditText; -import android.widget.TextView; - -import com.firebase.ui.auth.IdpResponse; -import com.firebase.ui.auth.R; -import com.firebase.ui.auth.ui.AppCompatBase; -import com.firebase.ui.auth.ui.BaseHelper; -import com.firebase.ui.auth.ui.ExtraConstants; -import com.firebase.ui.auth.ui.FlowParameters; -import com.firebase.ui.auth.ui.TaskFailureLogger; -import com.firebase.ui.auth.ui.email.fieldvalidators.EmailFieldValidator; -import com.firebase.ui.auth.ui.email.fieldvalidators.RequiredFieldValidator; -import com.firebase.ui.auth.util.signincontainer.SaveSmartLock; -import com.google.android.gms.tasks.OnFailureListener; -import com.google.android.gms.tasks.OnSuccessListener; -import com.google.firebase.auth.AuthResult; -import com.google.firebase.auth.EmailAuthProvider; - -/** - * Activity to sign in with email and password. - */ -public class SignInActivity extends AppCompatBase implements View.OnClickListener { - private static final String TAG = "SignInActivity"; - - private EditText mEmailEditText; - private EditText mPasswordEditText; - private EmailFieldValidator mEmailValidator; - private RequiredFieldValidator mPasswordValidator; - @Nullable - private SaveSmartLock mSaveSmartLock; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.sign_in_layout); - - mSaveSmartLock = mActivityHelper.getSaveSmartLockInstance(); - - mEmailEditText = (EditText) findViewById(R.id.email); - mPasswordEditText = (EditText) findViewById(R.id.password); - mEmailValidator = new EmailFieldValidator((TextInputLayout) findViewById(R.id.email_layout)); - mPasswordValidator = new RequiredFieldValidator((TextInputLayout) findViewById(R.id.password_layout)); - - String email = getIntent().getStringExtra(ExtraConstants.EXTRA_EMAIL); - if (email != null) { - mEmailEditText.setText(email); - } - Button signInButton = (Button) findViewById(R.id.button_done); - TextView recoveryButton = (TextView) findViewById(R.id.trouble_signing_in); - signInButton.setOnClickListener(this); - recoveryButton.setOnClickListener(this); - } - - private void signIn(final String email, final String password) { - mActivityHelper.getFirebaseAuth() - .signInWithEmailAndPassword(email, password) - .addOnFailureListener( - new TaskFailureLogger(TAG, "Error signing in with email and password")) - .addOnSuccessListener(new OnSuccessListener() { - @Override - public void onSuccess(AuthResult authResult) { - // Save credential in SmartLock (if enabled) - mActivityHelper.saveCredentialsOrFinish( - mSaveSmartLock, - authResult.getUser(), - password, - new IdpResponse(EmailAuthProvider.PROVIDER_ID, email)); - } - }) - .addOnFailureListener(new OnFailureListener() { - @Override - public void onFailure(@NonNull Exception e) { - mActivityHelper.dismissDialog(); - - // Show error message - TextInputLayout passwordInput = - (TextInputLayout) findViewById(R.id.password_layout); - passwordInput.setError(getString(R.string.login_error)); - } - }); - } - - @Override - public void onClick(View view) { - if (view.getId() == R.id.button_done) { - boolean emailValid = mEmailValidator.validate(mEmailEditText.getText()); - boolean passwordValid = mPasswordValidator.validate(mPasswordEditText.getText()); - if (emailValid && passwordValid) { - mActivityHelper.showLoadingDialog(R.string.progress_dialog_signing_in); - signIn(mEmailEditText.getText().toString(), mPasswordEditText.getText().toString()); - } - } else if (view.getId() == R.id.trouble_signing_in) { - startActivity(RecoverPasswordActivity.createIntent( - this, - mActivityHelper.getFlowParams(), - mEmailEditText.getText().toString())); - } - } - - public static Intent createIntent( - Context context, - FlowParameters flowParams, - String email) { - return BaseHelper.createBaseIntent(context, SignInActivity.class, flowParams) - .putExtra(ExtraConstants.EXTRA_EMAIL, email); - } -} diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivity.java index dbb73fe18..5d64d7023 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivity.java @@ -42,7 +42,6 @@ import com.firebase.ui.auth.util.signincontainer.SaveSmartLock; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.FacebookAuthProvider; -import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.GoogleAuthProvider; import com.google.firebase.auth.TwitterAuthProvider; @@ -159,9 +158,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { @Override public void onSuccess(final IdpResponse response) { AuthCredential credential = AuthCredentialHelper.getAuthCredential(response); - final FirebaseAuth firebaseAuth = mActivityHelper.getFirebaseAuth(); - - firebaseAuth + mActivityHelper.getFirebaseAuth() .signInWithCredential(credential) .addOnFailureListener( new TaskFailureLogger(TAG, "Firebase sign in with credential unsuccessful")) diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandler.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandler.java index a946c6f82..deda59510 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandler.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandler.java @@ -31,7 +31,6 @@ import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.EmailAuthProvider; -import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseAuthUserCollisionException; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.ProviderQueryResult; @@ -70,8 +69,8 @@ public void onComplete(@NonNull Task task) { } else { if (task.getException() instanceof FirebaseAuthUserCollisionException) { final String email = mResponse.getEmail(); - FirebaseAuth firebaseAuth = mHelper.getFirebaseAuth(); - firebaseAuth.fetchProvidersForEmail(email) + mHelper.getFirebaseAuth() + .fetchProvidersForEmail(email) .addOnFailureListener(new TaskFailureLogger( TAG, "Error fetching providers for email")) .addOnSuccessListener(new StartWelcomeBackFlow(email)) @@ -107,7 +106,7 @@ public void onSuccess(@NonNull ProviderQueryResult result) { // Start email welcome back flow mActivity.startActivityForResult( WelcomeBackPasswordPrompt.createIntent( - mHelper.getApplicationContext(), + mActivity, mHelper.getFlowParams(), mResponse ), mAccountLinkResultCode); @@ -115,7 +114,7 @@ public void onSuccess(@NonNull ProviderQueryResult result) { // Start IDP welcome back flow mActivity.startActivityForResult( WelcomeBackIdpPrompt.createIntent( - mHelper.getApplicationContext(), + mActivity, mHelper.getFlowParams(), result.getProviders().get(0), mResponse, diff --git a/auth/src/main/res/layout/sign_in_layout.xml b/auth/src/main/res/layout/sign_in_layout.xml deleted file mode 100644 index a53d74bd9..000000000 --- a/auth/src/main/res/layout/sign_in_layout.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -