Skip to content

Commit 0977088

Browse files
committed
Refactor save credential logic
Change-Id: I40128ba39ff72bf0e0d0825cca25a652becf861f
1 parent 63ec065 commit 0977088

File tree

8 files changed

+113
-76
lines changed

8 files changed

+113
-76
lines changed

auth/src/main/java/com/firebase/ui/auth/ui/ExtraConstants.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,4 @@ public class ExtraConstants {
2727
public static final String EXTRA_PROFILE_PICTURE_URI = "extra_profile_picture_uri";
2828
public static final String EXTRA_PROVIDER = "extra_provider";
2929
public static final String EXTRA_SUCCESS = "success_extra";
30-
public static final String EXTRA_SMARTLOCK_ENABLED = "extra_smartlock_enabled";
3130
}

auth/src/main/java/com/firebase/ui/auth/ui/account_link/SaveCredentialsActivity.java

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import com.google.android.gms.common.api.ResultCallback;
4141
import com.google.android.gms.common.api.Status;
4242
import com.google.firebase.auth.FacebookAuthProvider;
43+
import com.google.firebase.auth.FirebaseUser;
4344
import com.google.firebase.auth.GoogleAuthProvider;
4445

4546
public class SaveCredentialsActivity extends AppCompatBase
@@ -61,12 +62,6 @@ protected void onCreate(Bundle savedInstanceState) {
6162
super.onCreate(savedInstanceState);
6263
setContentView(R.layout.save_credentials_layout);
6364

64-
// If SmartLock is not enabled, finish immediately
65-
if (!getIntent().getBooleanExtra(ExtraConstants.EXTRA_SMARTLOCK_ENABLED, true)) {
66-
finish(RESULT_OK, getIntent());
67-
return;
68-
}
69-
7065
if (!FirebaseAuthWrapperFactory.getFirebaseAuthWrapper(mActivityHelper.getAppName())
7166
.isPlayServicesAvailable(this)) {
7267
finish(RESULT_FIRST_USER, getIntent());
@@ -215,17 +210,16 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
215210
public static Intent createIntent(
216211
Context context,
217212
FlowParameters flowParams,
218-
String name,
219-
String email,
220-
String password,
221-
String provider,
222-
String profilePictureUri) {
213+
FirebaseUser user,
214+
@Nullable String password,
215+
@Nullable String provider) {
216+
217+
String photoUrl = user.getPhotoUrl() != null ? user.getPhotoUrl().toString() : null;
223218
return ActivityHelper.createBaseIntent(context, SaveCredentialsActivity.class, flowParams)
224-
.putExtra(ExtraConstants.EXTRA_NAME, name)
225-
.putExtra(ExtraConstants.EXTRA_EMAIL, email)
219+
.putExtra(ExtraConstants.EXTRA_NAME, user.getDisplayName())
220+
.putExtra(ExtraConstants.EXTRA_EMAIL, user.getEmail())
226221
.putExtra(ExtraConstants.EXTRA_PASSWORD, password)
227222
.putExtra(ExtraConstants.EXTRA_PROVIDER, provider)
228-
.putExtra(ExtraConstants.EXTRA_PROFILE_PICTURE_URI, profilePictureUri)
229-
.putExtra(ExtraConstants.EXTRA_SMARTLOCK_ENABLED, flowParams.smartLockEnabled);
223+
.putExtra(ExtraConstants.EXTRA_PROFILE_PICTURE_URI, photoUrl);
230224
}
231225
}

auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import com.firebase.ui.auth.ui.TaskFailureLogger;
4141
import com.firebase.ui.auth.ui.email.PasswordToggler;
4242
import com.firebase.ui.auth.ui.email.RecoverPasswordActivity;
43+
import com.firebase.ui.auth.util.SmartlockUtil;
4344
import com.google.android.gms.tasks.OnCompleteListener;
4445
import com.google.android.gms.tasks.OnSuccessListener;
4546
import com.google.android.gms.tasks.Task;
@@ -134,16 +135,14 @@ public void onSuccess(AuthResult authResult) {
134135
photoUrl = photoUri.toString();
135136
}
136137
mActivityHelper.dismissDialog();
137-
startActivityForResult(
138-
SaveCredentialsActivity.createIntent(
139-
mActivityHelper.getApplicationContext(),
140-
mActivityHelper.getFlowParams(),
141-
firebaseUser.getDisplayName(),
142-
firebaseUser.getEmail(),
143-
password,
144-
null,
145-
photoUrl
146-
), RC_CREDENTIAL_SAVE);
138+
139+
SmartlockUtil.saveCredentialOrFinish(
140+
WelcomeBackPasswordPrompt.this,
141+
RC_CREDENTIAL_SAVE,
142+
mActivityHelper.getFlowParams(),
143+
firebaseUser,
144+
password,
145+
null /* provider */);
147146
}
148147
});
149148
} else {

auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailActivity.java

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,10 @@
3636
import com.firebase.ui.auth.ui.ExtraConstants;
3737
import com.firebase.ui.auth.ui.FlowParameters;
3838
import com.firebase.ui.auth.ui.TaskFailureLogger;
39-
import com.firebase.ui.auth.ui.account_link.SaveCredentialsActivity;
4039
import com.firebase.ui.auth.ui.email.field_validators.EmailFieldValidator;
4140
import com.firebase.ui.auth.ui.email.field_validators.PasswordFieldValidator;
4241
import com.firebase.ui.auth.ui.email.field_validators.RequiredFieldValidator;
43-
import com.firebase.ui.auth.util.FirebaseAuthWrapperFactory;
42+
import com.firebase.ui.auth.util.SmartlockUtil;
4443
import com.google.android.gms.tasks.OnCompleteListener;
4544
import com.google.android.gms.tasks.Task;
4645
import com.google.firebase.auth.AuthResult;
@@ -127,21 +126,6 @@ public void onClick(View view) {
127126
});
128127
}
129128

