Chromium Code Reviews| Index: ios/chrome/browser/payments/payment_request_view_controller.mm |
| diff --git a/ios/chrome/browser/payments/payment_request_view_controller.mm b/ios/chrome/browser/payments/payment_request_view_controller.mm |
| index 07125fc63e8b0799aca358cb8d88960f304c658a..47ca2f42c4018cc6b9057fc49c914407b75e1b9f 100644 |
| --- a/ios/chrome/browser/payments/payment_request_view_controller.mm |
| +++ b/ios/chrome/browser/payments/payment_request_view_controller.mm |
| @@ -15,10 +15,10 @@ |
| #include "components/autofill/core/browser/personal_data_manager.h" |
| #include "components/payments/currency_formatter.h" |
| #include "components/strings/grit/components_strings.h" |
| +#import "ios/chrome/browser/payments/cells/autofill_profile_item.h" |
| #import "ios/chrome/browser/payments/cells/page_info_item.h" |
| #import "ios/chrome/browser/payments/cells/payment_method_item.h" |
| #import "ios/chrome/browser/payments/cells/price_item.h" |
| -#import "ios/chrome/browser/payments/cells/shipping_address_item.h" |
| #import "ios/chrome/browser/payments/payment_request_util.h" |
| #import "ios/chrome/browser/payments/payment_request_view_controller_actions.h" |
| #import "ios/chrome/browser/ui/autofill/cells/status_item.h" |
| @@ -42,9 +42,12 @@ |
| #error "This file requires ARC support." |
| #endif |
| -using payment_request_util::NameLabelFromAutofillProfile; |
| -using payment_request_util::AddressLabelFromAutofillProfile; |
| -using payment_request_util::PhoneNumberLabelFromAutofillProfile; |
| +namespace { |
| +using ::payment_request_util::GetNameLabelFromAutofillProfile; |
| +using ::payment_request_util::GetAddressLabelFromAutofillProfile; |
| +using ::payment_request_util::GetPhoneNumberLabelFromAutofillProfile; |
| +using ::payment_request_util::GetEmailLabelFromAutofillProfile; |
| +} // namespace |
| NSString* const kPaymentRequestCollectionViewID = |
| @"kPaymentRequestCollectionViewID"; |
| @@ -58,7 +61,7 @@ typedef NS_ENUM(NSInteger, SectionIdentifier) { |
| SectionIdentifierSummary = kSectionIdentifierEnumZero, |
| SectionIdentifierShipping, |
| SectionIdentifierPayment, |
| - |
| + SectionIdentifierContactInfo, |
| }; |
| typedef NS_ENUM(NSInteger, ItemType) { |
| @@ -73,6 +76,9 @@ typedef NS_ENUM(NSInteger, ItemType) { |
| ItemTypePaymentTitle, |
| ItemTypePaymentMethod, |
| ItemTypeAddPaymentMethod, |
| + ItemTypeContactInfoTitle, |
| + ItemTypeContactInfo, |
| + ItemTypeAddContactInfo, |
| }; |
| } // namespace |
| @@ -87,10 +93,11 @@ typedef NS_ENUM(NSInteger, ItemType) { |
| // pointer and should outlive this class. |
| PaymentRequest* _paymentRequest; |
| - PriceItem* _paymentSummaryItem; |
| - ShippingAddressItem* _selectedShippingAddressItem; |
| - CollectionViewTextItem* _selectedShippingOptionItem; |
| - PaymentMethodItem* _selectedPaymentMethodItem; |
| + __weak PriceItem* _paymentSummaryItem; |
| + __weak AutofillProfileItem* _selectedShippingAddressItem; |
| + __weak CollectionViewTextItem* _selectedShippingOptionItem; |
| + __weak PaymentMethodItem* _selectedPaymentMethodItem; |
| + __weak AutofillProfileItem* _selectedContactInfoItem; |
| } |
| @end |
| @@ -110,8 +117,7 @@ typedef NS_ENUM(NSInteger, ItemType) { |
| // Set up leading (cancel) button. |
| _cancelButton = [[UIBarButtonItem alloc] |
| - initWithTitle:l10n_util::GetNSString( |
| - IDS_IOS_PAYMENT_REQUEST_CANCEL_BUTTON) |
| + initWithTitle:l10n_util::GetNSString(IDS_CANCEL) |
| style:UIBarButtonItemStylePlain |
| target:nil |
| action:@selector(onCancel)]; |
| @@ -200,16 +206,18 @@ typedef NS_ENUM(NSInteger, ItemType) { |
| return; |
| } |
| - _paymentSummaryItem = [[PriceItem alloc] initWithType:ItemTypeSummaryTotal]; |
| - [self fillPaymentSummaryItem:_paymentSummaryItem |
| + PriceItem* paymentSummaryItem = |
|
lpromero
2017/02/27 17:52:10
Why the change?
Moe
2017/02/27 20:49:43
After changing these references (e.g. _paymentSumm
|
| + [[PriceItem alloc] initWithType:ItemTypeSummaryTotal]; |
| + _paymentSummaryItem = paymentSummaryItem; |
| + [self fillPaymentSummaryItem:paymentSummaryItem |
| withPaymentItem:_paymentRequest->payment_details().total |
| withTotalValueChanged:NO]; |
| if (!_paymentRequest->payment_details().display_items.empty()) { |
| - _paymentSummaryItem.accessoryType = |
| + paymentSummaryItem.accessoryType = |
| MDCCollectionViewCellAccessoryDisclosureIndicator; |
| - _paymentSummaryItem.accessibilityTraits |= UIAccessibilityTraitButton; |
| + paymentSummaryItem.accessibilityTraits |= UIAccessibilityTraitButton; |
| } |
| - [model addItem:_paymentSummaryItem |
| + [model addItem:paymentSummaryItem |
| toSectionWithIdentifier:SectionIdentifierSummary]; |
| // Shipping section. |
| @@ -222,39 +230,43 @@ typedef NS_ENUM(NSInteger, ItemType) { |
| [model setHeader:shippingTitle |
| forSectionWithIdentifier:SectionIdentifierShipping]; |
| - CollectionViewItem* shippingAddressItem = nil; |
| + id shippingAddressItem = nil; |
|
lpromero
2017/02/27 17:52:10
You can use CollectionViewItem.
Moe
2017/02/27 20:49:43
Done.
|
| if (_paymentRequest->selected_shipping_profile()) { |
| - _selectedShippingAddressItem = |
| - [[ShippingAddressItem alloc] initWithType:ItemTypeShippingAddress]; |
| - shippingAddressItem = _selectedShippingAddressItem; |
| - [self fillShippingAddressItem:_selectedShippingAddressItem |
| - withAddress:_paymentRequest->selected_shipping_profile()]; |
| - _selectedShippingAddressItem.accessoryType = |
| + AutofillProfileItem* selectedShippingAddressItem = |
| + [[AutofillProfileItem alloc] initWithType:ItemTypeShippingAddress]; |
| + shippingAddressItem = selectedShippingAddressItem; |
| + _selectedShippingAddressItem = selectedShippingAddressItem; |
| + [self fillShippingAddressItem:selectedShippingAddressItem |
| + withAutofillProfile:_paymentRequest->selected_shipping_profile()]; |
| + selectedShippingAddressItem.accessoryType = |
| MDCCollectionViewCellAccessoryDisclosureIndicator; |
| - |
| + selectedShippingAddressItem.accessibilityTraits |= |
| + UIAccessibilityTraitButton; |
| } else { |
| CollectionViewDetailItem* addAddressItem = [[CollectionViewDetailItem alloc] |
| initWithType:ItemTypeAddShippingAddress]; |
| shippingAddressItem = addAddressItem; |
| addAddressItem.text = |
| payment_request_util::GetShippingAddressSelectorTitle(_paymentRequest); |
| - addAddressItem.detailText = [l10n_util::GetNSString( |
| - IDS_IOS_PAYMENT_REQUEST_ADD_SHIPPING_ADDRESS_BUTTON) |
| + addAddressItem.detailText = [l10n_util::GetNSString(IDS_ADD) |
| uppercaseStringWithLocale:[NSLocale currentLocale]]; |
| + addAddressItem.accessibilityTraits |= UIAccessibilityTraitButton; |
| } |
| - shippingAddressItem.accessibilityTraits |= UIAccessibilityTraitButton; |
| [model addItem:shippingAddressItem |
| toSectionWithIdentifier:SectionIdentifierShipping]; |
| - CollectionViewItem* shippingOptionItem = nil; |
| + id shippingOptionItem = nil; |
|
lpromero
2017/02/27 17:52:10
Likewise.
Moe
2017/02/27 20:49:42
Done.
|
| if (_paymentRequest->selected_shipping_option()) { |
| - _selectedShippingOptionItem = |
| + CollectionViewTextItem* selectedShippingOptionItem = |
| [[CollectionViewTextItem alloc] initWithType:ItemTypeShippingOption]; |
| - shippingOptionItem = _selectedShippingOptionItem; |
| - [self fillShippingOptionItem:_selectedShippingOptionItem |
| + shippingOptionItem = selectedShippingOptionItem; |
| + _selectedShippingOptionItem = selectedShippingOptionItem; |
| + [self fillShippingOptionItem:selectedShippingOptionItem |
| withOption:_paymentRequest->selected_shipping_option()]; |
| - _selectedShippingOptionItem.accessoryType = |
| + selectedShippingOptionItem.accessoryType = |
| MDCCollectionViewCellAccessoryDisclosureIndicator; |
| + selectedShippingOptionItem.accessibilityTraits |= |
| + UIAccessibilityTraitButton; |
| } else { |
| CollectionViewDetailItem* selectShippingOptionItem = |
| [[CollectionViewDetailItem alloc] |
| @@ -264,8 +276,8 @@ typedef NS_ENUM(NSInteger, ItemType) { |
| payment_request_util::GetShippingOptionSelectorTitle(_paymentRequest); |
| selectShippingOptionItem.accessoryType = |
| MDCCollectionViewCellAccessoryDisclosureIndicator; |
| + selectShippingOptionItem.accessibilityTraits |= UIAccessibilityTraitButton; |
| } |
| - shippingOptionItem.accessibilityTraits |= UIAccessibilityTraitButton; |
| [model addItem:shippingOptionItem |
| toSectionWithIdentifier:SectionIdentifierShipping]; |
| @@ -277,30 +289,65 @@ typedef NS_ENUM(NSInteger, ItemType) { |
| CollectionViewTextItem* paymentTitle = |
| [[CollectionViewTextItem alloc] initWithType:ItemTypePaymentTitle]; |
| paymentTitle.text = |
| - l10n_util::GetNSString(IDS_IOS_PAYMENT_REQUEST_PAYMENT_METHOD_HEADER); |
| + l10n_util::GetNSString(IDS_PAYMENTS_METHOD_OF_PAYMENT_LABEL); |
| [model setHeader:paymentTitle |
| forSectionWithIdentifier:SectionIdentifierPayment]; |
| - _selectedPaymentMethodItem = |
| + PaymentMethodItem* selectedPaymentMethodItem = |
| [[PaymentMethodItem alloc] initWithType:ItemTypePaymentMethod]; |
| - paymentMethodItem = _selectedPaymentMethodItem; |
| - [self fillPaymentMethodItem:_selectedPaymentMethodItem |
| - withPaymentMethod:_paymentRequest->selected_credit_card()]; |
| - _selectedPaymentMethodItem.accessoryType = |
| + paymentMethodItem = selectedPaymentMethodItem; |
| + _selectedPaymentMethodItem = selectedPaymentMethodItem; |
| + [self fillPaymentMethodItem:selectedPaymentMethodItem |
| + withCreditCard:_paymentRequest->selected_credit_card()]; |
| + selectedPaymentMethodItem.accessoryType = |
| MDCCollectionViewCellAccessoryDisclosureIndicator; |
| + selectedPaymentMethodItem.accessibilityTraits |= UIAccessibilityTraitButton; |
| } else { |
| CollectionViewDetailItem* addPaymentMethodItem = [ |
| [CollectionViewDetailItem alloc] initWithType:ItemTypeAddPaymentMethod]; |
| paymentMethodItem = addPaymentMethodItem; |
| addPaymentMethodItem.text = |
| - l10n_util::GetNSString(IDS_IOS_PAYMENT_REQUEST_PAYMENT_METHOD_HEADER); |
| - addPaymentMethodItem.detailText = [l10n_util::GetNSString( |
| - IDS_IOS_PAYMENT_REQUEST_ADD_SHIPPING_ADDRESS_BUTTON) |
| + l10n_util::GetNSString(IDS_PAYMENTS_METHOD_OF_PAYMENT_LABEL); |
| + addPaymentMethodItem.detailText = [l10n_util::GetNSString(IDS_ADD) |
| uppercaseStringWithLocale:[NSLocale currentLocale]]; |
| + addPaymentMethodItem.accessibilityTraits |= UIAccessibilityTraitButton; |
| } |
| - paymentMethodItem.accessibilityTraits |= UIAccessibilityTraitButton; |
| [model addItem:paymentMethodItem |
| toSectionWithIdentifier:SectionIdentifierPayment]; |
| + |
| + // Contact Info section. |
| + [model addSectionWithIdentifier:SectionIdentifierContactInfo]; |
| + |
| + id contactInfoItem = nil; |
|
lpromero
2017/02/27 17:52:10
Likewise for the type.
Moe
2017/02/27 20:49:43
Done.
|
| + if (_paymentRequest->selected_contact_profile()) { |
| + CollectionViewTextItem* contactInfoTitle = |
| + [[CollectionViewTextItem alloc] initWithType:ItemTypeContactInfoTitle]; |
| + contactInfoTitle.text = |
| + l10n_util::GetNSString(IDS_PAYMENTS_CONTACT_DETAILS_LABEL); |
| + [model setHeader:contactInfoTitle |
| + forSectionWithIdentifier:SectionIdentifierContactInfo]; |
| + |
| + AutofillProfileItem* selectedContactInfoItem = |
| + [[AutofillProfileItem alloc] initWithType:ItemTypeContactInfo]; |
| + contactInfoItem = selectedContactInfoItem; |
| + _selectedContactInfoItem = selectedContactInfoItem; |
| + [self fillContactInfoItem:selectedContactInfoItem |
| + withAutofillProfile:_paymentRequest->selected_contact_profile()]; |
| + selectedContactInfoItem.accessoryType = |
| + MDCCollectionViewCellAccessoryDisclosureIndicator; |
| + |
| + } else { |
| + CollectionViewDetailItem* addContactInfoItem = |
| + [[CollectionViewDetailItem alloc] initWithType:ItemTypeAddContactInfo]; |
| + contactInfoItem = addContactInfoItem; |
| + addContactInfoItem.text = |
| + l10n_util::GetNSString(IDS_PAYMENTS_CONTACT_DETAILS_LABEL); |
| + addContactInfoItem.detailText = [l10n_util::GetNSString(IDS_ADD) |
| + uppercaseStringWithLocale:[NSLocale currentLocale]]; |
| + addContactInfoItem.accessibilityTraits |= UIAccessibilityTraitButton; |
| + } |
| + [model addItem:contactInfoItem |
| + toSectionWithIdentifier:SectionIdentifierContactInfo]; |
| } |
| - (void)viewDidLoad { |
| @@ -325,7 +372,7 @@ typedef NS_ENUM(NSInteger, ItemType) { |
| - (void)updateSelectedShippingAddressUI { |
| [self fillShippingAddressItem:_selectedShippingAddressItem |
| - withAddress:_paymentRequest->selected_shipping_profile()]; |
| + withAutofillProfile:_paymentRequest->selected_shipping_profile()]; |
| NSIndexPath* indexPath = |
| [self.collectionViewModel indexPathForItem:_selectedShippingAddressItem |
| inSectionWithIdentifier:SectionIdentifierShipping]; |
| @@ -343,7 +390,7 @@ typedef NS_ENUM(NSInteger, ItemType) { |
| - (void)updateSelectedPaymentMethodUI { |
| [self fillPaymentMethodItem:_selectedPaymentMethodItem |
| - withPaymentMethod:_paymentRequest->selected_credit_card()]; |
| + withCreditCard:_paymentRequest->selected_credit_card()]; |
| NSIndexPath* indexPath = |
| [self.collectionViewModel indexPathForItem:_selectedPaymentMethodItem |
| inSectionWithIdentifier:SectionIdentifierPayment]; |
| @@ -368,11 +415,11 @@ typedef NS_ENUM(NSInteger, ItemType) { |
| : nil; |
| } |
| -- (void)fillShippingAddressItem:(ShippingAddressItem*)item |
| - withAddress:(autofill::AutofillProfile*)address { |
| - item.name = NameLabelFromAutofillProfile(address); |
| - item.address = AddressLabelFromAutofillProfile(address); |
| - item.phoneNumber = PhoneNumberLabelFromAutofillProfile(address); |
| +- (void)fillShippingAddressItem:(AutofillProfileItem*)item |
| + withAutofillProfile:(autofill::AutofillProfile*)profile { |
| + item.name = GetNameLabelFromAutofillProfile(profile); |
| + item.address = GetAddressLabelFromAutofillProfile(profile); |
| + item.phoneNumber = GetPhoneNumberLabelFromAutofillProfile(profile); |
| } |
| - (void)fillShippingOptionItem:(CollectionViewTextItem*)item |
| @@ -385,7 +432,7 @@ typedef NS_ENUM(NSInteger, ItemType) { |
| } |
| - (void)fillPaymentMethodItem:(PaymentMethodItem*)item |
| - withPaymentMethod:(autofill::CreditCard*)creditCard { |
| + withCreditCard:(autofill::CreditCard*)creditCard { |
| item.methodID = base::SysUTF16ToNSString(creditCard->TypeAndLastFourDigits()); |
| item.methodDetail = base::SysUTF16ToNSString( |
| creditCard->GetRawInfo(autofill::CREDIT_CARD_NAME_FULL)); |
| @@ -395,6 +442,13 @@ typedef NS_ENUM(NSInteger, ItemType) { |
| item.methodTypeIcon = NativeImage(selectedMethodCardTypeIconID); |
| } |
| +- (void)fillContactInfoItem:(AutofillProfileItem*)item |
| + withAutofillProfile:(autofill::AutofillProfile*)profile { |
| + item.name = GetNameLabelFromAutofillProfile(profile); |
| + item.phoneNumber = GetPhoneNumberLabelFromAutofillProfile(profile); |
| + item.email = GetEmailLabelFromAutofillProfile(profile); |
| +} |
| + |
| #pragma mark UICollectionViewDataSource |
| - (UICollectionViewCell*)collectionView:(UICollectionView*)collectionView |
| @@ -454,6 +508,10 @@ typedef NS_ENUM(NSInteger, ItemType) { |
| case ItemTypeAddPaymentMethod: |
| [_delegate paymentRequestViewControllerDidSelectPaymentMethodItem:self]; |
| break; |
| + case ItemTypeContactInfo: |
| + case ItemTypeAddContactInfo: |
| + // TODO(crbug.com/602666): Handle displaying contact info selection view. |
| + break; |
| default: |
| NOTREACHED(); |
| break; |
| @@ -470,6 +528,7 @@ typedef NS_ENUM(NSInteger, ItemType) { |
| case ItemTypeSpinner: |
| case ItemTypeShippingAddress: |
| case ItemTypePaymentMethod: |
| + case ItemTypeContactInfo: |
| return [MDCCollectionViewCell |
| cr_preferredHeightForWidth:CGRectGetWidth(collectionView.bounds) |
| forItem:item]; |
| @@ -482,6 +541,8 @@ typedef NS_ENUM(NSInteger, ItemType) { |
| case ItemTypeSelectShippingOption: |
| case ItemTypePaymentTitle: |
| case ItemTypeAddPaymentMethod: |
| + case ItemTypeContactInfoTitle: |
| + case ItemTypeAddContactInfo: |
|
lpromero
2017/02/27 17:52:10
Would this last one support being dynamically size
Moe
2017/02/27 20:49:43
This one is a CollectionViewDetailItem. So it shou
lpromero
2017/02/28 10:03:04
preferredMaxLayoutWidth is only for multilines lab
|
| return MDCCellDefaultOneLineHeight; |
| default: |
| NOTREACHED(); |