| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser.payments; | 5 package org.chromium.chrome.browser.payments; |
| 6 | 6 |
| 7 import android.text.TextUtils; |
| 7 import android.util.JsonWriter; | 8 import android.util.JsonWriter; |
| 8 | 9 |
| 9 import org.chromium.chrome.browser.autofill.PersonalDataManager; | 10 import org.chromium.chrome.browser.autofill.PersonalDataManager; |
| 11 import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile; |
| 10 import org.chromium.chrome.browser.autofill.PersonalDataManager.CreditCard; | 12 import org.chromium.chrome.browser.autofill.PersonalDataManager.CreditCard; |
| 11 import org.chromium.chrome.browser.autofill.PersonalDataManager.FullCardRequestD
elegate; | 13 import org.chromium.chrome.browser.autofill.PersonalDataManager.FullCardRequestD
elegate; |
| 12 import org.chromium.content_public.browser.WebContents; | 14 import org.chromium.content_public.browser.WebContents; |
| 13 import org.chromium.mojom.payments.PaymentItem; | 15 import org.chromium.mojom.payments.PaymentItem; |
| 14 | 16 |
| 15 import org.json.JSONObject; | 17 import org.json.JSONObject; |
| 16 | 18 |
| 17 import java.io.IOException; | 19 import java.io.IOException; |
| 18 import java.io.StringWriter; | 20 import java.io.StringWriter; |
| 19 import java.util.List; | 21 import java.util.List; |
| 20 | 22 |
| 23 import javax.annotation.Nullable; |
| 24 |
| 21 /** | 25 /** |
| 22 * The locally stored credit card payment instrument. | 26 * The locally stored credit card payment instrument. |
| 23 */ | 27 */ |
| 24 public class AutofillPaymentInstrument | 28 public class AutofillPaymentInstrument |
| 25 extends PaymentInstrument implements FullCardRequestDelegate { | 29 extends PaymentInstrument implements FullCardRequestDelegate { |
| 26 private final WebContents mWebContents; | 30 private final WebContents mWebContents; |
| 27 private final CreditCard mCard; | 31 private final CreditCard mCard; |
| 28 private DetailsCallback mCallback; | 32 @Nullable private AutofillProfile mBillingAddress; |
| 33 @Nullable private DetailsCallback mCallback; |
| 29 | 34 |
| 30 /** | 35 /** |
| 31 * Builds a payment instrument for the given credit card. | 36 * Builds a payment instrument for the given credit card. |
| 32 * | 37 * |
| 33 * @param webContents The web contents where PaymentRequest was invoked. | 38 * @param webContents The web contents where PaymentRequest was invoked. |
| 34 * @param card The autofill card that can be used for payment. | 39 * @param card The autofill card that can be used for payment. |
| 40 * @param billingAddress The optional billing address for the card. |
| 35 */ | 41 */ |
| 36 public AutofillPaymentInstrument(WebContents webContents, CreditCard card) { | 42 public AutofillPaymentInstrument( |
| 43 WebContents webContents, CreditCard card, @Nullable AutofillProfile
billingAddress) { |
| 37 super(card.getGUID(), card.getObfuscatedNumber(), card.getName(), | 44 super(card.getGUID(), card.getObfuscatedNumber(), card.getName(), |
| 38 card.getIssuerIconDrawableId()); | 45 card.getIssuerIconDrawableId()); |
| 39 mWebContents = webContents; | 46 mWebContents = webContents; |
| 40 mCard = card; | 47 mCard = card; |
| 48 mBillingAddress = billingAddress; |
| 41 } | 49 } |
| 42 | 50 |
| 43 @Override | 51 @Override |
| 44 public String getMethodName() { | 52 public String getMethodName() { |
| 45 return mCard.getBasicCardPaymentType(); | 53 return mCard.getBasicCardPaymentType(); |
| 46 } | 54 } |
| 47 | 55 |
| 48 @Override | 56 @Override |
| 49 public void getDetails(String unusedMerchantName, String unusedOrigin, Payme
ntItem unusedTotal, | 57 public void getDetails(String unusedMerchantName, String unusedOrigin, Payme
ntItem unusedTotal, |
| 50 List<PaymentItem> unusedCart, JSONObject unusedDetails, DetailsCallb
ack callback) { | 58 List<PaymentItem> unusedCart, JSONObject unusedDetails, DetailsCallb
ack callback) { |
| 51 assert mCallback == null; | 59 assert mCallback == null; |
| 52 mCallback = callback; | 60 mCallback = callback; |
| 53 PersonalDataManager.getInstance().getFullCard(mWebContents, mCard.getGUI
D(), this); | 61 PersonalDataManager.getInstance().getFullCard(mWebContents, mCard.getGUI
D(), this); |
| 54 } | 62 } |
| 55 | 63 |
| 56 @Override | 64 @Override |
| 57 public void onFullCardDetails(CreditCard card, String cvc) { | 65 public void onFullCardDetails(CreditCard card, String cvc) { |
| 58 StringWriter stringWriter = new StringWriter(); | 66 StringWriter stringWriter = new StringWriter(); |
| 59 JsonWriter json = new JsonWriter(stringWriter); | 67 JsonWriter json = new JsonWriter(stringWriter); |
| 60 try { | 68 try { |
| 61 json.beginObject(); | 69 json.beginObject(); |
| 70 |
| 62 json.name("cardholderName").value(card.getName()); | 71 json.name("cardholderName").value(card.getName()); |
| 63 json.name("cardNumber").value(card.getNumber()); | 72 json.name("cardNumber").value(card.getNumber()); |
| 64 json.name("expiryMonth").value(card.getMonth()); | 73 json.name("expiryMonth").value(card.getMonth()); |
| 65 json.name("expiryYear").value(card.getYear()); | 74 json.name("expiryYear").value(card.getYear()); |
| 66 json.name("cardSecurityCode").value(cvc); | 75 json.name("cardSecurityCode").value(cvc); |
| 76 |
| 77 if (mBillingAddress != null) { |
| 78 json.name("billingAddress").beginObject(); |
| 79 |
| 80 json.name("country").value(ensureNotNull(mBillingAddress.getCoun
tryCode())); |
| 81 json.name("region").value(ensureNotNull(mBillingAddress.getRegio
n())); |
| 82 json.name("city").value(ensureNotNull(mBillingAddress.getLocalit
y())); |
| 83 json.name("dependentLocality") |
| 84 .value(ensureNotNull(mBillingAddress.getDependentLocalit
y())); |
| 85 |
| 86 json.name("addressLine").beginArray(); |
| 87 String multipleLines = ensureNotNull(mBillingAddress.getStreetAd
dress()); |
| 88 if (!TextUtils.isEmpty(multipleLines)) { |
| 89 String[] lines = multipleLines.split("\n"); |
| 90 for (int i = 0; i < lines.length; i++) { |
| 91 json.value(lines[i]); |
| 92 } |
| 93 } |
| 94 json.endArray(); |
| 95 |
| 96 json.name("postalCode").value(ensureNotNull(mBillingAddress.getP
ostalCode())); |
| 97 json.name("sortingCode").value(ensureNotNull(mBillingAddress.get
SortingCode())); |
| 98 json.name("languageCode").value(ensureNotNull(mBillingAddress.ge
tLanguageCode())); |
| 99 json.name("organization").value(ensureNotNull(mBillingAddress.ge
tCompanyName())); |
| 100 json.name("recipient").value(ensureNotNull(mBillingAddress.getFu
llName())); |
| 101 json.name("careOf").value(""); |
| 102 json.name("phone").value(ensureNotNull(mBillingAddress.getPhoneN
umber())); |
| 103 |
| 104 json.endObject(); |
| 105 } |
| 106 |
| 67 json.endObject(); | 107 json.endObject(); |
| 68 } catch (IOException e) { | 108 } catch (IOException e) { |
| 69 mCallback.onInstrumentDetailsError(); | 109 mCallback.onInstrumentDetailsError(); |
| 70 return; | 110 return; |
| 71 } | 111 } |
| 72 | 112 |
| 73 mCallback.onInstrumentDetailsReady(card.getBasicCardPaymentType(), strin
gWriter.toString()); | 113 mCallback.onInstrumentDetailsReady(card.getBasicCardPaymentType(), strin
gWriter.toString()); |
| 74 } | 114 } |
| 75 | 115 |
| 116 private static String ensureNotNull(@Nullable String value) { |
| 117 return value == null ? "" : value; |
| 118 } |
| 119 |
| 76 @Override | 120 @Override |
| 77 public void onFullCardError() { | 121 public void onFullCardError() { |
| 78 mCallback.onInstrumentDetailsError(); | 122 mCallback.onInstrumentDetailsError(); |
| 79 } | 123 } |
| 80 | 124 |
| 81 @Override | 125 @Override |
| 82 public void dismiss() {} | 126 public void dismiss() {} |
| 83 } | 127 } |
| OLD | NEW |