| 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 f0b64a2576ae3011b17fb7aa72cf8c38da984f8d..f1b2243623f7849350ffa9cb086c8f3b0dfa9d06 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
|
| @@ -357,107 +357,11 @@ public class PaymentRequestImpl
|
| }
|
|
|
| if (requestShipping) {
|
| - List<AutofillAddress> addresses = new ArrayList<>();
|
| -
|
| - for (int i = 0; i < profiles.size(); i++) {
|
| - AutofillProfile profile = profiles.get(i);
|
| - mAddressEditor.addPhoneNumberIfValid(profile.getPhoneNumber());
|
| -
|
| - // Only suggest addresses that have a street address.
|
| - if (!TextUtils.isEmpty(profile.getStreetAddress())) {
|
| - addresses.add(new AutofillAddress(mContext, profile));
|
| - }
|
| - }
|
| -
|
| - // Suggest complete addresses first.
|
| - Collections.sort(addresses, COMPLETENESS_COMPARATOR);
|
| -
|
| - // Limit the number of suggestions.
|
| - addresses = addresses.subList(0, Math.min(addresses.size(), SUGGESTIONS_LIMIT));
|
| -
|
| - // Load the validation rules for each unique region code.
|
| - Set<String> uniqueCountryCodes = new HashSet<>();
|
| - for (int i = 0; i < addresses.size(); ++i) {
|
| - String countryCode = AutofillAddress.getCountryCode(addresses.get(i).getProfile());
|
| - if (!uniqueCountryCodes.contains(countryCode)) {
|
| - uniqueCountryCodes.add(countryCode);
|
| - PersonalDataManager.getInstance().loadRulesForRegion(countryCode);
|
| - }
|
| - }
|
| -
|
| - // Log the number of suggested shipping addresses.
|
| - mJourneyLogger.setNumberOfSuggestionsShown(
|
| - PaymentRequestJourneyLogger.SECTION_SHIPPING_ADDRESS, addresses.size());
|
| -
|
| - // Automatically select the first address if one is complete and if the merchant does
|
| - // not require a shipping address to calculate shipping costs.
|
| - int firstCompleteAddressIndex = SectionInformation.NO_SELECTION;
|
| - if (mUiShippingOptions.getSelectedItem() != null && !addresses.isEmpty()
|
| - && addresses.get(0).isComplete()) {
|
| - firstCompleteAddressIndex = 0;
|
| -
|
| - // The initial label for the selected shipping address should not include the
|
| - // country.
|
| - addresses.get(firstCompleteAddressIndex).setShippingAddressLabelWithoutCountry();
|
| - }
|
| -
|
| - mShippingAddressesSection = new SectionInformation(
|
| - PaymentRequestUI.TYPE_SHIPPING_ADDRESSES,
|
| - firstCompleteAddressIndex, addresses);
|
| + createShippingSection(profiles);
|
| }
|
|
|
| if (requestPayerName || requestPayerPhone || requestPayerEmail) {
|
| - Set<String> uniqueContactInfos = new HashSet<>();
|
| - mContactEditor = new ContactEditor(
|
| - requestPayerName, requestPayerPhone, requestPayerEmail);
|
| - List<AutofillContact> contacts = new ArrayList<>();
|
| -
|
| - for (int i = 0; i < profiles.size(); i++) {
|
| - AutofillProfile profile = profiles.get(i);
|
| - String name = requestPayerName && !TextUtils.isEmpty(profile.getFullName())
|
| - ? profile.getFullName() : null;
|
| - String phone = requestPayerPhone && !TextUtils.isEmpty(profile.getPhoneNumber())
|
| - ? profile.getPhoneNumber() : null;
|
| - String email = requestPayerEmail && !TextUtils.isEmpty(profile.getEmailAddress())
|
| - ? profile.getEmailAddress() : null;
|
| - mContactEditor.addPayerNameIfValid(name);
|
| - mContactEditor.addPhoneNumberIfValid(phone);
|
| - mContactEditor.addEmailAddressIfValid(email);
|
| -
|
| - if (name != null || phone != null || email != null) {
|
| - // Different profiles can have identical contact info. Do not add the same
|
| - // contact info to the list twice.
|
| - String uniqueContactInfo = name + phone + email;
|
| - if (!uniqueContactInfos.contains(uniqueContactInfo)) {
|
| - uniqueContactInfos.add(uniqueContactInfo);
|
| -
|
| - @ContactEditor.CompletionStatus
|
| - int completionStatus =
|
| - mContactEditor.checkContactCompletionStatus(name, phone, email);
|
| - contacts.add(new AutofillContact(
|
| - mContext, profile, name, phone, email, completionStatus));
|
| - }
|
| - }
|
| - }
|
| -
|
| - // Suggest complete contact infos first.
|
| - Collections.sort(contacts, COMPLETENESS_COMPARATOR);
|
| -
|
| - // Limit the number of suggestions.
|
| - contacts = contacts.subList(0, Math.min(contacts.size(), SUGGESTIONS_LIMIT));
|
| -
|
| - // Log the number of suggested contact infos.
|
| - mJourneyLogger.setNumberOfSuggestionsShown(
|
| - PaymentRequestJourneyLogger.SECTION_CONTACT_INFO, contacts.size());
|
| -
|
| - // Automatically select the first address if it is complete.
|
| - int firstCompleteContactIndex = SectionInformation.NO_SELECTION;
|
| - if (!contacts.isEmpty() && contacts.get(0).isComplete()) {
|
| - firstCompleteContactIndex = 0;
|
| - }
|
| -
|
| - mContactSection = new SectionInformation(
|
| - PaymentRequestUI.TYPE_CONTACT_DETAILS, firstCompleteContactIndex, contacts);
|
| + createContactSection(profiles, requestPayerName, requestPayerPhone, requestPayerEmail);
|
| }
|
|
|
| mUI = new PaymentRequestUI(mContext, this, requestShipping,
|
| @@ -481,6 +385,112 @@ public class PaymentRequestImpl
|
| requestPayerPhone, requestShipping, requestPayerName);
|
| }
|
|
|
| + private void createShippingSection(List<AutofillProfile> profiles) {
|
| + List<AutofillAddress> addresses = new ArrayList<>();
|
| +
|
| + for (int i = 0; i < profiles.size(); i++) {
|
| + AutofillProfile profile = profiles.get(i);
|
| + mAddressEditor.addPhoneNumberIfValid(profile.getPhoneNumber());
|
| +
|
| + // Only suggest addresses that have a street address.
|
| + if (!TextUtils.isEmpty(profile.getStreetAddress())) {
|
| + addresses.add(new AutofillAddress(mContext, profile));
|
| + }
|
| + }
|
| +
|
| + // Suggest complete addresses first.
|
| + Collections.sort(addresses, COMPLETENESS_COMPARATOR);
|
| +
|
| + // Limit the number of suggestions.
|
| + addresses = addresses.subList(0, Math.min(addresses.size(), SUGGESTIONS_LIMIT));
|
| +
|
| + // Load the validation rules for each unique region code.
|
| + Set<String> uniqueCountryCodes = new HashSet<>();
|
| + for (int i = 0; i < addresses.size(); ++i) {
|
| + String countryCode = AutofillAddress.getCountryCode(addresses.get(i).getProfile());
|
| + if (!uniqueCountryCodes.contains(countryCode)) {
|
| + uniqueCountryCodes.add(countryCode);
|
| + PersonalDataManager.getInstance().loadRulesForRegion(countryCode);
|
| + }
|
| + }
|
| +
|
| + // Log the number of suggested shipping addresses.
|
| + mJourneyLogger.setNumberOfSuggestionsShown(
|
| + PaymentRequestJourneyLogger.SECTION_SHIPPING_ADDRESS, addresses.size());
|
| +
|
| + // Automatically select the first address if one is complete and if the merchant does
|
| + // not require a shipping address to calculate shipping costs.
|
| + int firstCompleteAddressIndex = SectionInformation.NO_SELECTION;
|
| + if (mUiShippingOptions.getSelectedItem() != null && !addresses.isEmpty()
|
| + && addresses.get(0).isComplete()) {
|
| + firstCompleteAddressIndex = 0;
|
| +
|
| + // The initial label for the selected shipping address should not include the
|
| + // country.
|
| + addresses.get(firstCompleteAddressIndex).setShippingAddressLabelWithoutCountry();
|
| + }
|
| +
|
| + mShippingAddressesSection = new SectionInformation(
|
| + PaymentRequestUI.TYPE_SHIPPING_ADDRESSES, firstCompleteAddressIndex, addresses);
|
| + }
|
| +
|
| + private void createContactSection(List<AutofillProfile> profiles, boolean requestName,
|
| + boolean requestPhone, boolean requestEmail) {
|
| + Set<String> uniqueContactInfos = new HashSet<>();
|
| + mContactEditor = new ContactEditor(requestName, requestPhone, requestEmail);
|
| + List<AutofillContact> contacts = new ArrayList<>();
|
| +
|
| + for (int i = 0; i < profiles.size(); i++) {
|
| + AutofillProfile profile = profiles.get(i);
|
| + String name = requestName && !TextUtils.isEmpty(profile.getFullName())
|
| + ? profile.getFullName()
|
| + : null;
|
| + String phone = requestPhone && !TextUtils.isEmpty(profile.getPhoneNumber())
|
| + ? profile.getPhoneNumber()
|
| + : null;
|
| + String email = requestEmail && !TextUtils.isEmpty(profile.getEmailAddress())
|
| + ? profile.getEmailAddress()
|
| + : null;
|
| + mContactEditor.addPayerNameIfValid(name);
|
| + mContactEditor.addPhoneNumberIfValid(phone);
|
| + mContactEditor.addEmailAddressIfValid(email);
|
| +
|
| + if (name != null || phone != null || email != null) {
|
| + // Different profiles can have identical contact info. Do not add the same
|
| + // contact info to the list twice.
|
| + String uniqueContactInfo = name + phone + email;
|
| + if (!uniqueContactInfos.contains(uniqueContactInfo)) {
|
| + uniqueContactInfos.add(uniqueContactInfo);
|
| +
|
| + @ContactEditor.CompletionStatus
|
| + int completionStatus =
|
| + mContactEditor.checkContactCompletionStatus(name, phone, email);
|
| + contacts.add(new AutofillContact(
|
| + mContext, profile, name, phone, email, completionStatus));
|
| + }
|
| + }
|
| + }
|
| +
|
| + // Suggest complete contact infos first.
|
| + Collections.sort(contacts, COMPLETENESS_COMPARATOR);
|
| +
|
| + // Limit the number of suggestions.
|
| + contacts = contacts.subList(0, Math.min(contacts.size(), SUGGESTIONS_LIMIT));
|
| +
|
| + // Log the number of suggested contact infos.
|
| + mJourneyLogger.setNumberOfSuggestionsShown(
|
| + PaymentRequestJourneyLogger.SECTION_CONTACT_INFO, contacts.size());
|
| +
|
| + // Automatically select the first address if it is complete.
|
| + int firstCompleteContactIndex = SectionInformation.NO_SELECTION;
|
| + if (!contacts.isEmpty() && contacts.get(0).isComplete()) {
|
| + firstCompleteContactIndex = 0;
|
| + }
|
| +
|
| + mContactSection = new SectionInformation(
|
| + PaymentRequestUI.TYPE_CONTACT_DETAILS, firstCompleteContactIndex, contacts);
|
| + }
|
| +
|
| /**
|
| * Called by the merchant website to show the payment request to the user.
|
| */
|
|
|