| 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 e9e7a9bdb24f958a355d957d08d7ea74dd19df2e..4ee1d34efcee5c4dbcbdaa74cc9d94b2fee958ab 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
|
| @@ -120,8 +120,11 @@ public class CardEditor extends EditorBase<AutofillPaymentInstrument>
|
| @Nullable private EditorFieldModel mBillingAddressField;
|
| @Nullable private EditorFieldModel mSaveCardCheckbox;
|
| @Nullable private CreditCardScanner mCardScanner;
|
| + @Nullable private EditorFieldValidator mCardExpirationMonthValidator;
|
| private boolean mCanScan;
|
| private boolean mIsScanning;
|
| + private int mCurrentMonth;
|
| + private int mCurrentYear;
|
|
|
| /**
|
| * Builds a credit card editor.
|
| @@ -403,10 +406,42 @@ public class CardEditor extends EditorBase<AutofillPaymentInstrument>
|
|
|
| // Expiration month dropdown.
|
| if (mMonthField == null) {
|
| + mCurrentYear = calendar.get(Calendar.YEAR);
|
| + // The month in calendar is 0 based but the month value is 1 based.
|
| + mCurrentMonth = calendar.get(Calendar.MONTH) + 1;
|
| +
|
| + if (mCardExpirationMonthValidator == null) {
|
| + mCardExpirationMonthValidator = new EditorFieldValidator() {
|
| + @Override
|
| + public boolean isValid(@Nullable CharSequence monthValue) {
|
| + CharSequence yearValue = mYearField.getValue();
|
| + if (monthValue == null || yearValue == null) return false;
|
| +
|
| + int month = Integer.parseInt(monthValue.toString());
|
| + int year = Integer.parseInt(yearValue.toString());
|
| +
|
| + return year > mCurrentYear
|
| + || (year == mCurrentYear && month >= mCurrentMonth);
|
| + }
|
| + };
|
| + }
|
| +
|
| mMonthField = EditorFieldModel.createDropdown(
|
| mContext.getString(R.string.autofill_credit_card_editor_expiration_date),
|
| - buildMonthDropdownKeyValues(calendar));
|
| + buildMonthDropdownKeyValues(calendar),
|
| + mCardExpirationMonthValidator,
|
| + mContext.getString(
|
| + R.string.payments_card_expiration_invalid_validation_message));
|
| mMonthField.setIsFullLine(false);
|
| +
|
| + if (mObserverForTest != null) {
|
| + mMonthField.setDropdownCallback(new Callback<Pair<String, Runnable>>() {
|
| + @Override
|
| + public void onResult(final Pair<String, Runnable> eventData) {
|
| + mObserverForTest.onPaymentRequestServiceExpirationMonthChange();
|
| + }
|
| + });
|
| + }
|
| }
|
| if (mMonthField.getDropdownKeys().contains(card.getMonth())) {
|
| mMonthField.setValue(card.getMonth());
|
|
|