| // Copyright 2018 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/table_cell_catalog_view_controller.h" |
| |
| #import "ios/chrome/browser/ui/authentication/cells/account_control_item.h" |
| #import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.h" |
| #import "ios/chrome/browser/ui/authentication/cells/table_view_account_item.h" |
| #import "ios/chrome/browser/ui/authentication/cells/table_view_signin_promo_item.h" |
| #import "ios/chrome/browser/ui/autofill/cells/autofill_edit_item.h" |
| #import "ios/chrome/browser/ui/icons/chrome_icon.h" |
| #import "ios/chrome/browser/ui/settings/cells/autofill_data_item.h" |
| #import "ios/chrome/browser/ui/settings/cells/encryption_item.h" |
| #import "ios/chrome/browser/ui/settings/cells/settings_detail_item.h" |
| #import "ios/chrome/browser/ui/settings/cells/settings_image_detail_text_item.h" |
| #import "ios/chrome/browser/ui/settings/cells/settings_switch_item.h" |
| #import "ios/chrome/browser/ui/settings/cells/sync_switch_item.h" |
| #import "ios/chrome/browser/ui/table_view/cells/table_view_detail_text_item.h" |
| #import "ios/chrome/browser/ui/table_view/cells/table_view_image_item.h" |
| #import "ios/chrome/browser/ui/table_view/cells/table_view_link_header_footer_item.h" |
| #import "ios/chrome/browser/ui/table_view/cells/table_view_text_button_item.h" |
| #import "ios/chrome/browser/ui/table_view/cells/table_view_text_header_footer_item.h" |
| #import "ios/chrome/browser/ui/table_view/cells/table_view_text_item.h" |
| #import "ios/chrome/browser/ui/table_view/cells/table_view_url_item.h" |
| #import "ios/chrome/browser/ui/table_view/chrome_table_view_styler.h" |
| #import "ios/chrome/browser/ui/table_view/table_view_model.h" |
| #include "url/gurl.h" |
| |
| #if !defined(__has_feature) || !__has_feature(objc_arc) |
| #error "This file requires ARC support." |
| #endif |
| |
| namespace { |
| |
| typedef NS_ENUM(NSInteger, SectionIdentifier) { |
| SectionIdentifierText = kSectionIdentifierEnumZero, |
| SectionIdentifierSettings, |
| SectionIdentifierAutofill, |
| SectionIdentifierAccount, |
| SectionIdentifierURL, |
| }; |
| |
| typedef NS_ENUM(NSInteger, ItemType) { |
| ItemTypeText = kItemTypeEnumZero, |
| ItemTypeTextHeader, |
| ItemTypeTextFooter, |
| ItemTypeTextButton, |
| ItemTypeURLNoMetadata, |
| ItemTypeTextAccessoryImage, |
| ItemTypeTextAccessoryNoImage, |
| ItemTypeURLWithTimestamp, |
| ItemTypeURLWithSize, |
| ItemTypeURLWithSupplementalText, |
| ItemTypeURLWithBadgeImage, |
| ItemTypeTextSettingsDetail, |
| ItemTypeEncryption, |
| ItemTypeLinkFooter, |
| ItemTypeDetailText, |
| ItemTypeSettingsSwitch1, |
| ItemTypeSettingsSwitch2, |
| ItemTypeSyncSwitch, |
| ItemTypeSettingsSyncError, |
| ItemTypeAutofillEditItem, |
| ItemTypeAutofillData, |
| ItemTypeAccount, |
| }; |
| } |
| |
| @implementation TableCellCatalogViewController |
| |
| - (instancetype)init { |
| if ((self = [super |
| initWithTableViewStyle:UITableViewStyleGrouped |
| appBarStyle:ChromeTableViewControllerStyleNoAppBar])) { |
| } |
| return self; |
| } |
| |
| - (void)viewDidLoad { |
| [super viewDidLoad]; |
| self.title = @"Table Cell Catalog"; |
| self.tableView.rowHeight = UITableViewAutomaticDimension; |
| self.tableView.estimatedRowHeight = 56.0; |
| self.tableView.estimatedSectionHeaderHeight = 56.0; |
| self.tableView.estimatedSectionFooterHeight = 56.0; |
| |
| [self loadModel]; |
| } |
| |
| - (void)loadModel { |
| [super loadModel]; |
| |
| TableViewModel* model = self.tableViewModel; |
| [model addSectionWithIdentifier:SectionIdentifierText]; |
| [model addSectionWithIdentifier:SectionIdentifierSettings]; |
| [model addSectionWithIdentifier:SectionIdentifierAutofill]; |
| [model addSectionWithIdentifier:SectionIdentifierAccount]; |
| [model addSectionWithIdentifier:SectionIdentifierURL]; |
| |
| // SectionIdentifierText. |
| TableViewTextHeaderFooterItem* textHeaderFooterItem = |
| [[TableViewTextHeaderFooterItem alloc] initWithType:ItemTypeTextHeader]; |
| textHeaderFooterItem.text = @"Simple Text Header"; |
| [model setHeader:textHeaderFooterItem |
| forSectionWithIdentifier:SectionIdentifierText]; |
| |
| TableViewTextItem* textItem = |
| [[TableViewTextItem alloc] initWithType:ItemTypeText]; |
| textItem.text = @"Simple Text Cell"; |
| textItem.textAlignment = NSTextAlignmentCenter; |
| textItem.textColor = [UIColor blackColor]; |
| [model addItem:textItem toSectionWithIdentifier:SectionIdentifierText]; |
| |
| textItem = [[TableViewTextItem alloc] initWithType:ItemTypeText]; |
| textItem.text = @"1234"; |
| textItem.masked = YES; |
| [model addItem:textItem toSectionWithIdentifier:SectionIdentifierText]; |
| |
| TableViewImageItem* textImageItem = |
| [[TableViewImageItem alloc] initWithType:ItemTypeTextAccessoryImage]; |
| textImageItem.title = @"Image Item with History Image"; |
| textImageItem.image = [UIImage imageNamed:@"show_history"]; |
| [model addItem:textImageItem toSectionWithIdentifier:SectionIdentifierText]; |
| |
| textImageItem = |
| [[TableViewImageItem alloc] initWithType:ItemTypeTextAccessoryNoImage]; |
| textImageItem.title = @"Image Item with No Image"; |
| [model addItem:textImageItem toSectionWithIdentifier:SectionIdentifierText]; |
| |
| TableViewTextItem* textItemDefault = |
| [[TableViewTextItem alloc] initWithType:ItemTypeText]; |
| textItemDefault.text = @"Simple Text Cell with Defaults"; |
| [model addItem:textItemDefault toSectionWithIdentifier:SectionIdentifierText]; |
| |
| textHeaderFooterItem = |
| [[TableViewTextHeaderFooterItem alloc] initWithType:ItemTypeTextFooter]; |
| textHeaderFooterItem.text = @"Simple Text Footer"; |
| [model setFooter:textHeaderFooterItem |
| forSectionWithIdentifier:SectionIdentifierText]; |
| |
| TableViewTextButtonItem* textActionButtonItem = |
| [[TableViewTextButtonItem alloc] initWithType:ItemTypeTextButton]; |
| textActionButtonItem.text = @"Hello, you should do something."; |
| textActionButtonItem.buttonText = @"Do something"; |
| [model addItem:textActionButtonItem |
| toSectionWithIdentifier:SectionIdentifierText]; |
| |
| TableViewDetailTextItem* detailTextItem = |
| [[TableViewDetailTextItem alloc] initWithType:ItemTypeDetailText]; |
| detailTextItem.text = @"Item with two labels"; |
| detailTextItem.detailText = |
| @"The second label is optional and is mostly displayed on one line"; |
| [model addItem:detailTextItem toSectionWithIdentifier:SectionIdentifierText]; |
| |
| TableViewDetailTextItem* noDetailTextItem = |
| [[TableViewDetailTextItem alloc] initWithType:ItemTypeDetailText]; |
| noDetailTextItem.text = @"Detail item on one line."; |
| [model addItem:noDetailTextItem |
| toSectionWithIdentifier:SectionIdentifierText]; |
| |
| // SectionIdentifierSettings. |
| TableViewTextHeaderFooterItem* settingsHeader = |
| [[TableViewTextHeaderFooterItem alloc] initWithType:ItemTypeTextHeader]; |
| settingsHeader.text = @"Settings"; |
| [model setHeader:settingsHeader |
| forSectionWithIdentifier:SectionIdentifierSettings]; |
| |
| SettingsDetailItem* settingsDetailItem = |
| [[SettingsDetailItem alloc] initWithType:ItemTypeTextSettingsDetail]; |
| settingsDetailItem.text = @"Settings cells"; |
| settingsDetailItem.detailText = @"Short"; |
| [model addItem:settingsDetailItem |
| toSectionWithIdentifier:SectionIdentifierSettings]; |
| |
| SettingsDetailItem* settingsDetailItemLong = |
| [[SettingsDetailItem alloc] initWithType:ItemTypeTextSettingsDetail]; |
| settingsDetailItemLong.text = @"Very long text eating the other detail label"; |
| settingsDetailItemLong.detailText = @"A bit less short"; |
| [model addItem:settingsDetailItemLong |
| toSectionWithIdentifier:SectionIdentifierSettings]; |
| |
| SettingsSwitchItem* settingsSwitchItem = |
| [[SettingsSwitchItem alloc] initWithType:ItemTypeSettingsSwitch1]; |
| settingsSwitchItem.text = @"This is a settings switch item"; |
| [model addItem:settingsSwitchItem |
| toSectionWithIdentifier:SectionIdentifierSettings]; |
| |
| SettingsSwitchItem* settingsSwitchItem2 = |
| [[SettingsSwitchItem alloc] initWithType:ItemTypeSettingsSwitch2]; |
| settingsSwitchItem2.text = @"This is a disabled settings switch item"; |
| settingsSwitchItem2.detailText = @"This is a switch item with detail text"; |
| settingsSwitchItem2.on = YES; |
| settingsSwitchItem2.enabled = NO; |
| [model addItem:settingsSwitchItem2 |
| toSectionWithIdentifier:SectionIdentifierSettings]; |
| |
| SyncSwitchItem* syncSwitchItem = |
| [[SyncSwitchItem alloc] initWithType:ItemTypeSyncSwitch]; |
| syncSwitchItem.text = @"This is a sync switch item"; |
| syncSwitchItem.detailText = @"This is a sync switch item with detail text"; |
| syncSwitchItem.on = YES; |
| syncSwitchItem.enabled = NO; |
| [model addItem:syncSwitchItem |
| toSectionWithIdentifier:SectionIdentifierSettings]; |
| |
| SettingsImageDetailTextItem* imageDetailTextItem = |
| [[SettingsImageDetailTextItem alloc] |
| initWithType:ItemTypeSettingsSyncError]; |
| imageDetailTextItem.text = @"This is an error description about sync"; |
| imageDetailTextItem.detailText = |
| @"This is more detail about the sync error description"; |
| imageDetailTextItem.image = [ChromeIcon infoIcon]; |
| [model addItem:imageDetailTextItem |
| toSectionWithIdentifier:SectionIdentifierSettings]; |
| |
| EncryptionItem* encryptionChecked = |
| [[EncryptionItem alloc] initWithType:ItemTypeEncryption]; |
| encryptionChecked.text = |
| @"These two cells have exactly the same text, but one has a checkmark " |
| @"and the other does not. They should lay out identically, and the " |
| @"presence of the checkmark should not cause the text to reflow."; |
| encryptionChecked.accessoryType = UITableViewCellAccessoryCheckmark; |
| [model addItem:encryptionChecked |
| toSectionWithIdentifier:SectionIdentifierSettings]; |
| |
| EncryptionItem* encryptionUnchecked = |
| [[EncryptionItem alloc] initWithType:ItemTypeEncryption]; |
| encryptionUnchecked.text = |
| @"These two cells have exactly the same text, but one has a checkmark " |
| @"and the other does not. They should lay out identically, and the " |
| @"presence of the checkmark should not cause the text to reflow."; |
| [model addItem:encryptionUnchecked |
| toSectionWithIdentifier:SectionIdentifierSettings]; |
| |
| TableViewLinkHeaderFooterItem* linkFooter = |
| [[TableViewLinkHeaderFooterItem alloc] initWithType:ItemTypeLinkFooter]; |
| linkFooter.text = |
| @"This is a footer text view with a BEGIN_LINKlinkEND_LINK in the middle"; |
| [model setFooter:linkFooter |
| forSectionWithIdentifier:SectionIdentifierSettings]; |
| |
| // SectionIdentifierAutofill. |
| TableViewTextHeaderFooterItem* autofillHeader = |
| [[TableViewTextHeaderFooterItem alloc] initWithType:ItemTypeTextHeader]; |
| autofillHeader.text = @"Autofill"; |
| [model setHeader:autofillHeader |
| forSectionWithIdentifier:SectionIdentifierAutofill]; |
| |
| AutofillEditItem* autofillEditItem = |
| [[AutofillEditItem alloc] initWithType:ItemTypeAutofillEditItem]; |
| autofillEditItem.textFieldName = @"Autofill field"; |
| autofillEditItem.textFieldValue = @" with a value"; |
| autofillEditItem.identifyingIcon = |
| [UIImage imageNamed:@"table_view_cell_check_mark"]; |
| [model addItem:autofillEditItem |
| toSectionWithIdentifier:SectionIdentifierAutofill]; |
| |
| AutofillDataItem* autofillItemWithMainLeading = |
| [[AutofillDataItem alloc] initWithType:ItemTypeAutofillData]; |
| autofillItemWithMainLeading.text = @"Main Text"; |
| autofillItemWithMainLeading.trailingDetailText = @"Trailing Detail Text"; |
| [model addItem:autofillItemWithMainLeading |
| toSectionWithIdentifier:SectionIdentifierAutofill]; |
| |
| AutofillDataItem* autofillItemWithLeading = |
| [[AutofillDataItem alloc] initWithType:ItemTypeAutofillData]; |
| autofillItemWithLeading.text = @"Main Text"; |
| autofillItemWithLeading.leadingDetailText = @"Leading Detail Text"; |
| autofillItemWithLeading.accessoryType = |
| UITableViewCellAccessoryDisclosureIndicator; |
| [model addItem:autofillItemWithLeading |
| toSectionWithIdentifier:SectionIdentifierAutofill]; |
| |
| AutofillDataItem* autofillItemWithAllTexts = |
| [[AutofillDataItem alloc] initWithType:ItemTypeAutofillData]; |
| autofillItemWithAllTexts.text = @"Main Text"; |
| autofillItemWithAllTexts.leadingDetailText = @"Leading Detail Text"; |
| autofillItemWithAllTexts.trailingDetailText = @"Trailing Detail Text"; |
| autofillItemWithAllTexts.accessoryType = |
| UITableViewCellAccessoryDisclosureIndicator; |
| [model addItem:autofillItemWithAllTexts |
| toSectionWithIdentifier:SectionIdentifierAutofill]; |
| |
| // SectionIdentifierAccount. |
| TableViewSigninPromoItem* signinPromo = |
| [[TableViewSigninPromoItem alloc] initWithType:ItemTypeAccount]; |
| signinPromo.configurator = [[SigninPromoViewConfigurator alloc] |
| initWithUserEmail:@"jonhdoe@example.com" |
| userFullName:@"John Doe" |
| userImage:nil |
| hasCloseButton:NO]; |
| signinPromo.text = @"Signin promo text example"; |
| [model addItem:signinPromo toSectionWithIdentifier:SectionIdentifierAccount]; |
| |
| TableViewAccountItem* accountItemDetailWithError = |
| [[TableViewAccountItem alloc] initWithType:ItemTypeAccount]; |
| // TODO(crbug.com/754032): ios_default_avatar image is from a downstream iOS |
| // internal repository. It should be used through a provider API instead. |
| accountItemDetailWithError.image = [UIImage imageNamed:@"ios_default_avatar"]; |
| accountItemDetailWithError.text = @"Account User Name"; |
| accountItemDetailWithError.detailText = |
| @"Syncing to AccountUserNameAccount@example.com"; |
| accountItemDetailWithError.accessoryType = |
| UITableViewCellAccessoryDisclosureIndicator; |
| accountItemDetailWithError.shouldDisplayError = YES; |
| [model addItem:accountItemDetailWithError |
| toSectionWithIdentifier:SectionIdentifierAccount]; |
| |
| TableViewAccountItem* accountItemCheckMark = |
| [[TableViewAccountItem alloc] initWithType:ItemTypeAccount]; |
| // TODO(crbug.com/754032): ios_default_avatar image is from a downstream iOS |
| // internal repository. It should be used through a provider API instead. |
| accountItemCheckMark.image = [UIImage imageNamed:@"ios_default_avatar"]; |
| accountItemCheckMark.text = @"Lorem ipsum dolor sit amet, consectetur " |
| @"adipiscing elit, sed do eiusmod tempor " |
| @"incididunt ut labore et dolore magna aliqua."; |
| accountItemCheckMark.detailText = |
| @"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do " |
| @"eiusmod tempor incididunt ut labore et dolore magna aliqua."; |
| accountItemCheckMark.accessoryType = UITableViewCellAccessoryCheckmark; |
| [model addItem:accountItemCheckMark |
| toSectionWithIdentifier:SectionIdentifierAccount]; |
| |
| AccountControlItem* accountControlItem = |
| [[AccountControlItem alloc] initWithType:ItemTypeAccount]; |
| accountControlItem.image = [UIImage imageNamed:@"settings_sync"]; |
| accountControlItem.text = @"Account Sync Settings"; |
| accountControlItem.detailText = @"Detail text"; |
| accountControlItem.accessoryType = |
| UITableViewCellAccessoryDisclosureIndicator; |
| [model addItem:accountControlItem |
| toSectionWithIdentifier:SectionIdentifierAccount]; |
| |
| AccountControlItem* accountControlItemWithExtraLongText = |
| [[AccountControlItem alloc] initWithType:ItemTypeAccount]; |
| accountControlItemWithExtraLongText.image = [ChromeIcon infoIcon]; |
| accountControlItemWithExtraLongText.text = |
| @"Account Control Settings - long title"; |
| accountControlItemWithExtraLongText.detailText = |
| @"Detail text detail text detail text detail text detail text."; |
| accountControlItemWithExtraLongText.accessoryType = |
| UITableViewCellAccessoryDisclosureIndicator; |
| [model addItem:accountControlItemWithExtraLongText |
| toSectionWithIdentifier:SectionIdentifierAccount]; |
| |
| // SectionIdentifierURL. |
| TableViewURLItem* item = |
| [[TableViewURLItem alloc] initWithType:ItemTypeURLNoMetadata]; |
| item.title = @"Google Design"; |
| item.URL = GURL("https://design.google.com"); |
| [model addItem:item toSectionWithIdentifier:SectionIdentifierURL]; |
| |
| item = [[TableViewURLItem alloc] initWithType:ItemTypeURLNoMetadata]; |
| item.URL = GURL("https://notitle.google.com"); |
| [model addItem:item toSectionWithIdentifier:SectionIdentifierURL]; |
| |
| item = [[TableViewURLItem alloc] initWithType:ItemTypeURLWithTimestamp]; |
| item.title = @"Google"; |
| item.URL = GURL("https://www.google.com"); |
| item.metadata = @"3:42 PM"; |
| [model addItem:item toSectionWithIdentifier:SectionIdentifierURL]; |
| |
| item = [[TableViewURLItem alloc] initWithType:ItemTypeURLWithSize]; |
| item.title = @"World Series 2017: Houston Astros Defeat Someone Else"; |
| item.URL = GURL("https://m.bbc.com"); |
| item.metadata = @"176 KB"; |
| [model addItem:item toSectionWithIdentifier:SectionIdentifierURL]; |
| |
| item = |
| [[TableViewURLItem alloc] initWithType:ItemTypeURLWithSupplementalText]; |
| item.title = @"Chrome | Google Blog"; |
| item.URL = GURL("https://blog.google/products/chrome/"); |
| item.supplementalURLText = @"Read 4 days ago"; |
| [model addItem:item toSectionWithIdentifier:SectionIdentifierURL]; |
| |
| item = [[TableViewURLItem alloc] initWithType:ItemTypeURLWithBadgeImage]; |
| item.title = @"Photos - Google Photos"; |
| item.URL = GURL("https://photos.google.com/"); |
| item.badgeImage = [UIImage imageNamed:@"table_view_cell_check_mark"]; |
| [model addItem:item toSectionWithIdentifier:SectionIdentifierURL]; |
| } |
| |
| @end |