| Index: chrome/android/java/src/org/chromium/chrome/browser/payments/CardEditor.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/CardEditor.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/CardEditor.java
|
| index b33dcacf3bad398b61313cef0f440a05475c321c..7e52ad12d3bcdd35508668071f84d67d9388355e 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/payments/CardEditor.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/CardEditor.java
|
| @@ -67,6 +67,16 @@ public class CardEditor extends EditorBase<AutofillPaymentInstrument>
|
| }
|
| }
|
|
|
| + /** The support credit card names. */
|
| + private static final String AMEX = "amex";
|
| + private static final String DINERS = "diners";
|
| + private static final String DISCOVER = "discover";
|
| + private static final String JCB = "jcb";
|
| + private static final String MASTERCARD = "mastercard";
|
| + private static final String MIR = "mir";
|
| + private static final String UNIONPAY = "unionpay";
|
| + private static final String VISA = "visa";
|
| +
|
| /** The dropdown key that triggers the address editor to add a new billing address. */
|
| private static final String BILLING_ADDRESS_ADD_NEW = "add";
|
|
|
| @@ -161,22 +171,18 @@ public class CardEditor extends EditorBase<AutofillPaymentInstrument>
|
| }
|
|
|
| mCardTypes = new HashMap<>();
|
| - mCardTypes.put("amex",
|
| - new CardTypeInfo(R.drawable.pr_amex, R.string.autofill_cc_amex));
|
| - mCardTypes.put("diners",
|
| - new CardTypeInfo(R.drawable.pr_dinersclub, R.string.autofill_cc_diners));
|
| - mCardTypes.put("discover",
|
| - new CardTypeInfo(R.drawable.pr_discover, R.string.autofill_cc_discover));
|
| - mCardTypes.put("jcb",
|
| - new CardTypeInfo(R.drawable.pr_jcb, R.string.autofill_cc_jcb));
|
| - mCardTypes.put("mastercard",
|
| - new CardTypeInfo(R.drawable.pr_mc, R.string.autofill_cc_mastercard));
|
| - mCardTypes.put("mir",
|
| - new CardTypeInfo(R.drawable.pr_mir, R.string.autofill_cc_mir));
|
| - mCardTypes.put("unionpay",
|
| - new CardTypeInfo(R.drawable.pr_unionpay, R.string.autofill_cc_union_pay));
|
| - mCardTypes.put("visa",
|
| - new CardTypeInfo(R.drawable.pr_visa, R.string.autofill_cc_visa));
|
| + mCardTypes.put(AMEX, new CardTypeInfo(R.drawable.pr_amex, R.string.autofill_cc_amex));
|
| + mCardTypes.put(
|
| + DINERS, new CardTypeInfo(R.drawable.pr_dinersclub, R.string.autofill_cc_diners));
|
| + mCardTypes.put(
|
| + DISCOVER, new CardTypeInfo(R.drawable.pr_discover, R.string.autofill_cc_discover));
|
| + mCardTypes.put(JCB, new CardTypeInfo(R.drawable.pr_jcb, R.string.autofill_cc_jcb));
|
| + mCardTypes.put(
|
| + MASTERCARD, new CardTypeInfo(R.drawable.pr_mc, R.string.autofill_cc_mastercard));
|
| + mCardTypes.put(MIR, new CardTypeInfo(R.drawable.pr_mir, R.string.autofill_cc_mir));
|
| + mCardTypes.put(
|
| + UNIONPAY, new CardTypeInfo(R.drawable.pr_unionpay, R.string.autofill_cc_union_pay));
|
| + mCardTypes.put(VISA, new CardTypeInfo(R.drawable.pr_visa, R.string.autofill_cc_visa));
|
|
|
| mAcceptedCardTypes = new HashSet<>();
|
| mAcceptedCardTypeInfos = new ArrayList<>();
|
| @@ -190,6 +196,11 @@ public class CardEditor extends EditorBase<AutofillPaymentInstrument>
|
| PersonalDataManager.getInstance().getBasicCardPaymentType(
|
| value.toString(), true));
|
| }
|
| +
|
| + @Override
|
| + public boolean isLengthMaximum(@Nullable CharSequence value) {
|
| + return isCardNumberLengthMaximum(value);
|
| + }
|
| };
|
|
|
| mCardIconGenerator = new EditorValueIconGenerator() {
|
| @@ -213,6 +224,32 @@ public class CardEditor extends EditorBase<AutofillPaymentInstrument>
|
| mCalendar.execute();
|
| }
|
|
|
| + private boolean isCardNumberLengthMaximum(@Nullable CharSequence value) {
|
| + if (TextUtils.isEmpty(value)) return false;
|
| + String cardType =
|
| + PersonalDataManager.getInstance().getBasicCardPaymentType(value.toString(), false);
|
| + if (TextUtils.isEmpty(cardType)) return false;
|
| +
|
| + // Below maximum values are consistent with the values used to check the validity of the
|
| + // credit card number in autofill::IsValidCreditCardNumber.
|
| + String cardNumber = removeSpaceAndBar(value);
|
| + switch (cardType) {
|
| + case AMEX:
|
| + return cardNumber.length() == 15;
|
| + case DINERS:
|
| + return cardNumber.length() == 14;
|
| + case UNIONPAY:
|
| + return cardNumber.length() == 19;
|
| + default:
|
| + // Valid DISCOVER, JCB, MASTERCARD, MIR and VISA cards have at most 16 digits.
|
| + return cardNumber.length() == 16;
|
| + }
|
| + }
|
| +
|
| + private static String removeSpaceAndBar(CharSequence value) {
|
| + return value.toString().replace(" ", "").replace("-", "");
|
| + }
|
| +
|
| /**
|
| * Adds accepted payment methods to the editor, if they are recognized credit card types.
|
| *
|
| @@ -430,6 +467,11 @@ public class CardEditor extends EditorBase<AutofillPaymentInstrument>
|
| return year > mCurrentYear
|
| || (year == mCurrentYear && month >= mCurrentMonth);
|
| }
|
| +
|
| + @Override
|
| + public boolean isLengthMaximum(@Nullable CharSequence value) {
|
| + return false;
|
| + }
|
| };
|
| }
|
|
|
| @@ -612,7 +654,7 @@ public class CardEditor extends EditorBase<AutofillPaymentInstrument>
|
| return;
|
| }
|
|
|
| - card.setNumber(mNumberField.getValue().toString().replace(" ", "").replace("-", ""));
|
| + card.setNumber(removeSpaceAndBar(mNumberField.getValue()));
|
| card.setName(mNameField.getValue().toString());
|
| card.setMonth(mMonthField.getValue().toString());
|
| card.setYear(mYearField.getValue().toString());
|
|
|