Skip to content

Commit 978a9c7

Browse files
committed
Look up classes by their string name
This ensures we only need the Google auth binding in the build.gradle, when we are using Google auth.
1 parent 1f271c9 commit 978a9c7

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

library/src/main/java/com/firebase/ui/auth/core/AuthProviderType.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,18 @@
1212
import java.lang.reflect.InvocationTargetException;
1313

1414
public enum AuthProviderType {
15-
GOOGLE ("google", GoogleAuthProvider.class, R.id.google_button),
16-
FACEBOOK("facebook", FacebookAuthProvider.class, R.id.facebook_button),
17-
TWITTER ("twitter", TwitterAuthProvider.class, R.id.twitter_button),
18-
PASSWORD("password", PasswordAuthProvider.class, R.id.password_button);
15+
GOOGLE ("google", "com.firebase.ui.auth.google.GoogleAuthProvider", R.id.google_button),
16+
FACEBOOK("facebook", "com.firebase.ui.auth.facebook.FacebookAuthProvider", R.id.facebook_button),
17+
TWITTER ("twitter", "com.firebase.ui.auth.twitter.TwitterAuthProvider", R.id.twitter_button),
18+
PASSWORD("password", "com.firebase.ui.auth.password.PasswordAuthProvider", R.id.password_button);
1919

2020
private final String mName;
21-
private final Class<? extends FirebaseAuthProvider> mClass;
21+
private final String mProviderName;
2222
private final int mButtonId;
2323

24-
AuthProviderType(String name, Class<? extends FirebaseAuthProvider> clazz, int button_id) {
24+
AuthProviderType(String name, String providerName, int button_id) {
2525
this.mName = name;
26-
this.mClass = clazz;
26+
this.mProviderName = providerName;
2727
this.mButtonId = button_id;
2828
}
2929

@@ -36,7 +36,8 @@ public int getButtonId() {
3636

3737
public FirebaseAuthProvider createProvider(Context context, Firebase ref, TokenAuthHandler handler) {
3838
try {
39-
return mClass.getConstructor(Context.class, AuthProviderType.class, String.class, Firebase.class, TokenAuthHandler.class).newInstance(context, this, this.getName(), ref, handler);
39+
Class<? extends FirebaseAuthProvider> clazz = (Class<? extends FirebaseAuthProvider>) Class.forName(mProviderName);
40+
return clazz.getConstructor(Context.class, AuthProviderType.class, String.class, Firebase.class, TokenAuthHandler.class).newInstance(context, this, this.getName(), ref, handler);
4041
} catch (NoSuchMethodException e) {
4142
throw new RuntimeException(e);
4243
} catch (IllegalAccessException e) {
@@ -45,6 +46,8 @@ public FirebaseAuthProvider createProvider(Context context, Firebase ref, TokenA
4546
throw new RuntimeException(e);
4647
} catch (InvocationTargetException e) {
4748
throw new RuntimeException(e);
49+
} catch (ClassNotFoundException e) {
50+
throw new RuntimeException(e);
4851
}
4952
}
5053
public static AuthProviderType getTypeForProvider(FirebaseAuthProvider provider) {

0 commit comments

Comments
 (0)