Index: ios/chrome/browser/ui/payments/payment_method_selection_coordinator.mm |
diff --git a/ios/chrome/browser/ui/payments/payment_method_selection_coordinator.mm b/ios/chrome/browser/ui/payments/payment_method_selection_coordinator.mm |
index 26e681f739a1b2a4cc7fc5e15b9a34eac83be68b..c7c4f3359df4f59046fc42fcc5fb9fbc27a3f41e 100644 |
--- a/ios/chrome/browser/ui/payments/payment_method_selection_coordinator.mm |
+++ b/ios/chrome/browser/ui/payments/payment_method_selection_coordinator.mm |
@@ -29,6 +29,11 @@ const int64_t kDelegateNotificationDelayInNanoSeconds = 0.2 * NSEC_PER_SEC; |
@property(nonatomic, strong) PaymentMethodSelectionMediator* mediator; |
+// Initializes and starts the CreditCardEditCoordinator. Sets |creditCard| as |
+// the credit card to be edited. |
+- (void)startCreditCardEditCoordinatorWithCreditCard: |
+ (autofill::CreditCard*)creditCard; |
+ |
// Called when the user selects a payment method. The cell is checked, the |
// UI is locked so that the user can't interact with it, then the delegate is |
// notified. The delay is here to let the user get a visual feedback of the |
@@ -89,23 +94,41 @@ const int64_t kDelegateNotificationDelayInNanoSeconds = 0.2 * NSEC_PER_SEC; |
- (void)paymentRequestSelectorViewControllerDidSelectAddItem: |
(PaymentRequestSelectorViewController*)controller { |
- self.creditCardEditCoordinator = [[CreditCardEditCoordinator alloc] |
- initWithBaseViewController:self.viewController]; |
- self.creditCardEditCoordinator.paymentRequest = self.paymentRequest; |
- self.creditCardEditCoordinator.delegate = self; |
- [self.creditCardEditCoordinator start]; |
+ [self startCreditCardEditCoordinatorWithCreditCard:nil]; |
+} |
+ |
+- (void)paymentRequestSelectorViewControllerDidToggleEditingMode { |
+ [self.viewController loadModel]; |
+ [self.viewController.collectionView reloadData]; |
+} |
+ |
+- (void)paymentRequestSelectorViewController: |
+ (PaymentRequestSelectorViewController*)controller |
+ didSelectItemAtIndexForEditing:(NSUInteger)index { |
+ DCHECK(index < self.paymentRequest->credit_cards().size()); |
+ [self |
+ startCreditCardEditCoordinatorWithCreditCard:self.paymentRequest |
+ ->credit_cards()[index]]; |
} |
#pragma mark - CreditCardEditCoordinatorDelegate |
- (void)creditCardEditCoordinator:(CreditCardEditCoordinator*)coordinator |
didFinishEditingCreditCard:(autofill::CreditCard*)creditCard { |
+ // Update the data source with the new data. |
+ [self.mediator loadItems]; |
+ |
+ [self.viewController loadModel]; |
+ [self.viewController.collectionView reloadData]; |
+ |
[self.creditCardEditCoordinator stop]; |
self.creditCardEditCoordinator = nil; |
- // Inform |self.delegate| that this card has been selected. |
- [self.delegate paymentMethodSelectionCoordinator:self |
- didSelectPaymentMethod:creditCard]; |
+ if (self.mediator.state != PaymentRequestSelectorStateEdit) { |
+ // Inform |self.delegate| that this card has been selected. |
+ [self.delegate paymentMethodSelectionCoordinator:self |
+ didSelectPaymentMethod:creditCard]; |
+ } |
} |
- (void)creditCardEditCoordinatorDidCancel: |
@@ -116,6 +139,16 @@ const int64_t kDelegateNotificationDelayInNanoSeconds = 0.2 * NSEC_PER_SEC; |
#pragma mark - Helper methods |
+- (void)startCreditCardEditCoordinatorWithCreditCard: |
+ (autofill::CreditCard*)creditCard { |
+ self.creditCardEditCoordinator = [[CreditCardEditCoordinator alloc] |
+ initWithBaseViewController:self.viewController]; |
+ self.creditCardEditCoordinator.paymentRequest = self.paymentRequest; |
+ self.creditCardEditCoordinator.creditCard = creditCard; |
+ self.creditCardEditCoordinator.delegate = self; |
+ [self.creditCardEditCoordinator start]; |
+} |
+ |
- (void)delayedNotifyDelegateOfSelection:(autofill::CreditCard*)paymentMethod { |
self.viewController.view.userInteractionEnabled = NO; |
__weak PaymentMethodSelectionCoordinator* weakSelf = self; |