Skip to content

Commit c5e862e

Browse files
SUPERCILEXsamtstern
authored andcommitted
Merge more improvements from anonymous-auth PR (#859)
1 parent f6ab0b9 commit c5e862e

22 files changed

+209
-166
lines changed

app/src/main/java/com/firebase/uidemo/auth/AuthUiActivity.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public class AuthUiActivity extends AppCompatActivity {
5353
private static final String FIREBASE_TOS_URL = "https://firebase.google.com/terms/";
5454
private static final String GOOGLE_PRIVACY_POLICY_URL = "https://www.google.com/policies/privacy/";
5555
private static final String FIREBASE_PRIVACY_POLICY_URL = "https://firebase.google.com/terms/analytics/#7_privacy";
56+
5657
private static final int RC_SIGN_IN = 100;
5758

5859
@BindView(R.id.default_theme)
@@ -137,9 +138,7 @@ public class AuthUiActivity extends AppCompatActivity {
137138
CheckBox mGoogleScopeYoutubeData;
138139

139140
public static Intent createIntent(Context context) {
140-
Intent in = new Intent();
141-
in.setClass(context, AuthUiActivity.class);
142-
return in;
141+
return new Intent(context, AuthUiActivity.class);
143142
}
144143

145144
@Override

app/src/main/java/com/firebase/uidemo/auth/SignedInActivity.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,7 @@ public void onComplete(@NonNull Task<Void> task) {
133133

134134
@OnClick(R.id.delete_account)
135135
public void deleteAccountClicked() {
136-
137-
AlertDialog dialog = new AlertDialog.Builder(this)
136+
new AlertDialog.Builder(this)
138137
.setMessage("Are you sure you want to delete this account?")
139138
.setPositiveButton("Yes, nuke it!", new DialogInterface.OnClickListener() {
140139
@Override
@@ -143,9 +142,7 @@ public void onClick(DialogInterface dialogInterface, int i) {
143142
}
144143
})
145144
.setNegativeButton("No", null)
146-
.create();
147-
148-
dialog.show();
145+
.show();
149146
}
150147

151148
private void deleteAccount() {

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,14 @@ public class IdpResponse implements Parcelable {
3535
private final User mUser;
3636
private final String mToken;
3737
private final String mSecret;
38+
3839
private final int mErrorCode;
3940

4041
private IdpResponse(int errorCode) {
4142
this(null, null, null, errorCode);
4243
}
4344

44-
private IdpResponse(
45-
User user,
46-
String token,
47-
String secret,
48-
int errorCode) {
45+
private IdpResponse(User user, String token, String secret, int errorCode) {
4946
mUser = user;
5047
mToken = token;
5148
mSecret = secret;
@@ -77,6 +74,11 @@ public Intent toIntent() {
7774
return new Intent().putExtra(ExtraConstants.EXTRA_IDP_RESPONSE, this);
7875
}
7976

77+
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
78+
public User getUser() {
79+
return mUser;
80+
}
81+
8082
/**
8183
* Get the type of provider. e.g. {@link AuthUI#GOOGLE_PROVIDER}
8284
*/

auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackIdpPrompt.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import com.firebase.ui.auth.ErrorCodes;
3131
import com.firebase.ui.auth.IdpResponse;
3232
import com.firebase.ui.auth.R;
33+
import com.firebase.ui.auth.User;
3334
import com.firebase.ui.auth.provider.FacebookProvider;
3435
import com.firebase.ui.auth.provider.GoogleProvider;
3536
import com.firebase.ui.auth.provider.IdpProvider;
@@ -41,7 +42,6 @@
4142
import com.firebase.ui.auth.ui.FlowParameters;
4243
import com.firebase.ui.auth.ui.HelperActivityBase;
4344
import com.firebase.ui.auth.ui.TaskFailureLogger;
44-
import com.firebase.ui.auth.User;
4545
import com.google.android.gms.tasks.OnCompleteListener;
4646
import com.google.android.gms.tasks.OnFailureListener;
4747
import com.google.android.gms.tasks.OnSuccessListener;
@@ -138,10 +138,6 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
138138

139139
@Override
140140
public void onSuccess(final IdpResponse idpResponse) {
141-
if (idpResponse == null) {
142-
return; // do nothing
143-
}
144-
145141
AuthCredential newCredential = ProviderUtils.getAuthCredential(idpResponse);
146142
if (newCredential == null) {
147143
Log.e(TAG, "No credential returned");

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

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,22 +34,22 @@
3434
import com.firebase.ui.auth.ErrorCodes;
3535
import com.firebase.ui.auth.IdpResponse;
3636
import com.firebase.ui.auth.R;
37+
import com.firebase.ui.auth.User;
3738
import com.firebase.ui.auth.provider.ProviderUtils;
3839
import com.firebase.ui.auth.ui.AppCompatBase;
3940
import com.firebase.ui.auth.ui.ExtraConstants;
4041
import com.firebase.ui.auth.ui.FlowParameters;
4142
import com.firebase.ui.auth.ui.HelperActivityBase;
4243
import com.firebase.ui.auth.ui.ImeHelper;
4344
import com.firebase.ui.auth.ui.TaskFailureLogger;
44-
import com.firebase.ui.auth.User;
4545
import com.firebase.ui.auth.ui.email.RecoverPasswordActivity;
46+
import com.firebase.ui.auth.util.accountlink.ProfileMerger;
4647
import com.firebase.ui.auth.util.signincontainer.SaveSmartLock;
4748
import com.google.android.gms.tasks.OnFailureListener;
4849
import com.google.android.gms.tasks.OnSuccessListener;
4950
import com.google.firebase.auth.AuthCredential;
5051
import com.google.firebase.auth.AuthResult;
5152
import com.google.firebase.auth.EmailAuthProvider;
52-
import com.google.firebase.auth.FirebaseAuth;
5353

5454
/**
5555
* Activity to link a pre-existing email/password account to a new IDP sign-in by confirming the
@@ -143,32 +143,38 @@ private void validateAndSignIn(final String email, final String password) {
143143
}
144144
getDialogHolder().showLoadingDialog(R.string.fui_progress_dialog_signing_in);
145145

146-
final FirebaseAuth firebaseAuth = getAuthHelper().getFirebaseAuth();
146+
final AuthCredential authCredential = ProviderUtils.getAuthCredential(mIdpResponse);
147+
148+
final IdpResponse response;
149+
if (authCredential == null) {
150+
response = new IdpResponse.Builder(
151+
new User.Builder(EmailAuthProvider.PROVIDER_ID, email).build())
152+
.build();
153+
} else {
154+
response = new IdpResponse.Builder(mIdpResponse.getUser())
155+
.setToken(mIdpResponse.getIdpToken())
156+
.setSecret(mIdpResponse.getIdpSecret())
157+
.build();
158+
}
147159

148160
// Sign in with known email and the password provided
149-
firebaseAuth.signInWithEmailAndPassword(email, password)
150-
.addOnFailureListener(
151-
new TaskFailureLogger(TAG, "Error signing in with email and password"))
161+
getAuthHelper().getFirebaseAuth()
162+
.signInWithEmailAndPassword(email, password)
152163
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
153164
@Override
154165
public void onSuccess(AuthResult authResult) {
155-
AuthCredential authCredential =
156-
ProviderUtils.getAuthCredential(mIdpResponse);
157-
158166
// If authCredential is null, the user only has an email account.
159167
// Otherwise, the user has an email account that we need to link to an idp.
160168
if (authCredential == null) {
161169
saveCredentialsOrFinish(
162170
mSaveSmartLock,
163171
authResult.getUser(),
164172
password,
165-
new IdpResponse.Builder(
166-
new User.Builder(EmailAuthProvider.PROVIDER_ID, email)
167-
.build())
168-
.build());
173+
response);
169174
} else {
170175
authResult.getUser()
171176
.linkWithCredential(authCredential)
177+
.continueWithTask(new ProfileMerger(response))
172178
.addOnFailureListener(new TaskFailureLogger(
173179
TAG, "Error signing in with credential " +
174180
authCredential.getProvider()))
@@ -178,12 +184,14 @@ public void onSuccess(AuthResult authResult) {
178184
saveCredentialsOrFinish(
179185
mSaveSmartLock,
180186
authResult.getUser(),
181-
mIdpResponse);
187+
response);
182188
}
183189
});
184190
}
185191
}
186192
})
193+
.addOnFailureListener(
194+
new TaskFailureLogger(TAG, "Error signing in with email and password"))
187195
.addOnFailureListener(this, new OnFailureListener() {
188196
@Override
189197
public void onFailure(@NonNull Exception e) {

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

Lines changed: 15 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.firebase.ui.auth.ui.HelperActivityBase;
2626
import com.firebase.ui.auth.ui.ImeHelper;
2727
import com.firebase.ui.auth.ui.TaskFailureLogger;
28+
import com.firebase.ui.auth.util.accountlink.ProfileMerger;
2829
import com.firebase.ui.auth.ui.accountlink.WelcomeBackIdpPrompt;
2930
import com.firebase.ui.auth.ui.accountlink.WelcomeBackPasswordPrompt;
3031
import com.firebase.ui.auth.ui.email.fieldvalidators.EmailFieldValidator;
@@ -41,8 +42,6 @@
4142
import com.google.firebase.auth.FirebaseAuthInvalidCredentialsException;
4243
import com.google.firebase.auth.FirebaseAuthUserCollisionException;
4344
import com.google.firebase.auth.FirebaseAuthWeakPasswordException;
44-
import com.google.firebase.auth.FirebaseUser;
45-
import com.google.firebase.auth.UserProfileChangeRequest;
4645

4746
/**
4847
* Fragment to display an email/name/password sign up form for new users.
@@ -228,40 +227,25 @@ private void validateAndRegisterUser() {
228227
}
229228

230229
private void registerUser(final String email, final String name, final String password) {
230+
final IdpResponse response = new IdpResponse.Builder(
231+
new User.Builder(EmailAuthProvider.PROVIDER_ID, email)
232+
.setName(name)
233+
.setPhotoUri(mUser.getPhotoUri())
234+
.build())
235+
.build();
236+
231237
getAuthHelper().getFirebaseAuth()
232238
.createUserWithEmailAndPassword(email, password)
239+
.continueWithTask(new ProfileMerger(response))
233240
.addOnFailureListener(new TaskFailureLogger(TAG, "Error creating user"))
234-
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
241+
.addOnSuccessListener(getActivity(), new OnSuccessListener<AuthResult>() {
235242
@Override
236243
public void onSuccess(AuthResult authResult) {
237-
// Set display name
238-
UserProfileChangeRequest changeNameRequest =
239-
new UserProfileChangeRequest.Builder()
240-
.setDisplayName(name)
241-
.setPhotoUri(mUser.getPhotoUri())
242-
.build();
243-
244-
final FirebaseUser user = authResult.getUser();
245-
user.updateProfile(changeNameRequest)
246-
.addOnFailureListener(new TaskFailureLogger(
247-
TAG, "Error setting display name"))
248-
.addOnCompleteListener(new OnCompleteListener<Void>() {
249-
@Override
250-
public void onComplete(@NonNull Task<Void> task) {
251-
// This executes even if the name change fails, since
252-
// the account creation succeeded and we want to save
253-
// the credential to SmartLock (if enabled).
254-
IdpResponse response = new IdpResponse.Builder(
255-
new User.Builder(EmailAuthProvider.PROVIDER_ID, email)
256-
.setName(name)
257-
.setPhotoUri(mUser.getPhotoUri())
258-
.build())
259-
.build();
260-
261-
mActivity.saveCredentialsOrFinish(
262-
mSaveSmartLock, user, password, response);
263-
}
264-
});
244+
mActivity.saveCredentialsOrFinish(
245+
mSaveSmartLock,
246+
authResult.getUser(),
247+
password,
248+
response);
265249
}
266250
})
267251
.addOnFailureListener(getActivity(), new OnFailureListener() {

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

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ public class AuthMethodPickerActivity extends AppCompatBase implements IdpCallba
6868
private SaveSmartLock mSaveSmartLock;
6969

7070
public static Intent createIntent(Context context, FlowParameters flowParams) {
71-
return HelperActivityBase.createBaseIntent(context, AuthMethodPickerActivity.class, flowParams);
71+
return HelperActivityBase.createBaseIntent(
72+
context, AuthMethodPickerActivity.class, flowParams);
7273
}
7374

7475
@Override
@@ -155,19 +156,19 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
155156
}
156157

157158
@Override
158-
public void onSuccess(final IdpResponse response) {
159+
public void onSuccess(IdpResponse response) {
159160
AuthCredential credential = ProviderUtils.getAuthCredential(response);
160161
getAuthHelper().getFirebaseAuth()
161162
.signInWithCredential(credential)
162-
.addOnFailureListener(
163-
new TaskFailureLogger(TAG, "Firebase sign in with credential "
164-
+ credential.getProvider() + " unsuccessful. " +
165-
"Visit https://console.firebase.google.com to enable it."))
166163
.addOnCompleteListener(new CredentialSignInHandler(
167164
this,
168165
mSaveSmartLock,
169166
RC_ACCOUNT_LINK,
170-
response));
167+
response))
168+
.addOnFailureListener(
169+
new TaskFailureLogger(TAG, "Firebase sign in with credential " +
170+
credential.getProvider() + " unsuccessful. " +
171+
"Visit https://console.firebase.google.com to enable it."));
171172
}
172173

173174
@Override

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323

2424
import com.firebase.ui.auth.ErrorCodes;
2525
import com.firebase.ui.auth.IdpResponse;
26+
import com.firebase.ui.auth.User;
2627
import com.firebase.ui.auth.provider.ProviderUtils;
2728
import com.firebase.ui.auth.ui.HelperActivityBase;
28-
import com.firebase.ui.auth.User;
2929
import com.firebase.ui.auth.ui.accountlink.WelcomeBackIdpPrompt;
3030
import com.firebase.ui.auth.ui.accountlink.WelcomeBackPasswordPrompt;
3131
import com.firebase.ui.auth.util.signincontainer.SaveSmartLock;

auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivity.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -158,12 +158,12 @@ void verifyPhoneNumber(String phoneNumber, boolean forceResend) {
158158

159159
public void submitConfirmationCode(String confirmationCode) {
160160
showLoadingDialog(getString(R.string.fui_verifying));
161-
signingWithCreds(PhoneAuthProvider.getCredential(mVerificationId, confirmationCode));
161+
signIn(PhoneAuthProvider.getCredential(mVerificationId, confirmationCode));
162162
}
163163

164164
private void onVerificationSuccess(@NonNull final PhoneAuthCredential phoneAuthCredential) {
165165
if (TextUtils.isEmpty(phoneAuthCredential.getSmsCode())) {
166-
signingWithCreds(phoneAuthCredential);
166+
signIn(phoneAuthCredential);
167167
} else {
168168
//Show Fragment if it is not already visible
169169
showSubmitCodeFragment();
@@ -176,7 +176,7 @@ private void onVerificationSuccess(@NonNull final PhoneAuthCredential phoneAuthC
176176
submitConfirmationCodeFragment.setConfirmationCode(String.valueOf
177177
(phoneAuthCredential.getSmsCode()));
178178
}
179-
signingWithCreds(phoneAuthCredential);
179+
signIn(phoneAuthCredential);
180180
}
181181
}
182182

@@ -289,8 +289,7 @@ private void finish(FirebaseUser user) {
289289
.setPhoneNumber(user.getPhoneNumber())
290290
.build())
291291
.build();
292-
setResult(RESULT_OK, response.toIntent());
293-
finish();
292+
finish(RESULT_OK, response.toIntent());
294293
}
295294

296295
private void showAlertDialog(@NonNull String s, DialogInterface.OnClickListener
@@ -301,9 +300,9 @@ private void showAlertDialog(@NonNull String s, DialogInterface.OnClickListener
301300
.show();
302301
}
303302

304-
private void signingWithCreds(@NonNull PhoneAuthCredential phoneAuthCredential) {
303+
private void signIn(@NonNull PhoneAuthCredential credential) {
305304
getAuthHelper().getFirebaseAuth()
306-
.signInWithCredential(phoneAuthCredential)
305+
.signInWithCredential(credential)
307306
.addOnSuccessListener(this, new OnSuccessListener<AuthResult>() {
308307
@Override
309308
public void onSuccess(final AuthResult authResult) {

0 commit comments

Comments
 (0)