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

Side by Side Diff: ios/chrome/browser/ui/settings/import_data_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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import "ios/chrome/browser/ui/settings/import_data_collection_view_controller.h "
6
7 #import "base/ios/weak_nsobject.h"
8 #include "base/logging.h"
9 #import "base/mac/foundation_util.h"
10 #import "base/mac/scoped_nsobject.h"
11 #include "base/strings/sys_string_conversions.h"
12 #import "ios/chrome/browser/ui/collection_view/cells/MDCCollectionViewCell+Chrom e.h"
13 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_detail_item .h"
14 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_item.h"
15 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
16 #import "ios/chrome/browser/ui/settings/cells/card_multiline_item.h"
17 #import "ios/chrome/browser/ui/settings/cells/import_data_multiline_detail_cell. h"
18 #include "ios/chrome/grit/ios_strings.h"
19 #import "ios/third_party/material_components_ios/src/components/CollectionCells/ src/MaterialCollectionCells.h"
20 #import "ios/third_party/material_components_ios/src/components/Collections/src/ MaterialCollections.h"
21 #include "ui/base/l10n/l10n_util_mac.h"
22
23 // The accessibility identifier of the Import Data cell.
24 NSString* const kImportDataImportCellId = @"kImportDataImportCellId";
25 // The accessibility identifier of the Keep Data Separate cell.
26 NSString* const kImportDataKeepSeparateCellId =
27 @"kImportDataKeepSeparateCellId";
28
29 namespace {
30
31 typedef NS_ENUM(NSInteger, SectionIdentifier) {
32 SectionIdentifierDisclaimer = kSectionIdentifierEnumZero,
33 SectionIdentifierOptions,
34 };
35
36 typedef NS_ENUM(NSInteger, ItemType) {
37 ItemTypeFooter = kItemTypeEnumZero,
38 ItemTypeOptionImportData,
39 ItemTypeOptionKeepDataSeparate,
40 };
41
42 } // namespace
43
44 @implementation ImportDataCollectionViewController {
45 base::WeakNSProtocol<id<ImportDataControllerDelegate>> _delegate;
46 base::scoped_nsobject<NSString> _fromEmail;
47 base::scoped_nsobject<NSString> _toEmail;
48 BOOL _isSignedIn;
49 ShouldClearData _shouldClearData;
50 base::scoped_nsobject<CollectionViewDetailItem> _importDataItem;
51 base::scoped_nsobject<CollectionViewDetailItem> _keepDataSeparateItem;
52 }
53
54 #pragma mark Initialization
55
56 - (instancetype)initWithDelegate:(id<ImportDataControllerDelegate>)delegate
57 fromEmail:(NSString*)fromEmail
58 toEmail:(NSString*)toEmail
59 isSignedIn:(BOOL)isSignedIn {
60 DCHECK(fromEmail);
61 DCHECK(toEmail);
62 self = [super initWithStyle:CollectionViewControllerStyleAppBar];
63 if (self) {
64 _delegate.reset(delegate);
65 _fromEmail.reset([fromEmail copy]);
66 _toEmail.reset([toEmail copy]);
67 _isSignedIn = isSignedIn;
68 _shouldClearData = isSignedIn ? SHOULD_CLEAR_DATA_CLEAR_DATA
69 : SHOULD_CLEAR_DATA_MERGE_DATA;
70 self.title = l10n_util::GetNSString(IDS_IOS_OPTIONS_IMPORT_DATA_TITLE);
71 [self setShouldHideDoneButton:YES];
72 self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc]
73 initWithTitle:l10n_util::GetNSString(
74 IDS_IOS_OPTIONS_IMPORT_DATA_CONTINUE_BUTTON)
75 style:UIBarButtonItemStyleDone
76 target:self
77 action:@selector(didTapContinue)] autorelease];
78 [self loadModel];
79 }
80 return self;
81 }
82
83 #pragma mark SettingsRootCollectionViewController
84
85 - (void)loadModel {
86 [super loadModel];
87 CollectionViewModel* model = self.collectionViewModel;
88
89 [model addSectionWithIdentifier:SectionIdentifierDisclaimer];
90 [model addItem:[self descriptionItem]
91 toSectionWithIdentifier:SectionIdentifierDisclaimer];
92
93 [model addSectionWithIdentifier:SectionIdentifierOptions];
94 _importDataItem.reset([[self importDataItem] retain]);
95 [model addItem:_importDataItem
96 toSectionWithIdentifier:SectionIdentifierOptions];
97 _keepDataSeparateItem.reset([[self keepDataSeparateItem] retain]);
98 [model addItem:_keepDataSeparateItem
99 toSectionWithIdentifier:SectionIdentifierOptions];
100 }
101
102 #pragma mark Items
103
104 - (CollectionViewItem*)descriptionItem {
105 CardMultilineItem* item =
106 [[[CardMultilineItem alloc] initWithType:ItemTypeFooter] autorelease];
107 item.text = l10n_util::GetNSStringF(IDS_IOS_OPTIONS_IMPORT_DATA_HEADER,
108 base::SysNSStringToUTF16(_fromEmail));
109 return item;
110 }
111
112 - (CollectionViewDetailItem*)importDataItem {
113 CollectionViewDetailItem* item = [[[CollectionViewDetailItem alloc]
114 initWithType:ItemTypeOptionImportData] autorelease];
115 item.cellClass = [ImportDataMultilineDetailCell class];
116 item.text = l10n_util::GetNSString(IDS_IOS_OPTIONS_IMPORT_DATA_IMPORT_TITLE);
117 item.detailText =
118 l10n_util::GetNSStringF(IDS_IOS_OPTIONS_IMPORT_DATA_IMPORT_SUBTITLE,
119 base::SysNSStringToUTF16(_toEmail));
120 item.accessoryType = _isSignedIn ? MDCCollectionViewCellAccessoryNone
121 : MDCCollectionViewCellAccessoryCheckmark;
122 item.accessibilityIdentifier = kImportDataImportCellId;
123 return item;
124 }
125
126 - (CollectionViewDetailItem*)keepDataSeparateItem {
127 CollectionViewDetailItem* item = [[[CollectionViewDetailItem alloc]
128 initWithType:ItemTypeOptionKeepDataSeparate] autorelease];
129 item.cellClass = [ImportDataMultilineDetailCell class];
130 item.text = l10n_util::GetNSString(IDS_IOS_OPTIONS_IMPORT_DATA_KEEP_TITLE);
131 if (_isSignedIn) {
132 item.detailText = l10n_util::GetNSStringF(
133 IDS_IOS_OPTIONS_IMPORT_DATA_KEEP_SUBTITLE_SWITCH,
134 base::SysNSStringToUTF16(_fromEmail));
135 } else {
136 item.detailText = l10n_util::GetNSString(
137 IDS_IOS_OPTIONS_IMPORT_DATA_KEEP_SUBTITLE_SIGNIN);
138 }
139 item.accessoryType = _isSignedIn ? MDCCollectionViewCellAccessoryCheckmark
140 : MDCCollectionViewCellAccessoryNone;
141 item.accessibilityIdentifier = kImportDataKeepSeparateCellId;
142 return item;
143 }
144
145 #pragma mark MDCCollectionViewStylingDelegate
146
147 - (CGFloat)collectionView:(UICollectionView*)collectionView
148 cellHeightAtIndexPath:(NSIndexPath*)indexPath {
149 CollectionViewItem* item =
150 [self.collectionViewModel itemAtIndexPath:indexPath];
151 CGFloat cardWidth = CGRectGetWidth(collectionView.bounds) -
152 2 * MDCCollectionViewCellStyleCardSectionInset;
153 return
154 [MDCCollectionViewCell cr_preferredHeightForWidth:cardWidth forItem:item];
155 }
156
157 #pragma mark UICollectionViewDelegate
158
159 - (void)collectionView:(UICollectionView*)collectionView
160 didSelectItemAtIndexPath:(NSIndexPath*)indexPath {
161 [super collectionView:collectionView didSelectItemAtIndexPath:indexPath];
162 NSInteger sectionIdentifier =
163 [self.collectionViewModel sectionIdentifierForSection:indexPath.section];
164
165 if (sectionIdentifier == SectionIdentifierOptions) {
166 // Store the user choice.
167 NSInteger itemType =
168 [self.collectionViewModel itemTypeForIndexPath:indexPath];
169 _shouldClearData = (itemType == ItemTypeOptionImportData)
170 ? SHOULD_CLEAR_DATA_MERGE_DATA
171 : SHOULD_CLEAR_DATA_CLEAR_DATA;
172 [self updateUI];
173 }
174 }
175
176 #pragma mark Private methods
177
178 // Updates the UI based on the value of |_shouldClearData|.
179 - (void)updateUI {
180 BOOL importDataSelected = _shouldClearData == SHOULD_CLEAR_DATA_MERGE_DATA;
181 _importDataItem.get().accessoryType =
182 importDataSelected ? MDCCollectionViewCellAccessoryCheckmark
183 : MDCCollectionViewCellAccessoryNone;
184 _keepDataSeparateItem.get().accessoryType =
185 importDataSelected ? MDCCollectionViewCellAccessoryNone
186 : MDCCollectionViewCellAccessoryCheckmark;
187 [self reconfigureCellsForItems:@[ _importDataItem, _keepDataSeparateItem ]
188 inSectionWithIdentifier:SectionIdentifierOptions];
189 }
190
191 - (void)didTapContinue {
192 [_delegate didChooseClearDataPolicy:self shouldClearData:_shouldClearData];
193 }
194
195 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698