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..d568605cbf5900c8b2c9da72aadce2974795a8ae 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,90 @@ 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 setMessage:self.paymentRequest->shipping_options().empty() |
gambard
2017/04/18 14:34:46
Are you sure you want to set message to something
gambard
2017/04/18 14:34:46
s/self.mediator setMessage:/self.mediator.message
Moe
2017/04/18 17:19:16
Done. Fixed similar cases as well.
Moe
2017/04/18 17:19:16
Yes. that's according to the specs and mocks. It's
|
+ ? base::SysUTF16ToNSString( |
+ GetShippingAddressSelectorInfoMessage( |
+ self.paymentRequest->shipping_type())) |
+ : nil]; |
+ |
+ self.viewController = [[PaymentRequestSelectorViewController alloc] init]; |
+ [self.viewController |
+ setTitle:base::SysUTF16ToNSString(GetShippingAddressSectionString( |
+ self.paymentRequest->shipping_type()))]; |
+ [self.viewController setDelegate:self]; |
+ [self.viewController setDataSource: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 |
+ setMessage:GetShippingAddressSelectorErrorMessage(*self.paymentRequest)]; |
+ [self.mediator setState: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 setSelectedItemIndex: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 |