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

Unified Diff: ios/chrome/browser/ui/settings/autofill_profile_edit_collection_view_controller.mm

Issue 2589583003: Upstream Chrome on iOS source code [7/11]. (Closed)
Patch Set: Created 4 years 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/ui/settings/autofill_profile_edit_collection_view_controller.mm
diff --git a/ios/chrome/browser/ui/settings/autofill_profile_edit_collection_view_controller.mm b/ios/chrome/browser/ui/settings/autofill_profile_edit_collection_view_controller.mm
new file mode 100644
index 0000000000000000000000000000000000000000..e85b32d7216723cbeb6ffb6fa3abfed1f1ee4b11
--- /dev/null
+++ b/ios/chrome/browser/ui/settings/autofill_profile_edit_collection_view_controller.mm
@@ -0,0 +1,239 @@
+// Copyright 2015 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/settings/autofill_profile_edit_collection_view_controller.h"
+
+#include "base/ios/weak_nsobject.h"
+#include "base/mac/foundation_util.h"
+#include "base/mac/scoped_nsobject.h"
+#include "base/strings/sys_string_conversions.h"
+#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/field_types.h"
+#include "components/autofill/core/browser/payments/payments_service_url.h"
+#include "components/autofill/core/browser/personal_data_manager.h"
+#include "ios/chrome/browser/application_context.h"
+#import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
+#import "ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h"
+#include "ios/chrome/browser/ui/commands/ios_command_ids.h"
+#import "ios/chrome/browser/ui/commands/open_url_command.h"
+#import "ios/chrome/browser/ui/settings/cells/autofill_edit_item.h"
+#include "ios/chrome/grit/ios_strings.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "url/gurl.h"
+
+NSString* const kAutofillProfileEditCollectionViewId =
+ @"kAutofillProfileEditCollectionViewId";
+
+namespace {
+
+typedef NS_ENUM(NSInteger, SectionIdentifier) {
+ SectionIdentifierFields = kSectionIdentifierEnumZero,
+};
+
+typedef NS_ENUM(NSInteger, ItemType) {
+ ItemTypeField = kItemTypeEnumZero,
+};
+
+struct AutofillFieldDisplayInfo {
+ autofill::ServerFieldType autofillType;
+ int displayStringID;
+ UIReturnKeyType returnKeyType;
+ UIKeyboardType keyboardType;
+ UITextAutocapitalizationType autoCapitalizationType;
+};
+
+static const AutofillFieldDisplayInfo kFieldsToDisplay[] = {
+ {autofill::NAME_FULL, IDS_IOS_AUTOFILL_FULLNAME, UIReturnKeyNext,
+ UIKeyboardTypeDefault, UITextAutocapitalizationTypeSentences},
+ {autofill::COMPANY_NAME, IDS_IOS_AUTOFILL_COMPANY_NAME, UIReturnKeyNext,
+ UIKeyboardTypeDefault, UITextAutocapitalizationTypeSentences},
+ {autofill::ADDRESS_HOME_LINE1, IDS_IOS_AUTOFILL_ADDRESS1, UIReturnKeyNext,
+ UIKeyboardTypeDefault, UITextAutocapitalizationTypeSentences},
+ {autofill::ADDRESS_HOME_LINE2, IDS_IOS_AUTOFILL_ADDRESS2, UIReturnKeyNext,
+ UIKeyboardTypeDefault, UITextAutocapitalizationTypeSentences},
+ {autofill::ADDRESS_HOME_CITY, IDS_IOS_AUTOFILL_CITY, UIReturnKeyNext,
+ UIKeyboardTypeDefault, UITextAutocapitalizationTypeSentences},
+ {autofill::ADDRESS_HOME_STATE, IDS_IOS_AUTOFILL_STATE, UIReturnKeyNext,
+ UIKeyboardTypeDefault, UITextAutocapitalizationTypeSentences},
+ {autofill::ADDRESS_HOME_ZIP, IDS_IOS_AUTOFILL_ZIP, UIReturnKeyNext,
+ UIKeyboardTypeNumberPad, UITextAutocapitalizationTypeSentences},
+ {autofill::ADDRESS_HOME_COUNTRY, IDS_IOS_AUTOFILL_COUNTRY, UIReturnKeyNext,
+ UIKeyboardTypeDefault, UITextAutocapitalizationTypeSentences},
+ {autofill::PHONE_HOME_WHOLE_NUMBER, IDS_IOS_AUTOFILL_PHONE, UIReturnKeyNext,
+ UIKeyboardTypePhonePad, UITextAutocapitalizationTypeSentences},
+ {autofill::EMAIL_ADDRESS, IDS_IOS_AUTOFILL_EMAIL, UIReturnKeyDone,
+ UIKeyboardTypeEmailAddress, UITextAutocapitalizationTypeNone}};
+
+} // namespace
+
+@interface AutofillProfileEditCollectionViewController ()
+
+// Initializes a AutofillProfileEditCollectionViewController with |profile| and
+// |dataManager|.
+- (instancetype)initWithProfile:(const autofill::AutofillProfile&)profile
+ personalDataManager:(autofill::PersonalDataManager*)dataManager
+ NS_DESIGNATED_INITIALIZER;
+
+@end
+
+@implementation AutofillProfileEditCollectionViewController {
+ autofill::PersonalDataManager* _personalDataManager; // weak
+ autofill::AutofillProfile _autofillProfile;
+}
+
+#pragma mark - Initialization
+
+- (instancetype)initWithProfile:(const autofill::AutofillProfile&)profile
+ personalDataManager:(autofill::PersonalDataManager*)dataManager {
+ DCHECK(dataManager);
+
+ self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+ if (self) {
+ _personalDataManager = dataManager;
+ _autofillProfile = profile;
+
+ [self setCollectionViewAccessibilityIdentifier:
+ kAutofillProfileEditCollectionViewId];
+ [self setTitle:l10n_util::GetNSString(IDS_IOS_AUTOFILL_EDIT_ADDRESS)];
+ [self loadModel];
+ }
+
+ return self;
+}
+
++ (instancetype)controllerWithProfile:(const autofill::AutofillProfile&)profile
+ personalDataManager:
+ (autofill::PersonalDataManager*)dataManager {
+ return [[[self alloc] initWithProfile:profile personalDataManager:dataManager]
+ autorelease];
+}
+
+#pragma mark - SettingsRootCollectionViewController
+
+- (void)editButtonPressed {
+ // In the case of server profiles, open the Payments editing page instead.
+ if (_autofillProfile.record_type() ==
+ autofill::AutofillProfile::SERVER_PROFILE) {
+ GURL paymentsURL = autofill::payments::GetManageAddressesUrl(0);
+ base::scoped_nsobject<OpenUrlCommand> command(
+ [[OpenUrlCommand alloc] initWithURLFromChrome:paymentsURL]);
+ [command setTag:IDC_CLOSE_SETTINGS_AND_OPEN_URL];
+ [self chromeExecuteCommand:command];
+
+ // Don't call [super editButtonPressed] because edit mode is not actually
+ // entered in this case.
+ return;
+ }
+
+ [super editButtonPressed];
+
+ if (!self.editor.editing) {
+ CollectionViewModel* model = self.collectionViewModel;
+ NSInteger itemCount =
+ [model numberOfItemsInSection:
+ [model sectionForSectionIdentifier:SectionIdentifierFields]];
+
+ // Reads the values from the fields and updates the local copy of the
+ // profile accordingly.
+ NSInteger section =
+ [model sectionForSectionIdentifier:SectionIdentifierFields];
+ for (NSInteger itemIndex = 0; itemIndex < itemCount; ++itemIndex) {
+ NSIndexPath* path =
+ [NSIndexPath indexPathForItem:itemIndex inSection:section];
+ AutofillEditItem* item = base::mac::ObjCCastStrict<AutofillEditItem>(
+ [model itemAtIndexPath:path]);
+ autofill::ServerFieldType serverFieldType = item.autofillType;
+ if (serverFieldType == autofill::ADDRESS_HOME_COUNTRY) {
+ _autofillProfile.SetInfo(
+ autofill::AutofillType(serverFieldType),
+ base::SysNSStringToUTF16(item.textFieldValue),
+ GetApplicationContext()->GetApplicationLocale());
+ } else {
+ _autofillProfile.SetRawInfo(
+ serverFieldType, base::SysNSStringToUTF16(item.textFieldValue));
+ }
+ }
+
+ _personalDataManager->UpdateProfile(_autofillProfile);
+ }
+
+ // Reload the model.
+ [self loadModel];
+ // Update the cells.
+ [self reconfigureCellsForItems:
+ [self.collectionViewModel
+ itemsInSectionWithIdentifier:SectionIdentifierFields]
+ inSectionWithIdentifier:SectionIdentifierFields];
+}
+
+- (void)loadModel {
+ [super loadModel];
+ CollectionViewModel* model = self.collectionViewModel;
+
+ std::string locale = GetApplicationContext()->GetApplicationLocale();
+ [model addSectionWithIdentifier:SectionIdentifierFields];
+ for (size_t i = 0; i < arraysize(kFieldsToDisplay); ++i) {
+ const AutofillFieldDisplayInfo& field = kFieldsToDisplay[i];
+ AutofillEditItem* item =
+ [[[AutofillEditItem alloc] initWithType:ItemTypeField] autorelease];
+ item.textFieldName = l10n_util::GetNSString(field.displayStringID);
+ item.textFieldValue = base::SysUTF16ToNSString(_autofillProfile.GetInfo(
+ autofill::AutofillType(field.autofillType), locale));
+ item.autofillType = field.autofillType;
+ item.textFieldEnabled = self.editor.editing;
+ [model addItem:item toSectionWithIdentifier:SectionIdentifierFields];
+ }
+}
+
+#pragma mark - MDCCollectionViewEditingDelegate
+
+- (BOOL)collectionViewAllowsEditing:(UICollectionView*)collectionView {
+ // The collection view needs to allow editing in order to respond to the Edit
+ // button.
+ return YES;
+}
+
+- (BOOL)collectionView:(UICollectionView*)collectionView
+ canEditItemAtIndexPath:(NSIndexPath*)indexPath {
+ // Items in this collection view are not deletable, so should not be seen
+ // as editable by the collection view.
+ return NO;
+}
+
+#pragma mark - UICollectionViewDataSource
+
+- (UICollectionViewCell*)collectionView:(UICollectionView*)collectionView
+ cellForItemAtIndexPath:(NSIndexPath*)indexPath {
+ UICollectionViewCell* cell =
+ [super collectionView:collectionView cellForItemAtIndexPath:indexPath];
+
+ AutofillEditCell* textFieldCell =
+ base::mac::ObjCCastStrict<AutofillEditCell>(cell);
+ NSUInteger index =
+ [self.collectionViewModel indexInItemTypeForIndexPath:indexPath];
+ const AutofillFieldDisplayInfo& field = kFieldsToDisplay[index];
+ textFieldCell.accessibilityIdentifier = textFieldCell.textLabel.text;
+ textFieldCell.textField.autocapitalizationType = field.autoCapitalizationType;
+ textFieldCell.textField.returnKeyType = field.returnKeyType;
+ textFieldCell.textField.keyboardType = field.keyboardType;
+ textFieldCell.textField.delegate = self;
+ return textFieldCell;
+}
+
+#pragma mark - UICollectionViewDelegate
+
+- (BOOL)collectionView:(UICollectionView*)collectionView
+ shouldSelectItemAtIndexPath:(NSIndexPath*)indexPath {
+ if (self.editor.editing) {
+ UICollectionViewCell* cell =
+ [self.collectionView cellForItemAtIndexPath:indexPath];
+ AutofillEditCell* textFieldCell =
+ base::mac::ObjCCastStrict<AutofillEditCell>(cell);
+ [textFieldCell.textField becomeFirstResponder];
+ }
+ return [super collectionView:collectionView
+ shouldSelectItemAtIndexPath:indexPath];
+}
+
+@end

Powered by Google App Engine
This is Rietveld 408576698