OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 #include <vector> | 5 #include <vector> |
6 | 6 |
7 #import "ios/chrome/browser/ui/payments/billing_address_selection_mediator.h" | 7 #import "ios/chrome/browser/ui/payments/billing_address_selection_mediator.h" |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "components/autofill/core/browser/autofill_profile.h" | 10 #include "components/autofill/core/browser/autofill_profile.h" |
(...skipping 20 matching lines...) Expand all Loading... |
31 | 31 |
32 // The PaymentRequest object owning an instance of web::PaymentRequest as | 32 // The PaymentRequest object owning an instance of web::PaymentRequest as |
33 // provided by the page invoking the Payment Request API. This is a weak | 33 // provided by the page invoking the Payment Request API. This is a weak |
34 // pointer and should outlive this class. | 34 // pointer and should outlive this class. |
35 @property(nonatomic, assign) PaymentRequest* paymentRequest; | 35 @property(nonatomic, assign) PaymentRequest* paymentRequest; |
36 | 36 |
37 // The selected billing address, if any. | 37 // The selected billing address, if any. |
38 @property(nonatomic, assign) autofill::AutofillProfile* selectedBillingProfile; | 38 @property(nonatomic, assign) autofill::AutofillProfile* selectedBillingProfile; |
39 | 39 |
40 // The selectable items to display in the collection. | 40 // The selectable items to display in the collection. |
41 @property(nonatomic, strong) NSArray<AutofillProfileItem*>* items; | 41 @property(nonatomic, strong) NSMutableArray<AutofillProfileItem*>* items; |
42 | 42 |
43 @end | 43 @end |
44 | 44 |
45 @implementation BillingAddressSelectionMediator | 45 @implementation BillingAddressSelectionMediator |
46 | 46 |
47 @synthesize state = _state; | 47 @synthesize state = _state; |
48 @synthesize selectedItemIndex = _selectedItemIndex; | 48 @synthesize selectedItemIndex = _selectedItemIndex; |
49 @synthesize paymentRequest = _paymentRequest; | 49 @synthesize paymentRequest = _paymentRequest; |
50 @synthesize selectedBillingProfile = _selectedBillingProfile; | 50 @synthesize selectedBillingProfile = _selectedBillingProfile; |
51 @synthesize items = _items; | 51 @synthesize items = _items; |
52 | 52 |
53 - (instancetype)initWithPaymentRequest:(PaymentRequest*)paymentRequest | 53 - (instancetype)initWithPaymentRequest:(PaymentRequest*)paymentRequest |
54 selectedBillingProfile: | 54 selectedBillingProfile: |
55 (autofill::AutofillProfile*)selectedBillingProfile { | 55 (autofill::AutofillProfile*)selectedBillingProfile { |
56 self = [super init]; | 56 self = [super init]; |
57 if (self) { | 57 if (self) { |
58 DCHECK(paymentRequest); | 58 DCHECK(paymentRequest); |
59 _paymentRequest = paymentRequest; | 59 _paymentRequest = paymentRequest; |
60 _selectedBillingProfile = selectedBillingProfile; | 60 _selectedBillingProfile = selectedBillingProfile; |
61 _selectedItemIndex = NSUIntegerMax; | 61 _selectedItemIndex = NSUIntegerMax; |
62 _items = [self createItems]; | 62 [self createItems]; |
63 } | 63 } |
64 return self; | 64 return self; |
65 } | 65 } |
66 | 66 |
67 #pragma mark - PaymentRequestSelectorViewControllerDataSource | 67 #pragma mark - PaymentRequestSelectorViewControllerDataSource |
68 | 68 |
| 69 - (BOOL)allowsEditMode { |
| 70 return YES; |
| 71 } |
| 72 |
69 - (CollectionViewItem*)headerItem { | 73 - (CollectionViewItem*)headerItem { |
70 return nil; | 74 return nil; |
71 } | 75 } |
72 | 76 |
73 - (NSArray<CollectionViewItem*>*)selectableItems { | 77 - (NSArray<CollectionViewItem*>*)selectableItems { |
74 return self.items; | 78 return self.items; |
75 } | 79 } |
76 | 80 |
77 - (CollectionViewItem*)addButtonItem { | 81 - (CollectionViewItem*)addButtonItem { |
78 PaymentsTextItem* addButtonItem = [[PaymentsTextItem alloc] init]; | 82 PaymentsTextItem* addButtonItem = [[PaymentsTextItem alloc] init]; |
79 addButtonItem.text = l10n_util::GetNSString(IDS_PAYMENTS_ADD_ADDRESS); | 83 addButtonItem.text = l10n_util::GetNSString(IDS_PAYMENTS_ADD_ADDRESS); |
80 addButtonItem.image = NativeImage(IDR_IOS_PAYMENTS_ADD); | 84 addButtonItem.image = NativeImage(IDR_IOS_PAYMENTS_ADD); |
81 return addButtonItem; | 85 return addButtonItem; |
82 } | 86 } |
83 | 87 |
84 #pragma mark - Helper methods | 88 #pragma mark - Public methods |
85 | 89 |
86 - (NSArray<AutofillProfileItem*>*)createItems { | 90 - (void)createItems { |
87 const std::vector<autofill::AutofillProfile*>& billingProfiles = | 91 const std::vector<autofill::AutofillProfile*>& billingProfiles = |
88 _paymentRequest->billing_profiles(); | 92 _paymentRequest->billing_profiles(); |
89 | 93 |
90 NSMutableArray<AutofillProfileItem*>* items = | 94 _items = [NSMutableArray arrayWithCapacity:billingProfiles.size()]; |
91 [NSMutableArray arrayWithCapacity:billingProfiles.size()]; | |
92 for (size_t index = 0; index < billingProfiles.size(); ++index) { | 95 for (size_t index = 0; index < billingProfiles.size(); ++index) { |
93 autofill::AutofillProfile* billingProfile = billingProfiles[index]; | 96 autofill::AutofillProfile* billingProfile = billingProfiles[index]; |
94 DCHECK(billingProfile); | 97 DCHECK(billingProfile); |
95 AutofillProfileItem* item = [[AutofillProfileItem alloc] init]; | 98 AutofillProfileItem* item = [[AutofillProfileItem alloc] init]; |
96 item.name = GetNameLabelFromAutofillProfile(*billingProfile); | 99 item.name = GetNameLabelFromAutofillProfile(*billingProfile); |
97 item.address = GetBillingAddressLabelFromAutofillProfile(*billingProfile); | 100 item.address = GetBillingAddressLabelFromAutofillProfile(*billingProfile); |
98 item.phoneNumber = GetPhoneNumberLabelFromAutofillProfile(*billingProfile); | 101 item.phoneNumber = GetPhoneNumberLabelFromAutofillProfile(*billingProfile); |
99 if (self.selectedBillingProfile == billingProfile) | 102 if (self.selectedBillingProfile == billingProfile) |
100 _selectedItemIndex = index; | 103 _selectedItemIndex = index; |
101 | 104 |
102 [items addObject:item]; | 105 [_items addObject:item]; |
103 } | 106 } |
104 | |
105 return items; | |
106 } | 107 } |
107 | 108 |
108 @end | 109 @end |
OLD | NEW |