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 #import "base/ios/weak_nsobject.h" | |
8 #include "base/mac/foundation_util.h" | 7 #include "base/mac/foundation_util.h" |
9 #include "base/mac/objc_property_releaser.h" | 8 |
10 #include "base/mac/scoped_nsobject.h" | |
11 #include "base/strings/sys_string_conversions.h" | 9 #include "base/strings/sys_string_conversions.h" |
12 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
13 #include "components/autofill/core/browser/autofill_data_util.h" | 11 #include "components/autofill/core/browser/autofill_data_util.h" |
14 #include "components/autofill/core/browser/autofill_profile.h" | 12 #include "components/autofill/core/browser/autofill_profile.h" |
15 #include "components/autofill/core/browser/credit_card.h" | 13 #include "components/autofill/core/browser/credit_card.h" |
16 #include "components/autofill/core/browser/field_types.h" | 14 #include "components/autofill/core/browser/field_types.h" |
17 #include "components/autofill/core/browser/personal_data_manager.h" | 15 #include "components/autofill/core/browser/personal_data_manager.h" |
18 #include "components/payments/currency_formatter.h" | 16 #include "components/payments/currency_formatter.h" |
19 #include "components/strings/grit/components_strings.h" | 17 #include "components/strings/grit/components_strings.h" |
20 #import "ios/chrome/browser/payments/cells/page_info_item.h" | 18 #import "ios/chrome/browser/payments/cells/page_info_item.h" |
(...skipping 10 matching lines...) Expand all Loading... |
31 #include "ios/chrome/browser/ui/rtl_geometry.h" | 29 #include "ios/chrome/browser/ui/rtl_geometry.h" |
32 #include "ios/chrome/browser/ui/uikit_ui_util.h" | 30 #include "ios/chrome/browser/ui/uikit_ui_util.h" |
33 #include "ios/chrome/grit/ios_strings.h" | 31 #include "ios/chrome/grit/ios_strings.h" |
34 #import "ios/third_party/material_components_ios/src/components/Buttons/src/Mate
rialButtons.h" | 32 #import "ios/third_party/material_components_ios/src/components/Buttons/src/Mate
rialButtons.h" |
35 #import "ios/third_party/material_components_ios/src/components/CollectionCells/
src/MaterialCollectionCells.h" | 33 #import "ios/third_party/material_components_ios/src/components/CollectionCells/
src/MaterialCollectionCells.h" |
36 #import "ios/third_party/material_components_ios/src/components/Typography/src/M
aterialTypography.h" | 34 #import "ios/third_party/material_components_ios/src/components/Typography/src/M
aterialTypography.h" |
37 #import "ios/third_party/material_roboto_font_loader_ios/src/src/MaterialRobotoF
ontLoader.h" | 35 #import "ios/third_party/material_roboto_font_loader_ios/src/src/MaterialRobotoF
ontLoader.h" |
38 #include "ui/base/l10n/l10n_util.h" | 36 #include "ui/base/l10n/l10n_util.h" |
39 #include "ui/base/resource/resource_bundle.h" | 37 #include "ui/base/resource/resource_bundle.h" |
40 | 38 |
| 39 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 40 #error "This file requires ARC support." |
| 41 #endif |
| 42 |
41 using payment_request_util::NameLabelFromAutofillProfile; | 43 using payment_request_util::NameLabelFromAutofillProfile; |
42 using payment_request_util::AddressLabelFromAutofillProfile; | 44 using payment_request_util::AddressLabelFromAutofillProfile; |
43 using payment_request_util::PhoneNumberLabelFromAutofillProfile; | 45 using payment_request_util::PhoneNumberLabelFromAutofillProfile; |
44 | 46 |
45 NSString* const kPaymentRequestCollectionViewId = | 47 NSString* const kPaymentRequestCollectionViewId = |
46 @"kPaymentRequestCollectionViewId"; | 48 @"kPaymentRequestCollectionViewId"; |
47 | 49 |
48 namespace { | 50 namespace { |
49 | 51 |
50 const CGFloat kButtonEdgeInset = 9; | 52 const CGFloat kButtonEdgeInset = 9; |
(...skipping 15 matching lines...) Expand all Loading... |
66 ItemTypeShippingOption, | 68 ItemTypeShippingOption, |
67 ItemTypeSelectShippingOption, | 69 ItemTypeSelectShippingOption, |
68 ItemTypePaymentTitle, | 70 ItemTypePaymentTitle, |
69 ItemTypePaymentMethod, | 71 ItemTypePaymentMethod, |
70 ItemTypeAddPaymentMethod, | 72 ItemTypeAddPaymentMethod, |
71 }; | 73 }; |
72 | 74 |
73 } // namespace | 75 } // namespace |
74 | 76 |
75 @interface PaymentRequestViewController () { | 77 @interface PaymentRequestViewController () { |
76 base::WeakNSProtocol<id<PaymentRequestViewControllerDelegate>> _delegate; | 78 UIBarButtonItem* _cancelButton; |
77 base::scoped_nsobject<UIBarButtonItem> _cancelButton; | 79 MDCFlatButton* _payButton; |
78 base::scoped_nsobject<MDCFlatButton> _payButton; | |
79 | 80 |
80 // The PaymentRequest object owning an instance of web::PaymentRequest as | 81 // The PaymentRequest object owning an instance of web::PaymentRequest as |
81 // provided by the page invoking the Payment Request API. This is a weak | 82 // provided by the page invoking the Payment Request API. This is a weak |
82 // pointer and should outlive this class. | 83 // pointer and should outlive this class. |
83 PaymentRequest* _paymentRequest; | 84 PaymentRequest* _paymentRequest; |
84 | 85 |
85 PriceItem* _paymentSummaryItem; | 86 PriceItem* _paymentSummaryItem; |
86 ShippingAddressItem* _selectedShippingAddressItem; | 87 ShippingAddressItem* _selectedShippingAddressItem; |
87 CollectionViewTextItem* _selectedShippingOptionItem; | 88 CollectionViewTextItem* _selectedShippingOptionItem; |
88 PaymentMethodItem* _selectedPaymentMethodItem; | 89 PaymentMethodItem* _selectedPaymentMethodItem; |
89 | |
90 base::mac::ObjCPropertyReleaser | |
91 _propertyReleaser_PaymentRequestViewController; | |
92 } | 90 } |
93 | 91 |
94 // Called when the user presses the cancel button. | 92 // Called when the user presses the cancel button. |
95 - (void)onCancel; | 93 - (void)onCancel; |
96 | 94 |
97 // Called when the user presses the confirm button. | 95 // Called when the user presses the confirm button. |
98 - (void)onConfirm; | 96 - (void)onConfirm; |
99 | 97 |
100 @end | 98 @end |
101 | 99 |
102 @implementation PaymentRequestViewController | 100 @implementation PaymentRequestViewController |
103 | 101 |
104 @synthesize pageFavicon = _pageFavicon; | 102 @synthesize pageFavicon = _pageFavicon; |
105 @synthesize pageTitle = _pageTitle; | 103 @synthesize pageTitle = _pageTitle; |
106 @synthesize pageHost = _pageHost; | 104 @synthesize pageHost = _pageHost; |
| 105 @synthesize delegate = _delegate; |
107 | 106 |
108 - (instancetype)initWithPaymentRequest:(PaymentRequest*)paymentRequest { | 107 - (instancetype)initWithPaymentRequest:(PaymentRequest*)paymentRequest { |
109 DCHECK(paymentRequest); | 108 DCHECK(paymentRequest); |
110 if ((self = [super initWithStyle:CollectionViewControllerStyleAppBar])) { | 109 if ((self = [super initWithStyle:CollectionViewControllerStyleAppBar])) { |
111 _propertyReleaser_PaymentRequestViewController.Init( | |
112 self, [PaymentRequestViewController class]); | |
113 | |
114 [self setTitle:l10n_util::GetNSString(IDS_IOS_PAYMENT_REQUEST_TITLE)]; | 110 [self setTitle:l10n_util::GetNSString(IDS_IOS_PAYMENT_REQUEST_TITLE)]; |
115 | 111 |
116 // Set up left (cancel) button. | 112 // Set up left (cancel) button. |
117 _cancelButton.reset([[UIBarButtonItem alloc] | 113 _cancelButton = [[UIBarButtonItem alloc] |
118 initWithTitle:l10n_util::GetNSString( | 114 initWithTitle:l10n_util::GetNSString( |
119 IDS_IOS_PAYMENT_REQUEST_CANCEL_BUTTON) | 115 IDS_IOS_PAYMENT_REQUEST_CANCEL_BUTTON) |
120 style:UIBarButtonItemStylePlain | 116 style:UIBarButtonItemStylePlain |
121 target:nil | 117 target:nil |
122 action:@selector(onCancel)]); | 118 action:@selector(onCancel)]; |
123 [_cancelButton setTitleTextAttributes:@{ | 119 [_cancelButton setTitleTextAttributes:@{ |
124 NSForegroundColorAttributeName : [UIColor lightGrayColor] | 120 NSForegroundColorAttributeName : [UIColor lightGrayColor] |
125 } | 121 } |
126 forState:UIControlStateDisabled]; | 122 forState:UIControlStateDisabled]; |
127 [_cancelButton | 123 [_cancelButton |
128 setAccessibilityLabel:l10n_util::GetNSString(IDS_ACCNAME_CANCEL)]; | 124 setAccessibilityLabel:l10n_util::GetNSString(IDS_ACCNAME_CANCEL)]; |
129 [self navigationItem].leftBarButtonItem = _cancelButton; | 125 [self navigationItem].leftBarButtonItem = _cancelButton; |
130 | 126 |
131 // Set up right (pay) button. | 127 // Set up right (pay) button. |
132 _payButton.reset([[MDCFlatButton alloc] init]); | 128 _payButton = [[MDCFlatButton alloc] init]; |
133 [_payButton | 129 [_payButton |
134 setTitle:l10n_util::GetNSString(IDS_IOS_PAYMENT_REQUEST_PAY_BUTTON) | 130 setTitle:l10n_util::GetNSString(IDS_IOS_PAYMENT_REQUEST_PAY_BUTTON) |
135 forState:UIControlStateNormal]; | 131 forState:UIControlStateNormal]; |
136 [_payButton setBackgroundColor:[[MDCPalette cr_bluePalette] tint500] | 132 [_payButton setBackgroundColor:[[MDCPalette cr_bluePalette] tint500] |
137 forState:UIControlStateNormal]; | 133 forState:UIControlStateNormal]; |
138 [_payButton setInkColor:[UIColor colorWithWhite:1 alpha:0.2]]; | 134 [_payButton setInkColor:[UIColor colorWithWhite:1 alpha:0.2]]; |
139 [_payButton setBackgroundColor:[UIColor grayColor] | 135 [_payButton setBackgroundColor:[UIColor grayColor] |
140 forState:UIControlStateDisabled]; | 136 forState:UIControlStateDisabled]; |
141 [_payButton addTarget:nil | 137 [_payButton addTarget:nil |
142 action:@selector(onConfirm) | 138 action:@selector(onConfirm) |
143 forControlEvents:UIControlEventTouchUpInside]; | 139 forControlEvents:UIControlEventTouchUpInside]; |
144 [_payButton sizeToFit]; | 140 [_payButton sizeToFit]; |
145 [_payButton setEnabled:(paymentRequest->selected_credit_card() != nil)]; | 141 [_payButton setEnabled:(paymentRequest->selected_credit_card() != nil)]; |
146 [_payButton setAutoresizingMask:UIViewAutoresizingFlexibleTrailingMargin() | | 142 [_payButton setAutoresizingMask:UIViewAutoresizingFlexibleTrailingMargin() | |
147 UIViewAutoresizingFlexibleTopMargin | | 143 UIViewAutoresizingFlexibleTopMargin | |
148 UIViewAutoresizingFlexibleBottomMargin]; | 144 UIViewAutoresizingFlexibleBottomMargin]; |
149 | 145 |
150 // The navigation bar will set the rightBarButtonItem's height to the full | 146 // The navigation bar will set the rightBarButtonItem's height to the full |
151 // height of the bar. We don't want that for the button so we use a UIView | 147 // height of the bar. We don't want that for the button so we use a UIView |
152 // here to contain the button instead and the button is vertically centered | 148 // here to contain the button instead and the button is vertically centered |
153 // inside the full bar height. | 149 // inside the full bar height. |
154 UIView* buttonView = | 150 UIView* buttonView = [[UIView alloc] initWithFrame:CGRectZero]; |
155 [[[UIView alloc] initWithFrame:CGRectZero] autorelease]; | |
156 [buttonView addSubview:_payButton]; | 151 [buttonView addSubview:_payButton]; |
157 // Navigation bar button items are aligned with the trailing edge of the | 152 // Navigation bar button items are aligned with the trailing edge of the |
158 // screen. Make the enclosing view larger here. The pay button will be | 153 // screen. Make the enclosing view larger here. The pay button will be |
159 // aligned with the leading edge of the enclosing view leaving an inset on | 154 // aligned with the leading edge of the enclosing view leaving an inset on |
160 // the trailing edge. | 155 // the trailing edge. |
161 CGRect buttonViewBounds = buttonView.bounds; | 156 CGRect buttonViewBounds = buttonView.bounds; |
162 buttonViewBounds.size.width = | 157 buttonViewBounds.size.width = |
163 [_payButton frame].size.width + kButtonEdgeInset; | 158 [_payButton frame].size.width + kButtonEdgeInset; |
164 buttonView.bounds = buttonViewBounds; | 159 buttonView.bounds = buttonViewBounds; |
165 | 160 |
166 UIBarButtonItem* payButtonItem = | 161 UIBarButtonItem* payButtonItem = |
167 [[[UIBarButtonItem alloc] initWithCustomView:buttonView] autorelease]; | 162 [[UIBarButtonItem alloc] initWithCustomView:buttonView]; |
168 [self navigationItem].rightBarButtonItem = payButtonItem; | 163 [self navigationItem].rightBarButtonItem = payButtonItem; |
169 | 164 |
170 _paymentRequest = paymentRequest; | 165 _paymentRequest = paymentRequest; |
171 } | 166 } |
172 return self; | 167 return self; |
173 } | 168 } |
174 | 169 |
175 - (id<PaymentRequestViewControllerDelegate>)delegate { | |
176 return _delegate.get(); | |
177 } | |
178 | |
179 - (void)setDelegate:(id<PaymentRequestViewControllerDelegate>)delegate { | |
180 _delegate.reset(delegate); | |
181 } | |
182 | |
183 - (void)onCancel { | 170 - (void)onCancel { |
184 [_delegate paymentRequestViewControllerDidCancel:self]; | 171 [_delegate paymentRequestViewControllerDidCancel:self]; |
185 } | 172 } |
186 | 173 |
187 - (void)onConfirm { | 174 - (void)onConfirm { |
188 [_delegate paymentRequestViewControllerDidConfirm:self]; | 175 [_delegate paymentRequestViewControllerDidConfirm:self]; |
189 } | 176 } |
190 | 177 |
191 #pragma mark - CollectionViewController methods | 178 #pragma mark - CollectionViewController methods |
192 | 179 |
193 - (void)loadModel { | 180 - (void)loadModel { |
194 [super loadModel]; | 181 [super loadModel]; |
195 CollectionViewModel* model = self.collectionViewModel; | 182 CollectionViewModel* model = self.collectionViewModel; |
196 | 183 |
197 // Summary section. | 184 // Summary section. |
198 [model addSectionWithIdentifier:SectionIdentifierSummary]; | 185 [model addSectionWithIdentifier:SectionIdentifierSummary]; |
199 | 186 |
200 PageInfoItem* pageInfo = | 187 PageInfoItem* pageInfo = |
201 [[[PageInfoItem alloc] initWithType:ItemTypeSummaryPageInfo] autorelease]; | 188 [[PageInfoItem alloc] initWithType:ItemTypeSummaryPageInfo]; |
202 pageInfo.pageFavicon = _pageFavicon; | 189 pageInfo.pageFavicon = _pageFavicon; |
203 pageInfo.pageTitle = _pageTitle; | 190 pageInfo.pageTitle = _pageTitle; |
204 pageInfo.pageHost = _pageHost; | 191 pageInfo.pageHost = _pageHost; |
205 [model setHeader:pageInfo forSectionWithIdentifier:SectionIdentifierSummary]; | 192 [model setHeader:pageInfo forSectionWithIdentifier:SectionIdentifierSummary]; |
206 | 193 |
207 _paymentSummaryItem = | 194 _paymentSummaryItem = [[PriceItem alloc] initWithType:ItemTypeSummaryTotal]; |
208 [[[PriceItem alloc] initWithType:ItemTypeSummaryTotal] autorelease]; | |
209 [self fillPaymentSummaryItem:_paymentSummaryItem | 195 [self fillPaymentSummaryItem:_paymentSummaryItem |
210 withPaymentItem:_paymentRequest->payment_details().total | 196 withPaymentItem:_paymentRequest->payment_details().total |
211 withTotalValueChanged:NO]; | 197 withTotalValueChanged:NO]; |
212 if (!_paymentRequest->payment_details().display_items.empty()) { | 198 if (!_paymentRequest->payment_details().display_items.empty()) { |
213 _paymentSummaryItem.accessoryType = | 199 _paymentSummaryItem.accessoryType = |
214 MDCCollectionViewCellAccessoryDisclosureIndicator; | 200 MDCCollectionViewCellAccessoryDisclosureIndicator; |
215 _paymentSummaryItem.accessibilityTraits |= UIAccessibilityTraitButton; | 201 _paymentSummaryItem.accessibilityTraits |= UIAccessibilityTraitButton; |
216 } | 202 } |
217 [model addItem:_paymentSummaryItem | 203 [model addItem:_paymentSummaryItem |
218 toSectionWithIdentifier:SectionIdentifierSummary]; | 204 toSectionWithIdentifier:SectionIdentifierSummary]; |
219 | 205 |
220 // Shipping section. | 206 // Shipping section. |
221 [model addSectionWithIdentifier:SectionIdentifierShipping]; | 207 [model addSectionWithIdentifier:SectionIdentifierShipping]; |
222 | 208 |
223 CollectionViewTextItem* shippingTitle = [[[CollectionViewTextItem alloc] | 209 CollectionViewTextItem* shippingTitle = |
224 initWithType:ItemTypeShippingTitle] autorelease]; | 210 [[CollectionViewTextItem alloc] initWithType:ItemTypeShippingTitle]; |
225 shippingTitle.text = | 211 shippingTitle.text = |
226 payment_request_util::GetShippingSectionTitle(_paymentRequest); | 212 payment_request_util::GetShippingSectionTitle(_paymentRequest); |
227 [model setHeader:shippingTitle | 213 [model setHeader:shippingTitle |
228 forSectionWithIdentifier:SectionIdentifierShipping]; | 214 forSectionWithIdentifier:SectionIdentifierShipping]; |
229 | 215 |
230 CollectionViewItem* shippingAddressItem = nil; | 216 CollectionViewItem* shippingAddressItem = nil; |
231 if (_paymentRequest->selected_shipping_profile()) { | 217 if (_paymentRequest->selected_shipping_profile()) { |
232 _selectedShippingAddressItem = [[[ShippingAddressItem alloc] | 218 _selectedShippingAddressItem = |
233 initWithType:ItemTypeShippingAddress] autorelease]; | 219 [[ShippingAddressItem alloc] initWithType:ItemTypeShippingAddress]; |
234 shippingAddressItem = _selectedShippingAddressItem; | 220 shippingAddressItem = _selectedShippingAddressItem; |
235 [self fillShippingAddressItem:_selectedShippingAddressItem | 221 [self fillShippingAddressItem:_selectedShippingAddressItem |
236 withAddress:_paymentRequest->selected_shipping_profile()]; | 222 withAddress:_paymentRequest->selected_shipping_profile()]; |
237 _selectedShippingAddressItem.accessoryType = | 223 _selectedShippingAddressItem.accessoryType = |
238 MDCCollectionViewCellAccessoryDisclosureIndicator; | 224 MDCCollectionViewCellAccessoryDisclosureIndicator; |
239 | 225 |
240 } else { | 226 } else { |
241 CollectionViewDetailItem* addAddressItem = | 227 CollectionViewDetailItem* addAddressItem = [[CollectionViewDetailItem alloc] |
242 [[[CollectionViewDetailItem alloc] | 228 initWithType:ItemTypeAddShippingAddress]; |
243 initWithType:ItemTypeAddShippingAddress] autorelease]; | |
244 shippingAddressItem = addAddressItem; | 229 shippingAddressItem = addAddressItem; |
245 addAddressItem.text = | 230 addAddressItem.text = |
246 payment_request_util::GetShippingAddressSelectorTitle(_paymentRequest); | 231 payment_request_util::GetShippingAddressSelectorTitle(_paymentRequest); |
247 addAddressItem.detailText = [l10n_util::GetNSString( | 232 addAddressItem.detailText = [l10n_util::GetNSString( |
248 IDS_IOS_PAYMENT_REQUEST_ADD_SHIPPING_ADDRESS_BUTTON) | 233 IDS_IOS_PAYMENT_REQUEST_ADD_SHIPPING_ADDRESS_BUTTON) |
249 uppercaseStringWithLocale:[NSLocale currentLocale]]; | 234 uppercaseStringWithLocale:[NSLocale currentLocale]]; |
250 } | 235 } |
251 shippingAddressItem.accessibilityTraits |= UIAccessibilityTraitButton; | 236 shippingAddressItem.accessibilityTraits |= UIAccessibilityTraitButton; |
252 [model addItem:shippingAddressItem | 237 [model addItem:shippingAddressItem |
253 toSectionWithIdentifier:SectionIdentifierShipping]; | 238 toSectionWithIdentifier:SectionIdentifierShipping]; |
254 | 239 |
255 CollectionViewItem* shippingOptionItem = nil; | 240 CollectionViewItem* shippingOptionItem = nil; |
256 if (_paymentRequest->selected_shipping_option()) { | 241 if (_paymentRequest->selected_shipping_option()) { |
257 _selectedShippingOptionItem = [[[CollectionViewTextItem alloc] | 242 _selectedShippingOptionItem = |
258 initWithType:ItemTypeShippingOption] autorelease]; | 243 [[CollectionViewTextItem alloc] initWithType:ItemTypeShippingOption]; |
259 shippingOptionItem = _selectedShippingOptionItem; | 244 shippingOptionItem = _selectedShippingOptionItem; |
260 [self fillShippingOptionItem:_selectedShippingOptionItem | 245 [self fillShippingOptionItem:_selectedShippingOptionItem |
261 withOption:_paymentRequest->selected_shipping_option()]; | 246 withOption:_paymentRequest->selected_shipping_option()]; |
262 _selectedShippingOptionItem.accessoryType = | 247 _selectedShippingOptionItem.accessoryType = |
263 MDCCollectionViewCellAccessoryDisclosureIndicator; | 248 MDCCollectionViewCellAccessoryDisclosureIndicator; |
264 } else { | 249 } else { |
265 CollectionViewDetailItem* selectShippingOptionItem = | 250 CollectionViewDetailItem* selectShippingOptionItem = |
266 [[[CollectionViewDetailItem alloc] | 251 [[CollectionViewDetailItem alloc] |
267 initWithType:ItemTypeSelectShippingOption] autorelease]; | 252 initWithType:ItemTypeSelectShippingOption]; |
268 shippingOptionItem = selectShippingOptionItem; | 253 shippingOptionItem = selectShippingOptionItem; |
269 selectShippingOptionItem.text = | 254 selectShippingOptionItem.text = |
270 payment_request_util::GetShippingOptionSelectorTitle(_paymentRequest); | 255 payment_request_util::GetShippingOptionSelectorTitle(_paymentRequest); |
271 selectShippingOptionItem.accessoryType = | 256 selectShippingOptionItem.accessoryType = |
272 MDCCollectionViewCellAccessoryDisclosureIndicator; | 257 MDCCollectionViewCellAccessoryDisclosureIndicator; |
273 } | 258 } |
274 shippingOptionItem.accessibilityTraits |= UIAccessibilityTraitButton; | 259 shippingOptionItem.accessibilityTraits |= UIAccessibilityTraitButton; |
275 [model addItem:shippingOptionItem | 260 [model addItem:shippingOptionItem |
276 toSectionWithIdentifier:SectionIdentifierShipping]; | 261 toSectionWithIdentifier:SectionIdentifierShipping]; |
277 | 262 |
278 // Payment method section. | 263 // Payment method section. |
279 [model addSectionWithIdentifier:SectionIdentifierPayment]; | 264 [model addSectionWithIdentifier:SectionIdentifierPayment]; |
280 | 265 |
281 CollectionViewItem* paymentMethodItem = nil; | 266 CollectionViewItem* paymentMethodItem = nil; |
282 if (_paymentRequest->selected_credit_card()) { | 267 if (_paymentRequest->selected_credit_card()) { |
283 CollectionViewTextItem* paymentTitle = [[[CollectionViewTextItem alloc] | 268 CollectionViewTextItem* paymentTitle = |
284 initWithType:ItemTypePaymentTitle] autorelease]; | 269 [[CollectionViewTextItem alloc] initWithType:ItemTypePaymentTitle]; |
285 paymentTitle.text = | 270 paymentTitle.text = |
286 l10n_util::GetNSString(IDS_IOS_PAYMENT_REQUEST_PAYMENT_METHOD_HEADER); | 271 l10n_util::GetNSString(IDS_IOS_PAYMENT_REQUEST_PAYMENT_METHOD_HEADER); |
287 [model setHeader:paymentTitle | 272 [model setHeader:paymentTitle |
288 forSectionWithIdentifier:SectionIdentifierPayment]; | 273 forSectionWithIdentifier:SectionIdentifierPayment]; |
289 | 274 |
290 _selectedPaymentMethodItem = [[[PaymentMethodItem alloc] | 275 _selectedPaymentMethodItem = |
291 initWithType:ItemTypePaymentMethod] autorelease]; | 276 [[PaymentMethodItem alloc] initWithType:ItemTypePaymentMethod]; |
292 paymentMethodItem = _selectedPaymentMethodItem; | 277 paymentMethodItem = _selectedPaymentMethodItem; |
293 [self fillPaymentMethodItem:_selectedPaymentMethodItem | 278 [self fillPaymentMethodItem:_selectedPaymentMethodItem |
294 withPaymentMethod:_paymentRequest->selected_credit_card()]; | 279 withPaymentMethod:_paymentRequest->selected_credit_card()]; |
295 _selectedPaymentMethodItem.accessoryType = | 280 _selectedPaymentMethodItem.accessoryType = |
296 MDCCollectionViewCellAccessoryDisclosureIndicator; | 281 MDCCollectionViewCellAccessoryDisclosureIndicator; |
297 } else { | 282 } else { |
298 CollectionViewDetailItem* addPaymentMethodItem = | 283 CollectionViewDetailItem* addPaymentMethodItem = [ |
299 [[[CollectionViewDetailItem alloc] | 284 [CollectionViewDetailItem alloc] initWithType:ItemTypeAddPaymentMethod]; |
300 initWithType:ItemTypeAddPaymentMethod] autorelease]; | |
301 paymentMethodItem = addPaymentMethodItem; | 285 paymentMethodItem = addPaymentMethodItem; |
302 addPaymentMethodItem.text = | 286 addPaymentMethodItem.text = |
303 l10n_util::GetNSString(IDS_IOS_PAYMENT_REQUEST_PAYMENT_METHOD_HEADER); | 287 l10n_util::GetNSString(IDS_IOS_PAYMENT_REQUEST_PAYMENT_METHOD_HEADER); |
304 addPaymentMethodItem.detailText = [l10n_util::GetNSString( | 288 addPaymentMethodItem.detailText = [l10n_util::GetNSString( |
305 IDS_IOS_PAYMENT_REQUEST_ADD_SHIPPING_ADDRESS_BUTTON) | 289 IDS_IOS_PAYMENT_REQUEST_ADD_SHIPPING_ADDRESS_BUTTON) |
306 uppercaseStringWithLocale:[NSLocale currentLocale]]; | 290 uppercaseStringWithLocale:[NSLocale currentLocale]]; |
307 } | 291 } |
308 paymentMethodItem.accessibilityTraits |= UIAccessibilityTraitButton; | 292 paymentMethodItem.accessibilityTraits |= UIAccessibilityTraitButton; |
309 [model addItem:paymentMethodItem | 293 [model addItem:paymentMethodItem |
310 toSectionWithIdentifier:SectionIdentifierPayment]; | 294 toSectionWithIdentifier:SectionIdentifierPayment]; |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
502 NSInteger type = [self.collectionViewModel itemTypeForIndexPath:indexPath]; | 486 NSInteger type = [self.collectionViewModel itemTypeForIndexPath:indexPath]; |
503 if (type == ItemTypeSummaryTotal && | 487 if (type == ItemTypeSummaryTotal && |
504 _paymentRequest->payment_details().display_items.empty()) { | 488 _paymentRequest->payment_details().display_items.empty()) { |
505 return YES; | 489 return YES; |
506 } else { | 490 } else { |
507 return NO; | 491 return NO; |
508 } | 492 } |
509 } | 493 } |
510 | 494 |
511 @end | 495 @end |
OLD | NEW |