diff --git a/auth/src/main/AndroidManifest.xml b/auth/src/main/AndroidManifest.xml
index ff27ea34f..64ed09baf 100644
--- a/auth/src/main/AndroidManifest.xml
+++ b/auth/src/main/AndroidManifest.xml
@@ -34,10 +34,6 @@
android:name="com.firebase.ui.auth.ui.email.SignInActivity"
android:label="@string/title_sign_in_activity"
android:theme="@style/FirebaseUI" />
-
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/AppCompatBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/AppCompatBase.java
index 7d2c8eeb5..4fb0ba640 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
@@ -16,8 +16,9 @@
import android.content.Intent;
import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
-public class AppCompatBase extends android.support.v7.app.AppCompatActivity {
+public class AppCompatBase extends AppCompatActivity {
protected ActivityHelper mActivityHelper;
@Override
@@ -36,5 +37,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 54cbad225..98d46f8a3 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
@@ -141,7 +141,6 @@ private boolean hasNetworkConnection() {
public void onCredentialsApiConnected(
CredentialsAPI credentialsApi,
ActivityHelper activityHelper) {
-
String email = credentialsApi.getEmailFromCredential();
String password = credentialsApi.getPasswordFromCredential();
String accountType = credentialsApi.getAccountTypeFromCredential();
@@ -249,7 +248,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 3d07f231a..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
@@ -38,7 +38,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;
@@ -50,8 +50,6 @@
* 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);
@@ -107,14 +105,6 @@ 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());
- }
- }
-
private void next(String email, final String password) {
final FirebaseAuth firebaseAuth = mActivityHelper.getFirebaseAuth();
@@ -148,14 +138,15 @@ public void onSuccess(AuthResult authResult) {
new OnSuccessListener() {
@Override
public void onSuccess(AuthResult authResult) {
- mActivityHelper.dismissDialog();
- SmartlockUtil.saveCredentialOrFinish(
- WelcomeBackPasswordPrompt.this,
- RC_CREDENTIAL_SAVE,
- mActivityHelper.getFlowParams(),
- 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/email/RegisterEmailActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailActivity.java
index 40041a2a6..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
@@ -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,8 +56,6 @@
* 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 EditText mEmailEditText;
@@ -97,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);
@@ -155,18 +151,15 @@ 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).
- SmartlockUtil.saveCredentialOrFinish(
- RegisterEmailActivity.this,
- RC_SAVE_CREDENTIAL,
- mActivityHelper.getFlowParams(),
- firebaseUser,
- password,
- null /* provider */);
+ SmartLock.getInstance(RegisterEmailActivity.this, TAG)
+ .saveCredentialsOrFinish(RegisterEmailActivity.this,
+ mActivityHelper,
+ firebaseUser,
+ password,
+ null /* provider */);
}
});
}
@@ -199,14 +192,6 @@ 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());
- }
- }
-
@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 9663c1ea4..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
@@ -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,6 @@
*/
public class SignInActivity extends AppCompatBase implements View.OnClickListener {
private static final String TAG = "SignInActivity";
- private static final int RC_CREDENTIAL_SAVE = 101;
private EditText mEmailEditText;
private EditText mPasswordEditText;
@@ -67,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(
@@ -77,24 +77,16 @@ 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);
+ TextView recoveryButton = (TextView) findViewById(R.id.trouble_signing_in);
if (email != null) {
mEmailEditText.setText(email);
}
signInButton.setOnClickListener(this);
recoveryButton.setOnClickListener(this);
-
- }
-
- @Override
- public void onBackPressed () {
- super.onBackPressed();
}
private void signIn(String email, final String password) {
@@ -105,16 +97,13 @@ 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(
- SignInActivity.this,
- RC_CREDENTIAL_SAVE,
- mActivityHelper.getFlowParams(),
- authResult.getUser(),
- password,
- null /* provider */);
+ SmartLock.getInstance(SignInActivity.this, TAG)
+ .saveCredentialsOrFinish(SignInActivity.this,
+ mActivityHelper,
+ authResult.getUser(),
+ password,
+ null /* provider */);
}
})
.addOnFailureListener(new OnFailureListener() {
@@ -131,32 +120,20 @@ 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());
- }
- }
-
@Override
public void onClick(View view) {
if (view.getId() == R.id.button_done) {
boolean emailValid = mEmailValidator.validate(mEmailEditText.getText());
boolean passwordValid = mPasswordValidator.validate(mPasswordEditText.getText());
- if (!emailValid || !passwordValid) {
- 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/AuthMethodPickerActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivity.java
index d53a69c66..ca746e5e5 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
@@ -37,6 +37,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;
@@ -56,14 +57,11 @@
*
*/
-public class AuthMethodPickerActivity
- extends IDPBaseActivity
+public class AuthMethodPickerActivity extends IDPBaseActivity
implements 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 int RC_SAVE_CREDENTIAL = 4;
- private static final String TAG = "AuthMethodPicker";
private ArrayList mIdpProviders;
@Override
@@ -88,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:
@@ -109,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:
@@ -148,8 +146,6 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
finish(RESULT_OK, data);
}
- } else if (requestCode == RC_SAVE_CREDENTIAL) {
- finish(RESULT_OK, data);
} else if (requestCode == RC_ACCOUNT_LINK) {
finish(resultCode, data);
} else {
@@ -171,8 +167,8 @@ public void onSuccess(final IdpResponse response) {
.addOnCompleteListener(new CredentialSignInHandler(
AuthMethodPickerActivity.this,
mActivityHelper,
+ SmartLock.getInstance(AuthMethodPickerActivity.this, TAG),
RC_ACCOUNT_LINK,
- RC_SAVE_CREDENTIAL,
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 3de29302a..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
@@ -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.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;
@@ -37,28 +37,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 SmartLock mSmartLock;
private IdpResponse mResponse;
+ private int mAccountLinkResultCode;
public CredentialSignInHandler(
- Activity activity,
+ AppCompatBase activity,
ActivityHelper activityHelper,
+ SmartLock smartLock,
int accountLinkResultCode,
- int saveCredentialsResultCode,
IdpResponse response) {
mActivity = activity;
- mAccountLinkResultCode = accountLinkResultCode;
- mSaveCredentialsResultCode = saveCredentialsResultCode;
mActivityHelper = activityHelper;
+ mSmartLock = smartLock;
mResponse = response;
+ mAccountLinkResultCode = accountLinkResultCode;
}
@Override
- public void onComplete(@NonNull Task task) {
- if (!task.isSuccessful()) {
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ FirebaseUser firebaseUser = task.getResult().getUser();
+ mSmartLock.saveCredentialsOrFinish(mActivity,
+ mActivityHelper,
+ firebaseUser,
+ null /* password */,
+ mResponse.getProviderType());
+ } else {
if (task.getException() instanceof FirebaseAuthUserCollisionException) {
final String email = mResponse.getEmail();
FirebaseAuth firebaseAuth = mActivityHelper.getFirebaseAuth();
@@ -77,15 +85,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);
}
}
@@ -109,7 +110,6 @@ public void onSuccess(@NonNull ProviderQueryResult result) {
mActivityHelper.getFlowParams(),
mResponse
), mAccountLinkResultCode);
-
} else {
// Start IDP welcome back flow
mActivity.startActivityForResult(
@@ -123,5 +123,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 dcfc87ae1..fee155e1d 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
@@ -38,5 +38,4 @@ protected AuthCredential createCredential(IdpResponse idpSignInResponse) {
}
return null;
}
-
}
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 32225191c..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
@@ -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;
@@ -39,14 +40,15 @@
public class IdpSignInContainerActivity extends IDPBaseActivity implements 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 IdpProvider mIDPProvider;
+
+ private IdpProvider mIdpProvider;
private String mProvider;
private String mEmail;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+
mProvider = getIntent().getStringExtra(ExtraConstants.EXTRA_PROVIDER);
mEmail = getIntent().getStringExtra(ExtraConstants.EXTRA_EMAIL);
IdpConfig providerConfig = null;
@@ -62,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
@@ -85,8 +87,8 @@ public void onSuccess(final IdpResponse response) {
.addOnCompleteListener(new CredentialSignInHandler(
IdpSignInContainerActivity.this,
mActivityHelper,
+ SmartLock.getInstance(IdpSignInContainerActivity.this, TAG),
RC_WELCOME_BACK_IDP,
- RC_SAVE_CREDENTIALS,
response));
}
@@ -100,10 +102,8 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_WELCOME_BACK_IDP) {
finish(resultCode, data);
- } else if (requestCode == RC_SAVE_CREDENTIALS) {
- finish(RESULT_OK, data);
} else {
- mIDPProvider.onActivityResult(requestCode, resultCode, data);
+ mIdpProvider.onActivityResult(requestCode, resultCode, data);
}
}
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 50%
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 01c8f9e7b..864e2928f 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,26 +12,23 @@
* 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;
import android.os.Bundle;
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.R;
-import com.firebase.ui.auth.IdpResponse;
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;
@@ -45,84 +42,70 @@
import com.google.firebase.auth.GoogleAuthProvider;
import com.google.firebase.auth.TwitterAuthProvider;
-public class SaveCredentialsActivity extends AppCompatBase
- implements GoogleApiClient.ConnectionCallbacks, ResultCallback,
- GoogleApiClient.OnConnectionFailedListener {
+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,
+ GoogleApiClient.OnConnectionFailedListener,
+ ResultCallback {
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 String mName;
private String mEmail;
private String mPassword;
- private IdpResponse mIdpResponse;
+ private String mProvider;
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);
- mIdpResponse = getIntent().getParcelableExtra(ExtraConstants.EXTRA_IDP_RESPONSE);
- mProfilePictureUri = getIntent()
- .getStringExtra(ExtraConstants.EXTRA_PROFILE_PICTURE_URI);
-
- mCredentialsApiClient = new GoogleApiClient.Builder(this)
- .addConnectionCallbacks(this)
- .addOnConnectionFailedListener(this)
- .addApi(Auth.CREDENTIALS_API)
- .enableAutoManage(this, this)
- .build();
- }
-
@Override
public void onConnected(@Nullable Bundle bundle) {
if (mEmail == null) {
Log.e(TAG, "Unable to save null credential!");
- finish(RESULT_FIRST_USER, getIntent());
+ finish(RESULT_CANCELED);
return;
}
+
Credential.Builder builder = new Credential.Builder(mEmail);
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_CANCELED);
+ return;
}
- if (translatedProvider != null) {
- builder.setAccountType(translatedProvider);
- } else {
- Log.e(TAG, "Unable to save null credential!");
- finish(RESULT_FIRST_USER, getIntent());
- return;
- }
+ builder.setAccountType(translatedProvider);
}
}
+
if (mName != null) {
builder.setName(mName);
}
+
if (mProfilePictureUri != null) {
builder.setProfilePictureUri(Uri.parse(mProfilePictureUri));
}
+
mActivityHelper.getCredentialsApi()
.save(mCredentialsApiClient, builder.build())
.setResultCallback(this);
@@ -135,7 +118,6 @@ public void onConnectionSuspended(int i) {
}
}
-
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
if (BuildConfig.DEBUG) {
@@ -143,13 +125,22 @@ 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);
+ startIntentSenderForResult(resolution.getIntentSender(),
+ RC_UPDATE_SERVICE,
+ null,
+ 0,
+ 0,
+ 0,
+ null);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
- finish(RESULT_FIRST_USER, getIntent());
+ finish(RESULT_CANCELED);
}
}
@@ -157,20 +148,26 @@ public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
@Override
public void onResult(@NonNull Status status) {
if (status.isSuccess()) {
- finish(RESULT_OK, getIntent());
+ finish(RESULT_OK);
} 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);
+ 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);
- finish(RESULT_FIRST_USER, getIntent());
+ finish(RESULT_CANCELED);
}
} else {
- finish(RESULT_FIRST_USER, getIntent());
+ finish(RESULT_CANCELED);
}
}
}
@@ -178,42 +175,99 @@ public void onResult(@NonNull Status status) {
@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) {
Log.d(TAG, "SAVE: OK");
}
- finish(RESULT_OK, getIntent());
+ finish(RESULT_OK);
} else {
Log.e(TAG, "SAVE: Canceled by user");
- finish(RESULT_FIRST_USER, getIntent());
+ finish(RESULT_FIRST_USER);
}
} else if (requestCode == RC_UPDATE_SERVICE) {
if (resultCode == RESULT_OK) {
- Credential credential = new Credential.Builder(mEmail).setPassword(mPassword).build();
+ Credential credential = new Credential.Builder(mEmail).setPassword(mPassword)
+ .build();
mActivityHelper.getCredentialsApi()
.save(mCredentialsApiClient, credential)
.setResultCallback(this);
} else {
Log.e(TAG, "SAVE: Canceled by user");
- finish(RESULT_FIRST_USER, getIntent());
+ finish(RESULT_FIRST_USER);
}
}
}
- public static Intent createIntent(
- Context context,
- FlowParameters flowParams,
- FirebaseUser user,
- @Nullable String password,
- @Nullable IdpResponse idpResponse) {
-
- 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_IDP_RESPONSE, idpResponse)
- .putExtra(ExtraConstants.EXTRA_PROFILE_PICTURE_URI, photoUrl);
+ private void finish(int resultCode) {
+ 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.
+ *
+ * @param activity the calling Activity.
+ * @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,
+ FirebaseUser firebaseUser,
+ @Nullable String password,
+ @Nullable String provider) {
+ mActivity = activity;
+ mActivityHelper = helper;
+ 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 (!helper.getFlowParams().smartLockEnabled) {
+ finish(RESULT_CANCELED);
+ return;
+ }
+
+ // If Play Services is not available, finish the Activity
+ if (!PlayServicesHelper.getInstance(activity).isPlayServicesAvailable()) {
+ finish(RESULT_CANCELED);
+ return;
+ }
+
+ if (!FirebaseAuthWrapperFactory
+ .getFirebaseAuthWrapper(helper.getFlowParams().appName)
+ .isPlayServicesAvailable(activity)) {
+ finish(RESULT_CANCELED);
+ return;
+ }
+
+ mCredentialsApiClient = new GoogleApiClient.Builder(activity)
+ .addConnectionCallbacks(this)
+ .addOnConnectionFailedListener(this)
+ .addApi(Auth.CREDENTIALS_API)
+ .enableAutoManage(activity, this)
+ .build();
+ }
+
+ public static SmartLock getInstance(AppCompatBase activity, String tag) {
+ 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/main/java/com/firebase/ui/auth/util/SmartlockUtil.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartLockUtil.java
similarity index 55%
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 78eb55677..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
@@ -1,16 +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.IdpResponse;
-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.google.android.gms.auth.api.credentials.Credential;
import com.google.android.gms.auth.api.credentials.IdentityProviders;
import com.google.firebase.auth.EmailAuthProvider;
@@ -27,45 +20,9 @@
/**
* Helper class to deal with Smartlock Flows.
*/
-public class SmartlockUtil {
-
+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 idpResponse (optional) response from signing in with a credential.
- */
- public static void saveCredentialOrFinish(Activity activity,
- int requestCode,
- FlowParameters parameters,
- FirebaseUser firebaseUser,
- @Nullable String password,
- @Nullable IdpResponse idpResponse) {
-
- // If SmartLock is disabled, finish the Activity
- if (!parameters.smartLockEnabled) {
- finishActivity(activity, idpResponse);
- return;
- }
-
- // If Play Services is not available, finish the Activity
- if(!PlayServicesHelper.getInstance(activity).isPlayServicesAvailable()) {
- finishActivity(activity, idpResponse);
- return;
- }
-
- // Launch save activity
- Intent saveCredentialIntent = SaveCredentialsActivity.createIntent(activity, parameters,
- firebaseUser, password, idpResponse);
- 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}).
@@ -119,12 +76,4 @@ public static List credentialsFromFirebaseUser(@NonNull FirebaseUser
return credentials;
}
-
- private static void finishActivity(Activity activity, IdpResponse idpResponse) {
- activity.setResult(
- Activity.RESULT_OK,
- new Intent().putExtra(ExtraConstants.EXTRA_IDP_RESPONSE, idpResponse));
- activity.finish();
- }
-
}
diff --git a/auth/src/main/res/values/styles.xml b/auth/src/main/res/values/styles.xml
index f46b9d0e4..4f0a8e8cd 100644
--- a/auth/src/main/res/values/styles.xml
+++ b/auth/src/main/res/values/styles.xml
@@ -251,12 +251,4 @@
- @drawable/idp_button_background_twitter
- @color/tw__solid_white
-
-
diff --git a/auth/src/test/java/com/firebase/ui/auth/test_helpers/SmartLockResult.java b/auth/src/test/java/com/firebase/ui/auth/test_helpers/SmartLockResult.java
new file mode 100644
index 000000000..23474721f
--- /dev/null
+++ b/auth/src/test/java/com/firebase/ui/auth/test_helpers/SmartLockResult.java
@@ -0,0 +1,56 @@
+package com.firebase.ui.auth.test_helpers;
+
+import android.support.annotation.Nullable;
+import android.support.v4.app.FragmentActivity;
+
+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;
+
+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() != null
+ ? firebaseUser.getPhotoUrl().toString() : null, TestConstants.PHOTO_URL);
+ assertEquals(password, mPassword);
+ assertEquals(provider, mProvider);
+ mCountDownLatch.countDown();
+ }
+
+ public static SmartLockResult newInstance(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;
+ }
+}
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 a5a622400..ba066e7b5 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,9 @@
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.ui.ExtraConstants;
-import com.firebase.ui.auth.ui.account_link.SaveCredentialsActivity;
import com.firebase.ui.auth.util.PlayServicesHelper;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseUser;
@@ -42,14 +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 junit.framework.Assert.assertTrue;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.when;
@@ -110,40 +107,30 @@ public void testSignUpButton_successfulRegistrationShouldContinueToSaveCredentia
FirebaseUser mockFirebaseUser = Mockito.mock(FirebaseUser.class);
when(mockFirebaseUser.getEmail()).thenReturn(TestConstants.EMAIL);
when(mockFirebaseUser.getDisplayName()).thenReturn(TestConstants.NAME);
- when(mockFirebaseUser.updateProfile((UserProfileChangeRequest) Mockito.anyObject()))
+ when(mockFirebaseUser.getPhotoUrl()).thenReturn(TestConstants.PHOTO_URI);
+ when(mockFirebaseUser.updateProfile((UserProfileChangeRequest) Mockito.any()))
.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));
+
+ SmartLockResult result = SmartLockResult.newInstance(registerEmailActivity,
+ "RegisterEmailActivity",
+ TestConstants.PASSWORD,
+ 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(
- SaveCredentialsActivity.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));
+ 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 bd3802cd4..dc547aae5 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,10 +26,9 @@
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.ui.ExtraConstants;
-import com.firebase.ui.auth.ui.account_link.SaveCredentialsActivity;
import com.firebase.ui.auth.util.PlayServicesHelper;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseUser;
@@ -45,6 +44,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;
@@ -54,7 +54,6 @@
@RunWith(CustomRobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 23)
public class SignInActivityTest {
-
@Before
public void setUp() {
TestHelper.initializeApp(RuntimeEnvironment.application);
@@ -67,9 +66,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
@@ -112,6 +114,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();
@@ -120,23 +128,10 @@ public void testSignInButton_signsInAndSavesCredentials() {
TestConstants.EMAIL,
TestConstants.PASSWORD);
- ShadowActivity.IntentForResult nextIntent =
- Shadows.shadowOf(signInActivity).getNextStartedActivityForResult();
- assertEquals(
- SaveCredentialsActivity.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)
- );
+ 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 185e67106..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
@@ -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;
@@ -31,10 +30,8 @@
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.SmartLockResult;
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;
@@ -47,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;
@@ -59,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)
@@ -140,18 +137,26 @@ 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));
+
+ SmartLockResult result = SmartLockResult.newInstance(authMethodPickerActivity,
+ "AuthMethodPicker",
+ null,
+ FacebookAuthProvider.PROVIDER_ID);
+
Button facebookButton =
(Button) authMethodPickerActivity.findViewById(R.id.facebook_button);
assertNotNull(facebookButton);
facebookButton.performClick();
- ShadowActivity.IntentForResult nextIntent =
- Shadows.shadowOf(authMethodPickerActivity).getNextStartedActivityForResult();
- verifySaveCredentialIntent(nextIntent, FacebookAuthProvider.PROVIDER_ID);
+ try {
+ result.await();
+ } catch (InterruptedException e) {
+ assertTrue("Interrupted waiting for result", false);
+ }
}
@Test
@@ -166,18 +171,26 @@ 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));
+
+ SmartLockResult result = SmartLockResult.newInstance(authMethodPickerActivity,
+ "AuthMethodPicker",
+ 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
@@ -192,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 =
@@ -206,33 +219,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(
- TestConstants.EMAIL,
- nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_EMAIL));
- assertEquals(
- TestConstants.NAME,
- nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_NAME));
- assertEquals(
- TestConstants.PHOTO_URL,
- nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PROFILE_PICTURE_URI));
- assertEquals(
- provider,
- ((IdpResponse) nextIntent
- .intent
- .getExtras()
- .getParcelable(ExtraConstants.EXTRA_IDP_RESPONSE)).getProviderType());
- assertEquals(
- null,
- nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PASSWORD));
- }
-
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 6e90ae9e9..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
@@ -14,7 +14,6 @@
package com.firebase.ui.auth.ui.idp;
-import android.app.Activity;
import android.content.Context;
import android.content.Intent;
@@ -29,13 +28,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.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;
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;
@@ -63,16 +63,15 @@
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 {
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";
- @Mock private CredentialsAPI mCredentialsAPI;
+ @Mock
+ private CredentialsAPI mCredentialsAPI;
private FirebaseApp mFirebaseApp;
@Before
@@ -88,23 +87,25 @@ 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(
GoogleAuthProvider.PROVIDER_ID,
TestConstants.EMAIL);
+ SmartLock smartLock = mock(SmartLock.class);
CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler(
mockActivity,
mockActivityHelper,
+ smartLock,
RC_ACCOUNT_LINK,
- RC_SAVE_CREDENTIALS,
idpResponse);
Context mockContext = mock(Context.class);
// Build basic flow parameters
FlowParameters flowParams = AuthUI.getInstance(mFirebaseApp)
- .createSignInIntentBuilder().build()
+ .createSignInIntentBuilder()
+ .build()
.getParcelableExtra(ExtraConstants.EXTRA_FLOW_PARAMS);
Task signInTask = Tasks.forResult(new FakeAuthResult(mockFirebaseUser));
@@ -112,29 +113,16 @@ 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());
- assertEquals(
- SaveCredentialsActivity.class.getName(),
- capturedIntent.getComponent().getClassName());
- assertEquals(
- TestConstants.EMAIL,
- capturedIntent.getExtras().getString(ExtraConstants.EXTRA_EMAIL));
- assertEquals(
- TestConstants.NAME,
- capturedIntent.getExtras().getString(ExtraConstants.EXTRA_NAME));
- assertEquals(
- TestConstants.PHOTO_URL,
- capturedIntent.getExtras().getString(ExtraConstants.EXTRA_PROFILE_PICTURE_URI));
+ verify(smartLock).saveCredentialsOrFinish(mockActivity,
+ mockActivityHelper,
+ mockFirebaseUser,
+ null,
+ GoogleAuthProvider.PROVIDER_ID);
}
@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(
@@ -143,8 +131,8 @@ public void testSignInFailed_withFacebookAlreadyLinked() {
CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler(
mockActivity,
mockActivityHelper,
+ null,
RC_ACCOUNT_LINK,
- RC_SAVE_CREDENTIALS,
idpResponse);
Context mockContext = mock(Context.class);
@@ -180,10 +168,9 @@ 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(
@@ -192,8 +179,8 @@ public void testSignInFailed_withPasswordAccountAlreadyLinked() {
CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler(
mockActivity,
mockActivityHelper,
+ null,
RC_ACCOUNT_LINK,
- RC_SAVE_CREDENTIALS,
idpResponse);
Context mockContext = mock(Context.class);
@@ -225,7 +212,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());
}
}