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

Side by Side Diff: ios/chrome/browser/ui/payments/contact_info_selection_coordinator.mm

Issue 2932703004: [Payment Request] Contact Info editor (Closed)
Patch Set: Addressed comments Created 3 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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/contact_info_selection_coordinator.h" 5 #import "ios/chrome/browser/ui/payments/contact_info_selection_coordinator.h"
6 6
7 #include "base/strings/sys_string_conversions.h" 7 #include "base/strings/sys_string_conversions.h"
8 #include "components/autofill/core/browser/autofill_profile.h" 8 #include "components/autofill/core/browser/autofill_profile.h"
9 #include "components/payments/core/strings_util.h" 9 #include "components/payments/core/strings_util.h"
10 #include "components/strings/grit/components_strings.h" 10 #include "components/strings/grit/components_strings.h"
(...skipping 10 matching lines...) Expand all
21 namespace { 21 namespace {
22 // The delay in nano seconds before notifying the delegate of the selection. 22 // The delay in nano seconds before notifying the delegate of the selection.
23 // This is here to let the user get a visual feedback of the selection before 23 // This is here to let the user get a visual feedback of the selection before
24 // this view disappears. 24 // this view disappears.
25 const int64_t kDelegateNotificationDelayInNanoSeconds = 0.2 * NSEC_PER_SEC; 25 const int64_t kDelegateNotificationDelayInNanoSeconds = 0.2 * NSEC_PER_SEC;
26 } // namespace 26 } // namespace
27 27
28 @interface ContactInfoSelectionCoordinator () 28 @interface ContactInfoSelectionCoordinator ()
29 29
30 @property(nonatomic, strong) 30 @property(nonatomic, strong)
31 ContactInfoEditCoordinator* contactInfoEditCoordinator;
32
33 @property(nonatomic, strong)
31 PaymentRequestSelectorViewController* viewController; 34 PaymentRequestSelectorViewController* viewController;
32 35
33 @property(nonatomic, strong) ContactInfoSelectionMediator* mediator; 36 @property(nonatomic, strong) ContactInfoSelectionMediator* mediator;
34 37
35 // Called when the user selects a contact profile. The cell is checked, the 38 // Called when the user selects a contact profile. The cell is checked, the
36 // UI is locked so that the user can't interact with it, then the delegate is 39 // UI is locked so that the user can't interact with it, then the delegate is
37 // notified. 40 // notified.
38 - (void)delayedNotifyDelegateOfSelection: 41 - (void)delayedNotifyDelegateOfSelection:
39 (autofill::AutofillProfile*)contactProfile; 42 (autofill::AutofillProfile*)contactProfile;
40 43
41 @end 44 @end
42 45
43 @implementation ContactInfoSelectionCoordinator 46 @implementation ContactInfoSelectionCoordinator
44 47
45 @synthesize paymentRequest = _paymentRequest; 48 @synthesize paymentRequest = _paymentRequest;
46 @synthesize delegate = _delegate; 49 @synthesize delegate = _delegate;
50 @synthesize contactInfoEditCoordinator = _contactInfoEditCoordinator;
47 @synthesize viewController = _viewController; 51 @synthesize viewController = _viewController;
48 @synthesize mediator = _mediator; 52 @synthesize mediator = _mediator;
49 53
50 - (void)start { 54 - (void)start {
51 self.mediator = [[ContactInfoSelectionMediator alloc] 55 self.mediator = [[ContactInfoSelectionMediator alloc]
52 initWithPaymentRequest:self.paymentRequest]; 56 initWithPaymentRequest:self.paymentRequest];
53 57
54 self.viewController = [[PaymentRequestSelectorViewController alloc] init]; 58 self.viewController = [[PaymentRequestSelectorViewController alloc] init];
55 self.viewController.title = 59 self.viewController.title =
56 l10n_util::GetNSString(IDS_PAYMENT_REQUEST_CONTACT_INFO_SECTION_NAME); 60 l10n_util::GetNSString(IDS_PAYMENT_REQUEST_CONTACT_INFO_SECTION_NAME);
57 self.viewController.delegate = self; 61 self.viewController.delegate = self;
58 self.viewController.dataSource = self.mediator; 62 self.viewController.dataSource = self.mediator;
59 [self.viewController loadModel]; 63 [self.viewController loadModel];
60 64
61 DCHECK(self.baseViewController.navigationController); 65 DCHECK(self.baseViewController.navigationController);
62 [self.baseViewController.navigationController 66 [self.baseViewController.navigationController
63 pushViewController:self.viewController 67 pushViewController:self.viewController
64 animated:YES]; 68 animated:YES];
65 } 69 }
66 70
67 - (void)stop { 71 - (void)stop {
68 [self.baseViewController.navigationController popViewControllerAnimated:YES]; 72 [self.baseViewController.navigationController popViewControllerAnimated:YES];
73 [self.contactInfoEditCoordinator stop];
74 self.contactInfoEditCoordinator = nil;
69 self.viewController = nil; 75 self.viewController = nil;
70 self.mediator = nil; 76 self.mediator = nil;
71 } 77 }
72 78
73 #pragma mark - PaymentRequestSelectorViewControllerDelegate 79 #pragma mark - PaymentRequestSelectorViewControllerDelegate
74 80
75 - (void)paymentRequestSelectorViewController: 81 - (void)paymentRequestSelectorViewController:
76 (PaymentRequestSelectorViewController*)controller 82 (PaymentRequestSelectorViewController*)controller
77 didSelectItemAtIndex:(NSUInteger)index { 83 didSelectItemAtIndex:(NSUInteger)index {
78 // Update the data source with the selection. 84 // Update the data source with the selection.
79 self.mediator.selectedItemIndex = index; 85 self.mediator.selectedItemIndex = index;
80 86
81 DCHECK(index < self.paymentRequest->contact_profiles().size()); 87 DCHECK(index < self.paymentRequest->contact_profiles().size());
82 [self delayedNotifyDelegateOfSelection:self.paymentRequest 88 [self delayedNotifyDelegateOfSelection:self.paymentRequest
83 ->contact_profiles()[index]]; 89 ->contact_profiles()[index]];
84 } 90 }
85 91
86 - (void)paymentRequestSelectorViewControllerDidFinish: 92 - (void)paymentRequestSelectorViewControllerDidFinish:
87 (PaymentRequestSelectorViewController*)controller { 93 (PaymentRequestSelectorViewController*)controller {
88 [self.delegate contactInfoSelectionCoordinatorDidReturn:self]; 94 [self.delegate contactInfoSelectionCoordinatorDidReturn:self];
89 } 95 }
90 96
91 - (void)paymentRequestSelectorViewControllerDidSelectAddItem: 97 - (void)paymentRequestSelectorViewControllerDidSelectAddItem:
92 (PaymentRequestSelectorViewController*)controller { 98 (PaymentRequestSelectorViewController*)controller {
93 // TODO(crbug.com/602666): Display contact info editor. 99 self.contactInfoEditCoordinator = [[ContactInfoEditCoordinator alloc]
100 initWithBaseViewController:self.viewController];
101 self.contactInfoEditCoordinator.paymentRequest = self.paymentRequest;
102 self.contactInfoEditCoordinator.delegate = self;
103 [self.contactInfoEditCoordinator start];
104 }
105
106 #pragma mark - ContactInfoEditCoordinatorDelegate
107
108 - (void)contactInfoEditCoordinator:(ContactInfoEditCoordinator*)coordinator
109 didFinishEditingProfile:(autofill::AutofillProfile*)profile {
110 [self.contactInfoEditCoordinator stop];
111 self.contactInfoEditCoordinator = nil;
112
113 // Inform |self.delegate| that |profile| has been selected.
114 [self.delegate contactInfoSelectionCoordinator:self
115 didSelectContactProfile:profile];
116 }
117
118 - (void)contactInfoEditCoordinatorDidCancel:
119 (ContactInfoEditCoordinator*)coordinator {
120 [self.contactInfoEditCoordinator stop];
121 self.contactInfoEditCoordinator = nil;
94 } 122 }
95 123
96 #pragma mark - Helper methods 124 #pragma mark - Helper methods
97 125
98 - (void)delayedNotifyDelegateOfSelection: 126 - (void)delayedNotifyDelegateOfSelection:
99 (autofill::AutofillProfile*)contactProfile { 127 (autofill::AutofillProfile*)contactProfile {
100 self.viewController.view.userInteractionEnabled = NO; 128 self.viewController.view.userInteractionEnabled = NO;
101 __weak ContactInfoSelectionCoordinator* weakSelf = self; 129 __weak ContactInfoSelectionCoordinator* weakSelf = self;
102 dispatch_after( 130 dispatch_after(
103 dispatch_time(DISPATCH_TIME_NOW, kDelegateNotificationDelayInNanoSeconds), 131 dispatch_time(DISPATCH_TIME_NOW, kDelegateNotificationDelayInNanoSeconds),
104 dispatch_get_main_queue(), ^{ 132 dispatch_get_main_queue(), ^{
105 [weakSelf.delegate contactInfoSelectionCoordinator:weakSelf 133 [weakSelf.delegate contactInfoSelectionCoordinator:weakSelf
106 didSelectContactProfile:contactProfile]; 134 didSelectContactProfile:contactProfile];
107 }); 135 });
108 } 136 }
109 137
110 @end 138 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698