Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4505)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java

Issue 2092083003: Refactor contact editor controller into its own class. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Match payments UI size even on large screens. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
index 99b9ae1703adaa483b32a27744d5d22a70ee558a..56f79ddacb00f2d1ddd4a39f8770ad49e2d310ec 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
@@ -7,20 +7,14 @@ package org.chromium.chrome.browser.payments;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Handler;
-import android.telephony.PhoneNumberUtils;
import android.text.TextUtils;
-import android.util.Patterns;
import org.chromium.base.Callback;
import org.chromium.base.Log;
import org.chromium.base.VisibleForTesting;
-import org.chromium.chrome.R;
import org.chromium.chrome.browser.autofill.PersonalDataManager;
import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile;
import org.chromium.chrome.browser.favicon.FaviconHelper;
-import org.chromium.chrome.browser.payments.ui.EditorFieldModel;
-import org.chromium.chrome.browser.payments.ui.EditorFieldModel.EditorFieldValidator;
-import org.chromium.chrome.browser.payments.ui.EditorModel;
import org.chromium.chrome.browser.payments.ui.LineItem;
import org.chromium.chrome.browser.payments.ui.PaymentInformation;
import org.chromium.chrome.browser.payments.ui.PaymentOption;
@@ -135,12 +129,7 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
private Pattern mRegionCodePattern;
private boolean mMerchantNeedsShippingAddress;
private boolean mPaymentAppRunning;
- private boolean mRequestPayerPhone;
- private boolean mRequestPayerEmail;
- private List<CharSequence> mAllPhoneNumbers;
- private List<CharSequence> mAllEmailAddresses;
- private EditorFieldValidator mPhoneValidator;
- private EditorFieldValidator mEmailValidator;
+ private ContactEditor mContactEditor;
/**
* Builds the PaymentRequest service implementation.
@@ -227,30 +216,31 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
mMerchantNeedsShippingAddress =
requestShipping && mUiShippingOptions.getSelectedItem() == null;
- mRequestPayerPhone = options != null && options.requestPayerPhone;
- mRequestPayerEmail = options != null && options.requestPayerEmail;
+ boolean requestPayerPhone = options != null && options.requestPayerPhone;
+ boolean requestPayerEmail = options != null && options.requestPayerEmail;
+ if (requestPayerPhone || requestPayerEmail) {
+ mContactEditor = new ContactEditor(requestPayerPhone, requestPayerEmail);
+ }
- if (requestShipping || mRequestPayerPhone || mRequestPayerEmail) {
+ if (requestShipping || requestPayerPhone || requestPayerEmail) {
List<AutofillProfile> profiles =
PersonalDataManager.getInstance().getProfilesToSuggest();
List<AutofillContact> contacts = new ArrayList<>();
List<AutofillAddress> addresses = new ArrayList<>();
- mAllPhoneNumbers = new ArrayList<>();
- mAllEmailAddresses = new ArrayList<>();
int firstCompleteContactIndex = SectionInformation.NO_SELECTION;
for (int i = 0; i < profiles.size(); i++) {
AutofillProfile profile = profiles.get(i);
- String phone = mRequestPayerPhone && !TextUtils.isEmpty(profile.getPhoneNumber())
+ String phone = requestPayerPhone && !TextUtils.isEmpty(profile.getPhoneNumber())
? profile.getPhoneNumber() : null;
- String email = mRequestPayerEmail && !TextUtils.isEmpty(profile.getEmailAddress())
+ String email = requestPayerEmail && !TextUtils.isEmpty(profile.getEmailAddress())
? profile.getEmailAddress() : null;
if (phone != null || email != null) {
- boolean isComplete = isContactInformationComplete(phone, email);
+ boolean isComplete = mContactEditor.isContactInformationComplete(phone, email);
contacts.add(new AutofillContact(profile, phone, email, isComplete));
if (isComplete && firstCompleteContactIndex < 0) firstCompleteContactIndex = i;
- if (getPhoneValidator().isValid(phone)) mAllPhoneNumbers.add(phone);
- if (getEmailValidator().isValid(email)) mAllEmailAddresses.add(email);
+ mContactEditor.addPhoneNumberIfValid(phone);
+ mContactEditor.addEmailAddressIfValid(email);
}
if (canUseAddress(profile, requestShipping)) {
@@ -268,7 +258,7 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
}
// The contact section automatically selects the first complete entry.
- if (mRequestPayerPhone || mRequestPayerEmail) {
+ if (requestPayerPhone || requestPayerEmail) {
mContactSection = new SectionInformation(
PaymentRequestUI.TYPE_CONTACT_DETAILS, firstCompleteContactIndex, contacts);
}
@@ -295,9 +285,12 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
}
mUI = new PaymentRequestUI(mContext, this, requestShipping,
- mRequestPayerPhone || mRequestPayerEmail, mMerchantName, mOrigin);
+ requestPayerPhone || requestPayerEmail, mMerchantName, mOrigin);
+
if (mFavicon != null) mUI.setTitleBitmap(mFavicon);
mFavicon = null;
+
+ if (mContactEditor != null) mContactEditor.setEditorView(mUI.getEditorView());
}
private static HashMap<String, JSONObject> getValidatedMethodData(
@@ -335,11 +328,6 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
return result;
}
- private boolean isContactInformationComplete(String phone, String email) {
- return (!mRequestPayerPhone || getPhoneValidator().isValid(phone))
- && (!mRequestPayerEmail || getEmailValidator().isValid(email));
- }
-
private boolean canUseAddress(AutofillProfile profile, boolean requestShipping) {
return requestShipping && profile.getCountryCode() != null
&& mRegionCodePattern.matcher(profile.getCountryCode()).matches()
@@ -621,93 +609,6 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
return false;
}
- private void editContact(final AutofillContact contact) {
- final EditorFieldModel phoneField = mRequestPayerPhone
- ? new EditorFieldModel(EditorFieldModel.INPUT_TYPE_HINT_PHONE,
- mContext.getString(R.string.autofill_profile_editor_phone_number),
- mAllPhoneNumbers, getPhoneValidator(),
- mContext.getString(R.string.payments_phone_required_validation_message),
- mContext.getString(R.string.payments_phone_invalid_validation_message),
- contact == null ? null : contact.getPayerPhone())
- : null;
-
- final EditorFieldModel emailField = mRequestPayerEmail
- ? new EditorFieldModel(EditorFieldModel.INPUT_TYPE_HINT_EMAIL,
- mContext.getString(R.string.autofill_profile_editor_email_address),
- mAllEmailAddresses, getEmailValidator(),
- mContext.getString(R.string.payments_email_required_validation_message),
- mContext.getString(R.string.payments_email_invalid_validation_message),
- contact == null ? null : contact.getPayerEmail())
- : null;
-
- EditorModel editor =
- new EditorModel(mContext.getString(R.string.payments_add_contact_details_label));
- if (phoneField != null) editor.addField(phoneField);
- if (emailField != null) editor.addField(emailField);
-
- editor.setCancelCallback(new Runnable() {
- @Override
- public void run() {
- mContactSection.setSelectedItemIndex(SectionInformation.NO_SELECTION);
- mUI.updateSection(PaymentRequestUI.TYPE_CONTACT_DETAILS, mContactSection);
- }
- });
-
- editor.setDoneCallback(new Runnable() {
- @Override
- public void run() {
- AutofillProfile profile =
- contact != null ? contact.getProfile() : new AutofillProfile();
- String phone = null;
- String email = null;
- if (phoneField != null) {
- phone = phoneField.getValue().toString();
- profile.setPhoneNumber(phone);
- }
- if (emailField != null) {
- email = emailField.getValue().toString();
- profile.setEmailAddress(email);
- }
- PersonalDataManager.getInstance().setProfile(profile);
-
- if (contact == null) {
- mContactSection.addAndSelectItem(
- new AutofillContact(profile, phone, email, true));
- } else {
- contact.completeContact(phone, email);
- }
- mUI.updateSection(PaymentRequestUI.TYPE_CONTACT_DETAILS, mContactSection);
- }
- });
- mUI.showEditor(editor);
- }
-
- private EditorFieldValidator getPhoneValidator() {
- if (mPhoneValidator == null) {
- mPhoneValidator = new EditorFieldValidator() {
- @Override
- public boolean isValid(CharSequence value) {
- return value != null
- && PhoneNumberUtils.isGlobalPhoneNumber(
- PhoneNumberUtils.stripSeparators(value.toString()));
- }
- };
- }
- return mPhoneValidator;
- }
-
- private EditorFieldValidator getEmailValidator() {
- if (mEmailValidator == null) {
- mEmailValidator = new EditorFieldValidator() {
- @Override
- public boolean isValid(CharSequence value) {
- return value != null && Patterns.EMAIL_ADDRESS.matcher(value).matches();
- }
- };
- }
- return mEmailValidator;
- }
-
@Override
public void onSectionAddOption(@PaymentRequestUI.DataType int optionType) {
if (optionType == PaymentRequestUI.TYPE_SHIPPING_ADDRESSES) {
@@ -720,6 +621,21 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
}
}
+ private void editContact(final AutofillContact toEdit) {
+ mContactEditor.editContact(toEdit, new Callback<AutofillContact>() {
+ @Override
+ public void onResult(AutofillContact completeContact) {
+ if (completeContact == null) {
+ mContactSection.setSelectedItemIndex(SectionInformation.NO_SELECTION);
+ } else if (toEdit == null) {
+ mContactSection.addAndSelectItem(completeContact);
+ }
+
+ mUI.updateSection(PaymentRequestUI.TYPE_CONTACT_DETAILS, mContactSection);
+ }
+ });
+ }
+
@Override
public void onPayClicked(PaymentOption selectedShippingAddress,
PaymentOption selectedShippingOption, PaymentOption selectedPaymentMethod) {

Powered by Google App Engine
This is Rietveld 408576698