Skip to content

Commit 6b740bc

Browse files
lsiracsamtstern
authored andcommitted
Added main ToS/PP (#1300)
1 parent ae1e29e commit 6b740bc

21 files changed

+561
-282
lines changed

auth/src/main/java/com/firebase/ui/auth/data/model/FlowParameters.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import android.support.annotation.Nullable;
2222
import android.support.annotation.RestrictTo;
2323
import android.support.annotation.StyleRes;
24+
import android.text.TextUtils;
2425

2526
import com.firebase.ui.auth.AuthUI.IdpConfig;
2627
import com.firebase.ui.auth.util.ExtraConstants;
@@ -128,4 +129,16 @@ public FlowParameters[] newArray(int size) {
128129
return new FlowParameters[size];
129130
}
130131
};
132+
133+
public boolean isSingleProviderFlow() {
134+
return providerInfo.size() == 1;
135+
}
136+
137+
public boolean isTermsOfServiceUrlProvided() {
138+
return !TextUtils.isEmpty(termsOfServiceUrl);
139+
}
140+
141+
public boolean isPrivacyPolicyUrlProvided() {
142+
return !TextUtils.isEmpty(privacyPolicyUrl);
143+
}
131144
}

auth/src/main/java/com/firebase/ui/auth/data/remote/SignInKickstarter.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,9 @@ public void onComplete(@NonNull Task<CredentialRequestResponse> task) {
9191
}
9292

9393
private void startAuthMethodChoice() {
94-
List<AuthUI.IdpConfig> idpConfigs = getArguments().providerInfo;
95-
9694
// If there is only one provider selected, launch the flow directly
97-
if (idpConfigs.size() == 1) {
98-
AuthUI.IdpConfig firstIdpConfig = idpConfigs.get(0);
95+
if (getArguments().isSingleProviderFlow()) {
96+
AuthUI.IdpConfig firstIdpConfig = getArguments().providerInfo.get(0);
9997
String firstProvider = firstIdpConfig.getProviderId();
10098
switch (firstProvider) {
10199
case EmailAuthProvider.PROVIDER_ID:

auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,14 @@
1313
import android.view.View;
1414
import android.view.ViewGroup;
1515
import android.widget.EditText;
16+
import android.widget.TextView;
1617

1718
import com.firebase.ui.auth.R;
19+
import com.firebase.ui.auth.data.model.FlowParameters;
1820
import com.firebase.ui.auth.data.model.User;
1921
import com.firebase.ui.auth.ui.FragmentBase;
2022
import com.firebase.ui.auth.util.ExtraConstants;
23+
import com.firebase.ui.auth.util.data.PrivacyDisclosureUtils;
2124
import com.firebase.ui.auth.util.ui.ImeHelper;
2225
import com.firebase.ui.auth.util.ui.fieldvalidators.EmailFieldValidator;
2326
import com.firebase.ui.auth.viewmodel.ResourceObserver;
@@ -96,6 +99,21 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
9699
}
97100

98101
view.findViewById(R.id.button_next).setOnClickListener(this);
102+
103+
TextView termsText = view.findViewById(R.id.email_tos_and_pp_text);
104+
TextView footerText = view.findViewById(R.id.email_footer_tos_and_pp_text);
105+
FlowParameters flowParameters = getFlowParams();
106+
107+
if (flowParameters.isSingleProviderFlow()) {
108+
PrivacyDisclosureUtils.setupTermsOfServiceAndPrivacyPolicyText(getContext(),
109+
flowParameters,
110+
termsText);
111+
} else {
112+
termsText.setVisibility(View.GONE);
113+
PrivacyDisclosureUtils.setupTermsOfServiceFooter(getContext(),
114+
flowParameters,
115+
footerText);
116+
}
99117
}
100118

101119
@Override

auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
import com.firebase.ui.auth.data.model.User;
2121
import com.firebase.ui.auth.ui.FragmentBase;
2222
import com.firebase.ui.auth.util.ExtraConstants;
23+
import com.firebase.ui.auth.util.data.PrivacyDisclosureUtils;
2324
import com.firebase.ui.auth.util.data.ProviderUtils;
2425
import com.firebase.ui.auth.util.ui.ImeHelper;
25-
import com.firebase.ui.auth.util.ui.PreambleHandler;
2626
import com.firebase.ui.auth.util.ui.fieldvalidators.BaseValidator;
2727
import com.firebase.ui.auth.util.ui.fieldvalidators.EmailFieldValidator;
2828
import com.firebase.ui.auth.util.ui.fieldvalidators.NoOpValidator;
@@ -80,7 +80,9 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
8080
@Override
8181
protected void onSuccess(@NonNull IdpResponse response) {
8282
startSaveCredentials(
83-
mHandler.getCurrentUser(), response, mPasswordEditText.getText().toString());
83+
mHandler.getCurrentUser(),
84+
response,
85+
mPasswordEditText.getText().toString());
8486
}
8587

8688
@Override
@@ -140,16 +142,17 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
140142
// Only show the name field if required
141143
nameInput.setVisibility(requireName ? View.VISIBLE : View.GONE);
142144

143-
PreambleHandler.setup(
144-
getContext(),
145-
getFlowParams(),
146-
R.string.fui_button_text_save,
147-
view.<TextView>findViewById(R.id.create_account_text));
148145
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && getFlowParams().enableCredentials) {
149146
mEmailEditText.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO);
150147
}
151148

