From bfd2fe1fb459954a652074021e59bd87ebce8dde Mon Sep 17 00:00:00 2001 From: Sam Stern Date: Mon, 26 Jun 2017 14:40:55 -0700 Subject: [PATCH 1/8] Kill ActivityHelper, move functionality to BaseHelper Change-Id: I07599baa47fba0c0415ebec2a37b7a8ed011e0a2 --- .../com/firebase/ui/auth/KickoffActivity.java | 4 +- .../firebase/ui/auth/ui/ActivityHelper.java | 67 ------------------- .../firebase/ui/auth/ui/AppCompatBase.java | 9 ++- .../com/firebase/ui/auth/ui/BaseHelper.java | 6 +- .../firebase/ui/auth/ui/FlowParameters.java | 11 +++ .../firebase/ui/auth/ui/FragmentHelper.java | 7 -- .../ui/auth/ui/HelperActivityBase.java | 27 +++++++- .../WelcomeBackPasswordPrompt.java | 6 +- .../auth/ui/email/RegisterEmailActivity.java | 2 +- .../auth/ui/email/RegisterEmailFragment.java | 3 +- .../auth/ui/idp/AuthMethodPickerActivity.java | 2 +- .../auth/ui/idp/CredentialSignInHandler.java | 1 - .../ui/phone/PhoneVerificationActivity.java | 2 +- .../signincontainer/IdpSignInContainer.java | 5 +- .../util/signincontainer/SaveSmartLock.java | 3 +- .../util/signincontainer/SignInDelegate.java | 4 +- .../testhelpers/ActivityHelperShadow.java | 34 ---------- .../CustomRobolectricGradleTestRunner.java | 2 - .../ui/auth/testhelpers/TestHelper.java | 2 +- .../ui/email/RecoverPasswordActivityTest.java | 7 +- .../ui/email/RegisterEmailActivityTest.java | 3 +- .../email/WelcomeBackPasswordPromptTest.java | 11 ++- .../ui/idp/AuthMethodPickerActivityTest.java | 21 +++--- .../ui/idp/CredentialSignInHandlerTest.java | 11 ++- .../phone/PhoneVerificationActivityTest.java | 44 ++++++------ 25 files changed, 107 insertions(+), 187 deletions(-) delete mode 100644 auth/src/main/java/com/firebase/ui/auth/ui/ActivityHelper.java delete mode 100644 auth/src/test/java/com/firebase/ui/auth/testhelpers/ActivityHelperShadow.java diff --git a/auth/src/main/java/com/firebase/ui/auth/KickoffActivity.java b/auth/src/main/java/com/firebase/ui/auth/KickoffActivity.java index ff33ea219..d2096b0c9 100644 --- a/auth/src/main/java/com/firebase/ui/auth/KickoffActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/KickoffActivity.java @@ -8,7 +8,7 @@ import android.support.annotation.RestrictTo; import android.util.Log; -import com.firebase.ui.auth.ui.ActivityHelper; +import com.firebase.ui.auth.ui.BaseHelper; import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.HelperActivityBase; @@ -24,7 +24,7 @@ public class KickoffActivity extends HelperActivityBase { private boolean mIsWaitingForPlayServices = false; public static Intent createIntent(Context context, FlowParameters flowParams) { - return ActivityHelper.createBaseIntent(context, KickoffActivity.class, flowParams); + return BaseHelper.createBaseIntent(context, KickoffActivity.class, flowParams); } @Override diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/ActivityHelper.java b/auth/src/main/java/com/firebase/ui/auth/ui/ActivityHelper.java deleted file mode 100644 index 9a87e58b3..000000000 --- a/auth/src/main/java/com/firebase/ui/auth/ui/ActivityHelper.java +++ /dev/null @@ -1,67 +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.ui; - -import android.content.Intent; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.RestrictTo; - -import com.firebase.ui.auth.IdpResponse; -import com.firebase.ui.auth.R; -import com.firebase.ui.auth.util.signincontainer.SaveSmartLock; -import com.google.firebase.auth.FirebaseUser; - -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -public class ActivityHelper extends BaseHelper { - private HelperActivityBase mActivity; - - public ActivityHelper(HelperActivityBase activity, Intent intent) { - super(activity, (FlowParameters) intent.getParcelableExtra(ExtraConstants.EXTRA_FLOW_PARAMS)); - mActivity = activity; - } - - public void configureTheme() { - mActivity.setTheme(R.style.FirebaseUI); // Provides default values - mActivity.setTheme(getFlowParams().themeId); - } - - public void startActivityForResult(Intent intent, int requestCode) { - mActivity.startActivityForResult(intent, requestCode); - } - - public void finish(int resultCode, Intent intent) { - finishActivity(mActivity, resultCode, intent); - } - - public SaveSmartLock getSaveSmartLockInstance() { - return getSaveSmartLockInstance(mActivity); - } - - public void saveCredentialsOrFinish( - @Nullable SaveSmartLock saveSmartLock, - FirebaseUser firebaseUser, - @NonNull String password, - IdpResponse response) { - saveCredentialsOrFinish(saveSmartLock, mActivity, firebaseUser, password, response); - } - - public void saveCredentialsOrFinish( - @Nullable SaveSmartLock saveSmartLock, - FirebaseUser firebaseUser, - IdpResponse response) { - saveCredentialsOrFinish(saveSmartLock, mActivity, firebaseUser, null, response); - } -} diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/AppCompatBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/AppCompatBase.java index 975d1db1d..3a4bca90f 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/AppCompatBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/AppCompatBase.java @@ -17,6 +17,8 @@ import android.os.Bundle; import android.support.annotation.RestrictTo; +import com.firebase.ui.auth.R; + @SuppressWarnings("Registered") @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public class AppCompatBase extends HelperActivityBase { @@ -24,7 +26,12 @@ public class AppCompatBase extends HelperActivityBase { @Override protected void onCreate(Bundle savedInstance) { super.onCreate(savedInstance); - mActivityHelper.configureTheme(); + configureTheme(); + } + + private void configureTheme() { + setTheme(R.style.FirebaseUI); // Provides default values + setTheme(mActivityHelper.getFlowParams().themeId); } } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/BaseHelper.java b/auth/src/main/java/com/firebase/ui/auth/ui/BaseHelper.java index 27df410fe..efff0e1ad 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/BaseHelper.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/BaseHelper.java @@ -33,6 +33,10 @@ public BaseHelper(Context context, FlowParameters parameters) { mFlowParams = parameters; } + public BaseHelper(Context context, Intent intent) { + this(context, (FlowParameters) intent.getParcelableExtra(ExtraConstants.EXTRA_FLOW_PARAMS)); + } + public static Intent createBaseIntent( @NonNull Context context, @NonNull Class target, @@ -48,7 +52,7 @@ public FlowParameters getFlowParams() { return mFlowParams; } - public void finishActivity(Activity activity, int resultCode, Intent intent) { + public static void finishActivity(Activity activity, int resultCode, Intent intent) { activity.setResult(resultCode, intent); activity.finish(); } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/FlowParameters.java b/auth/src/main/java/com/firebase/ui/auth/ui/FlowParameters.java index 7f3bd5e08..6bd7c3a39 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/FlowParameters.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/FlowParameters.java @@ -13,6 +13,7 @@ */ package com.firebase.ui.auth.ui; +import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.DrawableRes; @@ -78,6 +79,16 @@ public FlowParameters( this.allowNewEmailAccounts = allowNewEmailAccounts; } + /** + * Create a bundle containing this FlowParameters object as + * {@link ExtraConstants#EXTRA_FLOW_PARAMS}. + */ + public Bundle toBundle() { + Bundle bundle = new Bundle(); + bundle.putParcelable(ExtraConstants.EXTRA_FLOW_PARAMS, this); + return bundle; + } + @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(appName); diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/FragmentHelper.java b/auth/src/main/java/com/firebase/ui/auth/ui/FragmentHelper.java index 0cc545146..445e307d2 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/FragmentHelper.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/FragmentHelper.java @@ -3,7 +3,6 @@ import android.app.ProgressDialog; import android.content.Intent; import android.content.IntentSender; -import android.os.Bundle; import android.support.annotation.RestrictTo; import android.support.v4.app.Fragment; import android.view.ContextThemeWrapper; @@ -18,12 +17,6 @@ public FragmentHelper(Fragment fragment) { mFragment = fragment; } - public static Bundle getFlowParamsBundle(FlowParameters params) { - Bundle bundle = new Bundle(); - bundle.putParcelable(ExtraConstants.EXTRA_FLOW_PARAMS, params); - return bundle; - } - public void finish(int resultCode, Intent intent) { finishActivity(mFragment.getActivity(), resultCode, intent); } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java index d13fb60ad..44f9037b1 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java @@ -2,19 +2,25 @@ import android.content.Intent; import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.annotation.RestrictTo; import android.support.v7.app.AppCompatActivity; +import com.firebase.ui.auth.IdpResponse; +import com.firebase.ui.auth.util.signincontainer.SaveSmartLock; +import com.google.firebase.auth.FirebaseUser; + @SuppressWarnings("Registered") @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public class HelperActivityBase extends AppCompatActivity { - protected ActivityHelper mActivityHelper; + protected BaseHelper mActivityHelper; @Override protected void onCreate(Bundle savedInstance) { super.onCreate(savedInstance); - mActivityHelper = new ActivityHelper(this, getIntent()); + mActivityHelper = new BaseHelper(this, getIntent()); } @Override @@ -24,7 +30,22 @@ protected void onDestroy() { } public void finish(int resultCode, Intent intent) { - mActivityHelper.finish(resultCode, intent); + BaseHelper.finishActivity(this, resultCode, intent); + } + + public void saveCredentialsOrFinish( + @Nullable SaveSmartLock saveSmartLock, + FirebaseUser firebaseUser, + @NonNull String password, + IdpResponse response) { + mActivityHelper.saveCredentialsOrFinish(saveSmartLock, this, firebaseUser, password, response); + } + + public void saveCredentialsOrFinish( + @Nullable SaveSmartLock saveSmartLock, + FirebaseUser firebaseUser, + IdpResponse response) { + mActivityHelper.saveCredentialsOrFinish(saveSmartLock, this, firebaseUser, null, response); } } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackPasswordPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackPasswordPrompt.java index 6ac33f2e3..8c7a2991f 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackPasswordPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackPasswordPrompt.java @@ -83,7 +83,7 @@ protected void onCreate(Bundle savedInstanceState) { // Show keyboard getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); - mSaveSmartLock = mActivityHelper.getSaveSmartLockInstance(); + mSaveSmartLock = mActivityHelper.getSaveSmartLockInstance(this); mIdpResponse = IdpResponse.fromResultIntent(getIntent()); mEmail = mIdpResponse.getEmail(); @@ -159,7 +159,7 @@ public void onSuccess(AuthResult authResult) { // If authCredential is null, the user only has an email account. // Otherwise, the user has an email account that we need to link to an idp. if (authCredential == null) { - mActivityHelper.saveCredentialsOrFinish( + saveCredentialsOrFinish( mSaveSmartLock, authResult.getUser(), password, @@ -174,7 +174,7 @@ public void onSuccess(AuthResult authResult) { .addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(AuthResult authResult) { - mActivityHelper.saveCredentialsOrFinish( + saveCredentialsOrFinish( mSaveSmartLock, authResult.getUser(), mIdpResponse); diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailActivity.java index 97d720644..a72b7db6e 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailActivity.java @@ -112,8 +112,8 @@ public void onExistingIdpUser(User user) { mActivityHelper.getFlowParams(), user, new IdpResponse.Builder(EmailAuthProvider.PROVIDER_ID, user.getEmail()).build()); - mActivityHelper.startActivityForResult(intent, RC_WELCOME_BACK_IDP); + startActivityForResult(intent, RC_WELCOME_BACK_IDP); setSlideAnimation(); } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java index 29f1e5dbd..d6697c163 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java @@ -240,8 +240,7 @@ public void onComplete(@NonNull Task task) { user, password, new IdpResponse.Builder(EmailAuthProvider.PROVIDER_ID, - email) - .build()); + email).build()); } }); } 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 de617fd23..b79a7164f 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 @@ -74,7 +74,7 @@ public static Intent createIntent(Context context, FlowParameters flowParams) { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.auth_method_picker_layout); - mSaveSmartLock = mActivityHelper.getSaveSmartLockInstance(); + mSaveSmartLock = mActivityHelper.getSaveSmartLockInstance(this); populateIdpList(mActivityHelper.getFlowParams().providerInfo); 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 9f7cba4f3..aa620c53c 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 @@ -20,7 +20,6 @@ import android.support.annotation.RestrictTo; import android.util.Log; -import com.firebase.ui.auth.AuthUI; import com.firebase.ui.auth.ErrorCodes; import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.ResultCodes; diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivity.java index a31cebac2..f76f3c238 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivity.java @@ -88,7 +88,7 @@ protected void onCreate(final Bundle savedInstance) { super.onCreate(savedInstance); setContentView(R.layout.activity_register_phone); - mSaveSmartLock = mActivityHelper.getSaveSmartLockInstance(); + mSaveSmartLock = mActivityHelper.getSaveSmartLockInstance(this); mHandler = new Handler(); mVerificationState = VerificationState.VERIFICATION_NOT_STARTED; if (savedInstance != null && !savedInstance.isEmpty()) { diff --git a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/IdpSignInContainer.java b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/IdpSignInContainer.java index b16e17451..1e82765a5 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/IdpSignInContainer.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/IdpSignInContainer.java @@ -27,16 +27,15 @@ import com.firebase.ui.auth.ErrorCodes; import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.ResultCodes; -import com.firebase.ui.auth.provider.ProviderUtils; 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.IdpProvider.IdpCallback; +import com.firebase.ui.auth.provider.ProviderUtils; import com.firebase.ui.auth.provider.TwitterProvider; import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.FragmentBase; -import com.firebase.ui.auth.ui.FragmentHelper; import com.firebase.ui.auth.ui.TaskFailureLogger; import com.firebase.ui.auth.ui.User; import com.firebase.ui.auth.ui.idp.CredentialSignInHandler; @@ -60,7 +59,7 @@ public static void signIn(FragmentActivity activity, FlowParameters parameters, if (!(fragment instanceof IdpSignInContainer)) { IdpSignInContainer result = new IdpSignInContainer(); - Bundle bundle = FragmentHelper.getFlowParamsBundle(parameters); + Bundle bundle = parameters.toBundle(); bundle.putParcelable(ExtraConstants.EXTRA_USER, user); result.setArguments(bundle); diff --git a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SaveSmartLock.java b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SaveSmartLock.java index 4a5a09539..1abf6431d 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SaveSmartLock.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SaveSmartLock.java @@ -34,7 +34,6 @@ import com.firebase.ui.auth.R; import com.firebase.ui.auth.ResultCodes; import com.firebase.ui.auth.ui.FlowParameters; -import com.firebase.ui.auth.ui.FragmentHelper; import com.firebase.ui.auth.util.GoogleApiHelper; import com.firebase.ui.auth.util.PlayServicesHelper; import com.google.android.gms.auth.api.Auth; @@ -66,7 +65,7 @@ public static SaveSmartLock getInstance(FragmentActivity activity, FlowParameter Fragment fragment = fm.findFragmentByTag(TAG); if (!(fragment instanceof SaveSmartLock)) { result = new SaveSmartLock(); - result.setArguments(FragmentHelper.getFlowParamsBundle(parameters)); + result.setArguments(parameters.toBundle()); try { fm.beginTransaction().add(result, TAG).disallowAddToBackStack().commit(); } catch (IllegalStateException e) { diff --git a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java index ec0f9c296..9620672fa 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java @@ -19,7 +19,6 @@ import com.firebase.ui.auth.ResultCodes; import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; -import com.firebase.ui.auth.ui.FragmentHelper; import com.firebase.ui.auth.ui.TaskFailureLogger; import com.firebase.ui.auth.ui.User; import com.firebase.ui.auth.ui.email.RegisterEmailActivity; @@ -46,6 +45,7 @@ import com.google.firebase.auth.GoogleAuthProvider; import com.google.firebase.auth.PhoneAuthProvider; import com.google.firebase.auth.TwitterAuthProvider; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -75,7 +75,7 @@ public static void delegate(FragmentActivity activity, FlowParameters params) { Fragment fragment = fm.findFragmentByTag(TAG); if (!(fragment instanceof SignInDelegate)) { SignInDelegate result = new SignInDelegate(); - result.setArguments(FragmentHelper.getFlowParamsBundle(params)); + result.setArguments(params.toBundle()); fm.beginTransaction().add(result, TAG).disallowAddToBackStack().commit(); } } diff --git a/auth/src/test/java/com/firebase/ui/auth/testhelpers/ActivityHelperShadow.java b/auth/src/test/java/com/firebase/ui/auth/testhelpers/ActivityHelperShadow.java deleted file mode 100644 index 6366be617..000000000 --- a/auth/src/test/java/com/firebase/ui/auth/testhelpers/ActivityHelperShadow.java +++ /dev/null @@ -1,34 +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.testhelpers; - -import com.firebase.ui.auth.ui.ActivityHelper; -import com.firebase.ui.auth.util.signincontainer.SaveSmartLock; - -import org.robolectric.annotation.Implementation; -import org.robolectric.annotation.Implements; - -@Implements(ActivityHelper.class) -public class ActivityHelperShadow extends BaseHelperShadow { - - public ActivityHelperShadow() { - super(); - } - - @Implementation - public SaveSmartLock getSaveSmartLockInstance() { - return sSaveSmartLock; - } -} diff --git a/auth/src/test/java/com/firebase/ui/auth/testhelpers/CustomRobolectricGradleTestRunner.java b/auth/src/test/java/com/firebase/ui/auth/testhelpers/CustomRobolectricGradleTestRunner.java index 12344596d..74f361faa 100644 --- a/auth/src/test/java/com/firebase/ui/auth/testhelpers/CustomRobolectricGradleTestRunner.java +++ b/auth/src/test/java/com/firebase/ui/auth/testhelpers/CustomRobolectricGradleTestRunner.java @@ -17,7 +17,6 @@ import com.facebook.login.LoginManager; import com.firebase.ui.auth.provider.FacebookProvider; import com.firebase.ui.auth.provider.GoogleProvider; -import com.firebase.ui.auth.ui.ActivityHelper; import com.firebase.ui.auth.ui.BaseHelper; import org.junit.runners.model.InitializationError; @@ -35,7 +34,6 @@ public InstrumentationConfiguration createClassLoaderConfig(Config config) { InstrumentationConfiguration.Builder builder = InstrumentationConfiguration.newBuilder(); builder.addInstrumentedClass(BaseHelper.class.getName()); - builder.addInstrumentedClass(ActivityHelper.class.getName()); builder.addInstrumentedClass(FacebookProvider.class.getName()); builder.addInstrumentedClass(GoogleProvider.class.getName()); builder.addInstrumentedClass(LoginManager.class.getName()); 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 97c0b5baa..77bde43b2 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 @@ -80,7 +80,7 @@ public static void verifySmartLockSave(String providerId, String email, ArgumentCaptor passwordCaptor = ArgumentCaptor.forClass(String.class); ArgumentCaptor idpResponseCaptor = ArgumentCaptor.forClass(IdpResponse.class); - verify(ActivityHelperShadow.sSaveSmartLock).saveCredentialsOrFinish( + verify(BaseHelperShadow.sSaveSmartLock).saveCredentialsOrFinish( userCaptor.capture(), passwordCaptor.capture(), idpResponseCaptor.capture()); diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivityTest.java index 91a92ac7a..512188595 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivityTest.java @@ -19,7 +19,6 @@ import com.firebase.ui.auth.BuildConfig; import com.firebase.ui.auth.R; -import com.firebase.ui.auth.testhelpers.ActivityHelperShadow; import com.firebase.ui.auth.testhelpers.AutoCompleteTask; import com.firebase.ui.auth.testhelpers.BaseHelperShadow; import com.firebase.ui.auth.testhelpers.CustomRobolectricGradleTestRunner; @@ -57,13 +56,13 @@ private RecoverPasswordActivity createActivity() { } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {BaseHelperShadow.class}) public void testNextButton_sendsEmail() { RecoverPasswordActivity recoverPasswordActivity = createActivity(); Button nextButton = (Button) recoverPasswordActivity.findViewById(R.id.button_done); - when(ActivityHelperShadow.sFirebaseAuth.sendPasswordResetEmail(TestConstants.EMAIL)) + when(BaseHelperShadow.sFirebaseAuth.sendPasswordResetEmail(TestConstants.EMAIL)) .thenReturn(new AutoCompleteTask(null, true, null)); nextButton.performClick(); - verify(ActivityHelperShadow.sFirebaseAuth).sendPasswordResetEmail(TestConstants.EMAIL); + verify(BaseHelperShadow.sFirebaseAuth).sendPasswordResetEmail(TestConstants.EMAIL); } } diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/email/RegisterEmailActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/email/RegisterEmailActivityTest.java index 560efa0d1..60b8927b7 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/email/RegisterEmailActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/email/RegisterEmailActivityTest.java @@ -23,7 +23,6 @@ import com.firebase.ui.auth.AuthUI; import com.firebase.ui.auth.BuildConfig; import com.firebase.ui.auth.R; -import com.firebase.ui.auth.testhelpers.ActivityHelperShadow; import com.firebase.ui.auth.testhelpers.AutoCompleteTask; import com.firebase.ui.auth.testhelpers.BaseHelperShadow; import com.firebase.ui.auth.testhelpers.CustomRobolectricGradleTestRunner; @@ -100,7 +99,7 @@ public void testSignUpButton_validatesFields() { } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {BaseHelperShadow.class}) public void testSignUpButton_successfulRegistrationShouldContinueToSaveCredentials() { // init mocks new BaseHelperShadow(); diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/email/WelcomeBackPasswordPromptTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/email/WelcomeBackPasswordPromptTest.java index 27df90f1d..512fe7ac5 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/email/WelcomeBackPasswordPromptTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/email/WelcomeBackPasswordPromptTest.java @@ -22,7 +22,6 @@ import com.firebase.ui.auth.BuildConfig; import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.R; -import com.firebase.ui.auth.testhelpers.ActivityHelperShadow; import com.firebase.ui.auth.testhelpers.AutoCompleteTask; import com.firebase.ui.auth.testhelpers.BaseHelperShadow; import com.firebase.ui.auth.testhelpers.CustomRobolectricGradleTestRunner; @@ -90,17 +89,17 @@ public void testSignInButton_validatesFields() { } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {BaseHelperShadow.class}) public void testSignInButton_signsInAndSavesCredentials() { // initialize mocks - new ActivityHelperShadow(); - reset(ActivityHelperShadow.sSaveSmartLock); + new BaseHelperShadow(); + reset(BaseHelperShadow.sSaveSmartLock); WelcomeBackPasswordPrompt welcomeBackActivity = createActivity(); EditText passwordField = (EditText) welcomeBackActivity.findViewById(R.id.password); passwordField.setText(TestConstants.PASSWORD); - when(ActivityHelperShadow.sFirebaseAuth.signInWithEmailAndPassword( + when(BaseHelperShadow.sFirebaseAuth.signInWithEmailAndPassword( TestConstants.EMAIL, TestConstants.PASSWORD)).thenReturn( new AutoCompleteTask<>(FakeAuthResult.INSTANCE, true, null)); @@ -108,7 +107,7 @@ public void testSignInButton_signsInAndSavesCredentials() { Button signIn = (Button) welcomeBackActivity.findViewById(R.id.button_done); signIn.performClick(); - verify(ActivityHelperShadow.sFirebaseAuth).signInWithEmailAndPassword( + verify(BaseHelperShadow.sFirebaseAuth).signInWithEmailAndPassword( TestConstants.EMAIL, TestConstants.PASSWORD); 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 c56a44500..9812cef8d 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 @@ -22,7 +22,6 @@ import com.firebase.ui.auth.AuthUI; import com.firebase.ui.auth.BuildConfig; import com.firebase.ui.auth.R; -import com.firebase.ui.auth.testhelpers.ActivityHelperShadow; import com.firebase.ui.auth.testhelpers.AutoCompleteTask; import com.firebase.ui.auth.testhelpers.BaseHelperShadow; import com.firebase.ui.auth.testhelpers.CustomRobolectricGradleTestRunner; @@ -117,15 +116,15 @@ public void testPhoneLoginFlow() { } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {BaseHelperShadow.class, BaseHelperShadow.class}) public void testFacebookLoginFlow() { // initialize mocks - new ActivityHelperShadow(); - reset(ActivityHelperShadow.sSaveSmartLock); + new BaseHelperShadow(); + reset(BaseHelperShadow.sSaveSmartLock); when(BaseHelperShadow.sFirebaseUser.getProviders()) .thenReturn(Arrays.asList(FacebookAuthProvider.PROVIDER_ID)); - when(ActivityHelperShadow.sFirebaseAuth.signInWithCredential((AuthCredential) any())) + when(BaseHelperShadow.sFirebaseAuth.signInWithCredential((AuthCredential) any())) .thenReturn(new AutoCompleteTask<>(FakeAuthResult.INSTANCE, true, null)); List providers = Arrays.asList(AuthUI.FACEBOOK_PROVIDER); @@ -140,11 +139,11 @@ public void testFacebookLoginFlow() { } @Test - @Config(shadows = {GoogleProviderShadow.class, BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {GoogleProviderShadow.class, BaseHelperShadow.class, BaseHelperShadow.class}) public void testGoogleLoginFlow() { // initialize mocks - new ActivityHelperShadow(); - reset(ActivityHelperShadow.sSaveSmartLock); + new BaseHelperShadow(); + reset(BaseHelperShadow.sSaveSmartLock); List providers = Arrays.asList(AuthUI.GOOGLE_PROVIDER); @@ -153,7 +152,7 @@ public void testGoogleLoginFlow() { when(BaseHelperShadow.sFirebaseUser.getProviders()) .thenReturn(Arrays.asList(GoogleAuthProvider.PROVIDER_ID)); - when(ActivityHelperShadow.sFirebaseAuth.signInWithCredential((AuthCredential) any())) + when(BaseHelperShadow.sFirebaseAuth.signInWithCredential((AuthCredential) any())) .thenReturn(new AutoCompleteTask<>(FakeAuthResult.INSTANCE, true, null)); Button googleButton = (Button) authMethodPickerActivity.findViewById(R.id.google_button); @@ -165,7 +164,7 @@ public void testGoogleLoginFlow() { } @Test - @Config(shadows = {ActivityHelperShadow.class}) + @Config(shadows = {BaseHelperShadow.class}) public void testTwitterLoginFlowStarts() { List providers = Arrays.asList(AuthUI.TWITTER_PROVIDER); @@ -174,7 +173,7 @@ public void testTwitterLoginFlowStarts() { when(BaseHelperShadow.sFirebaseUser.getProviders()) .thenReturn(Arrays.asList(TwitterAuthProvider.PROVIDER_ID)); - when(ActivityHelperShadow.sFirebaseAuth.signInWithCredential(any(AuthCredential.class))) + when(BaseHelperShadow.sFirebaseAuth.signInWithCredential(any(AuthCredential.class))) .thenReturn(new AutoCompleteTask<>(FakeAuthResult.INSTANCE, true, null)); Button twitterButton = (Button) authMethodPickerActivity.findViewById(R.id.twitter_button); 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 3c2ab870a..fe7a582e3 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 @@ -19,7 +19,6 @@ import com.firebase.ui.auth.BuildConfig; import com.firebase.ui.auth.IdpResponse; -import com.firebase.ui.auth.testhelpers.ActivityHelperShadow; import com.firebase.ui.auth.testhelpers.AutoCompleteTask; import com.firebase.ui.auth.testhelpers.BaseHelperShadow; import com.firebase.ui.auth.testhelpers.CustomRobolectricGradleTestRunner; @@ -27,8 +26,8 @@ import com.firebase.ui.auth.testhelpers.FakeProviderQueryResult; import com.firebase.ui.auth.testhelpers.TestConstants; import com.firebase.ui.auth.testhelpers.TestHelper; -import com.firebase.ui.auth.ui.ActivityHelper; import com.firebase.ui.auth.ui.AppCompatBase; +import com.firebase.ui.auth.ui.BaseHelper; import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.User; import com.firebase.ui.auth.ui.accountlink.WelcomeBackIdpPrompt; @@ -61,7 +60,7 @@ import static org.mockito.Mockito.when; @RunWith(CustomRobolectricGradleTestRunner.class) -@Config(constants = BuildConfig.class, sdk = 25, shadows = {ActivityHelperShadow.class}) +@Config(constants = BuildConfig.class, sdk = 25) public class CredentialSignInHandlerTest { private static final int RC_ACCOUNT_LINK = 3; private static final String LINKING_ERROR = "ERROR_TEST_LINKING"; @@ -77,7 +76,7 @@ public void setUp() { @Config(shadows = {BaseHelperShadow.class}) public void testSignInSucceeded() { AppCompatBase mockActivity = mock(AppCompatBase.class); - ActivityHelper mockActivityHelper = mock(ActivityHelper.class); + BaseHelper mockActivityHelper = mock(BaseHelper.class); IdpResponse idpResponse = new IdpResponse.Builder(GoogleAuthProvider.PROVIDER_ID, TestConstants.EMAIL) .setToken(TestConstants.TOKEN) @@ -121,7 +120,7 @@ public void testSignInSucceeded() { @Test public void testSignInFailed_withFacebookAlreadyLinked() { AppCompatBase mockActivity = mock(AppCompatBase.class); - ActivityHelper mockActivityHelper = mock(ActivityHelper.class); + BaseHelper mockActivityHelper = mock(BaseHelper.class); FirebaseAuth mockFirebaseAuth = mock(FirebaseAuth.class); IdpResponse idpResponse = new IdpResponse.Builder(GoogleAuthProvider.PROVIDER_ID, TestConstants.EMAIL) @@ -169,7 +168,7 @@ public void testSignInFailed_withFacebookAlreadyLinked() { @Test public void testSignInFailed_withPasswordAccountAlreadyLinked() { AppCompatBase mockActivity = mock(AppCompatBase.class); - ActivityHelper mockActivityHelper = mock(ActivityHelper.class); + BaseHelper mockActivityHelper = mock(BaseHelper.class); FirebaseAuth mockFirebaseAuth = mock(FirebaseAuth.class); IdpResponse idpResponse = new IdpResponse.Builder(GoogleAuthProvider.PROVIDER_ID, TestConstants.EMAIL) diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivityTest.java index b6bae9a35..1979c1d7e 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivityTest.java @@ -25,14 +25,11 @@ import com.firebase.ui.auth.AuthUI; import com.firebase.ui.auth.BuildConfig; import com.firebase.ui.auth.R; -import com.firebase.ui.auth.testhelpers.ActivityHelperShadow; import com.firebase.ui.auth.testhelpers.AutoCompleteTask; import com.firebase.ui.auth.testhelpers.BaseHelperShadow; import com.firebase.ui.auth.testhelpers.CustomRobolectricGradleTestRunner; import com.firebase.ui.auth.testhelpers.FakeAuthResult; import com.firebase.ui.auth.testhelpers.TestHelper; -import com.firebase.ui.auth.ui.BaseHelper; -import com.google.firebase.auth.AdditionalUserInfo; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuthException; @@ -56,13 +53,13 @@ import java.util.Collections; import java.util.concurrent.TimeUnit; +import static com.firebase.ui.auth.ui.phone.PhoneTestConstants.PHONE; import static com.firebase.ui.auth.ui.phone.PhoneTestConstants.PHONE_NO_COUNTRY_CODE; import static com.firebase.ui.auth.ui.phone.PhoneTestConstants.YE_COUNTRY_CODE; import static com.firebase.ui.auth.ui.phone.PhoneTestConstants.YE_RAW_PHONE; import static com.firebase.ui.auth.ui.phone.PhoneVerificationActivity.AUTO_RETRIEVAL_TIMEOUT_MILLIS; import static com.firebase.ui.auth.ui.phone.PhoneVerificationActivity.ERROR_INVALID_PHONE; import static com.firebase.ui.auth.ui.phone.PhoneVerificationActivity.ERROR_INVALID_VERIFICATION; -import static com.firebase.ui.auth.ui.phone.PhoneTestConstants.PHONE; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertNull; @@ -150,7 +147,7 @@ public void testBadPhoneNumber_showsInlineError() { } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {BaseHelperShadow.class, BaseHelperShadow.class}) public void testVerifyPhoneNumberInvalidPhoneException_showsInlineError() { reset(BaseHelperShadow.sPhoneAuthProvider); @@ -161,7 +158,7 @@ public void testVerifyPhoneNumberInvalidPhoneException_showsInlineError() { assertEquals(mActivity.getString(R.string.verifying), sAlert.getMessage()); //was upstream method invoked - verify(ActivityHelperShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq + verify(BaseHelperShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq (AUTO_RETRIEVAL_TIMEOUT_MILLIS), eq(TimeUnit.MILLISECONDS), eq(mActivity), callbacksArgumentCaptor.capture(), isNull(PhoneAuthProvider.ForceResendingToken .class)); @@ -176,12 +173,12 @@ public void testVerifyPhoneNumberInvalidPhoneException_showsInlineError() { } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {BaseHelperShadow.class, BaseHelperShadow.class}) public void testVerifyPhoneNumberNoMsgException_showsAlertDialog() { reset(BaseHelperShadow.sPhoneAuthProvider); mActivity.verifyPhoneNumber(PHONE, false); - verify(ActivityHelperShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq + verify(BaseHelperShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq (AUTO_RETRIEVAL_TIMEOUT_MILLIS), eq(TimeUnit.MILLISECONDS), eq(mActivity), callbacksArgumentCaptor.capture(), isNull(PhoneAuthProvider.ForceResendingToken .class)); @@ -196,17 +193,17 @@ public void testVerifyPhoneNumberNoMsgException_showsAlertDialog() { } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {BaseHelperShadow.class, BaseHelperShadow.class}) public void testVerifyPhoneNumber_success() { reset(BaseHelperShadow.sPhoneAuthProvider); testSendConfirmationCode(); } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {BaseHelperShadow.class, BaseHelperShadow.class}) public void testSubmitCode_badCodeShowsAlertDialog() { reset(BaseHelperShadow.sPhoneAuthProvider); - when(ActivityHelperShadow.sFirebaseAuth.signInWithCredential(any(AuthCredential.class))) + when(BaseHelperShadow.sFirebaseAuth.signInWithCredential(any(AuthCredential.class))) .thenReturn(new AutoCompleteTask(null, true, new FirebaseAuthInvalidCredentialsException(ERROR_INVALID_VERIFICATION, "any_msg"))); @@ -229,7 +226,7 @@ public void testSubmitCode_badCodeShowsAlertDialog() { } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {BaseHelperShadow.class, BaseHelperShadow.class}) public void testresendCode_invokesUpstream() { reset(BaseHelperShadow.sPhoneAuthProvider); testSendConfirmationCode(); @@ -249,13 +246,13 @@ public void testresendCode_invokesUpstream() { assertEquals(View.GONE, r.getVisibility()); //verify resend code was called - verify(ActivityHelperShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq + verify(BaseHelperShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq (AUTO_RETRIEVAL_TIMEOUT_MILLIS), eq(TimeUnit.MILLISECONDS), eq(mActivity), callbacksArgumentCaptor.capture(), eq(forceResendingToken)); } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {BaseHelperShadow.class, BaseHelperShadow.class}) public void testAutoVerify() { reset(BaseHelperShadow.sPhoneAuthProvider); reset(BaseHelperShadow.sSaveSmartLock); @@ -263,11 +260,11 @@ public void testAutoVerify() { when(BaseHelperShadow.sFirebaseUser.getPhoneNumber()).thenReturn(PHONE); when(BaseHelperShadow.sFirebaseUser.getEmail()).thenReturn(null); - when(ActivityHelperShadow.sFirebaseAuth.signInWithCredential(any(AuthCredential.class))) + when(BaseHelperShadow.sFirebaseAuth.signInWithCredential(any(AuthCredential.class))) .thenReturn(new AutoCompleteTask(FakeAuthResult.INSTANCE , true, null)); mActivity.verifyPhoneNumber(PHONE, false); - verify(ActivityHelperShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq + verify(BaseHelperShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq (AUTO_RETRIEVAL_TIMEOUT_MILLIS), eq(TimeUnit.MILLISECONDS), eq(mActivity), callbacksArgumentCaptor.capture(), isNull(PhoneAuthProvider.ForceResendingToken .class)); @@ -276,11 +273,11 @@ public void testAutoVerify() { = callbacksArgumentCaptor.getValue(); onVerificationStateChangedCallbacks.onVerificationCompleted(credential); - verify(ActivityHelperShadow.sFirebaseAuth).signInWithCredential(any(AuthCredential.class)); + verify(BaseHelperShadow.sFirebaseAuth).signInWithCredential(any(AuthCredential.class)); } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {BaseHelperShadow.class, BaseHelperShadow.class}) public void testSMSAutoRetrieval() { reset(BaseHelperShadow.sPhoneAuthProvider); reset(BaseHelperShadow.sSaveSmartLock); @@ -289,9 +286,8 @@ public void testSMSAutoRetrieval() { when(BaseHelperShadow.sFirebaseUser.getPhoneNumber()).thenReturn(PHONE); when(BaseHelperShadow.sFirebaseUser.getEmail()).thenReturn(null); - when(ActivityHelperShadow.sFirebaseAuth.signInWithCredential(any(AuthCredential.class))) - .thenReturn(new AutoCompleteTask(FakeAuthResult.INSTANCE - , true, null)); + when(BaseHelperShadow.sFirebaseAuth.signInWithCredential(any(AuthCredential.class))) + .thenReturn(new AutoCompleteTask(FakeAuthResult.INSTANCE, true, null)); PhoneAuthProvider.OnVerificationStateChangedCallbacks callbacks = testSendConfirmationCode(); callbacks.onVerificationCompleted(credential); @@ -301,11 +297,11 @@ public void testSMSAutoRetrieval() { //verify confirmation code set assertEquals("1 2 3 4 5 6", mConfirmationCodeEditText.getText().toString()); //verify credential saves - verify(ActivityHelperShadow.sFirebaseAuth).signInWithCredential(credential); + verify(BaseHelperShadow.sFirebaseAuth).signInWithCredential(credential); } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {BaseHelperShadow.class, BaseHelperShadow.class}) public void testEditPhoneNumber_togglesFragments() { reset(BaseHelperShadow.sPhoneAuthProvider); testSendConfirmationCode(); @@ -326,7 +322,7 @@ public void testEditPhoneNumber_togglesFragments() { private PhoneAuthProvider.OnVerificationStateChangedCallbacks testSendConfirmationCode() { mActivity.verifyPhoneNumber(PHONE, false); - verify(ActivityHelperShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq + verify(BaseHelperShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq (AUTO_RETRIEVAL_TIMEOUT_MILLIS), eq(TimeUnit.MILLISECONDS), eq(mActivity), callbacksArgumentCaptor.capture(), isNull(PhoneAuthProvider.ForceResendingToken .class)); From 4c1da349c0e65c3b670786cd09d5c1a71ee19eb7 Mon Sep 17 00:00:00 2001 From: Sam Stern Date: Mon, 26 Jun 2017 15:08:34 -0700 Subject: [PATCH 2/8] Move ProgressDialog responsibilities Change-Id: Ie4e60c4346f5ff5cea2ea7474765c6857bd85e03 --- .../com/firebase/ui/auth/ui/BaseHelper.java | 31 ------------ .../com/firebase/ui/auth/ui/DialogBase.java | 9 +++- .../com/firebase/ui/auth/ui/FragmentBase.java | 9 +++- .../firebase/ui/auth/ui/FragmentHelper.java | 11 +---- .../ui/auth/ui/HelperActivityBase.java | 9 +++- .../ui/auth/ui/ProgressDialogHolder.java | 47 +++++++++++++++++++ .../ui/accountlink/WelcomeBackIdpPrompt.java | 2 +- .../WelcomeBackPasswordPrompt.java | 4 +- .../ui/auth/ui/email/CheckEmailFragment.java | 4 +- .../ui/email/RecoverPasswordActivity.java | 6 +-- .../auth/ui/email/RegisterEmailFragment.java | 6 +-- .../auth/ui/idp/AuthMethodPickerActivity.java | 4 +- .../auth/ui/idp/CredentialSignInHandler.java | 12 ++--- .../signincontainer/IdpSignInContainer.java | 15 +++++- .../util/signincontainer/SignInDelegate.java | 6 +-- .../util/signincontainer/SmartLockBase.java | 6 +-- 16 files changed, 111 insertions(+), 70 deletions(-) create mode 100644 auth/src/main/java/com/firebase/ui/auth/ui/ProgressDialogHolder.java diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/BaseHelper.java b/auth/src/main/java/com/firebase/ui/auth/ui/BaseHelper.java index efff0e1ad..8393d7876 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/BaseHelper.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/BaseHelper.java @@ -1,13 +1,11 @@ package com.firebase.ui.auth.ui; import android.app.Activity; -import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.RestrictTo; -import android.support.annotation.StringRes; import android.support.v4.app.FragmentActivity; import com.firebase.ui.auth.IdpResponse; @@ -26,7 +24,6 @@ public class BaseHelper { private final FlowParameters mFlowParams; protected Context mContext; - protected ProgressDialog mProgressDialog; public BaseHelper(Context context, FlowParameters parameters) { mContext = context; @@ -57,34 +54,6 @@ public static void finishActivity(Activity activity, int resultCode, Intent inte activity.finish(); } - public void showLoadingDialog(String message) { - dismissDialog(); - - if (mProgressDialog == null) { - mProgressDialog = new ProgressDialog(mContext); - mProgressDialog.setIndeterminate(true); - mProgressDialog.setTitle(""); - } - - mProgressDialog.setMessage(message); - mProgressDialog.show(); - } - - public void showLoadingDialog(@StringRes int stringResource) { - showLoadingDialog(mContext.getString(stringResource)); - } - - public void dismissDialog() { - if (mProgressDialog != null) { - mProgressDialog.dismiss(); - mProgressDialog = null; - } - } - - public boolean isProgressDialogShowing() { - return mProgressDialog != null && mProgressDialog.isShowing(); - } - public FirebaseAuth getFirebaseAuth() { return FirebaseAuth.getInstance(FirebaseApp.getInstance(mFlowParams.appName)); } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java index b02009c9d..116c1e0ea 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java @@ -5,21 +5,28 @@ import android.support.annotation.Nullable; import android.support.annotation.RestrictTo; import android.support.v4.app.DialogFragment; +import android.view.ContextThemeWrapper; @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public class DialogBase extends DialogFragment { + protected FragmentHelper mHelper; + protected ProgressDialogHolder mProgressDialogHolder; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mHelper = new FragmentHelper(this); + + ContextThemeWrapper context = new ContextThemeWrapper( + getContext(), mHelper.getFlowParams().themeId); + mProgressDialogHolder = new ProgressDialogHolder(context); } @Override public void onDestroy() { super.onDestroy(); - mHelper.dismissDialog(); + mProgressDialogHolder.dismissDialog(); } public void finish(int resultCode, Intent resultIntent) { diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java index 019f9d213..48f576fad 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java @@ -5,21 +5,28 @@ import android.support.annotation.Nullable; import android.support.annotation.RestrictTo; import android.support.v4.app.Fragment; +import android.view.ContextThemeWrapper; @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public class FragmentBase extends Fragment { + protected FragmentHelper mHelper; + protected ProgressDialogHolder mProgressDialogHolder; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mHelper = new FragmentHelper(this); + + ContextThemeWrapper context = new ContextThemeWrapper( + getContext(), mHelper.getFlowParams().themeId); + mProgressDialogHolder = new ProgressDialogHolder(context); } @Override public void onDestroy() { super.onDestroy(); - mHelper.dismissDialog(); + mProgressDialogHolder.dismissDialog(); } public void finish(int resultCode, Intent resultIntent) { diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/FragmentHelper.java b/auth/src/main/java/com/firebase/ui/auth/ui/FragmentHelper.java index 445e307d2..5c1d624ab 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/FragmentHelper.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/FragmentHelper.java @@ -1,14 +1,13 @@ package com.firebase.ui.auth.ui; -import android.app.ProgressDialog; import android.content.Intent; import android.content.IntentSender; import android.support.annotation.RestrictTo; import android.support.v4.app.Fragment; -import android.view.ContextThemeWrapper; @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public class FragmentHelper extends BaseHelper { + private Fragment mFragment; public FragmentHelper(Fragment fragment) { @@ -21,14 +20,6 @@ public void finish(int resultCode, Intent intent) { finishActivity(mFragment.getActivity(), resultCode, intent); } - @Override - public void showLoadingDialog(String message) { - dismissDialog(); - ContextThemeWrapper context = - new ContextThemeWrapper(mFragment.getContext(), getFlowParams().themeId); - mProgressDialog = ProgressDialog.show(context, "", message, true); - } - public void startIntentSenderForResult(IntentSender sender, int requestCode) throws IntentSender.SendIntentException { mFragment.startIntentSenderForResult(sender, requestCode, null, 0, 0, 0, null); diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java index 44f9037b1..e969b74bb 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java @@ -16,23 +16,29 @@ public class HelperActivityBase extends AppCompatActivity { protected BaseHelper mActivityHelper; + protected ProgressDialogHolder mProgressDialogHolder; @Override protected void onCreate(Bundle savedInstance) { super.onCreate(savedInstance); mActivityHelper = new BaseHelper(this, getIntent()); + mProgressDialogHolder = new ProgressDialogHolder(this); } @Override protected void onDestroy() { super.onDestroy(); - mActivityHelper.dismissDialog(); + mProgressDialogHolder.dismissDialog(); } public void finish(int resultCode, Intent intent) { BaseHelper.finishActivity(this, resultCode, intent); } + public ProgressDialogHolder getDialogHolder() { + return mProgressDialogHolder; + } + public void saveCredentialsOrFinish( @Nullable SaveSmartLock saveSmartLock, FirebaseUser firebaseUser, @@ -47,5 +53,6 @@ public void saveCredentialsOrFinish( IdpResponse response) { mActivityHelper.saveCredentialsOrFinish(saveSmartLock, this, firebaseUser, null, response); } + } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/ProgressDialogHolder.java b/auth/src/main/java/com/firebase/ui/auth/ui/ProgressDialogHolder.java new file mode 100644 index 000000000..c86780417 --- /dev/null +++ b/auth/src/main/java/com/firebase/ui/auth/ui/ProgressDialogHolder.java @@ -0,0 +1,47 @@ +package com.firebase.ui.auth.ui; + +import android.app.ProgressDialog; +import android.content.Context; +import android.support.annotation.StringRes; + +/** + * Helper class to manage a ProgressDialog. + */ +public class ProgressDialogHolder { + + private Context mContext; + private ProgressDialog mProgressDialog; + + public ProgressDialogHolder(Context context) { + mContext = context; + } + + public void showLoadingDialog(String message) { + dismissDialog(); + + if (mProgressDialog == null) { + mProgressDialog = new ProgressDialog(mContext); + mProgressDialog.setIndeterminate(true); + mProgressDialog.setTitle(""); + } + + mProgressDialog.setMessage(message); + mProgressDialog.show(); + } + + public void showLoadingDialog(@StringRes int stringResource) { + showLoadingDialog(mContext.getString(stringResource)); + } + + public void dismissDialog() { + if (mProgressDialog != null) { + mProgressDialog.dismiss(); + mProgressDialog = null; + } + } + + public boolean isProgressDialogShowing() { + return mProgressDialog != null && mProgressDialog.isShowing(); + } + +} diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackIdpPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackIdpPrompt.java index c965cbb81..e98c7cc6d 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackIdpPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackIdpPrompt.java @@ -118,7 +118,7 @@ protected void onCreate(Bundle savedInstanceState) { findViewById(R.id.welcome_back_idp_button).setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { - mActivityHelper.showLoadingDialog(R.string.progress_dialog_signing_in); + mProgressDialogHolder.showLoadingDialog(R.string.progress_dialog_signing_in); mIdpProvider.startLogin(WelcomeBackIdpPrompt.this); } }); diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackPasswordPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackPasswordPrompt.java index 8c7a2991f..1c287dd9b 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackPasswordPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackPasswordPrompt.java @@ -143,7 +143,7 @@ private void validateAndSignIn(final String email, final String password) { } else { mPasswordLayout.setError(null); } - mActivityHelper.showLoadingDialog(R.string.progress_dialog_signing_in); + mProgressDialogHolder.showLoadingDialog(R.string.progress_dialog_signing_in); final FirebaseAuth firebaseAuth = mActivityHelper.getFirebaseAuth(); // Sign in with known email and the password provided @@ -186,7 +186,7 @@ public void onSuccess(AuthResult authResult) { .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { - mActivityHelper.dismissDialog(); + mProgressDialogHolder.dismissDialog(); String error = e.getLocalizedMessage(); mPasswordLayout.setError(error); } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java index 82d1dd12f..aa87ab782 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java @@ -179,7 +179,7 @@ private void validateAndProceed() { } private void checkAccountExists(@NonNull final String email) { - mHelper.showLoadingDialog(R.string.progress_dialog_checking_accounts); + mProgressDialogHolder.showLoadingDialog(R.string.progress_dialog_checking_accounts); // Get name from SmartLock, if possible String name = null; @@ -213,7 +213,7 @@ public void onSuccess(String provider) { new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { - mHelper.dismissDialog(); + mProgressDialogHolder.dismissDialog(); } }); } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java index 084643caa..c3c6405ed 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java @@ -74,14 +74,14 @@ private void next(final String email) { .addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(Void aVoid) { - mActivityHelper.dismissDialog(); + mProgressDialogHolder.dismissDialog(); RecoveryEmailSentDialog.show(email, getSupportFragmentManager()); } }) .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { - mActivityHelper.dismissDialog(); + mProgressDialogHolder.dismissDialog(); if (e instanceof FirebaseAuthInvalidUserException) { // No FirebaseUser exists with this email address, show error. @@ -95,7 +95,7 @@ public void onFailure(@NonNull Exception e) { public void onClick(View view) { if (view.getId() == R.id.button_done) { if (mEmailFieldValidator.validate(mEmailEditText.getText())) { - mActivityHelper.showLoadingDialog(R.string.progress_dialog_sending); + mProgressDialogHolder.showLoadingDialog(R.string.progress_dialog_sending); next(mEmailEditText.getText().toString()); } } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java index d6697c163..2c0ca888c 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java @@ -205,7 +205,7 @@ private void validateAndRegisterUser() { boolean passwordValid = mPasswordFieldValidator.validate(password); boolean nameValid = mNameValidator.validate(name); if (emailValid && passwordValid && nameValid) { - mHelper.showLoadingDialog(R.string.progress_dialog_signing_up); + mProgressDialogHolder.showLoadingDialog(R.string.progress_dialog_signing_up); registerUser(email, name, password); } } @@ -303,7 +303,7 @@ public void onSuccess(String provider) { .addOnCompleteListener(new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { - mHelper.dismissDialog(); + mProgressDialogHolder.dismissDialog(); } }); return; @@ -313,7 +313,7 @@ public void onComplete(@NonNull Task task) { mEmailInput.setError(getString(R.string.email_account_creation_error)); } - mHelper.dismissDialog(); + mProgressDialogHolder.dismissDialog(); } }); } 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 b79a7164f..2e932febd 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 @@ -122,7 +122,7 @@ private void populateIdpList(List providers) { @Override public void onClick(View view) { if (provider instanceof IdpProvider) { - mActivityHelper.showLoadingDialog(R.string.progress_dialog_loading); + mProgressDialogHolder.showLoadingDialog(R.string.progress_dialog_loading); } provider.startLogin(AuthMethodPickerActivity.this); } @@ -166,7 +166,7 @@ public void onSuccess(final IdpResponse response) { @Override public void onFailure(Bundle extra) { // stay on this screen - mActivityHelper.dismissDialog(); + mProgressDialogHolder.dismissDialog(); } @Override 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 aa620c53c..a4db4327d 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 @@ -14,7 +14,6 @@ package com.firebase.ui.auth.ui.idp; -import android.app.Activity; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.RestrictTo; @@ -25,6 +24,7 @@ import com.firebase.ui.auth.ResultCodes; import com.firebase.ui.auth.provider.ProviderUtils; import com.firebase.ui.auth.ui.BaseHelper; +import com.firebase.ui.auth.ui.HelperActivityBase; import com.firebase.ui.auth.ui.User; import com.firebase.ui.auth.ui.accountlink.WelcomeBackIdpPrompt; import com.firebase.ui.auth.ui.accountlink.WelcomeBackPasswordPrompt; @@ -42,7 +42,7 @@ public class CredentialSignInHandler implements OnCompleteListener { private static final String TAG = "CredentialSignInHandler"; - private Activity mActivity; + private HelperActivityBase mActivity; private BaseHelper mHelper; @Nullable private SaveSmartLock mSmartLock; @@ -50,7 +50,7 @@ public class CredentialSignInHandler implements OnCompleteListener { private int mAccountLinkRequestCode; public CredentialSignInHandler( - Activity activity, + HelperActivityBase activity, BaseHelper helper, @Nullable SaveSmartLock smartLock, int accountLinkRequestCode, @@ -81,7 +81,7 @@ public void onComplete(@NonNull Task task) { .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { - mHelper.finishActivity( + BaseHelper.finishActivity( mActivity, ResultCodes.CANCELED, IdpResponse.getErrorCodeIntent(ErrorCodes.UNKNOWN_ERROR)); @@ -97,14 +97,14 @@ public void onFailure(@NonNull Exception e) { task.getException()); } - mHelper.dismissDialog(); + mActivity.getDialogHolder().dismissDialog(); } } private class StartWelcomeBackFlow implements OnSuccessListener { @Override public void onSuccess(String provider) { - mHelper.dismissDialog(); + mActivity.getDialogHolder().dismissDialog(); if (provider == null) { throw new IllegalStateException( diff --git a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/IdpSignInContainer.java b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/IdpSignInContainer.java index 1e82765a5..90b86f959 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/IdpSignInContainer.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/IdpSignInContainer.java @@ -36,6 +36,7 @@ import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.FragmentBase; +import com.firebase.ui.auth.ui.HelperActivityBase; import com.firebase.ui.auth.ui.TaskFailureLogger; import com.firebase.ui.auth.ui.User; import com.firebase.ui.auth.ui.idp.CredentialSignInHandler; @@ -49,6 +50,7 @@ public class IdpSignInContainer extends FragmentBase implements IdpCallback { private static final String TAG = "IDPSignInContainer"; private static final int RC_WELCOME_BACK_IDP = 4; + private HelperActivityBase mActivity; private IdpProvider mIdpProvider; @Nullable private SaveSmartLock mSaveSmartLock; @@ -120,6 +122,17 @@ public void onCreate(@Nullable Bundle savedInstanceState) { } } + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + if (!(getActivity() instanceof HelperActivityBase)) { + throw new RuntimeException("Can only attach IdpSignInContainer to HelperActivityBase."); + } + + mActivity = (HelperActivityBase) getActivity(); + } + @Override public void onSaveInstanceState(Bundle outState) { outState.putBoolean(ExtraConstants.HAS_EXISTING_INSTANCE, true); @@ -135,7 +148,7 @@ public void onSuccess(final IdpResponse response) { new TaskFailureLogger(TAG, "Failure authenticating with credential " + credential.getProvider())) .addOnCompleteListener(new CredentialSignInHandler( - getActivity(), + mActivity, mHelper, mSaveSmartLock, RC_WELCOME_BACK_IDP, diff --git a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java index 9620672fa..74f040c59 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java @@ -99,7 +99,7 @@ public void onCreate(Bundle savedInstance) { FlowParameters flowParams = mHelper.getFlowParams(); if (flowParams.enableCredentials) { - mHelper.showLoadingDialog(R.string.progress_dialog_loading); + mProgressDialogHolder.showLoadingDialog(R.string.progress_dialog_loading); mGoogleApiClient = new GoogleApiClient.Builder(getContext().getApplicationContext()) .addConnectionCallbacks(this) @@ -270,7 +270,7 @@ private void startAuthMethodChoice() { flowParams), RC_AUTH_METHOD_PICKER); } - mHelper.dismissDialog(); + mProgressDialogHolder.dismissDialog(); } /** @@ -358,7 +358,7 @@ private void redirectToIdpSignIn(String email, String accountType) { getContext(), mHelper.getFlowParams()), RC_IDP_SIGNIN); - mHelper.dismissDialog(); + mProgressDialogHolder.dismissDialog(); } } } diff --git a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SmartLockBase.java b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SmartLockBase.java index 6c63a9f7e..1880cc823 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SmartLockBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SmartLockBase.java @@ -123,7 +123,7 @@ public void onStart() { if (mActivityResultPair != null) { mHelper.finish(mActivityResultPair.first, mActivityResultPair.second); } else if (mWasProgressDialogShowing) { - mHelper.showLoadingDialog(com.firebase.ui.auth.R.string.progress_dialog_loading); + mProgressDialogHolder.showLoadingDialog(com.firebase.ui.auth.R.string.progress_dialog_loading); mWasProgressDialogShowing = false; } } @@ -131,8 +131,8 @@ public void onStart() { @Override public void onStop() { super.onStop(); - mWasProgressDialogShowing = mHelper.isProgressDialogShowing(); - mHelper.dismissDialog(); + mWasProgressDialogShowing = mProgressDialogHolder.isProgressDialogShowing(); + mProgressDialogHolder.dismissDialog(); } @Override From e53b548c19e21c4107a5e760e7ada7bcd7c9e456 Mon Sep 17 00:00:00 2001 From: Sam Stern Date: Mon, 26 Jun 2017 15:17:44 -0700 Subject: [PATCH 3/8] Kill FragmentHelper Change-Id: I216e2e6d605fb0b3750ddd198e954597db89c1d2 --- .../com/firebase/ui/auth/ui/BaseHelper.java | 7 +++++ .../com/firebase/ui/auth/ui/DialogBase.java | 6 ++--- .../com/firebase/ui/auth/ui/FragmentBase.java | 12 ++++++--- .../firebase/ui/auth/ui/FragmentHelper.java | 27 ------------------- .../ui/auth/ui/email/CheckEmailFragment.java | 2 +- .../ui/phone/VerifyPhoneNumberFragment.java | 3 +-- .../util/signincontainer/SaveSmartLock.java | 5 ++-- .../util/signincontainer/SignInDelegate.java | 2 +- .../util/signincontainer/SmartLockBase.java | 4 ++- 9 files changed, 27 insertions(+), 41 deletions(-) delete mode 100644 auth/src/main/java/com/firebase/ui/auth/ui/FragmentHelper.java diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/BaseHelper.java b/auth/src/main/java/com/firebase/ui/auth/ui/BaseHelper.java index 8393d7876..e2d01dbd7 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/BaseHelper.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/BaseHelper.java @@ -3,9 +3,11 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; +import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.RestrictTo; +import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import com.firebase.ui.auth.IdpResponse; @@ -34,6 +36,11 @@ public BaseHelper(Context context, Intent intent) { this(context, (FlowParameters) intent.getParcelableExtra(ExtraConstants.EXTRA_FLOW_PARAMS)); } + public BaseHelper(Fragment fragment, Bundle arguments) { + this(fragment.getContext().getApplicationContext(), + (FlowParameters) arguments.getParcelable(ExtraConstants.EXTRA_FLOW_PARAMS)); + } + public static Intent createBaseIntent( @NonNull Context context, @NonNull Class target, diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java index 116c1e0ea..ff2db3fe4 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java @@ -10,13 +10,13 @@ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public class DialogBase extends DialogFragment { - protected FragmentHelper mHelper; + protected BaseHelper mHelper; protected ProgressDialogHolder mProgressDialogHolder; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mHelper = new FragmentHelper(this); + mHelper = new BaseHelper(this, getArguments()); ContextThemeWrapper context = new ContextThemeWrapper( getContext(), mHelper.getFlowParams().themeId); @@ -30,6 +30,6 @@ public void onDestroy() { } public void finish(int resultCode, Intent resultIntent) { - mHelper.finish(resultCode, resultIntent); + BaseHelper.finishActivity(getActivity(), resultCode, resultIntent); } } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java index 48f576fad..a2d2357fe 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java @@ -1,6 +1,7 @@ package com.firebase.ui.auth.ui; import android.content.Intent; +import android.content.IntentSender; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.annotation.RestrictTo; @@ -10,13 +11,13 @@ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public class FragmentBase extends Fragment { - protected FragmentHelper mHelper; + protected BaseHelper mHelper; protected ProgressDialogHolder mProgressDialogHolder; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mHelper = new FragmentHelper(this); + mHelper = new BaseHelper(this, this.getArguments()); ContextThemeWrapper context = new ContextThemeWrapper( getContext(), mHelper.getFlowParams().themeId); @@ -30,6 +31,11 @@ public void onDestroy() { } public void finish(int resultCode, Intent resultIntent) { - mHelper.finish(resultCode, resultIntent); + BaseHelper.finishActivity(getActivity(), resultCode, resultIntent); + } + + public void startIntentSenderForResult(IntentSender sender, int requestCode) + throws IntentSender.SendIntentException { + startIntentSenderForResult(sender, requestCode, null, 0, 0, 0, null); } } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/FragmentHelper.java b/auth/src/main/java/com/firebase/ui/auth/ui/FragmentHelper.java deleted file mode 100644 index 5c1d624ab..000000000 --- a/auth/src/main/java/com/firebase/ui/auth/ui/FragmentHelper.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.firebase.ui.auth.ui; - -import android.content.Intent; -import android.content.IntentSender; -import android.support.annotation.RestrictTo; -import android.support.v4.app.Fragment; - -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -public class FragmentHelper extends BaseHelper { - - private Fragment mFragment; - - public FragmentHelper(Fragment fragment) { - super(fragment.getContext().getApplicationContext(), - (FlowParameters) fragment.getArguments().getParcelable(ExtraConstants.EXTRA_FLOW_PARAMS)); - mFragment = fragment; - } - - public void finish(int resultCode, Intent intent) { - finishActivity(mFragment.getActivity(), resultCode, intent); - } - - public void startIntentSenderForResult(IntentSender sender, int requestCode) - throws IntentSender.SendIntentException { - mFragment.startIntentSenderForResult(sender, requestCode, null, 0, 0, 0, null); - } -} diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java index aa87ab782..32ebc90e5 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java @@ -220,7 +220,7 @@ public void onComplete(@NonNull Task task) { private void showEmailAutoCompleteHint() { try { - mHelper.startIntentSenderForResult(getEmailHintIntent().getIntentSender(), RC_HINT); + startIntentSenderForResult(getEmailHintIntent().getIntentSender(), RC_HINT); } catch (IntentSender.SendIntentException e) { Log.e(TAG, "Unable to start hint intent", e); } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/phone/VerifyPhoneNumberFragment.java b/auth/src/main/java/com/firebase/ui/auth/ui/phone/VerifyPhoneNumberFragment.java index e2a3b0253..4593eb195 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/phone/VerifyPhoneNumberFragment.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/phone/VerifyPhoneNumberFragment.java @@ -195,8 +195,7 @@ private void setupSendCodeButton() { private void showPhoneAutoCompleteHint() { try { - mHelper.startIntentSenderForResult(getPhoneHintIntent().getIntentSender(), - RC_PHONE_HINT); + startIntentSenderForResult(getPhoneHintIntent().getIntentSender(), RC_PHONE_HINT); } catch (IntentSender.SendIntentException e) { Log.e(TAG, "Unable to start hint intent", e); } diff --git a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SaveSmartLock.java b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SaveSmartLock.java index 1abf6431d..d2230fe35 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SaveSmartLock.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SaveSmartLock.java @@ -129,7 +129,7 @@ public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { connectionResult.getErrorCode(), RC_UPDATE_SERVICE); try { - mHelper.startIntentSenderForResult(resolution.getIntentSender(), RC_UPDATE_SERVICE); + startIntentSenderForResult(resolution.getIntentSender(), RC_UPDATE_SERVICE); } catch (IntentSender.SendIntentException e) { Log.e(TAG, "STATUS: Failed to send resolution.", e); finish(); @@ -145,8 +145,7 @@ public void onResult(@NonNull Status status) { // Try to resolve the save request. This will prompt the user if // the credential is new. try { - mHelper.startIntentSenderForResult(status.getResolution().getIntentSender(), - RC_SAVE); + startIntentSenderForResult(status.getResolution().getIntentSender(), RC_SAVE); } catch (IntentSender.SendIntentException e) { // Could not resolve the request Log.e(TAG, "STATUS: Failed to send resolution.", e); diff --git a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java index 74f040c59..49e939c77 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java @@ -139,7 +139,7 @@ public void onResult(@NonNull CredentialRequestResult result) { if (status.hasResolution()) { try { if (status.getStatusCode() == CommonStatusCodes.RESOLUTION_REQUIRED) { - mHelper.startIntentSenderForResult( + startIntentSenderForResult( status.getResolution().getIntentSender(), RC_CREDENTIALS_READ); return; diff --git a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SmartLockBase.java b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SmartLockBase.java index 1880cc823..8f4cd5cc1 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SmartLockBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SmartLockBase.java @@ -10,6 +10,7 @@ import android.widget.Toast; import com.firebase.ui.auth.AuthUI; +import com.firebase.ui.auth.ui.BaseHelper; import com.firebase.ui.auth.ui.FragmentBase; import com.google.android.gms.auth.api.credentials.Credential; import com.google.android.gms.auth.api.credentials.IdentityProviders; @@ -121,7 +122,8 @@ public void onCreate(@Nullable Bundle savedInstanceState) { public void onStart() { super.onStart(); if (mActivityResultPair != null) { - mHelper.finish(mActivityResultPair.first, mActivityResultPair.second); + BaseHelper.finishActivity( + getActivity(), mActivityResultPair.first, mActivityResultPair.second); } else if (mWasProgressDialogShowing) { mProgressDialogHolder.showLoadingDialog(com.firebase.ui.auth.R.string.progress_dialog_loading); mWasProgressDialogShowing = false; From 46bae954ffbacf3445820d39c38da89c7bcf5736 Mon Sep 17 00:00:00 2001 From: Sam Stern Date: Mon, 26 Jun 2017 17:31:50 -0700 Subject: [PATCH 4/8] Kill BaseHelper Change-Id: Id3c6e12f3da3fde438aa6da27e9033b30233e6d0 --- .../com/firebase/ui/auth/KickoffActivity.java | 6 +- .../ui/auth/provider/EmailProvider.java | 13 ++-- .../ui/auth/provider/PhoneProvider.java | 13 ++-- .../{BaseHelper.java => ActivityUtils.java} | 52 +------------- .../firebase/ui/auth/ui/AppCompatBase.java | 2 +- .../com/firebase/ui/auth/ui/DialogBase.java | 15 ++-- .../firebase/ui/auth/ui/FlowParameters.java | 15 ++++ .../com/firebase/ui/auth/ui/FragmentBase.java | 15 ++-- .../ui/auth/ui/HelperActivityBase.java | 17 +++-- .../ui/accountlink/WelcomeBackIdpPrompt.java | 13 ++-- .../WelcomeBackPasswordPrompt.java | 14 ++-- .../ui/auth/ui/email/CheckEmailFragment.java | 8 ++- .../ui/email/RecoverPasswordActivity.java | 7 +- .../auth/ui/email/RegisterEmailActivity.java | 15 ++-- .../auth/ui/email/RegisterEmailFragment.java | 18 +++-- .../auth/ui/idp/AuthMethodPickerActivity.java | 20 +++--- .../auth/ui/idp/CredentialSignInHandler.java | 19 ++--- .../ui/phone/PhoneVerificationActivity.java | 20 +++--- .../phone/SubmitConfirmationCodeFragment.java | 2 +- .../ui/phone/VerifyPhoneNumberFragment.java | 2 +- .../firebase/ui/auth/util/AuthInstances.java | 42 +++++++++++ .../signincontainer/IdpSignInContainer.java | 9 +-- .../util/signincontainer/SaveSmartLock.java | 8 ++- .../util/signincontainer/SignInDelegate.java | 17 ++--- .../util/signincontainer/SmartLockBase.java | 4 +- ...erShadow.java => AuthInstancesShadow.java} | 63 ++++++++++------- .../CustomRobolectricGradleTestRunner.java | 6 +- .../ui/auth/testhelpers/FakeAuthResult.java | 2 +- .../ui/auth/testhelpers/TestHelper.java | 2 +- .../ui/email/RecoverPasswordActivityTest.java | 8 +-- .../ui/email/RegisterEmailActivityTest.java | 11 ++- .../email/WelcomeBackPasswordPromptTest.java | 11 ++- .../ui/idp/AuthMethodPickerActivityTest.java | 26 ++++--- .../ui/idp/CredentialSignInHandlerTest.java | 42 +++++------ .../phone/PhoneVerificationActivityTest.java | 69 ++++++++++--------- 35 files changed, 335 insertions(+), 271 deletions(-) rename auth/src/main/java/com/firebase/ui/auth/ui/{BaseHelper.java => ActivityUtils.java} (50%) create mode 100644 auth/src/main/java/com/firebase/ui/auth/util/AuthInstances.java rename auth/src/test/java/com/firebase/ui/auth/testhelpers/{BaseHelperShadow.java => AuthInstancesShadow.java} (73%) diff --git a/auth/src/main/java/com/firebase/ui/auth/KickoffActivity.java b/auth/src/main/java/com/firebase/ui/auth/KickoffActivity.java index d2096b0c9..3d0c52493 100644 --- a/auth/src/main/java/com/firebase/ui/auth/KickoffActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/KickoffActivity.java @@ -8,7 +8,7 @@ import android.support.annotation.RestrictTo; import android.util.Log; -import com.firebase.ui.auth.ui.BaseHelper; +import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.HelperActivityBase; @@ -24,7 +24,7 @@ public class KickoffActivity extends HelperActivityBase { private boolean mIsWaitingForPlayServices = false; public static Intent createIntent(Context context, FlowParameters flowParams) { - return BaseHelper.createBaseIntent(context, KickoffActivity.class, flowParams); + return ActivityUtils.createBaseIntent(context, KickoffActivity.class, flowParams); } @Override @@ -84,7 +84,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { } private void start() { - FlowParameters flowParams = mActivityHelper.getFlowParams(); + FlowParameters flowParams = getFlowParams(); SignInDelegate.delegate(this, flowParams); } diff --git a/auth/src/main/java/com/firebase/ui/auth/provider/EmailProvider.java b/auth/src/main/java/com/firebase/ui/auth/provider/EmailProvider.java index fd22120cf..ca4fbc0f9 100644 --- a/auth/src/main/java/com/firebase/ui/auth/provider/EmailProvider.java +++ b/auth/src/main/java/com/firebase/ui/auth/provider/EmailProvider.java @@ -8,7 +8,8 @@ import com.firebase.ui.auth.AuthUI; import com.firebase.ui.auth.R; import com.firebase.ui.auth.ResultCodes; -import com.firebase.ui.auth.ui.BaseHelper; +import com.firebase.ui.auth.ui.ActivityUtils; +import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.email.RegisterEmailActivity; import com.google.firebase.auth.EmailAuthProvider; @@ -16,11 +17,11 @@ public class EmailProvider implements Provider { private static final int RC_EMAIL_FLOW = 2; private Activity mActivity; - private BaseHelper mHelper; + private FlowParameters mFlowParameters; - public EmailProvider(Activity activity, BaseHelper helper) { + public EmailProvider(Activity activity, FlowParameters flowParameters) { mActivity = activity; - mHelper = helper; + mFlowParameters = flowParameters; } @Override @@ -43,14 +44,14 @@ public int getButtonLayout() { @Override public void startLogin(Activity activity) { activity.startActivityForResult( - RegisterEmailActivity.createIntent(activity, mHelper.getFlowParams()), + RegisterEmailActivity.createIntent(activity, mFlowParameters), RC_EMAIL_FLOW); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == RC_EMAIL_FLOW && resultCode == ResultCodes.OK) { - mHelper.finishActivity(mActivity, ResultCodes.OK, data); + ActivityUtils.finishActivity(mActivity, ResultCodes.OK, data); } } } diff --git a/auth/src/main/java/com/firebase/ui/auth/provider/PhoneProvider.java b/auth/src/main/java/com/firebase/ui/auth/provider/PhoneProvider.java index 741d47cd7..fd93bb527 100644 --- a/auth/src/main/java/com/firebase/ui/auth/provider/PhoneProvider.java +++ b/auth/src/main/java/com/firebase/ui/auth/provider/PhoneProvider.java @@ -8,7 +8,8 @@ import com.firebase.ui.auth.AuthUI; import com.firebase.ui.auth.R; import com.firebase.ui.auth.ResultCodes; -import com.firebase.ui.auth.ui.BaseHelper; +import com.firebase.ui.auth.ui.ActivityUtils; +import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.phone.PhoneVerificationActivity; import com.google.firebase.auth.PhoneAuthProvider; @@ -17,11 +18,11 @@ public class PhoneProvider implements Provider { private static final int RC_PHONE_FLOW = 4; private Activity mActivity; - private BaseHelper mHelper; + private FlowParameters mFlowParameters; - public PhoneProvider(Activity activity, BaseHelper helper) { + public PhoneProvider(Activity activity, FlowParameters parameters) { mActivity = activity; - mHelper = helper; + mFlowParameters = parameters; } @Override @@ -44,14 +45,14 @@ public int getButtonLayout() { @Override public void startLogin(Activity activity) { activity.startActivityForResult( - PhoneVerificationActivity.createIntent(activity, mHelper.getFlowParams(), null), + PhoneVerificationActivity.createIntent(activity, mFlowParameters, null), RC_PHONE_FLOW); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == RC_PHONE_FLOW && resultCode == ResultCodes.OK) { - mHelper.finishActivity(mActivity, ResultCodes.OK, data); + ActivityUtils.finishActivity(mActivity, ResultCodes.OK, data); } } } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/BaseHelper.java b/auth/src/main/java/com/firebase/ui/auth/ui/ActivityUtils.java similarity index 50% rename from auth/src/main/java/com/firebase/ui/auth/ui/BaseHelper.java rename to auth/src/main/java/com/firebase/ui/auth/ui/ActivityUtils.java index e2d01dbd7..b400d61eb 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/BaseHelper.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/ActivityUtils.java @@ -3,43 +3,19 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; -import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.RestrictTo; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentActivity; import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.ResultCodes; import com.firebase.ui.auth.util.signincontainer.SaveSmartLock; -import com.google.android.gms.auth.api.Auth; -import com.google.android.gms.auth.api.credentials.CredentialsApi; -import com.google.firebase.FirebaseApp; -import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; -import com.google.firebase.auth.PhoneAuthProvider; import static com.firebase.ui.auth.util.Preconditions.checkNotNull; @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -public class BaseHelper { - private final FlowParameters mFlowParams; - protected Context mContext; - - public BaseHelper(Context context, FlowParameters parameters) { - mContext = context; - mFlowParams = parameters; - } - - public BaseHelper(Context context, Intent intent) { - this(context, (FlowParameters) intent.getParcelableExtra(ExtraConstants.EXTRA_FLOW_PARAMS)); - } - - public BaseHelper(Fragment fragment, Bundle arguments) { - this(fragment.getContext().getApplicationContext(), - (FlowParameters) arguments.getParcelable(ExtraConstants.EXTRA_FLOW_PARAMS)); - } +public class ActivityUtils { public static Intent createBaseIntent( @NonNull Context context, @@ -52,36 +28,12 @@ public static Intent createBaseIntent( checkNotNull(flowParams, "flowParams cannot be null")); } - public FlowParameters getFlowParams() { - return mFlowParams; - } - public static void finishActivity(Activity activity, int resultCode, Intent intent) { activity.setResult(resultCode, intent); activity.finish(); } - public FirebaseAuth getFirebaseAuth() { - return FirebaseAuth.getInstance(FirebaseApp.getInstance(mFlowParams.appName)); - } - - public CredentialsApi getCredentialsApi() { - return Auth.CredentialsApi; - } - - public FirebaseUser getCurrentUser() { - return getFirebaseAuth().getCurrentUser(); - } - - public SaveSmartLock getSaveSmartLockInstance(FragmentActivity activity) { - return SaveSmartLock.getInstance(activity, getFlowParams()); - } - - public PhoneAuthProvider getPhoneAuthProviderInstance() { - return PhoneAuthProvider.getInstance(); - } - - public void saveCredentialsOrFinish( + public static void saveCredentialsOrFinish( @Nullable SaveSmartLock saveSmartLock, Activity activity, FirebaseUser firebaseUser, diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/AppCompatBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/AppCompatBase.java index 3a4bca90f..ec62c3152 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/AppCompatBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/AppCompatBase.java @@ -31,7 +31,7 @@ protected void onCreate(Bundle savedInstance) { private void configureTheme() { setTheme(R.style.FirebaseUI); // Provides default values - setTheme(mActivityHelper.getFlowParams().themeId); + setTheme(getFlowParams().themeId); } } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java index ff2db3fe4..cf01b0bda 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java @@ -10,16 +10,15 @@ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public class DialogBase extends DialogFragment { - protected BaseHelper mHelper; + protected FlowParameters mFlowParameters; protected ProgressDialogHolder mProgressDialogHolder; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mHelper = new BaseHelper(this, getArguments()); ContextThemeWrapper context = new ContextThemeWrapper( - getContext(), mHelper.getFlowParams().themeId); + getContext(), mFlowParameters.themeId); mProgressDialogHolder = new ProgressDialogHolder(context); } @@ -29,7 +28,15 @@ public void onDestroy() { mProgressDialogHolder.dismissDialog(); } + public FlowParameters getFlowParams() { + if (mFlowParameters == null) { + mFlowParameters = FlowParameters.fromBundle(getArguments()); + } + + return mFlowParameters; + } + public void finish(int resultCode, Intent resultIntent) { - BaseHelper.finishActivity(getActivity(), resultCode, resultIntent); + ActivityUtils.finishActivity(getActivity(), resultCode, resultIntent); } } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/FlowParameters.java b/auth/src/main/java/com/firebase/ui/auth/ui/FlowParameters.java index 6bd7c3a39..c4e15bb88 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/FlowParameters.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/FlowParameters.java @@ -13,6 +13,7 @@ */ package com.firebase.ui.auth.ui; +import android.content.Intent; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; @@ -79,6 +80,20 @@ public FlowParameters( this.allowNewEmailAccounts = allowNewEmailAccounts; } + /** + * Extract FlowParameters from an Intent. + */ + public static FlowParameters fromIntent(Intent intent) { + return intent.getParcelableExtra(ExtraConstants.EXTRA_FLOW_PARAMS); + } + + /** + * Extract FlowParameters from a Bundle. + */ + public static FlowParameters fromBundle(Bundle bundle) { + return bundle.getParcelable(ExtraConstants.EXTRA_FLOW_PARAMS); + } + /** * Create a bundle containing this FlowParameters object as * {@link ExtraConstants#EXTRA_FLOW_PARAMS}. diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java index a2d2357fe..1f653c7f8 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java @@ -11,16 +11,15 @@ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public class FragmentBase extends Fragment { - protected BaseHelper mHelper; + protected FlowParameters mFlowParameters; protected ProgressDialogHolder mProgressDialogHolder; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mHelper = new BaseHelper(this, this.getArguments()); ContextThemeWrapper context = new ContextThemeWrapper( - getContext(), mHelper.getFlowParams().themeId); + getContext(), getFlowParams().themeId); mProgressDialogHolder = new ProgressDialogHolder(context); } @@ -30,8 +29,16 @@ public void onDestroy() { mProgressDialogHolder.dismissDialog(); } + public FlowParameters getFlowParams() { + if (mFlowParameters == null) { + mFlowParameters = FlowParameters.fromBundle(getArguments()); + } + + return mFlowParameters; + } + public void finish(int resultCode, Intent resultIntent) { - BaseHelper.finishActivity(getActivity(), resultCode, resultIntent); + ActivityUtils.finishActivity(getActivity(), resultCode, resultIntent); } public void startIntentSenderForResult(IntentSender sender, int requestCode) diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java index e969b74bb..94fbdb4a2 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java @@ -15,13 +15,12 @@ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public class HelperActivityBase extends AppCompatActivity { - protected BaseHelper mActivityHelper; + protected FlowParameters mFlowParameters; protected ProgressDialogHolder mProgressDialogHolder; @Override protected void onCreate(Bundle savedInstance) { super.onCreate(savedInstance); - mActivityHelper = new BaseHelper(this, getIntent()); mProgressDialogHolder = new ProgressDialogHolder(this); } @@ -31,8 +30,16 @@ protected void onDestroy() { mProgressDialogHolder.dismissDialog(); } + public FlowParameters getFlowParams() { + if (mFlowParameters == null) { + mFlowParameters = FlowParameters.fromIntent(getIntent()); + } + + return mFlowParameters; + } + public void finish(int resultCode, Intent intent) { - BaseHelper.finishActivity(this, resultCode, intent); + ActivityUtils.finishActivity(this, resultCode, intent); } public ProgressDialogHolder getDialogHolder() { @@ -44,14 +51,14 @@ public void saveCredentialsOrFinish( FirebaseUser firebaseUser, @NonNull String password, IdpResponse response) { - mActivityHelper.saveCredentialsOrFinish(saveSmartLock, this, firebaseUser, password, response); + ActivityUtils.saveCredentialsOrFinish(saveSmartLock, this, firebaseUser, password, response); } public void saveCredentialsOrFinish( @Nullable SaveSmartLock saveSmartLock, FirebaseUser firebaseUser, IdpResponse response) { - mActivityHelper.saveCredentialsOrFinish(saveSmartLock, this, firebaseUser, null, response); + ActivityUtils.saveCredentialsOrFinish(saveSmartLock, this, firebaseUser, null, response); } } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackIdpPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackIdpPrompt.java index e98c7cc6d..4dceec852 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackIdpPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackIdpPrompt.java @@ -37,11 +37,12 @@ import com.firebase.ui.auth.provider.IdpProvider.IdpCallback; import com.firebase.ui.auth.provider.TwitterProvider; import com.firebase.ui.auth.ui.AppCompatBase; -import com.firebase.ui.auth.ui.BaseHelper; +import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.TaskFailureLogger; import com.firebase.ui.auth.ui.User; +import com.firebase.ui.auth.util.AuthInstances; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; @@ -65,7 +66,7 @@ public static Intent createIntent( FlowParameters flowParams, User existingUser, IdpResponse newUserResponse) { - return BaseHelper.createBaseIntent(context, WelcomeBackIdpPrompt.class, flowParams) + return ActivityUtils.createBaseIntent(context, WelcomeBackIdpPrompt.class, flowParams) .putExtra(ExtraConstants.EXTRA_USER, existingUser) .putExtra(ExtraConstants.EXTRA_IDP_RESPONSE, newUserResponse); } @@ -81,7 +82,7 @@ protected void onCreate(Bundle savedInstanceState) { User oldUser = User.getUser(getIntent()); String providerId = oldUser.getProvider(); - for (IdpConfig idpConfig : mActivityHelper.getFlowParams().providerInfo) { + for (IdpConfig idpConfig : getFlowParams().providerInfo) { if (providerId.equals(idpConfig.getProviderId())) { switch (providerId) { case GoogleAuthProvider.PROVIDER_ID: @@ -89,7 +90,7 @@ protected void onCreate(Bundle savedInstanceState) { break; case FacebookAuthProvider.PROVIDER_ID: mIdpProvider = new FacebookProvider( - idpConfig, mActivityHelper.getFlowParams().themeId); + idpConfig, getFlowParams().themeId); break; case TwitterAuthProvider.PROVIDER_ID: mIdpProvider = new TwitterProvider(this); @@ -147,9 +148,9 @@ public void onSuccess(final IdpResponse idpResponse) { return; } - FirebaseUser currentUser = mActivityHelper.getCurrentUser(); + FirebaseUser currentUser = AuthInstances.getCurrentUser(getFlowParams()); if (currentUser == null) { - mActivityHelper.getFirebaseAuth() + AuthInstances.getFirebaseAuth(getFlowParams()) .signInWithCredential(newCredential) .addOnSuccessListener(new OnSuccessListener() { @Override diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackPasswordPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackPasswordPrompt.java index 1c287dd9b..411563782 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackPasswordPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackPasswordPrompt.java @@ -37,12 +37,13 @@ import com.firebase.ui.auth.ResultCodes; import com.firebase.ui.auth.provider.ProviderUtils; import com.firebase.ui.auth.ui.AppCompatBase; -import com.firebase.ui.auth.ui.BaseHelper; +import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.ImeHelper; import com.firebase.ui.auth.ui.TaskFailureLogger; import com.firebase.ui.auth.ui.email.RecoverPasswordActivity; +import com.firebase.ui.auth.util.AuthInstances; import com.firebase.ui.auth.util.signincontainer.SaveSmartLock; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; @@ -71,7 +72,7 @@ public static Intent createIntent( Context context, FlowParameters flowParams, IdpResponse response) { - return BaseHelper.createBaseIntent(context, WelcomeBackPasswordPrompt.class, flowParams) + return ActivityUtils.createBaseIntent(context, WelcomeBackPasswordPrompt.class, flowParams) .putExtra(ExtraConstants.EXTRA_IDP_RESPONSE, response); } @@ -83,7 +84,8 @@ protected void onCreate(Bundle savedInstanceState) { // Show keyboard getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); - mSaveSmartLock = mActivityHelper.getSaveSmartLockInstance(this); + mSaveSmartLock = AuthInstances.getSaveSmartLockInstance( + this, getFlowParams()); mIdpResponse = IdpResponse.fromResultIntent(getIntent()); mEmail = mIdpResponse.getEmail(); @@ -95,7 +97,6 @@ protected void onCreate(Bundle savedInstanceState) { // Create welcome back text with email bolded. String bodyText = getString(R.string.welcome_back_password_prompt_body, mEmail); - FlowParameters flowParameters = mActivityHelper.getFlowParams(); SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(bodyText); int emailStart = bodyText.indexOf(mEmail); @@ -120,7 +121,7 @@ public void onClick(View view) { } else if (id == R.id.trouble_signing_in) { startActivity(RecoverPasswordActivity.createIntent( this, - mActivityHelper.getFlowParams(), + getFlowParams(), mEmail)); finish(ResultCodes.CANCELED, IdpResponse.getErrorCodeIntent(ErrorCodes.UNKNOWN_ERROR)); } @@ -145,7 +146,8 @@ private void validateAndSignIn(final String email, final String password) { } mProgressDialogHolder.showLoadingDialog(R.string.progress_dialog_signing_in); - final FirebaseAuth firebaseAuth = mActivityHelper.getFirebaseAuth(); + final FirebaseAuth firebaseAuth = AuthInstances.getFirebaseAuth(getFlowParams()); + // Sign in with known email and the password provided firebaseAuth.signInWithEmailAndPassword(email, password) .addOnFailureListener( diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java index 32ebc90e5..546276bb3 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java @@ -24,6 +24,7 @@ import com.firebase.ui.auth.ui.ImeHelper; import com.firebase.ui.auth.ui.User; import com.firebase.ui.auth.ui.email.fieldvalidators.EmailFieldValidator; +import com.firebase.ui.auth.util.AuthInstances; import com.firebase.ui.auth.util.GoogleApiHelper; import com.google.android.gms.auth.api.Auth; import com.google.android.gms.auth.api.credentials.Credential; @@ -35,6 +36,7 @@ import com.google.android.gms.tasks.OnSuccessListener; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.EmailAuthProvider; +import com.google.firebase.auth.FirebaseAuth; /** * Fragment that shows a form with an email field and checks for existing accounts with that @@ -136,7 +138,7 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) { // Use email passed in mEmailEditText.setText(email); validateAndProceed(); - } else if (mHelper.getFlowParams().enableHints) { + } else if (getFlowParams().enableHints) { // Try SmartLock email autocomplete hint showEmailAutoCompleteHint(); } @@ -191,7 +193,9 @@ private void checkAccountExists(@NonNull final String email) { final String finalName = name; final Uri finalPhotoUri = photoUri; - ProviderUtils.fetchTopProvider(mHelper.getFirebaseAuth(), email) + + FirebaseAuth auth = AuthInstances.getFirebaseAuth(getFlowParams()); + ProviderUtils.fetchTopProvider(auth, email) .addOnSuccessListener(getActivity(), new OnSuccessListener() { @Override public void onSuccess(String provider) { diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java index c3c6405ed..111b4bbed 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java @@ -25,11 +25,12 @@ import com.firebase.ui.auth.R; import com.firebase.ui.auth.ui.AppCompatBase; -import com.firebase.ui.auth.ui.BaseHelper; +import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.TaskFailureLogger; import com.firebase.ui.auth.ui.email.fieldvalidators.EmailFieldValidator; +import com.firebase.ui.auth.util.AuthInstances; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; import com.google.firebase.auth.FirebaseAuthInvalidUserException; @@ -45,7 +46,7 @@ public class RecoverPasswordActivity extends AppCompatBase implements View.OnCli private EmailFieldValidator mEmailFieldValidator; public static Intent createIntent(Context context, FlowParameters flowParams, String email) { - return BaseHelper.createBaseIntent(context, RecoverPasswordActivity.class, flowParams) + return ActivityUtils.createBaseIntent(context, RecoverPasswordActivity.class, flowParams) .putExtra(ExtraConstants.EXTRA_EMAIL, email); } @@ -67,7 +68,7 @@ protected void onCreate(Bundle savedInstanceState) { } private void next(final String email) { - mActivityHelper.getFirebaseAuth() + AuthInstances.getFirebaseAuth(getFlowParams()) .sendPasswordResetEmail(email) .addOnFailureListener( new TaskFailureLogger(TAG, "Error sending password reset email")) diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailActivity.java index a72b7db6e..0ee79abf6 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailActivity.java @@ -24,7 +24,7 @@ import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.R; import com.firebase.ui.auth.ui.AppCompatBase; -import com.firebase.ui.auth.ui.BaseHelper; +import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.User; @@ -49,7 +49,7 @@ public static Intent createIntent(Context context, FlowParameters flowParams) { } public static Intent createIntent(Context context, FlowParameters flowParams, String email) { - return BaseHelper.createBaseIntent(context, RegisterEmailActivity.class, flowParams) + return ActivityUtils.createBaseIntent(context, RegisterEmailActivity.class, flowParams) .putExtra(ExtraConstants.EXTRA_EMAIL, email); } @@ -66,8 +66,7 @@ protected void onCreate(Bundle savedInstanceState) { String email = getIntent().getExtras().getString(ExtraConstants.EXTRA_EMAIL); // Start with check email - CheckEmailFragment fragment = CheckEmailFragment.newInstance( - mActivityHelper.getFlowParams(), email); + CheckEmailFragment fragment = CheckEmailFragment.newInstance(getFlowParams(), email); getSupportFragmentManager().beginTransaction() .replace(R.id.fragment_register_email, fragment, CheckEmailFragment.TAG) .disallowAddToBackStack() @@ -96,7 +95,7 @@ public void onExistingEmailUser(User user) { startActivityForResult( WelcomeBackPasswordPrompt.createIntent( this, - mActivityHelper.getFlowParams(), + getFlowParams(), new IdpResponse.Builder(EmailAuthProvider.PROVIDER_ID, user.getEmail()).build()), RC_SIGN_IN); @@ -109,7 +108,7 @@ public void onExistingIdpUser(User user) { // Existing social user, direct them to sign in using their chosen provider. Intent intent = WelcomeBackIdpPrompt.createIntent( this, - mActivityHelper.getFlowParams(), + getFlowParams(), user, new IdpResponse.Builder(EmailAuthProvider.PROVIDER_ID, user.getEmail()).build()); @@ -124,9 +123,9 @@ public void onNewUser(User user) { TextInputLayout emailLayout = (TextInputLayout) findViewById(R.id.email_layout); - if (mActivityHelper.getFlowParams().allowNewEmailAccounts) { + if (getFlowParams().allowNewEmailAccounts) { RegisterEmailFragment fragment = RegisterEmailFragment.newInstance( - mActivityHelper.getFlowParams(), + getFlowParams(), user); FragmentTransaction ft = getSupportFragmentManager().beginTransaction() .replace(R.id.fragment_register_email, fragment, RegisterEmailFragment.TAG); diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java index 2c0ca888c..8d69c7186 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java @@ -15,6 +15,7 @@ import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.R; import com.firebase.ui.auth.provider.ProviderUtils; +import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.FragmentBase; @@ -27,6 +28,7 @@ import com.firebase.ui.auth.ui.email.fieldvalidators.EmailFieldValidator; import com.firebase.ui.auth.ui.email.fieldvalidators.PasswordFieldValidator; import com.firebase.ui.auth.ui.email.fieldvalidators.RequiredFieldValidator; +import com.firebase.ui.auth.util.AuthInstances; import com.firebase.ui.auth.util.signincontainer.SaveSmartLock; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.OnFailureListener; @@ -34,6 +36,7 @@ import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.EmailAuthProvider; +import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseAuthInvalidCredentialsException; import com.google.firebase.auth.FirebaseAuthUserCollisionException; import com.google.firebase.auth.FirebaseAuthWeakPasswordException; @@ -156,8 +159,8 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getActivity().setTitle(R.string.title_register_email); - mSaveSmartLock = mHelper.getSaveSmartLockInstance(getActivity()); - mAgreementText.showTerms(mHelper.getFlowParams(), R.string.button_text_save); + mSaveSmartLock = AuthInstances.getSaveSmartLockInstance(getActivity(), getFlowParams()); + mAgreementText.showTerms(getFlowParams(), R.string.button_text_save); } @Override @@ -211,7 +214,7 @@ private void validateAndRegisterUser() { } private void registerUser(final String email, final String name, final String password) { - mHelper.getFirebaseAuth() + AuthInstances.getFirebaseAuth(getFlowParams()) .createUserWithEmailAndPassword(email, password) .addOnFailureListener(new TaskFailureLogger(TAG, "Error creating user")) .addOnSuccessListener(new OnSuccessListener() { @@ -234,7 +237,7 @@ public void onComplete(@NonNull Task task) { // This executes even if the name change fails, since // the account creation succeeded and we want to save // the credential to SmartLock (if enabled). - mHelper.saveCredentialsOrFinish( + ActivityUtils.saveCredentialsOrFinish( mSaveSmartLock, getActivity(), user, @@ -259,7 +262,8 @@ public void onFailure(@NonNull Exception e) { // Collision with existing user email, it should be very hard for // the user to even get to this error due to CheckEmailFragment. - ProviderUtils.fetchTopProvider(mHelper.getFirebaseAuth(), email).addOnSuccessListener( + FirebaseAuth auth = AuthInstances.getFirebaseAuth(getFlowParams()); + ProviderUtils.fetchTopProvider(auth, email).addOnSuccessListener( getActivity(), new OnSuccessListener() { @Override @@ -280,7 +284,7 @@ public void onSuccess(String provider) { getActivity().startActivityForResult( WelcomeBackPasswordPrompt.createIntent( getContext(), - mHelper.getFlowParams(), + getFlowParams(), new IdpResponse.Builder( EmailAuthProvider.PROVIDER_ID, email).build()), @@ -289,7 +293,7 @@ public void onSuccess(String provider) { getActivity().startActivityForResult( WelcomeBackIdpPrompt.createIntent( getContext(), - mHelper.getFlowParams(), + getFlowParams(), new User.Builder(email) .setProvider(provider) .build(), 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 2e932febd..537da89f4 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 @@ -38,11 +38,11 @@ import com.firebase.ui.auth.provider.Provider; import com.firebase.ui.auth.provider.TwitterProvider; import com.firebase.ui.auth.ui.AppCompatBase; -import com.firebase.ui.auth.ui.BaseHelper; +import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.TaskFailureLogger; import com.firebase.ui.auth.ui.email.RegisterEmailActivity; -import com.firebase.ui.auth.ui.phone.PhoneVerificationActivity; +import com.firebase.ui.auth.util.AuthInstances; import com.firebase.ui.auth.util.signincontainer.SaveSmartLock; import com.google.firebase.auth.AuthCredential; @@ -67,18 +67,18 @@ public class AuthMethodPickerActivity extends AppCompatBase implements IdpCallba private SaveSmartLock mSaveSmartLock; public static Intent createIntent(Context context, FlowParameters flowParams) { - return BaseHelper.createBaseIntent(context, AuthMethodPickerActivity.class, flowParams); + return ActivityUtils.createBaseIntent(context, AuthMethodPickerActivity.class, flowParams); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.auth_method_picker_layout); - mSaveSmartLock = mActivityHelper.getSaveSmartLockInstance(this); + mSaveSmartLock = AuthInstances.getSaveSmartLockInstance(this, getFlowParams()); - populateIdpList(mActivityHelper.getFlowParams().providerInfo); + populateIdpList(getFlowParams().providerInfo); - int logoId = mActivityHelper.getFlowParams().logoId; + int logoId = getFlowParams().logoId; if (logoId == AuthUI.NO_LOGO) { findViewById(R.id.logo_layout).setVisibility(View.GONE); } else { @@ -96,16 +96,16 @@ private void populateIdpList(List providers) { break; case AuthUI.FACEBOOK_PROVIDER: mProviders.add(new FacebookProvider( - idpConfig, mActivityHelper.getFlowParams().themeId)); + idpConfig, getFlowParams().themeId)); break; case AuthUI.TWITTER_PROVIDER: mProviders.add(new TwitterProvider(this)); break; case AuthUI.EMAIL_PROVIDER: - mProviders.add(new EmailProvider(this, mActivityHelper)); + mProviders.add(new EmailProvider(this, getFlowParams())); break; case AuthUI.PHONE_VERIFICATION_PROVIDER: - mProviders.add(new PhoneProvider(this, mActivityHelper)); + mProviders.add(new PhoneProvider(this, getFlowParams())); break; default: Log.e(TAG, "Encountered unknown provider parcel with type: " @@ -149,7 +149,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { @Override public void onSuccess(final IdpResponse response) { AuthCredential credential = ProviderUtils.getAuthCredential(response); - mActivityHelper.getFirebaseAuth() + AuthInstances.getFirebaseAuth(getFlowParams()) .signInWithCredential(credential) .addOnFailureListener( new TaskFailureLogger(TAG, "Firebase sign in with credential " 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 a4db4327d..5c88fb8f1 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 @@ -23,11 +23,12 @@ import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.ResultCodes; import com.firebase.ui.auth.provider.ProviderUtils; -import com.firebase.ui.auth.ui.BaseHelper; +import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.HelperActivityBase; import com.firebase.ui.auth.ui.User; import com.firebase.ui.auth.ui.accountlink.WelcomeBackIdpPrompt; import com.firebase.ui.auth.ui.accountlink.WelcomeBackPasswordPrompt; +import com.firebase.ui.auth.util.AuthInstances; import com.firebase.ui.auth.util.signincontainer.SaveSmartLock; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.OnFailureListener; @@ -35,6 +36,7 @@ import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.EmailAuthProvider; +import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseAuthUserCollisionException; import com.google.firebase.auth.FirebaseUser; @@ -43,7 +45,7 @@ public class CredentialSignInHandler implements OnCompleteListener { private static final String TAG = "CredentialSignInHandler"; private HelperActivityBase mActivity; - private BaseHelper mHelper; + private ActivityUtils mHelper; @Nullable private SaveSmartLock mSmartLock; private IdpResponse mResponse; @@ -51,7 +53,7 @@ public class CredentialSignInHandler implements OnCompleteListener { public CredentialSignInHandler( HelperActivityBase activity, - BaseHelper helper, + ActivityUtils helper, @Nullable SaveSmartLock smartLock, int accountLinkRequestCode, IdpResponse response) { @@ -66,7 +68,7 @@ public CredentialSignInHandler( public void onComplete(@NonNull Task task) { if (task.isSuccessful()) { FirebaseUser firebaseUser = task.getResult().getUser(); - mHelper.saveCredentialsOrFinish( + ActivityUtils.saveCredentialsOrFinish( mSmartLock, mActivity, firebaseUser, @@ -76,12 +78,13 @@ public void onComplete(@NonNull Task task) { if (task.getException() instanceof FirebaseAuthUserCollisionException) { String email = mResponse.getEmail(); if (email != null) { - ProviderUtils.fetchTopProvider(mHelper.getFirebaseAuth(), email) + FirebaseAuth auth = AuthInstances.getFirebaseAuth(mActivity.getFlowParams()); + ProviderUtils.fetchTopProvider(auth, email) .addOnSuccessListener(new StartWelcomeBackFlow()) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { - BaseHelper.finishActivity( + ActivityUtils.finishActivity( mActivity, ResultCodes.CANCELED, IdpResponse.getErrorCodeIntent(ErrorCodes.UNKNOWN_ERROR)); @@ -114,7 +117,7 @@ public void onSuccess(String provider) { mActivity.startActivityForResult( WelcomeBackPasswordPrompt.createIntent( mActivity, - mHelper.getFlowParams(), + mActivity.getFlowParams(), mResponse), mAccountLinkRequestCode); } else { @@ -122,7 +125,7 @@ public void onSuccess(String provider) { mActivity.startActivityForResult( WelcomeBackIdpPrompt.createIntent( mActivity, - mHelper.getFlowParams(), + mActivity.getFlowParams(), new User.Builder(mResponse.getEmail()) .setProvider(provider) .build(), diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivity.java index f76f3c238..6435ec3b8 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivity.java @@ -31,9 +31,10 @@ import com.firebase.ui.auth.R; import com.firebase.ui.auth.ResultCodes; import com.firebase.ui.auth.ui.AppCompatBase; -import com.firebase.ui.auth.ui.BaseHelper; +import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; +import com.firebase.ui.auth.util.AuthInstances; import com.firebase.ui.auth.util.signincontainer.SaveSmartLock; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; @@ -79,7 +80,7 @@ enum VerificationState { private VerificationState mVerificationState; public static Intent createIntent(Context context, FlowParameters flowParams, String phone) { - return BaseHelper.createBaseIntent(context, PhoneVerificationActivity.class, flowParams) + return ActivityUtils.createBaseIntent(context, PhoneVerificationActivity.class, flowParams) .putExtra(ExtraConstants.EXTRA_PHONE, phone); } @@ -88,7 +89,7 @@ protected void onCreate(final Bundle savedInstance) { super.onCreate(savedInstance); setContentView(R.layout.activity_register_phone); - mSaveSmartLock = mActivityHelper.getSaveSmartLockInstance(this); + mSaveSmartLock = AuthInstances.getSaveSmartLockInstance(this, getFlowParams()); mHandler = new Handler(); mVerificationState = VerificationState.VERIFICATION_NOT_STARTED; if (savedInstance != null && !savedInstance.isEmpty()) { @@ -101,7 +102,7 @@ protected void onCreate(final Bundle savedInstance) { String phone = getIntent().getExtras().getString(ExtraConstants.EXTRA_PHONE); VerifyPhoneNumberFragment fragment = VerifyPhoneNumberFragment.newInstance - (mActivityHelper.getFlowParams(), phone); + (getFlowParams(), phone); getSupportFragmentManager().beginTransaction().replace(R.id.fragment_verify_phone, fragment, VerifyPhoneNumberFragment.TAG).disallowAddToBackStack().commit(); } @@ -121,7 +122,7 @@ protected void onStart() { sendCode(mPhoneNumber, false); } else if (mVerificationState == VerificationState.VERIFIED) { // activity was recreated when verified dialog was displayed - finish(mActivityHelper.getFirebaseAuth().getCurrentUser()); + finish(AuthInstances.getCurrentUser(getFlowParams())); } } @@ -233,7 +234,7 @@ private void sendCode(String phoneNumber, boolean forceResend) { mPhoneNumber = phoneNumber; mVerificationState = VerificationState.VERIFICATION_STARTED; - mActivityHelper.getPhoneAuthProviderInstance().verifyPhoneNumber(phoneNumber, + AuthInstances.getPhoneAuthProviderInstance().verifyPhoneNumber(phoneNumber, AUTO_RETRIEVAL_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS, this, new PhoneAuthProvider .OnVerificationStateChangedCallbacks() { @Override @@ -274,8 +275,8 @@ protected AlertDialog getAlertDialog() { private void showSubmitCodeFragment() { // idempotent function if (getSubmitConfirmationCodeFragment() == null) { - SubmitConfirmationCodeFragment f = SubmitConfirmationCodeFragment.newInstance - (mActivityHelper.getFlowParams(), mPhoneNumber); + SubmitConfirmationCodeFragment f = SubmitConfirmationCodeFragment.newInstance( + getFlowParams(), mPhoneNumber); FragmentTransaction t = getSupportFragmentManager().beginTransaction().replace(R.id .fragment_verify_phone, f, SubmitConfirmationCodeFragment.TAG).addToBackStack (null); @@ -303,7 +304,8 @@ private void showAlertDialog(@NonNull String s, DialogInterface.OnClickListener } private void signingWithCreds(@NonNull PhoneAuthCredential phoneAuthCredential) { - mActivityHelper.getFirebaseAuth().signInWithCredential(phoneAuthCredential) + AuthInstances.getFirebaseAuth(getFlowParams()) + .signInWithCredential(phoneAuthCredential) .addOnSuccessListener(this, new OnSuccessListener() { @Override public void onSuccess(final AuthResult authResult) { diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/phone/SubmitConfirmationCodeFragment.java b/auth/src/main/java/com/firebase/ui/auth/ui/phone/SubmitConfirmationCodeFragment.java index dead802e1..1bf5efde1 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/phone/SubmitConfirmationCodeFragment.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/phone/SubmitConfirmationCodeFragment.java @@ -224,7 +224,7 @@ private void cancelTimer() { } private void setUpTermsOfService() { - mAgreementText.showTerms(mHelper.getFlowParams(), R.string.continue_phone_login); + mAgreementText.showTerms(getFlowParams(), R.string.continue_phone_login); } @VisibleForTesting(otherwise = VisibleForTesting.NONE) diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/phone/VerifyPhoneNumberFragment.java b/auth/src/main/java/com/firebase/ui/auth/ui/phone/VerifyPhoneNumberFragment.java index 4593eb195..7129626aa 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/phone/VerifyPhoneNumberFragment.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/phone/VerifyPhoneNumberFragment.java @@ -123,7 +123,7 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) { PhoneNumber phoneNumber = PhoneNumberUtils.getPhoneNumber(phone); setPhoneNumber(phoneNumber); setCountryCode(phoneNumber); - } else if (mHelper.getFlowParams().enableHints) { + } else if (getFlowParams().enableHints) { // Try SmartLock phone autocomplete hint showPhoneAutoCompleteHint(); } diff --git a/auth/src/main/java/com/firebase/ui/auth/util/AuthInstances.java b/auth/src/main/java/com/firebase/ui/auth/util/AuthInstances.java new file mode 100644 index 000000000..f01f257cc --- /dev/null +++ b/auth/src/main/java/com/firebase/ui/auth/util/AuthInstances.java @@ -0,0 +1,42 @@ +package com.firebase.ui.auth.util; + +import android.support.v4.app.FragmentActivity; + +import com.firebase.ui.auth.ui.FlowParameters; +import com.firebase.ui.auth.util.signincontainer.SaveSmartLock; +import com.google.android.gms.auth.api.Auth; +import com.google.android.gms.auth.api.credentials.CredentialsApi; +import com.google.firebase.FirebaseApp; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.auth.PhoneAuthProvider; + +/** + * Factor for instances of authentication classes. Should eventually be replaced by + * dependency injection. + */ +public class AuthInstances { + + public static FirebaseAuth getFirebaseAuth(FlowParameters parameters) { + return FirebaseAuth.getInstance(FirebaseApp.getInstance(parameters.appName)); + } + + public static CredentialsApi getCredentialsApi() { + return Auth.CredentialsApi; + } + + public static FirebaseUser getCurrentUser(FlowParameters parameters) { + return getFirebaseAuth(parameters).getCurrentUser(); + } + + public static SaveSmartLock getSaveSmartLockInstance(FragmentActivity activity, + FlowParameters parameters) { + return SaveSmartLock.getInstance(activity, parameters); + } + + public static PhoneAuthProvider getPhoneAuthProviderInstance() { + return PhoneAuthProvider.getInstance(); + } + + +} diff --git a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/IdpSignInContainer.java b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/IdpSignInContainer.java index 90b86f959..9b2e474fc 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/IdpSignInContainer.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/IdpSignInContainer.java @@ -40,6 +40,7 @@ import com.firebase.ui.auth.ui.TaskFailureLogger; import com.firebase.ui.auth.ui.User; import com.firebase.ui.auth.ui.idp.CredentialSignInHandler; +import com.firebase.ui.auth.util.AuthInstances; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.FacebookAuthProvider; import com.google.firebase.auth.GoogleAuthProvider; @@ -85,13 +86,13 @@ public static IdpSignInContainer getInstance(FragmentActivity activity) { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mSaveSmartLock = mHelper.getSaveSmartLockInstance(getActivity()); + mSaveSmartLock = AuthInstances.getSaveSmartLockInstance(getActivity(), getFlowParams()); User user = User.getUser(getArguments()); String provider = user.getProvider(); AuthUI.IdpConfig providerConfig = null; - for (AuthUI.IdpConfig config : mHelper.getFlowParams().providerInfo) { + for (AuthUI.IdpConfig config : getFlowParams().providerInfo) { if (config.getProviderId().equalsIgnoreCase(provider)) { providerConfig = config; break; @@ -110,7 +111,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { providerConfig, user.getEmail()); } else if (provider.equalsIgnoreCase(FacebookAuthProvider.PROVIDER_ID)) { - mIdpProvider = new FacebookProvider(providerConfig, mHelper.getFlowParams().themeId); + mIdpProvider = new FacebookProvider(providerConfig, getFlowParams().themeId); } else if (provider.equalsIgnoreCase(TwitterAuthProvider.PROVIDER_ID)) { mIdpProvider = new TwitterProvider(getContext()); } @@ -142,7 +143,7 @@ public void onSaveInstanceState(Bundle outState) { @Override public void onSuccess(final IdpResponse response) { AuthCredential credential = ProviderUtils.getAuthCredential(response); - mHelper.getFirebaseAuth() + AuthInstances.getFirebaseAuth(getFlowParams()) .signInWithCredential(credential) .addOnFailureListener( new TaskFailureLogger(TAG, "Failure authenticating with credential " + diff --git a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SaveSmartLock.java b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SaveSmartLock.java index d2230fe35..d1d42d7d4 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SaveSmartLock.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SaveSmartLock.java @@ -34,6 +34,7 @@ import com.firebase.ui.auth.R; import com.firebase.ui.auth.ResultCodes; import com.firebase.ui.auth.ui.FlowParameters; +import com.firebase.ui.auth.util.AuthInstances; import com.firebase.ui.auth.util.GoogleApiHelper; import com.firebase.ui.auth.util.PlayServicesHelper; import com.google.android.gms.auth.api.Auth; @@ -114,7 +115,7 @@ public void onConnected(Bundle bundle) { builder.setProfilePictureUri(Uri.parse(mProfilePictureUri)); } - mHelper.getCredentialsApi() + AuthInstances.getCredentialsApi() .save(mGoogleApiClient, builder.build()) .setResultCallback(this); } @@ -171,7 +172,8 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == ResultCodes.OK) { Credential credential = new Credential.Builder(mEmail).setPassword(mPassword) .build(); - mHelper.getCredentialsApi() + + AuthInstances.getCredentialsApi() .save(mGoogleApiClient, credential) .setResultCallback(this); } else { @@ -201,7 +203,7 @@ public void saveCredentialsOrFinish(FirebaseUser firebaseUser, @Nullable IdpResponse response) { mResponse = response; - if (!mHelper.getFlowParams().enableCredentials) { + if (!getFlowParams().enableCredentials) { finish(); return; } diff --git a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java index 49e939c77..1d83905b6 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java @@ -24,6 +24,7 @@ import com.firebase.ui.auth.ui.email.RegisterEmailActivity; import com.firebase.ui.auth.ui.idp.AuthMethodPickerActivity; import com.firebase.ui.auth.ui.phone.PhoneVerificationActivity; +import com.firebase.ui.auth.util.AuthInstances; import com.firebase.ui.auth.util.GoogleApiHelper; import com.firebase.ui.auth.util.GoogleSignInHelper; import com.google.android.gms.auth.api.Auth; @@ -97,7 +98,7 @@ public void onCreate(Bundle savedInstance) { return; } - FlowParameters flowParams = mHelper.getFlowParams(); + FlowParameters flowParams = getFlowParams(); if (flowParams.enableCredentials) { mProgressDialogHolder.showLoadingDialog(R.string.progress_dialog_loading); @@ -108,7 +109,7 @@ public void onCreate(Bundle savedInstance) { .build(); mGoogleApiClient.connect(); - mHelper.getCredentialsApi() + AuthInstances.getCredentialsApi() .request(mGoogleApiClient, new CredentialRequest.Builder() .setPasswordLoginSupported(true) @@ -189,7 +190,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { private List getSupportedAccountTypes() { List accounts = new ArrayList<>(); - for (AuthUI.IdpConfig idpConfig : mHelper.getFlowParams().providerInfo) { + for (AuthUI.IdpConfig idpConfig : getFlowParams().providerInfo) { @AuthUI.SupportedProvider String providerId = idpConfig.getProviderId(); if (providerId.equals(GoogleAuthProvider.PROVIDER_ID) || providerId.equals(FacebookAuthProvider.PROVIDER_ID) @@ -237,7 +238,7 @@ private void handleCredential(Credential credential) { } private void startAuthMethodChoice() { - FlowParameters flowParams = mHelper.getFlowParams(); + FlowParameters flowParams = getFlowParams(); List idpConfigs = flowParams.providerInfo; Map providerIdToConfig = new HashMap<>(); for (IdpConfig providerConfig : idpConfigs) { @@ -282,7 +283,7 @@ private void signInWithEmailAndPassword(String email, String password) { final IdpResponse response = new IdpResponse.Builder(EmailAuthProvider.PROVIDER_ID, email).build(); - mHelper.getFirebaseAuth() + AuthInstances.getFirebaseAuth(getFlowParams()) .signInWithEmailAndPassword(email, password) .addOnFailureListener(new TaskFailureLogger( TAG, "Error signing in with email and password")) @@ -336,7 +337,7 @@ private void redirectToIdpSignIn(String email, String accountType) { startActivityForResult( RegisterEmailActivity.createIntent( getContext(), - mHelper.getFlowParams(), + getFlowParams(), email), RC_EMAIL_FLOW); return; @@ -347,7 +348,7 @@ private void redirectToIdpSignIn(String email, String accountType) { || accountType.equals(IdentityProviders.TWITTER)) { IdpSignInContainer.signIn( getActivity(), - mHelper.getFlowParams(), + getFlowParams(), new User.Builder(email) .setProvider(accountTypeToProviderId(accountType)) .build()); @@ -356,7 +357,7 @@ private void redirectToIdpSignIn(String email, String accountType) { startActivityForResult( AuthMethodPickerActivity.createIntent( getContext(), - mHelper.getFlowParams()), + getFlowParams()), RC_IDP_SIGNIN); mProgressDialogHolder.dismissDialog(); } diff --git a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SmartLockBase.java b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SmartLockBase.java index 8f4cd5cc1..ad854dde6 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SmartLockBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SmartLockBase.java @@ -10,7 +10,7 @@ import android.widget.Toast; import com.firebase.ui.auth.AuthUI; -import com.firebase.ui.auth.ui.BaseHelper; +import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.FragmentBase; import com.google.android.gms.auth.api.credentials.Credential; import com.google.android.gms.auth.api.credentials.IdentityProviders; @@ -122,7 +122,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { public void onStart() { super.onStart(); if (mActivityResultPair != null) { - BaseHelper.finishActivity( + ActivityUtils.finishActivity( getActivity(), mActivityResultPair.first, mActivityResultPair.second); } else if (mWasProgressDialogShowing) { mProgressDialogHolder.showLoadingDialog(com.firebase.ui.auth.R.string.progress_dialog_loading); diff --git a/auth/src/test/java/com/firebase/ui/auth/testhelpers/BaseHelperShadow.java b/auth/src/test/java/com/firebase/ui/auth/testhelpers/AuthInstancesShadow.java similarity index 73% rename from auth/src/test/java/com/firebase/ui/auth/testhelpers/BaseHelperShadow.java rename to auth/src/test/java/com/firebase/ui/auth/testhelpers/AuthInstancesShadow.java index 47af92fb6..fdcb0662a 100644 --- a/auth/src/test/java/com/firebase/ui/auth/testhelpers/BaseHelperShadow.java +++ b/auth/src/test/java/com/firebase/ui/auth/testhelpers/AuthInstancesShadow.java @@ -2,12 +2,13 @@ import android.support.v4.app.FragmentActivity; -import com.firebase.ui.auth.ui.BaseHelper; +import com.firebase.ui.auth.ui.FlowParameters; +import com.firebase.ui.auth.util.AuthInstances; import com.firebase.ui.auth.util.signincontainer.SaveSmartLock; import com.google.android.gms.auth.api.credentials.CredentialsApi; import com.google.firebase.auth.FirebaseAuth; -import com.google.firebase.auth.PhoneAuthProvider; import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.auth.PhoneAuthProvider; import org.mockito.Mockito; import org.robolectric.annotation.Implementation; @@ -15,53 +16,65 @@ import static org.mockito.Mockito.when; -@Implements(BaseHelper.class) -public class BaseHelperShadow { +@Implements(AuthInstances.class) +public class AuthInstancesShadow { + public static FirebaseAuth sFirebaseAuth; public static FirebaseUser sFirebaseUser; public static CredentialsApi sCredentialsApi; public static SaveSmartLock sSaveSmartLock; public static PhoneAuthProvider sPhoneAuthProvider; - public BaseHelperShadow() { - if (sFirebaseUser == null) { - sFirebaseUser = Mockito.mock(FirebaseUser.class); - when(sFirebaseUser.getEmail()).thenReturn(TestConstants.EMAIL); - when(sFirebaseUser.getDisplayName()).thenReturn(TestConstants.NAME); - when(sFirebaseUser.getPhotoUrl()).thenReturn(TestConstants.PHOTO_URI); - } + private AuthInstancesShadow() {} + + @Implementation + public static FirebaseAuth getFirebaseAuth(FlowParameters parameters) { if (sFirebaseAuth == null) { sFirebaseAuth = Mockito.mock(FirebaseAuth.class); when(sFirebaseAuth.getCurrentUser()).thenReturn(sFirebaseUser); } + + return sFirebaseAuth; + } + + @Implementation + public static CredentialsApi getCredentialsApi() { if (sCredentialsApi == null) { sCredentialsApi = Mockito.mock(CredentialsApi.class); } - if (sSaveSmartLock == null) { - sSaveSmartLock = Mockito.mock(SaveSmartLock.class); - } - if (sPhoneAuthProvider == null) { - sPhoneAuthProvider = Mockito.mock(PhoneAuthProvider.class); - } - } - @Implementation - public FirebaseAuth getFirebaseAuth() { - return sFirebaseAuth; + return sCredentialsApi; } @Implementation - public CredentialsApi getCredentialsApi() { - return sCredentialsApi; + public static FirebaseUser getCurrentUser(FlowParameters parameters) { + if (sFirebaseUser == null) { + sFirebaseUser = Mockito.mock(FirebaseUser.class); + when(sFirebaseUser.getEmail()).thenReturn(TestConstants.EMAIL); + when(sFirebaseUser.getDisplayName()).thenReturn(TestConstants.NAME); + when(sFirebaseUser.getPhotoUrl()).thenReturn(TestConstants.PHOTO_URI); + } + + return sFirebaseUser; } @Implementation - public SaveSmartLock getSaveSmartLockInstance(FragmentActivity activity) { + public static SaveSmartLock getSaveSmartLockInstance(FragmentActivity activity, + FlowParameters parameters) { + if (sSaveSmartLock == null) { + sSaveSmartLock = Mockito.mock(SaveSmartLock.class); + } + return sSaveSmartLock; } @Implementation - public PhoneAuthProvider getPhoneAuthProviderInstance() { + public static PhoneAuthProvider getPhoneAuthProviderInstance() { + if (sPhoneAuthProvider == null) { + sPhoneAuthProvider = Mockito.mock(PhoneAuthProvider.class); + } + return sPhoneAuthProvider; } + } diff --git a/auth/src/test/java/com/firebase/ui/auth/testhelpers/CustomRobolectricGradleTestRunner.java b/auth/src/test/java/com/firebase/ui/auth/testhelpers/CustomRobolectricGradleTestRunner.java index 74f361faa..5f60467e7 100644 --- a/auth/src/test/java/com/firebase/ui/auth/testhelpers/CustomRobolectricGradleTestRunner.java +++ b/auth/src/test/java/com/firebase/ui/auth/testhelpers/CustomRobolectricGradleTestRunner.java @@ -17,7 +17,8 @@ import com.facebook.login.LoginManager; import com.firebase.ui.auth.provider.FacebookProvider; import com.firebase.ui.auth.provider.GoogleProvider; -import com.firebase.ui.auth.ui.BaseHelper; +import com.firebase.ui.auth.ui.ActivityUtils; +import com.firebase.ui.auth.util.AuthInstances; import org.junit.runners.model.InitializationError; import org.robolectric.RobolectricTestRunner; @@ -33,7 +34,8 @@ public CustomRobolectricGradleTestRunner(Class klass) throws InitializationEr public InstrumentationConfiguration createClassLoaderConfig(Config config) { InstrumentationConfiguration.Builder builder = InstrumentationConfiguration.newBuilder(); - builder.addInstrumentedClass(BaseHelper.class.getName()); + builder.addInstrumentedClass(ActivityUtils.class.getName()); + builder.addInstrumentedClass(AuthInstances.class.getName()); builder.addInstrumentedClass(FacebookProvider.class.getName()); builder.addInstrumentedClass(GoogleProvider.class.getName()); builder.addInstrumentedClass(LoginManager.class.getName()); diff --git a/auth/src/test/java/com/firebase/ui/auth/testhelpers/FakeAuthResult.java b/auth/src/test/java/com/firebase/ui/auth/testhelpers/FakeAuthResult.java index 7179b056e..f405277ba 100644 --- a/auth/src/test/java/com/firebase/ui/auth/testhelpers/FakeAuthResult.java +++ b/auth/src/test/java/com/firebase/ui/auth/testhelpers/FakeAuthResult.java @@ -27,7 +27,7 @@ private FakeAuthResult() { @Override public FirebaseUser getUser() { - return BaseHelperShadow.sFirebaseUser; + return AuthInstancesShadow.getCurrentUser(null); } @Override 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 77bde43b2..8ec719385 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 @@ -80,7 +80,7 @@ public static void verifySmartLockSave(String providerId, String email, ArgumentCaptor passwordCaptor = ArgumentCaptor.forClass(String.class); ArgumentCaptor idpResponseCaptor = ArgumentCaptor.forClass(IdpResponse.class); - verify(BaseHelperShadow.sSaveSmartLock).saveCredentialsOrFinish( + verify(AuthInstancesShadow.sSaveSmartLock).saveCredentialsOrFinish( userCaptor.capture(), passwordCaptor.capture(), idpResponseCaptor.capture()); diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivityTest.java index 512188595..96a47e42d 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivityTest.java @@ -19,8 +19,8 @@ import com.firebase.ui.auth.BuildConfig; import com.firebase.ui.auth.R; +import com.firebase.ui.auth.testhelpers.AuthInstancesShadow; import com.firebase.ui.auth.testhelpers.AutoCompleteTask; -import com.firebase.ui.auth.testhelpers.BaseHelperShadow; import com.firebase.ui.auth.testhelpers.CustomRobolectricGradleTestRunner; import com.firebase.ui.auth.testhelpers.TestConstants; import com.firebase.ui.auth.testhelpers.TestHelper; @@ -56,13 +56,13 @@ private RecoverPasswordActivity createActivity() { } @Test - @Config(shadows = {BaseHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testNextButton_sendsEmail() { RecoverPasswordActivity recoverPasswordActivity = createActivity(); Button nextButton = (Button) recoverPasswordActivity.findViewById(R.id.button_done); - when(BaseHelperShadow.sFirebaseAuth.sendPasswordResetEmail(TestConstants.EMAIL)) + when(AuthInstancesShadow.sFirebaseAuth.sendPasswordResetEmail(TestConstants.EMAIL)) .thenReturn(new AutoCompleteTask(null, true, null)); nextButton.performClick(); - verify(BaseHelperShadow.sFirebaseAuth).sendPasswordResetEmail(TestConstants.EMAIL); + verify(AuthInstancesShadow.sFirebaseAuth).sendPasswordResetEmail(TestConstants.EMAIL); } } diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/email/RegisterEmailActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/email/RegisterEmailActivityTest.java index 60b8927b7..b002cb074 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/email/RegisterEmailActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/email/RegisterEmailActivityTest.java @@ -23,8 +23,8 @@ import com.firebase.ui.auth.AuthUI; import com.firebase.ui.auth.BuildConfig; import com.firebase.ui.auth.R; +import com.firebase.ui.auth.testhelpers.AuthInstancesShadow; import com.firebase.ui.auth.testhelpers.AutoCompleteTask; -import com.firebase.ui.auth.testhelpers.BaseHelperShadow; import com.firebase.ui.auth.testhelpers.CustomRobolectricGradleTestRunner; import com.firebase.ui.auth.testhelpers.FakeAuthResult; import com.firebase.ui.auth.testhelpers.TestConstants; @@ -99,11 +99,10 @@ public void testSignUpButton_validatesFields() { } @Test - @Config(shadows = {BaseHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testSignUpButton_successfulRegistrationShouldContinueToSaveCredentials() { // init mocks - new BaseHelperShadow(); - reset(BaseHelperShadow.sSaveSmartLock); + reset(AuthInstancesShadow.sSaveSmartLock); TestHelper.initializeApp(RuntimeEnvironment.application); RegisterEmailActivity registerEmailActivity = createActivity(); @@ -119,10 +118,10 @@ public void testSignUpButton_successfulRegistrationShouldContinueToSaveCredentia name.setText(TestConstants.NAME); password.setText(TestConstants.PASSWORD); - when(BaseHelperShadow.sFirebaseUser.updateProfile(any(UserProfileChangeRequest.class))) + when(AuthInstancesShadow.sFirebaseUser.updateProfile(any(UserProfileChangeRequest.class))) .thenReturn(new AutoCompleteTask(null, true, null)); - when(BaseHelperShadow.sFirebaseAuth + when(AuthInstancesShadow.sFirebaseAuth .createUserWithEmailAndPassword( TestConstants.EMAIL, TestConstants.PASSWORD)) diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/email/WelcomeBackPasswordPromptTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/email/WelcomeBackPasswordPromptTest.java index 512fe7ac5..3ef3be1ab 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/email/WelcomeBackPasswordPromptTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/email/WelcomeBackPasswordPromptTest.java @@ -23,7 +23,7 @@ import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.R; import com.firebase.ui.auth.testhelpers.AutoCompleteTask; -import com.firebase.ui.auth.testhelpers.BaseHelperShadow; +import com.firebase.ui.auth.testhelpers.AuthInstancesShadow; import com.firebase.ui.auth.testhelpers.CustomRobolectricGradleTestRunner; import com.firebase.ui.auth.testhelpers.FakeAuthResult; import com.firebase.ui.auth.testhelpers.TestConstants; @@ -89,17 +89,16 @@ public void testSignInButton_validatesFields() { } @Test - @Config(shadows = {BaseHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testSignInButton_signsInAndSavesCredentials() { // initialize mocks - new BaseHelperShadow(); - reset(BaseHelperShadow.sSaveSmartLock); + reset(AuthInstancesShadow.sSaveSmartLock); WelcomeBackPasswordPrompt welcomeBackActivity = createActivity(); EditText passwordField = (EditText) welcomeBackActivity.findViewById(R.id.password); passwordField.setText(TestConstants.PASSWORD); - when(BaseHelperShadow.sFirebaseAuth.signInWithEmailAndPassword( + when(AuthInstancesShadow.sFirebaseAuth.signInWithEmailAndPassword( TestConstants.EMAIL, TestConstants.PASSWORD)).thenReturn( new AutoCompleteTask<>(FakeAuthResult.INSTANCE, true, null)); @@ -107,7 +106,7 @@ public void testSignInButton_signsInAndSavesCredentials() { Button signIn = (Button) welcomeBackActivity.findViewById(R.id.button_done); signIn.performClick(); - verify(BaseHelperShadow.sFirebaseAuth).signInWithEmailAndPassword( + verify(AuthInstancesShadow.sFirebaseAuth).signInWithEmailAndPassword( TestConstants.EMAIL, TestConstants.PASSWORD); 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 9812cef8d..7ce691991 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 @@ -23,7 +23,7 @@ import com.firebase.ui.auth.BuildConfig; import com.firebase.ui.auth.R; import com.firebase.ui.auth.testhelpers.AutoCompleteTask; -import com.firebase.ui.auth.testhelpers.BaseHelperShadow; +import com.firebase.ui.auth.testhelpers.AuthInstancesShadow; import com.firebase.ui.auth.testhelpers.CustomRobolectricGradleTestRunner; import com.firebase.ui.auth.testhelpers.FacebookProviderShadow; import com.firebase.ui.auth.testhelpers.FakeAuthResult; @@ -116,15 +116,14 @@ public void testPhoneLoginFlow() { } @Test - @Config(shadows = {BaseHelperShadow.class, BaseHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class, AuthInstancesShadow.class}) public void testFacebookLoginFlow() { // initialize mocks - new BaseHelperShadow(); - reset(BaseHelperShadow.sSaveSmartLock); + reset(AuthInstancesShadow.sSaveSmartLock); - when(BaseHelperShadow.sFirebaseUser.getProviders()) + when(AuthInstancesShadow.sFirebaseUser.getProviders()) .thenReturn(Arrays.asList(FacebookAuthProvider.PROVIDER_ID)); - when(BaseHelperShadow.sFirebaseAuth.signInWithCredential((AuthCredential) any())) + when(AuthInstancesShadow.sFirebaseAuth.signInWithCredential((AuthCredential) any())) .thenReturn(new AutoCompleteTask<>(FakeAuthResult.INSTANCE, true, null)); List providers = Arrays.asList(AuthUI.FACEBOOK_PROVIDER); @@ -139,20 +138,19 @@ public void testFacebookLoginFlow() { } @Test - @Config(shadows = {GoogleProviderShadow.class, BaseHelperShadow.class, BaseHelperShadow.class}) + @Config(shadows = {GoogleProviderShadow.class, AuthInstancesShadow.class, AuthInstancesShadow.class}) public void testGoogleLoginFlow() { // initialize mocks - new BaseHelperShadow(); - reset(BaseHelperShadow.sSaveSmartLock); + reset(AuthInstancesShadow.sSaveSmartLock); List providers = Arrays.asList(AuthUI.GOOGLE_PROVIDER); AuthMethodPickerActivity authMethodPickerActivity = createActivity(providers); - when(BaseHelperShadow.sFirebaseUser.getProviders()) + when(AuthInstancesShadow.sFirebaseUser.getProviders()) .thenReturn(Arrays.asList(GoogleAuthProvider.PROVIDER_ID)); - when(BaseHelperShadow.sFirebaseAuth.signInWithCredential((AuthCredential) any())) + when(AuthInstancesShadow.sFirebaseAuth.signInWithCredential((AuthCredential) any())) .thenReturn(new AutoCompleteTask<>(FakeAuthResult.INSTANCE, true, null)); Button googleButton = (Button) authMethodPickerActivity.findViewById(R.id.google_button); @@ -164,16 +162,16 @@ public void testGoogleLoginFlow() { } @Test - @Config(shadows = {BaseHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testTwitterLoginFlowStarts() { List providers = Arrays.asList(AuthUI.TWITTER_PROVIDER); AuthMethodPickerActivity authMethodPickerActivity = createActivity(providers); - when(BaseHelperShadow.sFirebaseUser.getProviders()) + when(AuthInstancesShadow.sFirebaseUser.getProviders()) .thenReturn(Arrays.asList(TwitterAuthProvider.PROVIDER_ID)); - when(BaseHelperShadow.sFirebaseAuth.signInWithCredential(any(AuthCredential.class))) + when(AuthInstancesShadow.sFirebaseAuth.signInWithCredential(any(AuthCredential.class))) .thenReturn(new AutoCompleteTask<>(FakeAuthResult.INSTANCE, true, null)); Button twitterButton = (Button) authMethodPickerActivity.findViewById(R.id.twitter_button); 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 fe7a582e3..f0c819ff2 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 @@ -19,15 +19,15 @@ import com.firebase.ui.auth.BuildConfig; import com.firebase.ui.auth.IdpResponse; +import com.firebase.ui.auth.testhelpers.AuthInstancesShadow; import com.firebase.ui.auth.testhelpers.AutoCompleteTask; -import com.firebase.ui.auth.testhelpers.BaseHelperShadow; import com.firebase.ui.auth.testhelpers.CustomRobolectricGradleTestRunner; import com.firebase.ui.auth.testhelpers.FakeAuthResult; import com.firebase.ui.auth.testhelpers.FakeProviderQueryResult; import com.firebase.ui.auth.testhelpers.TestConstants; import com.firebase.ui.auth.testhelpers.TestHelper; import com.firebase.ui.auth.ui.AppCompatBase; -import com.firebase.ui.auth.ui.BaseHelper; +import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.User; import com.firebase.ui.auth.ui.accountlink.WelcomeBackIdpPrompt; @@ -52,7 +52,6 @@ import org.robolectric.annotation.Config; import java.util.Arrays; -import java.util.Collections; import static junit.framework.Assert.assertEquals; import static org.mockito.Mockito.mock; @@ -73,10 +72,10 @@ public void setUp() { } @Test - @Config(shadows = {BaseHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testSignInSucceeded() { AppCompatBase mockActivity = mock(AppCompatBase.class); - BaseHelper mockActivityHelper = mock(BaseHelper.class); + ActivityUtils mockActivityHelper = mock(ActivityUtils.class); IdpResponse idpResponse = new IdpResponse.Builder(GoogleAuthProvider.PROVIDER_ID, TestConstants.EMAIL) .setToken(TestConstants.TOKEN) @@ -89,8 +88,9 @@ public void testSignInSucceeded() { RC_ACCOUNT_LINK, idpResponse); - when(mockActivityHelper.getFlowParams()).thenReturn( - TestHelper.getFlowParameters(Collections.emptyList())); + // TODO: Mock +// when(mockActivityHelper.getFlowParams()).thenReturn( +// TestHelper.getFlowParameters(Collections.emptyList())); credentialSignInHandler.onComplete(Tasks.forResult(FakeAuthResult.INSTANCE)); ArgumentCaptor smartLockCaptor = ArgumentCaptor.forClass(SaveSmartLock.class); @@ -99,16 +99,17 @@ public void testSignInSucceeded() { ArgumentCaptor idpResponseCaptor = ArgumentCaptor.forClass(IdpResponse.class); ArgumentCaptor passwordCaptor = ArgumentCaptor.forClass(String.class); - verify(mockActivityHelper).saveCredentialsOrFinish( - smartLockCaptor.capture(), - activityCaptor.capture(), - firebaseUserCaptor.capture(), - passwordCaptor.capture(), // Needed to make Mockito happy - idpResponseCaptor.capture()); + // TODO: Verify static method +// verify(mockActivityHelper).saveCredentialsOrFinish( +// smartLockCaptor.capture(), +// activityCaptor.capture(), +// firebaseUserCaptor.capture(), +// passwordCaptor.capture(), // Needed to make Mockito happy +// idpResponseCaptor.capture()); assertEquals(smartLock, smartLockCaptor.getValue()); assertEquals(mockActivity, activityCaptor.getValue()); - assertEquals(BaseHelperShadow.sFirebaseUser, firebaseUserCaptor.getValue()); + assertEquals(AuthInstancesShadow.sFirebaseUser, firebaseUserCaptor.getValue()); IdpResponse response = idpResponseCaptor.getValue(); assertEquals(idpResponse.getProviderType(), response.getProviderType()); @@ -120,7 +121,7 @@ public void testSignInSucceeded() { @Test public void testSignInFailed_withFacebookAlreadyLinked() { AppCompatBase mockActivity = mock(AppCompatBase.class); - BaseHelper mockActivityHelper = mock(BaseHelper.class); + ActivityUtils mockActivityHelper = mock(ActivityUtils.class); FirebaseAuth mockFirebaseAuth = mock(FirebaseAuth.class); IdpResponse idpResponse = new IdpResponse.Builder(GoogleAuthProvider.PROVIDER_ID, TestConstants.EMAIL) @@ -133,9 +134,8 @@ public void testSignInFailed_withFacebookAlreadyLinked() { RC_ACCOUNT_LINK, idpResponse); + // TODO: Mock this into classes that have getFlowParams FlowParameters mockFlowParams = mock(FlowParameters.class); - when(mockActivityHelper.getFirebaseAuth()).thenReturn(mockFirebaseAuth); - when(mockActivityHelper.getFlowParams()).thenReturn(mockFlowParams); // pretend the account has Facebook linked already when(mockFirebaseAuth.fetchProvidersForEmail(TestConstants.EMAIL)).thenReturn( @@ -168,7 +168,7 @@ public void testSignInFailed_withFacebookAlreadyLinked() { @Test public void testSignInFailed_withPasswordAccountAlreadyLinked() { AppCompatBase mockActivity = mock(AppCompatBase.class); - BaseHelper mockActivityHelper = mock(BaseHelper.class); + ActivityUtils mockActivityHelper = mock(ActivityUtils.class); FirebaseAuth mockFirebaseAuth = mock(FirebaseAuth.class); IdpResponse idpResponse = new IdpResponse.Builder(GoogleAuthProvider.PROVIDER_ID, TestConstants.EMAIL) @@ -181,14 +181,14 @@ public void testSignInFailed_withPasswordAccountAlreadyLinked() { RC_ACCOUNT_LINK, idpResponse); - Task mockTask = mock(Task.class); + // TODO: Mock this into the proper classes FlowParameters mockFlowParams = mock(FlowParameters.class); +// when(mockActivityHelper.getFlowParams()).thenReturn(mockFlowParams); // pretend there was already an account with this email + Task mockTask = mock(Task.class); when(mockTask.getException()).thenReturn( new FirebaseAuthUserCollisionException(LINKING_ERROR, LINKING_EXPLANATION)); - when(mockActivityHelper.getFirebaseAuth()).thenReturn(mockFirebaseAuth); - when(mockActivityHelper.getFlowParams()).thenReturn(mockFlowParams); // pretend the account has a Password account linked already when(mockFirebaseAuth.fetchProvidersForEmail(TestConstants.EMAIL)).thenReturn( diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivityTest.java index 1979c1d7e..a6d481dfd 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivityTest.java @@ -26,7 +26,7 @@ import com.firebase.ui.auth.BuildConfig; import com.firebase.ui.auth.R; import com.firebase.ui.auth.testhelpers.AutoCompleteTask; -import com.firebase.ui.auth.testhelpers.BaseHelperShadow; +import com.firebase.ui.auth.testhelpers.AuthInstancesShadow; import com.firebase.ui.auth.testhelpers.CustomRobolectricGradleTestRunner; import com.firebase.ui.auth.testhelpers.FakeAuthResult; import com.firebase.ui.auth.testhelpers.TestHelper; @@ -81,6 +81,7 @@ public class PhoneVerificationActivityTest { private Button mSendCodeButton; private EditText mPhoneEditText; private CountryListSpinner mCountryListSpinner; + @Captor ArgumentCaptor callbacksArgumentCaptor; @Mock @@ -147,9 +148,9 @@ public void testBadPhoneNumber_showsInlineError() { } @Test - @Config(shadows = {BaseHelperShadow.class, BaseHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testVerifyPhoneNumberInvalidPhoneException_showsInlineError() { - reset(BaseHelperShadow.sPhoneAuthProvider); + reset(AuthInstancesShadow.sPhoneAuthProvider); mActivity.verifyPhoneNumber(PHONE, false); AlertDialog alert = ShadowAlertDialog.getLatestAlertDialog(); @@ -158,7 +159,7 @@ public void testVerifyPhoneNumberInvalidPhoneException_showsInlineError() { assertEquals(mActivity.getString(R.string.verifying), sAlert.getMessage()); //was upstream method invoked - verify(BaseHelperShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq + verify(AuthInstancesShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq (AUTO_RETRIEVAL_TIMEOUT_MILLIS), eq(TimeUnit.MILLISECONDS), eq(mActivity), callbacksArgumentCaptor.capture(), isNull(PhoneAuthProvider.ForceResendingToken .class)); @@ -173,12 +174,12 @@ public void testVerifyPhoneNumberInvalidPhoneException_showsInlineError() { } @Test - @Config(shadows = {BaseHelperShadow.class, BaseHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testVerifyPhoneNumberNoMsgException_showsAlertDialog() { - reset(BaseHelperShadow.sPhoneAuthProvider); + reset(AuthInstancesShadow.sPhoneAuthProvider); mActivity.verifyPhoneNumber(PHONE, false); - verify(BaseHelperShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq + verify(AuthInstancesShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq (AUTO_RETRIEVAL_TIMEOUT_MILLIS), eq(TimeUnit.MILLISECONDS), eq(mActivity), callbacksArgumentCaptor.capture(), isNull(PhoneAuthProvider.ForceResendingToken .class)); @@ -193,17 +194,17 @@ public void testVerifyPhoneNumberNoMsgException_showsAlertDialog() { } @Test - @Config(shadows = {BaseHelperShadow.class, BaseHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testVerifyPhoneNumber_success() { - reset(BaseHelperShadow.sPhoneAuthProvider); + reset(AuthInstancesShadow.sPhoneAuthProvider); testSendConfirmationCode(); } @Test - @Config(shadows = {BaseHelperShadow.class, BaseHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testSubmitCode_badCodeShowsAlertDialog() { - reset(BaseHelperShadow.sPhoneAuthProvider); - when(BaseHelperShadow.sFirebaseAuth.signInWithCredential(any(AuthCredential.class))) + reset(AuthInstancesShadow.sPhoneAuthProvider); + when(AuthInstancesShadow.sFirebaseAuth.signInWithCredential(any(AuthCredential.class))) .thenReturn(new AutoCompleteTask(null, true, new FirebaseAuthInvalidCredentialsException(ERROR_INVALID_VERIFICATION, "any_msg"))); @@ -226,9 +227,9 @@ public void testSubmitCode_badCodeShowsAlertDialog() { } @Test - @Config(shadows = {BaseHelperShadow.class, BaseHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testresendCode_invokesUpstream() { - reset(BaseHelperShadow.sPhoneAuthProvider); + reset(AuthInstancesShadow.sPhoneAuthProvider); testSendConfirmationCode(); //test resend code invisible @@ -246,25 +247,25 @@ public void testresendCode_invokesUpstream() { assertEquals(View.GONE, r.getVisibility()); //verify resend code was called - verify(BaseHelperShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq + verify(AuthInstancesShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq (AUTO_RETRIEVAL_TIMEOUT_MILLIS), eq(TimeUnit.MILLISECONDS), eq(mActivity), callbacksArgumentCaptor.capture(), eq(forceResendingToken)); } @Test - @Config(shadows = {BaseHelperShadow.class, BaseHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testAutoVerify() { - reset(BaseHelperShadow.sPhoneAuthProvider); - reset(BaseHelperShadow.sSaveSmartLock); - reset(BaseHelperShadow.sFirebaseAuth); + reset(AuthInstancesShadow.sPhoneAuthProvider); + reset(AuthInstancesShadow.sSaveSmartLock); + reset(AuthInstancesShadow.sFirebaseAuth); - when(BaseHelperShadow.sFirebaseUser.getPhoneNumber()).thenReturn(PHONE); - when(BaseHelperShadow.sFirebaseUser.getEmail()).thenReturn(null); - when(BaseHelperShadow.sFirebaseAuth.signInWithCredential(any(AuthCredential.class))) + when(AuthInstancesShadow.sFirebaseUser.getPhoneNumber()).thenReturn(PHONE); + when(AuthInstancesShadow.sFirebaseUser.getEmail()).thenReturn(null); + when(AuthInstancesShadow.sFirebaseAuth.signInWithCredential(any(AuthCredential.class))) .thenReturn(new AutoCompleteTask(FakeAuthResult.INSTANCE , true, null)); mActivity.verifyPhoneNumber(PHONE, false); - verify(BaseHelperShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq + verify(AuthInstancesShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq (AUTO_RETRIEVAL_TIMEOUT_MILLIS), eq(TimeUnit.MILLISECONDS), eq(mActivity), callbacksArgumentCaptor.capture(), isNull(PhoneAuthProvider.ForceResendingToken .class)); @@ -273,20 +274,20 @@ public void testAutoVerify() { = callbacksArgumentCaptor.getValue(); onVerificationStateChangedCallbacks.onVerificationCompleted(credential); - verify(BaseHelperShadow.sFirebaseAuth).signInWithCredential(any(AuthCredential.class)); + verify(AuthInstancesShadow.sFirebaseAuth).signInWithCredential(any(AuthCredential.class)); } @Test - @Config(shadows = {BaseHelperShadow.class, BaseHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testSMSAutoRetrieval() { - reset(BaseHelperShadow.sPhoneAuthProvider); - reset(BaseHelperShadow.sSaveSmartLock); + reset(AuthInstancesShadow.sPhoneAuthProvider); + reset(AuthInstancesShadow.sSaveSmartLock); when(credential.getSmsCode()).thenReturn("123456"); - when(BaseHelperShadow.sFirebaseUser.getPhoneNumber()).thenReturn(PHONE); - when(BaseHelperShadow.sFirebaseUser.getEmail()).thenReturn(null); + when(AuthInstancesShadow.sFirebaseUser.getPhoneNumber()).thenReturn(PHONE); + when(AuthInstancesShadow.sFirebaseUser.getEmail()).thenReturn(null); - when(BaseHelperShadow.sFirebaseAuth.signInWithCredential(any(AuthCredential.class))) + when(AuthInstancesShadow.sFirebaseAuth.signInWithCredential(any(AuthCredential.class))) .thenReturn(new AutoCompleteTask(FakeAuthResult.INSTANCE, true, null)); PhoneAuthProvider.OnVerificationStateChangedCallbacks callbacks = testSendConfirmationCode(); @@ -297,13 +298,13 @@ public void testSMSAutoRetrieval() { //verify confirmation code set assertEquals("1 2 3 4 5 6", mConfirmationCodeEditText.getText().toString()); //verify credential saves - verify(BaseHelperShadow.sFirebaseAuth).signInWithCredential(credential); + verify(AuthInstancesShadow.sFirebaseAuth).signInWithCredential(credential); } @Test - @Config(shadows = {BaseHelperShadow.class, BaseHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testEditPhoneNumber_togglesFragments() { - reset(BaseHelperShadow.sPhoneAuthProvider); + reset(AuthInstancesShadow.sPhoneAuthProvider); testSendConfirmationCode(); TextView mEditPhoneTextView = (TextView) mActivity.findViewById(R.id.edit_phone_number); mEditPhoneTextView.performClick(); @@ -322,7 +323,7 @@ public void testEditPhoneNumber_togglesFragments() { private PhoneAuthProvider.OnVerificationStateChangedCallbacks testSendConfirmationCode() { mActivity.verifyPhoneNumber(PHONE, false); - verify(BaseHelperShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq + verify(AuthInstancesShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq (AUTO_RETRIEVAL_TIMEOUT_MILLIS), eq(TimeUnit.MILLISECONDS), eq(mActivity), callbacksArgumentCaptor.capture(), isNull(PhoneAuthProvider.ForceResendingToken .class)); From e553caffdc730e1dbc0cb0d3fc536fee6f422fee Mon Sep 17 00:00:00 2001 From: Sam Stern Date: Tue, 27 Jun 2017 08:36:11 -0700 Subject: [PATCH 5/8] Make tests pass Change-Id: I9d7a4545a171274d5d704d9ac9f704cbaf364238 --- .../com/firebase/ui/auth/KickoffActivity.java | 3 +- .../firebase/ui/auth/ui/ActivityUtils.java | 36 --------------- .../com/firebase/ui/auth/ui/DialogBase.java | 2 +- .../ui/auth/ui/HelperActivityBase.java | 28 +++++++++-- .../ui/accountlink/WelcomeBackIdpPrompt.java | 4 +- .../WelcomeBackPasswordPrompt.java | 4 +- .../ui/email/RecoverPasswordActivity.java | 7 +-- .../ui/email/RecoveryEmailSentDialog.java | 4 +- .../auth/ui/email/RegisterEmailActivity.java | 4 +- .../auth/ui/email/RegisterEmailFragment.java | 16 ++++--- .../auth/ui/idp/AuthMethodPickerActivity.java | 5 +- .../auth/ui/idp/CredentialSignInHandler.java | 10 +--- .../ui/phone/PhoneVerificationActivity.java | 4 +- .../signincontainer/IdpSignInContainer.java | 1 - .../auth/testhelpers/AuthInstancesShadow.java | 45 +++++++++--------- .../CustomRobolectricGradleTestRunner.java | 2 - .../ui/email/RecoverPasswordActivityTest.java | 1 + .../ui/idp/CredentialSignInHandlerTest.java | 46 ++++++++----------- 18 files changed, 97 insertions(+), 125 deletions(-) diff --git a/auth/src/main/java/com/firebase/ui/auth/KickoffActivity.java b/auth/src/main/java/com/firebase/ui/auth/KickoffActivity.java index 3d0c52493..1739d31a0 100644 --- a/auth/src/main/java/com/firebase/ui/auth/KickoffActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/KickoffActivity.java @@ -8,7 +8,6 @@ import android.support.annotation.RestrictTo; import android.util.Log; -import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.HelperActivityBase; @@ -24,7 +23,7 @@ public class KickoffActivity extends HelperActivityBase { private boolean mIsWaitingForPlayServices = false; public static Intent createIntent(Context context, FlowParameters flowParams) { - return ActivityUtils.createBaseIntent(context, KickoffActivity.class, flowParams); + return HelperActivityBase.createBaseIntent(context, KickoffActivity.class, flowParams); } @Override diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/ActivityUtils.java b/auth/src/main/java/com/firebase/ui/auth/ui/ActivityUtils.java index b400d61eb..0563f527a 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/ActivityUtils.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/ActivityUtils.java @@ -1,51 +1,15 @@ package com.firebase.ui.auth.ui; import android.app.Activity; -import android.content.Context; import android.content.Intent; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; import android.support.annotation.RestrictTo; -import com.firebase.ui.auth.IdpResponse; -import com.firebase.ui.auth.ResultCodes; -import com.firebase.ui.auth.util.signincontainer.SaveSmartLock; -import com.google.firebase.auth.FirebaseUser; - -import static com.firebase.ui.auth.util.Preconditions.checkNotNull; - @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public class ActivityUtils { - public static Intent createBaseIntent( - @NonNull Context context, - @NonNull Class target, - @NonNull FlowParameters flowParams) { - return new Intent( - checkNotNull(context, "context cannot be null"), - checkNotNull(target, "target activity cannot be null")) - .putExtra(ExtraConstants.EXTRA_FLOW_PARAMS, - checkNotNull(flowParams, "flowParams cannot be null")); - } - public static void finishActivity(Activity activity, int resultCode, Intent intent) { activity.setResult(resultCode, intent); activity.finish(); } - public static void saveCredentialsOrFinish( - @Nullable SaveSmartLock saveSmartLock, - Activity activity, - FirebaseUser firebaseUser, - @Nullable String password, - IdpResponse response) { - if (saveSmartLock == null) { - finishActivity(activity, ResultCodes.OK, response.toIntent()); - } else { - saveSmartLock.saveCredentialsOrFinish( - firebaseUser, - password, - response); - } - } } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java index cf01b0bda..296473c94 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java @@ -18,7 +18,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); ContextThemeWrapper context = new ContextThemeWrapper( - getContext(), mFlowParameters.themeId); + getContext(), getFlowParams().themeId); mProgressDialogHolder = new ProgressDialogHolder(context); } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java index 94fbdb4a2..c2255f472 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java @@ -1,5 +1,7 @@ package com.firebase.ui.auth.ui; +import android.app.Activity; +import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; @@ -8,9 +10,12 @@ import android.support.v7.app.AppCompatActivity; import com.firebase.ui.auth.IdpResponse; +import com.firebase.ui.auth.ResultCodes; import com.firebase.ui.auth.util.signincontainer.SaveSmartLock; import com.google.firebase.auth.FirebaseUser; +import static com.firebase.ui.auth.util.Preconditions.checkNotNull; + @SuppressWarnings("Registered") @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public class HelperActivityBase extends AppCompatActivity { @@ -18,6 +23,17 @@ public class HelperActivityBase extends AppCompatActivity { protected FlowParameters mFlowParameters; protected ProgressDialogHolder mProgressDialogHolder; + public static Intent createBaseIntent( + @NonNull Context context, + @NonNull Class target, + @NonNull FlowParameters flowParams) { + return new Intent( + checkNotNull(context, "context cannot be null"), + checkNotNull(target, "target activity cannot be null")) + .putExtra(ExtraConstants.EXTRA_FLOW_PARAMS, + checkNotNull(flowParams, "flowParams cannot be null")); + } + @Override protected void onCreate(Bundle savedInstance) { super.onCreate(savedInstance); @@ -46,19 +62,25 @@ public ProgressDialogHolder getDialogHolder() { return mProgressDialogHolder; } + public void saveCredentialsOrFinish( @Nullable SaveSmartLock saveSmartLock, FirebaseUser firebaseUser, - @NonNull String password, IdpResponse response) { - ActivityUtils.saveCredentialsOrFinish(saveSmartLock, this, firebaseUser, password, response); + saveCredentialsOrFinish(saveSmartLock, firebaseUser, null, response); } public void saveCredentialsOrFinish( @Nullable SaveSmartLock saveSmartLock, FirebaseUser firebaseUser, + @Nullable String password, IdpResponse response) { - ActivityUtils.saveCredentialsOrFinish(saveSmartLock, this, firebaseUser, null, response); + + if (saveSmartLock == null) { + ActivityUtils.finishActivity(this, ResultCodes.OK, response.toIntent()); + } else { + saveSmartLock.saveCredentialsOrFinish(firebaseUser, password, response); + } } } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackIdpPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackIdpPrompt.java index 4dceec852..8ce361dcc 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackIdpPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackIdpPrompt.java @@ -37,9 +37,9 @@ import com.firebase.ui.auth.provider.IdpProvider.IdpCallback; import com.firebase.ui.auth.provider.TwitterProvider; import com.firebase.ui.auth.ui.AppCompatBase; -import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; +import com.firebase.ui.auth.ui.HelperActivityBase; import com.firebase.ui.auth.ui.TaskFailureLogger; import com.firebase.ui.auth.ui.User; import com.firebase.ui.auth.util.AuthInstances; @@ -66,7 +66,7 @@ public static Intent createIntent( FlowParameters flowParams, User existingUser, IdpResponse newUserResponse) { - return ActivityUtils.createBaseIntent(context, WelcomeBackIdpPrompt.class, flowParams) + return HelperActivityBase.createBaseIntent(context, WelcomeBackIdpPrompt.class, flowParams) .putExtra(ExtraConstants.EXTRA_USER, existingUser) .putExtra(ExtraConstants.EXTRA_IDP_RESPONSE, newUserResponse); } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackPasswordPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackPasswordPrompt.java index 411563782..188fbaa43 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackPasswordPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackPasswordPrompt.java @@ -37,9 +37,9 @@ import com.firebase.ui.auth.ResultCodes; import com.firebase.ui.auth.provider.ProviderUtils; import com.firebase.ui.auth.ui.AppCompatBase; -import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; +import com.firebase.ui.auth.ui.HelperActivityBase; import com.firebase.ui.auth.ui.ImeHelper; import com.firebase.ui.auth.ui.TaskFailureLogger; import com.firebase.ui.auth.ui.email.RecoverPasswordActivity; @@ -72,7 +72,7 @@ public static Intent createIntent( Context context, FlowParameters flowParams, IdpResponse response) { - return ActivityUtils.createBaseIntent(context, WelcomeBackPasswordPrompt.class, flowParams) + return HelperActivityBase.createBaseIntent(context, WelcomeBackPasswordPrompt.class, flowParams) .putExtra(ExtraConstants.EXTRA_IDP_RESPONSE, response); } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java index 111b4bbed..982550c46 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java @@ -25,9 +25,9 @@ import com.firebase.ui.auth.R; import com.firebase.ui.auth.ui.AppCompatBase; -import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; +import com.firebase.ui.auth.ui.HelperActivityBase; import com.firebase.ui.auth.ui.TaskFailureLogger; import com.firebase.ui.auth.ui.email.fieldvalidators.EmailFieldValidator; import com.firebase.ui.auth.util.AuthInstances; @@ -46,7 +46,7 @@ public class RecoverPasswordActivity extends AppCompatBase implements View.OnCli private EmailFieldValidator mEmailFieldValidator; public static Intent createIntent(Context context, FlowParameters flowParams, String email) { - return ActivityUtils.createBaseIntent(context, RecoverPasswordActivity.class, flowParams) + return HelperActivityBase.createBaseIntent(context, RecoverPasswordActivity.class, flowParams) .putExtra(ExtraConstants.EXTRA_EMAIL, email); } @@ -76,7 +76,8 @@ private void next(final String email) { @Override public void onSuccess(Void aVoid) { mProgressDialogHolder.dismissDialog(); - RecoveryEmailSentDialog.show(email, getSupportFragmentManager()); + RecoveryEmailSentDialog.show( + email, getFlowParams(), getSupportFragmentManager()); } }) .addOnFailureListener(this, new OnFailureListener() { diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoveryEmailSentDialog.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoveryEmailSentDialog.java index b56a8f92c..1051aa8d2 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoveryEmailSentDialog.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoveryEmailSentDialog.java @@ -13,14 +13,16 @@ import com.firebase.ui.auth.ResultCodes; import com.firebase.ui.auth.ui.DialogBase; import com.firebase.ui.auth.ui.ExtraConstants; +import com.firebase.ui.auth.ui.FlowParameters; @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public class RecoveryEmailSentDialog extends DialogBase { private static final String TAG = "RecoveryEmailSentDialog"; - public static void show(String email, FragmentManager manager) { + public static void show(String email, FlowParameters parameters, FragmentManager manager) { RecoveryEmailSentDialog result = new RecoveryEmailSentDialog(); Bundle bundle = new Bundle(); + bundle.putParcelable(ExtraConstants.EXTRA_FLOW_PARAMS, parameters); bundle.putString(ExtraConstants.EXTRA_EMAIL, email); result.setArguments(bundle); result.show(manager, TAG); diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailActivity.java index 0ee79abf6..e2eacbf6c 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailActivity.java @@ -24,9 +24,9 @@ import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.R; import com.firebase.ui.auth.ui.AppCompatBase; -import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; +import com.firebase.ui.auth.ui.HelperActivityBase; import com.firebase.ui.auth.ui.User; import com.firebase.ui.auth.ui.accountlink.WelcomeBackIdpPrompt; import com.firebase.ui.auth.ui.accountlink.WelcomeBackPasswordPrompt; @@ -49,7 +49,7 @@ public static Intent createIntent(Context context, FlowParameters flowParams) { } public static Intent createIntent(Context context, FlowParameters flowParams, String email) { - return ActivityUtils.createBaseIntent(context, RegisterEmailActivity.class, flowParams) + return HelperActivityBase.createBaseIntent(context, RegisterEmailActivity.class, flowParams) .putExtra(ExtraConstants.EXTRA_EMAIL, email); } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java index 8d69c7186..d27784515 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java @@ -15,10 +15,10 @@ import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.R; import com.firebase.ui.auth.provider.ProviderUtils; -import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.FragmentBase; +import com.firebase.ui.auth.ui.HelperActivityBase; import com.firebase.ui.auth.ui.ImeHelper; import com.firebase.ui.auth.ui.TaskFailureLogger; import com.firebase.ui.auth.ui.TermsTextView; @@ -52,6 +52,8 @@ public class RegisterEmailFragment extends FragmentBase implements public static final String TAG = "RegisterEmailFragment"; + private HelperActivityBase mActivity; + private EditText mEmailEditText; private EditText mNameEditText; private EditText mPasswordEditText; @@ -159,6 +161,11 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getActivity().setTitle(R.string.title_register_email); + if (!(getActivity() instanceof HelperActivityBase)) { + throw new RuntimeException("Must be attached to a HelperActivityBase."); + } + + mActivity = (HelperActivityBase) getActivity(); mSaveSmartLock = AuthInstances.getSaveSmartLockInstance(getActivity(), getFlowParams()); mAgreementText.showTerms(getFlowParams(), R.string.button_text_save); } @@ -237,11 +244,8 @@ public void onComplete(@NonNull Task task) { // This executes even if the name change fails, since // the account creation succeeded and we want to save // the credential to SmartLock (if enabled). - ActivityUtils.saveCredentialsOrFinish( - mSaveSmartLock, - getActivity(), - user, - password, + mActivity.saveCredentialsOrFinish( + mSaveSmartLock, user, password, new IdpResponse.Builder(EmailAuthProvider.PROVIDER_ID, email).build()); } 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 537da89f4..d012fac05 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 @@ -38,8 +38,8 @@ import com.firebase.ui.auth.provider.Provider; import com.firebase.ui.auth.provider.TwitterProvider; import com.firebase.ui.auth.ui.AppCompatBase; -import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.FlowParameters; +import com.firebase.ui.auth.ui.HelperActivityBase; import com.firebase.ui.auth.ui.TaskFailureLogger; import com.firebase.ui.auth.ui.email.RegisterEmailActivity; import com.firebase.ui.auth.util.AuthInstances; @@ -67,7 +67,7 @@ public class AuthMethodPickerActivity extends AppCompatBase implements IdpCallba private SaveSmartLock mSaveSmartLock; public static Intent createIntent(Context context, FlowParameters flowParams) { - return ActivityUtils.createBaseIntent(context, AuthMethodPickerActivity.class, flowParams); + return HelperActivityBase.createBaseIntent(context, AuthMethodPickerActivity.class, flowParams); } @Override @@ -157,7 +157,6 @@ public void onSuccess(final IdpResponse response) { "Visit https://console.firebase.google.com to enable it.")) .addOnCompleteListener(new CredentialSignInHandler( this, - mActivityHelper, mSaveSmartLock, RC_ACCOUNT_LINK, response)); 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 5c88fb8f1..6c3166690 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 @@ -45,7 +45,6 @@ public class CredentialSignInHandler implements OnCompleteListener { private static final String TAG = "CredentialSignInHandler"; private HelperActivityBase mActivity; - private ActivityUtils mHelper; @Nullable private SaveSmartLock mSmartLock; private IdpResponse mResponse; @@ -53,12 +52,10 @@ public class CredentialSignInHandler implements OnCompleteListener { public CredentialSignInHandler( HelperActivityBase activity, - ActivityUtils helper, @Nullable SaveSmartLock smartLock, int accountLinkRequestCode, IdpResponse response) { mActivity = activity; - mHelper = helper; mSmartLock = smartLock; mResponse = response; mAccountLinkRequestCode = accountLinkRequestCode; @@ -68,12 +65,7 @@ public CredentialSignInHandler( public void onComplete(@NonNull Task task) { if (task.isSuccessful()) { FirebaseUser firebaseUser = task.getResult().getUser(); - ActivityUtils.saveCredentialsOrFinish( - mSmartLock, - mActivity, - firebaseUser, - null, - mResponse); + mActivity.saveCredentialsOrFinish(mSmartLock, firebaseUser, mResponse); } else { if (task.getException() instanceof FirebaseAuthUserCollisionException) { String email = mResponse.getEmail(); diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivity.java index 6435ec3b8..f4eb14451 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivity.java @@ -31,9 +31,9 @@ import com.firebase.ui.auth.R; import com.firebase.ui.auth.ResultCodes; import com.firebase.ui.auth.ui.AppCompatBase; -import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.ExtraConstants; import com.firebase.ui.auth.ui.FlowParameters; +import com.firebase.ui.auth.ui.HelperActivityBase; import com.firebase.ui.auth.util.AuthInstances; import com.firebase.ui.auth.util.signincontainer.SaveSmartLock; import com.google.android.gms.tasks.OnFailureListener; @@ -80,7 +80,7 @@ enum VerificationState { private VerificationState mVerificationState; public static Intent createIntent(Context context, FlowParameters flowParams, String phone) { - return ActivityUtils.createBaseIntent(context, PhoneVerificationActivity.class, flowParams) + return HelperActivityBase.createBaseIntent(context, PhoneVerificationActivity.class, flowParams) .putExtra(ExtraConstants.EXTRA_PHONE, phone); } diff --git a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/IdpSignInContainer.java b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/IdpSignInContainer.java index 9b2e474fc..023ce057e 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/IdpSignInContainer.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/IdpSignInContainer.java @@ -150,7 +150,6 @@ public void onSuccess(final IdpResponse response) { credential.getProvider())) .addOnCompleteListener(new CredentialSignInHandler( mActivity, - mHelper, mSaveSmartLock, RC_WELCOME_BACK_IDP, response)); diff --git a/auth/src/test/java/com/firebase/ui/auth/testhelpers/AuthInstancesShadow.java b/auth/src/test/java/com/firebase/ui/auth/testhelpers/AuthInstancesShadow.java index fdcb0662a..23297b97c 100644 --- a/auth/src/test/java/com/firebase/ui/auth/testhelpers/AuthInstancesShadow.java +++ b/auth/src/test/java/com/firebase/ui/auth/testhelpers/AuthInstancesShadow.java @@ -25,55 +25,52 @@ public class AuthInstancesShadow { public static SaveSmartLock sSaveSmartLock; public static PhoneAuthProvider sPhoneAuthProvider; + static { + // FirebaseAuth + sFirebaseAuth = Mockito.mock(FirebaseAuth.class); + when(sFirebaseAuth.getCurrentUser()).thenReturn(sFirebaseUser); + + // CredentialsApi + sCredentialsApi = Mockito.mock(CredentialsApi.class); + + // FirebaseUser + sFirebaseUser = Mockito.mock(FirebaseUser.class); + when(sFirebaseUser.getEmail()).thenReturn(TestConstants.EMAIL); + when(sFirebaseUser.getDisplayName()).thenReturn(TestConstants.NAME); + when(sFirebaseUser.getPhotoUrl()).thenReturn(TestConstants.PHOTO_URI); + + // SaveSmartLock + sSaveSmartLock = Mockito.mock(SaveSmartLock.class); + + // PhoneAuthProvider + sPhoneAuthProvider = Mockito.mock(PhoneAuthProvider.class); + } + private AuthInstancesShadow() {} @Implementation public static FirebaseAuth getFirebaseAuth(FlowParameters parameters) { - if (sFirebaseAuth == null) { - sFirebaseAuth = Mockito.mock(FirebaseAuth.class); - when(sFirebaseAuth.getCurrentUser()).thenReturn(sFirebaseUser); - } - return sFirebaseAuth; } @Implementation public static CredentialsApi getCredentialsApi() { - if (sCredentialsApi == null) { - sCredentialsApi = Mockito.mock(CredentialsApi.class); - } - return sCredentialsApi; } @Implementation public static FirebaseUser getCurrentUser(FlowParameters parameters) { - if (sFirebaseUser == null) { - sFirebaseUser = Mockito.mock(FirebaseUser.class); - when(sFirebaseUser.getEmail()).thenReturn(TestConstants.EMAIL); - when(sFirebaseUser.getDisplayName()).thenReturn(TestConstants.NAME); - when(sFirebaseUser.getPhotoUrl()).thenReturn(TestConstants.PHOTO_URI); - } - return sFirebaseUser; } @Implementation public static SaveSmartLock getSaveSmartLockInstance(FragmentActivity activity, FlowParameters parameters) { - if (sSaveSmartLock == null) { - sSaveSmartLock = Mockito.mock(SaveSmartLock.class); - } - return sSaveSmartLock; } @Implementation public static PhoneAuthProvider getPhoneAuthProviderInstance() { - if (sPhoneAuthProvider == null) { - sPhoneAuthProvider = Mockito.mock(PhoneAuthProvider.class); - } - return sPhoneAuthProvider; } diff --git a/auth/src/test/java/com/firebase/ui/auth/testhelpers/CustomRobolectricGradleTestRunner.java b/auth/src/test/java/com/firebase/ui/auth/testhelpers/CustomRobolectricGradleTestRunner.java index 5f60467e7..fa30fdc07 100644 --- a/auth/src/test/java/com/firebase/ui/auth/testhelpers/CustomRobolectricGradleTestRunner.java +++ b/auth/src/test/java/com/firebase/ui/auth/testhelpers/CustomRobolectricGradleTestRunner.java @@ -17,7 +17,6 @@ import com.facebook.login.LoginManager; import com.firebase.ui.auth.provider.FacebookProvider; import com.firebase.ui.auth.provider.GoogleProvider; -import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.util.AuthInstances; import org.junit.runners.model.InitializationError; @@ -34,7 +33,6 @@ public CustomRobolectricGradleTestRunner(Class klass) throws InitializationEr public InstrumentationConfiguration createClassLoaderConfig(Config config) { InstrumentationConfiguration.Builder builder = InstrumentationConfiguration.newBuilder(); - builder.addInstrumentedClass(ActivityUtils.class.getName()); builder.addInstrumentedClass(AuthInstances.class.getName()); builder.addInstrumentedClass(FacebookProvider.class.getName()); builder.addInstrumentedClass(GoogleProvider.class.getName()); diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivityTest.java index 96a47e42d..df6a87795 100644 --- a/auth/src/test/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivityTest.java +++ b/auth/src/test/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivityTest.java @@ -59,6 +59,7 @@ private RecoverPasswordActivity createActivity() { @Config(shadows = {AuthInstancesShadow.class}) public void testNextButton_sendsEmail() { RecoverPasswordActivity recoverPasswordActivity = createActivity(); + Button nextButton = (Button) recoverPasswordActivity.findViewById(R.id.button_done); when(AuthInstancesShadow.sFirebaseAuth.sendPasswordResetEmail(TestConstants.EMAIL)) .thenReturn(new AutoCompleteTask(null, true, null)); 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 f0c819ff2..6bb22abab 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 @@ -14,7 +14,6 @@ package com.firebase.ui.auth.ui.idp; -import android.app.Activity; import android.content.Intent; import com.firebase.ui.auth.BuildConfig; @@ -27,8 +26,8 @@ import com.firebase.ui.auth.testhelpers.TestConstants; import com.firebase.ui.auth.testhelpers.TestHelper; import com.firebase.ui.auth.ui.AppCompatBase; -import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.FlowParameters; +import com.firebase.ui.auth.ui.ProgressDialogHolder; import com.firebase.ui.auth.ui.User; import com.firebase.ui.auth.ui.accountlink.WelcomeBackIdpPrompt; import com.firebase.ui.auth.ui.accountlink.WelcomeBackPasswordPrompt; @@ -52,6 +51,7 @@ import org.robolectric.annotation.Config; import java.util.Arrays; +import java.util.Collections; import static junit.framework.Assert.assertEquals; import static org.mockito.Mockito.mock; @@ -75,7 +75,6 @@ public void setUp() { @Config(shadows = {AuthInstancesShadow.class}) public void testSignInSucceeded() { AppCompatBase mockActivity = mock(AppCompatBase.class); - ActivityUtils mockActivityHelper = mock(ActivityUtils.class); IdpResponse idpResponse = new IdpResponse.Builder(GoogleAuthProvider.PROVIDER_ID, TestConstants.EMAIL) .setToken(TestConstants.TOKEN) @@ -83,32 +82,24 @@ public void testSignInSucceeded() { SaveSmartLock smartLock = mock(SaveSmartLock.class); CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler( mockActivity, - mockActivityHelper, smartLock, RC_ACCOUNT_LINK, idpResponse); - // TODO: Mock -// when(mockActivityHelper.getFlowParams()).thenReturn( -// TestHelper.getFlowParameters(Collections.emptyList())); + when(mockActivity.getFlowParams()).thenReturn( + TestHelper.getFlowParameters(Collections.emptyList())); credentialSignInHandler.onComplete(Tasks.forResult(FakeAuthResult.INSTANCE)); ArgumentCaptor smartLockCaptor = ArgumentCaptor.forClass(SaveSmartLock.class); - ArgumentCaptor activityCaptor = ArgumentCaptor.forClass(Activity.class); ArgumentCaptor firebaseUserCaptor = ArgumentCaptor.forClass(FirebaseUser.class); ArgumentCaptor idpResponseCaptor = ArgumentCaptor.forClass(IdpResponse.class); - ArgumentCaptor passwordCaptor = ArgumentCaptor.forClass(String.class); - // TODO: Verify static method -// verify(mockActivityHelper).saveCredentialsOrFinish( -// smartLockCaptor.capture(), -// activityCaptor.capture(), -// firebaseUserCaptor.capture(), -// passwordCaptor.capture(), // Needed to make Mockito happy -// idpResponseCaptor.capture()); + verify(mockActivity).saveCredentialsOrFinish( + smartLockCaptor.capture(), + firebaseUserCaptor.capture(), + idpResponseCaptor.capture()); assertEquals(smartLock, smartLockCaptor.getValue()); - assertEquals(mockActivity, activityCaptor.getValue()); assertEquals(AuthInstancesShadow.sFirebaseUser, firebaseUserCaptor.getValue()); IdpResponse response = idpResponseCaptor.getValue(); @@ -119,25 +110,27 @@ public void testSignInSucceeded() { } @Test + @Config(shadows = {AuthInstancesShadow.class}) public void testSignInFailed_withFacebookAlreadyLinked() { AppCompatBase mockActivity = mock(AppCompatBase.class); - ActivityUtils mockActivityHelper = mock(ActivityUtils.class); - FirebaseAuth mockFirebaseAuth = mock(FirebaseAuth.class); IdpResponse idpResponse = new IdpResponse.Builder(GoogleAuthProvider.PROVIDER_ID, TestConstants.EMAIL) .setToken(TestConstants.TOKEN) .build(); CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler( mockActivity, - mockActivityHelper, null, RC_ACCOUNT_LINK, idpResponse); - // TODO: Mock this into classes that have getFlowParams FlowParameters mockFlowParams = mock(FlowParameters.class); + when(mockActivity.getFlowParams()).thenReturn(mockFlowParams); + + ProgressDialogHolder mockHolder = mock(ProgressDialogHolder.class); + when(mockActivity.getDialogHolder()).thenReturn(mockHolder); // pretend the account has Facebook linked already + FirebaseAuth mockFirebaseAuth = AuthInstancesShadow.sFirebaseAuth; when(mockFirebaseAuth.fetchProvidersForEmail(TestConstants.EMAIL)).thenReturn( new AutoCompleteTask( new FakeProviderQueryResult( @@ -166,24 +159,24 @@ public void testSignInFailed_withFacebookAlreadyLinked() { } @Test + @Config(shadows = {AuthInstancesShadow.class}) public void testSignInFailed_withPasswordAccountAlreadyLinked() { AppCompatBase mockActivity = mock(AppCompatBase.class); - ActivityUtils mockActivityHelper = mock(ActivityUtils.class); - FirebaseAuth mockFirebaseAuth = mock(FirebaseAuth.class); IdpResponse idpResponse = new IdpResponse.Builder(GoogleAuthProvider.PROVIDER_ID, TestConstants.EMAIL) .setToken(TestConstants.TOKEN) .build(); CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler( mockActivity, - mockActivityHelper, null, RC_ACCOUNT_LINK, idpResponse); - // TODO: Mock this into the proper classes FlowParameters mockFlowParams = mock(FlowParameters.class); -// when(mockActivityHelper.getFlowParams()).thenReturn(mockFlowParams); + when(mockActivity.getFlowParams()).thenReturn(mockFlowParams); + + ProgressDialogHolder mockHolder = mock(ProgressDialogHolder.class); + when(mockActivity.getDialogHolder()).thenReturn(mockHolder); // pretend there was already an account with this email Task mockTask = mock(Task.class); @@ -191,6 +184,7 @@ public void testSignInFailed_withPasswordAccountAlreadyLinked() { new FirebaseAuthUserCollisionException(LINKING_ERROR, LINKING_EXPLANATION)); // pretend the account has a Password account linked already + FirebaseAuth mockFirebaseAuth = AuthInstancesShadow.sFirebaseAuth; when(mockFirebaseAuth.fetchProvidersForEmail(TestConstants.EMAIL)).thenReturn( new AutoCompleteTask( new FakeProviderQueryResult( From 3f7472836edd776f731f3762e63ab6dd1e9063eb Mon Sep 17 00:00:00 2001 From: Sam Stern Date: Tue, 27 Jun 2017 09:04:33 -0700 Subject: [PATCH 6/8] Make findbugs pass Change-Id: I850923fe00efd0be31c75196e917440ca6602708 --- .../auth/testhelpers/AuthInstancesShadow.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/auth/src/test/java/com/firebase/ui/auth/testhelpers/AuthInstancesShadow.java b/auth/src/test/java/com/firebase/ui/auth/testhelpers/AuthInstancesShadow.java index 23297b97c..560e6fdab 100644 --- a/auth/src/test/java/com/firebase/ui/auth/testhelpers/AuthInstancesShadow.java +++ b/auth/src/test/java/com/firebase/ui/auth/testhelpers/AuthInstancesShadow.java @@ -19,17 +19,13 @@ @Implements(AuthInstances.class) public class AuthInstancesShadow { - public static FirebaseAuth sFirebaseAuth; - public static FirebaseUser sFirebaseUser; - public static CredentialsApi sCredentialsApi; - public static SaveSmartLock sSaveSmartLock; - public static PhoneAuthProvider sPhoneAuthProvider; + public static final FirebaseAuth sFirebaseAuth; + public static final FirebaseUser sFirebaseUser; + public static final CredentialsApi sCredentialsApi; + public static final SaveSmartLock sSaveSmartLock; + public static final PhoneAuthProvider sPhoneAuthProvider; static { - // FirebaseAuth - sFirebaseAuth = Mockito.mock(FirebaseAuth.class); - when(sFirebaseAuth.getCurrentUser()).thenReturn(sFirebaseUser); - // CredentialsApi sCredentialsApi = Mockito.mock(CredentialsApi.class); @@ -39,6 +35,10 @@ public class AuthInstancesShadow { when(sFirebaseUser.getDisplayName()).thenReturn(TestConstants.NAME); when(sFirebaseUser.getPhotoUrl()).thenReturn(TestConstants.PHOTO_URI); + // FirebaseAuth + sFirebaseAuth = Mockito.mock(FirebaseAuth.class); + when(sFirebaseAuth.getCurrentUser()).thenReturn(sFirebaseUser); + // SaveSmartLock sSaveSmartLock = Mockito.mock(SaveSmartLock.class); From 78bc55557fd695cb5935825f6d500a8057b88ffb Mon Sep 17 00:00:00 2001 From: Sam Stern Date: Tue, 27 Jun 2017 09:23:34 -0700 Subject: [PATCH 7/8] Remove ActivityUtils Change-Id: I3b126f4e08cd359f7e1910cd086176159097650b --- .../firebase/ui/auth/provider/EmailProvider.java | 4 ++-- .../firebase/ui/auth/provider/PhoneProvider.java | 4 ++-- .../com/firebase/ui/auth/ui/ActivityUtils.java | 15 --------------- .../java/com/firebase/ui/auth/ui/DialogBase.java | 3 ++- .../com/firebase/ui/auth/ui/FragmentBase.java | 3 ++- .../firebase/ui/auth/ui/HelperActivityBase.java | 6 +++--- .../ui/auth/ui/idp/CredentialSignInHandler.java | 8 +++----- .../auth/util/signincontainer/SmartLockBase.java | 4 +--- 8 files changed, 15 insertions(+), 32 deletions(-) delete mode 100644 auth/src/main/java/com/firebase/ui/auth/ui/ActivityUtils.java diff --git a/auth/src/main/java/com/firebase/ui/auth/provider/EmailProvider.java b/auth/src/main/java/com/firebase/ui/auth/provider/EmailProvider.java index ca4fbc0f9..be04312d8 100644 --- a/auth/src/main/java/com/firebase/ui/auth/provider/EmailProvider.java +++ b/auth/src/main/java/com/firebase/ui/auth/provider/EmailProvider.java @@ -8,7 +8,6 @@ import com.firebase.ui.auth.AuthUI; import com.firebase.ui.auth.R; import com.firebase.ui.auth.ResultCodes; -import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.email.RegisterEmailActivity; import com.google.firebase.auth.EmailAuthProvider; @@ -51,7 +50,8 @@ public void startLogin(Activity activity) { @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == RC_EMAIL_FLOW && resultCode == ResultCodes.OK) { - ActivityUtils.finishActivity(mActivity, ResultCodes.OK, data); + mActivity.setResult(ResultCodes.OK, data); + mActivity.finish(); } } } diff --git a/auth/src/main/java/com/firebase/ui/auth/provider/PhoneProvider.java b/auth/src/main/java/com/firebase/ui/auth/provider/PhoneProvider.java index fd93bb527..7c9b8db64 100644 --- a/auth/src/main/java/com/firebase/ui/auth/provider/PhoneProvider.java +++ b/auth/src/main/java/com/firebase/ui/auth/provider/PhoneProvider.java @@ -8,7 +8,6 @@ import com.firebase.ui.auth.AuthUI; import com.firebase.ui.auth.R; import com.firebase.ui.auth.ResultCodes; -import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.FlowParameters; import com.firebase.ui.auth.ui.phone.PhoneVerificationActivity; import com.google.firebase.auth.PhoneAuthProvider; @@ -52,7 +51,8 @@ public void startLogin(Activity activity) { @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == RC_PHONE_FLOW && resultCode == ResultCodes.OK) { - ActivityUtils.finishActivity(mActivity, ResultCodes.OK, data); + mActivity.setResult(ResultCodes.OK, data); + mActivity.finish(); } } } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/ActivityUtils.java b/auth/src/main/java/com/firebase/ui/auth/ui/ActivityUtils.java deleted file mode 100644 index 0563f527a..000000000 --- a/auth/src/main/java/com/firebase/ui/auth/ui/ActivityUtils.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.firebase.ui.auth.ui; - -import android.app.Activity; -import android.content.Intent; -import android.support.annotation.RestrictTo; - -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -public class ActivityUtils { - - public static void finishActivity(Activity activity, int resultCode, Intent intent) { - activity.setResult(resultCode, intent); - activity.finish(); - } - -} diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java index 296473c94..7c5c75992 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java @@ -37,6 +37,7 @@ public FlowParameters getFlowParams() { } public void finish(int resultCode, Intent resultIntent) { - ActivityUtils.finishActivity(getActivity(), resultCode, resultIntent); + getActivity().setResult(resultCode, resultIntent); + getActivity().finish(); } } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java index 1f653c7f8..4e5cb7d18 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java @@ -38,7 +38,8 @@ public FlowParameters getFlowParams() { } public void finish(int resultCode, Intent resultIntent) { - ActivityUtils.finishActivity(getActivity(), resultCode, resultIntent); + getActivity().setResult(resultCode, resultIntent); + getActivity().finish(); } public void startIntentSenderForResult(IntentSender sender, int requestCode) diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java index c2255f472..23549a5bd 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java @@ -55,14 +55,14 @@ public FlowParameters getFlowParams() { } public void finish(int resultCode, Intent intent) { - ActivityUtils.finishActivity(this, resultCode, intent); + setResult(resultCode, intent); + finish(); } public ProgressDialogHolder getDialogHolder() { return mProgressDialogHolder; } - public void saveCredentialsOrFinish( @Nullable SaveSmartLock saveSmartLock, FirebaseUser firebaseUser, @@ -77,7 +77,7 @@ public void saveCredentialsOrFinish( IdpResponse response) { if (saveSmartLock == null) { - ActivityUtils.finishActivity(this, ResultCodes.OK, response.toIntent()); + finish(ResultCodes.OK, response.toIntent()); } else { saveSmartLock.saveCredentialsOrFinish(firebaseUser, password, response); } 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 6c3166690..57bcb127e 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 @@ -14,6 +14,7 @@ package com.firebase.ui.auth.ui.idp; +import android.content.Intent; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.RestrictTo; @@ -23,7 +24,6 @@ import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.ResultCodes; import com.firebase.ui.auth.provider.ProviderUtils; -import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.HelperActivityBase; import com.firebase.ui.auth.ui.User; import com.firebase.ui.auth.ui.accountlink.WelcomeBackIdpPrompt; @@ -76,10 +76,8 @@ public void onComplete(@NonNull Task task) { .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { - ActivityUtils.finishActivity( - mActivity, - ResultCodes.CANCELED, - IdpResponse.getErrorCodeIntent(ErrorCodes.UNKNOWN_ERROR)); + Intent intent = IdpResponse.getErrorCodeIntent(ErrorCodes.UNKNOWN_ERROR); + mActivity.finish(ResultCodes.CANCELED, intent); } }); return; diff --git a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SmartLockBase.java b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SmartLockBase.java index ad854dde6..15db9cff2 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SmartLockBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SmartLockBase.java @@ -10,7 +10,6 @@ import android.widget.Toast; import com.firebase.ui.auth.AuthUI; -import com.firebase.ui.auth.ui.ActivityUtils; import com.firebase.ui.auth.ui.FragmentBase; import com.google.android.gms.auth.api.credentials.Credential; import com.google.android.gms.auth.api.credentials.IdentityProviders; @@ -122,8 +121,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { public void onStart() { super.onStart(); if (mActivityResultPair != null) { - ActivityUtils.finishActivity( - getActivity(), mActivityResultPair.first, mActivityResultPair.second); + finish(mActivityResultPair.first, mActivityResultPair.second); } else if (mWasProgressDialogShowing) { mProgressDialogHolder.showLoadingDialog(com.firebase.ui.auth.R.string.progress_dialog_loading); mWasProgressDialogShowing = false; From 7be3ae22734448ae1f114977d71bc90ee9354e22 Mon Sep 17 00:00:00 2001 From: Sam Stern Date: Tue, 27 Jun 2017 09:46:59 -0700 Subject: [PATCH 8/8] Removed unused class, fix member visibility Change-Id: Ib07cea70703f6f7fdc2b47e5c9aab43f764350cf --- .../com/firebase/ui/auth/ui/DialogBase.java | 43 ------------------- .../com/firebase/ui/auth/ui/FragmentBase.java | 8 +++- .../ui/auth/ui/HelperActivityBase.java | 12 +++--- .../ui/accountlink/WelcomeBackIdpPrompt.java | 2 +- .../WelcomeBackPasswordPrompt.java | 4 +- .../ui/auth/ui/email/CheckEmailFragment.java | 4 +- .../ui/email/RecoverPasswordActivity.java | 8 ++-- .../ui/email/RecoveryEmailSentDialog.java | 13 +++--- .../auth/ui/email/RegisterEmailFragment.java | 6 +-- .../auth/ui/idp/AuthMethodPickerActivity.java | 4 +- .../firebase/ui/auth/util/AuthInstances.java | 4 +- .../util/signincontainer/SignInDelegate.java | 6 +-- .../util/signincontainer/SmartLockBase.java | 6 +-- 13 files changed, 43 insertions(+), 77 deletions(-) delete mode 100644 auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java deleted file mode 100644 index 7c5c75992..000000000 --- a/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.firebase.ui.auth.ui; - -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.annotation.RestrictTo; -import android.support.v4.app.DialogFragment; -import android.view.ContextThemeWrapper; - -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -public class DialogBase extends DialogFragment { - - protected FlowParameters mFlowParameters; - protected ProgressDialogHolder mProgressDialogHolder; - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - ContextThemeWrapper context = new ContextThemeWrapper( - getContext(), getFlowParams().themeId); - mProgressDialogHolder = new ProgressDialogHolder(context); - } - - @Override - public void onDestroy() { - super.onDestroy(); - mProgressDialogHolder.dismissDialog(); - } - - public FlowParameters getFlowParams() { - if (mFlowParameters == null) { - mFlowParameters = FlowParameters.fromBundle(getArguments()); - } - - return mFlowParameters; - } - - public void finish(int resultCode, Intent resultIntent) { - getActivity().setResult(resultCode, resultIntent); - getActivity().finish(); - } -} diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java index 4e5cb7d18..8532a92cb 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java @@ -11,8 +11,8 @@ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public class FragmentBase extends Fragment { - protected FlowParameters mFlowParameters; - protected ProgressDialogHolder mProgressDialogHolder; + private FlowParameters mFlowParameters; + private ProgressDialogHolder mProgressDialogHolder; @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -37,6 +37,10 @@ public FlowParameters getFlowParams() { return mFlowParameters; } + public ProgressDialogHolder getDialogHolder() { + return mProgressDialogHolder; + } + public void finish(int resultCode, Intent resultIntent) { getActivity().setResult(resultCode, resultIntent); getActivity().finish(); diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java index 23549a5bd..f167213d2 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java @@ -20,8 +20,8 @@ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public class HelperActivityBase extends AppCompatActivity { - protected FlowParameters mFlowParameters; - protected ProgressDialogHolder mProgressDialogHolder; + private FlowParameters mFlowParameters; + private ProgressDialogHolder mProgressDialogHolder; public static Intent createBaseIntent( @NonNull Context context, @@ -54,15 +54,15 @@ public FlowParameters getFlowParams() { return mFlowParameters; } + public ProgressDialogHolder getDialogHolder() { + return mProgressDialogHolder; + } + public void finish(int resultCode, Intent intent) { setResult(resultCode, intent); finish(); } - public ProgressDialogHolder getDialogHolder() { - return mProgressDialogHolder; - } - public void saveCredentialsOrFinish( @Nullable SaveSmartLock saveSmartLock, FirebaseUser firebaseUser, diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackIdpPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackIdpPrompt.java index 8ce361dcc..8328ca3e7 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackIdpPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackIdpPrompt.java @@ -119,7 +119,7 @@ protected void onCreate(Bundle savedInstanceState) { findViewById(R.id.welcome_back_idp_button).setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { - mProgressDialogHolder.showLoadingDialog(R.string.progress_dialog_signing_in); + getDialogHolder().showLoadingDialog(R.string.progress_dialog_signing_in); mIdpProvider.startLogin(WelcomeBackIdpPrompt.this); } }); diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackPasswordPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackPasswordPrompt.java index 188fbaa43..0bef04fd8 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackPasswordPrompt.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/accountlink/WelcomeBackPasswordPrompt.java @@ -144,7 +144,7 @@ private void validateAndSignIn(final String email, final String password) { } else { mPasswordLayout.setError(null); } - mProgressDialogHolder.showLoadingDialog(R.string.progress_dialog_signing_in); + getDialogHolder().showLoadingDialog(R.string.progress_dialog_signing_in); final FirebaseAuth firebaseAuth = AuthInstances.getFirebaseAuth(getFlowParams()); @@ -188,7 +188,7 @@ public void onSuccess(AuthResult authResult) { .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { - mProgressDialogHolder.dismissDialog(); + getDialogHolder().dismissDialog(); String error = e.getLocalizedMessage(); mPasswordLayout.setError(error); } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java index 546276bb3..e938eeb88 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java @@ -181,7 +181,7 @@ private void validateAndProceed() { } private void checkAccountExists(@NonNull final String email) { - mProgressDialogHolder.showLoadingDialog(R.string.progress_dialog_checking_accounts); + getDialogHolder().showLoadingDialog(R.string.progress_dialog_checking_accounts); // Get name from SmartLock, if possible String name = null; @@ -217,7 +217,7 @@ public void onSuccess(String provider) { new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { - mProgressDialogHolder.dismissDialog(); + getDialogHolder().dismissDialog(); } }); } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java index 982550c46..a49c7bf65 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java @@ -75,15 +75,15 @@ private void next(final String email) { .addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(Void aVoid) { - mProgressDialogHolder.dismissDialog(); + getDialogHolder().dismissDialog(); RecoveryEmailSentDialog.show( - email, getFlowParams(), getSupportFragmentManager()); + email, getSupportFragmentManager()); } }) .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { - mProgressDialogHolder.dismissDialog(); + getDialogHolder().dismissDialog(); if (e instanceof FirebaseAuthInvalidUserException) { // No FirebaseUser exists with this email address, show error. @@ -97,7 +97,7 @@ public void onFailure(@NonNull Exception e) { public void onClick(View view) { if (view.getId() == R.id.button_done) { if (mEmailFieldValidator.validate(mEmailEditText.getText())) { - mProgressDialogHolder.showLoadingDialog(R.string.progress_dialog_sending); + getDialogHolder().showLoadingDialog(R.string.progress_dialog_sending); next(mEmailEditText.getText().toString()); } } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoveryEmailSentDialog.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoveryEmailSentDialog.java index 1051aa8d2..dd97546fe 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoveryEmailSentDialog.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoveryEmailSentDialog.java @@ -6,23 +6,21 @@ import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.RestrictTo; +import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentManager; import android.support.v7.app.AlertDialog; import com.firebase.ui.auth.R; import com.firebase.ui.auth.ResultCodes; -import com.firebase.ui.auth.ui.DialogBase; import com.firebase.ui.auth.ui.ExtraConstants; -import com.firebase.ui.auth.ui.FlowParameters; @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -public class RecoveryEmailSentDialog extends DialogBase { +public class RecoveryEmailSentDialog extends DialogFragment { private static final String TAG = "RecoveryEmailSentDialog"; - public static void show(String email, FlowParameters parameters, FragmentManager manager) { + public static void show(String email, FragmentManager manager) { RecoveryEmailSentDialog result = new RecoveryEmailSentDialog(); Bundle bundle = new Bundle(); - bundle.putParcelable(ExtraConstants.EXTRA_FLOW_PARAMS, parameters); bundle.putString(ExtraConstants.EXTRA_EMAIL, email); result.setArguments(bundle); result.show(manager, TAG); @@ -44,4 +42,9 @@ public void onDismiss(DialogInterface anInterface) { .setPositiveButton(android.R.string.ok, null) .show(); } + + public void finish(int resultCode, Intent resultIntent) { + getActivity().setResult(resultCode, resultIntent); + getActivity().finish(); + } } diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java index d27784515..ecc3a5604 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java @@ -215,7 +215,7 @@ private void validateAndRegisterUser() { boolean passwordValid = mPasswordFieldValidator.validate(password); boolean nameValid = mNameValidator.validate(name); if (emailValid && passwordValid && nameValid) { - mProgressDialogHolder.showLoadingDialog(R.string.progress_dialog_signing_up); + getDialogHolder().showLoadingDialog(R.string.progress_dialog_signing_up); registerUser(email, name, password); } } @@ -311,7 +311,7 @@ public void onSuccess(String provider) { .addOnCompleteListener(new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { - mProgressDialogHolder.dismissDialog(); + getDialogHolder().dismissDialog(); } }); return; @@ -321,7 +321,7 @@ public void onComplete(@NonNull Task task) { mEmailInput.setError(getString(R.string.email_account_creation_error)); } - mProgressDialogHolder.dismissDialog(); + getDialogHolder().dismissDialog(); } }); } 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 d012fac05..36abadcfe 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 @@ -122,7 +122,7 @@ private void populateIdpList(List providers) { @Override public void onClick(View view) { if (provider instanceof IdpProvider) { - mProgressDialogHolder.showLoadingDialog(R.string.progress_dialog_loading); + getDialogHolder().showLoadingDialog(R.string.progress_dialog_loading); } provider.startLogin(AuthMethodPickerActivity.this); } @@ -165,7 +165,7 @@ public void onSuccess(final IdpResponse response) { @Override public void onFailure(Bundle extra) { // stay on this screen - mProgressDialogHolder.dismissDialog(); + getDialogHolder().dismissDialog(); } @Override diff --git a/auth/src/main/java/com/firebase/ui/auth/util/AuthInstances.java b/auth/src/main/java/com/firebase/ui/auth/util/AuthInstances.java index f01f257cc..dbf9e7b7a 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/AuthInstances.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/AuthInstances.java @@ -1,5 +1,6 @@ package com.firebase.ui.auth.util; +import android.support.annotation.Nullable; import android.support.v4.app.FragmentActivity; import com.firebase.ui.auth.ui.FlowParameters; @@ -12,7 +13,7 @@ import com.google.firebase.auth.PhoneAuthProvider; /** - * Factor for instances of authentication classes. Should eventually be replaced by + * Factory for instances of authentication classes. Should eventually be replaced by * dependency injection. */ public class AuthInstances { @@ -25,6 +26,7 @@ public static CredentialsApi getCredentialsApi() { return Auth.CredentialsApi; } + @Nullable public static FirebaseUser getCurrentUser(FlowParameters parameters) { return getFirebaseAuth(parameters).getCurrentUser(); } diff --git a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java index 1d83905b6..d888f87df 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java @@ -100,7 +100,7 @@ public void onCreate(Bundle savedInstance) { FlowParameters flowParams = getFlowParams(); if (flowParams.enableCredentials) { - mProgressDialogHolder.showLoadingDialog(R.string.progress_dialog_loading); + getDialogHolder().showLoadingDialog(R.string.progress_dialog_loading); mGoogleApiClient = new GoogleApiClient.Builder(getContext().getApplicationContext()) .addConnectionCallbacks(this) @@ -271,7 +271,7 @@ private void startAuthMethodChoice() { flowParams), RC_AUTH_METHOD_PICKER); } - mProgressDialogHolder.dismissDialog(); + getDialogHolder().dismissDialog(); } /** @@ -359,7 +359,7 @@ private void redirectToIdpSignIn(String email, String accountType) { getContext(), getFlowParams()), RC_IDP_SIGNIN); - mProgressDialogHolder.dismissDialog(); + getDialogHolder().dismissDialog(); } } } diff --git a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SmartLockBase.java b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SmartLockBase.java index 15db9cff2..b71bde2b4 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SmartLockBase.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SmartLockBase.java @@ -123,7 +123,7 @@ public void onStart() { if (mActivityResultPair != null) { finish(mActivityResultPair.first, mActivityResultPair.second); } else if (mWasProgressDialogShowing) { - mProgressDialogHolder.showLoadingDialog(com.firebase.ui.auth.R.string.progress_dialog_loading); + getDialogHolder().showLoadingDialog(com.firebase.ui.auth.R.string.progress_dialog_loading); mWasProgressDialogShowing = false; } } @@ -131,8 +131,8 @@ public void onStart() { @Override public void onStop() { super.onStop(); - mWasProgressDialogShowing = mProgressDialogHolder.isProgressDialogShowing(); - mProgressDialogHolder.dismissDialog(); + mWasProgressDialogShowing = getDialogHolder().isProgressDialogShowing(); + getDialogHolder().dismissDialog(); } @Override