Index: chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillContact.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillContact.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillContact.java |
index 667d2585e1162d0a0dc9f0b6c70fd61904141227..fe6881dfbe145218c094450d67ca8746c98a5b75 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillContact.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillContact.java |
@@ -19,6 +19,10 @@ import javax.annotation.Nullable; |
public class AutofillContact extends PaymentOption { |
private final AutofillProfile mProfile; |
private final Context mContext; |
+ private int mCompletionStatus; |
+ private boolean mRequestName; |
+ private boolean mRequestPhone; |
+ private boolean mRequestEmail; |
@Nullable private String mPayerName; |
@Nullable private String mPayerPhone; |
@Nullable private String mPayerEmail; |
@@ -33,13 +37,20 @@ public class AutofillContact extends PaymentOption { |
* @param email The email address. If name and phone are empty, this will be the |
* primary label. |
* @param completionStatus The completion status of this contact. |
+ * @param requestName Whether the merchant requests a payer name. |
+ * @param requestPhone Whether the merchant requests a payer phone number. |
+ * @param requestEmail Whether the merchant requests a payer email address. |
*/ |
public AutofillContact(Context context, AutofillProfile profile, @Nullable String name, |
@Nullable String phone, @Nullable String email, |
- @ContactEditor.CompletionStatus int completionStatus) { |
+ @ContactEditor.CompletionStatus int completionStatus, boolean requestName, |
+ boolean requestPhone, boolean requestEmail) { |
super(profile.getGUID(), null, null, null, null); |
mContext = context; |
mProfile = profile; |
+ mRequestName = requestName; |
+ mRequestPhone = requestPhone; |
+ mRequestEmail = requestEmail; |
mIsEditable = true; |
setContactInfo(profile.getGUID(), name, phone, email); |
updateCompletionStatus(completionStatus); |
@@ -50,16 +61,17 @@ public class AutofillContact extends PaymentOption { |
return mPayerName; |
} |
- /** @return Email address. Null if the merchant did not request it or data is incomplete. */ |
- @Nullable public String getPayerEmail() { |
- return mPayerEmail; |
- } |
- |
/** @return Phone number. Null if the merchant did not request it or data is incomplete. */ |
@Nullable public String getPayerPhone() { |
return mPayerPhone; |
} |
+ /** @return Email address. Null if the merchant did not request it or data is incomplete. */ |
+ @Nullable |
+ public String getPayerEmail() { |
+ return mPayerEmail; |
+ } |
+ |
/** @return The autofill profile where this contact data lives. */ |
public AutofillProfile getProfile() { |
return mProfile; |
@@ -87,6 +99,58 @@ public class AutofillContact extends PaymentOption { |
updateCompletionStatus(ContactEditor.COMPLETE); |
} |
+ /** |
+ * Returns whether this contact is equal or a superset of the specified contact considering the |
+ * information requested by the merchant. |
+ * |
+ * @param contact The contact to compare to. |
+ * @return Whether this contact is equal to or a superset of the other. |
+ */ |
+ public boolean isEqualOrSupersetOf(AutofillContact contact) { |
please use gerrit instead
2017/01/05 18:59:23
nit: assert contact != null;
sebsg
2017/01/05 19:29:12
Done.
|
+ // This contact is not equal to or a superset of the other if for a requested field: |
+ // 1- This contact's field is null and the other's is not. |
+ // 2- The field values are not equal. |
+ if (mRequestName) { |
+ if (mPayerName == null && contact.mPayerName != null) return false; |
+ if (mPayerName != null && contact.mPayerName != null |
+ && !mPayerName.equalsIgnoreCase(contact.mPayerName)) { |
+ return false; |
+ } |
+ } |
+ |
+ if (mRequestPhone) { |
+ if (mPayerPhone == null && contact.mPayerPhone != null) return false; |
+ if (mPayerPhone != null && contact.mPayerPhone != null |
+ && !TextUtils.equals(mPayerPhone, contact.mPayerPhone)) { |
+ return false; |
+ } |
+ } |
+ |
+ if (mRequestEmail) { |
+ if (mPayerEmail == null && contact.mPayerEmail != null) return false; |
+ if (mPayerEmail != null && contact.mPayerEmail != null |
+ && !mPayerEmail.equalsIgnoreCase(contact.mPayerEmail)) { |
+ return false; |
+ } |
+ } |
+ |
+ return true; |
+ } |
+ |
+ /** |
+ * @return Returns the relevance score of this contact, based on the validity of the information |
+ * requested by the merchant. |
+ */ |
+ public int getRelevanceScore() { |
+ int score = 0; |
+ |
+ if (mRequestName && (mCompletionStatus & ContactEditor.INVALID_NAME) == 0) ++score; |
+ if (mRequestPhone && (mCompletionStatus & ContactEditor.INVALID_PHONE_NUMBER) == 0) ++score; |
+ if (mRequestEmail && (mCompletionStatus & ContactEditor.INVALID_EMAIL) == 0) ++score; |
+ |
+ return score; |
+ } |
+ |
private void setContactInfo(String guid, @Nullable String name, |
@Nullable String phone, @Nullable String email) { |
mPayerName = TextUtils.isEmpty(name) ? null : name; |
@@ -104,6 +168,7 @@ public class AutofillContact extends PaymentOption { |
} |
private void updateCompletionStatus(int completionStatus) { |
+ mCompletionStatus = completionStatus; |
mIsComplete = completionStatus == ContactEditor.COMPLETE; |
switch (completionStatus) { |
@@ -123,12 +188,11 @@ public class AutofillContact extends PaymentOption { |
mEditMessage = mContext.getString(R.string.payments_phone_number_required); |
mEditTitle = mContext.getString(R.string.payments_add_phone_number); |
break; |
- case ContactEditor.INVALID_MULTIPLE_FIELDS: |
+ default: |
+ // Multiple invalid fields. |
mEditMessage = mContext.getString(R.string.payments_more_information_required); |
mEditTitle = mContext.getString(R.string.payments_add_more_information); |
break; |
- default: |
- assert false : "Invalid completion status code"; |
} |
} |
} |