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/payments/payment_request_view_controller.h" | 5 #import "ios/chrome/browser/payments/payment_request_view_controller.h" |
6 | 6 |
7 #include "base/mac/foundation_util.h" | 7 #include "base/mac/foundation_util.h" |
8 | 8 |
9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
10 #include "base/strings/sys_string_conversions.h" | 10 #include "base/strings/sys_string_conversions.h" |
11 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
12 #include "components/autofill/core/browser/autofill_data_util.h" | 12 #include "components/autofill/core/browser/autofill_data_util.h" |
13 #include "components/autofill/core/browser/autofill_profile.h" | 13 #include "components/autofill/core/browser/autofill_profile.h" |
14 #include "components/autofill/core/browser/credit_card.h" | 14 #include "components/autofill/core/browser/credit_card.h" |
15 #include "components/autofill/core/browser/field_types.h" | 15 #include "components/autofill/core/browser/field_types.h" |
16 #include "components/autofill/core/browser/personal_data_manager.h" | 16 #include "components/autofill/core/browser/personal_data_manager.h" |
17 #include "components/payments/core/currency_formatter.h" | 17 #include "components/payments/core/currency_formatter.h" |
18 #include "components/payments/core/strings_util.h" | 18 #include "components/payments/core/strings_util.h" |
19 #include "components/strings/grit/components_strings.h" | 19 #include "components/strings/grit/components_strings.h" |
20 #import "ios/chrome/browser/payments/cells/autofill_profile_item.h" | 20 #import "ios/chrome/browser/payments/cells/autofill_profile_item.h" |
21 #import "ios/chrome/browser/payments/cells/page_info_item.h" | 21 #import "ios/chrome/browser/payments/cells/page_info_item.h" |
22 #import "ios/chrome/browser/payments/cells/payment_method_item.h" | 22 #import "ios/chrome/browser/payments/cells/payment_method_item.h" |
| 23 #import "ios/chrome/browser/payments/cells/payments_text_item.h" |
23 #import "ios/chrome/browser/payments/cells/price_item.h" | 24 #import "ios/chrome/browser/payments/cells/price_item.h" |
24 #include "ios/chrome/browser/payments/payment_request.h" | 25 #include "ios/chrome/browser/payments/payment_request.h" |
25 #import "ios/chrome/browser/payments/payment_request_util.h" | 26 #import "ios/chrome/browser/payments/payment_request_util.h" |
26 #import "ios/chrome/browser/payments/payment_request_view_controller_actions.h" | 27 #import "ios/chrome/browser/payments/payment_request_view_controller_actions.h" |
27 #import "ios/chrome/browser/ui/autofill/cells/status_item.h" | 28 #import "ios/chrome/browser/ui/autofill/cells/status_item.h" |
28 #import "ios/chrome/browser/ui/collection_view/cells/MDCCollectionViewCell+Chrom
e.h" | 29 #import "ios/chrome/browser/ui/collection_view/cells/MDCCollectionViewCell+Chrom
e.h" |
29 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_detail_item
.h" | 30 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_detail_item
.h" |
30 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_footer_item
.h" | 31 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_footer_item
.h" |
31 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_item.h" | 32 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_item.h" |
32 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_text_item.h
" | |
33 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h" | 33 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h" |
34 #import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h" | 34 #import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h" |
35 #include "ios/chrome/browser/ui/rtl_geometry.h" | 35 #include "ios/chrome/browser/ui/rtl_geometry.h" |
36 #include "ios/chrome/browser/ui/uikit_ui_util.h" | 36 #include "ios/chrome/browser/ui/uikit_ui_util.h" |
37 #include "ios/chrome/grit/ios_strings.h" | 37 #include "ios/chrome/grit/ios_strings.h" |
38 #import "ios/third_party/material_components_ios/src/components/Buttons/src/Mate
rialButtons.h" | 38 #import "ios/third_party/material_components_ios/src/components/Buttons/src/Mate
rialButtons.h" |
39 #import "ios/third_party/material_components_ios/src/components/CollectionCells/
src/MaterialCollectionCells.h" | 39 #import "ios/third_party/material_components_ios/src/components/CollectionCells/
src/MaterialCollectionCells.h" |
40 #import "ios/third_party/material_components_ios/src/components/Typography/src/M
aterialTypography.h" | 40 #import "ios/third_party/material_components_ios/src/components/Typography/src/M
aterialTypography.h" |
41 #import "ios/third_party/material_roboto_font_loader_ios/src/src/MaterialRobotoF
ontLoader.h" | 41 #import "ios/third_party/material_roboto_font_loader_ios/src/src/MaterialRobotoF
ontLoader.h" |
42 #include "ios/web/public/payments/payment_request.h" | 42 #include "ios/web/public/payments/payment_request.h" |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 UIBarButtonItem* _cancelButton; | 106 UIBarButtonItem* _cancelButton; |
107 MDCButton* _payButton; | 107 MDCButton* _payButton; |
108 | 108 |
109 // The PaymentRequest object having a copy of web::PaymentRequest as provided | 109 // The PaymentRequest object having a copy of web::PaymentRequest as provided |
110 // by the page invoking the Payment Request API. This is a weak pointer and | 110 // by the page invoking the Payment Request API. This is a weak pointer and |
111 // should outlive this class. | 111 // should outlive this class. |
112 PaymentRequest* _paymentRequest; | 112 PaymentRequest* _paymentRequest; |
113 | 113 |
114 __weak PriceItem* _paymentSummaryItem; | 114 __weak PriceItem* _paymentSummaryItem; |
115 __weak AutofillProfileItem* _selectedShippingAddressItem; | 115 __weak AutofillProfileItem* _selectedShippingAddressItem; |
116 __weak CollectionViewTextItem* _selectedShippingOptionItem; | 116 __weak PaymentsTextItem* _selectedShippingOptionItem; |
117 __weak PaymentMethodItem* _selectedPaymentMethodItem; | 117 __weak PaymentMethodItem* _selectedPaymentMethodItem; |
118 __weak AutofillProfileItem* _selectedContactInfoItem; | 118 __weak AutofillProfileItem* _selectedContactInfoItem; |
119 } | 119 } |
120 | 120 |
121 @end | 121 @end |
122 | 122 |
123 @implementation PaymentRequestViewController | 123 @implementation PaymentRequestViewController |
124 | 124 |
125 @synthesize pageFavicon = _pageFavicon; | 125 @synthesize pageFavicon = _pageFavicon; |
126 @synthesize pageTitle = _pageTitle; | 126 @synthesize pageTitle = _pageTitle; |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 paymentSummaryItem.accessoryType = | 235 paymentSummaryItem.accessoryType = |
236 MDCCollectionViewCellAccessoryDisclosureIndicator; | 236 MDCCollectionViewCellAccessoryDisclosureIndicator; |
237 paymentSummaryItem.accessibilityTraits |= UIAccessibilityTraitButton; | 237 paymentSummaryItem.accessibilityTraits |= UIAccessibilityTraitButton; |
238 } | 238 } |
239 [model addItem:paymentSummaryItem | 239 [model addItem:paymentSummaryItem |
240 toSectionWithIdentifier:SectionIdentifierSummary]; | 240 toSectionWithIdentifier:SectionIdentifierSummary]; |
241 | 241 |
242 // Shipping section. | 242 // Shipping section. |
243 [model addSectionWithIdentifier:SectionIdentifierShipping]; | 243 [model addSectionWithIdentifier:SectionIdentifierShipping]; |
244 | 244 |
245 CollectionViewTextItem* shippingTitle = | 245 PaymentsTextItem* shippingTitle = |
246 [[CollectionViewTextItem alloc] initWithType:ItemTypeShippingTitle]; | 246 [[PaymentsTextItem alloc] initWithType:ItemTypeShippingTitle]; |
247 shippingTitle.text = | 247 shippingTitle.text = |
248 GetShippingSectionTitle(_paymentRequest->shipping_type()); | 248 GetShippingSectionTitle(_paymentRequest->shipping_type()); |
249 [model setHeader:shippingTitle | 249 [model setHeader:shippingTitle |
250 forSectionWithIdentifier:SectionIdentifierShipping]; | 250 forSectionWithIdentifier:SectionIdentifierShipping]; |
251 | 251 |
252 CollectionViewItem* shippingAddressItem = nil; | 252 CollectionViewItem* shippingAddressItem = nil; |
253 if (_paymentRequest->selected_shipping_profile()) { | 253 if (_paymentRequest->selected_shipping_profile()) { |
254 AutofillProfileItem* selectedShippingAddressItem = | 254 AutofillProfileItem* selectedShippingAddressItem = |
255 [[AutofillProfileItem alloc] initWithType:ItemTypeShippingAddress]; | 255 [[AutofillProfileItem alloc] initWithType:ItemTypeShippingAddress]; |
256 shippingAddressItem = selectedShippingAddressItem; | 256 shippingAddressItem = selectedShippingAddressItem; |
(...skipping 12 matching lines...) Expand all Loading... |
269 GetShippingAddressSectionString(_paymentRequest->shipping_type())); | 269 GetShippingAddressSectionString(_paymentRequest->shipping_type())); |
270 addAddressItem.detailText = [l10n_util::GetNSString(IDS_ADD) | 270 addAddressItem.detailText = [l10n_util::GetNSString(IDS_ADD) |
271 uppercaseStringWithLocale:[NSLocale currentLocale]]; | 271 uppercaseStringWithLocale:[NSLocale currentLocale]]; |
272 addAddressItem.accessibilityTraits |= UIAccessibilityTraitButton; | 272 addAddressItem.accessibilityTraits |= UIAccessibilityTraitButton; |
273 } | 273 } |
274 [model addItem:shippingAddressItem | 274 [model addItem:shippingAddressItem |
275 toSectionWithIdentifier:SectionIdentifierShipping]; | 275 toSectionWithIdentifier:SectionIdentifierShipping]; |
276 | 276 |
277 CollectionViewItem* shippingOptionItem = nil; | 277 CollectionViewItem* shippingOptionItem = nil; |
278 if (_paymentRequest->selected_shipping_option()) { | 278 if (_paymentRequest->selected_shipping_option()) { |
279 CollectionViewTextItem* selectedShippingOptionItem = | 279 PaymentsTextItem* selectedShippingOptionItem = |
280 [[CollectionViewTextItem alloc] initWithType:ItemTypeShippingOption]; | 280 [[PaymentsTextItem alloc] initWithType:ItemTypeShippingOption]; |
281 selectedShippingOptionItem.textFont = [MDCTypography body2Font]; | |
282 selectedShippingOptionItem.textColor = [[MDCPalette greyPalette] tint900]; | |
283 selectedShippingOptionItem.detailTextFont = [MDCTypography body1Font]; | |
284 selectedShippingOptionItem.detailTextColor = | |
285 [[MDCPalette greyPalette] tint900]; | |
286 shippingOptionItem = selectedShippingOptionItem; | 281 shippingOptionItem = selectedShippingOptionItem; |
287 | 282 |
288 _selectedShippingOptionItem = selectedShippingOptionItem; | 283 _selectedShippingOptionItem = selectedShippingOptionItem; |
289 [self fillShippingOptionItem:selectedShippingOptionItem | 284 [self fillShippingOptionItem:selectedShippingOptionItem |
290 withOption:_paymentRequest->selected_shipping_option()]; | 285 withOption:_paymentRequest->selected_shipping_option()]; |
291 selectedShippingOptionItem.accessoryType = | 286 selectedShippingOptionItem.accessoryType = |
292 MDCCollectionViewCellAccessoryDisclosureIndicator; | 287 MDCCollectionViewCellAccessoryDisclosureIndicator; |
293 selectedShippingOptionItem.accessibilityTraits |= | 288 selectedShippingOptionItem.accessibilityTraits |= |
294 UIAccessibilityTraitButton; | 289 UIAccessibilityTraitButton; |
295 } else { | 290 } else { |
296 CollectionViewDetailItem* selectShippingOptionItem = | 291 CollectionViewDetailItem* selectShippingOptionItem = |
297 [[CollectionViewDetailItem alloc] | 292 [[CollectionViewDetailItem alloc] |
298 initWithType:ItemTypeSelectShippingOption]; | 293 initWithType:ItemTypeSelectShippingOption]; |
299 shippingOptionItem = selectShippingOptionItem; | 294 shippingOptionItem = selectShippingOptionItem; |
300 selectShippingOptionItem.text = base::SysUTF16ToNSString( | 295 selectShippingOptionItem.text = base::SysUTF16ToNSString( |
301 GetShippingOptionSectionString(_paymentRequest->shipping_type())); | 296 GetShippingOptionSectionString(_paymentRequest->shipping_type())); |
302 selectShippingOptionItem.accessoryType = | 297 selectShippingOptionItem.accessoryType = |
303 MDCCollectionViewCellAccessoryDisclosureIndicator; | 298 MDCCollectionViewCellAccessoryDisclosureIndicator; |
304 selectShippingOptionItem.accessibilityTraits |= UIAccessibilityTraitButton; | 299 selectShippingOptionItem.accessibilityTraits |= UIAccessibilityTraitButton; |
305 } | 300 } |
306 [model addItem:shippingOptionItem | 301 [model addItem:shippingOptionItem |
307 toSectionWithIdentifier:SectionIdentifierShipping]; | 302 toSectionWithIdentifier:SectionIdentifierShipping]; |
308 | 303 |
309 // Payment method section. | 304 // Payment method section. |
310 [model addSectionWithIdentifier:SectionIdentifierPayment]; | 305 [model addSectionWithIdentifier:SectionIdentifierPayment]; |
311 | 306 |
312 CollectionViewItem* paymentMethodItem = nil; | 307 CollectionViewItem* paymentMethodItem = nil; |
313 if (_paymentRequest->selected_credit_card()) { | 308 if (_paymentRequest->selected_credit_card()) { |
314 CollectionViewTextItem* paymentTitle = | 309 PaymentsTextItem* paymentTitle = |
315 [[CollectionViewTextItem alloc] initWithType:ItemTypePaymentTitle]; | 310 [[PaymentsTextItem alloc] initWithType:ItemTypePaymentTitle]; |
316 paymentTitle.text = | 311 paymentTitle.text = |
317 l10n_util::GetNSString(IDS_PAYMENT_REQUEST_PAYMENT_METHOD_SECTION_NAME); | 312 l10n_util::GetNSString(IDS_PAYMENT_REQUEST_PAYMENT_METHOD_SECTION_NAME); |
318 [model setHeader:paymentTitle | 313 [model setHeader:paymentTitle |
319 forSectionWithIdentifier:SectionIdentifierPayment]; | 314 forSectionWithIdentifier:SectionIdentifierPayment]; |
320 | 315 |
321 PaymentMethodItem* selectedPaymentMethodItem = | 316 PaymentMethodItem* selectedPaymentMethodItem = |
322 [[PaymentMethodItem alloc] initWithType:ItemTypePaymentMethod]; | 317 [[PaymentMethodItem alloc] initWithType:ItemTypePaymentMethod]; |
323 paymentMethodItem = selectedPaymentMethodItem; | 318 paymentMethodItem = selectedPaymentMethodItem; |
324 _selectedPaymentMethodItem = selectedPaymentMethodItem; | 319 _selectedPaymentMethodItem = selectedPaymentMethodItem; |
325 [self fillPaymentMethodItem:selectedPaymentMethodItem | 320 [self fillPaymentMethodItem:selectedPaymentMethodItem |
(...skipping 12 matching lines...) Expand all Loading... |
338 addPaymentMethodItem.accessibilityTraits |= UIAccessibilityTraitButton; | 333 addPaymentMethodItem.accessibilityTraits |= UIAccessibilityTraitButton; |
339 } | 334 } |
340 [model addItem:paymentMethodItem | 335 [model addItem:paymentMethodItem |
341 toSectionWithIdentifier:SectionIdentifierPayment]; | 336 toSectionWithIdentifier:SectionIdentifierPayment]; |
342 | 337 |
343 // Contact Info section. | 338 // Contact Info section. |
344 [model addSectionWithIdentifier:SectionIdentifierContactInfo]; | 339 [model addSectionWithIdentifier:SectionIdentifierContactInfo]; |
345 | 340 |
346 CollectionViewItem* contactInfoItem = nil; | 341 CollectionViewItem* contactInfoItem = nil; |
347 if (_paymentRequest->selected_contact_profile()) { | 342 if (_paymentRequest->selected_contact_profile()) { |
348 CollectionViewTextItem* contactInfoTitle = | 343 PaymentsTextItem* contactInfoTitle = |
349 [[CollectionViewTextItem alloc] initWithType:ItemTypeContactInfoTitle]; | 344 [[PaymentsTextItem alloc] initWithType:ItemTypeContactInfoTitle]; |
350 contactInfoTitle.text = | 345 contactInfoTitle.text = |
351 l10n_util::GetNSString(IDS_PAYMENTS_CONTACT_DETAILS_LABEL); | 346 l10n_util::GetNSString(IDS_PAYMENTS_CONTACT_DETAILS_LABEL); |
352 [model setHeader:contactInfoTitle | 347 [model setHeader:contactInfoTitle |
353 forSectionWithIdentifier:SectionIdentifierContactInfo]; | 348 forSectionWithIdentifier:SectionIdentifierContactInfo]; |
354 | 349 |
355 AutofillProfileItem* selectedContactInfoItem = | 350 AutofillProfileItem* selectedContactInfoItem = |
356 [[AutofillProfileItem alloc] initWithType:ItemTypeContactInfo]; | 351 [[AutofillProfileItem alloc] initWithType:ItemTypeContactInfo]; |
357 contactInfoItem = selectedContactInfoItem; | 352 contactInfoItem = selectedContactInfoItem; |
358 _selectedContactInfoItem = selectedContactInfoItem; | 353 _selectedContactInfoItem = selectedContactInfoItem; |
359 [self fillContactInfoItem:selectedContactInfoItem | 354 [self fillContactInfoItem:selectedContactInfoItem |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
464 } | 459 } |
465 | 460 |
466 - (void)fillShippingAddressItem:(AutofillProfileItem*)item | 461 - (void)fillShippingAddressItem:(AutofillProfileItem*)item |
467 withAutofillProfile:(autofill::AutofillProfile*)profile { | 462 withAutofillProfile:(autofill::AutofillProfile*)profile { |
468 DCHECK(profile); | 463 DCHECK(profile); |
469 item.name = GetNameLabelFromAutofillProfile(*profile); | 464 item.name = GetNameLabelFromAutofillProfile(*profile); |
470 item.address = GetShippingAddressLabelFromAutofillProfile(*profile); | 465 item.address = GetShippingAddressLabelFromAutofillProfile(*profile); |
471 item.phoneNumber = GetPhoneNumberLabelFromAutofillProfile(*profile); | 466 item.phoneNumber = GetPhoneNumberLabelFromAutofillProfile(*profile); |
472 } | 467 } |
473 | 468 |
474 - (void)fillShippingOptionItem:(CollectionViewTextItem*)item | 469 - (void)fillShippingOptionItem:(PaymentsTextItem*)item |
475 withOption:(web::PaymentShippingOption*)option { | 470 withOption:(web::PaymentShippingOption*)option { |
476 item.text = base::SysUTF16ToNSString(option->label); | 471 item.text = base::SysUTF16ToNSString(option->label); |
477 payments::CurrencyFormatter* currencyFormatter = | 472 payments::CurrencyFormatter* currencyFormatter = |
478 _paymentRequest->GetOrCreateCurrencyFormatter(); | 473 _paymentRequest->GetOrCreateCurrencyFormatter(); |
479 item.detailText = SysUTF16ToNSString( | 474 item.detailText = SysUTF16ToNSString( |
480 currencyFormatter->Format(base::UTF16ToASCII(option->amount.value))); | 475 currencyFormatter->Format(base::UTF16ToASCII(option->amount.value))); |
481 } | 476 } |
482 | 477 |
483 - (void)fillPaymentMethodItem:(PaymentMethodItem*)item | 478 - (void)fillPaymentMethodItem:(PaymentMethodItem*)item |
484 withCreditCard:(autofill::CreditCard*)creditCard { | 479 withCreditCard:(autofill::CreditCard*)creditCard { |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
629 | 624 |
630 - (BOOL)collectionView:(UICollectionView*)collectionView | 625 - (BOOL)collectionView:(UICollectionView*)collectionView |
631 shouldHideItemBackgroundAtIndexPath:(NSIndexPath*)indexPath { | 626 shouldHideItemBackgroundAtIndexPath:(NSIndexPath*)indexPath { |
632 // No background on the footer text item. | 627 // No background on the footer text item. |
633 NSInteger sectionIdentifier = | 628 NSInteger sectionIdentifier = |
634 [self.collectionViewModel sectionIdentifierForSection:indexPath.section]; | 629 [self.collectionViewModel sectionIdentifierForSection:indexPath.section]; |
635 return sectionIdentifier == SectionIdentifierFooter ? YES : NO; | 630 return sectionIdentifier == SectionIdentifierFooter ? YES : NO; |
636 } | 631 } |
637 | 632 |
638 @end | 633 @end |
OLD | NEW |