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

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

Issue 2093363002: Autofill address editor in PaymentRequest UI. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@contact-editor
Patch Set: Fix try-bot 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/AutofillAddress.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillAddress.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillAddress.java
index 4ce8321c60f52fbd0d314acafd0f0386b7601b8b..599ce7b352d9217a26e254b0acfba636df203db0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillAddress.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillAddress.java
@@ -4,21 +4,24 @@
package org.chromium.chrome.browser.payments;
+import android.text.TextUtils;
+
import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile;
import org.chromium.chrome.browser.payments.ui.PaymentOption;
import org.chromium.mojom.payments.PaymentAddress;
+import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import javax.annotation.Nullable;
+
/**
* The locally stored autofill address.
*/
public class AutofillAddress extends PaymentOption {
- /**
- * The pattern for a valid region code.
- */
- public static final String REGION_CODE_PATTERN = "^[A-Z]{2}$";
+ /** The pattern for a valid region code. */
+ private static final String REGION_CODE_PATTERN = "^[A-Z]{2}$";
// Language/script code pattern and capture group numbers.
private static final String LANGUAGE_SCRIPT_CODE_PATTERN =
@@ -26,39 +29,61 @@ public class AutofillAddress extends PaymentOption {
private static final int LANGUAGE_CODE_GROUP = 1;
private static final int SCRIPT_CODE_GROUP = 3;
- private final AutofillProfile mProfile;
- private Matcher mLanguageScriptCodeMatcher;
+ @Nullable private static Pattern sRegionCodePattern;
+
+ private AutofillProfile mProfile;
+ private boolean mIsComplete;
+ @Nullable private Pattern mLanguageScriptCodePattern;
/**
- * Builds for the autofill address.
+ * Builds the autofill address.
+ *
+ * @param profile The autofill profile containing the address information.
*/
- public AutofillAddress(AutofillProfile profile) {
- super(profile.getGUID(), profile.getLabel(), profile.getFullName(), PaymentOption.NO_ICON);
-
- assert profile.getCountryCode() != null : "Country code should not be null";
- assert Pattern.compile(REGION_CODE_PATTERN).matcher(profile.getCountryCode()).matches()
- : "Country code should be in valid format";
-
- assert profile.getStreetAddress() != null : "Street address should not be null";
- assert profile.getRegion() != null : "Region should not be null";
- assert profile.getLocality() != null : "Locality should not be null";
- assert profile.getDependentLocality() != null : "Dependent locality should not be null";
- assert profile.getPostalCode() != null : "Postal code should not be null";
- assert profile.getSortingCode() != null : "Sorting code should not be null";
- assert profile.getCompanyName() != null : "Company name should not be null";
- assert profile.getFullName() != null : "Full name should not be null";
- assert profile.getPhoneNumber() != null : "Phone number should not be null";
-
+ public AutofillAddress(AutofillProfile profile, boolean isComplete) {
+ super(profile.getGUID(), profile.getFullName(), profile.getLabel(), PaymentOption.NO_ICON);
mProfile = profile;
+ mIsComplete = isComplete;
+ }
+
+ /** @return Whether the data is complete and can be sent to the merchant as-is. */
+ public boolean isComplete() {
+ return mIsComplete;
+ }
+
+ /** @return The autofill profile where this address data lives. */
+ public AutofillProfile getProfile() {
+ return mProfile;
}
/**
- * Returns the shipping address for mojo.
+ * Updates the address and marks it "complete." Called after the user has edited this address.
+ * Updates the label and sublabel.
+ *
+ * @param profile The new profile to use. The GUID should not change.
*/
+ public void completeAddress(AutofillProfile profile) {
+ assert profile.getGUID().equals(mProfile.getGUID());
+ mProfile = profile;
+ mIsComplete = true;
+ updateLabels(mProfile.getFullName(), mProfile.getLabel());
+ }
+
+ /** @return The country code to use, e.g., when constructing an editor for this address. */
+ public static String getCountryCode(@Nullable AutofillProfile profile) {
+ if (sRegionCodePattern == null) sRegionCodePattern = Pattern.compile(REGION_CODE_PATTERN);
+
+ return profile == null || TextUtils.isEmpty(profile.getCountryCode())
+ || !sRegionCodePattern.matcher(profile.getCountryCode()).matches()
+ ? Locale.getDefault().getCountry() : profile.getCountryCode();
+ }
+
+ /** @return The address for the merchant. */
public PaymentAddress toPaymentAddress() {
+ assert mIsComplete;
PaymentAddress result = new PaymentAddress();
- result.country = mProfile.getCountryCode();
+ result.country = getCountryCode(mProfile);
result.addressLine = mProfile.getStreetAddress().split("\n");
result.region = mProfile.getRegion();
result.city = mProfile.getLocality();
@@ -74,19 +99,20 @@ public class AutofillAddress extends PaymentOption {
if (mProfile.getLanguageCode() == null) return result;
- if (mLanguageScriptCodeMatcher == null) {
- mLanguageScriptCodeMatcher = Pattern.compile(LANGUAGE_SCRIPT_CODE_PATTERN)
- .matcher(mProfile.getLanguageCode());
+ if (mLanguageScriptCodePattern == null) {
+ mLanguageScriptCodePattern = Pattern.compile(LANGUAGE_SCRIPT_CODE_PATTERN);
}
- if (mLanguageScriptCodeMatcher.matches()) {
- String languageCode = mLanguageScriptCodeMatcher.group(LANGUAGE_CODE_GROUP);
- result.languageCode = languageCode != null ? languageCode : "";
-
- String scriptCode = mLanguageScriptCodeMatcher.group(SCRIPT_CODE_GROUP);
- result.scriptCode = scriptCode != null ? scriptCode : "";
+ Matcher matcher = mLanguageScriptCodePattern.matcher(mProfile.getLanguageCode());
+ if (matcher.matches()) {
+ result.languageCode = ensureNotNull(matcher.group(LANGUAGE_CODE_GROUP));
+ result.scriptCode = ensureNotNull(matcher.group(SCRIPT_CODE_GROUP));
}
return result;
}
+
+ private static String ensureNotNull(@Nullable String value) {
+ return value == null ? "" : value;
+ }
}

Powered by Google App Engine
This is Rietveld 408576698