152-
if (savedInstanceState != null) { return; }
149+
TextView footerText = view.findViewById(R.id.email_footer_tos_and_pp_text);
150+
PrivacyDisclosureUtils.setupTermsOfServiceFooter(getContext(), getFlowParams(), footerText);
151+
152+
// WARNING: Nothing below this line will be executed on rotation
153+
if (savedInstanceState != null) {
154+
return;
155+
}
153156

154157
// If email is passed in, fill in the field and move down to the name field.
155158
String email = mUser.getEmail();
@@ -233,11 +236,11 @@ private void validateAndRegisterUser() {
233236
boolean nameValid = mNameValidator.validate(name);
234237
if (emailValid && passwordValid && nameValid) {
235238
mHandler.startSignIn(new IdpResponse.Builder(
236-
new User.Builder(EmailAuthProvider.PROVIDER_ID, email)
237-
.setName(name)
238-
.setPhotoUri(mUser.getPhotoUri())
239-
.build())
240-
.build(),
239+
new User.Builder(EmailAuthProvider.PROVIDER_ID, email)
240+
.setName(name)
241+
.setPhotoUri(mUser.getPhotoUri())
242+
.build())
243+
.build(),
241244
password);
242245
}
243246
}

auth/src/main/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivity.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import android.view.View;
2929
import android.view.ViewGroup;
3030
import android.widget.ImageView;
31+
import android.widget.TextView;
3132
import android.widget.Toast;
3233

3334
import com.firebase.ui.auth.AuthUI;
@@ -42,6 +43,7 @@
4243
import com.firebase.ui.auth.data.remote.PhoneSignInHandler;
4344
import com.firebase.ui.auth.data.remote.TwitterSignInHandler;
4445
import com.firebase.ui.auth.ui.AppCompatBase;
46+
import com.firebase.ui.auth.util.data.PrivacyDisclosureUtils;
4547
import com.firebase.ui.auth.viewmodel.ResourceObserver;
4648
import com.firebase.ui.auth.viewmodel.idp.ProviderSignInBase;
4749
import com.firebase.ui.auth.viewmodel.idp.SocialProviderResponseHandler;
@@ -106,6 +108,11 @@ protected void onFailure(@NonNull Exception e) {
106108
}
107109
}
108110
});
111+
112+
TextView termsText = findViewById(R.id.main_tos_and_pp);
113+
PrivacyDisclosureUtils.setupTermsOfServiceAndPrivacyPolicyText(this,
114+
getFlowParams(),
115+
termsText);
109116
}
110117

