Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Unified Diff: ios/chrome/browser/payments/payment_method_selection_coordinator.mm

Issue 2826713002: [Payment Request] Refactors the remaining selector view controllers (Closed)
Patch Set: Addressed comment Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ios/chrome/browser/payments/payment_method_selection_coordinator.mm
diff --git a/ios/chrome/browser/payments/payment_method_selection_coordinator.mm b/ios/chrome/browser/payments/payment_method_selection_coordinator.mm
index 9385ea0afb7a3022c52f5238ff3ef104fc662821..1bf7a7d6d838c3365ed123c2651901f8e00af7ac 100644
--- a/ios/chrome/browser/payments/payment_method_selection_coordinator.mm
+++ b/ios/chrome/browser/payments/payment_method_selection_coordinator.mm
@@ -5,18 +5,29 @@
#import "ios/chrome/browser/payments/payment_method_selection_coordinator.h"
#include "components/autofill/core/browser/credit_card.h"
+#include "components/strings/grit/components_strings.h"
+#include "ios/chrome/browser/payments/payment_method_selection_mediator.h"
#include "ios/chrome/browser/payments/payment_request.h"
+#include "ui/base/l10n/l10n_util.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
-@interface PaymentMethodSelectionCoordinator () {
- CreditCardEditCoordinator* _creditCardEditCoordinator;
-}
+namespace {
+// The delay in nano seconds before notifying the delegate of the selection.
+const int64_t kDelegateNotificationDelayInNanoSeconds = 0.2 * NSEC_PER_SEC;
+} // namespace
+
+@interface PaymentMethodSelectionCoordinator ()
+
+@property(nonatomic, strong)
+ CreditCardEditCoordinator* creditCardEditCoordinator;
@property(nonatomic, strong)
- PaymentMethodSelectionViewController* viewController;
+ PaymentRequestSelectorViewController* viewController;
+
+@property(nonatomic, strong) PaymentMethodSelectionMediator* mediator;
// 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
@@ -29,85 +40,92 @@
@implementation PaymentMethodSelectionCoordinator
@synthesize paymentRequest = _paymentRequest;
@synthesize delegate = _delegate;
+@synthesize creditCardEditCoordinator = _creditCardEditCoordinator;
@synthesize viewController = _viewController;
+@synthesize mediator = _mediator;
- (void)start {
- _viewController = [[PaymentMethodSelectionViewController alloc]
- initWithPaymentRequest:_paymentRequest];
- [_viewController setDelegate:self];
- [_viewController loadModel];
-
- DCHECK([self baseViewController].navigationController);
- [[self baseViewController].navigationController
- pushViewController:_viewController
+ self.mediator = [[PaymentMethodSelectionMediator alloc]
+ initWithPaymentRequest:self.paymentRequest];
+
+ self.viewController = [[PaymentRequestSelectorViewController alloc] init];
+ self.viewController.title =
+ l10n_util::GetNSString(IDS_PAYMENTS_METHOD_OF_PAYMENT_LABEL);
+ self.viewController.delegate = self;
+ self.viewController.dataSource = self.mediator;
+ [self.viewController loadModel];
+
+ DCHECK(self.baseViewController.navigationController);
+ [self.baseViewController.navigationController
+ pushViewController:self.viewController
animated:YES];
}
- (void)stop {
- [[self baseViewController].navigationController
- popViewControllerAnimated:YES];
- [_creditCardEditCoordinator stop];
- _creditCardEditCoordinator = nil;
- _viewController = nil;
+ [self.baseViewController.navigationController popViewControllerAnimated:YES];
+ [self.creditCardEditCoordinator stop];
+ self.creditCardEditCoordinator = nil;
+ self.viewController = nil;
+ self.mediator = nil;
}
-#pragma mark - PaymentMethodSelectionViewControllerDelegate
+#pragma mark - PaymentRequestSelectorViewControllerDelegate
-- (void)paymentMethodSelectionViewController:
- (PaymentMethodSelectionViewController*)controller
- didSelectPaymentMethod:
- (autofill::CreditCard*)paymentMethod {
- [self delayedNotifyDelegateOfSelection:paymentMethod];
-}
+- (void)paymentRequestSelectorViewController:
+ (PaymentRequestSelectorViewController*)controller
+ didSelectItemAtIndex:(NSUInteger)index {
+ // Update the data source with the selection.
+ self.mediator.selectedItemIndex = index;
-- (void)paymentMethodSelectionViewControllerDidReturn:
- (PaymentMethodSelectionViewController*)controller {
- [_delegate paymentMethodSelectionCoordinatorDidReturn:self];
+ DCHECK(index < self.paymentRequest->credit_cards().size());
+ [self delayedNotifyDelegateOfSelection:self.paymentRequest
+ ->credit_cards()[index]];
}
-- (void)delayedNotifyDelegateOfSelection:(autofill::CreditCard*)paymentMethod {
- _viewController.view.userInteractionEnabled = NO;
- __weak PaymentMethodSelectionCoordinator* weakSelf = self;
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW,
- static_cast<int64_t>(0.2 * NSEC_PER_SEC)),
- dispatch_get_main_queue(), ^{
- PaymentMethodSelectionCoordinator* strongSelf = weakSelf;
- // Early return if the coordinator has been deallocated.
- if (!strongSelf)
- return;
-
- strongSelf.viewController.view.userInteractionEnabled = YES;
- [strongSelf.delegate
- paymentMethodSelectionCoordinator:strongSelf
- didSelectPaymentMethod:paymentMethod];
- });
+- (void)paymentRequestSelectorViewControllerDidFinish:
+ (PaymentRequestSelectorViewController*)controller {
+ [self.delegate paymentMethodSelectionCoordinatorDidReturn:self];
}
-- (void)paymentMethodSelectionViewControllerDidSelectAddCard:
- (PaymentMethodSelectionViewController*)controller {
- _creditCardEditCoordinator = [[CreditCardEditCoordinator alloc]
- initWithBaseViewController:_viewController];
- [_creditCardEditCoordinator setPaymentRequest:_paymentRequest];
- [_creditCardEditCoordinator setDelegate:self];
- [_creditCardEditCoordinator start];
+- (void)paymentRequestSelectorViewControllerDidSelectAddItem:
+ (PaymentRequestSelectorViewController*)controller {
+ self.creditCardEditCoordinator = [[CreditCardEditCoordinator alloc]
+ initWithBaseViewController:self.viewController];
+ self.creditCardEditCoordinator.paymentRequest = self.paymentRequest;
+ self.creditCardEditCoordinator.delegate = self;
+ [self.creditCardEditCoordinator start];
}
#pragma mark - CreditCardEditCoordinatorDelegate
- (void)creditCardEditCoordinator:(CreditCardEditCoordinator*)coordinator
didFinishEditingCreditCard:(autofill::CreditCard*)creditCard {
- [_creditCardEditCoordinator stop];
- _creditCardEditCoordinator = nil;
+ [self.creditCardEditCoordinator stop];
+ self.creditCardEditCoordinator = nil;
- // Inform |_delegate| that this card has been selected.
- [_delegate paymentMethodSelectionCoordinator:self
- didSelectPaymentMethod:creditCard];
+ // Inform |self.delegate| that this card has been selected.
+ [self.delegate paymentMethodSelectionCoordinator:self
+ didSelectPaymentMethod:creditCard];
}
- (void)creditCardEditCoordinatorDidCancel:
(CreditCardEditCoordinator*)coordinator {
- [_creditCardEditCoordinator stop];
- _creditCardEditCoordinator = nil;
+ [self.creditCardEditCoordinator stop];
+ self.creditCardEditCoordinator = nil;
+}
+
+#pragma mark - Helper methods
+
+- (void)delayedNotifyDelegateOfSelection:(autofill::CreditCard*)paymentMethod {
+ self.viewController.view.userInteractionEnabled = NO;
+ __weak PaymentMethodSelectionCoordinator* weakSelf = self;
+ dispatch_after(
+ dispatch_time(DISPATCH_TIME_NOW, kDelegateNotificationDelayInNanoSeconds),
+ dispatch_get_main_queue(), ^{
+ weakSelf.viewController.view.userInteractionEnabled = YES;
+ [weakSelf.delegate paymentMethodSelectionCoordinator:weakSelf
+ didSelectPaymentMethod:paymentMethod];
+ });
}
@end

Powered by Google App Engine
This is Rietveld 408576698