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.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.text.TextUtils; | 10 import android.text.TextUtils; |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 disconnectFromClientWithDebugMessage("PaymentRequest.show() called m
ore than once."); | 147 disconnectFromClientWithDebugMessage("PaymentRequest.show() called m
ore than once."); |
148 return; | 148 return; |
149 } | 149 } |
150 | 150 |
151 mSupportedMethods = getValidatedSupportedMethods(supportedMethods); | 151 mSupportedMethods = getValidatedSupportedMethods(supportedMethods); |
152 if (mSupportedMethods == null) { | 152 if (mSupportedMethods == null) { |
153 disconnectFromClientWithDebugMessage("Invalid payment methods"); | 153 disconnectFromClientWithDebugMessage("Invalid payment methods"); |
154 return; | 154 return; |
155 } | 155 } |
156 | 156 |
157 mLineItems = getValidatedLineItems(details); | 157 if (!setLineItemsAndShippingOptionsOrDisconnectFromClient(details)) retu
rn; |
158 if (mLineItems == null) { | |
159 disconnectFromClientWithDebugMessage("Invalid line items"); | |
160 return; | |
161 } | |
162 mPaymentItems = Arrays.asList(details.items); | |
163 | |
164 mShippingOptions = | |
165 getValidatedShippingOptions(details.items[0].amount.currencyCode
, details); | |
166 if (mShippingOptions == null) { | |
167 disconnectFromClientWithDebugMessage("Invalid shipping options"); | |
168 return; | |
169 } | |
170 | 158 |
171 // If the merchant requests shipping and does not provide shipping optio
ns here, then the | 159 // If the merchant requests shipping and does not provide shipping optio
ns here, then the |
172 // merchant needs the shipping address to calculate shipping price and a
vailability. | 160 // merchant needs the shipping address to calculate shipping price and a
vailability. |
173 boolean requestShipping = options != null && options.requestShipping; | 161 boolean requestShipping = options != null && options.requestShipping; |
174 mMerchantNeedsShippingAddress = requestShipping && mShippingOptions.isEm
pty(); | 162 mMerchantNeedsShippingAddress = requestShipping && mShippingOptions.isEm
pty(); |
175 | 163 |
176 mData = getValidatedData(mSupportedMethods, stringifiedData); | 164 mData = getValidatedData(mSupportedMethods, stringifiedData); |
177 if (mData == null) { | 165 if (mData == null) { |
178 disconnectFromClientWithDebugMessage("Invalid payment method specifi
c data"); | 166 disconnectFromClientWithDebugMessage("Invalid payment method specifi
c data"); |
179 return; | 167 return; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
217 } | 205 } |
218 } | 206 } |
219 | 207 |
220 if (!isGettingInstruments) mPaymentMethods = new SectionInformation(); | 208 if (!isGettingInstruments) mPaymentMethods = new SectionInformation(); |
221 | 209 |
222 mUI = PaymentRequestUI.show(mContext, this, requestShipping, mMerchantNa
me, mOrigin); | 210 mUI = PaymentRequestUI.show(mContext, this, requestShipping, mMerchantNa
me, mOrigin); |
223 if (mFavicon != null) mUI.setTitleBitmap(mFavicon); | 211 if (mFavicon != null) mUI.setTitleBitmap(mFavicon); |
224 mFavicon = null; | 212 mFavicon = null; |
225 } | 213 } |
226 | 214 |
| 215 /** |
| 216 * Called by merchant to update the shipping options and line items after th
e user has selected |
| 217 * their shipping address or shipping option. |
| 218 */ |
| 219 @Override |
| 220 public void updateWith(PaymentDetails details) { |
| 221 if (mClient == null) return; |
| 222 |
| 223 if (mUI == null) { |
| 224 disconnectFromClientWithDebugMessage( |
| 225 "PaymentRequestUpdateEvent.updateWith() called without Payme
ntRequest.show()"); |
| 226 return; |
| 227 } |
| 228 |
| 229 if (!setLineItemsAndShippingOptionsOrDisconnectFromClient(details)) retu
rn; |
| 230 |
| 231 // Empty shipping options means the merchant cannot ship to the user's s
elected shipping |
| 232 // address. |
| 233 if (mShippingOptions.isEmpty() && !mMerchantNeedsShippingAddress) { |
| 234 disconnectFromClientWithDebugMessage("Merchant indicates inablity to
ship although " |
| 235 + "originally indicated that can ship anywhere"); |
| 236 } |
| 237 |
| 238 mUI.updateOrderSummarySection(mLineItems); |
| 239 mUI.updateShippingOptionsSection(mShippingOptions); |
| 240 } |
| 241 |
| 242 private boolean setLineItemsAndShippingOptionsOrDisconnectFromClient(Payment
Details details) { |
| 243 mLineItems = getValidatedLineItems(details); |
| 244 if (mLineItems == null) { |
| 245 disconnectFromClientWithDebugMessage("Invalid line items"); |
| 246 return false; |
| 247 } |
| 248 mPaymentItems = Arrays.asList(details.items); |
| 249 |
| 250 mShippingOptions = |
| 251 getValidatedShippingOptions(details.items[0].amount.currencyCode
, details); |
| 252 if (mShippingOptions == null) { |
| 253 disconnectFromClientWithDebugMessage("Invalid shipping options"); |
| 254 return false; |
| 255 } |
| 256 |
| 257 return true; |
| 258 } |
| 259 |
227 private HashSet<String> getValidatedSupportedMethods(String[] methods) { | 260 private HashSet<String> getValidatedSupportedMethods(String[] methods) { |
228 // Payment methods are required. | 261 // Payment methods are required. |
229 if (methods == null || methods.length == 0) return null; | 262 if (methods == null || methods.length == 0) return null; |
230 | 263 |
231 HashSet<String> result = new HashSet<>(); | 264 HashSet<String> result = new HashSet<>(); |
232 for (int i = 0; i < methods.length; i++) { | 265 for (int i = 0; i < methods.length; i++) { |
233 // Payment methods should be non-empty. | 266 // Payment methods should be non-empty. |
234 if (TextUtils.isEmpty(methods[i])) return null; | 267 if (TextUtils.isEmpty(methods[i])) return null; |
235 result.add(methods[i]); | 268 result.add(methods[i]); |
236 } | 269 } |
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
559 if (mPaymentMethods != null) { | 592 if (mPaymentMethods != null) { |
560 for (int i = 0; i < mPaymentMethods.getSize(); i++) { | 593 for (int i = 0; i < mPaymentMethods.getSize(); i++) { |
561 PaymentOption option = mPaymentMethods.getItem(i); | 594 PaymentOption option = mPaymentMethods.getItem(i); |
562 assert option instanceof PaymentInstrument; | 595 assert option instanceof PaymentInstrument; |
563 ((PaymentInstrument) option).dismiss(); | 596 ((PaymentInstrument) option).dismiss(); |
564 } | 597 } |
565 mPaymentMethods = null; | 598 mPaymentMethods = null; |
566 } | 599 } |
567 } | 600 } |
568 } | 601 } |
OLD | NEW |