Index: ios/chrome/browser/ui/settings/import_data_collection_view_controller.mm |
diff --git a/ios/chrome/browser/ui/settings/import_data_collection_view_controller.mm b/ios/chrome/browser/ui/settings/import_data_collection_view_controller.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..79f370475ec20edef383e342d71aa4b0a3f86c75 |
--- /dev/null |
+++ b/ios/chrome/browser/ui/settings/import_data_collection_view_controller.mm |
@@ -0,0 +1,195 @@ |
+// 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/import_data_collection_view_controller.h" |
+ |
+#import "base/ios/weak_nsobject.h" |
+#include "base/logging.h" |
+#import "base/mac/foundation_util.h" |
+#import "base/mac/scoped_nsobject.h" |
+#include "base/strings/sys_string_conversions.h" |
+#import "ios/chrome/browser/ui/collection_view/cells/MDCCollectionViewCell+Chrome.h" |
+#import "ios/chrome/browser/ui/collection_view/cells/collection_view_detail_item.h" |
+#import "ios/chrome/browser/ui/collection_view/cells/collection_view_item.h" |
+#import "ios/chrome/browser/ui/collection_view/collection_view_model.h" |
+#import "ios/chrome/browser/ui/settings/cells/card_multiline_item.h" |
+#import "ios/chrome/browser/ui/settings/cells/import_data_multiline_detail_cell.h" |
+#include "ios/chrome/grit/ios_strings.h" |
+#import "ios/third_party/material_components_ios/src/components/CollectionCells/src/MaterialCollectionCells.h" |
+#import "ios/third_party/material_components_ios/src/components/Collections/src/MaterialCollections.h" |
+#include "ui/base/l10n/l10n_util_mac.h" |
+ |
+// The accessibility identifier of the Import Data cell. |
+NSString* const kImportDataImportCellId = @"kImportDataImportCellId"; |
+// The accessibility identifier of the Keep Data Separate cell. |
+NSString* const kImportDataKeepSeparateCellId = |
+ @"kImportDataKeepSeparateCellId"; |
+ |
+namespace { |
+ |
+typedef NS_ENUM(NSInteger, SectionIdentifier) { |
+ SectionIdentifierDisclaimer = kSectionIdentifierEnumZero, |
+ SectionIdentifierOptions, |
+}; |
+ |
+typedef NS_ENUM(NSInteger, ItemType) { |
+ ItemTypeFooter = kItemTypeEnumZero, |
+ ItemTypeOptionImportData, |
+ ItemTypeOptionKeepDataSeparate, |
+}; |
+ |
+} // namespace |
+ |
+@implementation ImportDataCollectionViewController { |
+ base::WeakNSProtocol<id<ImportDataControllerDelegate>> _delegate; |
+ base::scoped_nsobject<NSString> _fromEmail; |
+ base::scoped_nsobject<NSString> _toEmail; |
+ BOOL _isSignedIn; |
+ ShouldClearData _shouldClearData; |
+ base::scoped_nsobject<CollectionViewDetailItem> _importDataItem; |
+ base::scoped_nsobject<CollectionViewDetailItem> _keepDataSeparateItem; |
+} |
+ |
+#pragma mark Initialization |
+ |
+- (instancetype)initWithDelegate:(id<ImportDataControllerDelegate>)delegate |
+ fromEmail:(NSString*)fromEmail |
+ toEmail:(NSString*)toEmail |
+ isSignedIn:(BOOL)isSignedIn { |
+ DCHECK(fromEmail); |
+ DCHECK(toEmail); |
+ self = [super initWithStyle:CollectionViewControllerStyleAppBar]; |
+ if (self) { |
+ _delegate.reset(delegate); |
+ _fromEmail.reset([fromEmail copy]); |
+ _toEmail.reset([toEmail copy]); |
+ _isSignedIn = isSignedIn; |
+ _shouldClearData = isSignedIn ? SHOULD_CLEAR_DATA_CLEAR_DATA |
+ : SHOULD_CLEAR_DATA_MERGE_DATA; |
+ self.title = l10n_util::GetNSString(IDS_IOS_OPTIONS_IMPORT_DATA_TITLE); |
+ [self setShouldHideDoneButton:YES]; |
+ self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] |
+ initWithTitle:l10n_util::GetNSString( |
+ IDS_IOS_OPTIONS_IMPORT_DATA_CONTINUE_BUTTON) |
+ style:UIBarButtonItemStyleDone |
+ target:self |
+ action:@selector(didTapContinue)] autorelease]; |
+ [self loadModel]; |
+ } |
+ return self; |
+} |
+ |
+#pragma mark SettingsRootCollectionViewController |
+ |
+- (void)loadModel { |
+ [super loadModel]; |
+ CollectionViewModel* model = self.collectionViewModel; |
+ |
+ [model addSectionWithIdentifier:SectionIdentifierDisclaimer]; |
+ [model addItem:[self descriptionItem] |
+ toSectionWithIdentifier:SectionIdentifierDisclaimer]; |
+ |
+ [model addSectionWithIdentifier:SectionIdentifierOptions]; |
+ _importDataItem.reset([[self importDataItem] retain]); |
+ [model addItem:_importDataItem |
+ toSectionWithIdentifier:SectionIdentifierOptions]; |
+ _keepDataSeparateItem.reset([[self keepDataSeparateItem] retain]); |
+ [model addItem:_keepDataSeparateItem |
+ toSectionWithIdentifier:SectionIdentifierOptions]; |
+} |
+ |
+#pragma mark Items |
+ |
+- (CollectionViewItem*)descriptionItem { |
+ CardMultilineItem* item = |
+ [[[CardMultilineItem alloc] initWithType:ItemTypeFooter] autorelease]; |
+ item.text = l10n_util::GetNSStringF(IDS_IOS_OPTIONS_IMPORT_DATA_HEADER, |
+ base::SysNSStringToUTF16(_fromEmail)); |
+ return item; |
+} |
+ |
+- (CollectionViewDetailItem*)importDataItem { |
+ CollectionViewDetailItem* item = [[[CollectionViewDetailItem alloc] |
+ initWithType:ItemTypeOptionImportData] autorelease]; |
+ item.cellClass = [ImportDataMultilineDetailCell class]; |
+ item.text = l10n_util::GetNSString(IDS_IOS_OPTIONS_IMPORT_DATA_IMPORT_TITLE); |
+ item.detailText = |
+ l10n_util::GetNSStringF(IDS_IOS_OPTIONS_IMPORT_DATA_IMPORT_SUBTITLE, |
+ base::SysNSStringToUTF16(_toEmail)); |
+ item.accessoryType = _isSignedIn ? MDCCollectionViewCellAccessoryNone |
+ : MDCCollectionViewCellAccessoryCheckmark; |
+ item.accessibilityIdentifier = kImportDataImportCellId; |
+ return item; |
+} |
+ |
+- (CollectionViewDetailItem*)keepDataSeparateItem { |
+ CollectionViewDetailItem* item = [[[CollectionViewDetailItem alloc] |
+ initWithType:ItemTypeOptionKeepDataSeparate] autorelease]; |
+ item.cellClass = [ImportDataMultilineDetailCell class]; |
+ item.text = l10n_util::GetNSString(IDS_IOS_OPTIONS_IMPORT_DATA_KEEP_TITLE); |
+ if (_isSignedIn) { |
+ item.detailText = l10n_util::GetNSStringF( |
+ IDS_IOS_OPTIONS_IMPORT_DATA_KEEP_SUBTITLE_SWITCH, |
+ base::SysNSStringToUTF16(_fromEmail)); |
+ } else { |
+ item.detailText = l10n_util::GetNSString( |
+ IDS_IOS_OPTIONS_IMPORT_DATA_KEEP_SUBTITLE_SIGNIN); |
+ } |
+ item.accessoryType = _isSignedIn ? MDCCollectionViewCellAccessoryCheckmark |
+ : MDCCollectionViewCellAccessoryNone; |
+ item.accessibilityIdentifier = kImportDataKeepSeparateCellId; |
+ return item; |
+} |
+ |
+#pragma mark MDCCollectionViewStylingDelegate |
+ |
+- (CGFloat)collectionView:(UICollectionView*)collectionView |
+ cellHeightAtIndexPath:(NSIndexPath*)indexPath { |
+ CollectionViewItem* item = |
+ [self.collectionViewModel itemAtIndexPath:indexPath]; |
+ CGFloat cardWidth = CGRectGetWidth(collectionView.bounds) - |
+ 2 * MDCCollectionViewCellStyleCardSectionInset; |
+ return |
+ [MDCCollectionViewCell cr_preferredHeightForWidth:cardWidth forItem:item]; |
+} |
+ |
+#pragma mark UICollectionViewDelegate |
+ |
+- (void)collectionView:(UICollectionView*)collectionView |
+ didSelectItemAtIndexPath:(NSIndexPath*)indexPath { |
+ [super collectionView:collectionView didSelectItemAtIndexPath:indexPath]; |
+ NSInteger sectionIdentifier = |
+ [self.collectionViewModel sectionIdentifierForSection:indexPath.section]; |
+ |
+ if (sectionIdentifier == SectionIdentifierOptions) { |
+ // Store the user choice. |
+ NSInteger itemType = |
+ [self.collectionViewModel itemTypeForIndexPath:indexPath]; |
+ _shouldClearData = (itemType == ItemTypeOptionImportData) |
+ ? SHOULD_CLEAR_DATA_MERGE_DATA |
+ : SHOULD_CLEAR_DATA_CLEAR_DATA; |
+ [self updateUI]; |
+ } |
+} |
+ |
+#pragma mark Private methods |
+ |
+// Updates the UI based on the value of |_shouldClearData|. |
+- (void)updateUI { |
+ BOOL importDataSelected = _shouldClearData == SHOULD_CLEAR_DATA_MERGE_DATA; |
+ _importDataItem.get().accessoryType = |
+ importDataSelected ? MDCCollectionViewCellAccessoryCheckmark |
+ : MDCCollectionViewCellAccessoryNone; |
+ _keepDataSeparateItem.get().accessoryType = |
+ importDataSelected ? MDCCollectionViewCellAccessoryNone |
+ : MDCCollectionViewCellAccessoryCheckmark; |
+ [self reconfigureCellsForItems:@[ _importDataItem, _keepDataSeparateItem ] |
+ inSectionWithIdentifier:SectionIdentifierOptions]; |
+} |
+ |
+- (void)didTapContinue { |
+ [_delegate didChooseClearDataPolicy:self shouldClearData:_shouldClearData]; |
+} |
+ |
+@end |