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 #import "ios/chrome/browser/ui/payments/payment_request_coordinator.h" | 5 #import "ios/chrome/browser/ui/payments/payment_request_coordinator.h" |
6 | 6 |
7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
8 #include "components/autofill/core/browser/autofill_profile.h" | 8 #include "components/autofill/core/browser/autofill_profile.h" |
9 #include "components/autofill/core/browser/credit_card.h" | 9 #include "components/autofill/core/browser/credit_card.h" |
10 #include "components/payments/core/payment_address.h" | 10 #include "components/payments/core/payment_address.h" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 @synthesize autofillManager = _autofillManager; | 48 @synthesize autofillManager = _autofillManager; |
49 @synthesize browserState = _browserState; | 49 @synthesize browserState = _browserState; |
50 @synthesize pageFavicon = _pageFavicon; | 50 @synthesize pageFavicon = _pageFavicon; |
51 @synthesize pageTitle = _pageTitle; | 51 @synthesize pageTitle = _pageTitle; |
52 @synthesize pageHost = _pageHost; | 52 @synthesize pageHost = _pageHost; |
53 @synthesize connectionSecure = _connectionSecure; | 53 @synthesize connectionSecure = _connectionSecure; |
54 @synthesize delegate = _delegate; | 54 @synthesize delegate = _delegate; |
55 | 55 |
56 - (void)start { | 56 - (void)start { |
57 _mediator = | 57 _mediator = |
58 [[PaymentRequestMediator alloc] initWithBrowserState:_browserState | 58 [[PaymentRequestMediator alloc] initWithBrowserState:_browserState]; |
59 paymentRequest:_paymentRequest]; | |
60 | 59 |
61 _viewController = [[PaymentRequestViewController alloc] init]; | 60 _viewController = [[PaymentRequestViewController alloc] |
| 61 initWithPaymentRequest:_paymentRequest]; |
62 [_viewController setPageFavicon:_pageFavicon]; | 62 [_viewController setPageFavicon:_pageFavicon]; |
63 [_viewController setPageTitle:_pageTitle]; | 63 [_viewController setPageTitle:_pageTitle]; |
64 [_viewController setPageHost:_pageHost]; | 64 [_viewController setPageHost:_pageHost]; |
65 [_viewController setConnectionSecure:_connectionSecure]; | 65 [_viewController setConnectionSecure:_connectionSecure]; |
66 [_viewController setDelegate:self]; | 66 [_viewController setDelegate:self]; |
67 [_viewController setDataSource:_mediator]; | 67 [_viewController setDataSource:_mediator]; |
68 [_viewController loadModel]; | 68 [_viewController loadModel]; |
69 | 69 |
70 _navigationController = [[UINavigationController alloc] | 70 _navigationController = [[UINavigationController alloc] |
71 initWithRootViewController:_viewController]; | 71 initWithRootViewController:_viewController]; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 [[_viewController collectionView] reloadData]; | 117 [[_viewController collectionView] reloadData]; |
118 | 118 |
119 [_delegate paymentRequestCoordinator:self | 119 [_delegate paymentRequestCoordinator:self |
120 didCompletePaymentRequestWithCard:card | 120 didCompletePaymentRequestWithCard:card |
121 verificationCode:verificationCode]; | 121 verificationCode:verificationCode]; |
122 } | 122 } |
123 | 123 |
124 - (void)updatePaymentDetails:(web::PaymentDetails)paymentDetails { | 124 - (void)updatePaymentDetails:(web::PaymentDetails)paymentDetails { |
125 BOOL totalValueChanged = | 125 BOOL totalValueChanged = |
126 (_paymentRequest->payment_details().total != paymentDetails.total); | 126 (_paymentRequest->payment_details().total != paymentDetails.total); |
127 [_mediator setTotalValueChanged:totalValueChanged]; | |
128 _paymentRequest->UpdatePaymentDetails(paymentDetails); | 127 _paymentRequest->UpdatePaymentDetails(paymentDetails); |
129 | 128 |
130 if (_paymentRequest->shipping_options().empty()) { | 129 if (_paymentRequest->shipping_options().empty()) { |
131 // Display error in the shipping address/option selection view. | 130 // Display error in the shipping address/option selection view. |
132 if (_shippingAddressSelectionCoordinator) { | 131 if (_shippingAddressSelectionCoordinator) { |
133 _paymentRequest->set_selected_shipping_profile(nil); | 132 _paymentRequest->set_selected_shipping_profile(nil); |
134 [_shippingAddressSelectionCoordinator stopSpinnerAndDisplayError]; | 133 [_shippingAddressSelectionCoordinator stopSpinnerAndDisplayError]; |
135 } else if (_shippingOptionSelectionCoordinator) { | 134 } else if (_shippingOptionSelectionCoordinator) { |
136 [_shippingOptionSelectionCoordinator stopSpinnerAndDisplayError]; | 135 [_shippingOptionSelectionCoordinator stopSpinnerAndDisplayError]; |
137 } | 136 } |
138 // Update the payment request summary view. | 137 // Update the payment request summary view. |
139 [_viewController loadModel]; | 138 [_viewController loadModel]; |
140 [[_viewController collectionView] reloadData]; | 139 [[_viewController collectionView] reloadData]; |
141 } else { | 140 } else { |
142 // Update the payment summary item. | 141 // Update the payment summary section. |
143 [_viewController updatePaymentSummaryItem]; | 142 [_viewController |
| 143 updatePaymentSummaryWithTotalValueChanged:totalValueChanged]; |
144 | 144 |
145 if (_shippingAddressSelectionCoordinator) { | 145 if (_shippingAddressSelectionCoordinator) { |
146 // Set the selected shipping address. | 146 // Set the selected shipping address and update the selected shipping |
| 147 // address in the payment request summary view. |
147 _paymentRequest->set_selected_shipping_profile(_pendingShippingAddress); | 148 _paymentRequest->set_selected_shipping_profile(_pendingShippingAddress); |
148 _pendingShippingAddress = nil; | 149 _pendingShippingAddress = nil; |
| 150 [_viewController updateSelectedShippingAddressUI]; |
149 | 151 |
150 // Dismiss the shipping address selection view. | 152 // Dismiss the shipping address selection view. |
151 [_shippingAddressSelectionCoordinator stop]; | 153 [_shippingAddressSelectionCoordinator stop]; |
152 _shippingAddressSelectionCoordinator = nil; | 154 _shippingAddressSelectionCoordinator = nil; |
153 } else if (_shippingOptionSelectionCoordinator) { | 155 } else if (_shippingOptionSelectionCoordinator) { |
| 156 // Update the selected shipping option in the payment request summary |
| 157 // view. The updated selection is already reflected in |_paymentRequest|. |
| 158 [_viewController updateSelectedShippingOptionUI]; |
| 159 |
154 // Dismiss the shipping option selection view. | 160 // Dismiss the shipping option selection view. |
155 [_shippingOptionSelectionCoordinator stop]; | 161 [_shippingOptionSelectionCoordinator stop]; |
156 _shippingOptionSelectionCoordinator = nil; | 162 _shippingOptionSelectionCoordinator = nil; |
157 } | 163 } |
158 | |
159 // Update the Shipping section in the payment request summary view. | |
160 [_viewController updateShippingSection]; | |
161 } | 164 } |
162 } | 165 } |
163 | 166 |
164 - (void)displayErrorWithCallback:(ProceduralBlock)callback { | 167 - (void)displayErrorWithCallback:(ProceduralBlock)callback { |
165 _errorCoordinator = [[PaymentRequestErrorCoordinator alloc] | 168 _errorCoordinator = [[PaymentRequestErrorCoordinator alloc] |
166 initWithBaseViewController:_navigationController]; | 169 initWithBaseViewController:_navigationController]; |
167 [_errorCoordinator setCallback:callback]; | 170 [_errorCoordinator setCallback:callback]; |
168 [_errorCoordinator setDelegate:self]; | 171 [_errorCoordinator setDelegate:self]; |
169 | 172 |
170 [_errorCoordinator start]; | 173 [_errorCoordinator start]; |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 | 253 |
251 if (callback) | 254 if (callback) |
252 callback(); | 255 callback(); |
253 } | 256 } |
254 | 257 |
255 #pragma mark - PaymentItemsDisplayCoordinatorDelegate | 258 #pragma mark - PaymentItemsDisplayCoordinatorDelegate |
256 | 259 |
257 - (void)paymentItemsDisplayCoordinatorDidReturn: | 260 - (void)paymentItemsDisplayCoordinatorDidReturn: |
258 (PaymentItemsDisplayCoordinator*)coordinator { | 261 (PaymentItemsDisplayCoordinator*)coordinator { |
259 // Clear the 'Updated' label on the payment summary item, if there is one. | 262 // Clear the 'Updated' label on the payment summary item, if there is one. |
260 [_viewController updatePaymentSummaryItem]; | 263 [_viewController updatePaymentSummaryWithTotalValueChanged:NO]; |
261 | 264 |
262 [_itemsDisplayCoordinator stop]; | 265 [_itemsDisplayCoordinator stop]; |
263 _itemsDisplayCoordinator = nil; | 266 _itemsDisplayCoordinator = nil; |
264 } | 267 } |
265 | 268 |
266 - (void)paymentItemsDisplayCoordinatorDidConfirm: | 269 - (void)paymentItemsDisplayCoordinatorDidConfirm: |
267 (PaymentItemsDisplayCoordinator*)coordinator { | 270 (PaymentItemsDisplayCoordinator*)coordinator { |
268 [self sendPaymentResponse]; | 271 [self sendPaymentResponse]; |
269 } | 272 } |
270 | 273 |
271 #pragma mark - ContactInfoSelectionCoordinatorDelegate | 274 #pragma mark - ContactInfoSelectionCoordinatorDelegate |
272 | 275 |
273 - (void) | 276 - (void) |
274 contactInfoSelectionCoordinator:(ContactInfoSelectionCoordinator*)coordinator | 277 contactInfoSelectionCoordinator:(ContactInfoSelectionCoordinator*)coordinator |
275 didSelectContactProfile:(autofill::AutofillProfile*)contactProfile { | 278 didSelectContactProfile:(autofill::AutofillProfile*)contactProfile { |
276 _paymentRequest->set_selected_contact_profile(contactProfile); | 279 _paymentRequest->set_selected_contact_profile(contactProfile); |
277 | 280 |
278 [_viewController updateContactInfoSection]; | 281 [_viewController updateSelectedContactInfoUI]; |
279 | 282 |
280 [_contactInfoSelectionCoordinator stop]; | 283 [_contactInfoSelectionCoordinator stop]; |
281 _contactInfoSelectionCoordinator = nil; | 284 _contactInfoSelectionCoordinator = nil; |
282 } | 285 } |
283 | 286 |
284 - (void)contactInfoSelectionCoordinatorDidReturn: | 287 - (void)contactInfoSelectionCoordinatorDidReturn: |
285 (ContactInfoSelectionCoordinator*)coordinator { | 288 (ContactInfoSelectionCoordinator*)coordinator { |
286 [_contactInfoSelectionCoordinator stop]; | 289 [_contactInfoSelectionCoordinator stop]; |
287 _contactInfoSelectionCoordinator = nil; | 290 _contactInfoSelectionCoordinator = nil; |
288 } | 291 } |
289 | 292 |
290 #pragma mark - ShippingAddressSelectionCoordinatorDelegate | 293 #pragma mark - ShippingAddressSelectionCoordinatorDelegate |
291 | 294 |
292 - (void)shippingAddressSelectionCoordinator: | 295 - (void)shippingAddressSelectionCoordinator: |
293 (ShippingAddressSelectionCoordinator*)coordinator | 296 (ShippingAddressSelectionCoordinator*)coordinator |
294 didSelectShippingAddress: | 297 didSelectShippingAddress: |
295 (autofill::AutofillProfile*)shippingAddress { | 298 (autofill::AutofillProfile*)shippingAddress { |
296 _pendingShippingAddress = shippingAddress; | 299 _pendingShippingAddress = shippingAddress; |
297 DCHECK(shippingAddress); | 300 DCHECK(shippingAddress); |
298 payments::PaymentAddress address = GetPaymentAddressFromAutofillProfile( | 301 payments::PaymentAddress address = GetPaymentAddressFromAutofillProfile( |
299 *shippingAddress, GetApplicationContext()->GetApplicationLocale()); | 302 *shippingAddress, GetApplicationContext()->GetApplicationLocale()); |
300 [_delegate paymentRequestCoordinator:self didSelectShippingAddress:address]; | 303 [_delegate paymentRequestCoordinator:self didSelectShippingAddress:address]; |
301 } | 304 } |
302 | 305 |
303 - (void)shippingAddressSelectionCoordinatorDidReturn: | 306 - (void)shippingAddressSelectionCoordinatorDidReturn: |
304 (ShippingAddressSelectionCoordinator*)coordinator { | 307 (ShippingAddressSelectionCoordinator*)coordinator { |
305 // Clear the 'Updated' label on the payment summary item, if there is one. | 308 // Clear the 'Updated' label on the payment summary item, if there is one. |
306 [_viewController updatePaymentSummaryItem]; | 309 [_viewController updatePaymentSummaryWithTotalValueChanged:NO]; |
307 | 310 |
308 [_shippingAddressSelectionCoordinator stop]; | 311 [_shippingAddressSelectionCoordinator stop]; |
309 _shippingAddressSelectionCoordinator = nil; | 312 _shippingAddressSelectionCoordinator = nil; |
310 } | 313 } |
311 | 314 |
312 #pragma mark - ShippingOptionSelectionCoordinatorDelegate | 315 #pragma mark - ShippingOptionSelectionCoordinatorDelegate |
313 | 316 |
314 - (void)shippingOptionSelectionCoordinator: | 317 - (void)shippingOptionSelectionCoordinator: |
315 (ShippingOptionSelectionCoordinator*)coordinator | 318 (ShippingOptionSelectionCoordinator*)coordinator |
316 didSelectShippingOption: | 319 didSelectShippingOption: |
317 (web::PaymentShippingOption*)shippingOption { | 320 (web::PaymentShippingOption*)shippingOption { |
318 [_delegate paymentRequestCoordinator:self | 321 [_delegate paymentRequestCoordinator:self |
319 didSelectShippingOption:*shippingOption]; | 322 didSelectShippingOption:*shippingOption]; |
320 } | 323 } |
321 | 324 |
322 - (void)shippingOptionSelectionCoordinatorDidReturn: | 325 - (void)shippingOptionSelectionCoordinatorDidReturn: |
323 (ShippingAddressSelectionCoordinator*)coordinator { | 326 (ShippingAddressSelectionCoordinator*)coordinator { |
324 // Clear the 'Updated' label on the payment summary item, if there is one. | 327 // Clear the 'Updated' label on the payment summary item, if there is one. |
325 [_viewController updatePaymentSummaryItem]; | 328 [_viewController updatePaymentSummaryWithTotalValueChanged:NO]; |
326 | 329 |
327 [_shippingOptionSelectionCoordinator stop]; | 330 [_shippingOptionSelectionCoordinator stop]; |
328 _shippingOptionSelectionCoordinator = nil; | 331 _shippingOptionSelectionCoordinator = nil; |
329 } | 332 } |
330 | 333 |
331 #pragma mark - PaymentMethodSelectionCoordinatorDelegate | 334 #pragma mark - PaymentMethodSelectionCoordinatorDelegate |
332 | 335 |
333 - (void)paymentMethodSelectionCoordinator: | 336 - (void)paymentMethodSelectionCoordinator: |
334 (PaymentMethodSelectionCoordinator*)coordinator | 337 (PaymentMethodSelectionCoordinator*)coordinator |
335 didSelectPaymentMethod:(autofill::CreditCard*)creditCard { | 338 didSelectPaymentMethod:(autofill::CreditCard*)creditCard { |
336 _paymentRequest->set_selected_credit_card(creditCard); | 339 _paymentRequest->set_selected_credit_card(creditCard); |
337 | 340 |
338 [_viewController updatePaymentMethodSection]; | 341 [_viewController updateSelectedPaymentMethodUI]; |
339 | 342 |
340 // Clear the 'Updated' label on the payment summary item, if there is one. | 343 // Clear the 'Updated' label on the payment summary item, if there is one. |
341 [_viewController updatePaymentSummaryItem]; | 344 [_viewController updatePaymentSummaryWithTotalValueChanged:NO]; |
342 | 345 |
343 [_methodSelectionCoordinator stop]; | 346 [_methodSelectionCoordinator stop]; |
344 _methodSelectionCoordinator = nil; | 347 _methodSelectionCoordinator = nil; |
345 } | 348 } |
346 | 349 |
347 - (void)paymentMethodSelectionCoordinatorDidReturn: | 350 - (void)paymentMethodSelectionCoordinatorDidReturn: |
348 (PaymentMethodSelectionCoordinator*)coordinator { | 351 (PaymentMethodSelectionCoordinator*)coordinator { |
349 // Clear the 'Updated' label on the payment summary item, if there is one. | 352 // Clear the 'Updated' label on the payment summary item, if there is one. |
350 [_viewController updatePaymentSummaryItem]; | 353 [_viewController updatePaymentSummaryWithTotalValueChanged:NO]; |
351 | 354 |
352 [_methodSelectionCoordinator stop]; | 355 [_methodSelectionCoordinator stop]; |
353 _methodSelectionCoordinator = nil; | 356 _methodSelectionCoordinator = nil; |
354 } | 357 } |
355 | 358 |
356 @end | 359 @end |
OLD | NEW |