111118
private void populateIdpList(List<IdpConfig> providerConfigs,

auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneActivity.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
9191
mPhoneNumber = savedInstanceState.getString(KEY_VERIFICATION_PHONE);
9292

9393
if (savedInstanceState.getSerializable(KEY_STATE) != null) {
94-
mVerificationState = (VerificationState) savedInstanceState.getSerializable(KEY_STATE);
94+
mVerificationState = (VerificationState) savedInstanceState.getSerializable(
95+
KEY_STATE);
9596
}
9697
return;
9798
}
@@ -165,7 +166,8 @@ public void submitConfirmationCode(@NonNull String confirmationCode) {
165166
// See: https://github.com/firebase/FirebaseUI-Android/issues/922
166167
Log.w(PHONE_VERIFICATION_LOG_TAG,
167168
String.format("submitConfirmationCode: mVerificationId is %s ; " +
168-
"confirmationCode is %s", TextUtils.isEmpty(mVerificationId) ? "empty" : "not empty",
169+
"confirmationCode is %s",
170+
TextUtils.isEmpty(mVerificationId) ? "empty" : "not empty",
169171
TextUtils.isEmpty(confirmationCode) ? "empty" : "not empty"));
170172
return;
171173
}
@@ -311,7 +313,8 @@ private void showAlertDialog(@StringRes int messageId,
311313
String s = getString(messageId);
312314
mAlertDialog = new AlertDialog.Builder(this)
313315
.setMessage(s)
314-
.setPositiveButton(R.string.fui_incorrect_code_dialog_positive_button_text, onClickListener)
316+
.setPositiveButton(R.string.fui_incorrect_code_dialog_positive_button_text,
317+
onClickListener)
315318
.show();
316319
}
317320

