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

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

Issue 2827453004: [Payment Request] Refactors selector view controllers (Closed)
Patch Set: Addressed comments 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/shipping_address_selection_coordinator.mm
diff --git a/ios/chrome/browser/payments/shipping_address_selection_coordinator.mm b/ios/chrome/browser/payments/shipping_address_selection_coordinator.mm
index 91ec224e0721326d0b9ddb91085cbc005540202f..a2636daf710a3efa7926a7e5030aed1341bf5c65 100644
--- a/ios/chrome/browser/payments/shipping_address_selection_coordinator.mm
+++ b/ios/chrome/browser/payments/shipping_address_selection_coordinator.mm
@@ -6,8 +6,11 @@
#include "base/strings/sys_string_conversions.h"
#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/payments/core/strings_util.h"
#include "ios/chrome/browser/payments/payment_request.h"
+#include "ios/chrome/browser/payments/payment_request_selector_view_controller.h"
#import "ios/chrome/browser/payments/payment_request_util.h"
+#include "ios/chrome/browser/payments/shipping_address_selection_mediator.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
@@ -15,12 +18,16 @@
namespace {
using ::payment_request_util::GetShippingAddressSelectorErrorMessage;
+using ::payments::GetShippingAddressSectionString;
+using ::payments::GetShippingAddressSelectorInfoMessage;
} // namespace
@interface ShippingAddressSelectionCoordinator ()
@property(nonatomic, strong)
- ShippingAddressSelectionViewController* viewController;
+ PaymentRequestSelectorViewController* viewController;
+
+@property(nonatomic, strong) ShippingAddressSelectionMediator* mediator;
// Called when the user selects a shipping address. The cell is checked, the
// UI is locked so that the user can't interact with it, then the delegate is
@@ -36,71 +43,89 @@ using ::payment_request_util::GetShippingAddressSelectorErrorMessage;
@synthesize paymentRequest = _paymentRequest;
@synthesize delegate = _delegate;
@synthesize viewController = _viewController;
+@synthesize mediator = _mediator;
- (void)start {
- _viewController = [[ShippingAddressSelectionViewController alloc]
- initWithPaymentRequest:_paymentRequest];
- [_viewController setDelegate:self];
- [_viewController loadModel];
+ self.mediator = [[ShippingAddressSelectionMediator alloc]
+ initWithPaymentRequest:self.paymentRequest];
+ self.mediator.headerText =
+ self.paymentRequest->shipping_options().empty()
+ ? base::SysUTF16ToNSString(GetShippingAddressSelectorInfoMessage(
+ self.paymentRequest->shipping_type()))
+ : nil;
+
+ self.viewController = [[PaymentRequestSelectorViewController alloc] init];
+ self.viewController.title = base::SysUTF16ToNSString(
+ GetShippingAddressSectionString(self.paymentRequest->shipping_type()));
+ self.viewController.delegate = self;
+ self.viewController.dataSource = self.mediator;
+ [self.viewController loadModel];
DCHECK(self.baseViewController.navigationController);
[self.baseViewController.navigationController
- pushViewController:_viewController
+ pushViewController:self.viewController
animated:YES];
}
- (void)stop {
[self.baseViewController.navigationController popViewControllerAnimated:YES];
- _viewController = nil;
+ self.viewController = nil;
+ self.mediator = nil;
}
- (void)stopSpinnerAndDisplayError {
// Re-enable user interactions that were disabled earlier in
// delayedNotifyDelegateOfSelection.
- _viewController.view.userInteractionEnabled = YES;
-
- [_viewController setPending:NO];
- DCHECK(_paymentRequest);
- [_viewController
- setErrorMessage:GetShippingAddressSelectorErrorMessage(*_paymentRequest)];
- [_viewController loadModel];
- [[_viewController collectionView] reloadData];
+ self.viewController.view.userInteractionEnabled = YES;
+
+ DCHECK(self.paymentRequest);
+ self.mediator.headerText =
+ GetShippingAddressSelectorErrorMessage(*self.paymentRequest);
+ self.mediator.state = PaymentRequestSelectorStateError;
+ [self.viewController loadModel];
+ [self.viewController.collectionView reloadData];
}
-#pragma mark - ShippingAddressSelectionViewControllerDelegate
+#pragma mark - PaymentRequestSelectorViewControllerDelegate
+
+- (void)paymentRequestSelectorViewController:
+ (PaymentRequestSelectorViewController*)controller
+ didSelectItemAtIndex:(NSUInteger)index {
+ // Update the data source with the selection.
+ self.mediator.selectedItemIndex = index;
-- (void)shippingAddressSelectionViewController:
- (ShippingAddressSelectionViewController*)controller
- didSelectShippingAddress:
- (autofill::AutofillProfile*)shippingAddress {
- [self delayedNotifyDelegateOfSelection:shippingAddress];
+ DCHECK(index < self.paymentRequest->shipping_profiles().size());
+ [self delayedNotifyDelegateOfSelection:self.paymentRequest
+ ->shipping_profiles()[index]];
}
-- (void)shippingAddressSelectionViewControllerDidReturn:
- (ShippingAddressSelectionViewController*)controller {
- [_delegate shippingAddressSelectionCoordinatorDidReturn:self];
+- (void)paymentRequestSelectorViewControllerDidFinish:
+ (PaymentRequestSelectorViewController*)controller {
+ [self.delegate shippingAddressSelectionCoordinatorDidReturn:self];
}
+- (void)paymentRequestSelectorViewControllerDidSelectAddItem:
+ (PaymentRequestSelectorViewController*)controller {
+ // TODO(crbug.com/602666): Present a shipping address addition UI.
+}
+
+#pragma mark - Helper methods
+
- (void)delayedNotifyDelegateOfSelection:
(autofill::AutofillProfile*)shippingAddress {
- _viewController.view.userInteractionEnabled = NO;
+ self.viewController.view.userInteractionEnabled = NO;
__weak ShippingAddressSelectionCoordinator* weakSelf = self;
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW,
- static_cast<int64_t>(0.2 * NSEC_PER_SEC)),
- dispatch_get_main_queue(), ^{
- ShippingAddressSelectionCoordinator* strongSelf = weakSelf;
- // Early return if the coordinator has been deallocated.
- if (!strongSelf)
- return;
-
- [strongSelf.viewController setPending:YES];
- [strongSelf.viewController loadModel];
- [[strongSelf.viewController collectionView] reloadData];
-
- [strongSelf.delegate
- shippingAddressSelectionCoordinator:strongSelf
- didSelectShippingAddress:shippingAddress];
- });
+ dispatch_after(
+ dispatch_time(DISPATCH_TIME_NOW,
+ static_cast<int64_t>(0.2 * NSEC_PER_SEC)),
+ dispatch_get_main_queue(), ^{
+ [weakSelf.mediator setState:PaymentRequestSelectorStatePending];
+ [weakSelf.viewController loadModel];
+ [[weakSelf.viewController collectionView] reloadData];
+
+ [weakSelf.delegate shippingAddressSelectionCoordinator:weakSelf
+ didSelectShippingAddress:shippingAddress];
+ });
}
@end

Powered by Google App Engine
This is Rietveld 408576698