From 05ce3b528b90dbfe92031094332d8b6fcec53f87 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Thu, 6 Oct 2016 21:36:46 -0700 Subject: [PATCH 01/27] temporary: saving to work on another computer won't compile --- auth/src/main/AndroidManifest.xml | 2 +- .../java/com/firebase/ui/auth/AuthUI.java | 4 +- .../firebase/ui/auth/ui/AppCompatBase.java | 1 - .../ui/auth/ui/ChooseAccountActivity.java | 2 +- .../WelcomeBackPasswordPrompt.java | 14 +- .../auth/ui/email/RegisterEmailActivity.java | 13 +- .../ui/auth/ui/email/SignInActivity.java | 18 +-- .../auth/ui/idp/AuthMethodPickerActivity.java | 13 +- .../auth/ui/idp/CredentialSignInHandler.java | 40 ++--- .../ui/auth/ui/idp/IDPBaseActivity.java | 1 - .../firebase/ui/auth/util/CredentialsAPI.java | 4 +- .../ui/auth/util/CredentialsApiHelper.java | 2 +- .../SmartLock.java} | 149 +++++++++++------- .../firebase/ui/auth/util/SmartlockUtil.java | 56 ------- .../ui/email/RegisterEmailActivityTest.java | 4 +- .../ui/auth/ui/email/SignInActivityTest.java | 4 +- .../ui/idp/AuthMethodPickerActivityTest.java | 4 +- .../ui/idp/CredentialSignInHandlerTest.java | 4 +- 18 files changed, 151 insertions(+), 184 deletions(-) rename auth/src/main/java/com/firebase/ui/auth/{ui/account_link/SaveCredentialsActivity.java => util/SmartLock.java} (57%) delete mode 100644 auth/src/main/java/com/firebase/ui/auth/util/SmartlockUtil.java diff --git a/auth/src/main/AndroidManifest.xml b/auth/src/main/AndroidManifest.xml index 35e39c171..35f4c93cb 100644 --- a/auth/src/main/AndroidManifest.xml +++ b/auth/src/main/AndroidManifest.xml @@ -33,7 +33,7 @@ android:label="@string/title_sign_in_activity" android:theme="@style/FirebaseUI" /> signOut(@NonNull Activity activity) { - // Get helper for Google Sign In and Credentials API + // Get helper for Google Sign In and SmartLock API GoogleApiClientTaskHelper taskHelper = GoogleApiClientTaskHelper.getInstance(activity); taskHelper.getBuilder() .addApi(Auth.CREDENTIALS_API) .addApi(Auth.GOOGLE_SIGN_IN_API, GoogleSignInOptions.DEFAULT_SIGN_IN); - // Get Credentials Helper + // Get SmartLock Helper CredentialsApiHelper credentialsHelper = CredentialsApiHelper.getInstance(taskHelper); // Firebase Sign out diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/AppCompatBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/AppCompatBase.java index 7d2c8eeb5..adb3ce168 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/AppCompatBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/AppCompatBase.java @@ -36,5 +36,4 @@ protected void onDestroy() { public void finish(int resultCode, Intent intent) { mActivityHelper.finish(resultCode, intent); } - } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/ChooseAccountActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/ChooseAccountActivity.java index d062e4df3..3187df39a 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/ChooseAccountActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/ChooseAccountActivity.java @@ -113,7 +113,7 @@ protected void onStop() { } /** - * Called when the Credentials API connects. + * Called when the SmartLock API connects. */ public void onCredentialsApiConnected( CredentialsAPI credentialsApi, diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java index e9574f33d..94c6143f9 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java @@ -37,7 +37,7 @@ import com.firebase.ui.auth.ui.TaskFailureLogger; import com.firebase.ui.auth.ui.email.PasswordToggler; import com.firebase.ui.auth.ui.email.RecoverPasswordActivity; -import com.firebase.ui.auth.util.SmartlockUtil; +import com.firebase.ui.auth.util.SmartLock; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; import com.google.firebase.auth.AuthCredential; @@ -49,11 +49,11 @@ * the password before initiating a link. */ public class WelcomeBackPasswordPrompt extends AppCompatBase implements View.OnClickListener { - - private static final int RC_CREDENTIAL_SAVE = 3; private static final String TAG = "WelcomeBackPassword"; private static final StyleSpan BOLD = new StyleSpan(Typeface.BOLD); + private SmartLock mSmartLock; + private String mEmail; private TextInputLayout mPasswordLayout; private EditText mPasswordField; @@ -107,8 +107,8 @@ public void onClick(View view) { @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - if (requestCode == RC_CREDENTIAL_SAVE) { - finish(RESULT_OK, new Intent()); + if (mSmartLock != null) { + mSmartLock.onActivityResult(requestCode, resultCode); } } @@ -137,10 +137,8 @@ public void onSuccess(AuthResult authResult) { new OnSuccessListener() { @Override public void onSuccess(AuthResult authResult) { - mActivityHelper.dismissDialog(); - SmartlockUtil.saveCredentialOrFinish( + mSmartLock = SmartLock.saveCredentialOrFinish( WelcomeBackPasswordPrompt.this, - RC_CREDENTIAL_SAVE, mActivityHelper.getFlowParams(), authResult.getUser(), password, 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 129740161..51d0af108 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 @@ -39,7 +39,7 @@ 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.SmartlockUtil; +import com.firebase.ui.auth.util.SmartLock; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; @@ -56,10 +56,10 @@ * Activity displaying a form to create a new email/password account. */ public class RegisterEmailActivity extends AppCompatBase implements View.OnClickListener { - - private static final int RC_SAVE_CREDENTIAL = 3; private static final String TAG = "RegisterEmailActivity"; + private SmartLock mSmartLock; + private EditText mEmailEditText; private EditText mPasswordEditText; private EditText mNameEditText; @@ -160,9 +160,8 @@ public void onComplete(@NonNull Task task) { // This executes even if the name change fails, since // the account creation succeeded and we want to save // the credential to SmartLock (if enabled). - SmartlockUtil.saveCredentialOrFinish( + mSmartLock = SmartLock.saveCredentialOrFinish( RegisterEmailActivity.this, - RC_SAVE_CREDENTIAL, mActivityHelper.getFlowParams(), firebaseUser, password, @@ -202,8 +201,8 @@ public void onFailure(@NonNull Exception e) { @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - if (requestCode == RC_SAVE_CREDENTIAL) { - finish(RESULT_OK, new Intent()); + if (mSmartLock != null) { + mSmartLock.onActivityResult(requestCode, resultCode); } } 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 index cade6f3e8..8bad120aa 100644 --- 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 @@ -34,7 +34,7 @@ import com.firebase.ui.auth.ui.TaskFailureLogger; import com.firebase.ui.auth.ui.email.field_validators.EmailFieldValidator; import com.firebase.ui.auth.ui.email.field_validators.RequiredFieldValidator; -import com.firebase.ui.auth.util.SmartlockUtil; +import com.firebase.ui.auth.util.SmartLock; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; import com.google.firebase.auth.AuthResult; @@ -44,7 +44,8 @@ */ public class SignInActivity extends AppCompatBase implements View.OnClickListener { private static final String TAG = "SignInActivity"; - private static final int RC_CREDENTIAL_SAVE = 101; + + private SmartLock mSmartLock; private EditText mEmailEditText; private EditText mPasswordEditText; @@ -82,7 +83,7 @@ protected void onCreate(Bundle savedInstanceState) { mPasswordValidator = new RequiredFieldValidator((TextInputLayout) findViewById(R.id .password_layout)); Button signInButton = (Button) findViewById(R.id.button_done); - TextView recoveryButton = (TextView) findViewById(R.id.trouble_signing_in); + TextView recoveryButton = (TextView) findViewById(R.id.trouble_signing_in); if (email != null) { mEmailEditText.setText(email); @@ -93,7 +94,7 @@ protected void onCreate(Bundle savedInstanceState) { } @Override - public void onBackPressed () { + public void onBackPressed() { super.onBackPressed(); } @@ -105,12 +106,9 @@ private void signIn(String email, final String password) { .addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(AuthResult authResult) { - mActivityHelper.dismissDialog(); - // Save credential in SmartLock (if enabled) - SmartlockUtil.saveCredentialOrFinish( + mSmartLock = SmartLock.saveCredentialOrFinish( SignInActivity.this, - RC_CREDENTIAL_SAVE, mActivityHelper.getFlowParams(), authResult.getUser(), password, @@ -134,8 +132,8 @@ public void onFailure(@NonNull Exception e) { @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - if (requestCode == RC_CREDENTIAL_SAVE) { - finish(RESULT_OK, new Intent()); + if (mSmartLock != null) { + mSmartLock.onActivityResult(requestCode, resultCode); } } 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 879198f4a..afd290050 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 @@ -35,6 +35,7 @@ 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.util.SmartLock; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.EmailAuthProvider; import com.google.firebase.auth.FacebookAuthProvider; @@ -57,12 +58,12 @@ public class AuthMethodPickerActivity extends IDPBaseActivity implements IDPProvider.IDPCallback, View.OnClickListener { - private static final int RC_EMAIL_FLOW = 2; private static final int RC_ACCOUNT_LINK = 3; - private static final int RC_SAVE_CREDENTIAL = 4; private static final String TAG = "AuthMethodPicker"; + private ArrayList mIdpProviders; + private SmartLock mSmartLock; @Override protected void onCreate(Bundle savedInstanceState) { @@ -139,8 +140,8 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { finish(RESULT_OK, new Intent()); } - } else if (requestCode == RC_SAVE_CREDENTIAL) { - finish(RESULT_OK, new Intent()); + } else if (mSmartLock != null) { + mSmartLock.onActivityResult(requestCode, resultCode); } else if (requestCode == RC_ACCOUNT_LINK) { finish(resultCode, new Intent()); } else { @@ -163,8 +164,8 @@ public void onSuccess(final IDPResponse response) { AuthMethodPickerActivity.this, mActivityHelper, RC_ACCOUNT_LINK, - RC_SAVE_CREDENTIAL, - response)); + response, + mSmartLock)); } @Override 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 8800a73ab..bd8bbee15 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 @@ -14,16 +14,16 @@ package com.firebase.ui.auth.ui.idp; -import android.app.Activity; import android.support.annotation.NonNull; import android.util.Log; import com.firebase.ui.auth.provider.IDPResponse; import com.firebase.ui.auth.ui.ActivityHelper; +import com.firebase.ui.auth.ui.AppCompatBase; import com.firebase.ui.auth.ui.TaskFailureLogger; import com.firebase.ui.auth.ui.account_link.WelcomeBackIDPPrompt; import com.firebase.ui.auth.ui.account_link.WelcomeBackPasswordPrompt; -import com.firebase.ui.auth.util.SmartlockUtil; +import com.firebase.ui.auth.util.SmartLock; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; @@ -38,27 +38,36 @@ public class CredentialSignInHandler implements OnCompleteListener { private final static String TAG = "CredentialSignInHandler"; private int mAccountLinkResultCode; - private int mSaveCredentialsResultCode; - private Activity mActivity; + private AppCompatBase mActivity; private ActivityHelper mActivityHelper; private IDPResponse mResponse; + private SmartLock mSmartLock; public CredentialSignInHandler( - Activity activity, + AppCompatBase activity, ActivityHelper activityHelper, int accountLinkResultCode, - int saveCredentialsResultCode, - IDPResponse response) { + IDPResponse response, + SmartLock smartLock) { mActivity = activity; mAccountLinkResultCode = accountLinkResultCode; - mSaveCredentialsResultCode = saveCredentialsResultCode; mActivityHelper = activityHelper; mResponse = response; + mSmartLock = smartLock; } @Override - public void onComplete(@NonNull Task task) { - if (!task.isSuccessful()) { + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + mActivityHelper.dismissDialog(); + + FirebaseUser firebaseUser = task.getResult().getUser(); + mSmartLock = SmartLock.saveCredentialOrFinish(mActivity, + mActivityHelper.getFlowParams(), + firebaseUser, + null /* password */, + mResponse.getProviderType()); + } else { if (task.getException() instanceof FirebaseAuthUserCollisionException) { final String email = mResponse.getEmail(); FirebaseAuth firebaseAuth = mActivityHelper.getFirebaseAuth(); @@ -77,15 +86,8 @@ public void onFailure(@NonNull Exception e) { } else { mActivityHelper.dismissDialog(); Log.e(TAG, "Unexpected exception when signing in with credential", - task.getException()); + task.getException()); } - } else { - mActivityHelper.dismissDialog(); - - FirebaseUser firebaseUser = task.getResult().getUser(); - SmartlockUtil.saveCredentialOrFinish(mActivity, mSaveCredentialsResultCode, - mActivityHelper.getFlowParams(), firebaseUser, - null /* password */, mResponse.getProviderType()); } } @@ -109,7 +111,6 @@ public void onSuccess(@NonNull ProviderQueryResult result) { mActivityHelper.getFlowParams(), mResponse ), mAccountLinkResultCode); - } else { // Start IDP welcome back flow mActivity.startActivityForResult( @@ -123,5 +124,4 @@ public void onSuccess(@NonNull ProviderQueryResult result) { } } } - } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPBaseActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPBaseActivity.java index 6de1ffd9a..c5b8a3535 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPBaseActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPBaseActivity.java @@ -32,5 +32,4 @@ protected AuthCredential createCredential(IDPResponse idpSignInResponse) { } return null; } - } diff --git a/auth/src/main/java/com/firebase/ui/auth/util/CredentialsAPI.java b/auth/src/main/java/com/firebase/ui/auth/util/CredentialsAPI.java index 7f514c958..0675276c1 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/CredentialsAPI.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/CredentialsAPI.java @@ -71,7 +71,7 @@ public boolean isPlayServicesAvailable() { } public boolean isCredentialsAvailable() { - // TODO: (serikb) find the way to check if Credentials is available on top of play services + // TODO: (serikb) find the way to check if SmartLock is available on top of play services return true; } @@ -96,7 +96,7 @@ public void resolveSavedEmails(Activity activity) { try { status.startResolutionForResult(activity, RC_CREDENTIALS_READ); } catch (IntentSender.SendIntentException e) { - Log.e(TAG, "Failed to send Credentials intent.", e); + Log.e(TAG, "Failed to send SmartLock intent.", e); } } } diff --git a/auth/src/main/java/com/firebase/ui/auth/util/CredentialsApiHelper.java b/auth/src/main/java/com/firebase/ui/auth/util/CredentialsApiHelper.java index cd9a3e94b..0647b1a19 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/CredentialsApiHelper.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/CredentialsApiHelper.java @@ -144,7 +144,7 @@ public void onResult(@NonNull Status status) { } public static CredentialsApiHelper getInstance(Activity activity) { - // Get a task helper with the Credentials Api + // Get a task helper with the SmartLock Api GoogleApiClientTaskHelper taskHelper = GoogleApiClientTaskHelper.getInstance(activity); taskHelper.getBuilder() .addApi(Auth.CREDENTIALS_API); diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/SaveCredentialsActivity.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java similarity index 57% rename from auth/src/main/java/com/firebase/ui/auth/ui/account_link/SaveCredentialsActivity.java rename to auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java index 4adddf39a..8dd6e2f44 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/SaveCredentialsActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java @@ -12,10 +12,9 @@ * limitations under the License. */ -package com.firebase.ui.auth.ui.account_link; +package com.firebase.ui.auth.util; import android.app.PendingIntent; -import android.content.Context; import android.content.Intent; import android.content.IntentSender; import android.net.Uri; @@ -25,12 +24,8 @@ import android.util.Log; import com.firebase.ui.auth.BuildConfig; -import com.firebase.ui.auth.R; -import com.firebase.ui.auth.ui.ActivityHelper; import com.firebase.ui.auth.ui.AppCompatBase; -import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; -import com.firebase.ui.auth.util.FirebaseAuthWrapperFactory; import com.google.android.gms.auth.api.Auth; import com.google.android.gms.auth.api.credentials.Credential; import com.google.android.gms.auth.api.credentials.IdentityProviders; @@ -43,13 +38,15 @@ import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.GoogleAuthProvider; -public class SaveCredentialsActivity extends AppCompatBase - implements GoogleApiClient.ConnectionCallbacks, ResultCallback, +import static android.app.Activity.RESULT_OK; + +public class SmartLock implements GoogleApiClient.ConnectionCallbacks, ResultCallback, GoogleApiClient.OnConnectionFailedListener { private static final String TAG = "CredentialsSaveBase"; private static final int RC_SAVE = 100; private static final int RC_UPDATE_SERVICE = 28; + private AppCompatBase mActivity; private String mName; private String mEmail; private String mPassword; @@ -57,29 +54,24 @@ public class SaveCredentialsActivity extends AppCompatBase private String mProfilePictureUri; private GoogleApiClient mCredentialsApiClient; - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.save_credentials_layout); - - if (!FirebaseAuthWrapperFactory.getFirebaseAuthWrapper(mActivityHelper.getAppName()) - .isPlayServicesAvailable(this)) { - finish(RESULT_FIRST_USER, getIntent()); - return; - } - - mName = getIntent().getStringExtra(ExtraConstants.EXTRA_NAME); - mEmail = getIntent().getStringExtra(ExtraConstants.EXTRA_EMAIL); - mPassword = getIntent().getStringExtra(ExtraConstants.EXTRA_PASSWORD); - mProvider = getIntent().getStringExtra(ExtraConstants.EXTRA_PROVIDER); - mProfilePictureUri = getIntent() - .getStringExtra(ExtraConstants.EXTRA_PROFILE_PICTURE_URI); - - mCredentialsApiClient = new GoogleApiClient.Builder(this) + public SmartLock(AppCompatBase activity, + String name, + String email, + String password, + String provider, + String profilePictureUri) { + mActivity = activity; + mName = name; + mEmail = email; + mPassword = password; + mProvider = provider; + mProfilePictureUri = profilePictureUri; + + mCredentialsApiClient = new GoogleApiClient.Builder(mActivity) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(Auth.CREDENTIALS_API) - .enableAutoManage(this, this) + .enableAutoManage(mActivity, this) .build(); } @@ -87,9 +79,10 @@ protected void onCreate(Bundle savedInstanceState) { public void onConnected(@Nullable Bundle bundle) { if (mEmail == null) { Log.e(TAG, "Unable to save null credential!"); - finish(RESULT_FIRST_USER, getIntent()); + mActivity.finish(RESULT_OK, mActivity.getIntent()); return; } + Credential.Builder builder = new Credential.Builder(mEmail); builder.setPassword(mPassword); if (mPassword == null) { @@ -107,13 +100,16 @@ public void onConnected(@Nullable Bundle bundle) { } } } + if (mName != null) { builder.setName(mName); } + if (mProfilePictureUri != null) { builder.setProfilePictureUri(Uri.parse(mProfilePictureUri)); } - mActivityHelper.getCredentialsApi() + + Auth.CredentialsApi .save(mCredentialsApiClient, builder.build()) .setResultCallback(this); } @@ -133,13 +129,20 @@ public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { + " and code: " + connectionResult.getErrorCode()); } PendingIntent resolution = - GoogleApiAvailability.getInstance().getErrorResolutionPendingIntent(this, - connectionResult.getErrorCode(), RC_UPDATE_SERVICE); + GoogleApiAvailability.getInstance().getErrorResolutionPendingIntent(mActivity, + connectionResult + .getErrorCode(), + RC_UPDATE_SERVICE); try { - startIntentSenderForResult(resolution.getIntentSender(), RC_UPDATE_SERVICE, null, 0, 0, 0); + mActivity.startIntentSenderForResult(resolution.getIntentSender(), + RC_UPDATE_SERVICE, + null, + 0, + 0, + 0); } catch (IntentSender.SendIntentException e) { e.printStackTrace(); - finish(RESULT_FIRST_USER, getIntent()); + mActivity.finish(RESULT_OK, mActivity.getIntent()); } } @@ -147,63 +150,89 @@ public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { @Override public void onResult(@NonNull Status status) { if (status.isSuccess()) { - finish(RESULT_OK, getIntent()); + mActivity.finish(RESULT_OK, mActivity.getIntent()); } else { if (status.hasResolution()) { // Try to resolve the save request. This will prompt the user if // the credential is new. try { - status.startResolutionForResult(this, RC_SAVE); + status.startResolutionForResult(mActivity, RC_SAVE); } catch (IntentSender.SendIntentException e) { // Could not resolve the request Log.e(TAG, "STATUS: Failed to send resolution.", e); - finish(RESULT_FIRST_USER, getIntent()); + mActivity.finish(RESULT_OK, mActivity.getIntent()); } } else { - finish(RESULT_FIRST_USER, getIntent()); + mActivity.finish(RESULT_OK, mActivity.getIntent()); } } } - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); + public void onActivityResult(int requestCode, int resultCode) { if (requestCode == RC_SAVE) { if (resultCode == RESULT_OK) { if (BuildConfig.DEBUG) { Log.d(TAG, "SAVE: OK"); } - finish(RESULT_OK, getIntent()); + mActivity.finish(RESULT_OK, new Intent()); } else { Log.e(TAG, "SAVE: Canceled by user"); - finish(RESULT_FIRST_USER, getIntent()); + mActivity.finish(RESULT_OK, new Intent()); } } else if (requestCode == RC_UPDATE_SERVICE) { if (resultCode == RESULT_OK) { - Credential credential = new Credential.Builder(mEmail).setPassword(mPassword).build(); - mActivityHelper.getCredentialsApi() + Credential credential = new Credential.Builder(mEmail).setPassword(mPassword) + .build(); + Auth.CredentialsApi .save(mCredentialsApiClient, credential) .setResultCallback(this); } else { Log.e(TAG, "SAVE: Canceled by user"); - finish(RESULT_FIRST_USER, getIntent()); + mActivity.finish(RESULT_OK, new Intent()); } } } - public static Intent createIntent( - Context context, - FlowParameters flowParams, - FirebaseUser user, - @Nullable String password, - @Nullable String provider) { - - String photoUrl = user.getPhotoUrl() != null ? user.getPhotoUrl().toString() : null; - return ActivityHelper.createBaseIntent(context, SaveCredentialsActivity.class, flowParams) - .putExtra(ExtraConstants.EXTRA_NAME, user.getDisplayName()) - .putExtra(ExtraConstants.EXTRA_EMAIL, user.getEmail()) - .putExtra(ExtraConstants.EXTRA_PASSWORD, password) - .putExtra(ExtraConstants.EXTRA_PROVIDER, provider) - .putExtra(ExtraConstants.EXTRA_PROFILE_PICTURE_URI, photoUrl); + /** + * If SmartLock is enabled and Google Play Services is available, save the credentials. + * Otherwise, finish the calling Activity with RESULT_OK. + * + * @param activity the calling Activity. + * @param parameters calling Activity flow parameters. + * @param firebaseUser Firebase user to save in Credential. + * @param password (optional) password for email credential. + * @param provider (optional) provider string for provider credential. + */ + public static SmartLock saveCredentialOrFinish(AppCompatBase activity, + FlowParameters parameters, + FirebaseUser firebaseUser, + @Nullable String password, + @Nullable String provider) { + // If SmartLock is disabled, finish the Activity + if (!parameters.smartLockEnabled) { + activity.finish(RESULT_OK, new Intent()); + return null; + } + + // If Play Services is not available, finish the Activity + if (!PlayServicesHelper.getInstance(activity).isPlayServicesAvailable()) { + activity.finish(RESULT_OK, new Intent()); + return null; + } + + if (!FirebaseAuthWrapperFactory.getFirebaseAuthWrapper(parameters.appName) + .isPlayServicesAvailable(activity)) { + activity.finish(RESULT_OK, activity.getIntent()); + return null; + } + + // Save credentials + return new SmartLock(activity, + firebaseUser.getDisplayName(), + firebaseUser.getEmail(), + password, + provider, + firebaseUser.getPhotoUrl() != null ? firebaseUser.getPhotoUrl() + .toString() : null); } } diff --git a/auth/src/main/java/com/firebase/ui/auth/util/SmartlockUtil.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartlockUtil.java deleted file mode 100644 index 4e17d5446..000000000 --- a/auth/src/main/java/com/firebase/ui/auth/util/SmartlockUtil.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.firebase.ui.auth.util; - -import android.app.Activity; -import android.content.Intent; -import android.support.annotation.Nullable; - -import com.firebase.ui.auth.ui.FlowParameters; -import com.firebase.ui.auth.ui.account_link.SaveCredentialsActivity; -import com.google.firebase.auth.FirebaseUser; - -/** - * Helper class to deal with Smartlock Flows. - */ -public class SmartlockUtil { - - /** - * If SmartLock is enabled and Google Play Services is available, start the save credential - * Activity. Otherwise, finish the calling Activity with RESULT_OK. - * @param activity the calling Activity. - * @param requestCode request code to use when starting the save operation. - * @param parameters calling Activity flow parameters. - * @param firebaseUser Firebase user to save in Credential. - * @param password (optional) password for email credential. - * @param provider (optional) provider string for provider credential. - */ - public static void saveCredentialOrFinish(Activity activity, - int requestCode, - FlowParameters parameters, - FirebaseUser firebaseUser, - @Nullable String password, - @Nullable String provider) { - - // If SmartLock is disabled, finish the Activity - if (!parameters.smartLockEnabled) { - finishActivity(activity); - return; - } - - // If Play Services is not available, finish the Activity - if(!PlayServicesHelper.getInstance(activity).isPlayServicesAvailable()) { - finishActivity(activity); - return; - } - - // Launch save activity - Intent saveCredentialIntent = SaveCredentialsActivity.createIntent(activity, parameters, - firebaseUser, password, provider); - activity.startActivityForResult(saveCredentialIntent, requestCode); - } - - private static void finishActivity(Activity activity) { - activity.setResult(Activity.RESULT_OK, new Intent()); - activity.finish(); - } - -} 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 d340f8a8a..9dfd20e39 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 @@ -30,7 +30,7 @@ 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.firebase.ui.auth.ui.account_link.SaveCredentialsActivity; +import com.firebase.ui.auth.util.SmartLock; import com.firebase.ui.auth.util.PlayServicesHelper; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.UserProfileChangeRequest; @@ -134,7 +134,7 @@ public void testSignupButton_successfulRegisterationShouldContinueToSaveCredenti assertNotNull(nextIntent); assertEquals( nextIntent.intent.getComponent().getClassName(), - SaveCredentialsActivity.class.getName()); + SmartLock.class.getName()); assertEquals( TestConstants.EMAIL, nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_EMAIL)); diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java index 455da58ea..db9c452e4 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java @@ -29,7 +29,7 @@ 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.firebase.ui.auth.ui.account_link.SaveCredentialsActivity; +import com.firebase.ui.auth.util.SmartLock; import com.firebase.ui.auth.util.PlayServicesHelper; import com.google.firebase.auth.FirebaseUser; @@ -123,7 +123,7 @@ public void testSignInButton_signsInAndSavesCredentials() { ShadowActivity.IntentForResult nextIntent = Shadows.shadowOf(signInActivity).getNextStartedActivityForResult(); assertEquals( - SaveCredentialsActivity.class.getName(), + SmartLock.class.getName(), nextIntent.intent.getComponent().getClassName() ); assertEquals( 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 6e0dac7ea..042772eca 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,7 @@ 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.firebase.ui.auth.ui.account_link.SaveCredentialsActivity; +import com.firebase.ui.auth.util.SmartLock; import com.firebase.ui.auth.ui.email.EmailHintContainerActivity; import com.firebase.ui.auth.util.PlayServicesHelper; import com.google.firebase.auth.AuthCredential; @@ -181,7 +181,7 @@ private static void verifySaveCredentialIntent( ShadowActivity.IntentForResult nextIntent, String provider) { assertEquals( - SaveCredentialsActivity.class.getName(), + SmartLock.class.getName(), nextIntent.intent.getComponent().getClassName()); assertEquals( nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_EMAIL), diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java index 14af08ac6..7461bb949 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java @@ -32,7 +32,7 @@ import com.firebase.ui.auth.ui.ActivityHelper; import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; -import com.firebase.ui.auth.ui.account_link.SaveCredentialsActivity; +import com.firebase.ui.auth.util.SmartLock; import com.firebase.ui.auth.ui.account_link.WelcomeBackIDPPrompt; import com.firebase.ui.auth.ui.account_link.WelcomeBackPasswordPrompt; import com.firebase.ui.auth.util.CredentialsAPI; @@ -121,7 +121,7 @@ public void testSignInSucceeded() { Intent capturedIntent = intentCaptor.getValue(); assertEquals(RC_SAVE_CREDENTIALS, (int) intCaptor.getValue()); assertEquals( - SaveCredentialsActivity.class.getName(), + SmartLock.class.getName(), capturedIntent.getComponent().getClassName()); assertEquals( TestConstants.EMAIL, From 2c0eaf5f54e03b7f2a0bd6772dc23a95cc9fee54 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Thu, 13 Oct 2016 23:20:09 -0700 Subject: [PATCH 02/27] Code compiles --- auth/src/main/AndroidManifest.xml | 4 - .../firebase/ui/auth/ui/AppCompatBase.java | 3 +- .../WelcomeBackPasswordPrompt.java | 31 ++-- .../ui/email/EmailHintContainerActivity.java | 1 - .../auth/ui/email/RegisterEmailActivity.java | 31 ++-- .../ui/auth/ui/email/SignInActivity.java | 40 ++--- .../auth/ui/idp/AuthMethodPickerActivity.java | 7 +- .../auth/ui/idp/CredentialSignInHandler.java | 24 +-- .../ui/idp/IDPSignInContainerActivity.java | 4 +- .../com/firebase/ui/auth/util/SmartLock.java | 143 +++++++++++------- 10 files changed, 160 insertions(+), 128 deletions(-) diff --git a/auth/src/main/AndroidManifest.xml b/auth/src/main/AndroidManifest.xml index 35f4c93cb..54b7f5b93 100644 --- a/auth/src/main/AndroidManifest.xml +++ b/auth/src/main/AndroidManifest.xml @@ -32,10 +32,6 @@ android:name="com.firebase.ui.auth.ui.email.SignInActivity" android:label="@string/title_sign_in_activity" android:theme="@style/FirebaseUI" /> - () { @Override public void onSuccess(AuthResult authResult) { - mSmartLock = SmartLock.saveCredentialOrFinish( - WelcomeBackPasswordPrompt.this, - mActivityHelper.getFlowParams(), - authResult.getUser(), - password, - null /* provider */); + getSupportFragmentManager() + .beginTransaction() + .add(SmartLock.getInstance( + WelcomeBackPasswordPrompt.this, + mActivityHelper.getFlowParams(), + authResult.getUser(), + password, + null /* provider */), "test") + .commit(); +// SmartLock.saveCredentialOrFinish( +// WelcomeBackPasswordPrompt.this, +// mActivityHelper.getFlowParams(), +// authResult.getUser(), +// password, +// null /* provider */); } }); } 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 index c30d13d9c..94b95344c 100644 --- 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 @@ -49,7 +49,6 @@ protected void onCreate(Bundle savedInstanceState) { } } finish(RESULT_CANCELED, new Intent()); - return; } @Override 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 a2a9a9669..d82833b5d 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 @@ -58,8 +58,6 @@ public class RegisterEmailActivity extends AppCompatBase implements View.OnClickListener { private static final String TAG = "RegisterEmailActivity"; - private SmartLock mSmartLock; - private EditText mEmailEditText; private EditText mPasswordEditText; private EditText mNameEditText; @@ -160,12 +158,21 @@ public void onComplete(@NonNull Task task) { // This executes even if the name change fails, since // the account creation succeeded and we want to save // the credential to SmartLock (if enabled). - mSmartLock = SmartLock.saveCredentialOrFinish( - RegisterEmailActivity.this, - mActivityHelper.getFlowParams(), - firebaseUser, - password, - null /* provider */); + getSupportFragmentManager() + .beginTransaction() + .add(SmartLock.getInstance( + RegisterEmailActivity.this, + mActivityHelper.getFlowParams(), + firebaseUser, + password, + null /* provider */), "test") + .commit(); +// mSmartLock = SmartLock.saveCredentialOrFinish( +// RegisterEmailActivity.this, +// mActivityHelper.getFlowParams(), +// firebaseUser, +// password, +// null /* provider */); } }); } @@ -198,14 +205,6 @@ public void onFailure(@NonNull Exception e) { }); } - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (mSmartLock != null) { - mSmartLock.onActivityResult(requestCode, resultCode); - } - } - @Override public void onClick(View view) { if (view.getId() == R.id.button_create) { 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 index 9eb491531..2128cdc49 100644 --- 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 @@ -45,8 +45,6 @@ public class SignInActivity extends AppCompatBase implements View.OnClickListener { private static final String TAG = "SignInActivity"; - private SmartLock mSmartLock; - private EditText mEmailEditText; private EditText mPasswordEditText; private EmailFieldValidator mEmailValidator; @@ -68,7 +66,8 @@ protected void onCreate(Bundle savedInstanceState) { getResources().getValue(R.dimen.slightly_visible_icon, slightlyVisibleIcon, true); mPasswordEditText = (EditText) findViewById(R.id.password); - ((TextInputLayout) findViewById(R.id.password_layout)).setPasswordVisibilityToggleEnabled(false); + ((TextInputLayout) findViewById(R.id.password_layout)).setPasswordVisibilityToggleEnabled( + false); ImageView togglePasswordImage = (ImageView) findViewById(R.id.toggle_visibility); mPasswordEditText.setOnFocusChangeListener(new ImageFocusTransparencyChanger( @@ -79,9 +78,9 @@ protected void onCreate(Bundle savedInstanceState) { togglePasswordImage.setOnClickListener(new PasswordToggler(mPasswordEditText)); mEmailValidator = new EmailFieldValidator((TextInputLayout) findViewById(R.id - .email_layout)); + .email_layout)); mPasswordValidator = new RequiredFieldValidator((TextInputLayout) findViewById(R.id - .password_layout)); + .password_layout)); Button signInButton = (Button) findViewById(R.id.button_done); TextView recoveryButton = (TextView) findViewById(R.id.trouble_signing_in); @@ -107,12 +106,23 @@ private void signIn(String email, final String password) { @Override public void onSuccess(AuthResult authResult) { // Save credential in SmartLock (if enabled) - mSmartLock = SmartLock.saveCredentialOrFinish( - SignInActivity.this, - mActivityHelper.getFlowParams(), - authResult.getUser(), - password, - null /* provider */); + getSupportFragmentManager() + .beginTransaction() + .add(SmartLock.getInstance( + SignInActivity.this, + mActivityHelper.getFlowParams(), + authResult.getUser(), + password, + null /* provider */), "test") + .commit(); + + +// mSmartLock = SmartLock.saveCredentialOrFinish( +// SignInActivity.this, +// mActivityHelper.getFlowParams(), +// authResult.getUser(), +// password, +// null /* provider */); } }) .addOnFailureListener(new OnFailureListener() { @@ -129,14 +139,6 @@ public void onFailure(@NonNull Exception e) { }); } - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (mSmartLock != null) { - mSmartLock.onActivityResult(requestCode, resultCode); - } - } - @Override public void onClick(View view) { if (view.getId() == R.id.button_done) { 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 afd290050..d9aa24fa1 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 @@ -35,7 +35,6 @@ 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.util.SmartLock; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.EmailAuthProvider; import com.google.firebase.auth.FacebookAuthProvider; @@ -63,7 +62,6 @@ public class AuthMethodPickerActivity private static final String TAG = "AuthMethodPicker"; private ArrayList mIdpProviders; - private SmartLock mSmartLock; @Override protected void onCreate(Bundle savedInstanceState) { @@ -140,8 +138,6 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { finish(RESULT_OK, new Intent()); } - } else if (mSmartLock != null) { - mSmartLock.onActivityResult(requestCode, resultCode); } else if (requestCode == RC_ACCOUNT_LINK) { finish(resultCode, new Intent()); } else { @@ -164,8 +160,7 @@ public void onSuccess(final IDPResponse response) { AuthMethodPickerActivity.this, mActivityHelper, RC_ACCOUNT_LINK, - response, - mSmartLock)); + response)); } @Override 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 bd8bbee15..cbb0dd97b 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 @@ -41,19 +41,16 @@ public class CredentialSignInHandler implements OnCompleteListener { private AppCompatBase mActivity; private ActivityHelper mActivityHelper; private IDPResponse mResponse; - private SmartLock mSmartLock; public CredentialSignInHandler( AppCompatBase activity, ActivityHelper activityHelper, int accountLinkResultCode, - IDPResponse response, - SmartLock smartLock) { + IDPResponse response) { mActivity = activity; mAccountLinkResultCode = accountLinkResultCode; mActivityHelper = activityHelper; mResponse = response; - mSmartLock = smartLock; } @Override @@ -62,11 +59,20 @@ public void onComplete(@NonNull Task task) { mActivityHelper.dismissDialog(); FirebaseUser firebaseUser = task.getResult().getUser(); - mSmartLock = SmartLock.saveCredentialOrFinish(mActivity, - mActivityHelper.getFlowParams(), - firebaseUser, - null /* password */, - mResponse.getProviderType()); + mActivity.getSupportFragmentManager() + .beginTransaction() + .add(SmartLock.getInstance( + mActivity, + mActivityHelper.getFlowParams(), + firebaseUser, + null /* password */, + mResponse.getProviderType()), "test") + .commit(); +// SmartLock.saveCredentialOrFinish(mActivity, +// mActivityHelper.getFlowParams(), +// firebaseUser, +// null /* password */, +// mResponse.getProviderType()); } else { if (task.getException() instanceof FirebaseAuthUserCollisionException) { final String email = mResponse.getEmail(); diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java index 998a72f70..3441c10c7 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java @@ -78,12 +78,12 @@ public void onSuccess(final IDPResponse response) { authResultTask .addOnFailureListener( new TaskFailureLogger(TAG, "Failure authenticating with credential")) - .addOnCompleteListener(new CredentialSignInHandler( + /*.addOnCompleteListener(new CredentialSignInHandler( IDPSignInContainerActivity.this, mActivityHelper, RC_WELCOME_BACK_IDP, RC_SAVE_CREDENTIALS, - response)); + response))*/; } @Override diff --git a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java index 8dd6e2f44..424192c51 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java @@ -21,6 +21,7 @@ import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; import android.util.Log; import com.firebase.ui.auth.BuildConfig; @@ -40,13 +41,14 @@ import static android.app.Activity.RESULT_OK; -public class SmartLock implements GoogleApiClient.ConnectionCallbacks, ResultCallback, +public class SmartLock extends Fragment implements GoogleApiClient.ConnectionCallbacks, ResultCallback, GoogleApiClient.OnConnectionFailedListener { private static final String TAG = "CredentialsSaveBase"; private static final int RC_SAVE = 100; private static final int RC_UPDATE_SERVICE = 28; private AppCompatBase mActivity; + private FlowParameters mFlowParameters; private String mName; private String mEmail; private String mPassword; @@ -54,18 +56,27 @@ public class SmartLock implements GoogleApiClient.ConnectionCallbacks, ResultCal private String mProfilePictureUri; private GoogleApiClient mCredentialsApiClient; - public SmartLock(AppCompatBase activity, - String name, - String email, - String password, - String provider, - String profilePictureUri) { - mActivity = activity; - mName = name; - mEmail = email; - mPassword = password; - mProvider = provider; - mProfilePictureUri = profilePictureUri; + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // If SmartLock is disabled, finish the Activity + if (!mFlowParameters.smartLockEnabled) { + mActivity.finish(RESULT_OK, mActivity.getIntent()); + return; + } + + // If Play Services is not available, finish the Activity + if (!PlayServicesHelper.getInstance(mActivity).isPlayServicesAvailable()) { + mActivity.finish(RESULT_OK, mActivity.getIntent()); + return; + } + + if (!FirebaseAuthWrapperFactory.getFirebaseAuthWrapper(mFlowParameters.appName) + .isPlayServicesAvailable(mActivity)) { + mActivity.finish(RESULT_OK, mActivity.getIntent()); + return; + } mCredentialsApiClient = new GoogleApiClient.Builder(mActivity) .addConnectionCallbacks(this) @@ -129,17 +140,19 @@ public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { + " and code: " + connectionResult.getErrorCode()); } PendingIntent resolution = - GoogleApiAvailability.getInstance().getErrorResolutionPendingIntent(mActivity, - connectionResult - .getErrorCode(), - RC_UPDATE_SERVICE); + GoogleApiAvailability + .getInstance() + .getErrorResolutionPendingIntent(mActivity, + connectionResult.getErrorCode(), + RC_UPDATE_SERVICE); try { - mActivity.startIntentSenderForResult(resolution.getIntentSender(), - RC_UPDATE_SERVICE, - null, - 0, - 0, - 0); + startIntentSenderForResult(resolution.getIntentSender(), + RC_UPDATE_SERVICE, + null, + 0, + 0, + 0, + null); } catch (IntentSender.SendIntentException e) { e.printStackTrace(); mActivity.finish(RESULT_OK, mActivity.getIntent()); @@ -168,7 +181,10 @@ public void onResult(@NonNull Status status) { } } - public void onActivityResult(int requestCode, int resultCode) { + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == RC_SAVE) { if (resultCode == RESULT_OK) { if (BuildConfig.DEBUG) { @@ -193,6 +209,40 @@ public void onActivityResult(int requestCode, int resultCode) { } } + +// public static void saveCredentialOrFinish(AppCompatBase activity, +// FlowParameters parameters, +// FirebaseUser firebaseUser, +// @Nullable String password, +// @Nullable String provider) { +// // If SmartLock is disabled, finish the Activity +// if (!parameters.smartLockEnabled) { +// activity.finish(RESULT_OK, activity.getIntent()); +// return; +// } +// +// // If Play Services is not available, finish the Activity +// if (!PlayServicesHelper.getInstance(activity).isPlayServicesAvailable()) { +// activity.finish(RESULT_OK, activity.getIntent()); +// return; +// } +// +// if (!FirebaseAuthWrapperFactory.getFirebaseAuthWrapper(parameters.appName) +// .isPlayServicesAvailable(activity)) { +// activity.finish(RESULT_OK, activity.getIntent()); +// return; +// } +// +// // Save credentials +// new SmartLock(activity, +// firebaseUser.getDisplayName(), +// firebaseUser.getEmail(), +// password, +// provider, +// firebaseUser.getPhotoUrl() != null ? firebaseUser.getPhotoUrl() +// .toString() : null); +// } + /** * If SmartLock is enabled and Google Play Services is available, save the credentials. * Otherwise, finish the calling Activity with RESULT_OK. @@ -203,36 +253,21 @@ public void onActivityResult(int requestCode, int resultCode) { * @param password (optional) password for email credential. * @param provider (optional) provider string for provider credential. */ - public static SmartLock saveCredentialOrFinish(AppCompatBase activity, - FlowParameters parameters, - FirebaseUser firebaseUser, - @Nullable String password, - @Nullable String provider) { - // If SmartLock is disabled, finish the Activity - if (!parameters.smartLockEnabled) { - activity.finish(RESULT_OK, new Intent()); - return null; - } - - // If Play Services is not available, finish the Activity - if (!PlayServicesHelper.getInstance(activity).isPlayServicesAvailable()) { - activity.finish(RESULT_OK, new Intent()); - return null; - } - - if (!FirebaseAuthWrapperFactory.getFirebaseAuthWrapper(parameters.appName) - .isPlayServicesAvailable(activity)) { - activity.finish(RESULT_OK, activity.getIntent()); - return null; - } + public static SmartLock getInstance(AppCompatBase activity, + FlowParameters parameters, + FirebaseUser firebaseUser, + @Nullable String password, + @Nullable String provider) { + SmartLock smartLock = new SmartLock(); + smartLock.mActivity = activity; + smartLock.mFlowParameters = parameters; + smartLock.mName = firebaseUser.getDisplayName(); + smartLock.mEmail = firebaseUser.getEmail(); + smartLock.mPassword = password; + smartLock.mProvider = provider; + smartLock.mProfilePictureUri = firebaseUser.getPhotoUrl() != null ? firebaseUser.getPhotoUrl() + .toString() : null; - // Save credentials - return new SmartLock(activity, - firebaseUser.getDisplayName(), - firebaseUser.getEmail(), - password, - provider, - firebaseUser.getPhotoUrl() != null ? firebaseUser.getPhotoUrl() - .toString() : null); + return smartLock; } } From 8adeee19ddc3e4d96fdfed99294d86ebad0ecf21 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Thu, 13 Oct 2016 23:37:40 -0700 Subject: [PATCH 03/27] Cleanup --- .../WelcomeBackPasswordPrompt.java | 8 +---- .../auth/ui/email/RegisterEmailActivity.java | 8 +---- .../ui/auth/ui/email/SignInActivity.java | 17 ++-------- .../auth/ui/idp/CredentialSignInHandler.java | 8 ++--- .../ui/idp/IDPSignInContainerActivity.java | 7 ++-- .../com/firebase/ui/auth/util/SmartLock.java | 34 ------------------- .../ui/idp/CredentialSignInHandlerTest.java | 13 +++---- 7 files changed, 13 insertions(+), 82 deletions(-) diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java index 661909f67..2ab515000 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java @@ -136,14 +136,8 @@ public void onSuccess(AuthResult authResult) { mActivityHelper.getFlowParams(), authResult.getUser(), password, - null /* provider */), "test") + null /* provider */), TAG) .commit(); -// SmartLock.saveCredentialOrFinish( -// WelcomeBackPasswordPrompt.this, -// mActivityHelper.getFlowParams(), -// authResult.getUser(), -// password, -// null /* provider */); } }); } 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 d82833b5d..f6243fb26 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 @@ -165,14 +165,8 @@ public void onComplete(@NonNull Task task) { mActivityHelper.getFlowParams(), firebaseUser, password, - null /* provider */), "test") + null /* provider */), TAG) .commit(); -// mSmartLock = SmartLock.saveCredentialOrFinish( -// RegisterEmailActivity.this, -// mActivityHelper.getFlowParams(), -// firebaseUser, -// password, -// null /* provider */); } }); } 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 index 2128cdc49..eeeac484c 100644 --- 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 @@ -89,7 +89,6 @@ protected void onCreate(Bundle savedInstanceState) { } signInButton.setOnClickListener(this); recoveryButton.setOnClickListener(this); - } @Override @@ -113,16 +112,8 @@ public void onSuccess(AuthResult authResult) { mActivityHelper.getFlowParams(), authResult.getUser(), password, - null /* provider */), "test") + null /* provider */), TAG) .commit(); - - -// mSmartLock = SmartLock.saveCredentialOrFinish( -// SignInActivity.this, -// mActivityHelper.getFlowParams(), -// authResult.getUser(), -// password, -// null /* provider */); } }) .addOnFailureListener(new OnFailureListener() { @@ -144,19 +135,15 @@ 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) { - return; - } else { + if (emailValid && passwordValid) { mActivityHelper.showLoadingDialog(R.string.progress_dialog_signing_in); signIn(mEmailEditText.getText().toString(), mPasswordEditText.getText().toString()); - return; } } else if (view.getId() == R.id.trouble_signing_in) { startActivity(RecoverPasswordActivity.createIntent( this, mActivityHelper.getFlowParams(), mEmailEditText.getText().toString())); - return; } } 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 cbb0dd97b..7d28181d6 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 @@ -37,6 +37,7 @@ public class CredentialSignInHandler implements OnCompleteListener { private final static String TAG = "CredentialSignInHandler"; + private int mAccountLinkResultCode; private AppCompatBase mActivity; private ActivityHelper mActivityHelper; @@ -66,13 +67,8 @@ public void onComplete(@NonNull Task task) { mActivityHelper.getFlowParams(), firebaseUser, null /* password */, - mResponse.getProviderType()), "test") + mResponse.getProviderType()), TAG) .commit(); -// SmartLock.saveCredentialOrFinish(mActivity, -// mActivityHelper.getFlowParams(), -// firebaseUser, -// null /* password */, -// mResponse.getProviderType()); } else { if (task.getException() instanceof FirebaseAuthUserCollisionException) { final String email = mResponse.getEmail(); diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java index 3441c10c7..61d30ab4e 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java @@ -78,12 +78,11 @@ public void onSuccess(final IDPResponse response) { authResultTask .addOnFailureListener( new TaskFailureLogger(TAG, "Failure authenticating with credential")) - /*.addOnCompleteListener(new CredentialSignInHandler( + .addOnCompleteListener(new CredentialSignInHandler( IDPSignInContainerActivity.this, mActivityHelper, RC_WELCOME_BACK_IDP, - RC_SAVE_CREDENTIALS, - response))*/; + response)); } @Override @@ -96,8 +95,6 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_WELCOME_BACK_IDP) { finish(resultCode, new Intent()); - } else if (requestCode == RC_SAVE_CREDENTIALS) { - finish(RESULT_OK, new Intent()); } else { mIDPProvider.onActivityResult(requestCode, resultCode, data); } diff --git a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java index 424192c51..63184e8c0 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java @@ -209,40 +209,6 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { } } - -// public static void saveCredentialOrFinish(AppCompatBase activity, -// FlowParameters parameters, -// FirebaseUser firebaseUser, -// @Nullable String password, -// @Nullable String provider) { -// // If SmartLock is disabled, finish the Activity -// if (!parameters.smartLockEnabled) { -// activity.finish(RESULT_OK, activity.getIntent()); -// return; -// } -// -// // If Play Services is not available, finish the Activity -// if (!PlayServicesHelper.getInstance(activity).isPlayServicesAvailable()) { -// activity.finish(RESULT_OK, activity.getIntent()); -// return; -// } -// -// if (!FirebaseAuthWrapperFactory.getFirebaseAuthWrapper(parameters.appName) -// .isPlayServicesAvailable(activity)) { -// activity.finish(RESULT_OK, activity.getIntent()); -// return; -// } -// -// // Save credentials -// new SmartLock(activity, -// firebaseUser.getDisplayName(), -// firebaseUser.getEmail(), -// password, -// provider, -// firebaseUser.getPhotoUrl() != null ? firebaseUser.getPhotoUrl() -// .toString() : null); -// } - /** * If SmartLock is enabled and Google Play Services is available, save the credentials. * Otherwise, finish the calling Activity with RESULT_OK. diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java index cbced2a4a..248ca64bf 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java @@ -14,7 +14,6 @@ package com.firebase.ui.auth.ui.idp; -import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; @@ -30,13 +29,14 @@ import com.firebase.ui.auth.test_helpers.TestConstants; import com.firebase.ui.auth.test_helpers.TestHelper; import com.firebase.ui.auth.ui.ActivityHelper; +import com.firebase.ui.auth.ui.AppCompatBase; import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; -import com.firebase.ui.auth.util.SmartLock; import com.firebase.ui.auth.ui.account_link.WelcomeBackIDPPrompt; import com.firebase.ui.auth.ui.account_link.WelcomeBackPasswordPrompt; import com.firebase.ui.auth.util.CredentialsAPI; import com.firebase.ui.auth.util.PlayServicesHelper; +import com.firebase.ui.auth.util.SmartLock; import com.google.android.gms.tasks.Task; import com.google.android.gms.tasks.Tasks; import com.google.firebase.FirebaseApp; @@ -89,7 +89,7 @@ public void setUp() { @Test public void testSignInSucceeded() { - Activity mockActivity = mock(Activity.class); + AppCompatBase mockActivity = mock(AppCompatBase.class); ActivityHelper mockActivityHelper = mock(ActivityHelper.class); FirebaseUser mockFirebaseUser = TestHelper.makeMockFirebaseUser(); IDPResponse idpResponse = new IDPResponse( @@ -100,7 +100,6 @@ public void testSignInSucceeded() { mockActivity, mockActivityHelper, RC_ACCOUNT_LINK, - RC_SAVE_CREDENTIALS, idpResponse); Context mockContext = mock(Context.class); @@ -136,7 +135,7 @@ public void testSignInSucceeded() { @Test public void testSignInFailed_withFacebookAlreadyLinked() { - Activity mockActivity = mock(Activity.class); + AppCompatBase mockActivity = mock(AppCompatBase.class); ActivityHelper mockActivityHelper = mock(ActivityHelper.class); FirebaseAuth mockFirebaseAuth = mock(FirebaseAuth.class); IDPResponse idpResponse = new IDPResponse( @@ -147,7 +146,6 @@ public void testSignInFailed_withFacebookAlreadyLinked() { mockActivity, mockActivityHelper, RC_ACCOUNT_LINK, - RC_SAVE_CREDENTIALS, idpResponse); Context mockContext = mock(Context.class); @@ -186,7 +184,7 @@ public void testSignInFailed_withFacebookAlreadyLinked() { @Test public void testSignInFailed_withPasswordAccountAlreadyLinked() { - Activity mockActivity = mock(Activity.class); + AppCompatBase mockActivity = mock(AppCompatBase.class); ActivityHelper mockActivityHelper = mock(ActivityHelper.class); FirebaseAuth mockFirebaseAuth = mock(FirebaseAuth.class); IDPResponse idpResponse = new IDPResponse( @@ -197,7 +195,6 @@ public void testSignInFailed_withPasswordAccountAlreadyLinked() { mockActivity, mockActivityHelper, RC_ACCOUNT_LINK, - RC_SAVE_CREDENTIALS, idpResponse); Context mockContext = mock(Context.class); From 11f3c2b7b469629d7c7880e5ba5a7edc2f23ab6f Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Thu, 13 Oct 2016 23:41:22 -0700 Subject: [PATCH 04/27] Cleanup --- auth/src/main/res/values/styles.xml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/auth/src/main/res/values/styles.xml b/auth/src/main/res/values/styles.xml index d525e40ea..3fa8647bf 100644 --- a/auth/src/main/res/values/styles.xml +++ b/auth/src/main/res/values/styles.xml @@ -243,13 +243,4 @@ @drawable/idp_button_background_facebook @color/com_facebook_button_text_color - - - From cb826f4239c7ca3729f1fae73e6e2bc9bfb76cb6 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Thu, 13 Oct 2016 23:51:12 -0700 Subject: [PATCH 05/27] Cleanup --- .../main/java/com/firebase/ui/auth/AuthUI.java | 4 ++-- .../ui/auth/ui/ChooseAccountActivity.java | 4 +--- .../account_link/WelcomeBackPasswordPrompt.java | 15 ++++++--------- .../ui/auth/ui/email/RegisterEmailActivity.java | 15 ++++++--------- .../firebase/ui/auth/ui/email/SignInActivity.java | 15 ++++++--------- .../ui/auth/ui/idp/CredentialSignInHandler.java | 15 ++++++--------- .../java/com/firebase/ui/auth/util/SmartLock.java | 7 +++++-- 7 files changed, 32 insertions(+), 43 deletions(-) diff --git a/auth/src/main/java/com/firebase/ui/auth/AuthUI.java b/auth/src/main/java/com/firebase/ui/auth/AuthUI.java index 31808da5c..c3650483b 100644 --- a/auth/src/main/java/com/firebase/ui/auth/AuthUI.java +++ b/auth/src/main/java/com/firebase/ui/auth/AuthUI.java @@ -265,13 +265,13 @@ private AuthUI(FirebaseApp app) { * ({@code !result.isSuccess()}). */ public Task signOut(@NonNull Activity activity) { - // Get helper for Google Sign In and SmartLock API + // Get helper for Google Sign In and Credentials API GoogleApiClientTaskHelper taskHelper = GoogleApiClientTaskHelper.getInstance(activity); taskHelper.getBuilder() .addApi(Auth.CREDENTIALS_API) .addApi(Auth.GOOGLE_SIGN_IN_API, GoogleSignInOptions.DEFAULT_SIGN_IN); - // Get SmartLock Helper + // Get Credentials Helper CredentialsApiHelper credentialsHelper = CredentialsApiHelper.getInstance(taskHelper); // Firebase Sign out diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/ChooseAccountActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/ChooseAccountActivity.java index 3187df39a..41e3ef5e0 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/ChooseAccountActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/ChooseAccountActivity.java @@ -113,12 +113,11 @@ protected void onStop() { } /** - * Called when the SmartLock API connects. + * Called when the Credentials API connects. */ public void onCredentialsApiConnected( CredentialsAPI credentialsApi, ActivityHelper activityHelper) { - String email = credentialsApi.getEmailFromCredential(); String password = credentialsApi.getPasswordFromCredential(); String accountType = credentialsApi.getAccountTypeFromCredential(); @@ -226,7 +225,6 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { finish(resultCode, new Intent()); } break; - } } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java index 2ab515000..019d8e4f9 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java @@ -129,15 +129,12 @@ public void onSuccess(AuthResult authResult) { new OnSuccessListener() { @Override public void onSuccess(AuthResult authResult) { - getSupportFragmentManager() - .beginTransaction() - .add(SmartLock.getInstance( - WelcomeBackPasswordPrompt.this, - mActivityHelper.getFlowParams(), - authResult.getUser(), - password, - null /* provider */), TAG) - .commit(); + SmartLock.newInstance( + WelcomeBackPasswordPrompt.this, + mActivityHelper.getFlowParams(), + authResult.getUser(), + password, + null /* provider */); } }); } 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 f6243fb26..fd9785573 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 @@ -158,15 +158,12 @@ public void onComplete(@NonNull Task task) { // This executes even if the name change fails, since // the account creation succeeded and we want to save // the credential to SmartLock (if enabled). - getSupportFragmentManager() - .beginTransaction() - .add(SmartLock.getInstance( - RegisterEmailActivity.this, - mActivityHelper.getFlowParams(), - firebaseUser, - password, - null /* provider */), TAG) - .commit(); + SmartLock.newInstance( + RegisterEmailActivity.this, + mActivityHelper.getFlowParams(), + firebaseUser, + password, + null /* provider */); } }); } 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 index eeeac484c..ad08d8387 100644 --- 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 @@ -105,15 +105,12 @@ private void signIn(String email, final String password) { @Override public void onSuccess(AuthResult authResult) { // Save credential in SmartLock (if enabled) - getSupportFragmentManager() - .beginTransaction() - .add(SmartLock.getInstance( - SignInActivity.this, - mActivityHelper.getFlowParams(), - authResult.getUser(), - password, - null /* provider */), TAG) - .commit(); + SmartLock.newInstance( + SignInActivity.this, + mActivityHelper.getFlowParams(), + authResult.getUser(), + password, + null /* provider */); } }) .addOnFailureListener(new OnFailureListener() { 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 7d28181d6..44588af5f 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 @@ -60,15 +60,12 @@ public void onComplete(@NonNull Task task) { mActivityHelper.dismissDialog(); FirebaseUser firebaseUser = task.getResult().getUser(); - mActivity.getSupportFragmentManager() - .beginTransaction() - .add(SmartLock.getInstance( - mActivity, - mActivityHelper.getFlowParams(), - firebaseUser, - null /* password */, - mResponse.getProviderType()), TAG) - .commit(); + SmartLock.newInstance( + mActivity, + mActivityHelper.getFlowParams(), + firebaseUser, + null /* password */, + mResponse.getProviderType()); } else { if (task.getException() instanceof FirebaseAuthUserCollisionException) { final String email = mResponse.getEmail(); diff --git a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java index 63184e8c0..bc2ec11d5 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java @@ -219,7 +219,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { * @param password (optional) password for email credential. * @param provider (optional) provider string for provider credential. */ - public static SmartLock getInstance(AppCompatBase activity, + public static void newInstance(AppCompatBase activity, FlowParameters parameters, FirebaseUser firebaseUser, @Nullable String password, @@ -234,6 +234,9 @@ public static SmartLock getInstance(AppCompatBase activity, smartLock.mProfilePictureUri = firebaseUser.getPhotoUrl() != null ? firebaseUser.getPhotoUrl() .toString() : null; - return smartLock; + activity.getSupportFragmentManager() + .beginTransaction() + .add(smartLock, TAG) + .commit(); } } From 3b788f578d6c32281dfcdeeff1799714eb02c2ad Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Fri, 14 Oct 2016 12:50:24 -0700 Subject: [PATCH 06/27] Update SmartLock.java with new fragment logic --- .../WelcomeBackPasswordPrompt.java | 5 +- .../auth/ui/email/RegisterEmailActivity.java | 5 +- .../ui/auth/ui/email/SignInActivity.java | 5 +- .../auth/ui/idp/AuthMethodPickerActivity.java | 5 + .../auth/ui/idp/CredentialSignInHandler.java | 9 +- .../ui/idp/IDPSignInContainerActivity.java | 8 +- .../com/firebase/ui/auth/util/SmartLock.java | 105 +++++++++++------- .../ui/email/RegisterEmailActivityTest.java | 29 +++-- .../ui/auth/ui/email/SignInActivityTest.java | 37 +++--- .../ui/idp/AuthMethodPickerActivityTest.java | 21 ++-- .../ui/idp/CredentialSignInHandlerTest.java | 27 ++--- 11 files changed, 143 insertions(+), 113 deletions(-) diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java index 019d8e4f9..b8342a37f 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java @@ -56,12 +56,15 @@ public class WelcomeBackPasswordPrompt extends AppCompatBase implements View.OnC private TextInputLayout mPasswordLayout; private EditText mPasswordField; private IDPResponse mIdpResponse; + private SmartLock mSmartLock; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.welcome_back_password_prompt_layout); + mSmartLock = SmartLock.getInstance(this); + mPasswordLayout = (TextInputLayout) findViewById(R.id.password_layout); mPasswordField = (EditText) findViewById(R.id.password); @@ -129,7 +132,7 @@ public void onSuccess(AuthResult authResult) { new OnSuccessListener() { @Override public void onSuccess(AuthResult authResult) { - SmartLock.newInstance( + mSmartLock.saveCredentialsOrFinish( WelcomeBackPasswordPrompt.this, mActivityHelper.getFlowParams(), authResult.getUser(), 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 fd9785573..4bceff927 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 @@ -58,6 +58,7 @@ public class RegisterEmailActivity extends AppCompatBase implements View.OnClickListener { private static final String TAG = "RegisterEmailActivity"; + private SmartLock mSmartLock; private EditText mEmailEditText; private EditText mPasswordEditText; private EditText mNameEditText; @@ -70,6 +71,8 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.register_email_layout); + mSmartLock = SmartLock.getInstance(this); + String email = getIntent().getStringExtra(ExtraConstants.EXTRA_EMAIL); mEmailEditText = (EditText) findViewById(R.id.email); @@ -158,7 +161,7 @@ public void onComplete(@NonNull Task task) { // This executes even if the name change fails, since // the account creation succeeded and we want to save // the credential to SmartLock (if enabled). - SmartLock.newInstance( + mSmartLock.saveCredentialsOrFinish( RegisterEmailActivity.this, mActivityHelper.getFlowParams(), firebaseUser, 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 index ad08d8387..cc633f3f8 100644 --- 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 @@ -45,6 +45,7 @@ public class SignInActivity extends AppCompatBase implements View.OnClickListener { private static final String TAG = "SignInActivity"; + private SmartLock mSmartLock; private EditText mEmailEditText; private EditText mPasswordEditText; private EmailFieldValidator mEmailValidator; @@ -55,6 +56,8 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sign_in_layout); + mSmartLock = SmartLock.getInstance(this); + String email = getIntent().getStringExtra(ExtraConstants.EXTRA_EMAIL); mEmailEditText = (EditText) findViewById(R.id.email); @@ -105,7 +108,7 @@ private void signIn(String email, final String password) { @Override public void onSuccess(AuthResult authResult) { // Save credential in SmartLock (if enabled) - SmartLock.newInstance( + mSmartLock.saveCredentialsOrFinish( SignInActivity.this, mActivityHelper.getFlowParams(), authResult.getUser(), 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 d9aa24fa1..2de9c7d32 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 @@ -35,6 +35,7 @@ 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.util.SmartLock; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.EmailAuthProvider; import com.google.firebase.auth.FacebookAuthProvider; @@ -61,6 +62,7 @@ public class AuthMethodPickerActivity private static final int RC_ACCOUNT_LINK = 3; private static final String TAG = "AuthMethodPicker"; + private SmartLock mSmartLock; private ArrayList mIdpProviders; @Override @@ -68,6 +70,8 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.auth_method_picker_layout); + mSmartLock = SmartLock.getInstance(this); + findViewById(R.id.email_provider).setOnClickListener(this); populateIdpList(mActivityHelper.getFlowParams().providerInfo); @@ -159,6 +163,7 @@ public void onSuccess(final IDPResponse response) { .addOnCompleteListener(new CredentialSignInHandler( AuthMethodPickerActivity.this, mActivityHelper, + mSmartLock, RC_ACCOUNT_LINK, response)); } 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 44588af5f..46be6b86e 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 @@ -38,19 +38,22 @@ public class CredentialSignInHandler implements OnCompleteListener { private final static String TAG = "CredentialSignInHandler"; - private int mAccountLinkResultCode; private AppCompatBase mActivity; private ActivityHelper mActivityHelper; + private SmartLock mSmartLock; + private int mAccountLinkResultCode; private IDPResponse mResponse; public CredentialSignInHandler( AppCompatBase activity, ActivityHelper activityHelper, + SmartLock smartLock, int accountLinkResultCode, IDPResponse response) { mActivity = activity; - mAccountLinkResultCode = accountLinkResultCode; mActivityHelper = activityHelper; + mSmartLock = smartLock; + mAccountLinkResultCode = accountLinkResultCode; mResponse = response; } @@ -60,7 +63,7 @@ public void onComplete(@NonNull Task task) { mActivityHelper.dismissDialog(); FirebaseUser firebaseUser = task.getResult().getUser(); - SmartLock.newInstance( + mSmartLock.saveCredentialsOrFinish( mActivity, mActivityHelper.getFlowParams(), firebaseUser, diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java index 61d30ab4e..1e3360d19 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java @@ -27,6 +27,7 @@ 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.util.SmartLock; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.AuthResult; @@ -37,7 +38,8 @@ public class IDPSignInContainerActivity extends IDPBaseActivity implements IDPProvider.IDPCallback { private static final String TAG = "IDPSignInContainer"; private static final int RC_WELCOME_BACK_IDP = 4; - private static final int RC_SAVE_CREDENTIALS = 5; + + private SmartLock mSmartLock; private IDPProvider mIDPProvider; private String mProvider; private String mEmail; @@ -45,6 +47,9 @@ public class IDPSignInContainerActivity extends IDPBaseActivity implements IDPPr @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + mSmartLock = SmartLock.getInstance(this); + mProvider = getIntent().getStringExtra(ExtraConstants.EXTRA_PROVIDER); mEmail = getIntent().getStringExtra(ExtraConstants.EXTRA_EMAIL); IDPProviderParcel providerParcel = null; @@ -81,6 +86,7 @@ public void onSuccess(final IDPResponse response) { .addOnCompleteListener(new CredentialSignInHandler( IDPSignInContainerActivity.this, mActivityHelper, + mSmartLock, RC_WELCOME_BACK_IDP, response)); } diff --git a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java index bc2ec11d5..c32234686 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java @@ -22,10 +22,13 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; import android.util.Log; import com.firebase.ui.auth.BuildConfig; import com.firebase.ui.auth.ui.AppCompatBase; +import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; import com.google.android.gms.auth.api.Auth; import com.google.android.gms.auth.api.credentials.Credential; @@ -56,36 +59,6 @@ public class SmartLock extends Fragment implements GoogleApiClient.ConnectionCal private String mProfilePictureUri; private GoogleApiClient mCredentialsApiClient; - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - // If SmartLock is disabled, finish the Activity - if (!mFlowParameters.smartLockEnabled) { - mActivity.finish(RESULT_OK, mActivity.getIntent()); - return; - } - - // If Play Services is not available, finish the Activity - if (!PlayServicesHelper.getInstance(mActivity).isPlayServicesAvailable()) { - mActivity.finish(RESULT_OK, mActivity.getIntent()); - return; - } - - if (!FirebaseAuthWrapperFactory.getFirebaseAuthWrapper(mFlowParameters.appName) - .isPlayServicesAvailable(mActivity)) { - mActivity.finish(RESULT_OK, mActivity.getIntent()); - return; - } - - mCredentialsApiClient = new GoogleApiClient.Builder(mActivity) - .addConnectionCallbacks(this) - .addOnConnectionFailedListener(this) - .addApi(Auth.CREDENTIALS_API) - .enableAutoManage(mActivity, this) - .build(); - } - @Override public void onConnected(@Nullable Bundle bundle) { if (mEmail == null) { @@ -219,24 +192,70 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { * @param password (optional) password for email credential. * @param provider (optional) provider string for provider credential. */ - public static void newInstance(AppCompatBase activity, + public void saveCredentialsOrFinish(AppCompatBase activity, FlowParameters parameters, FirebaseUser firebaseUser, @Nullable String password, @Nullable String provider) { - SmartLock smartLock = new SmartLock(); - smartLock.mActivity = activity; - smartLock.mFlowParameters = parameters; - smartLock.mName = firebaseUser.getDisplayName(); - smartLock.mEmail = firebaseUser.getEmail(); - smartLock.mPassword = password; - smartLock.mProvider = provider; - smartLock.mProfilePictureUri = firebaseUser.getPhotoUrl() != null ? firebaseUser.getPhotoUrl() + // If SmartLock is disabled, finish the Activity + if (!mFlowParameters.smartLockEnabled) { + activity.finish(RESULT_OK, activity.getIntent()); + return; + } + + // If Play Services is not available, finish the Activity + if (!PlayServicesHelper.getInstance(activity).isPlayServicesAvailable()) { + activity.finish(RESULT_OK, activity.getIntent()); + return; + } + + if (!FirebaseAuthWrapperFactory.getFirebaseAuthWrapper(mFlowParameters.appName) + .isPlayServicesAvailable(activity)) { + activity.finish(RESULT_OK, activity.getIntent()); + return; + } + + mActivity = activity; + mFlowParameters = parameters; + mName = firebaseUser.getDisplayName(); + mEmail = firebaseUser.getEmail(); + mPassword = password; + mProvider = provider; + mProfilePictureUri = firebaseUser.getPhotoUrl() != null ? firebaseUser.getPhotoUrl() .toString() : null; - activity.getSupportFragmentManager() - .beginTransaction() - .add(smartLock, TAG) - .commit(); + mCredentialsApiClient = new GoogleApiClient.Builder(activity) + .addConnectionCallbacks(this) + .addOnConnectionFailedListener(this) + .addApi(Auth.CREDENTIALS_API) + .enableAutoManage(activity, this) + .build(); + } + + public Intent getIntentForTest() { + return mActivity.getIntent() + .putExtra(ExtraConstants.EXTRA_FLOW_PARAMS, mFlowParameters) + .putExtra(ExtraConstants.EXTRA_NAME, mName) + .putExtra(ExtraConstants.EXTRA_EMAIL, mEmail) + .putExtra(ExtraConstants.EXTRA_PASSWORD, mPassword) + .putExtra(ExtraConstants.EXTRA_PROVIDER, mProvider) + .putExtra(ExtraConstants.EXTRA_PROFILE_PICTURE_URI, mProfilePictureUri); + } + + public static SmartLock getInstance(AppCompatBase activity) { + SmartLock result; + + FragmentManager fm = activity.getSupportFragmentManager(); + FragmentTransaction ft = fm.beginTransaction(); + + Fragment fragment = fm.findFragmentByTag(TAG); + if (fragment == null || !(fragment instanceof SmartLock)) { + result = new SmartLock(); + ft.add(result, TAG).disallowAddToBackStack().commit(); + } else { + result = (SmartLock) fragment; + } + + return result; } } 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 c1a0d2b6c..85bf29739 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 @@ -29,8 +29,6 @@ import com.firebase.ui.auth.test_helpers.FirebaseAuthWrapperImplShadow; 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.firebase.ui.auth.util.SmartLock; import com.firebase.ui.auth.util.PlayServicesHelper; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.UserProfileChangeRequest; @@ -48,7 +46,6 @@ import java.util.Arrays; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.when; @@ -131,18 +128,18 @@ public void testSignupButton_successfulRegisterationShouldContinueToSaveCredenti ShadowActivity.IntentForResult nextIntent = shadowActivity.getNextStartedActivityForResult(); - assertNotNull(nextIntent); - assertEquals( - nextIntent.intent.getComponent().getClassName(), - SmartLock.class.getName()); - assertEquals( - TestConstants.EMAIL, - nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_EMAIL)); - assertEquals( - TestConstants.PASSWORD, - nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PASSWORD)); - assertEquals( - TestConstants.NAME, - nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_NAME)); +// assertNotNull(nextIntent); +// assertEquals( +// nextIntent.intent.getComponent().getClassName(), +// SmartLock.class.getName()); +// assertEquals( +// TestConstants.EMAIL, +// nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_EMAIL)); +// assertEquals( +// TestConstants.PASSWORD, +// nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PASSWORD)); +// assertEquals( +// TestConstants.NAME, +// nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_NAME)); } } diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java index 1890f0ae2..613ee6722 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java @@ -28,8 +28,6 @@ import com.firebase.ui.auth.test_helpers.FirebaseAuthWrapperImplShadow; 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.firebase.ui.auth.util.SmartLock; import com.firebase.ui.auth.util.PlayServicesHelper; import com.google.firebase.auth.FirebaseUser; @@ -120,23 +118,22 @@ public void testSignInButton_signsInAndSavesCredentials() { TestConstants.EMAIL, TestConstants.PASSWORD); - ShadowActivity.IntentForResult nextIntent = - Shadows.shadowOf(signInActivity).getNextStartedActivityForResult(); - assertEquals( - SmartLock.class.getName(), - nextIntent.intent.getComponent().getClassName() - ); - assertEquals( - TestConstants.EMAIL, - nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_EMAIL) - ); - assertEquals( - TestConstants.PASSWORD, - nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PASSWORD) - ); - assertEquals( - TestConstants.NAME, - nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_NAME) - ); +// Intent intent = Shadows.shadowOf(signInActivity).getResultIntent(); +// assertEquals( +// SignInActivity.class.getName(), +// intent.getComponent().getClassName() +// ); +// assertEquals( +// TestConstants.EMAIL, +// intent.getExtras().getString(ExtraConstants.EXTRA_EMAIL) +// ); +// assertEquals( +// TestConstants.PASSWORD, +// intent.getExtras().getString(ExtraConstants.EXTRA_PASSWORD) +// ); +// assertEquals( +// TestConstants.NAME, +// intent.getExtras().getString(ExtraConstants.EXTRA_NAME) +// ); } } 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 aa02edea9..b9fa64e3b 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 @@ -148,7 +148,7 @@ public void testFacebookLoginFlow() { ShadowActivity.IntentForResult nextIntent = Shadows.shadowOf(authMethodPickerActivity).getNextStartedActivityForResult(); - verifySaveCredentialIntent(nextIntent, FacebookAuthProvider.PROVIDER_ID); +// verifySaveCredentialIntent(nextIntent, FacebookAuthProvider.PROVIDER_ID); } @Test @@ -171,32 +171,31 @@ public void testGoogleLoginFlow() { assertNotNull(googleButton); googleButton.performClick(); - ShadowActivity.IntentForResult nextIntent = - Shadows.shadowOf(authMethodPickerActivity).getNextStartedActivityForResult(); + Intent smartLockIntent = SmartLock.getInstance(authMethodPickerActivity).getIntentForTest(); - verifySaveCredentialIntent(nextIntent, GoogleAuthProvider.PROVIDER_ID); + verifySaveCredentialIntent(smartLockIntent, GoogleAuthProvider.PROVIDER_ID); } private static void verifySaveCredentialIntent( - ShadowActivity.IntentForResult nextIntent, + Intent smartLockIntent, String provider) { assertEquals( SmartLock.class.getName(), - nextIntent.intent.getComponent().getClassName()); + smartLockIntent.getComponent().getClassName()); assertEquals( - nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_EMAIL), + smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_EMAIL), TestConstants.EMAIL); assertEquals( - nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_NAME), + smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_NAME), TestConstants.NAME); assertEquals( - nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PROFILE_PICTURE_URI), + smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_PROFILE_PICTURE_URI), TestConstants.PHOTO_URL); assertEquals( - nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PROVIDER), + smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_PROVIDER), provider); assertEquals( - nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PASSWORD), + smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_PASSWORD), null); } diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java index 248ca64bf..a7aa145a0 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java @@ -64,7 +64,6 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; - @RunWith(CustomRobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class, sdk = 23, shadows = {ActivityHelperShadow.class}) public class CredentialSignInHandlerTest { @@ -96,9 +95,11 @@ public void testSignInSucceeded() { GoogleAuthProvider.PROVIDER_ID, TestConstants.EMAIL, new Bundle()); + SmartLock smartLock = new SmartLock(); CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler( mockActivity, mockActivityHelper, + smartLock, RC_ACCOUNT_LINK, idpResponse); Context mockContext = mock(Context.class); @@ -113,24 +114,19 @@ public void testSignInSucceeded() { when(mockActivityHelper.getFlowParams()).thenReturn(flowParams); credentialSignInHandler.onComplete(signInTask); - ArgumentCaptor intentCaptor = ArgumentCaptor.forClass(Intent.class); - ArgumentCaptor intCaptor = ArgumentCaptor.forClass(Integer.class); - verify(mockActivity).startActivityForResult(intentCaptor.capture(), intCaptor.capture()); - - Intent capturedIntent = intentCaptor.getValue(); - assertEquals(RC_SAVE_CREDENTIALS, (int) intCaptor.getValue()); + Intent smartLockIntent = smartLock.getIntentForTest(); assertEquals( SmartLock.class.getName(), - capturedIntent.getComponent().getClassName()); + smartLockIntent.getComponent().getClassName()); assertEquals( TestConstants.EMAIL, - capturedIntent.getExtras().getString(ExtraConstants.EXTRA_EMAIL)); + smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_EMAIL)); assertEquals( TestConstants.NAME, - capturedIntent.getExtras().getString(ExtraConstants.EXTRA_NAME)); + smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_NAME)); assertEquals( TestConstants.PHOTO_URL, - capturedIntent.getExtras().getString(ExtraConstants.EXTRA_PROFILE_PICTURE_URI)); + smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_PROFILE_PICTURE_URI)); } @Test @@ -142,11 +138,11 @@ public void testSignInFailed_withFacebookAlreadyLinked() { GoogleAuthProvider.PROVIDER_ID, TestConstants.EMAIL, new Bundle()); - CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler( + CredentialSignInHandler credentialSignInHandler = null;/*new CredentialSignInHandler( mockActivity, mockActivityHelper, RC_ACCOUNT_LINK, - idpResponse); + idpResponse);*/ Context mockContext = mock(Context.class); FlowParameters mockFlowParams = mock(FlowParameters.class); @@ -181,7 +177,6 @@ public void testSignInFailed_withFacebookAlreadyLinked() { } - @Test public void testSignInFailed_withPasswordAccountAlreadyLinked() { AppCompatBase mockActivity = mock(AppCompatBase.class); @@ -191,11 +186,11 @@ public void testSignInFailed_withPasswordAccountAlreadyLinked() { GoogleAuthProvider.PROVIDER_ID, TestConstants.EMAIL, new Bundle()); - CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler( + CredentialSignInHandler credentialSignInHandler = null;/*new CredentialSignInHandler( mockActivity, mockActivityHelper, RC_ACCOUNT_LINK, - idpResponse); + idpResponse);*/ Context mockContext = mock(Context.class); Task mockTask = mock(Task.class); From 9eaa4cdf0cd05e691438ecc3b63831d27df0fcda Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Fri, 14 Oct 2016 13:04:23 -0700 Subject: [PATCH 07/27] Fix bug in SmartLock.java --- auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java index c32234686..38cebabac 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java @@ -198,7 +198,7 @@ public void saveCredentialsOrFinish(AppCompatBase activity, @Nullable String password, @Nullable String provider) { // If SmartLock is disabled, finish the Activity - if (!mFlowParameters.smartLockEnabled) { + if (!parameters.smartLockEnabled) { activity.finish(RESULT_OK, activity.getIntent()); return; } @@ -209,7 +209,7 @@ public void saveCredentialsOrFinish(AppCompatBase activity, return; } - if (!FirebaseAuthWrapperFactory.getFirebaseAuthWrapper(mFlowParameters.appName) + if (!FirebaseAuthWrapperFactory.getFirebaseAuthWrapper(parameters.appName) .isPlayServicesAvailable(activity)) { activity.finish(RESULT_OK, activity.getIntent()); return; From 3b76ac6f5d0bf4157905866413eb5f8b85ecef7d Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Fri, 14 Oct 2016 13:17:53 -0700 Subject: [PATCH 08/27] Cleanup --- .../ui/auth/ui/email/RegisterEmailActivity.java | 2 -- .../firebase/ui/auth/ui/email/SignInActivity.java | 14 +++----------- .../ui/auth/ui/idp/CredentialSignInHandler.java | 2 -- .../auth/ui/idp/AuthMethodPickerActivityTest.java | 3 +-- 4 files changed, 4 insertions(+), 17 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 4bceff927..799cd8589 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 @@ -156,8 +156,6 @@ public void onSuccess(AuthResult authResult) { .addOnCompleteListener(new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { - mActivityHelper.dismissDialog(); - // This executes even if the name change fails, since // the account creation succeeded and we want to save // the credential to SmartLock (if enabled). 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 index cc633f3f8..108591a91 100644 --- 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 @@ -69,8 +69,7 @@ protected void onCreate(Bundle savedInstanceState) { getResources().getValue(R.dimen.slightly_visible_icon, slightlyVisibleIcon, true); mPasswordEditText = (EditText) findViewById(R.id.password); - ((TextInputLayout) findViewById(R.id.password_layout)).setPasswordVisibilityToggleEnabled( - false); + ((TextInputLayout) findViewById(R.id.password_layout)).setPasswordVisibilityToggleEnabled(false); ImageView togglePasswordImage = (ImageView) findViewById(R.id.toggle_visibility); mPasswordEditText.setOnFocusChangeListener(new ImageFocusTransparencyChanger( @@ -80,10 +79,8 @@ protected void onCreate(Bundle savedInstanceState) { togglePasswordImage.setOnClickListener(new PasswordToggler(mPasswordEditText)); - mEmailValidator = new EmailFieldValidator((TextInputLayout) findViewById(R.id - .email_layout)); - mPasswordValidator = new RequiredFieldValidator((TextInputLayout) findViewById(R.id - .password_layout)); + mEmailValidator = new EmailFieldValidator((TextInputLayout) findViewById(R.id.email_layout)); + mPasswordValidator = new RequiredFieldValidator((TextInputLayout) findViewById(R.id.password_layout)); Button signInButton = (Button) findViewById(R.id.button_done); TextView recoveryButton = (TextView) findViewById(R.id.trouble_signing_in); @@ -94,11 +91,6 @@ protected void onCreate(Bundle savedInstanceState) { recoveryButton.setOnClickListener(this); } - @Override - public void onBackPressed() { - super.onBackPressed(); - } - private void signIn(String email, final String password) { mActivityHelper.getFirebaseAuth() .signInWithEmailAndPassword(email, password) 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 46be6b86e..8b8aab090 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 @@ -60,8 +60,6 @@ public CredentialSignInHandler( @Override public void onComplete(@NonNull Task task) { if (task.isSuccessful()) { - mActivityHelper.dismissDialog(); - FirebaseUser firebaseUser = task.getResult().getUser(); mSmartLock.saveCredentialsOrFinish( mActivity, 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 b9fa64e3b..bc3cbddb7 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 @@ -156,8 +156,7 @@ public void testFacebookLoginFlow() { public void testGoogleLoginFlow() { List providers = Arrays.asList(AuthUI.GOOGLE_PROVIDER); - AuthMethodPickerActivity authMethodPickerActivity = - createActivity(providers); + AuthMethodPickerActivity authMethodPickerActivity = createActivity(providers); FirebaseUser mockFirebaseUser = TestHelper.makeMockFirebaseUser(); when(mockFirebaseUser.getProviders()) From 86d58a99109ce13d5fc2cbc5449e6bdffbcb75a3 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Fri, 14 Oct 2016 13:19:27 -0700 Subject: [PATCH 09/27] Cleanup --- .../main/java/com/firebase/ui/auth/util/CredentialsAPI.java | 4 ++-- .../java/com/firebase/ui/auth/util/CredentialsApiHelper.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/auth/src/main/java/com/firebase/ui/auth/util/CredentialsAPI.java b/auth/src/main/java/com/firebase/ui/auth/util/CredentialsAPI.java index 0675276c1..7f514c958 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/CredentialsAPI.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/CredentialsAPI.java @@ -71,7 +71,7 @@ public boolean isPlayServicesAvailable() { } public boolean isCredentialsAvailable() { - // TODO: (serikb) find the way to check if SmartLock is available on top of play services + // TODO: (serikb) find the way to check if Credentials is available on top of play services return true; } @@ -96,7 +96,7 @@ public void resolveSavedEmails(Activity activity) { try { status.startResolutionForResult(activity, RC_CREDENTIALS_READ); } catch (IntentSender.SendIntentException e) { - Log.e(TAG, "Failed to send SmartLock intent.", e); + Log.e(TAG, "Failed to send Credentials intent.", e); } } } diff --git a/auth/src/main/java/com/firebase/ui/auth/util/CredentialsApiHelper.java b/auth/src/main/java/com/firebase/ui/auth/util/CredentialsApiHelper.java index 0647b1a19..cd9a3e94b 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/CredentialsApiHelper.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/CredentialsApiHelper.java @@ -144,7 +144,7 @@ public void onResult(@NonNull Status status) { } public static CredentialsApiHelper getInstance(Activity activity) { - // Get a task helper with the SmartLock Api + // Get a task helper with the Credentials Api GoogleApiClientTaskHelper taskHelper = GoogleApiClientTaskHelper.getInstance(activity); taskHelper.getBuilder() .addApi(Auth.CREDENTIALS_API); From 6ad0021069b8df53e30c1b6fa1e678fd24ef21b7 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Fri, 14 Oct 2016 14:43:34 -0700 Subject: [PATCH 10/27] Fix broken tests --- .../com/firebase/ui/auth/util/SmartLock.java | 18 +++---- .../ui/email/RegisterEmailActivityTest.java | 54 +++++++++---------- .../ui/auth/ui/email/SignInActivityTest.java | 33 ++++++------ .../ui/idp/AuthMethodPickerActivityTest.java | 3 -- .../ui/idp/CredentialSignInHandlerTest.java | 26 +++++---- 5 files changed, 64 insertions(+), 70 deletions(-) diff --git a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java index 38cebabac..0e1cc166a 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java @@ -197,6 +197,14 @@ public void saveCredentialsOrFinish(AppCompatBase activity, FirebaseUser firebaseUser, @Nullable String password, @Nullable String provider) { + mFlowParameters = parameters; + mName = firebaseUser.getDisplayName(); + mEmail = firebaseUser.getEmail(); + mPassword = password; + mProvider = provider; + mProfilePictureUri = firebaseUser.getPhotoUrl() != null ? firebaseUser.getPhotoUrl() + .toString() : null; + // If SmartLock is disabled, finish the Activity if (!parameters.smartLockEnabled) { activity.finish(RESULT_OK, activity.getIntent()); @@ -216,14 +224,6 @@ public void saveCredentialsOrFinish(AppCompatBase activity, } mActivity = activity; - mFlowParameters = parameters; - mName = firebaseUser.getDisplayName(); - mEmail = firebaseUser.getEmail(); - mPassword = password; - mProvider = provider; - mProfilePictureUri = firebaseUser.getPhotoUrl() != null ? firebaseUser.getPhotoUrl() - .toString() : null; - mCredentialsApiClient = new GoogleApiClient.Builder(activity) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) @@ -233,7 +233,7 @@ public void saveCredentialsOrFinish(AppCompatBase activity, } public Intent getIntentForTest() { - return mActivity.getIntent() + return new Intent() .putExtra(ExtraConstants.EXTRA_FLOW_PARAMS, mFlowParameters) .putExtra(ExtraConstants.EXTRA_NAME, mName) .putExtra(ExtraConstants.EXTRA_EMAIL, mEmail) 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 85bf29739..7a3b9dcf9 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 @@ -29,7 +29,9 @@ import com.firebase.ui.auth.test_helpers.FirebaseAuthWrapperImplShadow; 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.firebase.ui.auth.util.PlayServicesHelper; +import com.firebase.ui.auth.util.SmartLock; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.UserProfileChangeRequest; @@ -39,13 +41,12 @@ import org.mockito.Mockito; 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 static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.when; @@ -88,8 +89,8 @@ public void testSignUpButton_validatesFields() { assertEquals( passwordLayout.getError().toString(), String.format(registerEmailActivity.getString(R.string.password_length), - registerEmailActivity.getResources().getInteger( - R.integer.min_password_length))); + registerEmailActivity.getResources().getInteger( + R.integer.min_password_length))); } @Test @@ -110,36 +111,29 @@ public void testSignupButton_successfulRegisterationShouldContinueToSaveCredenti .thenReturn(new AutoCompleteTask(null, true, null)); when(ActivityHelperShadow.firebaseAuth - .createUserWithEmailAndPassword( - TestConstants.EMAIL, - TestConstants.PASSWORD)) - .thenReturn( - new AutoCompleteTask<>( - new FakeAuthResult(mockFirebaseUser), - true, - null)); + .createUserWithEmailAndPassword( + TestConstants.EMAIL, + TestConstants.PASSWORD)) + .thenReturn(new AutoCompleteTask<>( + new FakeAuthResult(mockFirebaseUser), + true, + null)); Button button = (Button) registerEmailActivity.findViewById(R.id.button_create); button.performClick(); - ShadowActivity shadowActivity = Shadows.shadowOf(registerEmailActivity); - - ShadowActivity.IntentForResult nextIntent = - shadowActivity.getNextStartedActivityForResult(); - -// assertNotNull(nextIntent); -// assertEquals( -// nextIntent.intent.getComponent().getClassName(), -// SmartLock.class.getName()); -// assertEquals( -// TestConstants.EMAIL, -// nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_EMAIL)); -// assertEquals( -// TestConstants.PASSWORD, -// nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PASSWORD)); -// assertEquals( -// TestConstants.NAME, -// nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_NAME)); + Intent smartLockIntent = SmartLock.getInstance(registerEmailActivity).getIntentForTest(); + + assertNotNull(smartLockIntent); + assertEquals( + TestConstants.EMAIL, + smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_EMAIL)); + assertEquals( + TestConstants.PASSWORD, + smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_PASSWORD)); + assertEquals( + TestConstants.NAME, + smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_NAME)); } } diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java index 613ee6722..b32e810fb 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java @@ -28,7 +28,9 @@ import com.firebase.ui.auth.test_helpers.FirebaseAuthWrapperImplShadow; 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.firebase.ui.auth.util.PlayServicesHelper; +import com.firebase.ui.auth.util.SmartLock; import com.google.firebase.auth.FirebaseUser; import org.junit.Before; @@ -118,22 +120,19 @@ public void testSignInButton_signsInAndSavesCredentials() { TestConstants.EMAIL, TestConstants.PASSWORD); -// Intent intent = Shadows.shadowOf(signInActivity).getResultIntent(); -// assertEquals( -// SignInActivity.class.getName(), -// intent.getComponent().getClassName() -// ); -// assertEquals( -// TestConstants.EMAIL, -// intent.getExtras().getString(ExtraConstants.EXTRA_EMAIL) -// ); -// assertEquals( -// TestConstants.PASSWORD, -// intent.getExtras().getString(ExtraConstants.EXTRA_PASSWORD) -// ); -// assertEquals( -// TestConstants.NAME, -// intent.getExtras().getString(ExtraConstants.EXTRA_NAME) -// ); + Intent intent = SmartLock.getInstance(signInActivity).getIntentForTest(); + + assertEquals( + TestConstants.EMAIL, + intent.getExtras().getString(ExtraConstants.EXTRA_EMAIL) + ); + assertEquals( + TestConstants.PASSWORD, + intent.getExtras().getString(ExtraConstants.EXTRA_PASSWORD) + ); + assertEquals( + TestConstants.NAME, + intent.getExtras().getString(ExtraConstants.EXTRA_NAME) + ); } } 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 bc3cbddb7..41821ddda 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 @@ -178,9 +178,6 @@ public void testGoogleLoginFlow() { private static void verifySaveCredentialIntent( Intent smartLockIntent, String provider) { - assertEquals( - SmartLock.class.getName(), - smartLockIntent.getComponent().getClassName()); assertEquals( smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_EMAIL), TestConstants.EMAIL); diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java index a7aa145a0..36637e392 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java @@ -72,7 +72,8 @@ public class CredentialSignInHandlerTest { private static final String LINKING_ERROR = "ERROR_TEST_LINKING"; private static final String LINKING_EXPLANATION = "Test explanation"; - @Mock private CredentialsAPI mCredentialsAPI; + @Mock + private CredentialsAPI mCredentialsAPI; private FirebaseApp mFirebaseApp; @Before @@ -106,7 +107,9 @@ public void testSignInSucceeded() { // Build basic flow parameters FlowParameters flowParams = AuthUI.getInstance(mFirebaseApp) - .createSignInIntentBuilder().build() + .createSignInIntentBuilder() + .setIsSmartLockEnabled(false) + .build() .getParcelableExtra(ExtraConstants.EXTRA_FLOW_PARAMS); Task signInTask = Tasks.forResult(new FakeAuthResult(mockFirebaseUser)); @@ -115,9 +118,6 @@ public void testSignInSucceeded() { credentialSignInHandler.onComplete(signInTask); Intent smartLockIntent = smartLock.getIntentForTest(); - assertEquals( - SmartLock.class.getName(), - smartLockIntent.getComponent().getClassName()); assertEquals( TestConstants.EMAIL, smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_EMAIL)); @@ -138,11 +138,12 @@ public void testSignInFailed_withFacebookAlreadyLinked() { GoogleAuthProvider.PROVIDER_ID, TestConstants.EMAIL, new Bundle()); - CredentialSignInHandler credentialSignInHandler = null;/*new CredentialSignInHandler( + CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler( mockActivity, mockActivityHelper, + new SmartLock(), RC_ACCOUNT_LINK, - idpResponse);*/ + idpResponse); Context mockContext = mock(Context.class); FlowParameters mockFlowParams = mock(FlowParameters.class); @@ -186,11 +187,12 @@ public void testSignInFailed_withPasswordAccountAlreadyLinked() { GoogleAuthProvider.PROVIDER_ID, TestConstants.EMAIL, new Bundle()); - CredentialSignInHandler credentialSignInHandler = null;/*new CredentialSignInHandler( + CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler( mockActivity, mockActivityHelper, + new SmartLock(), RC_ACCOUNT_LINK, - idpResponse);*/ + idpResponse); Context mockContext = mock(Context.class); Task mockTask = mock(Task.class); @@ -221,7 +223,9 @@ public void testSignInFailed_withPasswordAccountAlreadyLinked() { capturedIntent.getComponent().getClassName()); assertEquals( TestConstants.EMAIL, - ((IDPResponse) capturedIntent.getExtras().getParcelable(ExtraConstants - .EXTRA_IDP_RESPONSE)).getEmail()); + ((IDPResponse) capturedIntent + .getExtras() + .getParcelable(ExtraConstants.EXTRA_IDP_RESPONSE)) + .getEmail()); } } From 550acc93a57544496b44349a321f5d5538ce1788 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Fri, 14 Oct 2016 14:59:48 -0700 Subject: [PATCH 11/27] Cleanup --- .../ui/auth/ui/email/RegisterEmailActivityTest.java | 11 ++++------- .../firebase/ui/auth/ui/email/SignInActivityTest.java | 1 - .../ui/auth/ui/idp/AuthMethodPickerActivityTest.java | 9 +++------ 3 files changed, 7 insertions(+), 14 deletions(-) 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 7a3b9dcf9..e82cdd8db 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 @@ -89,8 +89,7 @@ public void testSignUpButton_validatesFields() { assertEquals( passwordLayout.getError().toString(), String.format(registerEmailActivity.getString(R.string.password_length), - registerEmailActivity.getResources().getInteger( - R.integer.min_password_length))); + registerEmailActivity.getResources().getInteger(R.integer.min_password_length))); } @Test @@ -114,17 +113,15 @@ public void testSignupButton_successfulRegisterationShouldContinueToSaveCredenti .createUserWithEmailAndPassword( TestConstants.EMAIL, TestConstants.PASSWORD)) - .thenReturn(new AutoCompleteTask<>( - new FakeAuthResult(mockFirebaseUser), - true, - null)); + .thenReturn(new AutoCompleteTask<>(new FakeAuthResult(mockFirebaseUser), + true, + null)); Button button = (Button) registerEmailActivity.findViewById(R.id.button_create); button.performClick(); Intent smartLockIntent = SmartLock.getInstance(registerEmailActivity).getIntentForTest(); - assertNotNull(smartLockIntent); assertEquals( TestConstants.EMAIL, diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java index b32e810fb..cb67becdd 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java @@ -121,7 +121,6 @@ public void testSignInButton_signsInAndSavesCredentials() { TestConstants.PASSWORD); Intent intent = SmartLock.getInstance(signInActivity).getIntentForTest(); - assertEquals( TestConstants.EMAIL, 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 41821ddda..985523dfc 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 @@ -146,9 +146,8 @@ public void testFacebookLoginFlow() { assertNotNull(facebookButton); facebookButton.performClick(); - ShadowActivity.IntentForResult nextIntent = - Shadows.shadowOf(authMethodPickerActivity).getNextStartedActivityForResult(); -// verifySaveCredentialIntent(nextIntent, FacebookAuthProvider.PROVIDER_ID); + Intent smartLockIntent = SmartLock.getInstance(authMethodPickerActivity).getIntentForTest(); + verifySaveCredentialIntent(smartLockIntent, FacebookAuthProvider.PROVIDER_ID); } @Test @@ -175,9 +174,7 @@ public void testGoogleLoginFlow() { verifySaveCredentialIntent(smartLockIntent, GoogleAuthProvider.PROVIDER_ID); } - private static void verifySaveCredentialIntent( - Intent smartLockIntent, - String provider) { + private static void verifySaveCredentialIntent(Intent smartLockIntent, String provider) { assertEquals( smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_EMAIL), TestConstants.EMAIL); From b9d3ca5f989cebce38800e95ea38589a48148a41 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Sat, 15 Oct 2016 00:39:38 -0700 Subject: [PATCH 12/27] Cleanup --- .../com/firebase/ui/auth/util/SmartLock.java | 45 ++++++++----------- .../ui/idp/AuthMethodPickerActivityTest.java | 9 ++-- 2 files changed, 25 insertions(+), 29 deletions(-) diff --git a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java index 0e1cc166a..a5b16ed3a 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java @@ -28,7 +28,6 @@ import com.firebase.ui.auth.BuildConfig; import com.firebase.ui.auth.ui.AppCompatBase; -import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; import com.google.android.gms.auth.api.Auth; import com.google.android.gms.auth.api.credentials.Credential; @@ -51,7 +50,6 @@ public class SmartLock extends Fragment implements GoogleApiClient.ConnectionCal private static final int RC_UPDATE_SERVICE = 28; private AppCompatBase mActivity; - private FlowParameters mFlowParameters; private String mName; private String mEmail; private String mPassword; @@ -63,7 +61,7 @@ public class SmartLock extends Fragment implements GoogleApiClient.ConnectionCal public void onConnected(@Nullable Bundle bundle) { if (mEmail == null) { Log.e(TAG, "Unable to save null credential!"); - mActivity.finish(RESULT_OK, mActivity.getIntent()); + finish(); return; } @@ -105,7 +103,6 @@ public void onConnectionSuspended(int i) { } } - @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { if (BuildConfig.DEBUG) { @@ -128,7 +125,7 @@ public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { null); } catch (IntentSender.SendIntentException e) { e.printStackTrace(); - mActivity.finish(RESULT_OK, mActivity.getIntent()); + finish(); } } @@ -136,7 +133,7 @@ public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { @Override public void onResult(@NonNull Status status) { if (status.isSuccess()) { - mActivity.finish(RESULT_OK, mActivity.getIntent()); + finish(); } else { if (status.hasResolution()) { // Try to resolve the save request. This will prompt the user if @@ -146,10 +143,10 @@ public void onResult(@NonNull Status status) { } catch (IntentSender.SendIntentException e) { // Could not resolve the request Log.e(TAG, "STATUS: Failed to send resolution.", e); - mActivity.finish(RESULT_OK, mActivity.getIntent()); + finish(); } } else { - mActivity.finish(RESULT_OK, mActivity.getIntent()); + finish(); } } } @@ -163,10 +160,10 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { if (BuildConfig.DEBUG) { Log.d(TAG, "SAVE: OK"); } - mActivity.finish(RESULT_OK, new Intent()); + finish(); } else { Log.e(TAG, "SAVE: Canceled by user"); - mActivity.finish(RESULT_OK, new Intent()); + finish(); } } else if (requestCode == RC_UPDATE_SERVICE) { if (resultCode == RESULT_OK) { @@ -177,11 +174,18 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { .setResultCallback(this); } else { Log.e(TAG, "SAVE: Canceled by user"); - mActivity.finish(RESULT_OK, new Intent()); + finish(); } } } + private void finish() { + // For tests + mActivity.setResult(RESULT_OK); + + mActivity.finish(RESULT_OK, mActivity.getIntent()); + } + /** * If SmartLock is enabled and Google Play Services is available, save the credentials. * Otherwise, finish the calling Activity with RESULT_OK. @@ -197,7 +201,7 @@ public void saveCredentialsOrFinish(AppCompatBase activity, FirebaseUser firebaseUser, @Nullable String password, @Nullable String provider) { - mFlowParameters = parameters; + mActivity = activity; mName = firebaseUser.getDisplayName(); mEmail = firebaseUser.getEmail(); mPassword = password; @@ -207,23 +211,22 @@ public void saveCredentialsOrFinish(AppCompatBase activity, // If SmartLock is disabled, finish the Activity if (!parameters.smartLockEnabled) { - activity.finish(RESULT_OK, activity.getIntent()); + finish(); return; } // If Play Services is not available, finish the Activity if (!PlayServicesHelper.getInstance(activity).isPlayServicesAvailable()) { - activity.finish(RESULT_OK, activity.getIntent()); + finish(); return; } if (!FirebaseAuthWrapperFactory.getFirebaseAuthWrapper(parameters.appName) .isPlayServicesAvailable(activity)) { - activity.finish(RESULT_OK, activity.getIntent()); + finish(); return; } - mActivity = activity; mCredentialsApiClient = new GoogleApiClient.Builder(activity) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) @@ -232,16 +235,6 @@ public void saveCredentialsOrFinish(AppCompatBase activity, .build(); } - public Intent getIntentForTest() { - return new Intent() - .putExtra(ExtraConstants.EXTRA_FLOW_PARAMS, mFlowParameters) - .putExtra(ExtraConstants.EXTRA_NAME, mName) - .putExtra(ExtraConstants.EXTRA_EMAIL, mEmail) - .putExtra(ExtraConstants.EXTRA_PASSWORD, mPassword) - .putExtra(ExtraConstants.EXTRA_PROVIDER, mProvider) - .putExtra(ExtraConstants.EXTRA_PROFILE_PICTURE_URI, mProfilePictureUri); - } - public static SmartLock getInstance(AppCompatBase activity) { SmartLock result; 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 985523dfc..70362e475 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 @@ -14,6 +14,7 @@ package com.firebase.ui.auth.ui.idp; +import android.app.Activity; import android.content.Intent; import android.view.View; import android.widget.Button; @@ -33,9 +34,9 @@ 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.firebase.ui.auth.util.SmartLock; import com.firebase.ui.auth.ui.email.EmailHintContainerActivity; import com.firebase.ui.auth.util.PlayServicesHelper; +import com.firebase.ui.auth.util.SmartLock; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FacebookAuthProvider; @@ -156,6 +157,7 @@ public void testGoogleLoginFlow() { List providers = Arrays.asList(AuthUI.GOOGLE_PROVIDER); AuthMethodPickerActivity authMethodPickerActivity = createActivity(providers); + TestHelper.initializeApp(authMethodPickerActivity); FirebaseUser mockFirebaseUser = TestHelper.makeMockFirebaseUser(); when(mockFirebaseUser.getProviders()) @@ -169,9 +171,10 @@ public void testGoogleLoginFlow() { assertNotNull(googleButton); googleButton.performClick(); - Intent smartLockIntent = SmartLock.getInstance(authMethodPickerActivity).getIntentForTest(); - verifySaveCredentialIntent(smartLockIntent, GoogleAuthProvider.PROVIDER_ID); + assertEquals( + Shadows.shadowOf(authMethodPickerActivity).getResultCode(), + Activity.RESULT_OK); } private static void verifySaveCredentialIntent(Intent smartLockIntent, String provider) { From a8b5cf5ee7256689e8521f3cf9d639e3e0d506ce Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Sat, 15 Oct 2016 00:43:29 -0700 Subject: [PATCH 13/27] Cleanup --- .../main/java/com/firebase/ui/auth/util/SmartLock.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java index a5b16ed3a..4135a93b1 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java @@ -27,6 +27,7 @@ import android.util.Log; import com.firebase.ui.auth.BuildConfig; +import com.firebase.ui.auth.ui.ActivityHelper; import com.firebase.ui.auth.ui.AppCompatBase; import com.firebase.ui.auth.ui.FlowParameters; import com.google.android.gms.auth.api.Auth; @@ -50,6 +51,7 @@ public class SmartLock extends Fragment implements GoogleApiClient.ConnectionCal private static final int RC_UPDATE_SERVICE = 28; private AppCompatBase mActivity; + private ActivityHelper mActivityHelper; private String mName; private String mEmail; private String mPassword; @@ -91,7 +93,7 @@ public void onConnected(@Nullable Bundle bundle) { builder.setProfilePictureUri(Uri.parse(mProfilePictureUri)); } - Auth.CredentialsApi + mActivityHelper.getCredentialsApi() .save(mCredentialsApiClient, builder.build()) .setResultCallback(this); } @@ -169,7 +171,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { Credential credential = new Credential.Builder(mEmail).setPassword(mPassword) .build(); - Auth.CredentialsApi + mActivityHelper.getCredentialsApi() .save(mCredentialsApiClient, credential) .setResultCallback(this); } else { @@ -197,11 +199,13 @@ private void finish() { * @param provider (optional) provider string for provider credential. */ public void saveCredentialsOrFinish(AppCompatBase activity, + ActivityHelper helper, FlowParameters parameters, FirebaseUser firebaseUser, @Nullable String password, @Nullable String provider) { mActivity = activity; + mActivityHelper = helper; mName = firebaseUser.getDisplayName(); mEmail = firebaseUser.getEmail(); mPassword = password; From 9a4921ea336d5734fe391b035111733fb13f7763 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Sat, 15 Oct 2016 22:23:37 -0700 Subject: [PATCH 14/27] Bug fix --- .../main/java/com/firebase/ui/auth/util/SmartLock.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java index 4135a93b1..f70a34b46 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java @@ -141,7 +141,13 @@ public void onResult(@NonNull Status status) { // Try to resolve the save request. This will prompt the user if // the credential is new. try { - status.startResolutionForResult(mActivity, RC_SAVE); + startIntentSenderForResult(status.getResolution().getIntentSender(), + RC_SAVE, + null, + 0, + 0, + 0, + null); } catch (IntentSender.SendIntentException e) { // Could not resolve the request Log.e(TAG, "STATUS: Failed to send resolution.", e); From db96c91f12a84627b7f6da9d1c614ecf3999d618 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Mon, 17 Oct 2016 19:09:07 -0700 Subject: [PATCH 15/27] Cleanup --- .../com/firebase/ui/auth/util/SmartLock.java | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java index f70a34b46..2f8762962 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java @@ -63,7 +63,7 @@ public class SmartLock extends Fragment implements GoogleApiClient.ConnectionCal public void onConnected(@Nullable Bundle bundle) { if (mEmail == null) { Log.e(TAG, "Unable to save null credential!"); - finish(); + finish(RESULT_OK); return; } @@ -127,7 +127,7 @@ public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { null); } catch (IntentSender.SendIntentException e) { e.printStackTrace(); - finish(); + finish(RESULT_OK); } } @@ -135,7 +135,7 @@ public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { @Override public void onResult(@NonNull Status status) { if (status.isSuccess()) { - finish(); + finish(RESULT_OK); } else { if (status.hasResolution()) { // Try to resolve the save request. This will prompt the user if @@ -151,10 +151,10 @@ public void onResult(@NonNull Status status) { } catch (IntentSender.SendIntentException e) { // Could not resolve the request Log.e(TAG, "STATUS: Failed to send resolution.", e); - finish(); + finish(RESULT_OK); } } else { - finish(); + finish(RESULT_OK); } } } @@ -168,10 +168,10 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { if (BuildConfig.DEBUG) { Log.d(TAG, "SAVE: OK"); } - finish(); + finish(RESULT_OK); } else { Log.e(TAG, "SAVE: Canceled by user"); - finish(); + finish(RESULT_OK); } } else if (requestCode == RC_UPDATE_SERVICE) { if (resultCode == RESULT_OK) { @@ -182,16 +182,13 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { .setResultCallback(this); } else { Log.e(TAG, "SAVE: Canceled by user"); - finish(); + finish(RESULT_OK); } } } - private void finish() { - // For tests - mActivity.setResult(RESULT_OK); - - mActivity.finish(RESULT_OK, mActivity.getIntent()); + private void finish(int resultCode) { + mActivity.finish(resultCode, mActivity.getIntent()); } /** @@ -221,19 +218,19 @@ public void saveCredentialsOrFinish(AppCompatBase activity, // If SmartLock is disabled, finish the Activity if (!parameters.smartLockEnabled) { - finish(); + finish(RESULT_OK); return; } // If Play Services is not available, finish the Activity if (!PlayServicesHelper.getInstance(activity).isPlayServicesAvailable()) { - finish(); + finish(RESULT_OK); return; } if (!FirebaseAuthWrapperFactory.getFirebaseAuthWrapper(parameters.appName) .isPlayServicesAvailable(activity)) { - finish(); + finish(RESULT_OK); return; } From 19bde415793ffeb5867478b78a17451a71c25c44 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Mon, 17 Oct 2016 19:57:01 -0700 Subject: [PATCH 16/27] Add interface to SmartLock --- .../WelcomeBackPasswordPrompt.java | 10 ++++-- .../auth/ui/email/RegisterEmailActivity.java | 10 ++++-- .../ui/auth/ui/email/SignInActivity.java | 10 ++++-- .../auth/ui/idp/CredentialSignInHandler.java | 21 +++++++---- .../com/firebase/ui/auth/util/SmartLock.java | 36 +++++++++++-------- .../ui/email/RegisterEmailActivityTest.java | 25 ++++++------- .../ui/auth/ui/email/SignInActivityTest.java | 16 --------- .../ui/idp/AuthMethodPickerActivityTest.java | 5 ++- .../ui/idp/CredentialSignInHandlerTest.java | 20 +++++------ 9 files changed, 82 insertions(+), 71 deletions(-) diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java index b8342a37f..25500353d 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java @@ -48,7 +48,7 @@ * Activity to link a pre-existing email/password account to a new IDP sign-in by confirming * the password before initiating a link. */ -public class WelcomeBackPasswordPrompt extends AppCompatBase implements View.OnClickListener { +public class WelcomeBackPasswordPrompt extends AppCompatBase implements View.OnClickListener, SmartLock.SmartLockResultListener { private static final String TAG = "WelcomeBackPassword"; private static final StyleSpan BOLD = new StyleSpan(Typeface.BOLD); @@ -134,7 +134,8 @@ public void onSuccess(AuthResult authResult) { public void onSuccess(AuthResult authResult) { mSmartLock.saveCredentialsOrFinish( WelcomeBackPasswordPrompt.this, - mActivityHelper.getFlowParams(), + mActivityHelper, + WelcomeBackPasswordPrompt.this, authResult.getUser(), password, null /* provider */); @@ -151,6 +152,11 @@ public void onFailure(@NonNull Exception e) { }); } + @Override + public void onCredentialsSaved(int resultCode) { + finish(RESULT_OK, getIntent()); + } + public static Intent createIntent( Context context, FlowParameters 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 799cd8589..951a2a3d4 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 @@ -55,7 +55,7 @@ /** * 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, SmartLock.SmartLockResultListener { private static final String TAG = "RegisterEmailActivity"; private SmartLock mSmartLock; @@ -161,7 +161,8 @@ public void onComplete(@NonNull Task task) { // the credential to SmartLock (if enabled). mSmartLock.saveCredentialsOrFinish( RegisterEmailActivity.this, - mActivityHelper.getFlowParams(), + mActivityHelper, + RegisterEmailActivity.this, firebaseUser, password, null /* provider */); @@ -197,6 +198,11 @@ public void onFailure(@NonNull Exception e) { }); } + @Override + public void onCredentialsSaved(int resultCode) { + finish(RESULT_OK, getIntent()); + } + @Override public void onClick(View view) { if (view.getId() == R.id.button_create) { 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 index 108591a91..3fc3a84f5 100644 --- 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 @@ -42,7 +42,7 @@ /** * Activity to sign in with email and password. */ -public class SignInActivity extends AppCompatBase implements View.OnClickListener { +public class SignInActivity extends AppCompatBase implements View.OnClickListener, SmartLock.SmartLockResultListener { private static final String TAG = "SignInActivity"; private SmartLock mSmartLock; @@ -102,7 +102,8 @@ public void onSuccess(AuthResult authResult) { // Save credential in SmartLock (if enabled) mSmartLock.saveCredentialsOrFinish( SignInActivity.this, - mActivityHelper.getFlowParams(), + mActivityHelper, + SignInActivity.this, authResult.getUser(), password, null /* provider */); @@ -122,6 +123,11 @@ public void onFailure(@NonNull Exception e) { }); } + @Override + public void onCredentialsSaved(int resultCode) { + finish(RESULT_OK, getIntent()); + } + @Override public void onClick(View view) { if (view.getId() == R.id.button_done) { 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 8b8aab090..3eff730f3 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 @@ -35,7 +35,9 @@ import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.ProviderQueryResult; -public class CredentialSignInHandler implements OnCompleteListener { +import static android.app.Activity.RESULT_OK; + +public class CredentialSignInHandler implements OnCompleteListener, SmartLock.SmartLockResultListener { private final static String TAG = "CredentialSignInHandler"; private AppCompatBase mActivity; @@ -61,12 +63,12 @@ public CredentialSignInHandler( public void onComplete(@NonNull Task task) { if (task.isSuccessful()) { FirebaseUser firebaseUser = task.getResult().getUser(); - mSmartLock.saveCredentialsOrFinish( - mActivity, - mActivityHelper.getFlowParams(), - firebaseUser, - null /* password */, - mResponse.getProviderType()); + mSmartLock.saveCredentialsOrFinish(mActivity, + mActivityHelper, + this, + firebaseUser, + null /* password */, + mResponse.getProviderType()); } else { if (task.getException() instanceof FirebaseAuthUserCollisionException) { final String email = mResponse.getEmail(); @@ -91,6 +93,11 @@ public void onFailure(@NonNull Exception e) { } } + @Override + public void onCredentialsSaved(int resultCode) { + mActivity.finish(RESULT_OK, mActivity.getIntent()); + } + private class StartWelcomeBackFlow implements OnSuccessListener { private String mEmail; diff --git a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java index 2f8762962..0f8561093 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java @@ -29,7 +29,6 @@ import com.firebase.ui.auth.BuildConfig; import com.firebase.ui.auth.ui.ActivityHelper; import com.firebase.ui.auth.ui.AppCompatBase; -import com.firebase.ui.auth.ui.FlowParameters; import com.google.android.gms.auth.api.Auth; import com.google.android.gms.auth.api.credentials.Credential; import com.google.android.gms.auth.api.credentials.IdentityProviders; @@ -42,16 +41,23 @@ import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.GoogleAuthProvider; +import static android.app.Activity.RESULT_CANCELED; +import static android.app.Activity.RESULT_FIRST_USER; import static android.app.Activity.RESULT_OK; public class SmartLock extends Fragment implements GoogleApiClient.ConnectionCallbacks, ResultCallback, GoogleApiClient.OnConnectionFailedListener { + public interface SmartLockResultListener { + void onCredentialsSaved(int resultCode); + } + private static final String TAG = "CredentialsSaveBase"; private static final int RC_SAVE = 100; private static final int RC_UPDATE_SERVICE = 28; private AppCompatBase mActivity; private ActivityHelper mActivityHelper; + private SmartLockResultListener mListener; private String mName; private String mEmail; private String mPassword; @@ -63,7 +69,7 @@ public class SmartLock extends Fragment implements GoogleApiClient.ConnectionCal public void onConnected(@Nullable Bundle bundle) { if (mEmail == null) { Log.e(TAG, "Unable to save null credential!"); - finish(RESULT_OK); + finish(RESULT_CANCELED); return; } @@ -127,7 +133,7 @@ public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { null); } catch (IntentSender.SendIntentException e) { e.printStackTrace(); - finish(RESULT_OK); + finish(RESULT_CANCELED); } } @@ -151,10 +157,10 @@ public void onResult(@NonNull Status status) { } catch (IntentSender.SendIntentException e) { // Could not resolve the request Log.e(TAG, "STATUS: Failed to send resolution.", e); - finish(RESULT_OK); + finish(RESULT_CANCELED); } } else { - finish(RESULT_OK); + finish(RESULT_CANCELED); } } } @@ -171,7 +177,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { finish(RESULT_OK); } else { Log.e(TAG, "SAVE: Canceled by user"); - finish(RESULT_OK); + finish(RESULT_FIRST_USER); } } else if (requestCode == RC_UPDATE_SERVICE) { if (resultCode == RESULT_OK) { @@ -182,13 +188,13 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { .setResultCallback(this); } else { Log.e(TAG, "SAVE: Canceled by user"); - finish(RESULT_OK); + finish(RESULT_FIRST_USER); } } } private void finish(int resultCode) { - mActivity.finish(resultCode, mActivity.getIntent()); + mListener.onCredentialsSaved(resultCode); } /** @@ -196,19 +202,19 @@ private void finish(int resultCode) { * Otherwise, finish the calling Activity with RESULT_OK. * * @param activity the calling Activity. - * @param parameters calling Activity flow parameters. * @param firebaseUser Firebase user to save in Credential. * @param password (optional) password for email credential. * @param provider (optional) provider string for provider credential. */ public void saveCredentialsOrFinish(AppCompatBase activity, ActivityHelper helper, - FlowParameters parameters, + SmartLockResultListener listener, FirebaseUser firebaseUser, @Nullable String password, @Nullable String provider) { mActivity = activity; mActivityHelper = helper; + mListener = listener; mName = firebaseUser.getDisplayName(); mEmail = firebaseUser.getEmail(); mPassword = password; @@ -217,20 +223,20 @@ public void saveCredentialsOrFinish(AppCompatBase activity, .toString() : null; // If SmartLock is disabled, finish the Activity - if (!parameters.smartLockEnabled) { - finish(RESULT_OK); + if (!helper.getFlowParams().smartLockEnabled) { + finish(RESULT_CANCELED); return; } // If Play Services is not available, finish the Activity if (!PlayServicesHelper.getInstance(activity).isPlayServicesAvailable()) { - finish(RESULT_OK); + finish(RESULT_CANCELED); return; } - if (!FirebaseAuthWrapperFactory.getFirebaseAuthWrapper(parameters.appName) + if (!FirebaseAuthWrapperFactory.getFirebaseAuthWrapper(helper.getFlowParams().appName) .isPlayServicesAvailable(activity)) { - finish(RESULT_OK); + finish(RESULT_CANCELED); return; } 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 e82cdd8db..28092584d 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 @@ -29,9 +29,7 @@ import com.firebase.ui.auth.test_helpers.FirebaseAuthWrapperImplShadow; 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.firebase.ui.auth.util.PlayServicesHelper; -import com.firebase.ui.auth.util.SmartLock; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.UserProfileChangeRequest; @@ -46,7 +44,6 @@ import java.util.Arrays; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.when; @@ -121,16 +118,16 @@ public void testSignupButton_successfulRegisterationShouldContinueToSaveCredenti Button button = (Button) registerEmailActivity.findViewById(R.id.button_create); button.performClick(); - Intent smartLockIntent = SmartLock.getInstance(registerEmailActivity).getIntentForTest(); - assertNotNull(smartLockIntent); - assertEquals( - TestConstants.EMAIL, - smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_EMAIL)); - assertEquals( - TestConstants.PASSWORD, - smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_PASSWORD)); - assertEquals( - TestConstants.NAME, - smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_NAME)); +// Intent smartLockIntent = SmartLock.getInstance(registerEmailActivity).getIntentForTest(); +// assertNotNull(smartLockIntent); +// assertEquals( +// TestConstants.EMAIL, +// smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_EMAIL)); +// assertEquals( +// TestConstants.PASSWORD, +// smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_PASSWORD)); +// assertEquals( +// TestConstants.NAME, +// smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_NAME)); } } diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java index cb67becdd..ab3cb1a79 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java @@ -28,9 +28,7 @@ import com.firebase.ui.auth.test_helpers.FirebaseAuthWrapperImplShadow; 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.firebase.ui.auth.util.PlayServicesHelper; -import com.firebase.ui.auth.util.SmartLock; import com.google.firebase.auth.FirebaseUser; import org.junit.Before; @@ -119,19 +117,5 @@ public void testSignInButton_signsInAndSavesCredentials() { verify(ActivityHelperShadow.firebaseAuth).signInWithEmailAndPassword( TestConstants.EMAIL, TestConstants.PASSWORD); - - Intent intent = SmartLock.getInstance(signInActivity).getIntentForTest(); - assertEquals( - TestConstants.EMAIL, - intent.getExtras().getString(ExtraConstants.EXTRA_EMAIL) - ); - assertEquals( - TestConstants.PASSWORD, - intent.getExtras().getString(ExtraConstants.EXTRA_PASSWORD) - ); - assertEquals( - TestConstants.NAME, - intent.getExtras().getString(ExtraConstants.EXTRA_NAME) - ); } } 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 70362e475..36a354281 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 @@ -36,7 +36,6 @@ import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.email.EmailHintContainerActivity; import com.firebase.ui.auth.util.PlayServicesHelper; -import com.firebase.ui.auth.util.SmartLock; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FacebookAuthProvider; @@ -147,8 +146,8 @@ public void testFacebookLoginFlow() { assertNotNull(facebookButton); facebookButton.performClick(); - Intent smartLockIntent = SmartLock.getInstance(authMethodPickerActivity).getIntentForTest(); - verifySaveCredentialIntent(smartLockIntent, FacebookAuthProvider.PROVIDER_ID); +// Intent smartLockIntent = SmartLock.getInstance(authMethodPickerActivity).getIntentForTest(); +// verifySaveCredentialIntent(smartLockIntent, FacebookAuthProvider.PROVIDER_ID); } @Test diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java index 36637e392..30e7e742a 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java @@ -117,16 +117,16 @@ public void testSignInSucceeded() { when(mockActivityHelper.getFlowParams()).thenReturn(flowParams); credentialSignInHandler.onComplete(signInTask); - Intent smartLockIntent = smartLock.getIntentForTest(); - assertEquals( - TestConstants.EMAIL, - smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_EMAIL)); - assertEquals( - TestConstants.NAME, - smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_NAME)); - assertEquals( - TestConstants.PHOTO_URL, - smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_PROFILE_PICTURE_URI)); +// Intent smartLockIntent = smartLock.getIntentForTest(); +// assertEquals( +// TestConstants.EMAIL, +// smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_EMAIL)); +// assertEquals( +// TestConstants.NAME, +// smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_NAME)); +// assertEquals( +// TestConstants.PHOTO_URL, +// smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_PROFILE_PICTURE_URI)); } @Test From 9511a6df246eedeb14f7b57ce6cc72dea8519359 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Mon, 17 Oct 2016 20:04:01 -0700 Subject: [PATCH 17/27] Merge dev --- .../com/firebase/ui/auth/util/SmartLock.java | 4 +- .../firebase/ui/auth/util/SmartlockUtil.java | 47 ------------------- 2 files changed, 2 insertions(+), 49 deletions(-) diff --git a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java index 620254e6e..0abcf928e 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java @@ -70,7 +70,7 @@ public interface SmartLockResultListener { public void onConnected(@Nullable Bundle bundle) { if (mEmail == null) { Log.e(TAG, "Unable to save null credential!"); - finish(RESULT_CANCELED); + finish(RESULT_FIRST_USER); return; } @@ -93,7 +93,7 @@ public void onConnected(@Nullable Bundle bundle) { builder.setAccountType(translatedProvider); } else { Log.e(TAG, "Unable to save null credential!"); - finish(RESULT_FIRST_USER, getIntent()); + mListener.onCredentialsSaved(RESULT_FIRST_USER); return; } } diff --git a/auth/src/main/java/com/firebase/ui/auth/util/SmartlockUtil.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartlockUtil.java index c67a9d815..e75116ca9 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/SmartlockUtil.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/SmartlockUtil.java @@ -1,14 +1,9 @@ package com.firebase.ui.auth.util; -import android.app.Activity; -import android.content.Intent; import android.support.annotation.NonNull; -import android.support.annotation.Nullable; import android.text.TextUtils; import android.util.Log; -import com.firebase.ui.auth.ui.FlowParameters; -import com.firebase.ui.auth.ui.account_link.SaveCredentialsActivity; import com.google.android.gms.auth.api.credentials.Credential; import com.google.android.gms.auth.api.credentials.IdentityProviders; import com.google.firebase.auth.EmailAuthProvider; @@ -26,44 +21,8 @@ * Helper class to deal with Smartlock Flows. */ public class SmartlockUtil { - private static final String TAG = "SmartLockUtil"; - /** - * If SmartLock is enabled and Google Play Services is available, start the save credential - * Activity. Otherwise, finish the calling Activity with RESULT_OK. - * @param activity the calling Activity. - * @param requestCode request code to use when starting the save operation. - * @param parameters calling Activity flow parameters. - * @param firebaseUser Firebase user to save in Credential. - * @param password (optional) password for email credential. - * @param provider (optional) provider string for provider credential. - */ - public static void saveCredentialOrFinish(Activity activity, - int requestCode, - FlowParameters parameters, - FirebaseUser firebaseUser, - @Nullable String password, - @Nullable String provider) { - - // If SmartLock is disabled, finish the Activity - if (!parameters.smartLockEnabled) { - finishActivity(activity); - return; - } - - // If Play Services is not available, finish the Activity - if(!PlayServicesHelper.getInstance(activity).isPlayServicesAvailable()) { - finishActivity(activity); - return; - } - - // Launch save activity - Intent saveCredentialIntent = SaveCredentialsActivity.createIntent(activity, parameters, - firebaseUser, password, provider); - activity.startActivityForResult(saveCredentialIntent, requestCode); - } - /** * Translate a Firebase Auth provider ID (such as {@link GoogleAuthProvider#PROVIDER_ID}) to * a Credentials API account type (such as {@link IdentityProviders#GOOGLE}). @@ -117,10 +76,4 @@ public static List credentialsFromFirebaseUser(@NonNull FirebaseUser return credentials; } - - private static void finishActivity(Activity activity) { - activity.setResult(Activity.RESULT_OK, new Intent()); - activity.finish(); - } - } From cbe0cfb32a676d0d357fc8a808238dd1185a2af0 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Tue, 18 Oct 2016 17:24:17 -0700 Subject: [PATCH 18/27] working on tests --- .../ui/auth/ui/email/SignInActivityTest.java | 45 +++++++++++-- .../ui/idp/AuthMethodPickerActivityTest.java | 39 +++++------ .../ui/idp/CredentialSignInHandlerTest.java | 65 +++++++++++++++---- 3 files changed, 112 insertions(+), 37 deletions(-) diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java index ae0d59b50..afed335a9 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java @@ -14,6 +14,7 @@ package com.firebase.ui.auth.ui.email; +import android.app.Activity; import android.content.Intent; import android.support.design.widget.TextInputLayout; import android.widget.Button; @@ -28,12 +29,18 @@ import com.firebase.ui.auth.test_helpers.FirebaseAuthWrapperImplShadow; import com.firebase.ui.auth.test_helpers.TestConstants; import com.firebase.ui.auth.test_helpers.TestHelper; +import com.firebase.ui.auth.ui.ActivityHelper; import com.firebase.ui.auth.util.PlayServicesHelper; +import com.firebase.ui.auth.util.SmartLock; import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.auth.GoogleAuthProvider; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; import org.robolectric.Shadows; @@ -41,9 +48,12 @@ import org.robolectric.shadows.ShadowActivity; import java.util.Collections; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -64,9 +74,12 @@ private SignInActivity createActivity() { TestHelper.getFlowParameters( Collections.emptyList()), null); - return Robolectric.buildActivity(SignInActivity.class).withIntent(startIntent) - .create().visible().get(); - + return Robolectric + .buildActivity(SignInActivity.class) + .withIntent(startIntent) + .create() + .visible() + .get(); } @Test @@ -106,7 +119,7 @@ public void testSignInButton_signsInAndSavesCredentials() { when(ActivityHelperShadow.firebaseAuth.signInWithEmailAndPassword( TestConstants.EMAIL, TestConstants.PASSWORD)).thenReturn( - new AutoCompleteTask<>(new FakeAuthResult(mockFirebaseUser), true, null)); + new AutoCompleteTask<>(new FakeAuthResult(mockFirebaseUser), true, null)); when(mockFirebaseUser.getDisplayName()).thenReturn(TestConstants.NAME); when(mockFirebaseUser.getEmail()).thenReturn(TestConstants.EMAIL); @@ -116,5 +129,29 @@ public void testSignInButton_signsInAndSavesCredentials() { verify(ActivityHelperShadow.firebaseAuth).signInWithEmailAndPassword( TestConstants.EMAIL, TestConstants.PASSWORD); + + SmartLock smart = new SmartLock(); + SmartLock.SmartLockResultListener resultListener = mock(SmartLock.SmartLockResultListener.class); + + final CountDownLatch latch = new CountDownLatch(1); + Mockito.doAnswer(new Answer() { + @Override + public Void answer(InvocationOnMock invocation) { + latch.countDown(); + return null; + } + }).when(resultListener).onCredentialsSaved(Activity.RESULT_OK); + + try { + smart.saveCredentialsOrFinish(signInActivity, + new ActivityHelper(signInActivity, signInActivity.getIntent()), + resultListener, + mockFirebaseUser, + TestConstants.PASSWORD, + GoogleAuthProvider.PROVIDER_ID); + assertTrue(latch.await(10, TimeUnit.SECONDS)); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } } } 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 adfe63ea2..ea0c45498 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 @@ -30,10 +30,7 @@ import com.firebase.ui.auth.test_helpers.FirebaseAuthWrapperImplShadow; import com.firebase.ui.auth.test_helpers.GoogleProviderShadow; 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.ExtraConstants; -import com.firebase.ui.auth.ui.account_link.SaveCredentialsActivity; import com.firebase.ui.auth.ui.email.EmailHintContainerActivity; import com.firebase.ui.auth.util.PlayServicesHelper; import com.google.firebase.auth.AuthCredential; @@ -209,24 +206,24 @@ public void testTwitterLoginFlowStarts() { private static void verifySaveCredentialIntent( ShadowActivity.IntentForResult nextIntent, String provider) { - assertEquals( - SaveCredentialsActivity.class.getName(), - nextIntent.intent.getComponent().getClassName()); - assertEquals( - nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_EMAIL), - TestConstants.EMAIL); - assertEquals( - nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_NAME), - TestConstants.NAME); - assertEquals( - nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PROFILE_PICTURE_URI), - TestConstants.PHOTO_URL); - assertEquals( - nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PROVIDER), - provider); - assertEquals( - nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PASSWORD), - null); +// assertEquals( +// SaveCredentialsActivity.class.getName(), +// nextIntent.intent.getComponent().getClassName()); +// assertEquals( +// nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_EMAIL), +// TestConstants.EMAIL); +// assertEquals( +// nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_NAME), +// TestConstants.NAME); +// assertEquals( +// nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PROFILE_PICTURE_URI), +// TestConstants.PHOTO_URL); +// assertEquals( +// nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PROVIDER), +// provider); +// assertEquals( +// nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PASSWORD), +// null); } private AuthMethodPickerActivity createActivity(List providers) { diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java index 30e7e742a..8b5ecc695 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java @@ -14,6 +14,7 @@ package com.firebase.ui.auth.ui.idp; +import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; @@ -34,6 +35,7 @@ import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.account_link.WelcomeBackIDPPrompt; import com.firebase.ui.auth.ui.account_link.WelcomeBackPasswordPrompt; +import com.firebase.ui.auth.ui.email.SignInActivity; import com.firebase.ui.auth.util.CredentialsAPI; import com.firebase.ui.auth.util.PlayServicesHelper; import com.firebase.ui.auth.util.SmartLock; @@ -53,13 +55,21 @@ import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.MockitoAnnotations; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import java.util.Arrays; +import java.util.Collections; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import static junit.framework.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -96,7 +106,7 @@ public void testSignInSucceeded() { GoogleAuthProvider.PROVIDER_ID, TestConstants.EMAIL, new Bundle()); - SmartLock smartLock = new SmartLock(); + SmartLock smartLock = mock(SmartLock.class); CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler( mockActivity, mockActivityHelper, @@ -108,7 +118,6 @@ public void testSignInSucceeded() { // Build basic flow parameters FlowParameters flowParams = AuthUI.getInstance(mFirebaseApp) .createSignInIntentBuilder() - .setIsSmartLockEnabled(false) .build() .getParcelableExtra(ExtraConstants.EXTRA_FLOW_PARAMS); @@ -117,16 +126,48 @@ public void testSignInSucceeded() { when(mockActivityHelper.getFlowParams()).thenReturn(flowParams); credentialSignInHandler.onComplete(signInTask); -// Intent smartLockIntent = smartLock.getIntentForTest(); -// assertEquals( -// TestConstants.EMAIL, -// smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_EMAIL)); -// assertEquals( -// TestConstants.NAME, -// smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_NAME)); -// assertEquals( -// TestConstants.PHOTO_URL, -// smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_PROFILE_PICTURE_URI)); + verify(smartLock).saveCredentialsOrFinish(mockActivity, mockActivityHelper, credentialSignInHandler, mockFirebaseUser, null, GoogleAuthProvider.PROVIDER_ID); + + SmartLock smart = new SmartLock(); + SmartLock.SmartLockResultListener resultListener = mock(SmartLock.SmartLockResultListener.class); + + final CountDownLatch latch = new CountDownLatch(1); + Mockito.doAnswer(new Answer() { + @Override + public Void answer(InvocationOnMock invocation) { + latch.countDown(); + return null; + } + }).when(resultListener).onCredentialsSaved(Activity.RESULT_OK); + + + SignInActivity s = createActivity(); + + try { + smart.saveCredentialsOrFinish(s, + new ActivityHelper(mockActivity, mockActivity.getIntent()), + resultListener, + mockFirebaseUser, + TestConstants.PASSWORD, + GoogleAuthProvider.PROVIDER_ID); + assertTrue(latch.await(10, TimeUnit.SECONDS)); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + + private SignInActivity createActivity() { + Intent startIntent = SignInActivity.createIntent( + RuntimeEnvironment.application, + TestHelper.getFlowParameters( + Collections.emptyList()), + null); + return Robolectric + .buildActivity(SignInActivity.class) + .withIntent(startIntent) + .create() + .visible() + .get(); } @Test From a81bf5a234ef1097d9d7b7bbfeb20109405ae3a8 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Tue, 18 Oct 2016 17:47:08 -0700 Subject: [PATCH 19/27] working on tests --- .../ui/auth/ui/email/SignInActivity.java | 2 +- .../CustomRobolectricGradleTestRunner.java | 2 + .../ui/auth/ui/email/SignInActivityTest.java | 35 ----------- .../ui/idp/CredentialSignInHandlerTest.java | 59 ++----------------- 4 files changed, 9 insertions(+), 89 deletions(-) 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 index 3fc3a84f5..27df066a8 100644 --- 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 @@ -100,7 +100,7 @@ private void signIn(String email, final String password) { @Override public void onSuccess(AuthResult authResult) { // Save credential in SmartLock (if enabled) - mSmartLock.saveCredentialsOrFinish( + SmartLock.getInstance(SignInActivity.this).saveCredentialsOrFinish( SignInActivity.this, mActivityHelper, SignInActivity.this, diff --git a/auth/src/test/java/com/firebase/ui/auth/test_helpers/CustomRobolectricGradleTestRunner.java b/auth/src/test/java/com/firebase/ui/auth/test_helpers/CustomRobolectricGradleTestRunner.java index 41d51df3c..bb41a4608 100644 --- a/auth/src/test/java/com/firebase/ui/auth/test_helpers/CustomRobolectricGradleTestRunner.java +++ b/auth/src/test/java/com/firebase/ui/auth/test_helpers/CustomRobolectricGradleTestRunner.java @@ -21,6 +21,7 @@ import com.firebase.ui.auth.util.CredentialsAPI; import com.firebase.ui.auth.util.FirebaseAuthWrapperFactory; import com.firebase.ui.auth.util.FirebaseAuthWrapperImpl; +import com.firebase.ui.auth.util.SmartLock; import org.junit.runners.model.InitializationError; import org.robolectric.RobolectricTestRunner; @@ -43,6 +44,7 @@ public InstrumentationConfiguration createClassLoaderConfig(Config config) { builder.addInstrumentedClass(FacebookProvider.class.getName()); builder.addInstrumentedClass(GoogleProvider.class.getName()); builder.addInstrumentedClass(LoginManager.class.getName()); + builder.addInstrumentedClass(SmartLock.class.getName()); return builder.build(); } diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java index afed335a9..f886cb098 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java @@ -14,7 +14,6 @@ package com.firebase.ui.auth.ui.email; -import android.app.Activity; import android.content.Intent; import android.support.design.widget.TextInputLayout; import android.widget.Button; @@ -29,18 +28,12 @@ import com.firebase.ui.auth.test_helpers.FirebaseAuthWrapperImplShadow; import com.firebase.ui.auth.test_helpers.TestConstants; import com.firebase.ui.auth.test_helpers.TestHelper; -import com.firebase.ui.auth.ui.ActivityHelper; import com.firebase.ui.auth.util.PlayServicesHelper; -import com.firebase.ui.auth.util.SmartLock; import com.google.firebase.auth.FirebaseUser; -import com.google.firebase.auth.GoogleAuthProvider; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; import org.robolectric.Shadows; @@ -48,12 +41,9 @@ import org.robolectric.shadows.ShadowActivity; import java.util.Collections; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -61,7 +51,6 @@ @RunWith(CustomRobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class, sdk = 23) public class SignInActivityTest { - @Before public void setUp() { TestHelper.initializeApp(RuntimeEnvironment.application); @@ -129,29 +118,5 @@ public void testSignInButton_signsInAndSavesCredentials() { verify(ActivityHelperShadow.firebaseAuth).signInWithEmailAndPassword( TestConstants.EMAIL, TestConstants.PASSWORD); - - SmartLock smart = new SmartLock(); - SmartLock.SmartLockResultListener resultListener = mock(SmartLock.SmartLockResultListener.class); - - final CountDownLatch latch = new CountDownLatch(1); - Mockito.doAnswer(new Answer() { - @Override - public Void answer(InvocationOnMock invocation) { - latch.countDown(); - return null; - } - }).when(resultListener).onCredentialsSaved(Activity.RESULT_OK); - - try { - smart.saveCredentialsOrFinish(signInActivity, - new ActivityHelper(signInActivity, signInActivity.getIntent()), - resultListener, - mockFirebaseUser, - TestConstants.PASSWORD, - GoogleAuthProvider.PROVIDER_ID); - assertTrue(latch.await(10, TimeUnit.SECONDS)); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } } } diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java index 8b5ecc695..278b9bfae 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java @@ -14,7 +14,6 @@ package com.firebase.ui.auth.ui.idp; -import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; @@ -35,7 +34,6 @@ import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.account_link.WelcomeBackIDPPrompt; import com.firebase.ui.auth.ui.account_link.WelcomeBackPasswordPrompt; -import com.firebase.ui.auth.ui.email.SignInActivity; import com.firebase.ui.auth.util.CredentialsAPI; import com.firebase.ui.auth.util.PlayServicesHelper; import com.firebase.ui.auth.util.SmartLock; @@ -55,21 +53,13 @@ import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.MockitoAnnotations; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; -import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import java.util.Arrays; -import java.util.Collections; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; import static junit.framework.Assert.assertEquals; -import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -78,7 +68,6 @@ @Config(constants = BuildConfig.class, sdk = 23, shadows = {ActivityHelperShadow.class}) public class CredentialSignInHandlerTest { private static final int RC_ACCOUNT_LINK = 3; - private static final int RC_SAVE_CREDENTIALS = 4; private static final String LINKING_ERROR = "ERROR_TEST_LINKING"; private static final String LINKING_EXPLANATION = "Test explanation"; @@ -126,48 +115,12 @@ public void testSignInSucceeded() { when(mockActivityHelper.getFlowParams()).thenReturn(flowParams); credentialSignInHandler.onComplete(signInTask); - verify(smartLock).saveCredentialsOrFinish(mockActivity, mockActivityHelper, credentialSignInHandler, mockFirebaseUser, null, GoogleAuthProvider.PROVIDER_ID); - - SmartLock smart = new SmartLock(); - SmartLock.SmartLockResultListener resultListener = mock(SmartLock.SmartLockResultListener.class); - - final CountDownLatch latch = new CountDownLatch(1); - Mockito.doAnswer(new Answer() { - @Override - public Void answer(InvocationOnMock invocation) { - latch.countDown(); - return null; - } - }).when(resultListener).onCredentialsSaved(Activity.RESULT_OK); - - - SignInActivity s = createActivity(); - - try { - smart.saveCredentialsOrFinish(s, - new ActivityHelper(mockActivity, mockActivity.getIntent()), - resultListener, - mockFirebaseUser, - TestConstants.PASSWORD, - GoogleAuthProvider.PROVIDER_ID); - assertTrue(latch.await(10, TimeUnit.SECONDS)); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - } - - private SignInActivity createActivity() { - Intent startIntent = SignInActivity.createIntent( - RuntimeEnvironment.application, - TestHelper.getFlowParameters( - Collections.emptyList()), - null); - return Robolectric - .buildActivity(SignInActivity.class) - .withIntent(startIntent) - .create() - .visible() - .get(); + verify(smartLock).saveCredentialsOrFinish(mockActivity, + mockActivityHelper, + credentialSignInHandler, + mockFirebaseUser, + null, + GoogleAuthProvider.PROVIDER_ID); } @Test From db05831441c23f654df0d921e0bdf69890fb7893 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Tue, 18 Oct 2016 19:29:49 -0700 Subject: [PATCH 20/27] Revert interface, working on fixing tests --- .../WelcomeBackPasswordPrompt.java | 10 +--- .../auth/ui/email/RegisterEmailActivity.java | 24 +++----- .../ui/auth/ui/email/SignInActivity.java | 27 ++++----- .../auth/ui/idp/AuthMethodPickerActivity.java | 13 ++--- .../auth/ui/idp/CredentialSignInHandler.java | 23 ++------ .../ui/idp/IDPSignInContainerActivity.java | 5 -- .../com/firebase/ui/auth/util/SmartLock.java | 17 ++---- .../CustomRobolectricGradleTestRunner.java | 2 - .../ui/email/RegisterEmailActivityTest.java | 12 ---- .../ui/idp/AuthMethodPickerActivityTest.java | 51 ++++++----------- .../ui/idp/CredentialSignInHandlerTest.java | 4 -- .../ui/auth/util/SmartLockResult.java | 55 +++++++++++++++++++ 12 files changed, 106 insertions(+), 137 deletions(-) create mode 100644 auth/src/test/java/com/firebase/ui/auth/util/SmartLockResult.java diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java index 4156709ed..1761b54d7 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java @@ -49,7 +49,7 @@ * Activity to link a pre-existing email/password account to a new IDP sign-in by confirming * the password before initiating a link. */ -public class WelcomeBackPasswordPrompt extends AppCompatBase implements View.OnClickListener, SmartLock.SmartLockResultListener { +public class WelcomeBackPasswordPrompt extends AppCompatBase implements View.OnClickListener { private static final String TAG = "WelcomeBackPassword"; private static final StyleSpan BOLD = new StyleSpan(Typeface.BOLD); @@ -64,7 +64,7 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.welcome_back_password_prompt_layout); - mSmartLock = SmartLock.getInstance(this); +// mSmartLock = SmartLock.getInstance(this); mPasswordLayout = (TextInputLayout) findViewById(R.id.password_layout); mPasswordField = (EditText) findViewById(R.id.password); @@ -144,7 +144,6 @@ public void onSuccess(AuthResult authResult) { mSmartLock.saveCredentialsOrFinish( WelcomeBackPasswordPrompt.this, mActivityHelper, - WelcomeBackPasswordPrompt.this, authResult.getUser(), password, null /* provider */); @@ -161,11 +160,6 @@ public void onFailure(@NonNull Exception e) { }); } - @Override - public void onCredentialsSaved(int resultCode) { - finish(RESULT_OK, getIntent()); - } - public static Intent createIntent( Context context, FlowParameters 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 951a2a3d4..1b5177dbc 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 @@ -55,10 +55,9 @@ /** * Activity displaying a form to create a new email/password account. */ -public class RegisterEmailActivity extends AppCompatBase implements View.OnClickListener, SmartLock.SmartLockResultListener { +public class RegisterEmailActivity extends AppCompatBase implements View.OnClickListener { private static final String TAG = "RegisterEmailActivity"; - private SmartLock mSmartLock; private EditText mEmailEditText; private EditText mPasswordEditText; private EditText mNameEditText; @@ -71,8 +70,6 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.register_email_layout); - mSmartLock = SmartLock.getInstance(this); - String email = getIntent().getStringExtra(ExtraConstants.EXTRA_EMAIL); mEmailEditText = (EditText) findViewById(R.id.email); @@ -159,13 +156,13 @@ public void onComplete(@NonNull Task task) { // This executes even if the name change fails, since // the account creation succeeded and we want to save // the credential to SmartLock (if enabled). - mSmartLock.saveCredentialsOrFinish( - RegisterEmailActivity.this, - mActivityHelper, - RegisterEmailActivity.this, - firebaseUser, - password, - null /* provider */); + SmartLock.getInstance(RegisterEmailActivity.this, TAG) + .saveCredentialsOrFinish( + RegisterEmailActivity.this, + mActivityHelper, + firebaseUser, + password, + null /* provider */); } }); } @@ -198,11 +195,6 @@ public void onFailure(@NonNull Exception e) { }); } - @Override - public void onCredentialsSaved(int resultCode) { - finish(RESULT_OK, getIntent()); - } - @Override public void onClick(View view) { if (view.getId() == R.id.button_create) { 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 index 27df066a8..7195f107b 100644 --- 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 @@ -42,10 +42,9 @@ /** * Activity to sign in with email and password. */ -public class SignInActivity extends AppCompatBase implements View.OnClickListener, SmartLock.SmartLockResultListener { +public class SignInActivity extends AppCompatBase implements View.OnClickListener { private static final String TAG = "SignInActivity"; - private SmartLock mSmartLock; private EditText mEmailEditText; private EditText mPasswordEditText; private EmailFieldValidator mEmailValidator; @@ -56,8 +55,6 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sign_in_layout); - mSmartLock = SmartLock.getInstance(this); - String email = getIntent().getStringExtra(ExtraConstants.EXTRA_EMAIL); mEmailEditText = (EditText) findViewById(R.id.email); @@ -69,7 +66,8 @@ protected void onCreate(Bundle savedInstanceState) { getResources().getValue(R.dimen.slightly_visible_icon, slightlyVisibleIcon, true); mPasswordEditText = (EditText) findViewById(R.id.password); - ((TextInputLayout) findViewById(R.id.password_layout)).setPasswordVisibilityToggleEnabled(false); + ((TextInputLayout) findViewById(R.id.password_layout)).setPasswordVisibilityToggleEnabled( + false); ImageView togglePasswordImage = (ImageView) findViewById(R.id.toggle_visibility); mPasswordEditText.setOnFocusChangeListener(new ImageFocusTransparencyChanger( @@ -100,13 +98,13 @@ private void signIn(String email, final String password) { @Override public void onSuccess(AuthResult authResult) { // Save credential in SmartLock (if enabled) - SmartLock.getInstance(SignInActivity.this).saveCredentialsOrFinish( - SignInActivity.this, - mActivityHelper, - SignInActivity.this, - authResult.getUser(), - password, - null /* provider */); + SmartLock.getInstance(SignInActivity.this, TAG) + .saveCredentialsOrFinish( + SignInActivity.this, + mActivityHelper, + authResult.getUser(), + password, + null /* provider */); } }) .addOnFailureListener(new OnFailureListener() { @@ -123,11 +121,6 @@ public void onFailure(@NonNull Exception e) { }); } - @Override - public void onCredentialsSaved(int resultCode) { - finish(RESULT_OK, getIntent()); - } - @Override public void onClick(View view) { if (view.getId() == R.id.button_done) { 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 3c8c560da..7e2817bcd 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 @@ -36,7 +36,6 @@ 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.util.SmartLock; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.FacebookAuthProvider; import com.google.firebase.auth.FirebaseAuth; @@ -59,11 +58,10 @@ public class AuthMethodPickerActivity extends IDPBaseActivity implements IDPProvider.IDPCallback, View.OnClickListener { + private static final String TAG = "AuthMethodPicker"; private static final int RC_EMAIL_FLOW = 2; private static final int RC_ACCOUNT_LINK = 3; - private static final String TAG = "AuthMethodPicker"; - private SmartLock mSmartLock; private ArrayList mIdpProviders; @Override @@ -71,8 +69,6 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.auth_method_picker_layout); - mSmartLock = SmartLock.getInstance(this); - findViewById(R.id.email_provider).setOnClickListener(this); populateIdpList(mActivityHelper.getFlowParams().providerInfo); @@ -90,7 +86,7 @@ private void populateIdpList(List providers) { mIdpProviders = new ArrayList<>(); for (IdpConfig idpConfig : providers) { switch (idpConfig.getProviderId()) { - case AuthUI.FACEBOOK_PROVIDER : + case AuthUI.FACEBOOK_PROVIDER: mIdpProviders.add(new FacebookProvider(this, idpConfig)); break; case AuthUI.GOOGLE_PROVIDER: @@ -111,7 +107,7 @@ private void populateIdpList(List providers) { } LinearLayout btnHolder = (LinearLayout) findViewById(R.id.btn_holder); - for (final IDPProvider provider: mIdpProviders) { + for (final IDPProvider provider : mIdpProviders) { View loginButton = null; switch (provider.getProviderId()) { case GoogleAuthProvider.PROVIDER_ID: @@ -153,7 +149,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { } else if (requestCode == RC_ACCOUNT_LINK) { finish(resultCode, new Intent()); } else { - for(IDPProvider provider : mIdpProviders) { + for (IDPProvider provider : mIdpProviders) { provider.onActivityResult(requestCode, resultCode, data); } } @@ -171,7 +167,6 @@ public void onSuccess(final IDPResponse response) { .addOnCompleteListener(new CredentialSignInHandler( AuthMethodPickerActivity.this, mActivityHelper, - mSmartLock, RC_ACCOUNT_LINK, response)); } 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 3eff730f3..213277ff8 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 @@ -35,26 +35,21 @@ import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.ProviderQueryResult; -import static android.app.Activity.RESULT_OK; - -public class CredentialSignInHandler implements OnCompleteListener, SmartLock.SmartLockResultListener { +public class CredentialSignInHandler implements OnCompleteListener { private final static String TAG = "CredentialSignInHandler"; private AppCompatBase mActivity; private ActivityHelper mActivityHelper; - private SmartLock mSmartLock; private int mAccountLinkResultCode; private IDPResponse mResponse; public CredentialSignInHandler( AppCompatBase activity, ActivityHelper activityHelper, - SmartLock smartLock, int accountLinkResultCode, IDPResponse response) { mActivity = activity; mActivityHelper = activityHelper; - mSmartLock = smartLock; mAccountLinkResultCode = accountLinkResultCode; mResponse = response; } @@ -63,12 +58,11 @@ public CredentialSignInHandler( public void onComplete(@NonNull Task task) { if (task.isSuccessful()) { FirebaseUser firebaseUser = task.getResult().getUser(); - mSmartLock.saveCredentialsOrFinish(mActivity, - mActivityHelper, - this, - firebaseUser, - null /* password */, - mResponse.getProviderType()); + SmartLock.getInstance(mActivity, TAG).saveCredentialsOrFinish(mActivity, + mActivityHelper, + firebaseUser, + null /* password */, + mResponse.getProviderType()); } else { if (task.getException() instanceof FirebaseAuthUserCollisionException) { final String email = mResponse.getEmail(); @@ -93,11 +87,6 @@ public void onFailure(@NonNull Exception e) { } } - @Override - public void onCredentialsSaved(int resultCode) { - mActivity.finish(RESULT_OK, mActivity.getIntent()); - } - private class StartWelcomeBackFlow implements OnSuccessListener { private String mEmail; diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java index 10043d4fb..77e05e368 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java @@ -28,7 +28,6 @@ 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.util.SmartLock; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.AuthResult; @@ -41,7 +40,6 @@ public class IDPSignInContainerActivity extends IDPBaseActivity implements IDPPr private static final String TAG = "IDPSignInContainer"; private static final int RC_WELCOME_BACK_IDP = 4; - private SmartLock mSmartLock; private IDPProvider mIDPProvider; private String mProvider; private String mEmail; @@ -50,8 +48,6 @@ public class IDPSignInContainerActivity extends IDPBaseActivity implements IDPPr protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mSmartLock = SmartLock.getInstance(this); - mProvider = getIntent().getStringExtra(ExtraConstants.EXTRA_PROVIDER); mEmail = getIntent().getStringExtra(ExtraConstants.EXTRA_EMAIL); IdpConfig providerConfig = null; @@ -90,7 +86,6 @@ public void onSuccess(final IDPResponse response) { .addOnCompleteListener(new CredentialSignInHandler( IDPSignInContainerActivity.this, mActivityHelper, - mSmartLock, RC_WELCOME_BACK_IDP, response)); } diff --git a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java index 0abcf928e..24c8af025 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java @@ -48,17 +48,12 @@ public class SmartLock extends Fragment implements GoogleApiClient.ConnectionCallbacks, ResultCallback, GoogleApiClient.OnConnectionFailedListener { - public interface SmartLockResultListener { - void onCredentialsSaved(int resultCode); - } - private static final String TAG = "CredentialsSaveBase"; private static final int RC_SAVE = 100; private static final int RC_UPDATE_SERVICE = 28; private AppCompatBase mActivity; private ActivityHelper mActivityHelper; - private SmartLockResultListener mListener; private String mName; private String mEmail; private String mPassword; @@ -93,7 +88,7 @@ public void onConnected(@Nullable Bundle bundle) { builder.setAccountType(translatedProvider); } else { Log.e(TAG, "Unable to save null credential!"); - mListener.onCredentialsSaved(RESULT_FIRST_USER); + finish(RESULT_FIRST_USER); return; } } @@ -202,7 +197,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { } private void finish(int resultCode) { - mListener.onCredentialsSaved(resultCode); + mActivity.finish(RESULT_OK, mActivity.getIntent()); } /** @@ -216,13 +211,11 @@ private void finish(int resultCode) { */ public void saveCredentialsOrFinish(AppCompatBase activity, ActivityHelper helper, - SmartLockResultListener listener, FirebaseUser firebaseUser, @Nullable String password, @Nullable String provider) { mActivity = activity; mActivityHelper = helper; - mListener = listener; mName = firebaseUser.getDisplayName(); mEmail = firebaseUser.getEmail(); mPassword = password; @@ -256,16 +249,16 @@ public void saveCredentialsOrFinish(AppCompatBase activity, .build(); } - public static SmartLock getInstance(AppCompatBase activity) { + public static SmartLock getInstance(AppCompatBase activity, String tag) { SmartLock result; FragmentManager fm = activity.getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); - Fragment fragment = fm.findFragmentByTag(TAG); + Fragment fragment = fm.findFragmentByTag(tag); if (fragment == null || !(fragment instanceof SmartLock)) { result = new SmartLock(); - ft.add(result, TAG).disallowAddToBackStack().commit(); + ft.add(result, tag).disallowAddToBackStack().commit(); } else { result = (SmartLock) fragment; } diff --git a/auth/src/test/java/com/firebase/ui/auth/test_helpers/CustomRobolectricGradleTestRunner.java b/auth/src/test/java/com/firebase/ui/auth/test_helpers/CustomRobolectricGradleTestRunner.java index bb41a4608..41d51df3c 100644 --- a/auth/src/test/java/com/firebase/ui/auth/test_helpers/CustomRobolectricGradleTestRunner.java +++ b/auth/src/test/java/com/firebase/ui/auth/test_helpers/CustomRobolectricGradleTestRunner.java @@ -21,7 +21,6 @@ import com.firebase.ui.auth.util.CredentialsAPI; import com.firebase.ui.auth.util.FirebaseAuthWrapperFactory; import com.firebase.ui.auth.util.FirebaseAuthWrapperImpl; -import com.firebase.ui.auth.util.SmartLock; import org.junit.runners.model.InitializationError; import org.robolectric.RobolectricTestRunner; @@ -44,7 +43,6 @@ public InstrumentationConfiguration createClassLoaderConfig(Config config) { builder.addInstrumentedClass(FacebookProvider.class.getName()); builder.addInstrumentedClass(GoogleProvider.class.getName()); builder.addInstrumentedClass(LoginManager.class.getName()); - builder.addInstrumentedClass(SmartLock.class.getName()); return builder.build(); } 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 d95644dd2..c55136025 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 @@ -116,17 +116,5 @@ public void testSignupButton_successfulRegisterationShouldContinueToSaveCredenti Button button = (Button) registerEmailActivity.findViewById(R.id.button_create); button.performClick(); - -// Intent smartLockIntent = SmartLock.getInstance(registerEmailActivity).getIntentForTest(); -// assertNotNull(smartLockIntent); -// assertEquals( -// TestConstants.EMAIL, -// smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_EMAIL)); -// assertEquals( -// TestConstants.PASSWORD, -// smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_PASSWORD)); -// assertEquals( -// TestConstants.NAME, -// smartLockIntent.getExtras().getString(ExtraConstants.EXTRA_NAME)); } } 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 ea0c45498..c8ebbe47b 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.TestHelper; import com.firebase.ui.auth.ui.email.EmailHintContainerActivity; import com.firebase.ui.auth.util.PlayServicesHelper; +import com.firebase.ui.auth.util.SmartLockResult; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FacebookAuthProvider; @@ -84,8 +85,8 @@ public void testAllProvidersArePopulated() { createActivity(providers); assertEquals(providers.size(), - ((LinearLayout) authMethodPickerActivity.findViewById(R.id.btn_holder)) - .getChildCount()); + ((LinearLayout) authMethodPickerActivity.findViewById(R.id.btn_holder)) + .getChildCount()); Button emailButton = (Button) authMethodPickerActivity.findViewById(R.id.email_provider); assertEquals(View.VISIBLE, emailButton.getVisibility()); } @@ -101,8 +102,8 @@ public void testEmailIsHidden() { createActivity(providers); assertEquals(providers.size() + 1, // plus one due to the invisible email button - ((LinearLayout) authMethodPickerActivity.findViewById(R.id.btn_holder)) - .getChildCount()); + ((LinearLayout) authMethodPickerActivity.findViewById(R.id.btn_holder)) + .getChildCount()); Button emailButton = (Button) authMethodPickerActivity.findViewById(R.id.email_provider); assertEquals(View.GONE, emailButton.getVisibility()); } @@ -144,10 +145,6 @@ public void testFacebookLoginFlow() { (Button) authMethodPickerActivity.findViewById(R.id.facebook_button); assertNotNull(facebookButton); facebookButton.performClick(); - - ShadowActivity.IntentForResult nextIntent = - Shadows.shadowOf(authMethodPickerActivity).getNextStartedActivityForResult(); - verifySaveCredentialIntent(nextIntent, FacebookAuthProvider.PROVIDER_ID); } @Test @@ -165,15 +162,23 @@ public void testGoogleLoginFlow() { when(ActivityHelperShadow.firebaseAuth.signInWithCredential((AuthCredential) anyObject())) .thenReturn(new AutoCompleteTask( new FakeAuthResult(mockFirebaseUser), true, null)); + + SmartLockResult result = SmartLockResult.assertSmartLockResult(authMethodPickerActivity, + "CredentialSignInHandler", + null, + GoogleAuthProvider.PROVIDER_ID); + Button googleButton = (Button) authMethodPickerActivity.findViewById(R.id.google_button); assertNotNull(googleButton); googleButton.performClick(); - ShadowActivity.IntentForResult nextIntent = - Shadows.shadowOf(authMethodPickerActivity).getNextStartedActivityForResult(); - verifySaveCredentialIntent(nextIntent, GoogleAuthProvider.PROVIDER_ID); + try { + result.await(); + } catch (InterruptedException e) { + assertTrue("Interrupted waiting for result", false); + } } @Test @@ -202,30 +207,6 @@ public void testTwitterLoginFlowStarts() { assertTrue(nextIntent.intent.getComponent().getClassName().contains("com.twitter.sdk")); } - - private static void verifySaveCredentialIntent( - ShadowActivity.IntentForResult nextIntent, - String provider) { -// assertEquals( -// SaveCredentialsActivity.class.getName(), -// nextIntent.intent.getComponent().getClassName()); -// assertEquals( -// nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_EMAIL), -// TestConstants.EMAIL); -// assertEquals( -// nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_NAME), -// TestConstants.NAME); -// assertEquals( -// nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PROFILE_PICTURE_URI), -// TestConstants.PHOTO_URL); -// assertEquals( -// nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PROVIDER), -// provider); -// assertEquals( -// nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PASSWORD), -// null); - } - private AuthMethodPickerActivity createActivity(List providers) { Intent startIntent = AuthMethodPickerActivity.createIntent( RuntimeEnvironment.application, diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java index 278b9bfae..b469a2700 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java @@ -99,7 +99,6 @@ public void testSignInSucceeded() { CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler( mockActivity, mockActivityHelper, - smartLock, RC_ACCOUNT_LINK, idpResponse); Context mockContext = mock(Context.class); @@ -117,7 +116,6 @@ public void testSignInSucceeded() { verify(smartLock).saveCredentialsOrFinish(mockActivity, mockActivityHelper, - credentialSignInHandler, mockFirebaseUser, null, GoogleAuthProvider.PROVIDER_ID); @@ -135,7 +133,6 @@ public void testSignInFailed_withFacebookAlreadyLinked() { CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler( mockActivity, mockActivityHelper, - new SmartLock(), RC_ACCOUNT_LINK, idpResponse); @@ -184,7 +181,6 @@ public void testSignInFailed_withPasswordAccountAlreadyLinked() { CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler( mockActivity, mockActivityHelper, - new SmartLock(), RC_ACCOUNT_LINK, idpResponse); diff --git a/auth/src/test/java/com/firebase/ui/auth/util/SmartLockResult.java b/auth/src/test/java/com/firebase/ui/auth/util/SmartLockResult.java new file mode 100644 index 000000000..994bfd094 --- /dev/null +++ b/auth/src/test/java/com/firebase/ui/auth/util/SmartLockResult.java @@ -0,0 +1,55 @@ +package com.firebase.ui.auth.util; + +import android.support.annotation.Nullable; +import android.support.v4.app.FragmentActivity; + +import com.firebase.ui.auth.test_helpers.TestConstants; +import com.firebase.ui.auth.ui.ActivityHelper; +import com.firebase.ui.auth.ui.AppCompatBase; +import com.google.firebase.auth.FirebaseUser; + +import java.util.concurrent.CountDownLatch; + +import static org.junit.Assert.assertEquals; + +public class SmartLockResult extends SmartLock { + private CountDownLatch mCountDownLatch; + private String mPassword; + private String mProvider; + + public void await() throws InterruptedException { + mCountDownLatch.await(); + } + + @Override + public void saveCredentialsOrFinish(AppCompatBase activity, + ActivityHelper helper, + FirebaseUser firebaseUser, + @Nullable String password, + @Nullable String provider) { + assertEquals(firebaseUser.getEmail(), TestConstants.EMAIL); + assertEquals(firebaseUser.getDisplayName(), TestConstants.NAME); + assertEquals(firebaseUser.getPhotoUrl().toString(), TestConstants.PHOTO_URL); + assertEquals(password, mPassword); + assertEquals(provider, mProvider); + mCountDownLatch.countDown(); + } + + public static SmartLockResult assertSmartLockResult(FragmentActivity activity, + String tag, + String password, + String provider) { + SmartLockResult result = new SmartLockResult(); + + result.mCountDownLatch = new CountDownLatch(1); + result.mPassword = password; + result.mProvider = provider; + + activity.getSupportFragmentManager() + .beginTransaction() + .add(result, tag) + .commit(); + + return result; + } +} From 8c96216c3c9bb617beebef7ca184a12424528f3d Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Tue, 18 Oct 2016 19:37:19 -0700 Subject: [PATCH 21/27] Fix tests --- .../ui/auth/ui/idp/AuthMethodPickerActivity.java | 2 ++ .../ui/auth/ui/idp/CredentialSignInHandler.java | 13 ++++++++----- .../ui/auth/ui/idp/IDPSignInContainerActivity.java | 2 ++ .../auth/ui/idp/AuthMethodPickerActivityTest.java | 2 +- .../ui/auth/ui/idp/CredentialSignInHandlerTest.java | 3 +++ 5 files changed, 16 insertions(+), 6 deletions(-) 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 7e2817bcd..2464ee439 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 @@ -36,6 +36,7 @@ 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.util.SmartLock; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.FacebookAuthProvider; import com.google.firebase.auth.FirebaseAuth; @@ -167,6 +168,7 @@ public void onSuccess(final IDPResponse response) { .addOnCompleteListener(new CredentialSignInHandler( AuthMethodPickerActivity.this, mActivityHelper, + SmartLock.getInstance(AuthMethodPickerActivity.this, TAG), RC_ACCOUNT_LINK, response)); } 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 213277ff8..ae55b4ee1 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 @@ -40,16 +40,19 @@ public class CredentialSignInHandler implements OnCompleteListener { private AppCompatBase mActivity; private ActivityHelper mActivityHelper; + private SmartLock mSmartLock; private int mAccountLinkResultCode; private IDPResponse mResponse; public CredentialSignInHandler( AppCompatBase activity, ActivityHelper activityHelper, + SmartLock smartLock, int accountLinkResultCode, IDPResponse response) { mActivity = activity; mActivityHelper = activityHelper; + mSmartLock = smartLock; mAccountLinkResultCode = accountLinkResultCode; mResponse = response; } @@ -58,11 +61,11 @@ public CredentialSignInHandler( public void onComplete(@NonNull Task task) { if (task.isSuccessful()) { FirebaseUser firebaseUser = task.getResult().getUser(); - SmartLock.getInstance(mActivity, TAG).saveCredentialsOrFinish(mActivity, - mActivityHelper, - firebaseUser, - null /* password */, - mResponse.getProviderType()); + mSmartLock.saveCredentialsOrFinish(mActivity, + mActivityHelper, + firebaseUser, + null /* password */, + mResponse.getProviderType()); } else { if (task.getException() instanceof FirebaseAuthUserCollisionException) { final String email = mResponse.getEmail(); diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java index 77e05e368..b3cc653c9 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java @@ -28,6 +28,7 @@ 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.util.SmartLock; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.AuthResult; @@ -86,6 +87,7 @@ public void onSuccess(final IDPResponse response) { .addOnCompleteListener(new CredentialSignInHandler( IDPSignInContainerActivity.this, mActivityHelper, + SmartLock.getInstance(IDPSignInContainerActivity.this, TAG), RC_WELCOME_BACK_IDP, response)); } 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 c8ebbe47b..0b744013d 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 @@ -164,7 +164,7 @@ public void testGoogleLoginFlow() { new FakeAuthResult(mockFirebaseUser), true, null)); SmartLockResult result = SmartLockResult.assertSmartLockResult(authMethodPickerActivity, - "CredentialSignInHandler", + "AuthMethodPicker", null, GoogleAuthProvider.PROVIDER_ID); diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java index b469a2700..f8ce15dd5 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java @@ -99,6 +99,7 @@ public void testSignInSucceeded() { CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler( mockActivity, mockActivityHelper, + smartLock, RC_ACCOUNT_LINK, idpResponse); Context mockContext = mock(Context.class); @@ -133,6 +134,7 @@ public void testSignInFailed_withFacebookAlreadyLinked() { CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler( mockActivity, mockActivityHelper, + null, RC_ACCOUNT_LINK, idpResponse); @@ -181,6 +183,7 @@ public void testSignInFailed_withPasswordAccountAlreadyLinked() { CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler( mockActivity, mockActivityHelper, + null, RC_ACCOUNT_LINK, idpResponse); From cb6efade053eb55cb937bb93cf93c2b754808f62 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Tue, 18 Oct 2016 20:23:47 -0700 Subject: [PATCH 22/27] Merge dev --- .../WelcomeBackPasswordPrompt.java | 21 ++++++----- .../ui/idp/IdpSignInContainerActivity.java | 14 ++++---- .../com/firebase/ui/auth/util/SmartLock.java | 35 +++++++++---------- 3 files changed, 37 insertions(+), 33 deletions(-) diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java index 90cdabb87..b276d6950 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java @@ -80,7 +80,8 @@ protected void onCreate(Bundle savedInstanceState) { TextView bodyTextView = ((TextView) findViewById(R.id.welcome_back_password_body)); bodyTextView.setText(spannableStringBuilder); - ((TextInputLayout) findViewById(R.id.password_layout)).setPasswordVisibilityToggleEnabled(false); + ((TextInputLayout) findViewById(R.id.password_layout)).setPasswordVisibilityToggleEnabled( + false); // Click listeners findViewById(R.id.button_done).setOnClickListener(this); @@ -133,17 +134,21 @@ public void onSuccess(AuthResult authResult) { // Sign in with the credential firebaseAuth.signInWithCredential(authCredential) .addOnFailureListener( - new TaskFailureLogger(TAG, "Error signing in with credential")) + new TaskFailureLogger(TAG, + "Error signing in with credential")) .addOnSuccessListener( new OnSuccessListener() { @Override public void onSuccess(AuthResult authResult) { - mSmartLock.saveCredentialsOrFinish( - WelcomeBackPasswordPrompt.this, - mActivityHelper, - authResult.getUser(), - password, - null /* provider */); + SmartLock + .getInstance(WelcomeBackPasswordPrompt.this, + TAG) + .saveCredentialsOrFinish( + WelcomeBackPasswordPrompt.this, + mActivityHelper, + authResult.getUser(), + password, + null /* provider */); } }); } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/idp/IdpSignInContainerActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/IdpSignInContainerActivity.java index 4553db13c..a6c5bffa6 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/idp/IdpSignInContainerActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/idp/IdpSignInContainerActivity.java @@ -64,14 +64,14 @@ protected void onCreate(Bundle savedInstanceState) { return; } if (mProvider.equalsIgnoreCase(FacebookAuthProvider.PROVIDER_ID)) { - mIDPProvider = new FacebookProvider(this, providerConfig); + mIdpProvider = new FacebookProvider(this, providerConfig); } else if (mProvider.equalsIgnoreCase(GoogleAuthProvider.PROVIDER_ID)) { - mIDPProvider = new GoogleProvider(this, providerConfig, mEmail); + mIdpProvider = new GoogleProvider(this, providerConfig, mEmail); } else if (mProvider.equalsIgnoreCase(TwitterAuthProvider.PROVIDER_ID)) { - mIDPProvider = new TwitterProvider(this); + mIdpProvider = new TwitterProvider(this); } - mIDPProvider.setAuthenticationCallback(this); - mIDPProvider.startLogin(this); + mIdpProvider.setAuthenticationCallback(this); + mIdpProvider.startLogin(this); } @Override @@ -87,7 +87,7 @@ public void onSuccess(final IdpResponse response) { .addOnCompleteListener(new CredentialSignInHandler( IdpSignInContainerActivity.this, mActivityHelper, - SmartLock.getInstance(IDPSignInContainerActivity.this, TAG), + SmartLock.getInstance(IdpSignInContainerActivity.this, TAG), RC_WELCOME_BACK_IDP, response)); } @@ -103,7 +103,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == RC_WELCOME_BACK_IDP) { finish(resultCode, data); } else { - mIDPProvider.onActivityResult(requestCode, resultCode, data); + mIdpProvider.onActivityResult(requestCode, resultCode, data); } } diff --git a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java index c01bb1d8c..5df40663c 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java @@ -27,8 +27,6 @@ import android.util.Log; import com.firebase.ui.auth.BuildConfig; -import com.firebase.ui.auth.R; -import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.ui.ActivityHelper; import com.firebase.ui.auth.ui.AppCompatBase; import com.google.android.gms.auth.api.Auth; @@ -59,7 +57,7 @@ public class SmartLock extends Fragment implements GoogleApiClient.ConnectionCal private String mName; private String mEmail; private String mPassword; - private IdpResponse mIdpResponse; + private String mProvider; private String mProfilePictureUri; private GoogleApiClient mCredentialsApiClient; @@ -75,25 +73,26 @@ public void onConnected(@Nullable Bundle bundle) { builder.setPassword(mPassword); if (mPassword == null) { // only password OR provider can be set, not both - String provider = mIdpResponse.getProviderType(); - if (provider != null) { + if (mProvider != null) { String translatedProvider = null; // translate the google.com/facebook.com provider strings into full URIs - if (provider.equals(GoogleAuthProvider.PROVIDER_ID)) { - translatedProvider = IdentityProviders.GOOGLE; - } else if (provider.equals(FacebookAuthProvider.PROVIDER_ID)) { - translatedProvider = IdentityProviders.FACEBOOK; - } else if (provider.equals(TwitterAuthProvider.PROVIDER_ID)) { - translatedProvider = IdentityProviders.TWITTER; + switch (mProvider) { + case GoogleAuthProvider.PROVIDER_ID: + translatedProvider = IdentityProviders.GOOGLE; + break; + case FacebookAuthProvider.PROVIDER_ID: + translatedProvider = IdentityProviders.FACEBOOK; + break; + case TwitterAuthProvider.PROVIDER_ID: + translatedProvider = IdentityProviders.TWITTER; + break; + default: + Log.e(TAG, "Unable to save null credential!"); + finish(RESULT_FIRST_USER); + return; } - if (translatedProvider != null) { - builder.setAccountType(translatedProvider); - } else { - Log.e(TAG, "Unable to save null credential!"); - finish(RESULT_FIRST_USER); - return; - } + builder.setAccountType(translatedProvider); } } From af644bed53e396c45edec7d30f421d8e94d4a88e Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Tue, 18 Oct 2016 20:24:03 -0700 Subject: [PATCH 23/27] Fix merge mistakes --- .../com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java index 58080d16c..caa60d443 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java @@ -31,7 +31,6 @@ import com.firebase.ui.auth.ui.AppCompatBase; import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; -import com.firebase.ui.auth.ui.account_link.SaveCredentialsActivity; import com.firebase.ui.auth.ui.account_link.WelcomeBackIdpPrompt; import com.firebase.ui.auth.ui.account_link.WelcomeBackPasswordPrompt; import com.firebase.ui.auth.util.CredentialsAPI; From 4152c23a8993c88aeab63609337fdd5a5ecfbd8a Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Tue, 18 Oct 2016 20:54:16 -0700 Subject: [PATCH 24/27] Cleanup --- .../main/java/com/firebase/ui/auth/AuthUI.java | 4 ++-- .../account_link/WelcomeBackPasswordPrompt.java | 6 ++---- .../ui/auth/ui/email/RegisterEmailActivity.java | 17 +++++++---------- .../ui/auth/ui/email/SignInActivity.java | 11 +++++------ .../ui/auth/ui/idp/CredentialSignInHandler.java | 2 +- .../com/firebase/ui/auth/util/SmartLock.java | 13 ++++++++----- .../{SmartlockUtil.java => SmartLockUtil.java} | 2 +- .../ui/auth/ui/email/SignInActivityTest.java | 2 +- 8 files changed, 27 insertions(+), 30 deletions(-) rename auth/src/main/java/com/firebase/ui/auth/util/{SmartlockUtil.java => SmartLockUtil.java} (98%) diff --git a/auth/src/main/java/com/firebase/ui/auth/AuthUI.java b/auth/src/main/java/com/firebase/ui/auth/AuthUI.java index e92ed30b7..9b3575ebc 100644 --- a/auth/src/main/java/com/firebase/ui/auth/AuthUI.java +++ b/auth/src/main/java/com/firebase/ui/auth/AuthUI.java @@ -32,7 +32,7 @@ import com.firebase.ui.auth.util.CredentialsApiHelper; import com.firebase.ui.auth.util.GoogleApiClientTaskHelper; import com.firebase.ui.auth.util.Preconditions; -import com.firebase.ui.auth.util.SmartlockUtil; +import com.firebase.ui.auth.util.SmartLockUtil; import com.google.android.gms.auth.api.Auth; import com.google.android.gms.auth.api.credentials.Credential; import com.google.android.gms.auth.api.signin.GoogleSignInOptions; @@ -343,7 +343,7 @@ public Task delete(@NonNull Activity activity) { CredentialsApiHelper credentialHelper = CredentialsApiHelper.getInstance(gacHelper); // Get all SmartLock credentials associated with the user - List credentials = SmartlockUtil.credentialsFromFirebaseUser(firebaseUser); + List credentials = SmartLockUtil.credentialsFromFirebaseUser(firebaseUser); // For each Credential in the list, create a task to delete it. List> credentialTasks = new ArrayList<>(); diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java index b276d6950..b3179d066 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java @@ -80,8 +80,7 @@ protected void onCreate(Bundle savedInstanceState) { TextView bodyTextView = ((TextView) findViewById(R.id.welcome_back_password_body)); bodyTextView.setText(spannableStringBuilder); - ((TextInputLayout) findViewById(R.id.password_layout)).setPasswordVisibilityToggleEnabled( - false); + ((TextInputLayout) findViewById(R.id.password_layout)).setPasswordVisibilityToggleEnabled(false); // Click listeners findViewById(R.id.button_done).setOnClickListener(this); @@ -134,8 +133,7 @@ public void onSuccess(AuthResult authResult) { // Sign in with the credential firebaseAuth.signInWithCredential(authCredential) .addOnFailureListener( - new TaskFailureLogger(TAG, - "Error signing in with credential")) + new TaskFailureLogger(TAG, "Error signing in with credential")) .addOnSuccessListener( new OnSuccessListener() { @Override 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 1b5177dbc..0974c1c91 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 @@ -95,10 +95,8 @@ protected void onCreate(Bundle savedInstanceState) { 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)); + mNameValidator = new RequiredFieldValidator((TextInputLayout) findViewById(R.id.name_layout)); + mEmailFieldValidator = new EmailFieldValidator((TextInputLayout) findViewById(R.id.email_layout)); if (email != null) { mEmailEditText.setText(email); @@ -157,12 +155,11 @@ public void onComplete(@NonNull Task task) { // the account creation succeeded and we want to save // the credential to SmartLock (if enabled). SmartLock.getInstance(RegisterEmailActivity.this, TAG) - .saveCredentialsOrFinish( - RegisterEmailActivity.this, - mActivityHelper, - firebaseUser, - password, - null /* provider */); + .saveCredentialsOrFinish(RegisterEmailActivity.this, + mActivityHelper, + firebaseUser, + password, + null /* provider */); } }); } 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 index 7195f107b..7d091eac7 100644 --- 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 @@ -99,12 +99,11 @@ private void signIn(String email, final String password) { public void onSuccess(AuthResult authResult) { // Save credential in SmartLock (if enabled) SmartLock.getInstance(SignInActivity.this, TAG) - .saveCredentialsOrFinish( - SignInActivity.this, - mActivityHelper, - authResult.getUser(), - password, - null /* provider */); + .saveCredentialsOrFinish(SignInActivity.this, + mActivityHelper, + authResult.getUser(), + password, + null /* provider */); } }) .addOnFailureListener(new OnFailureListener() { 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 5e655d85c..e5a8da173 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 @@ -53,8 +53,8 @@ public CredentialSignInHandler( mActivity = activity; mActivityHelper = activityHelper; mSmartLock = smartLock; - mAccountLinkResultCode = accountLinkResultCode; mResponse = response; + mAccountLinkResultCode = accountLinkResultCode; } @Override diff --git a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java index 5df40663c..864e2928f 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java @@ -46,8 +46,10 @@ import static android.app.Activity.RESULT_FIRST_USER; import static android.app.Activity.RESULT_OK; -public class SmartLock extends Fragment implements GoogleApiClient.ConnectionCallbacks, ResultCallback, - GoogleApiClient.OnConnectionFailedListener { +public class SmartLock extends Fragment + implements GoogleApiClient.ConnectionCallbacks, + GoogleApiClient.OnConnectionFailedListener, + ResultCallback { private static final String TAG = "CredentialsSaveBase"; private static final int RC_SAVE = 100; private static final int RC_UPDATE_SERVICE = 28; @@ -65,7 +67,7 @@ public class SmartLock extends Fragment implements GoogleApiClient.ConnectionCal public void onConnected(@Nullable Bundle bundle) { if (mEmail == null) { Log.e(TAG, "Unable to save null credential!"); - finish(RESULT_FIRST_USER); + finish(RESULT_CANCELED); return; } @@ -88,7 +90,7 @@ public void onConnected(@Nullable Bundle bundle) { break; default: Log.e(TAG, "Unable to save null credential!"); - finish(RESULT_FIRST_USER); + finish(RESULT_CANCELED); return; } @@ -237,7 +239,8 @@ public void saveCredentialsOrFinish(AppCompatBase activity, return; } - if (!FirebaseAuthWrapperFactory.getFirebaseAuthWrapper(helper.getFlowParams().appName) + if (!FirebaseAuthWrapperFactory + .getFirebaseAuthWrapper(helper.getFlowParams().appName) .isPlayServicesAvailable(activity)) { finish(RESULT_CANCELED); return; diff --git a/auth/src/main/java/com/firebase/ui/auth/util/SmartlockUtil.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartLockUtil.java similarity index 98% rename from auth/src/main/java/com/firebase/ui/auth/util/SmartlockUtil.java rename to auth/src/main/java/com/firebase/ui/auth/util/SmartLockUtil.java index e75116ca9..4fd61de00 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/SmartlockUtil.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/SmartLockUtil.java @@ -20,7 +20,7 @@ /** * Helper class to deal with Smartlock Flows. */ -public class SmartlockUtil { +public class SmartLockUtil { private static final String TAG = "SmartLockUtil"; /** diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java index f886cb098..b2d303901 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java @@ -108,7 +108,7 @@ public void testSignInButton_signsInAndSavesCredentials() { when(ActivityHelperShadow.firebaseAuth.signInWithEmailAndPassword( TestConstants.EMAIL, TestConstants.PASSWORD)).thenReturn( - new AutoCompleteTask<>(new FakeAuthResult(mockFirebaseUser), true, null)); + new AutoCompleteTask<>(new FakeAuthResult(mockFirebaseUser), true, null)); when(mockFirebaseUser.getDisplayName()).thenReturn(TestConstants.NAME); when(mockFirebaseUser.getEmail()).thenReturn(TestConstants.EMAIL); From 2cc8adf0263df977c082f67d73cef6b849533ad0 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Tue, 18 Oct 2016 21:24:05 -0700 Subject: [PATCH 25/27] Final cleanup and fix tests --- .../SmartLockResult.java | 15 ++++++------ .../ui/email/RegisterEmailActivityTest.java | 15 +++++++++++- .../ui/auth/ui/email/SignInActivityTest.java | 14 +++++++++++ .../ui/idp/AuthMethodPickerActivityTest.java | 23 ++++++++++++++----- 4 files changed, 53 insertions(+), 14 deletions(-) rename auth/src/test/java/com/firebase/ui/auth/{util => test_helpers}/SmartLockResult.java (75%) diff --git a/auth/src/test/java/com/firebase/ui/auth/util/SmartLockResult.java b/auth/src/test/java/com/firebase/ui/auth/test_helpers/SmartLockResult.java similarity index 75% rename from auth/src/test/java/com/firebase/ui/auth/util/SmartLockResult.java rename to auth/src/test/java/com/firebase/ui/auth/test_helpers/SmartLockResult.java index 994bfd094..23474721f 100644 --- a/auth/src/test/java/com/firebase/ui/auth/util/SmartLockResult.java +++ b/auth/src/test/java/com/firebase/ui/auth/test_helpers/SmartLockResult.java @@ -1,11 +1,11 @@ -package com.firebase.ui.auth.util; +package com.firebase.ui.auth.test_helpers; import android.support.annotation.Nullable; import android.support.v4.app.FragmentActivity; -import com.firebase.ui.auth.test_helpers.TestConstants; import com.firebase.ui.auth.ui.ActivityHelper; import com.firebase.ui.auth.ui.AppCompatBase; +import com.firebase.ui.auth.util.SmartLock; import com.google.firebase.auth.FirebaseUser; import java.util.concurrent.CountDownLatch; @@ -29,16 +29,17 @@ public void saveCredentialsOrFinish(AppCompatBase activity, @Nullable String provider) { assertEquals(firebaseUser.getEmail(), TestConstants.EMAIL); assertEquals(firebaseUser.getDisplayName(), TestConstants.NAME); - assertEquals(firebaseUser.getPhotoUrl().toString(), TestConstants.PHOTO_URL); + assertEquals(firebaseUser.getPhotoUrl() != null + ? firebaseUser.getPhotoUrl().toString() : null, TestConstants.PHOTO_URL); assertEquals(password, mPassword); assertEquals(provider, mProvider); mCountDownLatch.countDown(); } - public static SmartLockResult assertSmartLockResult(FragmentActivity activity, - String tag, - String password, - String provider) { + public static SmartLockResult newInstance(FragmentActivity activity, + String tag, + String password, + String provider) { SmartLockResult result = new SmartLockResult(); result.mCountDownLatch = new CountDownLatch(1); 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 c55136025..54f61a14b 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 @@ -27,10 +27,12 @@ import com.firebase.ui.auth.test_helpers.CustomRobolectricGradleTestRunner; import com.firebase.ui.auth.test_helpers.FakeAuthResult; import com.firebase.ui.auth.test_helpers.FirebaseAuthWrapperImplShadow; +import com.firebase.ui.auth.test_helpers.SmartLockResult; import com.firebase.ui.auth.test_helpers.TestConstants; import com.firebase.ui.auth.test_helpers.TestHelper; import com.firebase.ui.auth.util.PlayServicesHelper; import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.auth.GoogleAuthProvider; import com.google.firebase.auth.UserProfileChangeRequest; import org.junit.Before; @@ -43,6 +45,7 @@ import java.util.Arrays; +import static junit.framework.Assert.assertTrue; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.when; @@ -103,7 +106,7 @@ public void testSignupButton_successfulRegisterationShouldContinueToSaveCredenti when(mockFirebaseUser.getEmail()).thenReturn(TestConstants.EMAIL); when(mockFirebaseUser.getDisplayName()).thenReturn(TestConstants.NAME); when(mockFirebaseUser.updateProfile((UserProfileChangeRequest) Mockito.anyObject())) - .thenReturn(new AutoCompleteTask(null, true, null)); + .thenReturn(new AutoCompleteTask<>(TestConstants.PHOTO_URL, true, null)); when(ActivityHelperShadow.firebaseAuth .createUserWithEmailAndPassword( @@ -113,8 +116,18 @@ public void testSignupButton_successfulRegisterationShouldContinueToSaveCredenti true, null)); + SmartLockResult result = SmartLockResult.newInstance(registerEmailActivity, + "RegisterEmailActivity", + TestConstants.PHOTO_URL, + GoogleAuthProvider.PROVIDER_ID); Button button = (Button) registerEmailActivity.findViewById(R.id.button_create); button.performClick(); + + try { + result.await(); + } catch (InterruptedException e) { + assertTrue("Interrupted waiting for result", false); + } } } diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java index b2d303901..ac5dc9aa6 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/email/SignInActivityTest.java @@ -26,6 +26,7 @@ import com.firebase.ui.auth.test_helpers.CustomRobolectricGradleTestRunner; import com.firebase.ui.auth.test_helpers.FakeAuthResult; import com.firebase.ui.auth.test_helpers.FirebaseAuthWrapperImplShadow; +import com.firebase.ui.auth.test_helpers.SmartLockResult; import com.firebase.ui.auth.test_helpers.TestConstants; import com.firebase.ui.auth.test_helpers.TestHelper; import com.firebase.ui.auth.util.PlayServicesHelper; @@ -42,6 +43,7 @@ import java.util.Collections; +import static junit.framework.Assert.assertTrue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.mockito.Mockito.mock; @@ -111,6 +113,12 @@ public void testSignInButton_signsInAndSavesCredentials() { new AutoCompleteTask<>(new FakeAuthResult(mockFirebaseUser), true, null)); when(mockFirebaseUser.getDisplayName()).thenReturn(TestConstants.NAME); when(mockFirebaseUser.getEmail()).thenReturn(TestConstants.EMAIL); + when(mockFirebaseUser.getPhotoUrl()).thenReturn(TestConstants.PHOTO_URI); + + SmartLockResult result = SmartLockResult.newInstance(signInActivity, + "SignInActivity", + TestConstants.PASSWORD, + null); Button signIn = (Button) signInActivity.findViewById(R.id.button_done); signIn.performClick(); @@ -118,5 +126,11 @@ public void testSignInButton_signsInAndSavesCredentials() { verify(ActivityHelperShadow.firebaseAuth).signInWithEmailAndPassword( TestConstants.EMAIL, TestConstants.PASSWORD); + + try { + result.await(); + } catch (InterruptedException e) { + assertTrue("Interrupted waiting for result", false); + } } } 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 5868a1056..d00f8f27f 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 @@ -21,7 +21,6 @@ import com.firebase.ui.auth.AuthUI; import com.firebase.ui.auth.BuildConfig; -import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.R; import com.firebase.ui.auth.test_helpers.ActivityHelperShadow; import com.firebase.ui.auth.test_helpers.AutoCompleteTask; @@ -34,7 +33,7 @@ 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.firebase.ui.auth.util.SmartLockResult; +import com.firebase.ui.auth.test_helpers.SmartLockResult; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FacebookAuthProvider; @@ -142,10 +141,22 @@ public void testFacebookLoginFlow() { .thenReturn(new AutoCompleteTask( new FakeAuthResult(mockFirebaseUser), true, null)); + + SmartLockResult result = SmartLockResult.newInstance(authMethodPickerActivity, + "AuthMethodPicker", + null, + FacebookAuthProvider.PROVIDER_ID); + Button facebookButton = (Button) authMethodPickerActivity.findViewById(R.id.facebook_button); assertNotNull(facebookButton); facebookButton.performClick(); + + try { + result.await(); + } catch (InterruptedException e) { + assertTrue("Interrupted waiting for result", false); + } } @Test @@ -164,10 +175,10 @@ public void testGoogleLoginFlow() { .thenReturn(new AutoCompleteTask( new FakeAuthResult(mockFirebaseUser), true, null)); - SmartLockResult result = SmartLockResult.assertSmartLockResult(authMethodPickerActivity, - "AuthMethodPicker", - null, - GoogleAuthProvider.PROVIDER_ID); + SmartLockResult result = SmartLockResult.newInstance(authMethodPickerActivity, + "AuthMethodPicker", + null, + GoogleAuthProvider.PROVIDER_ID); Button googleButton = (Button) authMethodPickerActivity.findViewById(R.id.google_button); From c138a51892ad5a84a1f1d21eaf09d4ae31f8bd56 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Tue, 18 Oct 2016 21:50:51 -0700 Subject: [PATCH 26/27] Fix test --- .../firebase/ui/auth/ui/email/RegisterEmailActivityTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 54f61a14b..ee781a1ce 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 @@ -118,7 +118,7 @@ public void testSignupButton_successfulRegisterationShouldContinueToSaveCredenti SmartLockResult result = SmartLockResult.newInstance(registerEmailActivity, "RegisterEmailActivity", - TestConstants.PHOTO_URL, + TestConstants.PASSWORD, GoogleAuthProvider.PROVIDER_ID); Button button = (Button) registerEmailActivity.findViewById(R.id.button_create); From f88aab37fe29ed7eae860a419aca08155fa25244 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Tue, 18 Oct 2016 22:06:19 -0700 Subject: [PATCH 27/27] Fix test --- .../ui/auth/ui/email/RegisterEmailActivityTest.java | 8 ++++---- .../ui/auth/ui/idp/AuthMethodPickerActivityTest.java | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) 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 ee781a1ce..8b6531055 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 @@ -32,7 +32,6 @@ import com.firebase.ui.auth.test_helpers.TestHelper; import com.firebase.ui.auth.util.PlayServicesHelper; import com.google.firebase.auth.FirebaseUser; -import com.google.firebase.auth.GoogleAuthProvider; import com.google.firebase.auth.UserProfileChangeRequest; import org.junit.Before; @@ -105,8 +104,9 @@ public void testSignupButton_successfulRegisterationShouldContinueToSaveCredenti FirebaseUser mockFirebaseUser = Mockito.mock(FirebaseUser.class); when(mockFirebaseUser.getEmail()).thenReturn(TestConstants.EMAIL); when(mockFirebaseUser.getDisplayName()).thenReturn(TestConstants.NAME); - when(mockFirebaseUser.updateProfile((UserProfileChangeRequest) Mockito.anyObject())) - .thenReturn(new AutoCompleteTask<>(TestConstants.PHOTO_URL, true, null)); + when(mockFirebaseUser.getPhotoUrl()).thenReturn(TestConstants.PHOTO_URI); + when(mockFirebaseUser.updateProfile((UserProfileChangeRequest) Mockito.any())) + .thenReturn(new AutoCompleteTask(null, true, null)); when(ActivityHelperShadow.firebaseAuth .createUserWithEmailAndPassword( @@ -119,7 +119,7 @@ public void testSignupButton_successfulRegisterationShouldContinueToSaveCredenti SmartLockResult result = SmartLockResult.newInstance(registerEmailActivity, "RegisterEmailActivity", TestConstants.PASSWORD, - GoogleAuthProvider.PROVIDER_ID); + null); Button button = (Button) registerEmailActivity.findViewById(R.id.button_create); button.performClick(); 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 d00f8f27f..21b6ba8c1 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 @@ -30,10 +30,10 @@ import com.firebase.ui.auth.test_helpers.FirebaseAuthWrapperImplShadow; import com.firebase.ui.auth.test_helpers.GoogleProviderShadow; import com.firebase.ui.auth.test_helpers.LoginManagerShadow; +import com.firebase.ui.auth.test_helpers.SmartLockResult; 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.firebase.ui.auth.test_helpers.SmartLockResult; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FacebookAuthProvider; @@ -44,6 +44,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mockito; import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; import org.robolectric.Shadows; @@ -56,7 +57,6 @@ import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertTrue; -import static org.mockito.Matchers.anyObject; import static org.mockito.Mockito.when; @RunWith(CustomRobolectricGradleTestRunner.class) @@ -137,7 +137,7 @@ public void testFacebookLoginFlow() { FirebaseUser mockFirebaseUser = TestHelper.makeMockFirebaseUser(); when(mockFirebaseUser.getProviders()) .thenReturn(Arrays.asList(FacebookAuthProvider.PROVIDER_ID)); - when(ActivityHelperShadow.firebaseAuth.signInWithCredential((AuthCredential) anyObject())) + when(ActivityHelperShadow.firebaseAuth.signInWithCredential((AuthCredential) Mockito.any())) .thenReturn(new AutoCompleteTask( new FakeAuthResult(mockFirebaseUser), true, null)); @@ -171,7 +171,7 @@ public void testGoogleLoginFlow() { when(mockFirebaseUser.getProviders()) .thenReturn(Arrays.asList(GoogleAuthProvider.PROVIDER_ID)); - when(ActivityHelperShadow.firebaseAuth.signInWithCredential((AuthCredential) anyObject())) + when(ActivityHelperShadow.firebaseAuth.signInWithCredential((AuthCredential) Mockito.any())) .thenReturn(new AutoCompleteTask( new FakeAuthResult(mockFirebaseUser), true, null)); @@ -205,7 +205,7 @@ public void testTwitterLoginFlowStarts() { when(mockFirebaseUser.getProviders()) .thenReturn(Arrays.asList(TwitterAuthProvider.PROVIDER_ID)); - when(ActivityHelperShadow.firebaseAuth.signInWithCredential((AuthCredential) anyObject())) + when(ActivityHelperShadow.firebaseAuth.signInWithCredential((AuthCredential) Mockito.any())) .thenReturn(new AutoCompleteTask( new FakeAuthResult(mockFirebaseUser), true, null)); Button twitterButton =