| 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..af8673eefa492b3ba388b6fd07526de457d06121 100644
|
| --- a/ios/chrome/browser/ui/payments/credit_card_edit_mediator.mm
|
| +++ b/ios/chrome/browser/ui/payments/credit_card_edit_mediator.mm
|
| @@ -65,32 +65,29 @@ 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;
|
| +- (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;
|
| + }
|
|
|
| + // Otherwise, 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()) {
|
| @@ -116,14 +113,9 @@ const CGFloat kCardIssuerNetworkIconDimension = 20.0;
|
| 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];
|
| +
|
| + // For server cards, only the billing address can be edited.
|
| 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
|
|
|