Index: ios/chrome/browser/ui/payments/contact_info_edit_mediator.mm |
diff --git a/ios/chrome/browser/ui/payments/contact_info_edit_mediator.mm b/ios/chrome/browser/ui/payments/contact_info_edit_mediator.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6539749ac8bbf844b208322389f7669d6e2ca5d7 |
--- /dev/null |
+++ b/ios/chrome/browser/ui/payments/contact_info_edit_mediator.mm |
@@ -0,0 +1,142 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#import "ios/chrome/browser/ui/payments/contact_info_edit_mediator.h" |
+ |
+#include "base/logging.h" |
+#include "base/strings/sys_string_conversions.h" |
+#include "components/autofill/core/browser/autofill_profile.h" |
+#include "components/autofill/core/browser/autofill_type.h" |
+#include "components/autofill/core/browser/field_types.h" |
+#include "components/strings/grit/components_strings.h" |
+#include "ios/chrome/browser/application_context.h" |
+#include "ios/chrome/browser/payments/payment_request.h" |
+#import "ios/chrome/browser/ui/autofill/autofill_ui_type.h" |
+#import "ios/chrome/browser/ui/payments/payment_request_edit_consumer.h" |
+#import "ios/chrome/browser/ui/payments/payment_request_editor_field.h" |
+#include "ui/base/l10n/l10n_util.h" |
+ |
+#if !defined(__has_feature) || !__has_feature(objc_arc) |
+#error "This file requires ARC support." |
+#endif |
+ |
+@interface ContactInfoEditMediator () |
+ |
+// The PaymentRequest object owning an instance of web::PaymentRequest as |
+// provided by the page invoking the Payment Request API. This is a weak |
+// pointer and should outlive this class. |
+@property(nonatomic, assign) PaymentRequest* paymentRequest; |
+ |
+// The profile to be edited, if any. This pointer is not owned by this class and |
+// should outlive it. |
+@property(nonatomic, assign) autofill::AutofillProfile* profile; |
+ |
+// The list of current editor fields. |
+@property(nonatomic, strong) NSMutableArray<EditorField*>* fields; |
+ |
+@end |
+ |
+@implementation ContactInfoEditMediator |
+ |
+@synthesize state = _state; |
+@synthesize consumer = _consumer; |
+@synthesize paymentRequest = _paymentRequest; |
+@synthesize profile = _profile; |
+@synthesize fields = _fields; |
+ |
+- (instancetype)initWithPaymentRequest:(PaymentRequest*)paymentRequest |
+ profile:(autofill::AutofillProfile*)profile { |
+ self = [super init]; |
+ if (self) { |
+ _paymentRequest = paymentRequest; |
+ _profile = profile; |
+ _state = |
+ _profile ? EditViewControllerStateEdit : EditViewControllerStateCreate; |
+ } |
+ return self; |
+} |
+ |
+#pragma mark - Setters |
+ |
+- (void)setConsumer:(id<PaymentRequestEditConsumer>)consumer { |
+ _consumer = consumer; |
+ [self.consumer setEditorFields:[self createEditorFields]]; |
+} |
+ |
+#pragma mark - PaymentRequestEditViewControllerDataSource |
+ |
+- (CollectionViewItem*)headerItem { |
+ return nil; |
+} |
+ |
+- (BOOL)shouldHideBackgroundForHeaderItem { |
+ return NO; |
+} |
+ |
+- (UIImage*)iconIdentifyingEditorField:(EditorField*)field { |
+ return nil; |
+} |
+ |
+#pragma mark - Helper methods |
+ |
+// Creates and returns an array of editor fields. |
+- (NSArray<EditorField*>*)createEditorFields { |
+ self.fields = [[NSMutableArray alloc] init]; |
+ |
+ if (_paymentRequest->request_payer_name()) { |
+ NSString* name = self.profile |
+ ? base::SysUTF16ToNSString(self.profile->GetInfo( |
+ autofill::AutofillType(autofill::NAME_FULL), |
+ GetApplicationContext()->GetApplicationLocale())) |
+ : nil; |
+ EditorField* nameField = [[EditorField alloc] |
+ initWithAutofillUIType:AutofillUITypeProfileFullName |
+ fieldType:EditorFieldTypeTextField |
+ label:l10n_util::GetNSString( |
+ IDS_PAYMENTS_NAME_FIELD_IN_CONTACT_DETAILS) |
+ value:name |
+ required:YES]; |
+ [self.fields addObject:nameField]; |
+ } |
+ |
+ if (_paymentRequest->request_payer_phone()) { |
+ NSString* phone = |
+ self.profile |
+ ? base::SysUTF16ToNSString(self.profile->GetInfo( |
+ autofill::AutofillType(autofill::PHONE_HOME_WHOLE_NUMBER), |
+ GetApplicationContext()->GetApplicationLocale())) |
+ : nil; |
+ EditorField* phoneField = [[EditorField alloc] |
+ initWithAutofillUIType:AutofillUITypeProfileHomePhoneWholeNumber |
+ fieldType:EditorFieldTypeTextField |
+ label:l10n_util::GetNSString( |
+ IDS_PAYMENTS_PHONE_FIELD_IN_CONTACT_DETAILS) |
+ value:phone |
+ required:YES]; |
+ [self.fields addObject:phoneField]; |
+ } |
+ |
+ if (_paymentRequest->request_payer_email()) { |
+ NSString* email = |
+ self.profile ? base::SysUTF16ToNSString(self.profile->GetInfo( |
+ autofill::AutofillType(autofill::EMAIL_ADDRESS), |
+ GetApplicationContext()->GetApplicationLocale())) |
+ : nil; |
+ EditorField* emailField = [[EditorField alloc] |
+ initWithAutofillUIType:AutofillUITypeProfileEmailAddress |
+ fieldType:EditorFieldTypeTextField |
+ label:l10n_util::GetNSString( |
+ IDS_PAYMENTS_EMAIL_FIELD_IN_CONTACT_DETAILS) |
+ value:email |
+ required:YES]; |
+ [self.fields addObject:emailField]; |
+ } |
+ |
+ DCHECK(self.fields.count > 0) << "The contact info editor shouldn't be " |
+ "reachable if no contact information is " |
+ "requested."; |
+ return self.fields; |
+} |
+ |
+@end |