Skip to content

Commit fa5cb40

Browse files
authored
Eliminate unnecessary starting of credential save activity for anti-social providers (#1243)
2 parents 017eb15 + 35cede6 commit fa5cb40

File tree

3 files changed

+23
-11
lines changed

3 files changed

+23
-11
lines changed

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

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,12 +162,27 @@ private void populateIdpList(List<IdpConfig> providerConfigs,
162162
this, R.string.fui_progress_dialog_loading) {
163163
@Override
164164
protected void onSuccess(@NonNull IdpResponse response) {
165-
handler.startSignIn(response);
165+
handleResponse(response);
166166
}
167167

168168
@Override
169169
protected void onFailure(@NonNull Exception e) {
170-
handler.startSignIn(IdpResponse.from(e));
170+
handleResponse(IdpResponse.from(e));
171+
}
172+
173+
private void handleResponse(@NonNull IdpResponse response) {
174+
if (!response.isSuccessful()) {
175+
// We have no idea what provider this error stemmed from so just forward
176+
// this along to the handler.
177+
handler.startSignIn(response);
178+
} else if (AuthUI.SOCIAL_PROVIDERS.contains(response.getProviderType())) {
179+
handler.startSignIn(response);
180+
} else {
181+
// Email or phone: the credentials should have already been saved so simply
182+
// move along.
183+
finish(response.isSuccessful() ? RESULT_OK : RESULT_CANCELED,
184+
response.toIntent());
185+
}
171186
}
172187
});
173188

auth/src/main/java/com/firebase/ui/auth/viewmodel/idp/SocialProviderResponseHandler.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import android.support.annotation.Nullable;
88
import android.support.annotation.RestrictTo;
99

10+
import com.firebase.ui.auth.AuthUI;
1011
import com.firebase.ui.auth.ErrorCodes;
1112
import com.firebase.ui.auth.FirebaseUiException;
1213
import com.firebase.ui.auth.IdpResponse;
@@ -24,7 +25,6 @@
2425
import com.google.firebase.auth.AuthResult;
2526
import com.google.firebase.auth.EmailAuthProvider;
2627
import com.google.firebase.auth.FirebaseAuthUserCollisionException;
27-
import com.google.firebase.auth.PhoneAuthProvider;
2828

2929
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
3030
public class SocialProviderResponseHandler extends AuthViewModelBase<IdpResponse> {
@@ -37,10 +37,9 @@ public void startSignIn(@NonNull final IdpResponse response) {
3737
setResult(Resource.<IdpResponse>forFailure(response.getError()));
3838
return;
3939
}
40-
if (response.getProviderType().equals(EmailAuthProvider.PROVIDER_ID)
41-
|| response.getProviderType().equals(PhoneAuthProvider.PROVIDER_ID)) {
42-
setResult(Resource.forSuccess(response));
43-
return;
40+
if (!AuthUI.SOCIAL_PROVIDERS.contains(response.getProviderType())) {
41+
throw new IllegalStateException(
42+
"This handler cannot be used with email or phone providers");
4443
}
4544
setResult(Resource.<IdpResponse>forLoading());
4645

auth/src/test/java/com/firebase/ui/auth/viewmodel/SocialProviderResponseHandlerTest.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,17 +91,15 @@ public void testSignInIdp_success() {
9191
.onChanged(argThat(ResourceMatchers.<IdpResponse>isSuccess()));
9292
}
9393

94-
@Test
95-
public void testSignInNonIdp_success() {
94+
@Test(expected = IllegalStateException.class)
95+
public void testSignInNonIdp_failure() {
9696
mHandler.getOperation().observeForever(mResultObserver);
9797

9898
IdpResponse response = new IdpResponse.Builder(new User.Builder(
9999
EmailAuthProvider.PROVIDER_ID, TestConstants.EMAIL).build())
100100
.build();
101101

102102
mHandler.startSignIn(response);
103-
104-
verify(mResultObserver).onChanged(argThat(ResourceMatchers.<IdpResponse>isSuccess()));
105103
}
106104

107105
@Test

0 commit comments

Comments
 (0)