130-
private void startSaveCredentials(FirebaseUser firebaseUser, String password) {
131-
if (FirebaseAuthWrapperFactory.getFirebaseAuthWrapper(mActivityHelper.getFlowParams().appName)
132-
.isPlayServicesAvailable(this)) {
133-
Intent saveCredentialIntent = SaveCredentialsActivity.createIntent(
134-
this,
135-
mActivityHelper.getFlowParams(),
136-
firebaseUser.getDisplayName(),
137-
firebaseUser.getEmail(),
138-
password,
139-
null,
140-
null);
141-
startActivityForResult(saveCredentialIntent, RC_SAVE_CREDENTIAL);
142-
}
143-
}
144-
145129
private void registerUser(String email, final String name, final String password) {
146130
final FirebaseAuth firebaseAuth = mActivityHelper.getFirebaseAuth();
147131
// create the user
@@ -164,7 +148,13 @@ public void onComplete(@NonNull Task<AuthResult> task) {
164148
public void onComplete(@NonNull Task<Void> task) {
165149
mActivityHelper.dismissDialog();
166150
if (task.isSuccessful()) {
167-
startSaveCredentials(firebaseUser, password);
151+
SmartlockUtil.saveCredentialOrFinish(
152+
RegisterEmailActivity.this,
153+
RC_SAVE_CREDENTIAL,
154+
mActivityHelper.getFlowParams(),
155+
firebaseUser,
156+
password,
157+
null /* provider */);
168158
}
169159
}
170160
});

