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

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

Issue 2120973002: [Payments] Show complete profiles first and limit to 4 suggestions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Truncate to top 4 suggestions Created 4 years, 5 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 360ab4ad67ee38eef702f31cb2ffa1f82a82e97e..47fa6873468e0e40b6283ef5f99bbd29f7e21e39 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
@@ -45,6 +45,8 @@ import org.json.JSONObject;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -75,6 +77,8 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
private static final String TAG = "cr_PaymentRequest";
+ private static final int SUGGESTIONS_LIMIT = 4;
+
private static PaymentRequestServiceObserverForTest sObserverForTest;
private final Handler mHandler = new Handler();
@@ -225,7 +229,6 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
if (requestShipping) {
mAddressEditor = new AddressEditor();
List<AutofillAddress> addresses = new ArrayList<>();
- int firstCompleteAddressIndex = SectionInformation.NO_SELECTION;
for (int i = 0; i < profiles.size(); i++) {
AutofillProfile profile = profiles.get(i);
@@ -233,23 +236,41 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
boolean isComplete = mAddressEditor.isProfileComplete(profile);
addresses.add(new AutofillAddress(profile, isComplete));
- if (isComplete && firstCompleteAddressIndex == SectionInformation.NO_SELECTION
- && !mMerchantNeedsShippingAddress) {
- firstCompleteAddressIndex = i;
- }
}
- // The shipping address section automatically selects the first complete entry.
+ // Suggest complete addresses first.
+ Collections.sort(addresses, new Comparator<AutofillAddress>() {
+ @Override
+ public int compare(AutofillAddress a, AutofillAddress b) {
+ if (a.isComplete() == b.isComplete()) {
please use gerrit instead 2016/07/07 13:59:36 Make AutofillAddress and AutofillContact implement
sebsg 2016/07/08 07:54:52 Done.
+ return 0;
+ } else if (a.isComplete()) {
+ return -1;
+ } else {
+ return 1;
+ }
+ }
+ });
+
+ // Limit the number of suggestions.
+ List<AutofillAddress> topAddresses = new ArrayList<AutofillAddress>(
please use gerrit instead 2016/07/07 13:59:36 addresses = addresses.subList(0, Math.min(addresse
sebsg 2016/07/08 07:54:51 Done.
+ addresses.subList(0, Math.min(addresses.size(), SUGGESTIONS_LIMIT)));
+
+ // Automatically select the first complete address if one is present and if the merchant
+ // does not require a shipping address to calculate shipping costs.
+ int firstCompleteAddressIndex =
+ (!mMerchantNeedsShippingAddress && topAddresses.size() > 0
please use gerrit instead 2016/07/07 13:59:36 I think "!addresses.isEmpty()" is more canonical t
sebsg 2016/07/08 07:54:52 Done.
+ && topAddresses.get(0).isComplete())
+ ? 0 : SectionInformation.NO_SELECTION;
mShippingAddressesSection =
new SectionInformation(PaymentRequestUI.TYPE_SHIPPING_ADDRESSES,
- firstCompleteAddressIndex, addresses);
+ firstCompleteAddressIndex, topAddresses);
}
if (requestPayerPhone || requestPayerEmail) {
Set<String> uniqueContactInfos = new HashSet<>();
mContactEditor = new ContactEditor(requestPayerPhone, requestPayerEmail);
List<AutofillContact> contacts = new ArrayList<>();
- int firstCompleteContactIndex = SectionInformation.NO_SELECTION;
for (int i = 0; i < profiles.size(); i++) {
AutofillProfile profile = profiles.get(i);
@@ -270,17 +291,34 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
boolean isComplete =
mContactEditor.isContactInformationComplete(phone, email);
contacts.add(new AutofillContact(profile, phone, email, isComplete));
- if (isComplete
- && firstCompleteContactIndex == SectionInformation.NO_SELECTION) {
- firstCompleteContactIndex = i;
- }
}
}
}
- // The contact section automatically selects the first complete entry.
+ // Suggest complete contact infos first.
+ Collections.sort(contacts, new Comparator<AutofillContact>() {
+ @Override
+ public int compare(AutofillContact a, AutofillContact b) {
+ if (a.isComplete() == b.isComplete()) {
please use gerrit instead 2016/07/07 13:59:36 Would this be considered bad? ;-) return (a.isCom
sebsg 2016/07/08 07:54:52 I prefer the current version but I'll defer decisi
+ return 0;
+ } else if (a.isComplete()) {
+ return -1;
+ } else {
+ return 1;
+ }
+ }
+ });
+
+ // Limit the number of suggestions.
+ List<AutofillContact> topContacts = new ArrayList<AutofillContact>(
please use gerrit instead 2016/07/07 13:59:36 contacts = contacts.subList(...);
sebsg 2016/07/08 07:54:52 Done.
+ contacts.subList(0, Math.min(contacts.size(), SUGGESTIONS_LIMIT)));
+
+ // Automatically select the first complete address if one is present.
+ int firstCompleteContactIndex = (topContacts.size() > 0
please use gerrit instead 2016/07/07 13:59:36 !contacts.isEmpty()
sebsg 2016/07/08 07:54:51 Done.
+ && topContacts.get(0).isComplete())
+ ? 0 : SectionInformation.NO_SELECTION;
mContactSection = new SectionInformation(
- PaymentRequestUI.TYPE_CONTACT_DETAILS, firstCompleteContactIndex, contacts);
+ PaymentRequestUI.TYPE_CONTACT_DETAILS, firstCompleteContactIndex, topContacts);
}
mPendingApps = new ArrayList<>(mApps);

Powered by Google App Engine
This is Rietveld 408576698