| 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 |