From 01b36e37a1f1407bdb799a7bef6fb3b626663c2f Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Sun, 25 Mar 2018 12:03:47 -0700 Subject: [PATCH 1/8] Add support for Play Games provider Signed-off-by: Alex Saveau --- .../firebase/uidemo/auth/AuthUiActivity.java | 9 +++ .../uidemo/auth/SignedInActivity.java | 4 ++ app/src/main/res/layout/auth_ui_layout.xml | 7 +++ app/src/main/res/values/strings.xml | 1 + .../java/com/firebase/ui/auth/AuthUI.java | 60 ++++++++++++++++++- .../auth/data/remote/GoogleSignInHandler.java | 18 +++++- .../auth/data/remote/SignInKickstarter.java | 5 +- .../auth/ui/idp/AuthMethodPickerActivity.java | 2 + .../ui/auth/ui/idp/SingleSignInActivity.java | 2 + .../ui/auth/ui/idp/WelcomeBackIdpPrompt.java | 2 + .../ui/auth/util/data/ProviderUtils.java | 8 +++ .../ui/auth/testhelpers/TestHelper.java | 4 ++ 12 files changed, 116 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/firebase/uidemo/auth/AuthUiActivity.java b/app/src/main/java/com/firebase/uidemo/auth/AuthUiActivity.java index 9e26d06d7..62619dbd4 100644 --- a/app/src/main/java/com/firebase/uidemo/auth/AuthUiActivity.java +++ b/app/src/main/java/com/firebase/uidemo/auth/AuthUiActivity.java @@ -62,6 +62,7 @@ public class AuthUiActivity extends AppCompatActivity { @BindView(R.id.sign_in) Button mSignIn; @BindView(R.id.google_provider) CheckBox mUseGoogleProvider; + @BindView(R.id.play_games_provider) CheckBox mUsePlayGamesProvider; @BindView(R.id.facebook_provider) CheckBox mUseFacebookProvider; @BindView(R.id.twitter_provider) CheckBox mUseTwitterProvider; @BindView(R.id.email_provider) CheckBox mUseEmailProvider; @@ -110,6 +111,10 @@ public void onCreate(Bundle savedInstanceState) { mUseGoogleProvider.setEnabled(false); mUseGoogleProvider.setText(R.string.google_label_missing_config); setGoogleScopesEnabled(false); + + mUsePlayGamesProvider.setChecked(false); + mUsePlayGamesProvider.setEnabled(false); + mUsePlayGamesProvider.setText(R.string.google_label_missing_config); } else { setGoogleScopesEnabled(mUseGoogleProvider.isChecked()); mUseGoogleProvider.setOnCheckedChangeListener(new OnCheckedChangeListener() { @@ -251,6 +256,10 @@ private List getSelectedProviders() { new IdpConfig.GoogleBuilder().setScopes(getGoogleScopes()).build()); } + if (mUsePlayGamesProvider.isChecked()) { + selectedProviders.add(new IdpConfig.PlayGamesBuilder().build()); + } + if (mUseFacebookProvider.isChecked()) { selectedProviders.add(new IdpConfig.FacebookBuilder() .setPermissions(getFacebookPermissions()) diff --git a/app/src/main/java/com/firebase/uidemo/auth/SignedInActivity.java b/app/src/main/java/com/firebase/uidemo/auth/SignedInActivity.java index dfe10f089..32a81bf9d 100644 --- a/app/src/main/java/com/firebase/uidemo/auth/SignedInActivity.java +++ b/app/src/main/java/com/firebase/uidemo/auth/SignedInActivity.java @@ -43,6 +43,7 @@ import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.GoogleAuthProvider; import com.google.firebase.auth.PhoneAuthProvider; +import com.google.firebase.auth.PlayGamesAuthProvider; import com.google.firebase.auth.TwitterAuthProvider; import java.util.ArrayList; @@ -160,6 +161,9 @@ private void populateProfile() { case GoogleAuthProvider.PROVIDER_ID: providers.add(getString(R.string.providers_google)); break; + case PlayGamesAuthProvider.PROVIDER_ID: + providers.add(getString(R.string.providers_play_games)); + break; case FacebookAuthProvider.PROVIDER_ID: providers.add(getString(R.string.providers_facebook)); break; diff --git a/app/src/main/res/layout/auth_ui_layout.xml b/app/src/main/res/layout/auth_ui_layout.xml index f04e55725..dea997c53 100644 --- a/app/src/main/res/layout/auth_ui_layout.xml +++ b/app/src/main/res/layout/auth_ui_layout.xml @@ -52,6 +52,13 @@ android:checked="true" android:text="@string/providers_google" /> + + Auth providers Google + Play Games Facebook Twitter Email diff --git a/auth/src/main/java/com/firebase/ui/auth/AuthUI.java b/auth/src/main/java/com/firebase/ui/auth/AuthUI.java index a86ed7ad4..da670fc54 100644 --- a/auth/src/main/java/com/firebase/ui/auth/AuthUI.java +++ b/auth/src/main/java/com/firebase/ui/auth/AuthUI.java @@ -58,6 +58,7 @@ import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.GoogleAuthProvider; import com.google.firebase.auth.PhoneAuthProvider; +import com.google.firebase.auth.PlayGamesAuthProvider; import com.google.firebase.auth.TwitterAuthProvider; import com.google.firebase.auth.UserInfo; import com.twitter.sdk.android.core.TwitterCore; @@ -90,6 +91,7 @@ public class AuthUI { EmailAuthProvider.PROVIDER_ID, PhoneAuthProvider.PROVIDER_ID, GoogleAuthProvider.PROVIDER_ID, + PlayGamesAuthProvider.PROVIDER_ID, FacebookAuthProvider.PROVIDER_ID, TwitterAuthProvider.PROVIDER_ID }) @@ -180,6 +182,7 @@ public class AuthUI { public static final Set SUPPORTED_PROVIDERS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( GoogleAuthProvider.PROVIDER_ID, + PlayGamesAuthProvider.PROVIDER_ID, FacebookAuthProvider.PROVIDER_ID, TwitterAuthProvider.PROVIDER_ID, EmailAuthProvider.PROVIDER_ID, @@ -193,6 +196,7 @@ public class AuthUI { public static final Set SOCIAL_PROVIDERS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( GoogleAuthProvider.PROVIDER_ID, + PlayGamesAuthProvider.PROVIDER_ID, FacebookAuthProvider.PROVIDER_ID, TwitterAuthProvider.PROVIDER_ID))); @@ -623,8 +627,8 @@ public EmailBuilder setAllowNewAccounts(boolean allow) { } /** - * Configures the requirement for the user to enter first and last name - * in the email sign up flow. + * Configures the requirement for the user to enter first and last name in the email + * sign up flow. *

* Name is required by default. */ @@ -770,6 +774,52 @@ public IdpConfig build() { } } + /** + * {@link IdpConfig} builder for the Google Play Games provider. + */ + public static final class PlayGamesBuilder extends Builder { + public PlayGamesBuilder() { + //noinspection deprecation taking a hit for the backcompat team + super(PlayGamesAuthProvider.PROVIDER_ID); + Preconditions.checkConfigured(getApplicationContext(), + "Check your google-services plugin configuration, the" + + " default_web_client_id string wasn't populated.", + R.string.default_web_client_id); + } + + /** + * Set the {@link GoogleSignInOptions} to be used for Google sign-in. Standard options + * like requesting the user's email will automatically be added. + * + * @param options sign-in options + */ + @NonNull + public PlayGamesBuilder setSignInOptions(@NonNull GoogleSignInOptions options) { + Preconditions.checkUnset(getParams(), + "Cannot overwrite previously set sign-in options.", + ExtraConstants.EXTRA_GOOGLE_SIGN_IN_OPTIONS); + + GoogleSignInOptions.Builder builder = new GoogleSignInOptions.Builder(options); + builder.requestEmail().requestServerAuthCode(getApplicationContext() + .getString(R.string.default_web_client_id)); + getParams().putParcelable( + ExtraConstants.EXTRA_GOOGLE_SIGN_IN_OPTIONS, builder.build()); + + return this; + } + + @NonNull + @Override + public IdpConfig build() { + if (!getParams().containsKey(ExtraConstants.EXTRA_GOOGLE_SIGN_IN_OPTIONS)) { + setSignInOptions(new GoogleSignInOptions.Builder( + GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).build()); + } + + return super.build(); + } + } + /** * {@link IdpConfig} builder for the Facebook provider. */ @@ -914,6 +964,12 @@ public T setAvailableProviders(@NonNull List idpConfigs) { } } + if (mProviders.contains(new IdpConfig.PlayGamesBuilder().build()) + && mProviders.contains(new IdpConfig.GoogleBuilder().build())) { + throw new IllegalArgumentException("The Google and Play Games providers cannot " + + "be used simultaneously. You must choose one."); + } + return (T) this; } diff --git a/auth/src/main/java/com/firebase/ui/auth/data/remote/GoogleSignInHandler.java b/auth/src/main/java/com/firebase/ui/auth/data/remote/GoogleSignInHandler.java index 53ebdd149..50db2544f 100644 --- a/auth/src/main/java/com/firebase/ui/auth/data/remote/GoogleSignInHandler.java +++ b/auth/src/main/java/com/firebase/ui/auth/data/remote/GoogleSignInHandler.java @@ -26,6 +26,7 @@ import com.google.android.gms.common.api.ApiException; import com.google.android.gms.common.api.CommonStatusCodes; import com.google.firebase.auth.GoogleAuthProvider; +import com.google.firebase.auth.PlayGamesAuthProvider; @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public class GoogleSignInHandler extends ProviderSignInBase { @@ -38,13 +39,14 @@ public GoogleSignInHandler(Application application) { super(application); } - private static IdpResponse createIdpResponse(GoogleSignInAccount account) { + private static IdpResponse createIdpResponse(GoogleSignInAccount account, + @NonNull String token) { return new IdpResponse.Builder( new User.Builder(GoogleAuthProvider.PROVIDER_ID, account.getEmail()) .setName(account.getDisplayName()) .setPhotoUri(account.getPhotoUrl()) .build()) - .setToken(account.getIdToken()) + .setToken(token) .build(); } @@ -85,7 +87,17 @@ public void onActivityResult(int requestCode, int resultCode, @Nullable Intent d try { GoogleSignInAccount account = GoogleSignIn.getSignedInAccountFromIntent(data) .getResult(ApiException.class); - setResult(Resource.forSuccess(createIdpResponse(account))); + + String token; + if (mConfig.getProviderId().equals(GoogleAuthProvider.PROVIDER_ID)) { + token = account.getIdToken(); + } else if (mConfig.getProviderId().equals(PlayGamesAuthProvider.PROVIDER_ID)) { + token = account.getServerAuthCode(); + } else { + throw new IllegalStateException("Unsupported provider: " + mConfig.getProviderId()); + } + + setResult(Resource.forSuccess(createIdpResponse(account, token))); } catch (ApiException e) { if (e.getStatusCode() == CommonStatusCodes.INVALID_ACCOUNT) { // If we get INVALID_ACCOUNT, it means the pre-set account was not available on the diff --git a/auth/src/main/java/com/firebase/ui/auth/data/remote/SignInKickstarter.java b/auth/src/main/java/com/firebase/ui/auth/data/remote/SignInKickstarter.java index e35eece61..29e711101 100644 --- a/auth/src/main/java/com/firebase/ui/auth/data/remote/SignInKickstarter.java +++ b/auth/src/main/java/com/firebase/ui/auth/data/remote/SignInKickstarter.java @@ -39,6 +39,7 @@ import com.google.firebase.auth.FirebaseAuthInvalidUserException; import com.google.firebase.auth.GoogleAuthProvider; import com.google.firebase.auth.PhoneAuthProvider; +import com.google.firebase.auth.PlayGamesAuthProvider; import com.google.firebase.auth.TwitterAuthProvider; import java.util.ArrayList; @@ -128,6 +129,7 @@ private void redirectSignIn(String provider, String email) { RequestCodes.EMAIL_FLOW))); break; case GoogleAuthProvider.PROVIDER_ID: + case PlayGamesAuthProvider.PROVIDER_ID: case FacebookAuthProvider.PROVIDER_ID: case TwitterAuthProvider.PROVIDER_ID: setResult(Resource.forUsableFailure(new IntentRequiredException( @@ -146,7 +148,8 @@ private List getCredentialAccountTypes() { List accounts = new ArrayList<>(); for (AuthUI.IdpConfig idpConfig : getArguments().providerInfo) { @AuthUI.SupportedProvider String providerId = idpConfig.getProviderId(); - if (providerId.equals(GoogleAuthProvider.PROVIDER_ID)) { + if (providerId.equals(GoogleAuthProvider.PROVIDER_ID) + || providerId.equals(PlayGamesAuthProvider.PROVIDER_ID)) { accounts.add(ProviderUtils.providerIdToAccountType(providerId)); } } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivity.java index 640866921..2b456bf18 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivity.java @@ -51,6 +51,7 @@ import com.google.firebase.auth.FacebookAuthProvider; import com.google.firebase.auth.GoogleAuthProvider; import com.google.firebase.auth.PhoneAuthProvider; +import com.google.firebase.auth.PlayGamesAuthProvider; import com.google.firebase.auth.TwitterAuthProvider; import java.util.ArrayList; @@ -128,6 +129,7 @@ private void populateIdpList(List providerConfigs, @LayoutRes int buttonLayout; switch (idpConfig.getProviderId()) { case GoogleAuthProvider.PROVIDER_ID: + case PlayGamesAuthProvider.PROVIDER_ID: GoogleSignInHandler google = supplier.get(GoogleSignInHandler.class); google.init(new GoogleSignInHandler.Params(idpConfig)); provider = google; diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/idp/SingleSignInActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/SingleSignInActivity.java index 8e1c0c7fa..1052129d3 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/idp/SingleSignInActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/idp/SingleSignInActivity.java @@ -27,6 +27,7 @@ import com.firebase.ui.auth.viewmodel.idp.SocialProviderResponseHandler; import com.google.firebase.auth.FacebookAuthProvider; import com.google.firebase.auth.GoogleAuthProvider; +import com.google.firebase.auth.PlayGamesAuthProvider; import com.google.firebase.auth.TwitterAuthProvider; public class SingleSignInActivity extends HelperActivityBase { @@ -60,6 +61,7 @@ protected void onCreate(Bundle savedInstanceState) { switch (provider) { case GoogleAuthProvider.PROVIDER_ID: + case PlayGamesAuthProvider.PROVIDER_ID: GoogleSignInHandler google = supplier.get(GoogleSignInHandler.class); google.init(new GoogleSignInHandler.Params(providerConfig, user.getEmail())); mProvider = google; diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/idp/WelcomeBackIdpPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/WelcomeBackIdpPrompt.java index 9113d97a8..2fba36efc 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/idp/WelcomeBackIdpPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/idp/WelcomeBackIdpPrompt.java @@ -48,6 +48,7 @@ import com.firebase.ui.auth.viewmodel.idp.ProviderSignInBase; import com.google.firebase.auth.FacebookAuthProvider; import com.google.firebase.auth.GoogleAuthProvider; +import com.google.firebase.auth.PlayGamesAuthProvider; import com.google.firebase.auth.TwitterAuthProvider; @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) @@ -101,6 +102,7 @@ protected void onCreate(Bundle savedInstanceState) { @StringRes int providerName; switch (providerId) { case GoogleAuthProvider.PROVIDER_ID: + case PlayGamesAuthProvider.PROVIDER_ID: GoogleSignInHandler google = supplier.get(GoogleSignInHandler.class); google.init(new GoogleSignInHandler.Params(config, existingUser.getEmail())); mProvider = google; diff --git a/auth/src/main/java/com/firebase/ui/auth/util/data/ProviderUtils.java b/auth/src/main/java/com/firebase/ui/auth/util/data/ProviderUtils.java index c1664fa21..6a644fc7e 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/data/ProviderUtils.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/data/ProviderUtils.java @@ -31,6 +31,7 @@ import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.GoogleAuthProvider; import com.google.firebase.auth.PhoneAuthProvider; +import com.google.firebase.auth.PlayGamesAuthProvider; import com.google.firebase.auth.ProviderQueryResult; import com.google.firebase.auth.TwitterAuthProvider; @@ -38,6 +39,7 @@ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public final class ProviderUtils { + private static final String GAMES_IDENTITY = "https://play.games"; private static final String PHONE_IDENTITY = "https://phone.firebase"; private ProviderUtils() { @@ -49,6 +51,8 @@ public static AuthCredential getAuthCredential(IdpResponse response) { switch (response.getProviderType()) { case GoogleAuthProvider.PROVIDER_ID: return GoogleAuthProvider.getCredential(response.getIdpToken(), null); + case PlayGamesAuthProvider.PROVIDER_ID: + return PlayGamesAuthProvider.getCredential(response.getIdpToken()); case FacebookAuthProvider.PROVIDER_ID: return FacebookAuthProvider.getCredential(response.getIdpToken()); case TwitterAuthProvider.PROVIDER_ID: @@ -76,6 +80,8 @@ public static String providerIdToAccountType(@AuthUI.SupportedProvider @NonNull switch (providerId) { case GoogleAuthProvider.PROVIDER_ID: return IdentityProviders.GOOGLE; + case PlayGamesAuthProvider.PROVIDER_ID: + return GAMES_IDENTITY; case FacebookAuthProvider.PROVIDER_ID: return IdentityProviders.FACEBOOK; case TwitterAuthProvider.PROVIDER_ID: @@ -94,6 +100,8 @@ public static String accountTypeToProviderId(@NonNull String accountType) { switch (accountType) { case IdentityProviders.GOOGLE: return GoogleAuthProvider.PROVIDER_ID; + case GAMES_IDENTITY: + return PlayGamesAuthProvider.PROVIDER_ID; case IdentityProviders.FACEBOOK: return FacebookAuthProvider.PROVIDER_ID; case IdentityProviders.TWITTER: diff --git a/auth/src/test/java/com/firebase/ui/auth/testhelpers/TestHelper.java b/auth/src/test/java/com/firebase/ui/auth/testhelpers/TestHelper.java index a38263850..22131e63c 100644 --- a/auth/src/test/java/com/firebase/ui/auth/testhelpers/TestHelper.java +++ b/auth/src/test/java/com/firebase/ui/auth/testhelpers/TestHelper.java @@ -39,6 +39,7 @@ import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.GoogleAuthProvider; import com.google.firebase.auth.PhoneAuthProvider; +import com.google.firebase.auth.PlayGamesAuthProvider; import com.google.firebase.auth.TwitterAuthProvider; import org.junit.Assert; @@ -160,6 +161,9 @@ public static FlowParameters getFlowParameters(Collection providerIds) { case GoogleAuthProvider.PROVIDER_ID: idpConfigs.add(new IdpConfig.GoogleBuilder().build()); break; + case PlayGamesAuthProvider.PROVIDER_ID: + idpConfigs.add(new IdpConfig.PlayGamesBuilder().build()); + break; case FacebookAuthProvider.PROVIDER_ID: idpConfigs.add(new IdpConfig.FacebookBuilder().build()); break; From 5f7facef8238f1e48e86c25181fa9573e6befb22 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Mon, 26 Mar 2018 12:15:45 -0700 Subject: [PATCH 2/8] Fix merge mistakes Signed-off-by: Alex Saveau --- auth/src/main/java/com/firebase/ui/auth/AuthUI.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/auth/src/main/java/com/firebase/ui/auth/AuthUI.java b/auth/src/main/java/com/firebase/ui/auth/AuthUI.java index f037997f4..7acd1d225 100644 --- a/auth/src/main/java/com/firebase/ui/auth/AuthUI.java +++ b/auth/src/main/java/com/firebase/ui/auth/AuthUI.java @@ -797,13 +797,12 @@ public PlayGamesBuilder() { public PlayGamesBuilder setSignInOptions(@NonNull GoogleSignInOptions options) { Preconditions.checkUnset(getParams(), "Cannot overwrite previously set sign-in options.", - ExtraConstants.EXTRA_GOOGLE_SIGN_IN_OPTIONS); + ExtraConstants.GOOGLE_SIGN_IN_OPTIONS); GoogleSignInOptions.Builder builder = new GoogleSignInOptions.Builder(options); builder.requestEmail().requestServerAuthCode(getApplicationContext() .getString(R.string.default_web_client_id)); - getParams().putParcelable( - ExtraConstants.EXTRA_GOOGLE_SIGN_IN_OPTIONS, builder.build()); + getParams().putParcelable(ExtraConstants.GOOGLE_SIGN_IN_OPTIONS, builder.build()); return this; } @@ -811,7 +810,7 @@ public PlayGamesBuilder setSignInOptions(@NonNull GoogleSignInOptions options) { @NonNull @Override public IdpConfig build() { - if (!getParams().containsKey(ExtraConstants.EXTRA_GOOGLE_SIGN_IN_OPTIONS)) { + if (!getParams().containsKey(ExtraConstants.GOOGLE_SIGN_IN_OPTIONS)) { setSignInOptions(new GoogleSignInOptions.Builder( GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).build()); } From ff5805338e744253e96ab856e2dbce5cbac7d983 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Wed, 28 Mar 2018 14:53:54 -0700 Subject: [PATCH 3/8] Fix imports Signed-off-by: Alex Saveau --- .../main/java/com/firebase/ui/auth/util/data/ProviderUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/auth/src/main/java/com/firebase/ui/auth/util/data/ProviderUtils.java b/auth/src/main/java/com/firebase/ui/auth/util/data/ProviderUtils.java index b55817de0..3fc85ab25 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/data/ProviderUtils.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/data/ProviderUtils.java @@ -32,7 +32,7 @@ import com.google.firebase.auth.GoogleAuthProvider; import com.google.firebase.auth.PhoneAuthProvider; import com.google.firebase.auth.PlayGamesAuthProvider; -import com.google.firebase.auth.ProviderQueryResult; +import com.google.firebase.auth.SignInMethodQueryResult; import com.google.firebase.auth.TwitterAuthProvider; import java.util.List; From dcb83412d9be58bc3c42df9a0c0335afb01445d1 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Fri, 20 Apr 2018 21:13:58 -0500 Subject: [PATCH 4/8] Merge sample improvements from GitHub branch Signed-off-by: Alex Saveau --- .../firebase/uidemo/auth/AuthUiActivity.java | 43 +++++++++---------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/com/firebase/uidemo/auth/AuthUiActivity.java b/app/src/main/java/com/firebase/uidemo/auth/AuthUiActivity.java index ad7606386..b958b1980 100644 --- a/app/src/main/java/com/firebase/uidemo/auth/AuthUiActivity.java +++ b/app/src/main/java/com/firebase/uidemo/auth/AuthUiActivity.java @@ -71,10 +71,9 @@ public class AuthUiActivity extends AppCompatActivity { @BindView(R.id.email_provider) CheckBox mUseEmailProvider; @BindView(R.id.phone_provider) CheckBox mUsePhoneProvider; - @BindView(R.id.default_theme) RadioButton mUseDefaultTheme; - @BindView(R.id.green_theme) RadioButton mUseGreenTheme; - @BindView(R.id.purple_theme) RadioButton mUsePurpleTheme; - @BindView(R.id.dark_theme) RadioButton mUseDarkTheme; + @BindView(R.id.green_theme) RadioButton mGreenTheme; + @BindView(R.id.purple_theme) RadioButton mPurpleTheme; + @BindView(R.id.dark_theme) RadioButton mDarkTheme; @BindView(R.id.firebase_logo) RadioButton mFirebaseLogo; @BindView(R.id.google_logo) RadioButton mGoogleLogo; @@ -86,13 +85,13 @@ public class AuthUiActivity extends AppCompatActivity { @BindView(R.id.google_privacy) RadioButton mUseGooglePrivacyPolicy; @BindView(R.id.firebase_privacy) RadioButton mUseFirebasePrivacyPolicy; - @BindView(R.id.google_scopes_header) TextView mGoogleScopesLabel; + @BindView(R.id.google_scopes_header) TextView mGoogleScopesHeader; @BindView(R.id.google_scope_drive_file) CheckBox mGoogleScopeDriveFile; @BindView(R.id.google_scope_youtube_data) CheckBox mGoogleScopeYoutubeData; - @BindView(R.id.facebook_permissions_header) TextView mFacebookScopesLabel; - @BindView(R.id.facebook_permission_friends) CheckBox mFacebookScopeFriends; - @BindView(R.id.facebook_permission_photos) CheckBox mFacebookScopePhotos; + @BindView(R.id.facebook_permissions_header) TextView mFacebookPermissionsHeader; + @BindView(R.id.facebook_permission_friends) CheckBox mFacebookPermissionFriends; + @BindView(R.id.facebook_permission_photos) CheckBox mFacebookPermissionPhotos; @BindView(R.id.credential_selector_enabled) CheckBox mEnableCredentialSelector; @BindView(R.id.hint_selector_enabled) CheckBox mEnableHintSelector; @@ -132,13 +131,13 @@ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { mUseFacebookProvider.setChecked(false); mUseFacebookProvider.setEnabled(false); mUseFacebookProvider.setText(R.string.facebook_label_missing_config); - setFacebookScopesEnabled(false); + setFacebookPermissionsEnabled(false); } else { - setFacebookScopesEnabled(mUseFacebookProvider.isChecked()); + setFacebookPermissionsEnabled(mUseFacebookProvider.isChecked()); mUseFacebookProvider.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { - setFacebookScopesEnabled(checked); + setFacebookPermissionsEnabled(checked); } }); } @@ -154,7 +153,7 @@ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { } if (AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES) { - mUseDarkTheme.setChecked(true); + mDarkTheme.setChecked(true); } } @@ -237,7 +236,7 @@ private void startSignedInActivity(IdpResponse response) { @OnClick({R.id.default_theme, R.id.purple_theme, R.id.green_theme, R.id.dark_theme}) public void toggleDarkTheme() { - int mode = mUseDarkTheme.isChecked() ? + int mode = mDarkTheme.isChecked() ? AppCompatDelegate.MODE_NIGHT_YES : AppCompatDelegate.MODE_NIGHT_AUTO; AppCompatDelegate.setDefaultNightMode(mode); getDelegate().setLocalNightMode(mode); @@ -245,11 +244,11 @@ public void toggleDarkTheme() { @StyleRes private int getSelectedTheme() { - if (mUseGreenTheme.isChecked()) { + if (mGreenTheme.isChecked()) { return R.style.GreenTheme; } - if (mUsePurpleTheme.isChecked()) { + if (mPurpleTheme.isChecked()) { return R.style.PurpleTheme; } @@ -336,15 +335,15 @@ private boolean isTwitterMisconfigured() { } private void setGoogleScopesEnabled(boolean enabled) { - mGoogleScopesLabel.setEnabled(enabled); + mGoogleScopesHeader.setEnabled(enabled); mGoogleScopeDriveFile.setEnabled(enabled); mGoogleScopeYoutubeData.setEnabled(enabled); } - private void setFacebookScopesEnabled(boolean enabled) { - mFacebookScopesLabel.setEnabled(enabled); - mFacebookScopeFriends.setEnabled(enabled); - mFacebookScopePhotos.setEnabled(enabled); + private void setFacebookPermissionsEnabled(boolean enabled) { + mFacebookPermissionsHeader.setEnabled(enabled); + mFacebookPermissionFriends.setEnabled(enabled); + mFacebookPermissionPhotos.setEnabled(enabled); } private List getGoogleScopes() { @@ -360,10 +359,10 @@ private List getGoogleScopes() { private List getFacebookPermissions() { List result = new ArrayList<>(); - if (mFacebookScopeFriends.isChecked()) { + if (mFacebookPermissionFriends.isChecked()) { result.add("user_friends"); } - if (mFacebookScopePhotos.isChecked()) { + if (mFacebookPermissionPhotos.isChecked()) { result.add("user_photos"); } return result; From a7b41504d60c27be2db1f3d8420674c216d1b909 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Fri, 20 Apr 2018 21:27:49 -0500 Subject: [PATCH 5/8] Fix earlier merge mistakes Signed-off-by: Alex Saveau --- .../ui/auth/data/remote/GoogleSignInHandler.java | 10 +++++++--- .../com/firebase/ui/auth/util/data/ProviderUtils.java | 2 ++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/auth/src/main/java/com/firebase/ui/auth/data/remote/GoogleSignInHandler.java b/auth/src/main/java/com/firebase/ui/auth/data/remote/GoogleSignInHandler.java index 15fc8f5b5..7d6970e58 100644 --- a/auth/src/main/java/com/firebase/ui/auth/data/remote/GoogleSignInHandler.java +++ b/auth/src/main/java/com/firebase/ui/auth/data/remote/GoogleSignInHandler.java @@ -39,10 +39,11 @@ public GoogleSignInHandler(Application application) { super(application); } - private static IdpResponse createIdpResponse(GoogleSignInAccount account, + private static IdpResponse createIdpResponse(String provider, + GoogleSignInAccount account, @NonNull String token) { return new IdpResponse.Builder( - new User.Builder(GoogleAuthProvider.PROVIDER_ID, account.getEmail()) + new User.Builder(provider, account.getEmail()) .setName(account.getDisplayName()) .setPhotoUri(account.getPhotoUrl()) .build()) @@ -88,16 +89,19 @@ public void onActivityResult(int requestCode, int resultCode, @Nullable Intent d GoogleSignInAccount account = GoogleSignIn.getSignedInAccountFromIntent(data) .getResult(ApiException.class); + String provider; String token; if (mConfig.getProviderId().equals(GoogleAuthProvider.PROVIDER_ID)) { + provider = GoogleAuthProvider.PROVIDER_ID; token = account.getIdToken(); } else if (mConfig.getProviderId().equals(PlayGamesAuthProvider.PROVIDER_ID)) { + provider = PlayGamesAuthProvider.PROVIDER_ID; token = account.getServerAuthCode(); } else { throw new IllegalStateException("Unsupported provider: " + mConfig.getProviderId()); } - setResult(Resource.forSuccess(createIdpResponse(account, token))); + setResult(Resource.forSuccess(createIdpResponse(provider, account, token))); } catch (ApiException e) { if (e.getStatusCode() == CommonStatusCodes.INVALID_ACCOUNT) { // If we get INVALID_ACCOUNT, it means the pre-set account was not available on the diff --git a/auth/src/main/java/com/firebase/ui/auth/util/data/ProviderUtils.java b/auth/src/main/java/com/firebase/ui/auth/util/data/ProviderUtils.java index abe1b6f37..dc6d696f4 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/data/ProviderUtils.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/data/ProviderUtils.java @@ -78,6 +78,8 @@ public static String signInMethodToProviderId(@NonNull String method) { switch (method) { case GoogleAuthProvider.GOOGLE_SIGN_IN_METHOD: return GoogleAuthProvider.PROVIDER_ID; + case PlayGamesAuthProvider.PLAY_GAMES_SIGN_IN_METHOD: + return PlayGamesAuthProvider.PROVIDER_ID; case FacebookAuthProvider.FACEBOOK_SIGN_IN_METHOD: return FacebookAuthProvider.PROVIDER_ID; case TwitterAuthProvider.TWITTER_SIGN_IN_METHOD: From e55d8143c7084ee65c472826d0c8f75e416878d0 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Sun, 29 Apr 2018 11:12:37 -0700 Subject: [PATCH 6/8] Add Play Games button Signed-off-by: Alex Saveau --- .../auth/ui/idp/AuthMethodPickerActivity.java | 6 ++- .../ui/auth/ui/idp/WelcomeBackIdpPrompt.java | 6 ++- .../fui_idp_button_background_play_games.xml | 9 ++++ .../drawable/fui_ic_play_games_color_24dp.xml | 52 +++++++++++++++++++ .../fui_idp_button_background_play_games.xml | 19 +++++++ .../res/layout/fui_idp_button_facebook.xml | 5 +- .../main/res/layout/fui_idp_button_google.xml | 5 +- .../res/layout/fui_idp_button_play_games.xml | 4 ++ .../res/layout/fui_idp_button_twitter.xml | 5 +- auth/src/main/res/values/colors.xml | 3 +- auth/src/main/res/values/strings.xml | 2 + auth/src/main/res/values/styles.xml | 6 +++ 12 files changed, 107 insertions(+), 15 deletions(-) create mode 100644 auth/src/main/res/drawable-v21/fui_idp_button_background_play_games.xml create mode 100644 auth/src/main/res/drawable/fui_ic_play_games_color_24dp.xml create mode 100644 auth/src/main/res/drawable/fui_idp_button_background_play_games.xml create mode 100644 auth/src/main/res/layout/fui_idp_button_play_games.xml diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivity.java index 0f24ce397..d5d982521 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivity.java @@ -125,7 +125,11 @@ private void populateIdpList(List providerConfigs, google.init(new GoogleSignInHandler.Params(idpConfig)); provider = google; - buttonLayout = R.layout.fui_idp_button_google; + if (idpConfig.getProviderId().equals(GoogleAuthProvider.PROVIDER_ID)) { + buttonLayout = R.layout.fui_idp_button_google; + } else { + buttonLayout = R.layout.fui_idp_button_play_games; + } break; case FacebookAuthProvider.PROVIDER_ID: FacebookSignInHandler facebook = supplier.get(FacebookSignInHandler.class); diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/idp/WelcomeBackIdpPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/WelcomeBackIdpPrompt.java index d3e1d4c92..1b5cf6d2f 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/idp/WelcomeBackIdpPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/idp/WelcomeBackIdpPrompt.java @@ -104,7 +104,11 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { google.init(new GoogleSignInHandler.Params(config, existingUser.getEmail())); mProvider = google; - providerName = R.string.fui_idp_name_google; + if (providerId.equals(GoogleAuthProvider.PROVIDER_ID)) { + providerName = R.string.fui_idp_name_google; + } else { + providerName = R.string.fui_idp_name_play_games; + } break; case FacebookAuthProvider.PROVIDER_ID: FacebookSignInHandler facebook = supplier.get(FacebookSignInHandler.class); diff --git a/auth/src/main/res/drawable-v21/fui_idp_button_background_play_games.xml b/auth/src/main/res/drawable-v21/fui_idp_button_background_play_games.xml new file mode 100644 index 000000000..1ff8fdb83 --- /dev/null +++ b/auth/src/main/res/drawable-v21/fui_idp_button_background_play_games.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/auth/src/main/res/drawable/fui_ic_play_games_color_24dp.xml b/auth/src/main/res/drawable/fui_ic_play_games_color_24dp.xml new file mode 100644 index 000000000..073171e5f --- /dev/null +++ b/auth/src/main/res/drawable/fui_ic_play_games_color_24dp.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/auth/src/main/res/drawable/fui_idp_button_background_play_games.xml b/auth/src/main/res/drawable/fui_idp_button_background_play_games.xml new file mode 100644 index 000000000..7d691219a --- /dev/null +++ b/auth/src/main/res/drawable/fui_idp_button_background_play_games.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/auth/src/main/res/layout/fui_idp_button_facebook.xml b/auth/src/main/res/layout/fui_idp_button_facebook.xml index b8ac067c5..47eb88122 100644 --- a/auth/src/main/res/layout/fui_idp_button_facebook.xml +++ b/auth/src/main/res/layout/fui_idp_button_facebook.xml @@ -1,7 +1,4 @@ + android:text="@string/fui_sign_in_with_facebook" /> diff --git a/auth/src/main/res/layout/fui_idp_button_google.xml b/auth/src/main/res/layout/fui_idp_button_google.xml index 23d55dd79..ff5e282c6 100644 --- a/auth/src/main/res/layout/fui_idp_button_google.xml +++ b/auth/src/main/res/layout/fui_idp_button_google.xml @@ -1,7 +1,4 @@ + android:text="@string/fui_sign_in_with_google" /> diff --git a/auth/src/main/res/layout/fui_idp_button_play_games.xml b/auth/src/main/res/layout/fui_idp_button_play_games.xml new file mode 100644 index 000000000..8dc7b878c --- /dev/null +++ b/auth/src/main/res/layout/fui_idp_button_play_games.xml @@ -0,0 +1,4 @@ + diff --git a/auth/src/main/res/layout/fui_idp_button_twitter.xml b/auth/src/main/res/layout/fui_idp_button_twitter.xml index 0813410d3..f186afebc 100644 --- a/auth/src/main/res/layout/fui_idp_button_twitter.xml +++ b/auth/src/main/res/layout/fui_idp_button_twitter.xml @@ -1,7 +1,4 @@ + android:text="@string/fui_sign_in_with_twitter" /> diff --git a/auth/src/main/res/values/colors.xml b/auth/src/main/res/values/colors.xml index 6b90b6c02..9291932eb 100644 --- a/auth/src/main/res/values/colors.xml +++ b/auth/src/main/res/values/colors.xml @@ -11,7 +11,8 @@ #64BEBEBE #D0021B #3B5998 - #ffffff + #FFFFFF + #FFFFFF #43C5A5 #FF5BAAF4 diff --git a/auth/src/main/res/values/strings.xml b/auth/src/main/res/values/strings.xml index d9d3b9335..910d9ef05 100644 --- a/auth/src/main/res/values/strings.xml +++ b/auth/src/main/res/values/strings.xml @@ -8,11 +8,13 @@ Google + Play Games Facebook Twitter Sign in with Google + Sign in with Play Games Sign in with Facebook Sign in with Twitter Sign in with email diff --git a/auth/src/main/res/values/styles.xml b/auth/src/main/res/values/styles.xml index ae3b546b1..5d058fbf5 100644 --- a/auth/src/main/res/values/styles.xml +++ b/auth/src/main/res/values/styles.xml @@ -218,6 +218,12 @@ #757575 + +