@@ -351,7 +354,8 @@ public void onFailure(@NonNull Exception e) {
351354
R.string.fui_incorrect_code_dialog_body,
352355
new DialogInterface.OnClickListener() {
353356
@Override
354-
public void onClick(DialogInterface dialog, int which) {
357+
public void onClick(DialogInterface dialog,
358+
int which) {
355359
getSubmitConfirmationCodeFragment()
356360
.setConfirmationCode("");
357361
}
@@ -362,7 +366,8 @@ public void onClick(DialogInterface dialog, int which) {
362366
R.string.fui_error_session_expired,
363367
new DialogInterface.OnClickListener() {
364368
@Override
365-
public void onClick(DialogInterface dialog, int which) {
369+
public void onClick(DialogInterface dialog,
370+
int which) {
366371
getSubmitConfirmationCodeFragment()
367372
.setConfirmationCode("");
368373
}

auth/src/main/java/com/firebase/ui/auth/ui/phone/SubmitConfirmationCodeFragment.java

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@
3434
import com.firebase.ui.auth.ui.FragmentBase;
3535
import com.firebase.ui.auth.util.CustomCountDownTimer;
3636
import com.firebase.ui.auth.util.ExtraConstants;
37+
import com.firebase.ui.auth.util.data.PrivacyDisclosureUtils;
3738
import com.firebase.ui.auth.util.ui.BucketedTextChangeListener;
3839
import com.firebase.ui.auth.util.ui.ImeHelper;
39-
import com.firebase.ui.auth.util.ui.PreambleHandler;
4040

4141
/**
4242
* Display confirmation code to verify phone numbers input in {{@link VerifyPhoneNumberFragment}}
@@ -56,7 +56,6 @@ public class SubmitConfirmationCodeFragment extends FragmentBase {
5656
private Button mSubmitConfirmationButton;
5757
private CustomCountDownTimer mCountdownTimer;
5858
private PhoneActivity mVerifier;
59-
private TextView mAgreementText;
6059
private long mMillisUntilFinished;
6160

6261
public static SubmitConfirmationCodeFragment newInstance(FlowParameters flowParameters,
@@ -73,8 +72,9 @@ public static SubmitConfirmationCodeFragment newInstance(FlowParameters flowPara
7372

7473
@Nullable
7574
@Override
76-
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable
77-
Bundle savedInstanceState) {
75+
public View onCreateView(@NonNull LayoutInflater inflater,
76+
@Nullable ViewGroup container,
77+
@Nullable Bundle savedInstanceState) {
7878
View v = inflater.inflate(R.layout.fui_confirmation_code_layout, container, false);
7979
FragmentActivity parentActivity = getActivity();
8080

@@ -83,7 +83,6 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c
8383
mResendCodeTextView = v.findViewById(R.id.resend_code);
8484
mConfirmationCodeEditText = v.findViewById(R.id.confirmation_code);
8585
mSubmitConfirmationButton = v.findViewById(R.id.submit_confirmation_code);
86-
mAgreementText = v.findViewById(R.id.create_account_tos);
8786

8887
final String phoneNumber = getArguments().getString(ExtraConstants.PHONE);
8988

@@ -93,10 +92,16 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c
9392
setupCountDown(RESEND_WAIT_MILLIS);
9493
setupSubmitConfirmationCodeButton();
9594
setupResendConfirmationCodeTextView(phoneNumber);
96-
setUpTermsOfService();
9795
return v;
9896
}
9997

98+
@Override
99+
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
100+
super.onViewCreated(view, savedInstanceState);
101+
TextView footerText = view.<TextView>findViewById(R.id.email_footer_tos_and_pp_text);
102+
PrivacyDisclosureUtils.setupTermsOfServiceFooter(getContext(), getFlowParams(), footerText);
103+
}
104+
100105
@Override
101106
public void onStart() {
102107
super.onStart();
@@ -221,13 +226,6 @@ private void cancelTimer() {
221226
}
222227
}
223228

224-
private void setUpTermsOfService() {
225-
PreambleHandler.setup(getContext(),
226-
getFlowParams(),
227-
R.string.fui_continue_phone_login,
228-
mAgreementText);
229-
}
230-
231229
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
232230
CustomCountDownTimer getCountdownTimer() {
233231
return mCountdownTimer;

auth/src/main/java/com/firebase/ui/auth/ui/phone/VerifyPhoneNumberFragment.java

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import com.firebase.ui.auth.util.ExtraConstants;
4242
import com.firebase.ui.auth.util.GoogleApiUtils;
4343
import com.firebase.ui.auth.util.data.PhoneNumberUtils;
44+
import com.firebase.ui.auth.util.data.PrivacyDisclosureUtils;
4445
import com.firebase.ui.auth.util.ui.ImeHelper;
4546
import com.firebase.ui.auth.viewmodel.RequestCodes;
4647
import com.google.android.gms.auth.api.credentials.Credential;
@@ -55,7 +56,6 @@
5556
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
5657
public class VerifyPhoneNumberFragment extends FragmentBase implements View.OnClickListener {
5758
public static final String TAG = "VerifyPhoneFragment";
58-
5959
private Context mAppContext;
6060

6161
private CountryListSpinner mCountryListSpinner;
@@ -107,15 +107,14 @@ public void onDonePressed() {
107107
parentActivity.setTitle(getString(R.string.fui_verify_phone_number_title));
108108
setupCountrySpinner();
109109
setupSendCodeButton();
110-
setupTerms();
111-
112110
return v;
113111
}
114112

115-
private void setupTerms() {
116-
final String verifyPhoneButtonText = getString(R.string.fui_verify_phone_number);
117-
final String terms = getString(R.string.fui_sms_terms_of_service, verifyPhoneButtonText);
118-
mSmsTermsText.setText(terms);
113+
@Override
114+
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
115+
super.onViewCreated(view, savedInstanceState);
116+
TextView footerText = view.<TextView>findViewById(R.id.email_footer_tos_and_pp_text);
117+
setupPrivacyDisclosures(footerText);
119118
}
120119

121120
@Override
@@ -273,6 +272,24 @@ private void setCountryCode(PhoneNumber phoneNumber) {
273272
}
274273
}
275274

275+
private void setupPrivacyDisclosures(TextView footerText) {
276+
final String verifyPhoneButtonText = getString(R.string.fui_verify_phone_number);
277+
final String multipleProviderFlowText = getString(R.string.fui_sms_terms_of_service,
278+
verifyPhoneButtonText);
279+
FlowParameters flowParameters = getFlowParams();
280+
281+
if (flowParameters.isSingleProviderFlow()) {
282+
PrivacyDisclosureUtils.setupTermsOfServiceAndPrivacyPolicySmsText(getContext(),
283+
flowParameters,
284+
mSmsTermsText);
285+
} else {
286+
PrivacyDisclosureUtils.setupTermsOfServiceFooter(getContext(),
287+
flowParameters,
288+
footerText);
289+
mSmsTermsText.setText(multipleProviderFlowText);
290+
}
291+
}
292+
276293
void showError(String e) {
277294
mPhoneInputLayout.setError(e);
278295
}

0 commit comments

Comments
 (0)