Index: chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentApp.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentApp.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentApp.java |
index efaf9f0b4fe6c32aa96d0cfb9d90073f5dbc2bc8..04c6ac8305f7f9bacfddd902ed589916e8e0c441 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentApp.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentApp.java |
@@ -37,6 +37,7 @@ import org.chromium.ui.base.WindowAndroid; |
import java.io.IOException; |
import java.io.StringWriter; |
import java.util.ArrayList; |
+import java.util.Collection; |
import java.util.Collections; |
import java.util.HashSet; |
import java.util.List; |
@@ -75,6 +76,7 @@ public class AndroidPaymentApp |
private static final String EXTRA_MERCHANT_NAME = "merchantName"; |
private static final String EXTRA_METHOD_DATA = "methodData"; |
private static final String EXTRA_METHOD_NAMES = "methodNames"; |
+ private static final String EXTRA_MODIFIERS = "modifiers"; |
private static final String EXTRA_PAYMENT_REQUEST_ID = "paymentRequestId"; |
private static final String EXTRA_PAYMENT_REQUEST_ORIGIN = "paymentRequestOrigin"; |
private static final String EXTRA_TOP_LEVEL_CERTIFICATE_CHAIN = "topLevelCertificateChain"; |
@@ -337,8 +339,8 @@ public class AndroidPaymentApp |
} |
} |
- private static Bundle buildExtras(@Nullable String id, @Nullable String merchantName, |
- String origin, String iframeOrigin, @Nullable byte[][] certificateChain, |
+ private Bundle buildExtras(@Nullable String id, @Nullable String merchantName, String origin, |
gogerald1
2017/05/18 21:57:33
you may want put static back here
wuandy1
2017/05/19 01:59:57
Done.
|
+ String iframeOrigin, @Nullable byte[][] certificateChain, |
Map<String, PaymentMethodData> methodDataMap, PaymentItem total, |
@Nullable List<PaymentItem> displayItems, |
@Nullable Map<String, PaymentDetailsModifier> modifiers) { |
@@ -369,6 +371,10 @@ public class AndroidPaymentApp |
} |
extras.putParcelable(EXTRA_METHOD_DATA, methodDataBundle); |
+ if (modifiers != null) { |
+ extras.putString(EXTRA_MODIFIERS, serializeModifiers(modifiers.values())); |
+ } |
+ |
String serializedTotalAmount = serializeTotalAmount(total.amount); |
extras.putString(EXTRA_TOTAL, |
serializedTotalAmount == null ? EMPTY_JSON_DATA : serializedTotalAmount); |
@@ -490,6 +496,45 @@ public class AndroidPaymentApp |
// }}} item |
} |
+ private static String serializeModifiers(Collection<PaymentDetailsModifier> modifiers) { |
+ StringWriter stringWriter = new StringWriter(); |
+ JsonWriter json = new JsonWriter(stringWriter); |
+ try { |
+ json.beginArray(); |
+ for (PaymentDetailsModifier modifier : modifiers) { |
+ serializeModifier(modifier, json); |
+ } |
+ json.endArray(); |
+ } catch (IOException e) { |
+ return EMPTY_JSON_DATA; |
+ } |
+ return stringWriter.toString(); |
+ } |
+ |
+ private static void serializeModifier(PaymentDetailsModifier modifier, JsonWriter json) |
+ throws IOException { |
+ // {{{ |
+ json.beginObject(); |
+ |
+ if (modifier.total != null) { |
gogerald1
2017/05/18 21:57:33
I guess you would do "json.name("total").nullValue
wuandy1
2017/05/19 01:59:57
Done.
|
+ // total {{{ |
+ json.name("total"); |
+ serializePaymentItem(modifier.total, json); |
+ // }}} total |
+ } |
+ |
+ // supportedMethods {{{ |
+ json.name("supportedMethods").beginArray(); |
+ for (String method : modifier.methodData.supportedMethods) { |
+ json.value(method); |
+ } |
+ json.endArray(); |
+ // }}} supportedMethods |
+ |
+ json.endObject(); |
+ // }}} |
+ } |
+ |
@Override |
public void onIntentCompleted(WindowAndroid window, int resultCode, Intent data) { |
ThreadUtils.assertOnUiThread(); |