in auth/src/main/java/com/firebase/ui/auth/ui/idp/SingleSignInActivity.java [45:138]
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
User user = User.getUser(getIntent());
final String provider = user.getProviderId();
AuthUI.IdpConfig providerConfig =
ProviderUtils.getConfigFromIdps(getFlowParams().providers, provider);
if (providerConfig == null) {
finish(RESULT_CANCELED, IdpResponse.getErrorIntent(new FirebaseUiException(
ErrorCodes.DEVELOPER_ERROR,
"Provider not enabled: " + provider)));
return;
}
ViewModelProvider supplier = new ViewModelProvider(this);
mHandler = supplier.get(SocialProviderResponseHandler.class);
mHandler.init(getFlowParams());
boolean useEmulator = getAuthUI().isUseEmulator();
switch (provider) {
case GoogleAuthProvider.PROVIDER_ID:
if (useEmulator) {
mProvider = supplier.get(GenericIdpSignInHandler.class)
.initWith(GenericIdpSignInHandler.getGenericGoogleConfig());
} else {
mProvider = supplier.get(GoogleSignInHandler.class).initWith(
new GoogleSignInHandler.Params(providerConfig, user.getEmail()));
}
break;
case FacebookAuthProvider.PROVIDER_ID:
if (useEmulator) {
mProvider = supplier.get(GenericIdpSignInHandler.class)
.initWith(GenericIdpSignInHandler.getGenericFacebookConfig());
} else {
mProvider = supplier.get(FacebookSignInHandler.class).initWith(providerConfig);
}
break;
default:
if (!TextUtils.isEmpty(
providerConfig.getParams().getString(GENERIC_OAUTH_PROVIDER_ID))) {
mProvider = supplier.get(GenericIdpSignInHandler.class).initWith(providerConfig);
break;
}
throw new IllegalStateException("Invalid provider id: " + provider);
}
mProvider.getOperation().observe(this, new ResourceObserver<IdpResponse>(this) {
@Override
protected void onSuccess(@NonNull IdpResponse response) {
boolean useSocialHandler = AuthUI.SOCIAL_PROVIDERS.contains(provider)
&& !getAuthUI().isUseEmulator();
if (useSocialHandler || !response.isSuccessful()) {
mHandler.startSignIn(response);
return;
}
finish(response.isSuccessful() ? RESULT_OK : RESULT_CANCELED,
response.toIntent());
}
@Override
protected void onFailure(@NonNull Exception e) {
if (e instanceof FirebaseAuthAnonymousUpgradeException) {
finish(RESULT_CANCELED, new Intent().putExtra(ExtraConstants.IDP_RESPONSE,
IdpResponse.from(e)));
return;
}
mHandler.startSignIn(IdpResponse.from(e));
}
});
mHandler.getOperation().observe(this, new ResourceObserver<IdpResponse>(this) {
@Override
protected void onSuccess(@NonNull IdpResponse response) {
startSaveCredentials(mHandler.getCurrentUser(), response, null);
}
@Override
protected void onFailure(@NonNull Exception e) {
if (e instanceof FirebaseAuthAnonymousUpgradeException) {
IdpResponse res = ((FirebaseAuthAnonymousUpgradeException) e).getResponse();
finish(RESULT_CANCELED, new Intent().putExtra(ExtraConstants.IDP_RESPONSE, res));
} else {
finish(RESULT_CANCELED, IdpResponse.getErrorIntent(e));
}
}
});
if (mHandler.getOperation().getValue() == null) {
mProvider.startSignIn(getAuth(), this, provider);
}
}