Chromium Code Reviews| Index: ios/chrome/browser/ui/payments/credit_card_edit_mediator.mm |
| diff --git a/ios/chrome/browser/ui/payments/credit_card_edit_mediator.mm b/ios/chrome/browser/ui/payments/credit_card_edit_mediator.mm |
| index 9a67d11104b51471cfdc61644b5d262073eecf52..341220d5581745d56825baddbe4fb7c8e6318b88 100644 |
| --- a/ios/chrome/browser/ui/payments/credit_card_edit_mediator.mm |
| +++ b/ios/chrome/browser/ui/payments/credit_card_edit_mediator.mm |
| @@ -65,65 +65,57 @@ const CGFloat kCardIssuerNetworkIconDimension = 20.0; |
| _paymentRequest = paymentRequest; |
| _creditCard = creditCard; |
| _editorFields = [self createEditorFields]; |
| + _state = _creditCard ? EditViewControllerStateEdit |
| + : EditViewControllerStateCreate; |
| } |
| return self; |
| } |
| -- (CollectionViewItem*)serverCardSummaryItem { |
| - // Return nil if creating or editing a local card. |
| - if (!_creditCard || autofill::IsCreditCardLocal(*_creditCard)) |
| - return nil; |
| - |
| - PaymentMethodItem* cardSummaryItem = [[PaymentMethodItem alloc] init]; |
| - cardSummaryItem.methodID = |
| - base::SysUTF16ToNSString(_creditCard->NetworkAndLastFourDigits()); |
| - cardSummaryItem.methodDetail = base::SysUTF16ToNSString( |
| - _creditCard->GetRawInfo(autofill::CREDIT_CARD_NAME_FULL)); |
| - const int issuerNetworkIconID = |
| - autofill::data_util::GetPaymentRequestData(_creditCard->network()) |
| - .icon_resource_id; |
| - cardSummaryItem.methodTypeIcon = NativeImage(issuerNetworkIconID); |
| - return cardSummaryItem; |
| -} |
| - |
| -- (CollectionViewItem*)acceptedPaymentMethodsItem { |
| - // Return nil if a server card is being edited. |
| - if (_creditCard && !autofill::IsCreditCardLocal(*_creditCard)) |
| - return nil; |
| - |
| - NSMutableArray* issuerNetworkIcons = [NSMutableArray array]; |
| - for (const auto& supportedNetwork : |
| - _paymentRequest->supported_card_networks()) { |
| - const std::string issuerNetwork = |
| - GetIssuerNetworkForBasicCardIssuerNetwork(supportedNetwork); |
| - const autofill::data_util::PaymentRequestData& cardData = |
| - GetPaymentRequestData(issuerNetwork); |
| - UIImage* issuerNetworkIcon = |
| - ResizeImage(NativeImage(cardData.icon_resource_id), |
| - CGSizeMake(kCardIssuerNetworkIconDimension, |
| - kCardIssuerNetworkIconDimension), |
| - ProjectionMode::kAspectFillNoClipping); |
| - issuerNetworkIcon.accessibilityLabel = |
| - l10n_util::GetNSString(cardData.a11y_label_resource_id); |
| - [issuerNetworkIcons addObject:issuerNetworkIcon]; |
| +- (CollectionViewItem*)headerItem { |
| + if (_creditCard && !autofill::IsCreditCardLocal(*_creditCard)) { |
| + // Return an item that identifies the server card being edited. |
| + PaymentMethodItem* cardSummaryItem = [[PaymentMethodItem alloc] init]; |
| + cardSummaryItem.methodID = |
| + base::SysUTF16ToNSString(_creditCard->NetworkAndLastFourDigits()); |
| + cardSummaryItem.methodDetail = base::SysUTF16ToNSString( |
| + _creditCard->GetRawInfo(autofill::CREDIT_CARD_NAME_FULL)); |
| + const int issuerNetworkIconID = |
| + autofill::data_util::GetPaymentRequestData(_creditCard->network()) |
| + .icon_resource_id; |
| + cardSummaryItem.methodTypeIcon = NativeImage(issuerNetworkIconID); |
| + return cardSummaryItem; |
| + } else { |
|
macourteau
2017/05/11 18:59:39
nit: get rid of the else {}, since the 'if' always
Moe
2017/05/11 19:39:38
Done. Not sure If I understand the comment in pare
macourteau
2017/05/11 19:58:23
Never mind that comment, didn't match the braces c
|
| + // Return an item that displays a list of payment method type icons for the |
| + // accepted payment methods. |
| + NSMutableArray* issuerNetworkIcons = [NSMutableArray array]; |
| + for (const auto& supportedNetwork : |
| + _paymentRequest->supported_card_networks()) { |
| + const std::string issuerNetwork = |
| + GetIssuerNetworkForBasicCardIssuerNetwork(supportedNetwork); |
| + const autofill::data_util::PaymentRequestData& cardData = |
| + GetPaymentRequestData(issuerNetwork); |
| + UIImage* issuerNetworkIcon = |
| + ResizeImage(NativeImage(cardData.icon_resource_id), |
| + CGSizeMake(kCardIssuerNetworkIconDimension, |
| + kCardIssuerNetworkIconDimension), |
| + ProjectionMode::kAspectFillNoClipping); |
| + issuerNetworkIcon.accessibilityLabel = |
| + l10n_util::GetNSString(cardData.a11y_label_resource_id); |
| + [issuerNetworkIcons addObject:issuerNetworkIcon]; |
| + } |
| + |
| + AcceptedPaymentMethodsItem* acceptedMethodsItem = |
| + [[AcceptedPaymentMethodsItem alloc] init]; |
| + acceptedMethodsItem.message = |
| + l10n_util::GetNSString(IDS_PAYMENTS_ACCEPTED_CARDS_LABEL); |
| + acceptedMethodsItem.methodTypeIcons = issuerNetworkIcons; |
| + return acceptedMethodsItem; |
| } |
| - |
| - AcceptedPaymentMethodsItem* acceptedMethodsItem = |
| - [[AcceptedPaymentMethodsItem alloc] init]; |
| - acceptedMethodsItem.message = |
| - l10n_util::GetNSString(IDS_PAYMENTS_ACCEPTED_CARDS_LABEL); |
| - acceptedMethodsItem.methodTypeIcons = issuerNetworkIcons; |
| - return acceptedMethodsItem; |
| } |
| -- (NSString*)billingAddressLabelForProfileWithGUID:(NSString*)profileGUID { |
| - DCHECK(profileGUID); |
| - autofill::AutofillProfile* profile = |
| - autofill::PersonalDataManager::GetProfileFromProfilesByGUID( |
| - base::SysNSStringToUTF8(profileGUID), |
| - _paymentRequest->billing_profiles()); |
| - DCHECK(profile); |
| - return GetBillingAddressLabelFromAutofillProfile(*profile); |
| +- (BOOL)shouldHideBackgroundForHeaderItem { |
| + // YES if the header item displays the accepted payment method type icons. |
| + return !_creditCard || autofill::IsCreditCardLocal(*_creditCard); |
| } |
| - (UIImage*)cardTypeIconFromCardNumber:(NSString*)cardNumber { |
| @@ -147,10 +139,39 @@ const CGFloat kCardIssuerNetworkIconDimension = 20.0; |
| #pragma mark - Helper methods |
| +// Returns the billing address label from an autofill profile with the given |
| +// guid. Returns nil if the profile does not have an address. |
| +- (NSString*)billingAddressLabelForProfileWithGUID:(NSString*)profileGUID { |
| + DCHECK(profileGUID); |
| + autofill::AutofillProfile* profile = |
| + autofill::PersonalDataManager::GetProfileFromProfilesByGUID( |
| + base::SysNSStringToUTF8(profileGUID), |
| + _paymentRequest->billing_profiles()); |
| + DCHECK(profile); |
| + return GetBillingAddressLabelFromAutofillProfile(*profile); |
| +} |
| + |
| - (NSArray<EditorField*>*)createEditorFields { |
| - // Server credit cards are not editable. |
| + NSString* billingAddressGUID = |
| + _creditCard && !_creditCard->billing_address_id().empty() |
| + ? base::SysUTF8ToNSString(_creditCard->billing_address_id()) |
| + : nil; |
| + NSString* billingAddressLabel = |
| + billingAddressGUID |
| + ? [self billingAddressLabelForProfileWithGUID:billingAddressGUID] |
| + : nil; |
| + EditorField* billingAddressEditorField = [[EditorField alloc] |
| + initWithAutofillUIType:AutofillUITypeCreditCardBillingAddress |
| + fieldType:EditorFieldTypeSelector |
| + label:l10n_util::GetNSString( |
| + IDS_PAYMENTS_BILLING_ADDRESS) |
| + value:billingAddressGUID |
| + required:YES]; |
| + [billingAddressEditorField setDisplayValue:billingAddressLabel]; |
| + |
| + // Only the billing address of server credit cards can be edited. |
|
macourteau
2017/05/11 18:59:39
nit: this comment had me stumped for a while, mayb
Moe
2017/05/11 19:39:38
Done.
|
| if (_creditCard && !autofill::IsCreditCardLocal(*_creditCard)) |
| - return @[]; |
| + return @[ billingAddressEditorField ]; |
| NSString* creditCardNumber = |
| _creditCard ? base::SysUTF16ToNSString(_creditCard->number()) : nil; |
| @@ -171,32 +192,40 @@ const CGFloat kCardIssuerNetworkIconDimension = 20.0; |
| ? [NSString stringWithFormat:@"%04d", _creditCard->expiration_year()] |
| : nil; |
| - return @[ |
| + NSMutableArray* editorFields = [[NSMutableArray alloc] init]; |
| + [editorFields addObjectsFromArray:@[ |
| [[EditorField alloc] |
| initWithAutofillUIType:AutofillUITypeFromAutofillType( |
| autofill::CREDIT_CARD_NUMBER) |
| + fieldType:EditorFieldTypeTextField |
| label:l10n_util::GetNSString(IDS_PAYMENTS_CARD_NUMBER) |
| value:creditCardNumber |
| required:YES], |
| [[EditorField alloc] |
| initWithAutofillUIType:AutofillUITypeFromAutofillType( |
| autofill::CREDIT_CARD_NAME_FULL) |
| + fieldType:EditorFieldTypeTextField |
| label:l10n_util::GetNSString(IDS_PAYMENTS_NAME_ON_CARD) |
| value:creditCardName |
| required:YES], |
| [[EditorField alloc] |
| initWithAutofillUIType:AutofillUITypeFromAutofillType( |
| autofill::CREDIT_CARD_EXP_MONTH) |
| + fieldType:EditorFieldTypeTextField |
| label:l10n_util::GetNSString(IDS_PAYMENTS_EXP_MONTH) |
| value:creditCardExpMonth |
| required:YES], |
| [[EditorField alloc] |
| initWithAutofillUIType:AutofillUITypeFromAutofillType( |
| autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR) |
| + fieldType:EditorFieldTypeTextField |
| label:l10n_util::GetNSString(IDS_PAYMENTS_EXP_YEAR) |
| value:creditCardExpYear |
| required:YES] |
| - ]; |
| + ]]; |
| + // The billing address field goes at the end. |
| + [editorFields addObject:billingAddressEditorField]; |
| + return editorFields; |
| } |
| @end |