diff --git a/auth/src/main/AndroidManifest.xml b/auth/src/main/AndroidManifest.xml index 64ed09baf..5491d1ffa 100644 --- a/auth/src/main/AndroidManifest.xml +++ b/auth/src/main/AndroidManifest.xml @@ -13,46 +13,57 @@ task) { // the account creation succeeded and we want to save // the credential to SmartLock (if enabled). SmartLock.getInstance(RegisterEmailActivity.this, TAG) - .saveCredentialsOrFinish(RegisterEmailActivity.this, - mActivityHelper, - firebaseUser, - password, - null /* provider */); + .saveCredentialsOrFinish( + RegisterEmailActivity.this, + mActivityHelper, + firebaseUser, + password, + null); } }); } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/SignInActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/SignInActivity.java index 7d091eac7..fb7c1ad80 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/SignInActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/SignInActivity.java @@ -26,6 +26,8 @@ import android.widget.ImageView; import android.widget.TextView; +import com.firebase.ui.auth.AuthUI; +import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.R; import com.firebase.ui.auth.ui.ActivityHelper; import com.firebase.ui.auth.ui.AppCompatBase; @@ -89,7 +91,7 @@ protected void onCreate(Bundle savedInstanceState) { recoveryButton.setOnClickListener(this); } - private void signIn(String email, final String password) { + private void signIn(final String email, final String password) { mActivityHelper.getFirebaseAuth() .signInWithEmailAndPassword(email, password) .addOnFailureListener( @@ -103,7 +105,7 @@ public void onSuccess(AuthResult authResult) { mActivityHelper, authResult.getUser(), password, - null /* provider */); + null); } }) .addOnFailureListener(new OnFailureListener() { 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 e5a8da173..0d6ca0e8b 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 @@ -65,7 +65,7 @@ public void onComplete(@NonNull Task task) { mActivityHelper, firebaseUser, null /* password */, - mResponse.getProviderType()); + mResponse); } else { if (task.getException() instanceof FirebaseAuthUserCollisionException) { final String email = mResponse.getEmail(); diff --git a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java index 864e2928f..91d8e85b4 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/SmartLock.java @@ -25,10 +25,11 @@ import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.util.Log; - import com.firebase.ui.auth.BuildConfig; +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; import com.google.android.gms.auth.api.Auth; import com.google.android.gms.auth.api.credentials.Credential; import com.google.android.gms.auth.api.credentials.IdentityProviders; @@ -42,8 +43,6 @@ import com.google.firebase.auth.GoogleAuthProvider; import com.google.firebase.auth.TwitterAuthProvider; -import static android.app.Activity.RESULT_CANCELED; -import static android.app.Activity.RESULT_FIRST_USER; import static android.app.Activity.RESULT_OK; public class SmartLock extends Fragment @@ -61,13 +60,14 @@ public class SmartLock extends Fragment private String mPassword; private String mProvider; private String mProfilePictureUri; + private IdpResponse mResponse; private GoogleApiClient mCredentialsApiClient; @Override public void onConnected(@Nullable Bundle bundle) { if (mEmail == null) { Log.e(TAG, "Unable to save null credential!"); - finish(RESULT_CANCELED); + finish(); return; } @@ -90,7 +90,7 @@ public void onConnected(@Nullable Bundle bundle) { break; default: Log.e(TAG, "Unable to save null credential!"); - finish(RESULT_CANCELED); + finish(); return; } @@ -140,7 +140,7 @@ public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { null); } catch (IntentSender.SendIntentException e) { e.printStackTrace(); - finish(RESULT_CANCELED); + finish(); } } @@ -148,7 +148,7 @@ public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { @Override public void onResult(@NonNull Status status) { if (status.isSuccess()) { - finish(RESULT_OK); + finish(); } else { if (status.hasResolution()) { // Try to resolve the save request. This will prompt the user if @@ -164,10 +164,10 @@ public void onResult(@NonNull Status status) { } catch (IntentSender.SendIntentException e) { // Could not resolve the request Log.e(TAG, "STATUS: Failed to send resolution.", e); - finish(RESULT_CANCELED); + finish(); } } else { - finish(RESULT_CANCELED); + finish(); } } } @@ -181,10 +181,10 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { if (BuildConfig.DEBUG) { Log.d(TAG, "SAVE: OK"); } - finish(RESULT_OK); + finish(); } else { Log.e(TAG, "SAVE: Canceled by user"); - finish(RESULT_FIRST_USER); + finish(); } } else if (requestCode == RC_UPDATE_SERVICE) { if (resultCode == RESULT_OK) { @@ -195,13 +195,14 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { .setResultCallback(this); } else { Log.e(TAG, "SAVE: Canceled by user"); - finish(RESULT_FIRST_USER); + finish(); } } } - private void finish(int resultCode) { - mActivity.finish(RESULT_OK, mActivity.getIntent()); + private void finish() { + Intent resultIntent = new Intent().putExtra(ExtraConstants.EXTRA_IDP_RESPONSE, mResponse); + mActivity.finish(RESULT_OK, resultIntent); } /** @@ -217,32 +218,37 @@ public void saveCredentialsOrFinish(AppCompatBase activity, ActivityHelper helper, FirebaseUser firebaseUser, @Nullable String password, - @Nullable String provider) { + @Nullable IdpResponse response) { mActivity = activity; mActivityHelper = helper; mName = firebaseUser.getDisplayName(); mEmail = firebaseUser.getEmail(); mPassword = password; - mProvider = provider; + mResponse = response; + if (response != null) { + mProvider = response.getProviderType(); + } else { + mProvider = null; + } mProfilePictureUri = firebaseUser.getPhotoUrl() != null ? firebaseUser.getPhotoUrl() .toString() : null; // If SmartLock is disabled, finish the Activity if (!helper.getFlowParams().smartLockEnabled) { - finish(RESULT_CANCELED); + finish(); return; } // If Play Services is not available, finish the Activity if (!PlayServicesHelper.getInstance(activity).isPlayServicesAvailable()) { - finish(RESULT_CANCELED); + finish(); return; } if (!FirebaseAuthWrapperFactory .getFirebaseAuthWrapper(helper.getFlowParams().appName) .isPlayServicesAvailable(activity)) { - finish(RESULT_CANCELED); + finish(); return; } diff --git a/auth/src/test/java/com/firebase/ui/auth/test_helpers/SmartLockResult.java b/auth/src/test/java/com/firebase/ui/auth/test_helpers/SmartLockResult.java index 23474721f..936c03222 100644 --- a/auth/src/test/java/com/firebase/ui/auth/test_helpers/SmartLockResult.java +++ b/auth/src/test/java/com/firebase/ui/auth/test_helpers/SmartLockResult.java @@ -3,6 +3,7 @@ import android.support.annotation.Nullable; import android.support.v4.app.FragmentActivity; +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.util.SmartLock; @@ -26,13 +27,17 @@ public void saveCredentialsOrFinish(AppCompatBase activity, ActivityHelper helper, FirebaseUser firebaseUser, @Nullable String password, - @Nullable String provider) { - assertEquals(firebaseUser.getEmail(), TestConstants.EMAIL); - assertEquals(firebaseUser.getDisplayName(), TestConstants.NAME); - assertEquals(firebaseUser.getPhotoUrl() != null - ? firebaseUser.getPhotoUrl().toString() : null, TestConstants.PHOTO_URL); - assertEquals(password, mPassword); - assertEquals(provider, mProvider); + @Nullable IdpResponse idpResponse) { + assertEquals(TestConstants.EMAIL, firebaseUser.getEmail()); + assertEquals(TestConstants.NAME, firebaseUser.getDisplayName()); + assertEquals(TestConstants.PHOTO_URL, firebaseUser.getPhotoUrl() != null + ? firebaseUser.getPhotoUrl().toString() : null); + assertEquals(mPassword, password); + String provider = null; + if (idpResponse != null) { + provider = idpResponse.getProviderType(); + } + assertEquals(mProvider, provider); mCountDownLatch.countDown(); } 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 caa60d443..725e6b245 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 @@ -117,7 +117,7 @@ public void testSignInSucceeded() { mockActivityHelper, mockFirebaseUser, null, - GoogleAuthProvider.PROVIDER_ID); + idpResponse); } @Test