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

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

Issue 2109573002: Revert of Refactor contact editor controller into its own class. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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 56f79ddacb00f2d1ddd4a39f8770ad49e2d310ec..99b9ae1703adaa483b32a27744d5d22a70ee558a 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,14 +7,20 @@
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;
@@ -129,7 +135,12 @@
private Pattern mRegionCodePattern;
private boolean mMerchantNeedsShippingAddress;
private boolean mPaymentAppRunning;
- private ContactEditor mContactEditor;
+ private boolean mRequestPayerPhone;
+ private boolean mRequestPayerEmail;
+ private List<CharSequence> mAllPhoneNumbers;
+ private List<CharSequence> mAllEmailAddresses;
+ private EditorFieldValidator mPhoneValidator;
+ private EditorFieldValidator mEmailValidator;
/**
* Builds the PaymentRequest service implementation.
@@ -216,31 +227,30 @@
mMerchantNeedsShippingAddress =
requestShipping && mUiShippingOptions.getSelectedItem() == null;
- boolean requestPayerPhone = options != null && options.requestPayerPhone;
- boolean requestPayerEmail = options != null && options.requestPayerEmail;
- if (requestPayerPhone || requestPayerEmail) {
- mContactEditor = new ContactEditor(requestPayerPhone, requestPayerEmail);
- }
-
- if (requestShipping || requestPayerPhone || requestPayerEmail) {
+ mRequestPayerPhone = options != null && options.requestPayerPhone;
+ mRequestPayerEmail = options != null && options.requestPayerEmail;
+
+ if (requestShipping || mRequestPayerPhone || mRequestPayerEmail) {
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 = requestPayerPhone && !TextUtils.isEmpty(profile.getPhoneNumber())
+ String phone = mRequestPayerPhone && !TextUtils.isEmpty(profile.getPhoneNumber())
? profile.getPhoneNumber() : null;
- String email = requestPayerEmail && !TextUtils.isEmpty(profile.getEmailAddress())
+ String email = mRequestPayerEmail && !TextUtils.isEmpty(profile.getEmailAddress())
? profile.getEmailAddress() : null;
if (phone != null || email != null) {
- boolean isComplete = mContactEditor.isContactInformationComplete(phone, email);
+ boolean isComplete = isContactInformationComplete(phone, email);
contacts.add(new AutofillContact(profile, phone, email, isComplete));
if (isComplete && firstCompleteContactIndex < 0) firstCompleteContactIndex = i;
- mContactEditor.addPhoneNumberIfValid(phone);
- mContactEditor.addEmailAddressIfValid(email);
+ if (getPhoneValidator().isValid(phone)) mAllPhoneNumbers.add(phone);
+ if (getEmailValidator().isValid(email)) mAllEmailAddresses.add(email);
}
if (canUseAddress(profile, requestShipping)) {
@@ -258,7 +268,7 @@
}
// The contact section automatically selects the first complete entry.
- if (requestPayerPhone || requestPayerEmail) {
+ if (mRequestPayerPhone || mRequestPayerEmail) {
mContactSection = new SectionInformation(
PaymentRequestUI.TYPE_CONTACT_DETAILS, firstCompleteContactIndex, contacts);
}
@@ -285,12 +295,9 @@
}
mUI = new PaymentRequestUI(mContext, this, requestShipping,
- requestPayerPhone || requestPayerEmail, mMerchantName, mOrigin);
-
+ mRequestPayerPhone || mRequestPayerEmail, mMerchantName, mOrigin);
if (mFavicon != null) mUI.setTitleBitmap(mFavicon);
mFavicon = null;
-
- if (mContactEditor != null) mContactEditor.setEditorView(mUI.getEditorView());
}
private static HashMap<String, JSONObject> getValidatedMethodData(
@@ -328,6 +335,11 @@
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()
@@ -609,6 +621,93 @@
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) {
@@ -621,21 +720,6 @@
}
}
- 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