Index: ios/chrome/browser/ui/payments/payment_request_mediator.mm |
diff --git a/ios/chrome/browser/ui/payments/payment_request_mediator.mm b/ios/chrome/browser/ui/payments/payment_request_mediator.mm |
index 494729a0cb63eb0bb1cbc5799b54b9612c01d3db..ce5c2d6fd30f569ba4b8e7ca92e5fa257fad9368 100644 |
--- a/ios/chrome/browser/ui/payments/payment_request_mediator.mm |
+++ b/ios/chrome/browser/ui/payments/payment_request_mediator.mm |
@@ -2,279 +2,28 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#import <Foundation/Foundation.h> |
- |
#include "ios/chrome/browser/ui/payments/payment_request_mediator.h" |
#include "base/strings/sys_string_conversions.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "components/autofill/core/browser/autofill_data_util.h" |
-#include "components/autofill/core/browser/autofill_profile.h" |
-#include "components/autofill/core/browser/credit_card.h" |
-#include "components/autofill/core/browser/field_types.h" |
-#include "components/payments/core/currency_formatter.h" |
-#include "components/payments/core/strings_util.h" |
#include "components/signin/core/browser/signin_manager.h" |
-#include "components/strings/grit/components_strings.h" |
-#include "ios/chrome/browser/payments/payment_request.h" |
-#include "ios/chrome/browser/payments/payment_request_util.h" |
#include "ios/chrome/browser/signin/signin_manager_factory.h" |
-#import "ios/chrome/browser/ui/collection_view/cells/collection_view_detail_item.h" |
-#import "ios/chrome/browser/ui/collection_view/cells/collection_view_footer_item.h" |
-#import "ios/chrome/browser/ui/collection_view/cells/collection_view_item.h" |
-#import "ios/chrome/browser/ui/payments/cells/autofill_profile_item.h" |
-#import "ios/chrome/browser/ui/payments/cells/payment_method_item.h" |
-#import "ios/chrome/browser/ui/payments/cells/payments_text_item.h" |
-#import "ios/chrome/browser/ui/payments/cells/price_item.h" |
-#include "ios/chrome/browser/ui/uikit_ui_util.h" |
-#include "ui/base/l10n/l10n_util.h" |
-#include "ui/base/resource/resource_bundle.h" |
-#if !defined(__has_feature) || !__has_feature(objc_arc) |
-#error "This file requires ARC support." |
-#endif |
+@implementation PaymentRequestMediator { |
+ ios::ChromeBrowserState* _browserState; |
+} |
-namespace { |
-// String used as the "URL" to take the user to the settings page for card and |
-// address options. Needs to be URL-like; otherwise, the link will not appear |
-// as a link in the UI (see setLabelLinkURL: in CollectionViewFooterCell). |
-const char kSettingsURL[] = "settings://card-and-address"; |
- |
-using ::payments::GetShippingOptionSectionString; |
-using ::payment_request_util::GetEmailLabelFromAutofillProfile; |
-using ::payment_request_util::GetNameLabelFromAutofillProfile; |
-using ::payment_request_util::GetPhoneNumberLabelFromAutofillProfile; |
-using ::payment_request_util::GetShippingAddressLabelFromAutofillProfile; |
-using ::payment_request_util::GetShippingSectionTitle; |
-} // namespace |
- |
-@interface PaymentRequestMediator () |
- |
-@property(nonatomic, assign) ios::ChromeBrowserState* browserState; |
- |
-// The PaymentRequest object owning an instance of web::PaymentRequest as |
-// provided by the page invoking the Payment Request API. This is a weak |
-// pointer and should outlive this class. |
-@property(nonatomic, assign) PaymentRequest* paymentRequest; |
- |
-@end |
- |
-@implementation PaymentRequestMediator |
- |
-@synthesize totalValueChanged = _totalValueChanged; |
-@synthesize browserState = _browserState; |
-@synthesize paymentRequest = _paymentRequest; |
- |
-- (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState |
- paymentRequest:(PaymentRequest*)paymentRequest { |
+- (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState { |
DCHECK(browserState); |
self = [super init]; |
if (self) { |
_browserState = browserState; |
- _paymentRequest = paymentRequest; |
} |
return self; |
} |
-#pragma mark - PaymentRequestViewControllerDataSource |
- |
-- (BOOL)canPay { |
- return self.paymentRequest->selected_credit_card() != nullptr && |
- (self.paymentRequest->selected_shipping_option() != nullptr || |
- ![self requestShipping]) && |
- (self.paymentRequest->selected_shipping_profile() != nullptr || |
- ![self requestShipping]) && |
- (self.paymentRequest->selected_contact_profile() != nullptr || |
- ![self requestContactInfo]); |
-} |
- |
-- (BOOL)canShip { |
- return !self.paymentRequest->shipping_options().empty() && |
- self.paymentRequest->selected_shipping_profile() != nullptr; |
-} |
- |
-- (BOOL)hasPaymentItems { |
- return !self.paymentRequest->payment_details().display_items.empty(); |
-} |
- |
-- (BOOL)requestShipping { |
- return self.paymentRequest->request_shipping(); |
-} |
- |
-- (BOOL)requestContactInfo { |
- return self.paymentRequest->request_payer_name() || |
- self.paymentRequest->request_payer_email() || |
- self.paymentRequest->request_payer_phone(); |
-} |
- |
-- (CollectionViewItem*)paymentSummaryItem { |
- PriceItem* item = [[PriceItem alloc] init]; |
- item.item = base::SysUTF16ToNSString( |
- self.paymentRequest->payment_details().total.label); |
- payments::CurrencyFormatter* currencyFormatter = |
- self.paymentRequest->GetOrCreateCurrencyFormatter(); |
- item.price = SysUTF16ToNSString(l10n_util::GetStringFUTF16( |
- IDS_PAYMENT_REQUEST_ORDER_SUMMARY_SHEET_TOTAL_FORMAT, |
- base::UTF8ToUTF16(currencyFormatter->formatted_currency_code()), |
- currencyFormatter->Format(base::UTF16ToASCII( |
- self.paymentRequest->payment_details().total.amount.value)))); |
- item.notification = self.totalValueChanged |
- ? l10n_util::GetNSString(IDS_PAYMENTS_UPDATED_LABEL) |
- : nil; |
- self.totalValueChanged = NO; |
- if ([self hasPaymentItems]) { |
- item.accessoryType = MDCCollectionViewCellAccessoryDisclosureIndicator; |
- } |
- return item; |
-} |
- |
-- (CollectionViewItem*)shippingSectionHeaderItem { |
- PaymentsTextItem* item = [[PaymentsTextItem alloc] init]; |
- item.text = GetShippingSectionTitle(self.paymentRequest->shipping_type()); |
- return item; |
-} |
- |
-- (CollectionViewItem*)shippingAddressItem { |
- const autofill::AutofillProfile* profile = |
- self.paymentRequest->selected_shipping_profile(); |
- if (profile) { |
- AutofillProfileItem* item = [[AutofillProfileItem alloc] init]; |
- item.name = GetNameLabelFromAutofillProfile(*profile); |
- item.address = GetShippingAddressLabelFromAutofillProfile(*profile); |
- item.phoneNumber = GetPhoneNumberLabelFromAutofillProfile(*profile); |
- item.accessoryType = MDCCollectionViewCellAccessoryDisclosureIndicator; |
- return item; |
- } |
- |
- CollectionViewDetailItem* item = [[CollectionViewDetailItem alloc] init]; |
- item.text = SysUTF16ToNSString( |
- GetShippingAddressSectionString(self.paymentRequest->shipping_type())); |
- if (self.paymentRequest->shipping_profiles().empty()) { |
- item.detailText = [l10n_util::GetNSString(IDS_ADD) |
- uppercaseStringWithLocale:[NSLocale currentLocale]]; |
- } else { |
- item.accessoryType = MDCCollectionViewCellAccessoryDisclosureIndicator; |
- } |
- return item; |
-} |
- |
-- (CollectionViewItem*)shippingOptionItem { |
- const web::PaymentShippingOption* option = |
- self.paymentRequest->selected_shipping_option(); |
- if (option) { |
- PaymentsTextItem* item = [[PaymentsTextItem alloc] init]; |
- item.text = base::SysUTF16ToNSString(option->label); |
- payments::CurrencyFormatter* currencyFormatter = |
- self.paymentRequest->GetOrCreateCurrencyFormatter(); |
- item.detailText = SysUTF16ToNSString( |
- currencyFormatter->Format(base::UTF16ToASCII(option->amount.value))); |
- item.accessoryType = MDCCollectionViewCellAccessoryDisclosureIndicator; |
- return item; |
- } |
- |
- CollectionViewDetailItem* item = [[CollectionViewDetailItem alloc] init]; |
- item.text = base::SysUTF16ToNSString( |
- GetShippingOptionSectionString(self.paymentRequest->shipping_type())); |
- item.accessoryType = MDCCollectionViewCellAccessoryDisclosureIndicator; |
- return item; |
-} |
- |
-- (CollectionViewItem*)paymentMethodSectionHeaderItem { |
- if (!self.paymentRequest->selected_credit_card()) |
- return nil; |
- PaymentsTextItem* item = [[PaymentsTextItem alloc] init]; |
- item.text = |
- l10n_util::GetNSString(IDS_PAYMENT_REQUEST_PAYMENT_METHOD_SECTION_NAME); |
- return item; |
-} |
- |
-- (CollectionViewItem*)paymentMethodItem { |
- const autofill::CreditCard* creditCard = |
- self.paymentRequest->selected_credit_card(); |
- if (creditCard) { |
- PaymentMethodItem* item = [[PaymentMethodItem alloc] init]; |
- item.methodID = |
- base::SysUTF16ToNSString(creditCard->NetworkAndLastFourDigits()); |
- item.methodDetail = base::SysUTF16ToNSString( |
- creditCard->GetRawInfo(autofill::CREDIT_CARD_NAME_FULL)); |
- int issuerNetworkIconID = |
- autofill::data_util::GetPaymentRequestData(creditCard->network()) |
- .icon_resource_id; |
- item.methodTypeIcon = NativeImage(issuerNetworkIconID); |
- item.accessoryType = MDCCollectionViewCellAccessoryDisclosureIndicator; |
- return item; |
- } |
- |
- CollectionViewDetailItem* item = [[CollectionViewDetailItem alloc] init]; |
- item.text = |
- l10n_util::GetNSString(IDS_PAYMENT_REQUEST_PAYMENT_METHOD_SECTION_NAME); |
- if (self.paymentRequest->credit_cards().empty()) { |
- item.detailText = [l10n_util::GetNSString(IDS_ADD) |
- uppercaseStringWithLocale:[NSLocale currentLocale]]; |
- } else { |
- item.accessoryType = MDCCollectionViewCellAccessoryDisclosureIndicator; |
- } |
- return item; |
-} |
- |
-- (CollectionViewItem*)contactInfoSectionHeaderItem { |
- if (!self.paymentRequest->selected_contact_profile()) |
- return nil; |
- PaymentsTextItem* item = [[PaymentsTextItem alloc] init]; |
- item.text = l10n_util::GetNSString(IDS_PAYMENTS_CONTACT_DETAILS_LABEL); |
- return item; |
-} |
- |
-- (CollectionViewItem*)contactInfoItem { |
- const autofill::AutofillProfile* profile = |
- self.paymentRequest->selected_contact_profile(); |
- if (profile) { |
- AutofillProfileItem* item = [[AutofillProfileItem alloc] init]; |
- item.name = GetNameLabelFromAutofillProfile(*profile); |
- item.phoneNumber = GetPhoneNumberLabelFromAutofillProfile(*profile); |
- item.email = GetEmailLabelFromAutofillProfile(*profile); |
- item.accessoryType = MDCCollectionViewCellAccessoryDisclosureIndicator; |
- return item; |
- } |
- |
- CollectionViewDetailItem* item = [[CollectionViewDetailItem alloc] init]; |
- item.text = l10n_util::GetNSString(IDS_PAYMENTS_CONTACT_DETAILS_LABEL); |
- if (self.paymentRequest->contact_profiles().empty()) { |
- item.detailText = [l10n_util::GetNSString(IDS_ADD) |
- uppercaseStringWithLocale:[NSLocale currentLocale]]; |
- } else { |
- item.accessoryType = MDCCollectionViewCellAccessoryDisclosureIndicator; |
- } |
- return item; |
-} |
- |
-- (CollectionViewFooterItem*)footerItem { |
- CollectionViewFooterItem* item = [[CollectionViewFooterItem alloc] init]; |
- |
- // TODO(crbug.com/602666): Find out if the first payment has completed. |
- BOOL firstPaymentCompleted = YES; |
- if (!firstPaymentCompleted) { |
- item.text = l10n_util::GetNSString(IDS_PAYMENTS_CARD_AND_ADDRESS_SETTINGS); |
- } else if ([[self authenticatedAccountName] length]) { |
- const base::string16 accountName = |
- base::SysNSStringToUTF16([self authenticatedAccountName]); |
- const std::string formattedString = l10n_util::GetStringFUTF8( |
- IDS_PAYMENTS_CARD_AND_ADDRESS_SETTINGS_SIGNED_IN, accountName); |
- item.text = base::SysUTF8ToNSString(formattedString); |
- } else { |
- item.text = l10n_util::GetNSString( |
- IDS_PAYMENTS_CARD_AND_ADDRESS_SETTINGS_SIGNED_OUT); |
- } |
- item.linkURL = GURL(kSettingsURL); |
- return item; |
-} |
- |
-#pragma mark - Helper methods |
- |
-// Returns the authenticated account name, or nil if user is not authenticated. |
- (NSString*)authenticatedAccountName { |
const SigninManager* signinManager = |
- ios::SigninManagerFactory::GetForBrowserStateIfExists(self.browserState); |
+ ios::SigninManagerFactory::GetForBrowserStateIfExists(_browserState); |
if (signinManager && signinManager->IsAuthenticated()) { |
return base::SysUTF8ToNSString( |
signinManager->GetAuthenticatedAccountInfo().email); |