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

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

Issue 2530793002: PaymentApp: Allow multiple payment method names for one instrument. (Closed)
Patch Set: Created 4 years 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 unified diff | Download patch
OLDNEW
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.app.Activity; 7 import android.app.Activity;
8 import android.graphics.Bitmap; 8 import android.graphics.Bitmap;
9 import android.os.Handler; 9 import android.os.Handler;
10 import android.support.v4.util.ArrayMap; 10 import android.support.v4.util.ArrayMap;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 import org.chromium.payments.mojom.PaymentRequest; 48 import org.chromium.payments.mojom.PaymentRequest;
49 import org.chromium.payments.mojom.PaymentRequestClient; 49 import org.chromium.payments.mojom.PaymentRequestClient;
50 import org.chromium.payments.mojom.PaymentResponse; 50 import org.chromium.payments.mojom.PaymentResponse;
51 import org.chromium.payments.mojom.PaymentShippingOption; 51 import org.chromium.payments.mojom.PaymentShippingOption;
52 import org.chromium.payments.mojom.PaymentShippingType; 52 import org.chromium.payments.mojom.PaymentShippingType;
53 53
54 import java.util.ArrayList; 54 import java.util.ArrayList;
55 import java.util.Arrays; 55 import java.util.Arrays;
56 import java.util.Collections; 56 import java.util.Collections;
57 import java.util.Comparator; 57 import java.util.Comparator;
58 import java.util.HashMap;
58 import java.util.HashSet; 59 import java.util.HashSet;
59 import java.util.List; 60 import java.util.List;
60 import java.util.Locale; 61 import java.util.Locale;
61 import java.util.Map; 62 import java.util.Map;
62 import java.util.Set; 63 import java.util.Set;
63 64
64 /** 65 /**
65 * Android implementation of the PaymentRequest service defined in 66 * Android implementation of the PaymentRequest service defined in
66 * components/payments/payment_request.mojom. 67 * components/payments/payment_request.mojom.
67 */ 68 */
(...skipping 832 matching lines...) Expand 10 before | Expand all | Expand 10 after
900 } else if (toEdit == null) { 901 } else if (toEdit == null) {
901 mPaymentMethodsSection.addAndSelectItem(completeCard); 902 mPaymentMethodsSection.addAndSelectItem(completeCard);
902 } 903 }
903 904
904 mUI.updateSection(PaymentRequestUI.TYPE_PAYMENT_METHODS, mPaymen tMethodsSection); 905 mUI.updateSection(PaymentRequestUI.TYPE_PAYMENT_METHODS, mPaymen tMethodsSection);
905 } 906 }
906 }); 907 });
907 } 908 }
908 909
909 @Override 910 @Override
910 public void loadingInstrumentDetails() { 911 public void onInstrumentDetailsLoading() {
911 if (mClient == null || mUI == null || mPaymentResponseHelper == null) re turn; 912 if (mClient == null || mUI == null || mPaymentResponseHelper == null) re turn;
912 913
913 mUI.showProcessingMessage(); 914 mUI.showProcessingMessage();
914 mPaymentResponseHelper.onInstrumentsDetailsLoading(); 915 mPaymentResponseHelper.onInstrumentsDetailsLoading();
915 } 916 }
916 917
917 @Override 918 @Override
918 public boolean onPayClicked(PaymentOption selectedShippingAddress, 919 public boolean onPayClicked(PaymentOption selectedShippingAddress,
919 PaymentOption selectedShippingOption, PaymentOption selectedPaymentM ethod) { 920 PaymentOption selectedShippingOption, PaymentOption selectedPaymentM ethod) {
920 assert selectedPaymentMethod instanceof PaymentInstrument; 921 assert selectedPaymentMethod instanceof PaymentInstrument;
921 PaymentInstrument instrument = (PaymentInstrument) selectedPaymentMethod ; 922 PaymentInstrument instrument = (PaymentInstrument) selectedPaymentMethod ;
922 mPaymentAppRunning = true; 923 mPaymentAppRunning = true;
923 924
924 PaymentOption selectedContact = 925 PaymentOption selectedContact =
925 mContactSection != null ? mContactSection.getSelectedItem() : nu ll; 926 mContactSection != null ? mContactSection.getSelectedItem() : nu ll;
926 mPaymentResponseHelper = new PaymentResponseHelper( 927 mPaymentResponseHelper = new PaymentResponseHelper(
927 selectedShippingAddress, selectedShippingOption, selectedContact , this); 928 selectedShippingAddress, selectedShippingOption, selectedContact , this);
928 929
929 instrument.getInstrumentDetails(mMerchantName, mOrigin, mRawTotal, mRawL ineItems, 930 // Create a map that is the subset of mMethodData that contains the
930 mMethodData.get(instrument.getInstrumentMethodName()), this); 931 // payment methods supported by the selected payment instrument. If this
932 // intersection contains more than one payment method, the payment app i s
933 // at liberty to choose (or have the user choose) one of the methods.
934 Map<String, PaymentMethodData> methodData = new HashMap<>();
935 for (String instrumentMethodName : instrument.getInstrumentMethodNames() ) {
936 if (mMethodData.containsKey(instrumentMethodName)) {
937 methodData.put(instrumentMethodName, mMethodData.get(instrumentM ethodName));
938 }
939 }
940
941 instrument.invokePayment(mMerchantName, mOrigin, mRawTotal, mRawLineItem s,
942 methodData, this);
please use gerrit instead 2016/11/29 14:17:18 Wrap methodData in Collections.unmodifiableMap().
tommyt 2016/11/30 10:15:50 Done.
931 recordSuccessFunnelHistograms("PayClicked"); 943 recordSuccessFunnelHistograms("PayClicked");
932 return !(instrument instanceof AutofillPaymentInstrument); 944 return !(instrument instanceof AutofillPaymentInstrument);
933 } 945 }
934 946
935 @Override 947 @Override
936 public void onDismiss() { 948 public void onDismiss() {
937 disconnectFromClientWithDebugMessage("Dialog dismissed"); 949 disconnectFromClientWithDebugMessage("Dialog dismissed");
938 closeUI(true); 950 closeUI(true);
939 recordAbortReasonHistogram(PaymentRequestMetrics.ABORT_REASON_ABORTED_BY _USER); 951 recordAbortReasonHistogram(PaymentRequestMetrics.ABORT_REASON_ABORTED_BY _USER);
940 } 952 }
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
1051 */ 1063 */
1052 @Override 1064 @Override
1053 public void onInstrumentsReady(PaymentApp app, List<PaymentInstrument> instr uments) { 1065 public void onInstrumentsReady(PaymentApp app, List<PaymentInstrument> instr uments) {
1054 if (mClient == null) return; 1066 if (mClient == null) return;
1055 mPendingApps.remove(app); 1067 mPendingApps.remove(app);
1056 1068
1057 // Place the instruments into either "autofill" or "non-autofill" list t o be displayed when 1069 // Place the instruments into either "autofill" or "non-autofill" list t o be displayed when
1058 // all apps have responded. 1070 // all apps have responded.
1059 if (instruments != null) { 1071 if (instruments != null) {
1060 for (int i = 0; i < instruments.size(); i++) { 1072 for (int i = 0; i < instruments.size(); i++) {
1073 boolean added = false;
1061 PaymentInstrument instrument = instruments.get(i); 1074 PaymentInstrument instrument = instruments.get(i);
1062 if (mMethodData.containsKey(instrument.getInstrumentMethodName() )) { 1075 // If at least one of the payment method names supported by the
1063 addPendingInstrument(instrument); 1076 // instrument is in mMethodData, add this instrument.
please use gerrit instead 2016/11/29 14:17:18 Your approach is 9 lines long. Here's a shorter wa
tommyt 2016/11/30 10:15:50 Done.
1064 } else { 1077 for (String instrumentMethodName : instrument.getInstrumentMetho dNames()) {
1078 if (mMethodData.containsKey(instrumentMethodName)) {
1079 addPendingInstrument(instrument);
1080 added = true;
1081 break;
1082 }
1083 }
1084 // ... otherwise get rid of it.
1085 if (!added) {
1065 instrument.dismissInstrument(); 1086 instrument.dismissInstrument();
1066 } 1087 }
1067 } 1088 }
1068 } 1089 }
1069 1090
1070 // Some payment apps still have not responded. Continue waiting for them . 1091 // Some payment apps still have not responded. Continue waiting for them .
1071 if (!mPendingApps.isEmpty()) return; 1092 if (!mPendingApps.isEmpty()) return;
1072 1093
1073 if (disconnectIfNoPaymentMethodsSupported()) return; 1094 if (disconnectIfNoPaymentMethodsSupported()) return;
1074 1095
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
1294 "PaymentRequest.CheckoutFunnel.Aborted", abortReason, 1315 "PaymentRequest.CheckoutFunnel.Aborted", abortReason,
1295 PaymentRequestMetrics.ABORT_REASON_MAX); 1316 PaymentRequestMetrics.ABORT_REASON_MAX);
1296 1317
1297 if (abortReason == PaymentRequestMetrics.ABORT_REASON_ABORTED_BY_USER) { 1318 if (abortReason == PaymentRequestMetrics.ABORT_REASON_ABORTED_BY_USER) {
1298 mJourneyLogger.recordJourneyStatsHistograms("UserAborted"); 1319 mJourneyLogger.recordJourneyStatsHistograms("UserAborted");
1299 } else { 1320 } else {
1300 mJourneyLogger.recordJourneyStatsHistograms("OtherAborted"); 1321 mJourneyLogger.recordJourneyStatsHistograms("OtherAborted");
1301 } 1322 }
1302 } 1323 }
1303 } 1324 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698