OLD | NEW |
---|---|
(Empty) | |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 package org.chromium.chrome.browser.payments; | |
6 | |
7 import android.os.Handler; | |
8 import android.text.TextUtils; | |
9 | |
10 import org.chromium.chrome.browser.autofill.PersonalDataManager; | |
11 import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile; | |
12 import org.chromium.chrome.browser.autofill.PersonalDataManager.NormalizedAddres sRequestDelegate; | |
13 import org.chromium.chrome.browser.payments.ui.PaymentOption; | |
14 import org.chromium.payments.mojom.PaymentResponse; | |
15 | |
16 /** | |
17 * The helper class to create and prepare a PaymentResponse. | |
18 */ | |
19 public class PaymentResponseHelper implements NormalizedAddressRequestDelegate { | |
20 /** | |
21 * Observer to be notified when the payment response is completed. | |
22 */ | |
23 public interface PaymentResponseRequesterDelegate { | |
24 /* | |
25 * Called when the payment response is ready to be sent to the merchant. | |
26 * | |
27 * @param response The payment response to send to the merchant. | |
28 */ | |
29 void onPaymentResponseReady(PaymentResponse response); | |
30 } | |
31 | |
32 private final Handler mHandler = new Handler(); | |
33 | |
34 private PaymentResponse mPaymentResponse; | |
35 private PaymentResponseRequesterDelegate mDelegate; | |
36 private boolean mIsWaitingForShippingNormalization; | |
37 private boolean mIsWaitingForPaymentsDetails = true; | |
38 | |
39 // Callback to send the response. | |
40 | |
41 public PaymentResponseHelper(PaymentOption selectedShippingAddress, | |
please use gerrit instead
2016/10/18 17:30:31
Everything public should have javadoc comments.
sebsg
2016/10/18 22:44:31
Done.
| |
42 PaymentOption selectedShippingOption, PaymentOption selectedContact, | |
43 PaymentResponseRequesterDelegate delegate) { | |
44 mPaymentResponse = new PaymentResponse(); | |
45 | |
46 mDelegate = delegate; | |
47 | |
48 // Set up the contact section of the response. | |
49 if (selectedContact != null) { | |
50 // Contacts are created in show(). These should all be instances of AutofillContact. | |
please use gerrit instead
2016/10/18 17:30:31
s/show()/PaymentRequestImpl.init()/
sebsg
2016/10/18 22:44:31
Done.
| |
51 assert selectedContact instanceof AutofillContact; | |
52 mPaymentResponse.payerPhone = ((AutofillContact) selectedContact).ge tPayerPhone(); | |
53 mPaymentResponse.payerEmail = ((AutofillContact) selectedContact).ge tPayerEmail(); | |
54 } | |
55 | |
56 // Set up the shipping section of the response. | |
57 if (selectedShippingOption != null && selectedShippingOption.getIdentifi er() != null) { | |
58 mPaymentResponse.shippingOption = selectedShippingOption.getIdentifi er(); | |
59 } | |
60 | |
61 // Set up the shipping address section of the response. | |
62 if (selectedShippingAddress != null) { | |
63 // Shipping addresses are created in show(). These should all be ins tances of | |
please use gerrit instead
2016/10/18 17:30:31
Ditto
sebsg
2016/10/18 22:44:31
Done.
| |
64 // AutofillAddress. | |
65 assert selectedShippingAddress instanceof AutofillAddress; | |
66 AutofillAddress selectedAutofillAddress = (AutofillAddress) selected ShippingAddress; | |
67 | |
68 // Addresses to be sent to the merchant should always be complete. | |
69 assert selectedAutofillAddress.isComplete(); | |
70 | |
71 // Record the use of the profile. | |
72 PersonalDataManager.getInstance().recordAndLogProfileUse( | |
73 selectedAutofillAddress.getProfile().getGUID()); | |
74 | |
75 mPaymentResponse.shippingAddress = selectedAutofillAddress.toPayment Address(); | |
76 | |
77 // The shipping address needs to be normalized before sending the re sponse to the | |
78 // merchant. | |
79 mIsWaitingForShippingNormalization = true; | |
80 boolean willNormalizeAsync = PersonalDataManager.getInstance().norma lizeAddress( | |
please use gerrit instead
2016/10/18 17:30:31
Can you do the same thing here?
mIsWaitingForShip
sebsg
2016/10/18 22:44:32
Done.
| |
81 selectedAutofillAddress.getProfile().getGUID(), | |
82 AutofillAddress.getCountryCode(selectedAutofillAddress.getPr ofile()), this); | |
83 | |
84 if (willNormalizeAsync) { | |
85 // If the normalization was not done synchronously, start a time r to cancel the | |
86 // asynchronous normalization if it takes too long. | |
87 mHandler.postDelayed(new Runnable() { | |
88 @Override | |
89 public void run() { | |
90 onAddressNormalized(null); | |
91 } | |
92 }, PersonalDataManager.getInstance().getNormalizationTimeoutMS() ); | |
93 } | |
94 } | |
95 } | |
96 | |
97 public void onInstrumentDetailsReceived(String methodName, String stringifie dDetails) { | |
please use gerrit instead
2016/10/18 17:30:31
javadoc
sebsg
2016/10/18 22:44:32
Done.
| |
98 mPaymentResponse.methodName = methodName; | |
99 mPaymentResponse.stringifiedDetails = stringifiedDetails; | |
100 | |
101 mIsWaitingForPaymentsDetails = false; | |
102 | |
103 // Check if the normalized shipping address has been set. | |
104 if (mIsWaitingForShippingNormalization) return; | |
please use gerrit instead
2016/10/18 17:30:31
if (!waiting) delegate.ready(response);
sebsg
2016/10/18 22:44:31
Done.
| |
105 | |
106 mDelegate.onPaymentResponseReady(mPaymentResponse); | |
107 } | |
108 | |
109 @Override | |
110 public void onAddressNormalized(AutofillProfile profile) { | |
111 // Check if a normalization is still required. | |
112 if (!mIsWaitingForShippingNormalization) return; | |
113 mIsWaitingForShippingNormalization = false; | |
114 | |
115 if (profile != null && !TextUtils.isEmpty(profile.getGUID())) { | |
please use gerrit instead
2016/10/18 17:30:31
You check for empty GUID here, but you don't do th
sebsg
2016/10/18 22:44:32
Done.
| |
116 // The normalization finished first: use the normalized address. | |
117 mPaymentResponse.shippingAddress = | |
118 new AutofillAddress(profile, true /* isComplete */).toPaymen tAddress(); | |
119 } | |
120 | |
121 // Check if the payment details have been received. | |
122 if (mIsWaitingForPaymentsDetails) return; | |
please use gerrit instead
2016/10/18 17:30:31
if (!waiting) delegate.ready(response);
sebsg
2016/10/18 22:44:32
Done.
| |
123 | |
124 mDelegate.onPaymentResponseReady(mPaymentResponse); | |
125 } | |
126 } | |
OLD | NEW |