auth/src/main/java/com/firebase/ui/auth/ui/email/SignInActivity.java

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,18 @@
3232
import com.firebase.ui.auth.ui.ExtraConstants;
3333
import com.firebase.ui.auth.ui.FlowParameters;
3434
import com.firebase.ui.auth.ui.TaskFailureLogger;
35-
import com.firebase.ui.auth.ui.account_link.SaveCredentialsActivity;
3635
import com.firebase.ui.auth.ui.email.field_validators.EmailFieldValidator;
3736
import com.firebase.ui.auth.ui.email.field_validators.RequiredFieldValidator;
38-
import com.firebase.ui.auth.util.FirebaseAuthWrapperFactory;
37+
import com.firebase.ui.auth.util.SmartlockUtil;
3938
import com.google.android.gms.tasks.OnCompleteListener;
4039
import com.google.android.gms.tasks.Task;
4140
import com.google.firebase.auth.AuthResult;
4241
import com.google.firebase.auth.FirebaseUser;
4342

4443
public class SignInActivity extends AppCompatBase implements View.OnClickListener {
4544
private static final String TAG = "SignInActivity";
45+
private static final int RC_CREDENTIAL_SAVE = 101;
46+
4647
private EditText mEmailEditText;
4748
private EditText mPasswordEditText;
4849
private EmailFieldValidator mEmailValidator;
@@ -106,21 +107,13 @@ public void onComplete(@NonNull Task<AuthResult> task) {
106107
mActivityHelper.dismissDialog();
107108
if (task.isSuccessful()) {
108109
FirebaseUser firebaseUser = task.getResult().getUser();
109-
if (FirebaseAuthWrapperFactory.getFirebaseAuthWrapper(
110-
mActivityHelper.getAppName())
111-
.isPlayServicesAvailable(SignInActivity.this)) {
112-
Intent saveCredentialIntent =
113-
SaveCredentialsActivity.createIntent(
114-
SignInActivity.this,
115-
mActivityHelper.getFlowParams(),
116-
firebaseUser.getDisplayName(),
117-
firebaseUser.getEmail(),
118-
password,
119-
null,
120-
null);
121-
startActivity(saveCredentialIntent);
122-
finish(RESULT_OK, new Intent());
123-
}
110+
SmartlockUtil.saveCredentialOrFinish(
111+
SignInActivity.this,
112+
RC_CREDENTIAL_SAVE,
113+
mActivityHelper.getFlowParams(),
114+
firebaseUser,
115+
password,
116+
null /* provider */);
124117
} else {
125118
TextInputLayout passwordInput =
126119
(TextInputLayout) findViewById(R.id.password_layout);
@@ -131,6 +124,14 @@ public void onComplete(@NonNull Task<AuthResult> task) {
131124
});
132125
}
133126

127+
@Override
128+
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
129+
super.onActivityResult(requestCode, resultCode, data);
130+
if (requestCode == RC_CREDENTIAL_SAVE) {
131+
finish(RESULT_OK, new Intent());
132+
}
133+
}
134+
134135
@Override
135136
public void onClick(View view) {
136137
if (view.getId() == R.id.button_done) {

auth/src/main/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandler.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222
import com.firebase.ui.auth.provider.IDPResponse;
2323
import com.firebase.ui.auth.ui.ActivityHelper;
2424
import com.firebase.ui.auth.ui.TaskFailureLogger;
25-
import com.firebase.ui.auth.ui.account_link.SaveCredentialsActivity;
2625
import com.firebase.ui.auth.ui.account_link.WelcomeBackIDPPrompt;
2726
import com.firebase.ui.auth.ui.account_link.WelcomeBackPasswordPrompt;
27+
import com.firebase.ui.auth.util.SmartlockUtil;
2828
import com.google.android.gms.tasks.OnCompleteListener;
2929
import com.google.android.gms.tasks.OnSuccessListener;
3030
import com.google.android.gms.tasks.Task;
@@ -82,15 +82,10 @@ public void onComplete(@NonNull Task <AuthResult> task) {
8282
photoUrl = photoUri.toString();
8383
}
8484
mActivityHelper.dismissDialog();
85-
mActivity.startActivityForResult(SaveCredentialsActivity.createIntent(
86-
mActivityHelper.getApplicationContext(),
87-
mActivityHelper.getFlowParams(),
88-
firebaseUser.getDisplayName(),
89-
firebaseUser.getEmail(),
90-
null,
91-
mResponse.getProviderType(),
92-
photoUrl
93-
), mSaveCredentialsResultCode);
85+
86+
SmartlockUtil.saveCredentialOrFinish(mActivity, mSaveCredentialsResultCode,
87+
mActivityHelper.getFlowParams(), firebaseUser,
88+
null /* password */, mResponse.getProviderType());
9489
}
9590
}
9691

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.firebase.ui.auth.util;
2+
3+
import android.app.Activity;
4+
import android.content.Intent;
5+
import android.support.annotation.Nullable;
6+
7+
import com.firebase.ui.auth.ui.FlowParameters;
8+
import com.firebase.ui.auth.ui.account_link.SaveCredentialsActivity;
9+
import com.google.firebase.auth.FirebaseUser;
10+
11+
/**
12+
* Helper class to deal with Smartlock Flows.
13+
*/
14+
public class SmartlockUtil {
15+
16+
/**
17+
* If SmartLock is enabled and Google Play Services is available, start the save credential
18+
* Activity. Otherwise, finish the calling Activity with RESULT_OK.
19+
* @param activity the calling Activity.
20+
* @param requestCode request code to use when starting the save operation.
21+
* @param parameters calling Activity flow parameters.
22+
* @param firebaseUser Firebase user to save in Credential.
23+
* @param password (optional) password for email credential.
24+
* @param provider (optional) provider string for provider credential.
25+
*/
26+
public static void saveCredentialOrFinish(Activity activity,
27+
int requestCode,
28+
FlowParameters parameters,
29+
FirebaseUser firebaseUser,
30+
@Nullable String password,
31+
@Nullable String provider) {
32+
33+
// If SmartLock is disabled, finish the Activity
34+
if (!parameters.smartLockEnabled) {
35+
finishActivity(activity);
36+
return;
37+
}
38+
39+
// If Play Services is not available, finish the Activity
40+
41+
if(!FirebaseAuthWrapperFactory
42+
.getFirebaseAuthWrapper(parameters.appName)
43+
.isPlayServicesAvailable(activity)) {
44+
finishActivity(activity);
45+
return;
46+
}
47+
48+
// Launch save activity
49+
Intent saveCredentialIntent = SaveCredentialsActivity.createIntent(activity, parameters,
50+
firebaseUser, password, provider);
51+
activity.startActivityForResult(saveCredentialIntent, requestCode);
52+
}
53+
54+
private static void finishActivity(Activity activity) {
55+
activity.setResult(Activity.RESULT_OK, new Intent());
56+
activity.finish();
57+
}
58+
59+
}

auth/src/test/java/com/firebase/ui/auth/test_helpers/TestHelper.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@
1414

1515
package com.firebase.ui.auth.test_helpers;
1616

17-
import static org.mockito.Mockito.mock;
18-
import static org.mockito.Mockito.when;
19-
2017
import android.content.Context;
2118

2219
import com.firebase.ui.auth.AuthUI;
@@ -28,6 +25,9 @@
2825

2926
import java.util.List;
3027

28+
import static org.mockito.Mockito.mock;
29+
import static org.mockito.Mockito.when;
30+
3131
public class TestHelper {
3232
private static final String APPLICATION_ID = "testAppId";
3333
private static final String API_KEY = "fakeKey";
@@ -53,8 +53,8 @@ public static FlowParameters getFlowParameters(Context context, List<String> pro
5353
ProviderHelper.getProviderParcels(context, providerIds),
5454
AuthUI.getDefaultTheme(),
5555
AuthUI.NO_LOGO,
56-
null
57-
);
56+
null,
57+
true);
5858
}
5959

6060
public static FirebaseUser makeMockFirebaseUser() {

0 commit comments

Comments
 (0)