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/ui/payments/payment_method_selection_coordinator.h" | 5 #import "ios/chrome/browser/ui/payments/payment_method_selection_coordinator.h" |
6 | 6 |
7 #include "components/autofill/core/browser/credit_card.h" | 7 #include "components/autofill/core/browser/credit_card.h" |
8 #include "components/strings/grit/components_strings.h" | 8 #include "components/strings/grit/components_strings.h" |
9 #include "ios/chrome/browser/payments/payment_request.h" | 9 #include "ios/chrome/browser/payments/payment_request.h" |
10 #include "ios/chrome/browser/ui/payments/payment_method_selection_mediator.h" | 10 #include "ios/chrome/browser/ui/payments/payment_method_selection_mediator.h" |
(...skipping 11 matching lines...) Expand all Loading... |
22 @interface PaymentMethodSelectionCoordinator () | 22 @interface PaymentMethodSelectionCoordinator () |
23 | 23 |
24 @property(nonatomic, strong) | 24 @property(nonatomic, strong) |
25 CreditCardEditCoordinator* creditCardEditCoordinator; | 25 CreditCardEditCoordinator* creditCardEditCoordinator; |
26 | 26 |
27 @property(nonatomic, strong) | 27 @property(nonatomic, strong) |
28 PaymentRequestSelectorViewController* viewController; | 28 PaymentRequestSelectorViewController* viewController; |
29 | 29 |
30 @property(nonatomic, strong) PaymentMethodSelectionMediator* mediator; | 30 @property(nonatomic, strong) PaymentMethodSelectionMediator* mediator; |
31 | 31 |
| 32 // Initializes and starts the CreditCardEditCoordinator. Sets |creditCard| as |
| 33 // the credit card to be edited. |
| 34 - (void)startCreditCardEditCoordinatorWithCreditCard: |
| 35 (autofill::CreditCard*)creditCard; |
| 36 |
32 // Called when the user selects a payment method. The cell is checked, the | 37 // Called when the user selects a payment method. The cell is checked, the |
33 // UI is locked so that the user can't interact with it, then the delegate is | 38 // UI is locked so that the user can't interact with it, then the delegate is |
34 // notified. The delay is here to let the user get a visual feedback of the | 39 // notified. The delay is here to let the user get a visual feedback of the |
35 // selection before this view disappears. | 40 // selection before this view disappears. |
36 - (void)delayedNotifyDelegateOfSelection:(autofill::CreditCard*)paymentMethod; | 41 - (void)delayedNotifyDelegateOfSelection:(autofill::CreditCard*)paymentMethod; |
37 | 42 |
38 @end | 43 @end |
39 | 44 |
40 @implementation PaymentMethodSelectionCoordinator | 45 @implementation PaymentMethodSelectionCoordinator |
41 @synthesize paymentRequest = _paymentRequest; | 46 @synthesize paymentRequest = _paymentRequest; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 ->credit_cards()[index]]; | 87 ->credit_cards()[index]]; |
83 } | 88 } |
84 | 89 |
85 - (void)paymentRequestSelectorViewControllerDidFinish: | 90 - (void)paymentRequestSelectorViewControllerDidFinish: |
86 (PaymentRequestSelectorViewController*)controller { | 91 (PaymentRequestSelectorViewController*)controller { |
87 [self.delegate paymentMethodSelectionCoordinatorDidReturn:self]; | 92 [self.delegate paymentMethodSelectionCoordinatorDidReturn:self]; |
88 } | 93 } |
89 | 94 |
90 - (void)paymentRequestSelectorViewControllerDidSelectAddItem: | 95 - (void)paymentRequestSelectorViewControllerDidSelectAddItem: |
91 (PaymentRequestSelectorViewController*)controller { | 96 (PaymentRequestSelectorViewController*)controller { |
92 self.creditCardEditCoordinator = [[CreditCardEditCoordinator alloc] | 97 [self startCreditCardEditCoordinatorWithCreditCard:nil]; |
93 initWithBaseViewController:self.viewController]; | 98 } |
94 self.creditCardEditCoordinator.paymentRequest = self.paymentRequest; | 99 |
95 self.creditCardEditCoordinator.delegate = self; | 100 - (void)paymentRequestSelectorViewControllerDidToggleEditingMode { |
96 [self.creditCardEditCoordinator start]; | 101 [self.viewController loadModel]; |
| 102 [self.viewController.collectionView reloadData]; |
| 103 } |
| 104 |
| 105 - (void)paymentRequestSelectorViewController: |
| 106 (PaymentRequestSelectorViewController*)controller |
| 107 didSelectItemAtIndexForEditing:(NSUInteger)index { |
| 108 DCHECK(index < self.paymentRequest->credit_cards().size()); |
| 109 [self |
| 110 startCreditCardEditCoordinatorWithCreditCard:self.paymentRequest |
| 111 ->credit_cards()[index]]; |
97 } | 112 } |
98 | 113 |
99 #pragma mark - CreditCardEditCoordinatorDelegate | 114 #pragma mark - CreditCardEditCoordinatorDelegate |
100 | 115 |
101 - (void)creditCardEditCoordinator:(CreditCardEditCoordinator*)coordinator | 116 - (void)creditCardEditCoordinator:(CreditCardEditCoordinator*)coordinator |
102 didFinishEditingCreditCard:(autofill::CreditCard*)creditCard { | 117 didFinishEditingCreditCard:(autofill::CreditCard*)creditCard { |
| 118 // Update the data source with the new data. |
| 119 [self.mediator loadItems]; |
| 120 |
| 121 [self.viewController loadModel]; |
| 122 [self.viewController.collectionView reloadData]; |
| 123 |
103 [self.creditCardEditCoordinator stop]; | 124 [self.creditCardEditCoordinator stop]; |
104 self.creditCardEditCoordinator = nil; | 125 self.creditCardEditCoordinator = nil; |
105 | 126 |
106 // Inform |self.delegate| that this card has been selected. | 127 if (self.mediator.state != PaymentRequestSelectorStateEdit) { |
107 [self.delegate paymentMethodSelectionCoordinator:self | 128 // Inform |self.delegate| that this card has been selected. |
108 didSelectPaymentMethod:creditCard]; | 129 [self.delegate paymentMethodSelectionCoordinator:self |
| 130 didSelectPaymentMethod:creditCard]; |
| 131 } |
109 } | 132 } |
110 | 133 |
111 - (void)creditCardEditCoordinatorDidCancel: | 134 - (void)creditCardEditCoordinatorDidCancel: |
112 (CreditCardEditCoordinator*)coordinator { | 135 (CreditCardEditCoordinator*)coordinator { |
113 [self.creditCardEditCoordinator stop]; | 136 [self.creditCardEditCoordinator stop]; |
114 self.creditCardEditCoordinator = nil; | 137 self.creditCardEditCoordinator = nil; |
115 } | 138 } |
116 | 139 |
117 #pragma mark - Helper methods | 140 #pragma mark - Helper methods |
118 | 141 |
| 142 - (void)startCreditCardEditCoordinatorWithCreditCard: |
| 143 (autofill::CreditCard*)creditCard { |
| 144 self.creditCardEditCoordinator = [[CreditCardEditCoordinator alloc] |
| 145 initWithBaseViewController:self.viewController]; |
| 146 self.creditCardEditCoordinator.paymentRequest = self.paymentRequest; |
| 147 self.creditCardEditCoordinator.creditCard = creditCard; |
| 148 self.creditCardEditCoordinator.delegate = self; |
| 149 [self.creditCardEditCoordinator start]; |
| 150 } |
| 151 |
119 - (void)delayedNotifyDelegateOfSelection:(autofill::CreditCard*)paymentMethod { | 152 - (void)delayedNotifyDelegateOfSelection:(autofill::CreditCard*)paymentMethod { |
120 self.viewController.view.userInteractionEnabled = NO; | 153 self.viewController.view.userInteractionEnabled = NO; |
121 __weak PaymentMethodSelectionCoordinator* weakSelf = self; | 154 __weak PaymentMethodSelectionCoordinator* weakSelf = self; |
122 dispatch_after( | 155 dispatch_after( |
123 dispatch_time(DISPATCH_TIME_NOW, kDelegateNotificationDelayInNanoSeconds), | 156 dispatch_time(DISPATCH_TIME_NOW, kDelegateNotificationDelayInNanoSeconds), |
124 dispatch_get_main_queue(), ^{ | 157 dispatch_get_main_queue(), ^{ |
125 weakSelf.viewController.view.userInteractionEnabled = YES; | 158 weakSelf.viewController.view.userInteractionEnabled = YES; |
126 [weakSelf.delegate paymentMethodSelectionCoordinator:weakSelf | 159 [weakSelf.delegate paymentMethodSelectionCoordinator:weakSelf |
127 didSelectPaymentMethod:paymentMethod]; | 160 didSelectPaymentMethod:paymentMethod]; |
128 }); | 161 }); |
129 } | 162 } |
130 | 163 |
131 @end | 164 @end |
OLD | NEW |