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 652624e7a..bb32351b2 100644 --- a/app/src/main/java/com/firebase/uidemo/auth/AuthUiActivity.java +++ b/app/src/main/java/com/firebase/uidemo/auth/AuthUiActivity.java @@ -33,6 +33,7 @@ import android.widget.TextView; import com.firebase.ui.auth.AuthUI; import com.firebase.ui.auth.AuthUI.IdpConfig; +import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.ui.ResultCodes; import com.firebase.uidemo.R; import com.google.android.gms.common.Scopes; @@ -128,7 +129,7 @@ public void onCreate(Bundle savedInstanceState) { FirebaseAuth auth = FirebaseAuth.getInstance(); if (auth.getCurrentUser() != null) { - startActivity(SignedInActivity.createIntent(this)); + startActivity(SignedInActivity.createIntent(this, null)); finish(); } @@ -219,7 +220,7 @@ private void setFacebookScopesEnabled(boolean enabled) { @MainThread private void handleSignInResponse(int resultCode, Intent data) { if (resultCode == RESULT_OK) { - startActivity(SignedInActivity.createIntent(this)); + startActivity(SignedInActivity.createIntent(this, IdpResponse.fromResultIntent(data))); finish(); return; } 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 4d6b4bdb8..d6f000ecb 100644 --- a/app/src/main/java/com/firebase/uidemo/auth/SignedInActivity.java +++ b/app/src/main/java/com/firebase/uidemo/auth/SignedInActivity.java @@ -28,9 +28,12 @@ import android.view.View; import android.widget.ImageView; import android.widget.TextView; - +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; import com.bumptech.glide.Glide; import com.firebase.ui.auth.AuthUI; +import com.firebase.ui.auth.IdpResponse; import com.firebase.uidemo.R; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; @@ -39,14 +42,10 @@ import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.GoogleAuthProvider; - import java.util.Iterator; -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; - public class SignedInActivity extends AppCompatActivity { + private static final String EXTRA_IDP_RESPONSE = "extra_idp_response"; @BindView(android.R.id.content) View mRootView; @@ -77,6 +76,7 @@ public void onCreate(Bundle savedInstanceState) { setContentView(R.layout.signed_in_layout); ButterKnife.bind(this); populateProfile(); + populateIdpToken(); } @OnClick(R.id.sign_out) @@ -173,15 +173,34 @@ private void populateProfile() { mEnabledProviders.setText(providerList); } + private void populateIdpToken() { + IdpResponse idpResponse = getIntent().getParcelableExtra(EXTRA_IDP_RESPONSE); + if (idpResponse != null) { + String token = idpResponse.getIdpToken(); + String secret = idpResponse.getIdpSecret(); + if (token == null) { + findViewById(R.id.idp_token_layout).setVisibility(View.GONE); + } else { + ((TextView) findViewById(R.id.idp_token)).setText(token); + } + if (secret == null) { + findViewById(R.id.idp_secret_layout).setVisibility(View.GONE); + } else { + ((TextView) findViewById(R.id.idp_secret)).setText(secret); + } + } + } + @MainThread private void showSnackbar(@StringRes int errorMessageRes) { Snackbar.make(mRootView, errorMessageRes, Snackbar.LENGTH_LONG) .show(); } - public static Intent createIntent(Context context) { + public static Intent createIntent(Context context, IdpResponse idpResponse) { Intent in = new Intent(); in.setClass(context, SignedInActivity.class); + in.putExtra(EXTRA_IDP_RESPONSE, idpResponse); return in; } } diff --git a/app/src/main/res/layout/signed_in_layout.xml b/app/src/main/res/layout/signed_in_layout.xml index b94f173fe..b70ed8ec4 100644 --- a/app/src/main/res/layout/signed_in_layout.xml +++ b/app/src/main/res/layout/signed_in_layout.xml @@ -90,8 +90,41 @@ android:layout_height="wrap_content" /> + + + + + + + + + + + - \ No newline at end of file + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b6188e6fd..260a9a8a2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -55,4 +55,6 @@ Example extra Facebook scopes Friends Photos + IDP Token + IDP Secret diff --git a/auth/README.md b/auth/README.md index 3b92a3b8d..adbc29ab5 100644 --- a/auth/README.md +++ b/auth/README.md @@ -199,6 +199,7 @@ startActivityForResult( #### Handling the sign-in response +#####Response codes The authentication flow only provides three response codes: `Activity.RESULT_OK` if a user is signed in, `Activity.RESULT_CANCELLED` if sign in failed, and `ResultCodes.RESULT_NO_NETWORK` if sign in failed due to a lack of network connectivity. @@ -239,6 +240,23 @@ see the [Firebase Auth documentation](https://firebase.google.com/docs/auth/android/manage-users#get_the_currently_signed-in_user) for more information. +##### ID Tokens +To retrieve the ID token that the IDP returned, you can extract an `IdpResponse` from the result +Intent. + +```java +protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + IdpResponse idpResponse = IdpResponse.fromResultIntent(data); + startActivity(new Intent(this, WelcomeBackActivity.class) + .putExtra("my_token". idpResponse.getIdpToken())); + } +} +``` + +Twitter also returns an AuthToken Secret which can be accessed with `idpResponse.getIdpSecret()`. + ### Sign out With the integrations provided by AuthUI, signing out a user is a multi-stage process: diff --git a/auth/src/main/AndroidManifest.xml b/auth/src/main/AndroidManifest.xml index cafe340f7..ff27ea34f 100644 --- a/auth/src/main/AndroidManifest.xml +++ b/auth/src/main/AndroidManifest.xml @@ -39,7 +39,7 @@ android:label="@string/default_toolbar_title" android:theme="@style/FirebaseUI.Translucent" /> CREATOR = new Creator() { + @Override + public IdpResponse createFromParcel(Parcel in) { + return new IdpResponse( + in.readString(), + in.readString(), + in.readString(), + in.readString() + ); + } + + @Override + public IdpResponse[] newArray(int size) { + return new IdpResponse[size]; + } + }; + + /** + * Get the type of provider. e.g. {@link AuthUI#GOOGLE_PROVIDER} + */ + public String getProviderType() { + return mProviderId; + } + + /** + * Get the token received as a result of logging in with the specified IDP + */ + @Nullable + public String getIdpToken() { + return mToken; + } + + /** + * Twitter only. Return the token secret received as a result of logging in with Twitter. + */ + @Nullable + public String getIdpSecret() { + return mSecret; + } + + /** + * Get the email used to sign in. + */ + @Nullable + public String getEmail() { + return mEmail; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(mProviderId); + dest.writeString(mEmail); + dest.writeString(mToken); + dest.writeString(mSecret); + } + + /** + * Extract the {@link IdpResponse} from the flow's result intent. + * @param resultIntent The intent which {@code onActivityResult} was called with. + * @return The IdpResponse containing the token(s) from signing in with the Idp + */ + @Nullable + public static IdpResponse fromResultIntent(Intent resultIntent) { + return resultIntent.getParcelableExtra(ExtraConstants.EXTRA_IDP_RESPONSE); + } +} diff --git a/auth/src/main/java/com/firebase/ui/auth/provider/FacebookProvider.java b/auth/src/main/java/com/firebase/ui/auth/provider/FacebookProvider.java index 13f6819af..d4bfaa441 100644 --- a/auth/src/main/java/com/firebase/ui/auth/provider/FacebookProvider.java +++ b/auth/src/main/java/com/firebase/ui/auth/provider/FacebookProvider.java @@ -19,7 +19,6 @@ import android.content.Intent; import android.os.Bundle; import android.util.Log; - import com.facebook.CallbackManager; import com.facebook.FacebookCallback; import com.facebook.FacebookException; @@ -30,19 +29,16 @@ import com.facebook.login.LoginResult; import com.firebase.ui.auth.AuthUI.IdpConfig; import com.firebase.ui.auth.BuildConfig; +import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.R; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.FacebookAuthProvider; - -import org.json.JSONException; -import org.json.JSONObject; - import java.util.ArrayList; import java.util.List; +import org.json.JSONException; +import org.json.JSONObject; -public class FacebookProvider implements IDPProvider, FacebookCallback { - public static final String ACCESS_TOKEN = "facebook_access_token"; - +public class FacebookProvider implements IdpProvider, FacebookCallback { protected static final String ERROR = "err"; protected static final String ERROR_MSG = "err_msg"; @@ -52,7 +48,7 @@ public class FacebookProvider implements IDPProvider, FacebookCallback mScopes; private CallbackManager mCallbackManager; - private IDPCallback mCallbackObject; + private IdpCallback mCallbackObject; public FacebookProvider(Context appContext, IdpConfig idpConfig) { mCallbackManager = CallbackManager.Factory.create(); @@ -107,7 +103,7 @@ public void startLogin(Activity activity) { } @Override - public void setAuthenticationCallback(IDPCallback callback) { + public void setAuthenticationCallback(IdpCallback callback) { this.mCallbackObject = callback; } @@ -144,18 +140,19 @@ public void onCompleted(JSONObject object, GraphResponse response) { request.executeAsync(); } - private IDPResponse createIDPResponse(LoginResult loginResult, String email) { - Bundle response = new Bundle(); - response.putString(ACCESS_TOKEN, loginResult.getAccessToken().getToken()); - return new IDPResponse(FacebookAuthProvider.PROVIDER_ID, email, response); + private IdpResponse createIDPResponse(LoginResult loginResult, String email) { + return new IdpResponse( + FacebookAuthProvider.PROVIDER_ID, + email, + loginResult.getAccessToken().getToken()); } - public static AuthCredential createAuthCredential(IDPResponse response) { + public static AuthCredential createAuthCredential(IdpResponse response) { if (!response.getProviderType().equals(FacebookAuthProvider.PROVIDER_ID)) { return null; } return FacebookAuthProvider - .getCredential(response.getResponse().getString(ACCESS_TOKEN)); + .getCredential(response.getIdpToken()); } @Override diff --git a/auth/src/main/java/com/firebase/ui/auth/provider/GoogleProvider.java b/auth/src/main/java/com/firebase/ui/auth/provider/GoogleProvider.java index eedf17d8d..cb23873ab 100644 --- a/auth/src/main/java/com/firebase/ui/auth/provider/GoogleProvider.java +++ b/auth/src/main/java/com/firebase/ui/auth/provider/GoogleProvider.java @@ -27,6 +27,7 @@ import android.view.View.OnClickListener; import com.firebase.ui.auth.AuthUI.IdpConfig; +import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.R; import com.google.android.gms.auth.api.Auth; import com.google.android.gms.auth.api.signin.GoogleSignInAccount; @@ -37,12 +38,9 @@ import com.google.android.gms.common.api.Scope; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.GoogleAuthProvider; -import java.util.List; public class GoogleProvider implements - IDPProvider, OnClickListener, GoogleApiClient.OnConnectionFailedListener { - - public static final String TOKEN_KEY = "token_key"; + IdpProvider, OnClickListener, GoogleApiClient.OnConnectionFailedListener { private static final String TAG = "GoogleProvider"; private static final int AUTO_MANAGE_ID = 1; @@ -50,7 +48,7 @@ public class GoogleProvider implements private static final String ERROR_KEY = "error"; private GoogleApiClient mGoogleApiClient; private Activity mActivity; - private IDPCallback mIDPCallback; + private IdpCallback mIDPCallback; public GoogleProvider(FragmentActivity activity, IdpConfig idpConfig) { this(activity, idpConfig, null); @@ -99,13 +97,12 @@ public String getProviderId() { } - public static AuthCredential createAuthCredential(IDPResponse response) { - Bundle bundle = response.getResponse(); - return GoogleAuthProvider.getCredential(bundle.getString(TOKEN_KEY), null); + public static AuthCredential createAuthCredential(IdpResponse response) { + return GoogleAuthProvider.getCredential(response.getIdpToken(), null); } @Override - public void setAuthenticationCallback(IDPCallback callback) { + public void setAuthenticationCallback(IdpCallback callback) { mIDPCallback = callback; } @@ -116,10 +113,9 @@ public void disconnect() { } } - private IDPResponse createIDPResponse(GoogleSignInAccount account) { - Bundle response = new Bundle(); - response.putString(TOKEN_KEY, account.getIdToken()); - return new IDPResponse(GoogleAuthProvider.PROVIDER_ID, account.getEmail(), response); + private IdpResponse createIDPResponse(GoogleSignInAccount account) { + return new IdpResponse( + GoogleAuthProvider.PROVIDER_ID, account.getEmail(), account.getIdToken()); } @Override diff --git a/auth/src/main/java/com/firebase/ui/auth/provider/IDPResponse.java b/auth/src/main/java/com/firebase/ui/auth/provider/IDPResponse.java deleted file mode 100644 index 9c7777be5..000000000 --- a/auth/src/main/java/com/firebase/ui/auth/provider/IDPResponse.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the - * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.firebase.ui.auth.provider; - -import android.os.Bundle; -import android.os.Parcel; -import android.os.Parcelable; - -public class IDPResponse implements Parcelable { - - private final String mProviderId; - private final String mEmail; - private final Bundle mResponseBundle; - - public IDPResponse(String providerId, String email, Bundle response) { - mProviderId = providerId; - mEmail = email; - mResponseBundle = response; - } - - public static final Creator CREATOR = new Creator() { - @Override - public IDPResponse createFromParcel(Parcel in) { - return new IDPResponse( - in.readString(), - in.readString(), - in.readBundle() - ); - } - - @Override - public IDPResponse[] newArray(int size) { - return new IDPResponse[size]; - } - }; - - public String getProviderType() { - return mProviderId; - } - - public Bundle getResponse() { - return mResponseBundle; - } - - public String getEmail() { - return mEmail; - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeString(mProviderId); - dest.writeString(mEmail); - dest.writeBundle(mResponseBundle); - } -} diff --git a/auth/src/main/java/com/firebase/ui/auth/provider/IDPProvider.java b/auth/src/main/java/com/firebase/ui/auth/provider/IdpProvider.java similarity index 83% rename from auth/src/main/java/com/firebase/ui/auth/provider/IDPProvider.java rename to auth/src/main/java/com/firebase/ui/auth/provider/IdpProvider.java index f614cbc4e..2a117c30e 100644 --- a/auth/src/main/java/com/firebase/ui/auth/provider/IDPProvider.java +++ b/auth/src/main/java/com/firebase/ui/auth/provider/IdpProvider.java @@ -18,8 +18,9 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; +import com.firebase.ui.auth.IdpResponse; -public interface IDPProvider { +public interface IdpProvider { /** * Retrieves the name of the IDP, for display on-screen. @@ -28,14 +29,14 @@ public interface IDPProvider { String getProviderId(); - void setAuthenticationCallback(IDPCallback callback); + void setAuthenticationCallback(IdpCallback callback); void onActivityResult(int requestCode, int resultCode, Intent data); void startLogin(Activity activity); - public interface IDPCallback { - public void onSuccess(IDPResponse idpResponse); + public interface IdpCallback { + public void onSuccess(IdpResponse idpResponse); public void onFailure(Bundle extra); } } diff --git a/auth/src/main/java/com/firebase/ui/auth/provider/TwitterProvider.java b/auth/src/main/java/com/firebase/ui/auth/provider/TwitterProvider.java index c3a46dacc..007161648 100644 --- a/auth/src/main/java/com/firebase/ui/auth/provider/TwitterProvider.java +++ b/auth/src/main/java/com/firebase/ui/auth/provider/TwitterProvider.java @@ -5,6 +5,7 @@ import android.content.Intent; import android.os.Bundle; +import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.R; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.TwitterAuthProvider; @@ -18,10 +19,8 @@ import io.fabric.sdk.android.Fabric; -public class TwitterProvider extends Callback implements IDPProvider { - public static final String EXTRA_AUTH_TOKEN = "extra_auth_token"; - public static final String EXTRA_AUTH_SECRET = "extra_auth_secret"; - private IDPCallback mCallbackObject; +public class TwitterProvider extends Callback implements IdpProvider { + private IdpCallback mCallbackObject; private TwitterAuthClient mTwitterAuthClient; public TwitterProvider(Context appContext) { @@ -43,7 +42,7 @@ public String getProviderId() { } @Override - public void setAuthenticationCallback(IDPCallback callback) { + public void setAuthenticationCallback(IdpCallback callback) { this.mCallbackObject = callback; } @@ -67,21 +66,21 @@ public void failure(TwitterException exception) { mCallbackObject.onFailure(new Bundle()); } - public static AuthCredential createAuthCredential(IDPResponse response) { + public static AuthCredential createAuthCredential(IdpResponse response) { if (!response.getProviderType().equalsIgnoreCase(TwitterAuthProvider.PROVIDER_ID)){ return null; } return TwitterAuthProvider.getCredential( - response.getResponse().getString(EXTRA_AUTH_TOKEN), - response.getResponse().getString(EXTRA_AUTH_SECRET)); + response.getIdpToken(), + response.getIdpSecret()); } - private IDPResponse createIDPResponse(TwitterSession twitterSession) { - Bundle response = new Bundle(); - response.putString(EXTRA_AUTH_TOKEN, twitterSession.getAuthToken().token); - response.putString(EXTRA_AUTH_SECRET, twitterSession.getAuthToken().secret); - return new IDPResponse(TwitterAuthProvider.PROVIDER_ID, twitterSession.getUserName(), response); + private IdpResponse createIDPResponse(TwitterSession twitterSession) { + return new IdpResponse( + TwitterAuthProvider.PROVIDER_ID, + null, + twitterSession.getAuthToken().token, + twitterSession.getAuthToken().secret); } - } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/AcquireEmailHelper.java b/auth/src/main/java/com/firebase/ui/auth/ui/AcquireEmailHelper.java index dff241ad0..4c11d904d 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/AcquireEmailHelper.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/AcquireEmailHelper.java @@ -18,7 +18,7 @@ import android.support.annotation.NonNull; import com.firebase.ui.auth.R; -import com.firebase.ui.auth.ui.account_link.WelcomeBackIDPPrompt; +import com.firebase.ui.auth.ui.account_link.WelcomeBackIdpPrompt; import com.firebase.ui.auth.ui.email.RegisterEmailActivity; import com.firebase.ui.auth.ui.email.SignInActivity; import com.google.android.gms.tasks.OnCompleteListener; @@ -90,7 +90,7 @@ private void startEmailHandler(String email, List providers) { return; } - Intent intent = WelcomeBackIDPPrompt.createIntent( + Intent intent = WelcomeBackIdpPrompt.createIntent( mActivityHelper.getApplicationContext(), mActivityHelper.getFlowParams(), provider, diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/AuthCredentialHelper.java b/auth/src/main/java/com/firebase/ui/auth/ui/AuthCredentialHelper.java index 6362b5df8..d614b9fe3 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/AuthCredentialHelper.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/AuthCredentialHelper.java @@ -18,7 +18,7 @@ import com.firebase.ui.auth.provider.FacebookProvider; import com.firebase.ui.auth.provider.GoogleProvider; -import com.firebase.ui.auth.provider.IDPResponse; +import com.firebase.ui.auth.IdpResponse; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.FacebookAuthProvider; import com.google.firebase.auth.GoogleAuthProvider; @@ -26,7 +26,7 @@ public class AuthCredentialHelper { @Nullable - public static AuthCredential getAuthCredential(IDPResponse idpResponse) { + public static AuthCredential getAuthCredential(IdpResponse idpResponse) { switch (idpResponse.getProviderType()) { case GoogleAuthProvider.PROVIDER_ID: return GoogleProvider.createAuthCredential(idpResponse); diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/ChooseAccountActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/ChooseAccountActivity.java index 2caf0cb01..54cbad225 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/ChooseAccountActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/ChooseAccountActivity.java @@ -26,7 +26,7 @@ import com.firebase.ui.auth.AuthUI.IdpConfig; import com.firebase.ui.auth.BuildConfig; import com.firebase.ui.auth.ui.idp.AuthMethodPickerActivity; -import com.firebase.ui.auth.ui.idp.IDPSignInContainerActivity; +import com.firebase.ui.auth.ui.idp.IdpSignInContainerActivity; import com.firebase.ui.auth.util.CredentialsAPI; import com.firebase.ui.auth.util.CredentialsApiHelper; import com.firebase.ui.auth.util.EmailFlowUtil; @@ -242,7 +242,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { case RC_IDP_SIGNIN: case RC_AUTH_METHOD_PICKER: case RC_EMAIL_FLOW: - finish(resultCode, new Intent()); + finish(resultCode, data); break; case RC_PLAY_SERVICES: if (resultCode != RESULT_OK) { @@ -313,21 +313,21 @@ protected void redirectToIdpSignIn(String email, String accountType) { Intent nextIntent; switch (accountType) { case IdentityProviders.GOOGLE: - nextIntent = IDPSignInContainerActivity.createIntent( + nextIntent = IdpSignInContainerActivity.createIntent( this, mActivityHelper.getFlowParams(), GoogleAuthProvider.PROVIDER_ID, email); break; case IdentityProviders.FACEBOOK: - nextIntent = IDPSignInContainerActivity.createIntent( + nextIntent = IdpSignInContainerActivity.createIntent( this, mActivityHelper.getFlowParams(), FacebookAuthProvider.PROVIDER_ID, email); break; case IdentityProviders.TWITTER: - nextIntent = IDPSignInContainerActivity.createIntent( + nextIntent = IdpSignInContainerActivity.createIntent( this, mActivityHelper.getFlowParams(), TwitterAuthProvider.PROVIDER_ID, diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/ExtraConstants.java b/auth/src/main/java/com/firebase/ui/auth/ui/ExtraConstants.java index c854730f9..9b919290a 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/ExtraConstants.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/ExtraConstants.java @@ -26,5 +26,4 @@ public class ExtraConstants { public static final String EXTRA_PASSWORD = "extra_password"; public static final String EXTRA_PROFILE_PICTURE_URI = "extra_profile_picture_uri"; public static final String EXTRA_PROVIDER = "extra_provider"; - public static final String EXTRA_SUCCESS = "success_extra"; } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/SaveCredentialsActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/SaveCredentialsActivity.java index 86a688eaa..01c8f9e7b 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/SaveCredentialsActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/SaveCredentialsActivity.java @@ -26,6 +26,7 @@ import com.firebase.ui.auth.BuildConfig; import com.firebase.ui.auth.R; +import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.ui.ActivityHelper; import com.firebase.ui.auth.ui.AppCompatBase; import com.firebase.ui.auth.ui.ExtraConstants; @@ -54,7 +55,7 @@ public class SaveCredentialsActivity extends AppCompatBase private String mName; private String mEmail; private String mPassword; - private String mProvider; + private IdpResponse mIdpResponse; private String mProfilePictureUri; private GoogleApiClient mCredentialsApiClient; @@ -72,7 +73,7 @@ protected void onCreate(Bundle savedInstanceState) { mName = getIntent().getStringExtra(ExtraConstants.EXTRA_NAME); mEmail = getIntent().getStringExtra(ExtraConstants.EXTRA_EMAIL); mPassword = getIntent().getStringExtra(ExtraConstants.EXTRA_PASSWORD); - mProvider = getIntent().getStringExtra(ExtraConstants.EXTRA_PROVIDER); + mIdpResponse = getIntent().getParcelableExtra(ExtraConstants.EXTRA_IDP_RESPONSE); mProfilePictureUri = getIntent() .getStringExtra(ExtraConstants.EXTRA_PROFILE_PICTURE_URI); @@ -95,14 +96,15 @@ public void onConnected(@Nullable Bundle bundle) { builder.setPassword(mPassword); if (mPassword == null) { // only password OR provider can be set, not both - if (mProvider != null) { + String provider = mIdpResponse.getProviderType(); + if (provider != null) { String translatedProvider = null; // translate the google.com/facebook.com provider strings into full URIs - if (mProvider.equals(GoogleAuthProvider.PROVIDER_ID)) { + if (provider.equals(GoogleAuthProvider.PROVIDER_ID)) { translatedProvider = IdentityProviders.GOOGLE; - } else if (mProvider.equals(FacebookAuthProvider.PROVIDER_ID)) { + } else if (provider.equals(FacebookAuthProvider.PROVIDER_ID)) { translatedProvider = IdentityProviders.FACEBOOK; - } else if (mProvider.equals(TwitterAuthProvider.PROVIDER_ID)) { + } else if (provider.equals(TwitterAuthProvider.PROVIDER_ID)) { translatedProvider = IdentityProviders.TWITTER; } @@ -204,14 +206,14 @@ public static Intent createIntent( FlowParameters flowParams, FirebaseUser user, @Nullable String password, - @Nullable String provider) { + @Nullable IdpResponse idpResponse) { String photoUrl = user.getPhotoUrl() != null ? user.getPhotoUrl().toString() : null; return ActivityHelper.createBaseIntent(context, SaveCredentialsActivity.class, flowParams) .putExtra(ExtraConstants.EXTRA_NAME, user.getDisplayName()) .putExtra(ExtraConstants.EXTRA_EMAIL, user.getEmail()) .putExtra(ExtraConstants.EXTRA_PASSWORD, password) - .putExtra(ExtraConstants.EXTRA_PROVIDER, provider) + .putExtra(ExtraConstants.EXTRA_IDP_RESPONSE, idpResponse) .putExtra(ExtraConstants.EXTRA_PROFILE_PICTURE_URI, photoUrl); } } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackIDPPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackIdpPrompt.java similarity index 87% rename from auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackIDPPrompt.java rename to auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackIdpPrompt.java index 8bebe5a5c..30f1d4eee 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackIDPPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackIdpPrompt.java @@ -28,8 +28,9 @@ import com.firebase.ui.auth.R; import com.firebase.ui.auth.provider.FacebookProvider; import com.firebase.ui.auth.provider.GoogleProvider; -import com.firebase.ui.auth.provider.IDPProvider; -import com.firebase.ui.auth.provider.IDPResponse; +import com.firebase.ui.auth.provider.IdpProvider; +import com.firebase.ui.auth.provider.IdpProvider.IdpCallback; +import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.ui.ActivityHelper; import com.firebase.ui.auth.ui.AppCompatBase; import com.firebase.ui.auth.ui.AuthCredentialHelper; @@ -45,13 +46,13 @@ import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.GoogleAuthProvider; -public class WelcomeBackIDPPrompt extends AppCompatBase - implements View.OnClickListener, IDPProvider.IDPCallback { +public class WelcomeBackIdpPrompt extends AppCompatBase + implements View.OnClickListener, IdpCallback { private static final String TAG = "WelcomeBackIDPPrompt"; - private IDPProvider mIdpProvider; + private IdpProvider mIdpProvider; private String mProviderId; - private IDPResponse mPrevIdpResponse; + private IdpResponse mPrevIdpResponse; private AuthCredential mPrevCredential; @@ -60,8 +61,6 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mProviderId = getProviderIdFromIntent(); mPrevIdpResponse = getIntent().getParcelableExtra(ExtraConstants.EXTRA_IDP_RESPONSE); - FlowParameters flowParameters = - getIntent().getParcelableExtra(ExtraConstants.EXTRA_FLOW_PARAMS); setContentView(R.layout.welcome_back_idp_prompt_layout); mIdpProvider = null; @@ -102,7 +101,7 @@ protected void onCreate(Bundle savedInstanceState) { @Override public void onClick(View view) { mActivityHelper.showLoadingDialog(R.string.progress_dialog_signing_in); - mIdpProvider.startLogin(WelcomeBackIDPPrompt.this); + mIdpProvider.startLogin(WelcomeBackIdpPrompt.this); } }); } @@ -124,7 +123,7 @@ public void onClick(View view) { } @Override - public void onSuccess(IDPResponse idpResponse) { + public void onSuccess(IdpResponse idpResponse) { next(idpResponse); } @@ -142,7 +141,7 @@ private String getEmailFromIntent() { return getIntent().getStringExtra(ExtraConstants.EXTRA_EMAIL); } - private void next(IDPResponse newIdpResponse) { + private void next(final IdpResponse newIdpResponse) { if (newIdpResponse == null) { return; // do nothing } @@ -170,10 +169,11 @@ public void onComplete(@NonNull Task task) { .signInWithCredential(mPrevCredential) .addOnFailureListener(new TaskFailureLogger( TAG, "Error signing in with previous credential")) - .addOnCompleteListener(new FinishListener()); + .addOnCompleteListener(new FinishListener(newIdpResponse)); } else { mActivityHelper.dismissDialog(); - finish(Activity.RESULT_OK, new Intent()); + finish(Activity.RESULT_OK, new Intent().putExtra( + ExtraConstants.EXTRA_IDP_RESPONSE, newIdpResponse)); } } }).addOnFailureListener( @@ -184,7 +184,7 @@ public void onComplete(@NonNull Task task) { authResultTask .addOnFailureListener( new TaskFailureLogger(TAG, "Error linking with credential")) - .addOnCompleteListener(new FinishListener()); + .addOnCompleteListener(new FinishListener(newIdpResponse)); } } @@ -192,19 +192,24 @@ public static Intent createIntent( Context context, FlowParameters flowParams, String providerId, - IDPResponse idpResponse, + IdpResponse idpResponse, String email) { - return ActivityHelper.createBaseIntent(context, WelcomeBackIDPPrompt.class, flowParams) + return ActivityHelper.createBaseIntent(context, WelcomeBackIdpPrompt.class, flowParams) .putExtra(ExtraConstants.EXTRA_PROVIDER, providerId) .putExtra(ExtraConstants.EXTRA_IDP_RESPONSE, idpResponse) .putExtra(ExtraConstants.EXTRA_EMAIL, email); } private class FinishListener implements OnCompleteListener { - @Override + private final IdpResponse mIdpResponse; + + FinishListener(IdpResponse idpResponse) { + mIdpResponse = idpResponse; + } public void onComplete(@NonNull Task task) { mActivityHelper.dismissDialog(); - finish(Activity.RESULT_OK, new Intent()); + finish(Activity.RESULT_OK, + new Intent().putExtra(ExtraConstants.EXTRA_IDP_RESPONSE, mIdpResponse)); } } } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java index e8683ab2d..3d07f231a 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/account_link/WelcomeBackPasswordPrompt.java @@ -28,8 +28,8 @@ import android.widget.EditText; import android.widget.TextView; +import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.R; -import com.firebase.ui.auth.provider.IDPResponse; import com.firebase.ui.auth.ui.ActivityHelper; import com.firebase.ui.auth.ui.AppCompatBase; import com.firebase.ui.auth.ui.AuthCredentialHelper; @@ -58,7 +58,7 @@ public class WelcomeBackPasswordPrompt extends AppCompatBase implements View.OnC private String mEmail; private TextInputLayout mPasswordLayout; private EditText mPasswordField; - private IDPResponse mIdpResponse; + private IdpResponse mIdpResponse; @Override protected void onCreate(Bundle savedInstanceState) { @@ -172,7 +172,7 @@ public void onFailure(@NonNull Exception e) { public static Intent createIntent( Context context, FlowParameters flowParams, - IDPResponse response) { + IdpResponse response) { return ActivityHelper.createBaseIntent(context, WelcomeBackPasswordPrompt.class, flowParams) .putExtra(ExtraConstants.EXTRA_IDP_RESPONSE, response); } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/EmailHintContainerActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/EmailHintContainerActivity.java index c30d13d9c..94b95344c 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/EmailHintContainerActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/EmailHintContainerActivity.java @@ -49,7 +49,6 @@ protected void onCreate(Bundle savedInstanceState) { } } finish(RESULT_CANCELED, new Intent()); - return; } @Override 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 37cbd97eb..d53a69c66 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 @@ -28,8 +28,9 @@ import com.firebase.ui.auth.R; import com.firebase.ui.auth.provider.FacebookProvider; import com.firebase.ui.auth.provider.GoogleProvider; -import com.firebase.ui.auth.provider.IDPProvider; -import com.firebase.ui.auth.provider.IDPResponse; +import com.firebase.ui.auth.provider.IdpProvider; +import com.firebase.ui.auth.provider.IdpProvider.IdpCallback; +import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.provider.TwitterProvider; import com.firebase.ui.auth.ui.ActivityHelper; import com.firebase.ui.auth.ui.FlowParameters; @@ -47,7 +48,7 @@ /** * Presents the list of authentication options for this app to the user. If an - * identity provider option is selected, a {@link IDPSignInContainerActivity container activity} + * identity provider option is selected, a {@link IdpSignInContainerActivity container activity} * is launched to manage the IDP-specific sign-in flow. If email authentication is chosen, * the {@link EmailHintContainerActivity root email flow activity} is started. * @@ -57,13 +58,13 @@ */ public class AuthMethodPickerActivity extends IDPBaseActivity - implements IDPProvider.IDPCallback, View.OnClickListener { + implements IdpCallback, View.OnClickListener { private static final int RC_EMAIL_FLOW = 2; private static final int RC_ACCOUNT_LINK = 3; private static final int RC_SAVE_CREDENTIAL = 4; private static final String TAG = "AuthMethodPicker"; - private ArrayList mIdpProviders; + private ArrayList mIdpProviders; @Override protected void onCreate(Bundle savedInstanceState) { @@ -108,7 +109,7 @@ private void populateIdpList(List providers) { } LinearLayout btnHolder = (LinearLayout) findViewById(R.id.btn_holder); - for (final IDPProvider provider: mIdpProviders) { + for (final IdpProvider provider: mIdpProviders) { View loginButton = null; switch (provider.getProviderId()) { case GoogleAuthProvider.PROVIDER_ID: @@ -145,21 +146,21 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_EMAIL_FLOW) { if (resultCode == RESULT_OK) { - finish(RESULT_OK, new Intent()); + finish(RESULT_OK, data); } } else if (requestCode == RC_SAVE_CREDENTIAL) { - finish(RESULT_OK, new Intent()); + finish(RESULT_OK, data); } else if (requestCode == RC_ACCOUNT_LINK) { - finish(resultCode, new Intent()); + finish(resultCode, data); } else { - for(IDPProvider provider : mIdpProviders) { + for(IdpProvider provider : mIdpProviders) { provider.onActivityResult(requestCode, resultCode, data); } } } @Override - public void onSuccess(final IDPResponse response) { + public void onSuccess(final IdpResponse response) { AuthCredential credential = createCredential(response); final FirebaseAuth firebaseAuth = mActivityHelper.getFirebaseAuth(); @@ -195,7 +196,7 @@ public void onClick(View view) { protected void onDestroy() { super.onDestroy(); if (mIdpProviders != null) { - for (final IDPProvider provider : mIdpProviders) { + for (final IdpProvider provider : mIdpProviders) { if (provider instanceof GoogleProvider) { ((GoogleProvider) provider).disconnect(); } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandler.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandler.java index 8800a73ab..3de29302a 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandler.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandler.java @@ -18,10 +18,10 @@ import android.support.annotation.NonNull; import android.util.Log; -import com.firebase.ui.auth.provider.IDPResponse; +import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.ui.ActivityHelper; import com.firebase.ui.auth.ui.TaskFailureLogger; -import com.firebase.ui.auth.ui.account_link.WelcomeBackIDPPrompt; +import com.firebase.ui.auth.ui.account_link.WelcomeBackIdpPrompt; import com.firebase.ui.auth.ui.account_link.WelcomeBackPasswordPrompt; import com.firebase.ui.auth.util.SmartlockUtil; import com.google.android.gms.tasks.OnCompleteListener; @@ -41,14 +41,14 @@ public class CredentialSignInHandler implements OnCompleteListener { private int mSaveCredentialsResultCode; private Activity mActivity; private ActivityHelper mActivityHelper; - private IDPResponse mResponse; + private IdpResponse mResponse; public CredentialSignInHandler( Activity activity, ActivityHelper activityHelper, int accountLinkResultCode, int saveCredentialsResultCode, - IDPResponse response) { + IdpResponse response) { mActivity = activity; mAccountLinkResultCode = accountLinkResultCode; mSaveCredentialsResultCode = saveCredentialsResultCode; @@ -85,7 +85,7 @@ public void onFailure(@NonNull Exception e) { FirebaseUser firebaseUser = task.getResult().getUser(); SmartlockUtil.saveCredentialOrFinish(mActivity, mSaveCredentialsResultCode, mActivityHelper.getFlowParams(), firebaseUser, - null /* password */, mResponse.getProviderType()); + null /* password */, mResponse); } } @@ -113,7 +113,7 @@ public void onSuccess(@NonNull ProviderQueryResult result) { } else { // Start IDP welcome back flow mActivity.startActivityForResult( - WelcomeBackIDPPrompt.createIntent( + WelcomeBackIdpPrompt.createIntent( mActivityHelper.getApplicationContext(), mActivityHelper.getFlowParams(), result.getProviders().get(0), diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPBaseActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPBaseActivity.java index 5c0927726..dcfc87ae1 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPBaseActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPBaseActivity.java @@ -16,7 +16,7 @@ import com.firebase.ui.auth.provider.FacebookProvider; import com.firebase.ui.auth.provider.GoogleProvider; -import com.firebase.ui.auth.provider.IDPResponse; +import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.provider.TwitterProvider; import com.firebase.ui.auth.ui.AppCompatBase; import com.google.firebase.auth.AuthCredential; @@ -25,7 +25,7 @@ import com.google.firebase.auth.TwitterAuthProvider; public class IDPBaseActivity extends AppCompatBase { - protected AuthCredential createCredential(IDPResponse idpSignInResponse) { + protected AuthCredential createCredential(IdpResponse idpSignInResponse) { if (idpSignInResponse.getProviderType().equalsIgnoreCase(FacebookAuthProvider.PROVIDER_ID)) { return FacebookProvider.createAuthCredential(idpSignInResponse); } else if (idpSignInResponse.getProviderType().equalsIgnoreCase(GoogleAuthProvider diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/IdpSignInContainerActivity.java similarity index 89% rename from auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java rename to auth/src/main/java/com/firebase/ui/auth/ui/idp/IdpSignInContainerActivity.java index 62fafda75..32225191c 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/idp/IDPSignInContainerActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/idp/IdpSignInContainerActivity.java @@ -17,12 +17,12 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; - import com.firebase.ui.auth.AuthUI.IdpConfig; +import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.provider.FacebookProvider; import com.firebase.ui.auth.provider.GoogleProvider; -import com.firebase.ui.auth.provider.IDPProvider; -import com.firebase.ui.auth.provider.IDPResponse; +import com.firebase.ui.auth.provider.IdpProvider; +import com.firebase.ui.auth.provider.IdpProvider.IdpCallback; import com.firebase.ui.auth.provider.TwitterProvider; import com.firebase.ui.auth.ui.ActivityHelper; import com.firebase.ui.auth.ui.ExtraConstants; @@ -33,14 +33,14 @@ import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FacebookAuthProvider; import com.google.firebase.auth.FirebaseAuth; -import com.google.firebase.auth.GoogleAuthProvider; import com.google.firebase.auth.TwitterAuthProvider; +import com.google.firebase.auth.GoogleAuthProvider; -public class IDPSignInContainerActivity extends IDPBaseActivity implements IDPProvider.IDPCallback { +public class IdpSignInContainerActivity extends IDPBaseActivity implements IdpCallback { private static final String TAG = "IDPSignInContainer"; private static final int RC_WELCOME_BACK_IDP = 4; private static final int RC_SAVE_CREDENTIALS = 5; - private IDPProvider mIDPProvider; + private IdpProvider mIDPProvider; private String mProvider; private String mEmail; @@ -73,7 +73,7 @@ protected void onCreate(Bundle savedInstanceState) { } @Override - public void onSuccess(final IDPResponse response) { + public void onSuccess(final IdpResponse response) { Intent data = new Intent(); data.putExtra(ExtraConstants.EXTRA_IDP_RESPONSE, response); AuthCredential credential = createCredential(response); @@ -83,7 +83,7 @@ public void onSuccess(final IDPResponse response) { .addOnFailureListener( new TaskFailureLogger(TAG, "Failure authenticating with credential")) .addOnCompleteListener(new CredentialSignInHandler( - IDPSignInContainerActivity.this, + IdpSignInContainerActivity.this, mActivityHelper, RC_WELCOME_BACK_IDP, RC_SAVE_CREDENTIALS, @@ -99,9 +99,9 @@ public void onFailure(Bundle extra) { public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_WELCOME_BACK_IDP) { - finish(resultCode, new Intent()); + finish(resultCode, data); } else if (requestCode == RC_SAVE_CREDENTIALS) { - finish(RESULT_OK, new Intent()); + finish(RESULT_OK, data); } else { mIDPProvider.onActivityResult(requestCode, resultCode, data); } @@ -114,7 +114,7 @@ public static Intent createIntent( String email) { return ActivityHelper.createBaseIntent( context, - IDPSignInContainerActivity.class, + IdpSignInContainerActivity.class, flowParams) .putExtra(ExtraConstants.EXTRA_PROVIDER, provider) .putExtra(ExtraConstants.EXTRA_EMAIL, email); diff --git a/auth/src/main/java/com/firebase/ui/auth/util/SmartlockUtil.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartlockUtil.java index c67a9d815..78eb55677 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/SmartlockUtil.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/SmartlockUtil.java @@ -7,6 +7,8 @@ import android.text.TextUtils; import android.util.Log; +import com.firebase.ui.auth.IdpResponse; +import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.account_link.SaveCredentialsActivity; import com.google.android.gms.auth.api.credentials.Credential; @@ -37,30 +39,30 @@ public class SmartlockUtil { * @param parameters calling Activity flow parameters. * @param firebaseUser Firebase user to save in Credential. * @param password (optional) password for email credential. - * @param provider (optional) provider string for provider credential. + * @param idpResponse (optional) response from signing in with a credential. */ public static void saveCredentialOrFinish(Activity activity, int requestCode, FlowParameters parameters, FirebaseUser firebaseUser, @Nullable String password, - @Nullable String provider) { + @Nullable IdpResponse idpResponse) { // If SmartLock is disabled, finish the Activity if (!parameters.smartLockEnabled) { - finishActivity(activity); + finishActivity(activity, idpResponse); return; } // If Play Services is not available, finish the Activity if(!PlayServicesHelper.getInstance(activity).isPlayServicesAvailable()) { - finishActivity(activity); + finishActivity(activity, idpResponse); return; } // Launch save activity Intent saveCredentialIntent = SaveCredentialsActivity.createIntent(activity, parameters, - firebaseUser, password, provider); + firebaseUser, password, idpResponse); activity.startActivityForResult(saveCredentialIntent, requestCode); } @@ -118,8 +120,10 @@ public static List credentialsFromFirebaseUser(@NonNull FirebaseUser return credentials; } - private static void finishActivity(Activity activity) { - activity.setResult(Activity.RESULT_OK, new Intent()); + private static void finishActivity(Activity activity, IdpResponse idpResponse) { + activity.setResult( + Activity.RESULT_OK, + new Intent().putExtra(ExtraConstants.EXTRA_IDP_RESPONSE, idpResponse)); activity.finish(); } diff --git a/auth/src/test/java/com/firebase/ui/auth/test_helpers/FacebookProviderShadow.java b/auth/src/test/java/com/firebase/ui/auth/test_helpers/FacebookProviderShadow.java index f5779158a..b6e5d980c 100644 --- a/auth/src/test/java/com/firebase/ui/auth/test_helpers/FacebookProviderShadow.java +++ b/auth/src/test/java/com/firebase/ui/auth/test_helpers/FacebookProviderShadow.java @@ -15,12 +15,11 @@ package com.firebase.ui.auth.test_helpers; import android.app.Activity; -import android.os.Bundle; import com.facebook.login.LoginResult; import com.firebase.ui.auth.provider.FacebookProvider; -import com.firebase.ui.auth.provider.IDPProvider; -import com.firebase.ui.auth.provider.IDPResponse; +import com.firebase.ui.auth.provider.IdpProvider.IdpCallback; +import com.firebase.ui.auth.IdpResponse; import com.google.firebase.auth.FacebookAuthProvider; import java.util.List; @@ -34,27 +33,21 @@ @Implements(FacebookProvider.class) public class FacebookProviderShadow { private static final String FAKE_ACCESS_TOKEN = "fake_access_token"; - private IDPResponse mMockIdpResponse; - private Bundle mMockIdpResponseBundle; - private IDPProvider.IDPCallback mCallback; + private IdpResponse mMockIdpResponse; + private IdpCallback mCallback; public FacebookProviderShadow() { - if(mMockIdpResponseBundle == null) { - mMockIdpResponseBundle = mock(Bundle.class); - } if (mMockIdpResponse == null) { - mMockIdpResponse = mock(IDPResponse.class); + mMockIdpResponse = mock(IdpResponse.class); when(mMockIdpResponse.getProviderType()).thenReturn(FacebookAuthProvider.PROVIDER_ID); - when(mMockIdpResponse.getResponse()).thenReturn(mMockIdpResponseBundle); - when(mMockIdpResponseBundle - .getString(FacebookProvider.ACCESS_TOKEN)).thenReturn(FAKE_ACCESS_TOKEN); + when(mMockIdpResponse.getIdpToken()).thenReturn(FAKE_ACCESS_TOKEN); } } public void __constructor__(Activity activity, List scopes) {} @Implementation - public void setAuthenticationCallback(IDPProvider.IDPCallback idpCallback) { + public void setAuthenticationCallback(IdpCallback idpCallback) { mCallback = idpCallback; } diff --git a/auth/src/test/java/com/firebase/ui/auth/test_helpers/GoogleProviderShadow.java b/auth/src/test/java/com/firebase/ui/auth/test_helpers/GoogleProviderShadow.java index 961924b25..d46887206 100644 --- a/auth/src/test/java/com/firebase/ui/auth/test_helpers/GoogleProviderShadow.java +++ b/auth/src/test/java/com/firebase/ui/auth/test_helpers/GoogleProviderShadow.java @@ -15,12 +15,11 @@ package com.firebase.ui.auth.test_helpers; import android.app.Activity; -import android.os.Bundle; import android.support.v4.app.FragmentActivity; import com.firebase.ui.auth.provider.GoogleProvider; -import com.firebase.ui.auth.provider.IDPProvider; -import com.firebase.ui.auth.provider.IDPResponse; +import com.firebase.ui.auth.provider.IdpProvider.IdpCallback; +import com.firebase.ui.auth.IdpResponse; import com.google.firebase.auth.GoogleAuthProvider; import java.util.List; @@ -34,27 +33,21 @@ @Implements(GoogleProvider.class) public class GoogleProviderShadow { private static final String FAKE_TOKEN = "fake_token"; - private IDPResponse mMockIdpResponse; - private Bundle mMockIdpResponseBundle; - private IDPProvider.IDPCallback mCallback; + private IdpResponse mMockIdpResponse; + private IdpCallback mCallback; public GoogleProviderShadow() { - if(mMockIdpResponseBundle == null) { - mMockIdpResponseBundle = mock(Bundle.class); - } if (mMockIdpResponse == null) { - mMockIdpResponse = mock(IDPResponse.class); + mMockIdpResponse = mock(IdpResponse.class); when(mMockIdpResponse.getProviderType()).thenReturn(GoogleAuthProvider.PROVIDER_ID); - when(mMockIdpResponse.getResponse()).thenReturn(mMockIdpResponseBundle); - when(mMockIdpResponseBundle - .getString(GoogleProvider.TOKEN_KEY)).thenReturn(FAKE_TOKEN); + when(mMockIdpResponse.getIdpToken()).thenReturn(FAKE_TOKEN); } } public void __constructor__(FragmentActivity activity, String email, List scopes) {} @Implementation - public void setAuthenticationCallback(IDPProvider.IDPCallback idpCallback) { + public void setAuthenticationCallback(IdpCallback idpCallback) { mCallback = idpCallback; } diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/ChooseAccountActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/ChooseAccountActivityTest.java index 589fc4091..acff63d63 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/ChooseAccountActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/ChooseAccountActivityTest.java @@ -24,7 +24,7 @@ import com.firebase.ui.auth.test_helpers.FakeAuthResult; import com.firebase.ui.auth.test_helpers.TestConstants; import com.firebase.ui.auth.test_helpers.TestHelper; -import com.firebase.ui.auth.ui.idp.IDPSignInContainerActivity; +import com.firebase.ui.auth.ui.idp.IdpSignInContainerActivity; import com.firebase.ui.auth.util.CredentialsAPI; import com.firebase.ui.auth.util.PlayServicesHelper; import com.google.android.gms.auth.api.credentials.IdentityProviders; @@ -136,7 +136,7 @@ public void testAutoSignInWithSavedIdp_redirectsToIdpSignIn() { .getNextStartedActivityForResult(); assertEquals( - IDPSignInContainerActivity.class.getName(), + IdpSignInContainerActivity.class.getName(), nextIntent.intent.getComponent().getClassName() ); assertEquals( diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivityTest.java index adfe63ea2..287572380 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivityTest.java @@ -21,6 +21,7 @@ import com.firebase.ui.auth.AuthUI; import com.firebase.ui.auth.BuildConfig; +import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.R; import com.firebase.ui.auth.test_helpers.ActivityHelperShadow; import com.firebase.ui.auth.test_helpers.AutoCompleteTask; @@ -222,7 +223,10 @@ private static void verifySaveCredentialIntent( nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PROFILE_PICTURE_URI), TestConstants.PHOTO_URL); assertEquals( - nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PROVIDER), + ((IdpResponse) nextIntent + .intent + .getExtras() + .getParcelable(ExtraConstants.EXTRA_IDP_RESPONSE)).getProviderType(), provider); assertEquals( nextIntent.intent.getExtras().getString(ExtraConstants.EXTRA_PASSWORD), diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java index 75712a006..6e90ae9e9 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/idp/CredentialSignInHandlerTest.java @@ -17,11 +17,10 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; -import android.os.Bundle; import com.firebase.ui.auth.AuthUI; import com.firebase.ui.auth.BuildConfig; -import com.firebase.ui.auth.provider.IDPResponse; +import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.test_helpers.ActivityHelperShadow; import com.firebase.ui.auth.test_helpers.AutoCompleteTask; import com.firebase.ui.auth.test_helpers.CustomRobolectricGradleTestRunner; @@ -33,7 +32,7 @@ import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.account_link.SaveCredentialsActivity; -import com.firebase.ui.auth.ui.account_link.WelcomeBackIDPPrompt; +import com.firebase.ui.auth.ui.account_link.WelcomeBackIdpPrompt; import com.firebase.ui.auth.ui.account_link.WelcomeBackPasswordPrompt; import com.firebase.ui.auth.util.CredentialsAPI; import com.firebase.ui.auth.util.PlayServicesHelper; @@ -92,10 +91,9 @@ public void testSignInSucceeded() { Activity mockActivity = mock(Activity.class); ActivityHelper mockActivityHelper = mock(ActivityHelper.class); FirebaseUser mockFirebaseUser = TestHelper.makeMockFirebaseUser(); - IDPResponse idpResponse = new IDPResponse( + IdpResponse idpResponse = new IdpResponse( GoogleAuthProvider.PROVIDER_ID, - TestConstants.EMAIL, - new Bundle()); + TestConstants.EMAIL); CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler( mockActivity, mockActivityHelper, @@ -139,10 +137,9 @@ public void testSignInFailed_withFacebookAlreadyLinked() { Activity mockActivity = mock(Activity.class); ActivityHelper mockActivityHelper = mock(ActivityHelper.class); FirebaseAuth mockFirebaseAuth = mock(FirebaseAuth.class); - IDPResponse idpResponse = new IDPResponse( + IdpResponse idpResponse = new IdpResponse( GoogleAuthProvider.PROVIDER_ID, - TestConstants.EMAIL, - new Bundle()); + TestConstants.EMAIL); CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler( mockActivity, mockActivityHelper, @@ -172,7 +169,7 @@ public void testSignInFailed_withFacebookAlreadyLinked() { Intent capturedIntent = intentCaptor.getValue(); assertEquals(RC_ACCOUNT_LINK, (int) intCaptor.getValue()); assertEquals( - WelcomeBackIDPPrompt.class.getName(), + WelcomeBackIdpPrompt.class.getName(), capturedIntent.getComponent().getClassName()); assertEquals( TestConstants.EMAIL, @@ -189,10 +186,9 @@ public void testSignInFailed_withPasswordAccountAlreadyLinked() { Activity mockActivity = mock(Activity.class); ActivityHelper mockActivityHelper = mock(ActivityHelper.class); FirebaseAuth mockFirebaseAuth = mock(FirebaseAuth.class); - IDPResponse idpResponse = new IDPResponse( + IdpResponse idpResponse = new IdpResponse( GoogleAuthProvider.PROVIDER_ID, - TestConstants.EMAIL, - new Bundle()); + TestConstants.EMAIL); CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler( mockActivity, mockActivityHelper, @@ -229,7 +225,7 @@ public void testSignInFailed_withPasswordAccountAlreadyLinked() { capturedIntent.getComponent().getClassName()); assertEquals( TestConstants.EMAIL, - ((IDPResponse) capturedIntent.getExtras().getParcelable(ExtraConstants + ((IdpResponse) capturedIntent.getExtras().getParcelable(ExtraConstants .EXTRA_IDP_RESPONSE)).getEmail()); } } diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/provider/TwitterProviderTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/provider/TwitterProviderTest.java index 049ca7345..1dfb71e81 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/provider/TwitterProviderTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/provider/TwitterProviderTest.java @@ -3,8 +3,8 @@ import android.os.Bundle; import com.firebase.ui.auth.BuildConfig; -import com.firebase.ui.auth.provider.IDPProvider; -import com.firebase.ui.auth.provider.IDPResponse; +import com.firebase.ui.auth.provider.IdpProvider.IdpCallback; +import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.provider.TwitterProvider; import com.firebase.ui.auth.test_helpers.CustomRobolectricGradleTestRunner; import com.firebase.ui.auth.test_helpers.FacebookProviderShadow; @@ -38,7 +38,7 @@ public class TwitterProviderTest { private static final long FAKE_USER_ID = 555; private static final String FAKE_USER_NAME = "testAccountName"; - private static class AssertResultCallback implements IDPProvider.IDPCallback { + private static class AssertResultCallback implements IdpCallback { private CountDownLatch mCountDownLatch; private boolean mAssertSuccess; @@ -52,7 +52,7 @@ private void await() throws InterruptedException { } @Override - public void onSuccess(IDPResponse idpResponse) { + public void onSuccess(IdpResponse idpResponse) { assertTrue(mAssertSuccess); mCountDownLatch.countDown(); }