Skip to content

Commit 9d09ce8

Browse files
SUPERCILEXsamtstern
authored andcommitted
Bug fixes and perf improvements for setting providers in AuthUI (#591)
1 parent 8493426 commit 9d09ce8

File tree

1 file changed

+43
-20
lines changed

1 file changed

+43
-20
lines changed

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

Lines changed: 43 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@
5555
import java.util.Collections;
5656
import java.util.HashSet;
5757
import java.util.IdentityHashMap;
58-
import java.util.LinkedHashSet;
5958
import java.util.List;
6059
import java.util.Set;
6160

@@ -356,11 +355,33 @@ public void writeToParcel(Parcel parcel, int i) {
356355
parcel.writeStringList(mScopes);
357356
}
358357

358+
@Override
359+
public boolean equals(Object o) {
360+
if (this == o) return true;
361+
if (o == null || getClass() != o.getClass()) return false;
362+
363+
IdpConfig config = (IdpConfig) o;
364+
365+
return mProviderId.equals(config.mProviderId);
366+
}
367+
368+
@Override
369+
public int hashCode() {
370+
return mProviderId.hashCode();
371+
}
372+
373+
@Override
374+
public String toString() {
375+
return "IdpConfig{" +
376+
"mProviderId='" + mProviderId + '\'' +
377+
", mScopes=" + mScopes +
378+
'}';
379+
}
380+
359381
public static class Builder {
360382
private String mProviderId;
361383
private List<String> mScopes = new ArrayList<>();
362384

363-
364385
/**
365386
* Builds the configuration parameters for an identity provider.
366387
*
@@ -406,13 +427,12 @@ public IdpConfig build() {
406427
public final class SignInIntentBuilder {
407428
private int mLogo = NO_LOGO;
408429
private int mTheme = getDefaultTheme();
409-
private LinkedHashSet<IdpConfig> mProviders = new LinkedHashSet<>();
430+
private List<IdpConfig> mProviders = new ArrayList<>();
410431
private String mTosUrl;
411432
private boolean mIsSmartLockEnabled = true;
412433
private boolean mAllowNewEmailAccounts = true;
413434

414435
private SignInIntentBuilder() {
415-
mProviders.add(new IdpConfig.Builder(EMAIL_PROVIDER).build());
416436
}
417437

418438
/**
@@ -458,15 +478,14 @@ public SignInIntentBuilder setTosUrl(@Nullable String tosUrl) {
458478
*/
459479
public SignInIntentBuilder setProviders(@NonNull List<IdpConfig> idpConfigs) {
460480
mProviders.clear();
461-
Set<String> configuredProviders = new HashSet<>();
462-
for (IdpConfig idpConfig : idpConfigs) {
463-
if (configuredProviders.contains(idpConfig.getProviderId())) {
481+
for (IdpConfig config : idpConfigs) {
482+
if (mProviders.contains(config)) {
464483
throw new IllegalArgumentException("Each provider can only be set once. "
465-
+ idpConfig.getProviderId()
484+
+ config.getProviderId()
466485
+ " was set twice.");
486+
} else {
487+
mProviders.add(config);
467488
}
468-
configuredProviders.add(idpConfig.getProviderId());
469-
mProviders.add(idpConfig);
470489
}
471490
return this;
472491
}
@@ -495,6 +514,15 @@ public SignInIntentBuilder setProviders(@NonNull String... providers) {
495514
return this;
496515
}
497516

517+
private boolean isIdpAlreadyConfigured(@NonNull String providerId) {
518+
for (IdpConfig config : mProviders) {
519+
if (config.getProviderId().equals(providerId)) {
520+
return true;
521+
}
522+
}
523+
return false;
524+
}
525+
498526
/**
499527
* Enables or disables the use of Smart Lock for Passwords in the sign in flow.
500528
* <p>
@@ -515,23 +543,18 @@ public SignInIntentBuilder setAllowNewEmailAccounts(boolean enabled) {
515543
return this;
516544
}
517545

518-
private boolean isIdpAlreadyConfigured(@NonNull String providerId) {
519-
for (IdpConfig config : mProviders) {
520-
if (config.getProviderId().equals(providerId)) {
521-
return true;
522-
}
523-
}
524-
return false;
525-
}
526-
527546
public Intent build() {
528547
return KickoffActivity.createIntent(mApp.getApplicationContext(), getFlowParams());
529548
}
530549

531550
@VisibleForTesting()
532551
public FlowParameters getFlowParams() {
552+
if (mProviders.isEmpty()) {
553+
mProviders.add(new IdpConfig.Builder(EMAIL_PROVIDER).build());
554+
}
555+
533556
return new FlowParameters(mApp.getName(),
534-
new ArrayList<>(mProviders),
557+
mProviders,
535558
mTheme,
536559
mLogo,
537560
mTosUrl,

0 commit comments

Comments
 (0)