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..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.ActivityHelper; 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 ActivityHelper.createBaseIntent(context, KickoffActivity.class, flowParams); + return HelperActivityBase.createBaseIntent(context, KickoffActivity.class, flowParams); } @Override @@ -84,7 +83,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..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,7 @@ 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.FlowParameters; import com.firebase.ui.auth.ui.email.RegisterEmailActivity; import com.google.firebase.auth.EmailAuthProvider; @@ -16,11 +16,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 +43,15 @@ 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); + 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 741d47cd7..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,7 @@ 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.FlowParameters; import com.firebase.ui.auth.ui.phone.PhoneVerificationActivity; import com.google.firebase.auth.PhoneAuthProvider; @@ -17,11 +17,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 +44,15 @@ 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); + mActivity.setResult(ResultCodes.OK, data); + mActivity.finish(); } } } 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..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 @@ -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(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 deleted file mode 100644 index 27df410fe..000000000 --- a/auth/src/main/java/com/firebase/ui/auth/ui/BaseHelper.java +++ /dev/null @@ -1,119 +0,0 @@ -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; -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; - protected ProgressDialog mProgressDialog; - - public BaseHelper(Context context, FlowParameters parameters) { - mContext = context; - mFlowParams = parameters; - } - - 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 FlowParameters getFlowParams() { - return mFlowParams; - } - - public void finishActivity(Activity activity, int resultCode, Intent intent) { - activity.setResult(resultCode, intent); - 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)); - } - - 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( - @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 deleted file mode 100644 index b02009c9d..000000000 --- a/auth/src/main/java/com/firebase/ui/auth/ui/DialogBase.java +++ /dev/null @@ -1,28 +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; - -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -public class DialogBase extends DialogFragment { - protected FragmentHelper mHelper; - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mHelper = new FragmentHelper(this); - } - - @Override - public void onDestroy() { - super.onDestroy(); - mHelper.dismissDialog(); - } - - public void finish(int resultCode, Intent resultIntent) { - mHelper.finish(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 7f3bd5e08..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,8 @@ */ package com.firebase.ui.auth.ui; +import android.content.Intent; +import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.DrawableRes; @@ -78,6 +80,30 @@ 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}. + */ + 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/FragmentBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java index 019f9d213..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 @@ -1,28 +1,53 @@ 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; import android.support.v4.app.Fragment; +import android.view.ContextThemeWrapper; @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public class FragmentBase extends Fragment { - protected FragmentHelper mHelper; + + private FlowParameters mFlowParameters; + private ProgressDialogHolder mProgressDialogHolder; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mHelper = new FragmentHelper(this); + + ContextThemeWrapper context = new ContextThemeWrapper( + getContext(), getFlowParams().themeId); + mProgressDialogHolder = new ProgressDialogHolder(context); } @Override public void onDestroy() { super.onDestroy(); - mHelper.dismissDialog(); + mProgressDialogHolder.dismissDialog(); + } + + public FlowParameters getFlowParams() { + if (mFlowParameters == null) { + mFlowParameters = FlowParameters.fromBundle(getArguments()); + } + + return mFlowParameters; + } + + public ProgressDialogHolder getDialogHolder() { + return mProgressDialogHolder; } public void finish(int resultCode, Intent resultIntent) { - mHelper.finish(resultCode, resultIntent); + getActivity().setResult(resultCode, resultIntent); + getActivity().finish(); + } + + 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 0cc545146..000000000 --- a/auth/src/main/java/com/firebase/ui/auth/ui/FragmentHelper.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.firebase.ui.auth.ui; - -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; - -@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 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); - } - - @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 d13fb60ad..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 @@ -1,30 +1,87 @@ 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; +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.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 { - protected ActivityHelper mActivityHelper; + private FlowParameters mFlowParameters; + private 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); - mActivityHelper = new ActivityHelper(this, getIntent()); + mProgressDialogHolder = new ProgressDialogHolder(this); } @Override protected void onDestroy() { super.onDestroy(); - mActivityHelper.dismissDialog(); + mProgressDialogHolder.dismissDialog(); + } + + public FlowParameters getFlowParams() { + if (mFlowParameters == null) { + mFlowParameters = FlowParameters.fromIntent(getIntent()); + } + + return mFlowParameters; + } + + public ProgressDialogHolder getDialogHolder() { + return mProgressDialogHolder; } public void finish(int resultCode, Intent intent) { - mActivityHelper.finish(resultCode, intent); + setResult(resultCode, intent); + finish(); + } + + public void saveCredentialsOrFinish( + @Nullable SaveSmartLock saveSmartLock, + FirebaseUser firebaseUser, + IdpResponse response) { + saveCredentialsOrFinish(saveSmartLock, firebaseUser, null, response); } + + public void saveCredentialsOrFinish( + @Nullable SaveSmartLock saveSmartLock, + FirebaseUser firebaseUser, + @Nullable String password, + IdpResponse response) { + + if (saveSmartLock == null) { + finish(ResultCodes.OK, response.toIntent()); + } else { + saveSmartLock.saveCredentialsOrFinish(firebaseUser, password, 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..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 @@ -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.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; 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 HelperActivityBase.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); @@ -118,7 +119,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); + getDialogHolder().showLoadingDialog(R.string.progress_dialog_signing_in); mIdpProvider.startLogin(WelcomeBackIdpPrompt.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 6ac33f2e3..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 @@ -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.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; +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 HelperActivityBase.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(); + 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)); } @@ -143,9 +144,10 @@ private void validateAndSignIn(final String email, final String password) { } else { mPasswordLayout.setError(null); } - mActivityHelper.showLoadingDialog(R.string.progress_dialog_signing_in); + getDialogHolder().showLoadingDialog(R.string.progress_dialog_signing_in); + + final FirebaseAuth firebaseAuth = AuthInstances.getFirebaseAuth(getFlowParams()); - final FirebaseAuth firebaseAuth = mActivityHelper.getFirebaseAuth(); // Sign in with known email and the password provided firebaseAuth.signInWithEmailAndPassword(email, password) .addOnFailureListener( @@ -159,7 +161,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 +176,7 @@ public void onSuccess(AuthResult authResult) { .addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(AuthResult authResult) { - mActivityHelper.saveCredentialsOrFinish( + saveCredentialsOrFinish( mSaveSmartLock, authResult.getUser(), mIdpResponse); @@ -186,7 +188,7 @@ public void onSuccess(AuthResult authResult) { .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { - mActivityHelper.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 82d1dd12f..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 @@ -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(); } @@ -179,7 +181,7 @@ private void validateAndProceed() { } private void checkAccountExists(@NonNull final String email) { - mHelper.showLoadingDialog(R.string.progress_dialog_checking_accounts); + getDialogHolder().showLoadingDialog(R.string.progress_dialog_checking_accounts); // Get name from SmartLock, if possible String name = null; @@ -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) { @@ -213,14 +217,14 @@ public void onSuccess(String provider) { new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { - mHelper.dismissDialog(); + getDialogHolder().dismissDialog(); } }); } 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/email/RecoverPasswordActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java index 084643caa..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 @@ -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.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; 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 HelperActivityBase.createBaseIntent(context, RecoverPasswordActivity.class, flowParams) .putExtra(ExtraConstants.EXTRA_EMAIL, email); } @@ -67,21 +68,22 @@ 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")) .addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(Void aVoid) { - mActivityHelper.dismissDialog(); - RecoveryEmailSentDialog.show(email, getSupportFragmentManager()); + getDialogHolder().dismissDialog(); + RecoveryEmailSentDialog.show( + email, getSupportFragmentManager()); } }) .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { - mActivityHelper.dismissDialog(); + getDialogHolder().dismissDialog(); if (e instanceof FirebaseAuthInvalidUserException) { // No FirebaseUser exists with this email address, show error. @@ -95,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())) { - mActivityHelper.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 b56a8f92c..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,16 +6,16 @@ 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; @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, FragmentManager manager) { @@ -42,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/RegisterEmailActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailActivity.java index 97d720644..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.BaseHelper; 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 BaseHelper.createBaseIntent(context, RegisterEmailActivity.class, flowParams) + return HelperActivityBase.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,11 +108,11 @@ 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()); - mActivityHelper.startActivityForResult(intent, RC_WELCOME_BACK_IDP); + startActivityForResult(intent, RC_WELCOME_BACK_IDP); setSlideAnimation(); } @@ -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 29f1e5dbd..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 @@ -18,6 +18,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.ImeHelper; import com.firebase.ui.auth.ui.TaskFailureLogger; import com.firebase.ui.auth.ui.TermsTextView; @@ -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; @@ -49,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; @@ -156,8 +161,13 @@ 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); + 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); } @Override @@ -205,13 +215,13 @@ 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); + getDialogHolder().showLoadingDialog(R.string.progress_dialog_signing_up); registerUser(email, name, password); } } 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,14 +244,10 @@ 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( - mSaveSmartLock, - getActivity(), - user, - password, + mActivity.saveCredentialsOrFinish( + mSaveSmartLock, user, password, new IdpResponse.Builder(EmailAuthProvider.PROVIDER_ID, - email) - .build()); + email).build()); } }); } @@ -260,7 +266,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 @@ -281,7 +288,7 @@ public void onSuccess(String provider) { getActivity().startActivityForResult( WelcomeBackPasswordPrompt.createIntent( getContext(), - mHelper.getFlowParams(), + getFlowParams(), new IdpResponse.Builder( EmailAuthProvider.PROVIDER_ID, email).build()), @@ -290,7 +297,7 @@ public void onSuccess(String provider) { getActivity().startActivityForResult( WelcomeBackIdpPrompt.createIntent( getContext(), - mHelper.getFlowParams(), + getFlowParams(), new User.Builder(email) .setProvider(provider) .build(), @@ -304,7 +311,7 @@ public void onSuccess(String provider) { .addOnCompleteListener(new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { - mHelper.dismissDialog(); + getDialogHolder().dismissDialog(); } }); return; @@ -314,7 +321,7 @@ public void onComplete(@NonNull Task task) { mEmailInput.setError(getString(R.string.email_account_creation_error)); } - mHelper.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 de617fd23..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 @@ -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.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.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 HelperActivityBase.createBaseIntent(context, AuthMethodPickerActivity.class, flowParams); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.auth_method_picker_layout); - mSaveSmartLock = mActivityHelper.getSaveSmartLockInstance(); + 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: " @@ -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); + getDialogHolder().showLoadingDialog(R.string.progress_dialog_loading); } provider.startLogin(AuthMethodPickerActivity.this); } @@ -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 " @@ -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)); @@ -166,7 +165,7 @@ public void onSuccess(final IdpResponse response) { @Override public void onFailure(Bundle extra) { // stay on this screen - mActivityHelper.dismissDialog(); + getDialogHolder().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 9f7cba4f3..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,21 +14,21 @@ package com.firebase.ui.auth.ui.idp; -import android.app.Activity; +import android.content.Intent; import android.support.annotation.NonNull; import android.support.annotation.Nullable; 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; 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; +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; @@ -36,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,21 +44,18 @@ public class CredentialSignInHandler implements OnCompleteListener { private static final String TAG = "CredentialSignInHandler"; - private Activity mActivity; - private BaseHelper mHelper; + private HelperActivityBase mActivity; @Nullable private SaveSmartLock mSmartLock; private IdpResponse mResponse; private int mAccountLinkRequestCode; public CredentialSignInHandler( - Activity activity, - BaseHelper helper, + HelperActivityBase activity, @Nullable SaveSmartLock smartLock, int accountLinkRequestCode, IdpResponse response) { mActivity = activity; - mHelper = helper; mSmartLock = smartLock; mResponse = response; mAccountLinkRequestCode = accountLinkRequestCode; @@ -67,25 +65,19 @@ public CredentialSignInHandler( public void onComplete(@NonNull Task task) { if (task.isSuccessful()) { FirebaseUser firebaseUser = task.getResult().getUser(); - mHelper.saveCredentialsOrFinish( - mSmartLock, - mActivity, - firebaseUser, - null, - mResponse); + mActivity.saveCredentialsOrFinish(mSmartLock, firebaseUser, mResponse); } else { 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) { - mHelper.finishActivity( - mActivity, - ResultCodes.CANCELED, - IdpResponse.getErrorCodeIntent(ErrorCodes.UNKNOWN_ERROR)); + Intent intent = IdpResponse.getErrorCodeIntent(ErrorCodes.UNKNOWN_ERROR); + mActivity.finish(ResultCodes.CANCELED, intent); } }); return; @@ -98,14 +90,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( @@ -115,7 +107,7 @@ public void onSuccess(String provider) { mActivity.startActivityForResult( WelcomeBackPasswordPrompt.createIntent( mActivity, - mHelper.getFlowParams(), + mActivity.getFlowParams(), mResponse), mAccountLinkRequestCode); } else { @@ -123,7 +115,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 a31cebac2..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,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.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; 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 HelperActivityBase.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(); + 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 e2a3b0253..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(); } @@ -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/AuthInstances.java b/auth/src/main/java/com/firebase/ui/auth/util/AuthInstances.java new file mode 100644 index 000000000..dbf9e7b7a --- /dev/null +++ b/auth/src/main/java/com/firebase/ui/auth/util/AuthInstances.java @@ -0,0 +1,44 @@ +package com.firebase.ui.auth.util; + +import android.support.annotation.Nullable; +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; + +/** + * Factory 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; + } + + @Nullable + 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 b16e17451..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 @@ -27,19 +27,20 @@ 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.HelperActivityBase; 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; @@ -50,6 +51,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; @@ -60,7 +62,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); @@ -84,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; @@ -109,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()); } @@ -121,6 +123,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); @@ -130,14 +143,13 @@ 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 " + credential.getProvider())) .addOnCompleteListener(new CredentialSignInHandler( - getActivity(), - mHelper, + mActivity, mSaveSmartLock, RC_WELCOME_BACK_IDP, response)); 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..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,7 +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.ui.FragmentHelper; +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; @@ -66,7 +66,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) { @@ -115,7 +115,7 @@ public void onConnected(Bundle bundle) { builder.setProfilePictureUri(Uri.parse(mProfilePictureUri)); } - mHelper.getCredentialsApi() + AuthInstances.getCredentialsApi() .save(mGoogleApiClient, builder.build()) .setResultCallback(this); } @@ -130,7 +130,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(); @@ -146,8 +146,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); @@ -173,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 { @@ -203,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 ec0f9c296..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 @@ -19,12 +19,12 @@ 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; 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; @@ -46,6 +46,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 +76,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(); } } @@ -97,9 +98,9 @@ public void onCreate(Bundle savedInstance) { return; } - FlowParameters flowParams = mHelper.getFlowParams(); + FlowParameters flowParams = getFlowParams(); if (flowParams.enableCredentials) { - mHelper.showLoadingDialog(R.string.progress_dialog_loading); + getDialogHolder().showLoadingDialog(R.string.progress_dialog_loading); mGoogleApiClient = new GoogleApiClient.Builder(getContext().getApplicationContext()) .addConnectionCallbacks(this) @@ -108,7 +109,7 @@ public void onCreate(Bundle savedInstance) { .build(); mGoogleApiClient.connect(); - mHelper.getCredentialsApi() + AuthInstances.getCredentialsApi() .request(mGoogleApiClient, new CredentialRequest.Builder() .setPasswordLoginSupported(true) @@ -139,7 +140,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; @@ -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) { @@ -270,7 +271,7 @@ private void startAuthMethodChoice() { flowParams), RC_AUTH_METHOD_PICKER); } - mHelper.dismissDialog(); + getDialogHolder().dismissDialog(); } /** @@ -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,9 +357,9 @@ private void redirectToIdpSignIn(String email, String accountType) { startActivityForResult( AuthMethodPickerActivity.createIntent( getContext(), - mHelper.getFlowParams()), + getFlowParams()), RC_IDP_SIGNIN); - mHelper.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 6c63a9f7e..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 @@ -121,9 +121,9 @@ public void onCreate(@Nullable Bundle savedInstanceState) { public void onStart() { super.onStart(); if (mActivityResultPair != null) { - mHelper.finish(mActivityResultPair.first, mActivityResultPair.second); + finish(mActivityResultPair.first, mActivityResultPair.second); } else if (mWasProgressDialogShowing) { - mHelper.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 = mHelper.isProgressDialogShowing(); - mHelper.dismissDialog(); + mWasProgressDialogShowing = getDialogHolder().isProgressDialogShowing(); + getDialogHolder().dismissDialog(); } @Override 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/AuthInstancesShadow.java b/auth/src/test/java/com/firebase/ui/auth/testhelpers/AuthInstancesShadow.java new file mode 100644 index 000000000..560e6fdab --- /dev/null +++ b/auth/src/test/java/com/firebase/ui/auth/testhelpers/AuthInstancesShadow.java @@ -0,0 +1,77 @@ +package com.firebase.ui.auth.testhelpers; + +import android.support.v4.app.FragmentActivity; + +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.FirebaseUser; +import com.google.firebase.auth.PhoneAuthProvider; + +import org.mockito.Mockito; +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; + +import static org.mockito.Mockito.when; + +@Implements(AuthInstances.class) +public class AuthInstancesShadow { + + 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 { + // 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); + + // FirebaseAuth + sFirebaseAuth = Mockito.mock(FirebaseAuth.class); + when(sFirebaseAuth.getCurrentUser()).thenReturn(sFirebaseUser); + + // SaveSmartLock + sSaveSmartLock = Mockito.mock(SaveSmartLock.class); + + // PhoneAuthProvider + sPhoneAuthProvider = Mockito.mock(PhoneAuthProvider.class); + } + + private AuthInstancesShadow() {} + + @Implementation + public static FirebaseAuth getFirebaseAuth(FlowParameters parameters) { + return sFirebaseAuth; + } + + @Implementation + public static CredentialsApi getCredentialsApi() { + return sCredentialsApi; + } + + @Implementation + public static FirebaseUser getCurrentUser(FlowParameters parameters) { + return sFirebaseUser; + } + + @Implementation + public static SaveSmartLock getSaveSmartLockInstance(FragmentActivity activity, + FlowParameters parameters) { + return sSaveSmartLock; + } + + @Implementation + public static PhoneAuthProvider getPhoneAuthProviderInstance() { + return sPhoneAuthProvider; + } + +} diff --git a/auth/src/test/java/com/firebase/ui/auth/testhelpers/BaseHelperShadow.java b/auth/src/test/java/com/firebase/ui/auth/testhelpers/BaseHelperShadow.java deleted file mode 100644 index 47af92fb6..000000000 --- a/auth/src/test/java/com/firebase/ui/auth/testhelpers/BaseHelperShadow.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.firebase.ui.auth.testhelpers; - -import android.support.v4.app.FragmentActivity; - -import com.firebase.ui.auth.ui.BaseHelper; -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 org.mockito.Mockito; -import org.robolectric.annotation.Implementation; -import org.robolectric.annotation.Implements; - -import static org.mockito.Mockito.when; - -@Implements(BaseHelper.class) -public class BaseHelperShadow { - 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); - } - if (sFirebaseAuth == null) { - sFirebaseAuth = Mockito.mock(FirebaseAuth.class); - when(sFirebaseAuth.getCurrentUser()).thenReturn(sFirebaseUser); - } - 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; - } - - @Implementation - public CredentialsApi getCredentialsApi() { - return sCredentialsApi; - } - - @Implementation - public SaveSmartLock getSaveSmartLockInstance(FragmentActivity activity) { - return sSaveSmartLock; - } - - @Implementation - public PhoneAuthProvider getPhoneAuthProviderInstance() { - 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 12344596d..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,8 +17,7 @@ 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 com.firebase.ui.auth.util.AuthInstances; import org.junit.runners.model.InitializationError; import org.robolectric.RobolectricTestRunner; @@ -34,8 +33,7 @@ public CustomRobolectricGradleTestRunner(Class klass) throws InitializationEr public InstrumentationConfiguration createClassLoaderConfig(Config config) { InstrumentationConfiguration.Builder builder = InstrumentationConfiguration.newBuilder(); - builder.addInstrumentedClass(BaseHelper.class.getName()); - builder.addInstrumentedClass(ActivityHelper.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 97c0b5baa..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(ActivityHelperShadow.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 91a92ac7a..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 @@ -19,9 +19,8 @@ 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.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; @@ -57,13 +56,14 @@ private RecoverPasswordActivity createActivity() { } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testNextButton_sendsEmail() { RecoverPasswordActivity recoverPasswordActivity = createActivity(); + Button nextButton = (Button) recoverPasswordActivity.findViewById(R.id.button_done); - when(ActivityHelperShadow.sFirebaseAuth.sendPasswordResetEmail(TestConstants.EMAIL)) + when(AuthInstancesShadow.sFirebaseAuth.sendPasswordResetEmail(TestConstants.EMAIL)) .thenReturn(new AutoCompleteTask(null, true, null)); nextButton.performClick(); - verify(ActivityHelperShadow.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 560efa0d1..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,9 +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.ActivityHelperShadow; +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; @@ -100,11 +99,10 @@ public void testSignUpButton_validatesFields() { } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.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(); @@ -120,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 27df90f1d..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 @@ -22,9 +22,8 @@ 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.AuthInstancesShadow; import com.firebase.ui.auth.testhelpers.CustomRobolectricGradleTestRunner; import com.firebase.ui.auth.testhelpers.FakeAuthResult; import com.firebase.ui.auth.testhelpers.TestConstants; @@ -90,17 +89,16 @@ public void testSignInButton_validatesFields() { } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testSignInButton_signsInAndSavesCredentials() { // initialize mocks - new ActivityHelperShadow(); - reset(ActivityHelperShadow.sSaveSmartLock); + reset(AuthInstancesShadow.sSaveSmartLock); WelcomeBackPasswordPrompt welcomeBackActivity = createActivity(); EditText passwordField = (EditText) welcomeBackActivity.findViewById(R.id.password); passwordField.setText(TestConstants.PASSWORD); - when(ActivityHelperShadow.sFirebaseAuth.signInWithEmailAndPassword( + when(AuthInstancesShadow.sFirebaseAuth.signInWithEmailAndPassword( TestConstants.EMAIL, TestConstants.PASSWORD)).thenReturn( new AutoCompleteTask<>(FakeAuthResult.INSTANCE, true, null)); @@ -108,7 +106,7 @@ public void testSignInButton_signsInAndSavesCredentials() { Button signIn = (Button) welcomeBackActivity.findViewById(R.id.button_done); signIn.performClick(); - verify(ActivityHelperShadow.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 c56a44500..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 @@ -22,9 +22,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.ActivityHelperShadow; 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; @@ -117,15 +116,14 @@ public void testPhoneLoginFlow() { } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class, AuthInstancesShadow.class}) public void testFacebookLoginFlow() { // initialize mocks - new ActivityHelperShadow(); - reset(ActivityHelperShadow.sSaveSmartLock); + reset(AuthInstancesShadow.sSaveSmartLock); - when(BaseHelperShadow.sFirebaseUser.getProviders()) + when(AuthInstancesShadow.sFirebaseUser.getProviders()) .thenReturn(Arrays.asList(FacebookAuthProvider.PROVIDER_ID)); - when(ActivityHelperShadow.sFirebaseAuth.signInWithCredential((AuthCredential) any())) + when(AuthInstancesShadow.sFirebaseAuth.signInWithCredential((AuthCredential) any())) .thenReturn(new AutoCompleteTask<>(FakeAuthResult.INSTANCE, true, null)); List providers = Arrays.asList(AuthUI.FACEBOOK_PROVIDER); @@ -140,20 +138,19 @@ public void testFacebookLoginFlow() { } @Test - @Config(shadows = {GoogleProviderShadow.class, BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {GoogleProviderShadow.class, AuthInstancesShadow.class, AuthInstancesShadow.class}) public void testGoogleLoginFlow() { // initialize mocks - new ActivityHelperShadow(); - reset(ActivityHelperShadow.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(ActivityHelperShadow.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); @@ -165,16 +162,16 @@ public void testGoogleLoginFlow() { } @Test - @Config(shadows = {ActivityHelperShadow.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(ActivityHelperShadow.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 3c2ab870a..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,22 +14,20 @@ package com.firebase.ui.auth.ui.idp; -import android.app.Activity; import android.content.Intent; 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.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.ActivityHelper; import com.firebase.ui.auth.ui.AppCompatBase; 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; @@ -61,7 +59,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"; @@ -74,10 +72,9 @@ public void setUp() { } @Test - @Config(shadows = {BaseHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testSignInSucceeded() { AppCompatBase mockActivity = mock(AppCompatBase.class); - ActivityHelper mockActivityHelper = mock(ActivityHelper.class); IdpResponse idpResponse = new IdpResponse.Builder(GoogleAuthProvider.PROVIDER_ID, TestConstants.EMAIL) .setToken(TestConstants.TOKEN) @@ -85,31 +82,25 @@ public void testSignInSucceeded() { SaveSmartLock smartLock = mock(SaveSmartLock.class); CredentialSignInHandler credentialSignInHandler = new CredentialSignInHandler( mockActivity, - mockActivityHelper, smartLock, RC_ACCOUNT_LINK, idpResponse); - when(mockActivityHelper.getFlowParams()).thenReturn( + 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); - verify(mockActivityHelper).saveCredentialsOrFinish( + verify(mockActivity).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()); @@ -119,26 +110,27 @@ public void testSignInSucceeded() { } @Test + @Config(shadows = {AuthInstancesShadow.class}) public void testSignInFailed_withFacebookAlreadyLinked() { AppCompatBase mockActivity = mock(AppCompatBase.class); - ActivityHelper mockActivityHelper = mock(ActivityHelper.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); FlowParameters mockFlowParams = mock(FlowParameters.class); - when(mockActivityHelper.getFirebaseAuth()).thenReturn(mockFirebaseAuth); - when(mockActivityHelper.getFlowParams()).thenReturn(mockFlowParams); + 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( @@ -167,31 +159,32 @@ public void testSignInFailed_withFacebookAlreadyLinked() { } @Test + @Config(shadows = {AuthInstancesShadow.class}) public void testSignInFailed_withPasswordAccountAlreadyLinked() { AppCompatBase mockActivity = mock(AppCompatBase.class); - ActivityHelper mockActivityHelper = mock(ActivityHelper.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); - Task mockTask = mock(Task.class); FlowParameters mockFlowParams = mock(FlowParameters.class); + 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); 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 + FirebaseAuth mockFirebaseAuth = AuthInstancesShadow.sFirebaseAuth; when(mockFirebaseAuth.fetchProvidersForEmail(TestConstants.EMAIL)).thenReturn( new AutoCompleteTask( new FakeProviderQueryResult( 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..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 @@ -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.AuthInstancesShadow; 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; @@ -84,6 +81,7 @@ public class PhoneVerificationActivityTest { private Button mSendCodeButton; private EditText mPhoneEditText; private CountryListSpinner mCountryListSpinner; + @Captor ArgumentCaptor callbacksArgumentCaptor; @Mock @@ -150,9 +148,9 @@ public void testBadPhoneNumber_showsInlineError() { } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testVerifyPhoneNumberInvalidPhoneException_showsInlineError() { - reset(BaseHelperShadow.sPhoneAuthProvider); + reset(AuthInstancesShadow.sPhoneAuthProvider); mActivity.verifyPhoneNumber(PHONE, false); AlertDialog alert = ShadowAlertDialog.getLatestAlertDialog(); @@ -161,7 +159,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(AuthInstancesShadow.sPhoneAuthProvider).verifyPhoneNumber(eq(PHONE), eq (AUTO_RETRIEVAL_TIMEOUT_MILLIS), eq(TimeUnit.MILLISECONDS), eq(mActivity), callbacksArgumentCaptor.capture(), isNull(PhoneAuthProvider.ForceResendingToken .class)); @@ -176,12 +174,12 @@ public void testVerifyPhoneNumberInvalidPhoneException_showsInlineError() { } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testVerifyPhoneNumberNoMsgException_showsAlertDialog() { - reset(BaseHelperShadow.sPhoneAuthProvider); + reset(AuthInstancesShadow.sPhoneAuthProvider); mActivity.verifyPhoneNumber(PHONE, false); - verify(ActivityHelperShadow.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)); @@ -196,17 +194,17 @@ public void testVerifyPhoneNumberNoMsgException_showsAlertDialog() { } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testVerifyPhoneNumber_success() { - reset(BaseHelperShadow.sPhoneAuthProvider); + reset(AuthInstancesShadow.sPhoneAuthProvider); testSendConfirmationCode(); } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testSubmitCode_badCodeShowsAlertDialog() { - reset(BaseHelperShadow.sPhoneAuthProvider); - when(ActivityHelperShadow.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"))); @@ -229,9 +227,9 @@ public void testSubmitCode_badCodeShowsAlertDialog() { } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.class}) + @Config(shadows = {AuthInstancesShadow.class}) public void testresendCode_invokesUpstream() { - reset(BaseHelperShadow.sPhoneAuthProvider); + reset(AuthInstancesShadow.sPhoneAuthProvider); testSendConfirmationCode(); //test resend code invisible @@ -249,25 +247,25 @@ public void testresendCode_invokesUpstream() { assertEquals(View.GONE, r.getVisibility()); //verify resend code was called - verify(ActivityHelperShadow.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, ActivityHelperShadow.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(ActivityHelperShadow.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(ActivityHelperShadow.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)); @@ -276,22 +274,21 @@ public void testAutoVerify() { = callbacksArgumentCaptor.getValue(); onVerificationStateChangedCallbacks.onVerificationCompleted(credential); - verify(ActivityHelperShadow.sFirebaseAuth).signInWithCredential(any(AuthCredential.class)); + verify(AuthInstancesShadow.sFirebaseAuth).signInWithCredential(any(AuthCredential.class)); } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.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(ActivityHelperShadow.sFirebaseAuth.signInWithCredential(any(AuthCredential.class))) - .thenReturn(new AutoCompleteTask(FakeAuthResult.INSTANCE - , true, null)); + when(AuthInstancesShadow.sFirebaseAuth.signInWithCredential(any(AuthCredential.class))) + .thenReturn(new AutoCompleteTask(FakeAuthResult.INSTANCE, true, null)); PhoneAuthProvider.OnVerificationStateChangedCallbacks callbacks = testSendConfirmationCode(); callbacks.onVerificationCompleted(credential); @@ -301,13 +298,13 @@ 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(AuthInstancesShadow.sFirebaseAuth).signInWithCredential(credential); } @Test - @Config(shadows = {BaseHelperShadow.class, ActivityHelperShadow.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(); @@ -326,7 +323,7 @@ public void testEditPhoneNumber_togglesFragments() { private PhoneAuthProvider.OnVerificationStateChangedCallbacks testSendConfirmationCode() { mActivity.verifyPhoneNumber(PHONE, false); - verify(ActivityHelperShadow.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));