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

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

Issue 2116583002: Credit card editor for PaymentRequest UI. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update comments in personal_data_manager_android.h Created 4 years, 5 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 360ab4ad67ee38eef702f31cb2ffa1f82a82e97e..873d552c67cbf5faaac6e67e83ad3672e23b9252 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
@@ -21,8 +21,6 @@ import org.chromium.chrome.browser.payments.ui.PaymentOption;
import org.chromium.chrome.browser.payments.ui.PaymentRequestUI;
import org.chromium.chrome.browser.payments.ui.SectionInformation;
import org.chromium.chrome.browser.payments.ui.ShoppingCart;
-import org.chromium.chrome.browser.preferences.PreferencesLauncher;
-import org.chromium.chrome.browser.preferences.autofill.AutofillLocalCardEditor;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.util.UrlUtilities;
import org.chromium.components.safejson.JsonSanitizer;
@@ -66,6 +64,12 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
* Called when an abort request was denied.
*/
void onPaymentRequestServiceUnableToAbort();
+
+ /**
+ * Called when the controller is notified of billing address change, but does not alter the
+ * editor UI.
+ */
+ void onPaymentRequestServiceProcessBillingAddressChange();
gone 2016/07/13 21:13:00 Changed?
please use gerrit instead 2016/07/14 17:21:44 onPaymentRequestServiceBillingAddressChangeProcess
}
/**
@@ -121,6 +125,7 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
private SectionInformation mShippingAddressesSection;
private SectionInformation mContactSection;
private List<PaymentApp> mPendingApps;
+ private int mFirstCompletePendingInstrument;
private List<PaymentInstrument> mPendingInstruments;
private SectionInformation mPaymentMethodsSection;
private PaymentRequestUI mUI;
@@ -128,6 +133,7 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
private boolean mMerchantNeedsShippingAddress;
private boolean mPaymentAppRunning;
private AddressEditor mAddressEditor;
+ private CardEditor mCardEditor;
private ContactEditor mContactEditor;
/**
@@ -169,6 +175,9 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
});
mApps = PaymentAppFactory.create(webContents);
+
+ mAddressEditor = new AddressEditor();
+ mCardEditor = new CardEditor(webContents, mAddressEditor, sObserverForTest);
}
/**
@@ -200,7 +209,7 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
return;
}
- mMethodData = getValidatedMethodData(methodData);
+ mMethodData = getValidatedMethodData(methodData, mCardEditor);
if (mMethodData == null) {
disconnectFromClientWithDebugMessage("Invalid payment methods or data");
return;
@@ -223,7 +232,6 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
}
if (requestShipping) {
- mAddressEditor = new AddressEditor();
List<AutofillAddress> addresses = new ArrayList<>();
int firstCompleteAddressIndex = SectionInformation.NO_SELECTION;
@@ -284,6 +292,7 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
}
mPendingApps = new ArrayList<>(mApps);
+ mFirstCompletePendingInstrument = SectionInformation.NO_SELECTION;
mPendingInstruments = new ArrayList<>();
boolean isGettingInstruments = false;
@@ -309,12 +318,13 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
if (mFavicon != null) mUI.setTitleBitmap(mFavicon);
mFavicon = null;
- if (mAddressEditor != null) mAddressEditor.setEditorView(mUI.getEditorView());
+ mAddressEditor.setEditorView(mUI.getEditorView());
+ mCardEditor.setEditorView(mUI.getCardEditorView());
if (mContactEditor != null) mContactEditor.setEditorView(mUI.getEditorView());
}
private static HashMap<String, JSONObject> getValidatedMethodData(
- PaymentMethodData[] methodData) {
+ PaymentMethodData[] methodData, CardEditor paymentMethodsCollector) {
// Payment methodData are required.
if (methodData == null || methodData.length == 0) return null;
HashMap<String, JSONObject> result = new HashMap<>();
@@ -344,6 +354,8 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
if (TextUtils.isEmpty(methods[j])) return null;
result.put(methods[j], data);
}
+
+ paymentMethodsCollector.addAcceptedPaymentMethodsIfRecognized(methods);
}
return result;
}
@@ -625,6 +637,15 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
}
} else if (optionType == PaymentRequestUI.TYPE_PAYMENT_METHODS) {
assert option instanceof PaymentInstrument;
+ if (option instanceof AutofillPaymentInstrument) {
+ AutofillPaymentInstrument card = (AutofillPaymentInstrument) option;
+
+ if (!card.isComplete()) {
+ editCard(card);
+ return false;
+ }
+ }
+
mPaymentMethodsSection.setSelectedItem(option);
}
@@ -644,8 +665,7 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
} else if (optionType == PaymentRequestUI.TYPE_CONTACT_DETAILS) {
editContact(null);
} else if (optionType == PaymentRequestUI.TYPE_PAYMENT_METHODS) {
- PreferencesLauncher.launchSettingsPage(
- mContext, AutofillLocalCardEditor.class.getName());
+ editCard(null);
}
return false;
@@ -691,6 +711,21 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
});
}
+ private void editCard(final AutofillPaymentInstrument toEdit) {
+ mCardEditor.edit(toEdit, new Callback<AutofillPaymentInstrument>() {
+ @Override
+ public void onResult(AutofillPaymentInstrument completeCard) {
+ if (completeCard == null) {
+ mPaymentMethodsSection.setSelectedItemIndex(SectionInformation.NO_SELECTION);
+ } else if (toEdit == null) {
+ mPaymentMethodsSection.addAndSelectItem(completeCard);
+ }
+
+ mUI.updateSection(PaymentRequestUI.TYPE_PAYMENT_METHODS, mPaymentMethodsSection);
+ }
+ });
+ }
+
@Override
public void onPayClicked(PaymentOption selectedShippingAddress,
PaymentOption selectedShippingOption, PaymentOption selectedPaymentMethod) {
@@ -763,6 +798,7 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
for (int i = 0; i < instruments.size(); i++) {
PaymentInstrument instrument = instruments.get(i);
if (mMethodData.containsKey(instrument.getMethodName())) {
+ checkForCompletePaymentInstrument(instrument, mPendingInstruments.size());
mPendingInstruments.add(instrument);
} else {
instrument.dismiss();
@@ -771,14 +807,27 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
}
if (mPendingApps.isEmpty()) {
- mPaymentMethodsSection = new SectionInformation(
- PaymentRequestUI.TYPE_PAYMENT_METHODS, 0, mPendingInstruments);
+ mPaymentMethodsSection = new SectionInformation(PaymentRequestUI.TYPE_PAYMENT_METHODS,
+ mFirstCompletePendingInstrument, mPendingInstruments);
mPendingInstruments.clear();
if (mPaymentInformationCallback != null) providePaymentInformation();
}
}
+ private void checkForCompletePaymentInstrument(PaymentInstrument instrument, int index) {
+ boolean isComplete = true;
+ if (instrument instanceof AutofillPaymentInstrument) {
+ AutofillPaymentInstrument autofillInstrument = (AutofillPaymentInstrument) instrument;
+ isComplete = mCardEditor.isCardComplete(autofillInstrument.getCard());
+ if (isComplete) autofillInstrument.setIsComplete();
+ }
+
+ if (isComplete && mFirstCompletePendingInstrument == SectionInformation.NO_SELECTION) {
+ mFirstCompletePendingInstrument = index;
+ }
+ }
+
/**
* Called after retrieving instrument details.
*/

Powered by Google App Engine
This is Rietveld 408576698