From d515d5f9b47164a11b35760a508a9b22fd304e24 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Wed, 23 Nov 2016 19:30:48 -0800 Subject: [PATCH 01/26] Initial refactor --- auth/src/main/AndroidManifest.xml | 12 - .../ui/auth/ui/email/AcquireEmailHelper.java | 108 --------- .../ui/email/EmailHintContainerActivity.java | 84 ------- .../auth/ui/email/RegisterEmailActivity.java | 206 +++++++++++++++--- .../ui/email/SignInNoPasswordActivity.java | 82 ------- .../auth/ui/idp/AuthMethodPickerActivity.java | 19 +- .../firebase/ui/auth/util/EmailFlowUtil.java | 27 --- .../util/signincontainer/SignInDelegate.java | 12 +- auth/src/main/res/values/strings.xml | 1 + .../ui/idp/AuthMethodPickerActivityTest.java | 1 - 10 files changed, 185 insertions(+), 367 deletions(-) delete mode 100644 auth/src/main/java/com/firebase/ui/auth/ui/email/AcquireEmailHelper.java delete mode 100644 auth/src/main/java/com/firebase/ui/auth/ui/email/EmailHintContainerActivity.java delete mode 100644 auth/src/main/java/com/firebase/ui/auth/ui/email/SignInNoPasswordActivity.java delete mode 100644 auth/src/main/java/com/firebase/ui/auth/util/EmailFlowUtil.java diff --git a/auth/src/main/AndroidManifest.xml b/auth/src/main/AndroidManifest.xml index 914362819..646954604 100644 --- a/auth/src/main/AndroidManifest.xml +++ b/auth/src/main/AndroidManifest.xml @@ -21,12 +21,6 @@ android:exported="false" android:theme="@style/Theme.AppCompat.NoActionBar"/> - - - - REQUEST_CODES = Arrays.asList( - RC_REGISTER_ACCOUNT, - RC_WELCOME_BACK_IDP, - RC_SIGN_IN - ); - - private ActivityHelper mActivityHelper; - - public AcquireEmailHelper(ActivityHelper activityHelper) { - mActivityHelper = activityHelper; - } - - public void checkAccountExists(final String email) { - FirebaseAuth firebaseAuth = mActivityHelper.getFirebaseAuth(); - mActivityHelper.showLoadingDialog(R.string.progress_dialog_loading); - if (!TextUtils.isEmpty(email)) { - firebaseAuth - .fetchProvidersForEmail(email) - .addOnFailureListener( - new TaskFailureLogger(TAG, "Error fetching providers for email")) - .addOnCompleteListener( - new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()) { - startEmailHandler(email, task.getResult().getProviders()); - } else { - mActivityHelper.dismissDialog(); - } - } - }); - } - } - - private void startEmailHandler(String email, List providers) { - mActivityHelper.dismissDialog(); - if (providers == null || providers.isEmpty()) { - // account doesn't exist yet - Intent registerIntent = RegisterEmailActivity.createIntent( - mActivityHelper.getApplicationContext(), - mActivityHelper.getFlowParams(), - email); - mActivityHelper.startActivityForResult(registerIntent, RC_REGISTER_ACCOUNT); - } else { - // account does exist - String provider = providers.get(0); - if (provider.equalsIgnoreCase(EmailAuthProvider.PROVIDER_ID)) { - Intent signInIntent = SignInActivity.createIntent( - mActivityHelper.getApplicationContext(), - mActivityHelper.getFlowParams(), - email); - mActivityHelper.startActivityForResult(signInIntent, RC_SIGN_IN); - } else { - Intent intent = WelcomeBackIdpPrompt.createIntent( - mActivityHelper.getApplicationContext(), - mActivityHelper.getFlowParams(), - provider, - null, - email); - mActivityHelper.startActivityForResult(intent, RC_WELCOME_BACK_IDP); - } - } - } - - public void onActivityResult(int requestCode, int resultCode, Intent data) { - if (REQUEST_CODES.contains(requestCode)) { - mActivityHelper.finish(resultCode, data); - } - } -} diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/EmailHintContainerActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/EmailHintContainerActivity.java deleted file mode 100644 index 4ce1ea1bd..000000000 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/EmailHintContainerActivity.java +++ /dev/null @@ -1,84 +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.app.PendingIntent; -import android.content.Context; -import android.content.Intent; -import android.content.IntentSender; -import android.os.Bundle; -import android.util.Log; - -import com.firebase.ui.auth.ui.AppCompatBase; -import com.firebase.ui.auth.ui.BaseHelper; -import com.firebase.ui.auth.ui.FlowParameters; -import com.firebase.ui.auth.util.FirebaseAuthWrapper; -import com.firebase.ui.auth.util.FirebaseAuthWrapperFactory; -import com.google.android.gms.auth.api.credentials.Credential; - -public class EmailHintContainerActivity extends AppCompatBase { - private static final String TAG = "EmailHintContainer"; - private static final int RC_HINT = 13; - private AcquireEmailHelper mAcquireEmailHelper; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mAcquireEmailHelper = new AcquireEmailHelper(mActivityHelper); - FirebaseAuthWrapper apiWrapper = - FirebaseAuthWrapperFactory.getFirebaseAuthWrapper(mActivityHelper.getAppName()); - - PendingIntent hintIntent = apiWrapper.getEmailHintIntent(this); - if (hintIntent != null) { - try { - startIntentSenderForResult(hintIntent.getIntentSender(), RC_HINT, null, 0, 0, 0); - return; - } catch (IntentSender.SendIntentException e) { - Log.e(TAG, "Unable to start hint intent", e); - } - } - finish(RESULT_CANCELED, new Intent()); - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (requestCode == RC_HINT && data != null) { - Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY); - if (credential == null) { - // If the hint picker is cancelled show the SignInNoPasswordActivity - startActivityForResult( - SignInNoPasswordActivity.createIntent( - this, - mActivityHelper.getFlowParams(), - null), - AcquireEmailHelper.RC_SIGN_IN); - return; - } - mAcquireEmailHelper.checkAccountExists(credential.getId()); - } else { - mAcquireEmailHelper.onActivityResult(requestCode, resultCode, data); - } - } - - public static Intent createIntent( - Context context, - FlowParameters flowParams) { - return BaseHelper.createBaseIntent( - context, - EmailHintContainerActivity.class, - flowParams); - } -} 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 84f85b781..7327ac448 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 @@ -14,8 +14,10 @@ package com.firebase.ui.auth.ui.email; +import android.app.PendingIntent; import android.content.Context; import android.content.Intent; +import android.content.IntentSender; import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; @@ -23,10 +25,11 @@ import android.support.design.widget.TextInputLayout; import android.support.v4.content.ContextCompat; import android.text.SpannableStringBuilder; +import android.text.TextUtils; import android.text.style.ForegroundColorSpan; +import android.util.Log; import android.util.TypedValue; import android.view.View; -import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; @@ -37,28 +40,40 @@ 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.account_link.WelcomeBackIdpPrompt; import com.firebase.ui.auth.ui.email.field_validators.EmailFieldValidator; import com.firebase.ui.auth.ui.email.field_validators.PasswordFieldValidator; import com.firebase.ui.auth.ui.email.field_validators.RequiredFieldValidator; +import com.firebase.ui.auth.util.FirebaseAuthWrapperFactory; import com.firebase.ui.auth.util.signincontainer.SaveSmartLock; +import com.google.android.gms.auth.api.credentials.Credential; 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.EmailAuthProvider; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseAuthInvalidCredentialsException; import com.google.firebase.auth.FirebaseAuthUserCollisionException; import com.google.firebase.auth.FirebaseAuthWeakPasswordException; import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.auth.ProviderQueryResult; import com.google.firebase.auth.UserProfileChangeRequest; +import java.util.List; + /** * Activity displaying a form to create a new email/password account. */ -public class RegisterEmailActivity extends AppCompatBase implements View.OnClickListener { +public class RegisterEmailActivity extends AppCompatBase implements View.OnClickListener, View.OnFocusChangeListener { private static final String TAG = "RegisterEmailActivity"; + private static final String PREV_EMAIL = "previous_email"; + private static final int RC_HINT = 13; + private static final int RC_WELCOME_BACK_IDP = 15; + private static final int RC_SIGN_IN = 16; + private String mPrevEmail; private EditText mEmailEditText; private EditText mPasswordEditText; private EditText mNameEditText; @@ -75,9 +90,6 @@ protected void onCreate(Bundle savedInstanceState) { mSaveSmartLock = mActivityHelper.getSaveSmartLockInstance(); - String email = getIntent().getStringExtra(ExtraConstants.EXTRA_EMAIL); - mEmailEditText = (EditText) findViewById(R.id.email); - TypedValue visibleIcon = new TypedValue(); TypedValue slightlyVisibleIcon = new TypedValue(); @@ -94,21 +106,45 @@ protected void onCreate(Bundle savedInstanceState) { togglePasswordImage.setOnClickListener(new PasswordToggler(mPasswordEditText)); - mNameEditText = (EditText) findViewById(R.id.name); - mPasswordFieldValidator = new PasswordFieldValidator((TextInputLayout) - findViewById(R.id.password_layout), + mPasswordFieldValidator = new PasswordFieldValidator( + (TextInputLayout) findViewById(R.id.password_layout), getResources().getInteger(R.integer.min_password_length)); mNameValidator = new RequiredFieldValidator((TextInputLayout) findViewById(R.id.name_layout)); mEmailFieldValidator = new EmailFieldValidator((TextInputLayout) findViewById(R.id.email_layout)); - if (email != null) { + mNameEditText = (EditText) findViewById(R.id.name); + mEmailEditText = (EditText) findViewById(R.id.email); + + mEmailEditText.setOnFocusChangeListener(this); + mNameEditText.setOnFocusChangeListener(this); + mPasswordEditText.setOnFocusChangeListener(this); + findViewById(R.id.button_create).setOnClickListener(this); + + setUpTermsOfService(); + + // Activity rotated + if (savedInstanceState != null) { + mPrevEmail = savedInstanceState.getString(PREV_EMAIL); + return; + } + + String email = getIntent().getStringExtra(ExtraConstants.EXTRA_EMAIL); + if (!TextUtils.isEmpty(email)) { mEmailEditText.setText(email); - mEmailEditText.setEnabled(false); + mNameEditText.requestFocus(); + return; + } + + if (mActivityHelper.getFlowParams().smartLockEnabled) { + showEmailAutoCompleteHint(); } - setUpTermsOfService(); - Button createButton = (Button) findViewById(R.id.button_create); - createButton.setOnClickListener(this); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + outState.putString(PREV_EMAIL, mPrevEmail); + super.onSaveInstanceState(outState); } private void setUpTermsOfService() { @@ -129,13 +165,129 @@ private void setUpTermsOfService() { agreementText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse - (mActivityHelper.getFlowParams().termsOfServiceUrl)); - startActivity(intent); + startActivity(new Intent(Intent.ACTION_VIEW).setData( + Uri.parse(mActivityHelper.getFlowParams().termsOfServiceUrl))); } }); } + private void showEmailAutoCompleteHint() { + PendingIntent hintIntent = + FirebaseAuthWrapperFactory + .getFirebaseAuthWrapper(mActivityHelper.getAppName()) + .getEmailHintIntent(this); + if (hintIntent != null) { + try { + startIntentSenderForResult(hintIntent.getIntentSender(), RC_HINT, null, 0, 0, 0); + } catch (IntentSender.SendIntentException e) { + Log.e(TAG, "Unable to start hint intent", e); + } + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + switch (requestCode) { + case RC_HINT: + if (data != null) { + Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY); + if (credential != null) { + mEmailEditText.setText(credential.getId()); + String name = credential.getName(); + mNameEditText.setText(name); + if (TextUtils.isEmpty(name)) { + mNameEditText.requestFocus(); + } else { + mPasswordEditText.requestFocus(); + } + } + } + break; + case RC_SIGN_IN: + case RC_WELCOME_BACK_IDP: + finish(resultCode, data); + break; + } + } + + @Override + public void onFocusChange(View view, boolean hasFocus) { + if (hasFocus) return; + int id = view.getId(); + if (id == R.id.email) { + String email = mEmailEditText.getText().toString(); + if (mEmailFieldValidator.validate(mEmailEditText.getText())) { + if (!email.equals(mPrevEmail)) { + mActivityHelper.showLoadingDialog(R.string.progress_dialog_checking_accounts); + checkAccountExists(email); + mPrevEmail = email; + } + } + } else if (id == R.id.name) { + mNameValidator.validate(mNameEditText.getText()); + } else if (id == R.id.password) { + mPasswordFieldValidator.validate(mPasswordEditText.getText()); + } + } + + public void checkAccountExists(final String email) { + if (!TextUtils.isEmpty(email)) { + mActivityHelper.getFirebaseAuth() + .fetchProvidersForEmail(email) + .addOnFailureListener( + new TaskFailureLogger(TAG, "Error fetching providers for email")) + .addOnCompleteListener( + new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + List providers = task.getResult().getProviders(); + if (providers != null && !providers.isEmpty()) { + // Account does exist + String provider = providers.get(0); + if (provider.equalsIgnoreCase(EmailAuthProvider.PROVIDER_ID)) { + Intent signInIntent = SignInActivity.createIntent( + mActivityHelper.getApplicationContext(), + mActivityHelper.getFlowParams(), + email); + mActivityHelper.startActivityForResult(signInIntent, + RC_SIGN_IN); + } else { + Intent intent = WelcomeBackIdpPrompt.createIntent( + mActivityHelper.getApplicationContext(), + mActivityHelper.getFlowParams(), + provider, + null, + email); + mActivityHelper.startActivityForResult(intent, + RC_WELCOME_BACK_IDP); + } + } + } // TODO: 11/23/2016 what happens if we fail? + mActivityHelper.dismissDialog(); + } + }); + } + } + + @Override + public void onClick(View view) { + if (view.getId() == R.id.button_create) { + String email = mEmailEditText.getText().toString(); + String password = mPasswordEditText.getText().toString(); + String name = mNameEditText.getText().toString(); + + boolean emailValid = mEmailFieldValidator.validate(email); + boolean passwordValid = mPasswordFieldValidator.validate(password); + boolean nameValid = mNameValidator.validate(name); + if (emailValid && passwordValid && nameValid) { + mActivityHelper.showLoadingDialog(R.string.progress_dialog_signing_up); + registerUser(email, name, password); + } + } + } + private void registerUser(final String email, final String name, final String password) { final FirebaseAuth firebaseAuth = mActivityHelper.getFirebaseAuth(); // create the user @@ -195,27 +347,11 @@ public void onFailure(@NonNull Exception e) { }); } - @Override - public void onClick(View view) { - if (view.getId() == R.id.button_create) { - String email = mEmailEditText.getText().toString(); - String password = mPasswordEditText.getText().toString(); - String name = mNameEditText.getText().toString(); - - boolean emailValid = mEmailFieldValidator.validate(email); - boolean passwordValid = mPasswordFieldValidator.validate(password); - boolean nameValid = mNameValidator.validate(name); - if (emailValid && passwordValid && nameValid) { - mActivityHelper.showLoadingDialog(R.string.progress_dialog_signing_up); - registerUser(email, name, password); - } - } + public static Intent createIntent(Context context, FlowParameters flowParams) { + return createIntent(context, flowParams, null); } - public static Intent createIntent( - Context context, - FlowParameters flowParams, - String email) { + public static Intent createIntent(Context context, FlowParameters flowParams, String email) { return BaseHelper.createBaseIntent(context, RegisterEmailActivity.class, flowParams) .putExtra(ExtraConstants.EXTRA_EMAIL, email); } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/SignInNoPasswordActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/SignInNoPasswordActivity.java deleted file mode 100644 index 66f83c208..000000000 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/SignInNoPasswordActivity.java +++ /dev/null @@ -1,82 +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.design.widget.TextInputLayout; -import android.view.View; -import android.view.WindowManager; -import android.widget.Button; -import android.widget.EditText; - -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.email.field_validators.EmailFieldValidator; - -public class SignInNoPasswordActivity extends AppCompatBase implements View.OnClickListener { - private EditText mEmailEditText; - private EmailFieldValidator mEmailFieldValidator; - private AcquireEmailHelper mAcquireEmailHelper; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mAcquireEmailHelper = new AcquireEmailHelper(mActivityHelper); - setContentView(R.layout.signin_no_password_layout); - - String email = getIntent().getStringExtra(ExtraConstants.EXTRA_EMAIL); - mEmailFieldValidator = new EmailFieldValidator( - (TextInputLayout) findViewById(R.id.input_layout_email)); - mEmailEditText = (EditText) findViewById(R.id.email); - if (email != null) { - mEmailEditText.setText(email); - } - - // show the keyboard - getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); - - Button button = (Button) findViewById(R.id.button_ok); - button.setOnClickListener(this); - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - mAcquireEmailHelper.onActivityResult(requestCode, resultCode, data); - } - - @Override - public void onClick(View view) { - if (!mEmailFieldValidator.validate(mEmailEditText.getText())) { - return; - } - mActivityHelper.showLoadingDialog(R.string.progress_dialog_loading); - String email = mEmailEditText.getText().toString(); - mAcquireEmailHelper.checkAccountExists(email); - } - - public static Intent createIntent( - Context context, - FlowParameters flowParams, - String email) { - return BaseHelper.createBaseIntent(context, SignInNoPasswordActivity.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 11ca44ce3..88a4f17a2 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 @@ -38,8 +38,7 @@ import com.firebase.ui.auth.ui.BaseHelper; import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.TaskFailureLogger; -import com.firebase.ui.auth.ui.email.EmailHintContainerActivity; -import com.firebase.ui.auth.util.EmailFlowUtil; +import com.firebase.ui.auth.ui.email.RegisterEmailActivity; import com.firebase.ui.auth.util.signincontainer.SaveSmartLock; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.FacebookAuthProvider; @@ -54,11 +53,11 @@ * Presents the list of authentication options for this app to the user. If an * identity provider option is selected, a {@link CredentialSignInHandler} * is launched to manage the IDP-specific sign-in flow. If email authentication is chosen, - * the {@link EmailHintContainerActivity root email flow activity} is started. - * + * the {@link RegisterEmailActivity} is started. + *

*

* Authentication picker activity rendered with all authentication options and default settings + * src="data:image/png;base64,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"> */ public class AuthMethodPickerActivity extends AppCompatBase implements IdpCallback, View.OnClickListener { @@ -67,7 +66,8 @@ public class AuthMethodPickerActivity extends AppCompatBase private static final int RC_ACCOUNT_LINK = 3; private ArrayList mIdpProviders; - @Nullable private SaveSmartLock mSaveSmartLock; + @Nullable + private SaveSmartLock mSaveSmartLock; @Override protected void onCreate(Bundle savedInstanceState) { @@ -187,10 +187,9 @@ public void onFailure(Bundle extra) { @Override public void onClick(View view) { if (view.getId() == R.id.email_provider) { - Intent intent = EmailFlowUtil.createIntent( - this, - mActivityHelper.getFlowParams()); - startActivityForResult(intent, RC_EMAIL_FLOW); + startActivityForResult( + RegisterEmailActivity.createIntent(this, mActivityHelper.getFlowParams()), + RC_EMAIL_FLOW); } } diff --git a/auth/src/main/java/com/firebase/ui/auth/util/EmailFlowUtil.java b/auth/src/main/java/com/firebase/ui/auth/util/EmailFlowUtil.java deleted file mode 100644 index d0db5c591..000000000 --- a/auth/src/main/java/com/firebase/ui/auth/util/EmailFlowUtil.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.firebase.ui.auth.util; - -import android.content.Context; -import android.content.Intent; - -import com.firebase.ui.auth.ui.FlowParameters; -import com.firebase.ui.auth.ui.email.EmailHintContainerActivity; -import com.firebase.ui.auth.ui.email.SignInNoPasswordActivity; - -/** - * Helper class to kick off the Email/Password sign-in flow. - */ -public class EmailFlowUtil { - - /** - * Return an intent for either {@link EmailHintContainerActivity} or - * {@link SignInNoPasswordActivity} depending on if SmartLock is enabled. - */ - public static Intent createIntent(Context context, FlowParameters parameters) { - if (parameters.smartLockEnabled) { - return EmailHintContainerActivity.createIntent(context, parameters); - } else { - return SignInNoPasswordActivity.createIntent(context, parameters, null); - } - } - -} diff --git a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java index 102be1f3f..db23a4a0e 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java @@ -20,10 +20,9 @@ import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.FragmentHelper; import com.firebase.ui.auth.ui.TaskFailureLogger; -import com.firebase.ui.auth.ui.email.SignInNoPasswordActivity; +import com.firebase.ui.auth.ui.email.RegisterEmailActivity; import com.firebase.ui.auth.ui.idp.AuthMethodPickerActivity; import com.firebase.ui.auth.util.CredentialsApiHelper; -import com.firebase.ui.auth.util.EmailFlowUtil; import com.firebase.ui.auth.util.GoogleApiConstants; import com.firebase.ui.auth.util.PlayServicesHelper; import com.google.android.gms.auth.api.Auth; @@ -58,8 +57,7 @@ * with this credential. If it does not, the * {@link AuthMethodPickerActivity authentication method picker activity} * is started, unless only email is supported, in which case the - * {@link SignInNoPasswordActivity email sign-in flow} - * is started. + * {@link RegisterEmailActivity} is started. */ public class SignInDelegate extends SmartLockBase { private static final String TAG = "SignInDelegate"; @@ -254,9 +252,7 @@ private void startAuthMethodChoice() { if (idpConfigs.size() == 1) { if (idpConfigs.get(0).getProviderId().equals(EmailAuthProvider.PROVIDER_ID)) { startActivityForResult( - EmailFlowUtil.createIntent( - getContext(), - mHelper.getFlowParams()), + RegisterEmailActivity.createIntent(getContext(), mHelper.getFlowParams()), RC_EMAIL_FLOW); } else { redirectToIdpSignIn(null, @@ -331,7 +327,7 @@ public void onComplete(@NonNull Task task) { private void redirectToIdpSignIn(String email, String accountType) { if (TextUtils.isEmpty(accountType)) { startActivityForResult( - SignInNoPasswordActivity.createIntent( + RegisterEmailActivity.createIntent( getContext(), mHelper.getFlowParams(), email), diff --git a/auth/src/main/res/values/strings.xml b/auth/src/main/res/values/strings.xml index 3cc6b7a69..eb3885138 100644 --- a/auth/src/main/res/values/strings.xml +++ b/auth/src/main/res/values/strings.xml @@ -59,6 +59,7 @@ Sending… Signing in… Signing up… + Checking for existing accounts… App logo diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivityTest.java index 4926dc21d..99e5daf73 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivityTest.java @@ -33,7 +33,6 @@ import com.firebase.ui.auth.test_helpers.LoginManagerShadow; import com.firebase.ui.auth.test_helpers.TestConstants; import com.firebase.ui.auth.test_helpers.TestHelper; -import com.firebase.ui.auth.ui.email.EmailHintContainerActivity; import com.firebase.ui.auth.util.PlayServicesHelper; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.AuthResult; From cf342ce5dc5acd4e2bb893fdf8e18edc1acffa9e Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Wed, 23 Nov 2016 19:33:37 -0800 Subject: [PATCH 02/26] Fix broken tests --- .../ui/email/RegisterEmailActivityTest.java | 2 +- .../email/SignInNoPasswordActivityTest.java | 144 ------------------ .../ui/idp/AuthMethodPickerActivityTest.java | 3 +- 3 files changed, 3 insertions(+), 146 deletions(-) delete mode 100644 auth/src/test/java/com/firebase/ui/auth/ui/email/SignInNoPasswordActivityTest.java diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/email/RegisterEmailActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/email/RegisterEmailActivityTest.java index 19dcbc42e..af12d6a42 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/email/RegisterEmailActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/email/RegisterEmailActivityTest.java @@ -55,7 +55,7 @@ public class RegisterEmailActivityTest { private RegisterEmailActivity createActivity(String email) { - Intent startIntent = SignInNoPasswordActivity.createIntent( + Intent startIntent = RegisterEmailActivity.createIntent( RuntimeEnvironment.application, TestHelper.getFlowParameters(Collections.singletonList(AuthUI.EMAIL_PROVIDER)), email); diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInNoPasswordActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInNoPasswordActivityTest.java deleted file mode 100644 index ad28853dc..000000000 --- a/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInNoPasswordActivityTest.java +++ /dev/null @@ -1,144 +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.Intent; -import android.support.design.widget.TextInputLayout; -import android.widget.Button; -import android.widget.EditText; - -import com.firebase.ui.auth.AuthUI; -import com.firebase.ui.auth.BuildConfig; -import com.firebase.ui.auth.R; -import com.firebase.ui.auth.test_helpers.ActivityHelperShadow; -import com.firebase.ui.auth.test_helpers.AutoCompleteTask; -import com.firebase.ui.auth.test_helpers.BaseHelperShadow; -import com.firebase.ui.auth.test_helpers.CustomRobolectricGradleTestRunner; -import com.firebase.ui.auth.test_helpers.FakeProviderQueryResult; -import com.firebase.ui.auth.test_helpers.TestConstants; -import com.firebase.ui.auth.test_helpers.TestHelper; -import com.firebase.ui.auth.ui.ExtraConstants; -import com.google.firebase.auth.EmailAuthProvider; -import com.google.firebase.auth.ProviderQueryResult; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.Robolectric; -import org.robolectric.RuntimeEnvironment; -import org.robolectric.Shadows; -import org.robolectric.annotation.Config; -import org.robolectric.shadows.ShadowActivity; - -import java.util.Arrays; -import java.util.Collections; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; - - -@RunWith(CustomRobolectricGradleTestRunner.class) -@Config(constants = BuildConfig.class, sdk = 23) -public class SignInNoPasswordActivityTest { - @Before - public void setUp() { - TestHelper.initializeApp(RuntimeEnvironment.application); - } - - @Test - public void testNextButton_withInvalidEmailAddress() { - Intent startIntent = SignInNoPasswordActivity.createIntent( - RuntimeEnvironment.application, - TestHelper.getFlowParameters(Collections.singletonList(AuthUI.EMAIL_PROVIDER)), - null); - - SignInNoPasswordActivity noPasswordActivity = - Robolectric.buildActivity(SignInNoPasswordActivity.class) - .withIntent(startIntent).create().visible().get(); - EditText email = (EditText) noPasswordActivity.findViewById(R.id.email); - email.setText("not-a-valid-email"); - Button next = (Button) noPasswordActivity.findViewById(R.id.button_ok); - next.performClick(); - - TextInputLayout emailLayout = (TextInputLayout) noPasswordActivity - .findViewById(R.id.input_layout_email); - - assertEquals( - noPasswordActivity.getString(R.string.invalid_email_address), - emailLayout.getError().toString()); - } - - private SignInNoPasswordActivity createActivity(String email) { - Intent startIntent = SignInNoPasswordActivity.createIntent( - RuntimeEnvironment.application, - TestHelper.getFlowParameters(Collections.singletonList(AuthUI.EMAIL_PROVIDER)), - email); - return Robolectric.buildActivity(SignInNoPasswordActivity.class) - .withIntent(startIntent).create().visible().get(); - } - - @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) - public void testNextButton_withNewEmail() { - SignInNoPasswordActivity noPasswordActivity = createActivity(TestConstants.EMAIL); - Button next = (Button) noPasswordActivity.findViewById(R.id.button_ok); - - when(ActivityHelperShadow.sFirebaseAuth.fetchProvidersForEmail(TestConstants.EMAIL)) - .thenReturn( - new AutoCompleteTask( - new FakeProviderQueryResult(Collections.emptyList()), - true, - null)); - - next.performClick(); - - ShadowActivity shadowActivity = Shadows.shadowOf(noPasswordActivity); - ShadowActivity.IntentForResult nextIntent = - shadowActivity.getNextStartedActivityForResult(); - assertEquals( - RegisterEmailActivity.class.getName(), - nextIntent.intent.getComponent().getClassName()); - assertEquals( - TestConstants.EMAIL, - nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_EMAIL)); - } - - @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) - public void testNextButton_withExistingPasswordAccount() { - SignInNoPasswordActivity noPasswordActivity = createActivity(TestConstants.EMAIL); - Button next = (Button) noPasswordActivity.findViewById(R.id.button_ok); - - when(ActivityHelperShadow.sFirebaseAuth.fetchProvidersForEmail(TestConstants.EMAIL)) - .thenReturn( - new AutoCompleteTask( - new FakeProviderQueryResult( - Arrays.asList(EmailAuthProvider.PROVIDER_ID)), - true, - null)); - - next.performClick(); - - ShadowActivity shadowActivity = Shadows.shadowOf(noPasswordActivity); - ShadowActivity.IntentForResult nextIntent = - shadowActivity.getNextStartedActivityForResult(); - assertEquals( - SignInActivity.class.getName(), - nextIntent.intent.getComponent().getClassName()); - assertEquals( - TestConstants.EMAIL, - nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_EMAIL)); - } -} diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivityTest.java index 99e5daf73..feb438b22 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivityTest.java @@ -33,6 +33,7 @@ import com.firebase.ui.auth.test_helpers.LoginManagerShadow; import com.firebase.ui.auth.test_helpers.TestConstants; import com.firebase.ui.auth.test_helpers.TestHelper; +import com.firebase.ui.auth.ui.email.RegisterEmailActivity; import com.firebase.ui.auth.util.PlayServicesHelper; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.AuthResult; @@ -124,7 +125,7 @@ public void testEmailLoginFlow() { Shadows.shadowOf(authMethodPickerActivity).getNextStartedActivityForResult(); assertEquals( - EmailHintContainerActivity.class.getName(), + RegisterEmailActivity.class.getName(), nextIntent.intent.getComponent().getClassName()); } From c8a0d263d287c5cbe4ec0faf72864e27854ecb17 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Wed, 23 Nov 2016 19:55:07 -0800 Subject: [PATCH 03/26] Cleanup --- .../firebase/ui/auth/ui/email/RegisterEmailActivity.java | 6 ++---- .../firebase/ui/auth/ui/idp/AuthMethodPickerActivity.java | 5 ++--- 2 files changed, 4 insertions(+), 7 deletions(-) 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 7327ac448..017fd4654 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 @@ -172,10 +172,8 @@ public void onClick(View view) { } private void showEmailAutoCompleteHint() { - PendingIntent hintIntent = - FirebaseAuthWrapperFactory - .getFirebaseAuthWrapper(mActivityHelper.getAppName()) - .getEmailHintIntent(this); + PendingIntent hintIntent = FirebaseAuthWrapperFactory + .getFirebaseAuthWrapper(mActivityHelper.getAppName()).getEmailHintIntent(this); if (hintIntent != null) { try { startIntentSenderForResult(hintIntent.getIntentSender(), RC_HINT, null, 0, 0, 0); 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 88a4f17a2..946674329 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 @@ -54,10 +54,9 @@ * identity provider option is selected, a {@link CredentialSignInHandler} * is launched to manage the IDP-specific sign-in flow. If email authentication is chosen, * the {@link RegisterEmailActivity} is started. - *

+ * *

- * Authentication picker activity rendered with all authentication options and default settings + * Authentication picker activity rendered with all authentication options and default settings */ public class AuthMethodPickerActivity extends AppCompatBase implements IdpCallback, View.OnClickListener { From 0c5701a6874546d1a859344a9e2d665ae7616c14 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Mon, 28 Nov 2016 11:33:09 -0800 Subject: [PATCH 04/26] Fix merge mistakes --- .../com/firebase/ui/auth/ui/email/RegisterEmailActivity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 f38f13fe7..f9b018ef8 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 @@ -28,7 +28,6 @@ import android.text.TextUtils; import android.text.style.ForegroundColorSpan; import android.util.Log; -import android.util.TypedValue; import android.view.View; import android.widget.EditText; import android.widget.TextView; @@ -95,8 +94,9 @@ protected void onCreate(Bundle savedInstanceState) { mNameValidator = new RequiredFieldValidator((TextInputLayout) findViewById(R.id.name_layout)); mEmailFieldValidator = new EmailFieldValidator((TextInputLayout) findViewById(R.id.email_layout)); - mNameEditText = (EditText) findViewById(R.id.name); mEmailEditText = (EditText) findViewById(R.id.email); + mNameEditText = (EditText) findViewById(R.id.name); + mPasswordEditText = (EditText) findViewById(R.id.password); mEmailEditText.setOnFocusChangeListener(this); mNameEditText.setOnFocusChangeListener(this); From d7ebebcd5ce9c750cb492380e9ee7031325ceeae Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Tue, 29 Nov 2016 17:22:09 -0800 Subject: [PATCH 05/26] Remove unused resources --- .../res/layout/signin_no_password_layout.xml | 35 ------------------- auth/src/main/res/values/strings.xml | 2 -- 2 files changed, 37 deletions(-) delete mode 100644 auth/src/main/res/layout/signin_no_password_layout.xml diff --git a/auth/src/main/res/layout/signin_no_password_layout.xml b/auth/src/main/res/layout/signin_no_password_layout.xml deleted file mode 100644 index 82f7150b8..000000000 --- a/auth/src/main/res/layout/signin_no_password_layout.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - -