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

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

Issue 2587023002: Upstream Chrome on iOS source code [8/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/material_cell_catalog_view_controller.mm
diff --git a/ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.mm b/ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.mm
new file mode 100644
index 0000000000000000000000000000000000000000..23e2d485725f988002859b2f67f0a4f3cbe527ae
--- /dev/null
+++ b/ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.mm
@@ -0,0 +1,550 @@
+// Copyright 2016 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/material_cell_catalog_view_controller.h"
+
+#import <UIKit/UIKit.h>
+
+#import "base/mac/foundation_util.h"
+#include "components/grit/components_scaled_resources.h"
+#import "ios/chrome/browser/ui/autofill/cells/cvc_item.h"
+#import "ios/chrome/browser/ui/autofill/cells/status_item.h"
+#import "ios/chrome/browser/ui/autofill/cells/storage_switch_item.h"
+#import "ios/chrome/browser/ui/collection_view/cells/MDCCollectionViewCell+Chrome.h"
+#import "ios/chrome/browser/ui/collection_view/cells/collection_view_account_item.h"
+#import "ios/chrome/browser/ui/collection_view/cells/collection_view_detail_item.h"
+#import "ios/chrome/browser/ui/collection_view/cells/collection_view_footer_item.h"
+#import "ios/chrome/browser/ui/collection_view/cells/collection_view_switch_item.h"
+#import "ios/chrome/browser/ui/collection_view/cells/collection_view_text_item.h"
+#import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
+#import "ios/chrome/browser/ui/icons/chrome_icon.h"
+#import "ios/chrome/browser/ui/settings/cells/account_control_item.h"
+#import "ios/chrome/browser/ui/settings/cells/account_signin_item.h"
+#import "ios/chrome/browser/ui/settings/cells/autofill_data_item.h"
+#import "ios/chrome/browser/ui/settings/cells/native_app_item.h"
+#import "ios/chrome/browser/ui/settings/cells/sync_switch_item.h"
+#import "ios/chrome/browser/ui/settings/cells/text_and_error_item.h"
+#import "ios/chrome/browser/ui/uikit_ui_util.h"
+#include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
+#include "ios/public/provider/chrome/browser/signin/signin_resources_provider.h"
+#import "ios/third_party/material_components_ios/src/components/CollectionCells/src/MaterialCollectionCells.h"
+#import "ios/third_party/material_components_ios/src/components/Palettes/src/MaterialPalettes.h"
+#import "ios/third_party/material_roboto_font_loader_ios/src/src/MaterialRobotoFontLoader.h"
+
+namespace {
+
+typedef NS_ENUM(NSInteger, SectionIdentifier) {
+ SectionIdentifierTextCell = kSectionIdentifierEnumZero,
+ SectionIdentifierDetailCell,
+ SectionIdentifierSwitchCell,
+ SectionIdentifierNativeAppCell,
+ SectionIdentifierAutofill,
+ SectionIdentifierAccountCell,
+ SectionIdentifierAccountControlCell,
+ SectionIdentifierFooters,
+};
+
+typedef NS_ENUM(NSInteger, ItemType) {
+ ItemTypeTextCheckmark = kItemTypeEnumZero,
+ ItemTypeTextDetail,
+ ItemTypeTextError,
+ ItemTypeDetailBasic,
+ ItemTypeDetailLeftMedium,
+ ItemTypeDetailRightMedium,
+ ItemTypeDetailLeftLong,
+ ItemTypeDetailRightLong,
+ ItemTypeDetailBothLong,
+ ItemTypeSwitchBasic,
+ ItemTypeSwitchDynamicHeight,
+ ItemTypeSwitchSync,
+ ItemTypeHeader,
+ ItemTypeAccountDetail,
+ ItemTypeAccountCheckMark,
+ ItemTypeAccountSignIn,
+ ItemTypeApp,
+ ItemTypeAutofillDynamicHeight,
+ ItemTypeAutofillCVC,
+ ItemTypeAutofillStatus,
+ ItemTypeAutofillStorageSwitch,
+ ItemTypeAccountControlDynamicHeight,
+ ItemTypeFooter,
+};
+
+// Image fixed horizontal size.
+const CGFloat kHorizontalImageFixedSize = 40;
+
+} // namespace
+
+@implementation MaterialCellCatalogViewController
+
+- (instancetype)init {
+ self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+ if (self) {
+ [self loadModel];
+ }
+ return self;
+}
+
+- (void)loadModel {
+ [super loadModel];
+ CollectionViewModel* model = self.collectionViewModel;
+
+ // Text cells.
+ [model addSectionWithIdentifier:SectionIdentifierTextCell];
+
+ CollectionViewTextItem* textHeader = [
+ [[CollectionViewTextItem alloc] initWithType:ItemTypeHeader] autorelease];
+ textHeader.text = @"MDCCollectionViewTextCell";
+ [model setHeader:textHeader
+ forSectionWithIdentifier:SectionIdentifierTextCell];
+
+ CollectionViewTextItem* textCell = [[[CollectionViewTextItem alloc]
+ initWithType:ItemTypeTextCheckmark] autorelease];
+ textCell.text = @"Text cell 1";
+ textCell.accessoryType = MDCCollectionViewCellAccessoryCheckmark;
+ [model addItem:textCell toSectionWithIdentifier:SectionIdentifierTextCell];
+ CollectionViewTextItem* textCell2 = [[[CollectionViewTextItem alloc]
+ initWithType:ItemTypeTextDetail] autorelease];
+ textCell2.text =
+ @"Text cell with text that is so long it must truncate at some point";
+ textCell2.accessoryType = MDCCollectionViewCellAccessoryDetailButton;
+ [model addItem:textCell2 toSectionWithIdentifier:SectionIdentifierTextCell];
+
+ // Text and Error cell.
+ TextAndErrorItem* textAndErrorItem =
+ [[[TextAndErrorItem alloc] initWithType:ItemTypeTextError] autorelease];
+ textAndErrorItem.text = @"Text and Error cell";
+ textAndErrorItem.shouldDisplayError = YES;
+ textAndErrorItem.accessoryType =
+ MDCCollectionViewCellAccessoryDisclosureIndicator;
+ [model addItem:textAndErrorItem
+ toSectionWithIdentifier:SectionIdentifierTextCell];
+
+ // Detail cells.
+ [model addSectionWithIdentifier:SectionIdentifierDetailCell];
+ CollectionViewDetailItem* detailBasic = [[[CollectionViewDetailItem alloc]
+ initWithType:ItemTypeDetailBasic] autorelease];
+ detailBasic.text = @"Preload Webpages";
+ detailBasic.detailText = @"Only on Wi-Fi";
+ detailBasic.accessoryType = MDCCollectionViewCellAccessoryDisclosureIndicator;
+ [model addItem:detailBasic
+ toSectionWithIdentifier:SectionIdentifierDetailCell];
+ CollectionViewDetailItem* detailMediumLeft =
+ [[[CollectionViewDetailItem alloc] initWithType:ItemTypeDetailLeftMedium]
+ autorelease];
+ detailMediumLeft.text = @"A long string but it should fit";
+ detailMediumLeft.detailText = @"Detail";
+ [model addItem:detailMediumLeft
+ toSectionWithIdentifier:SectionIdentifierDetailCell];
+ CollectionViewDetailItem* detailMediumRight =
+ [[[CollectionViewDetailItem alloc] initWithType:ItemTypeDetailRightMedium]
+ autorelease];
+ detailMediumRight.text = @"Main";
+ detailMediumRight.detailText = @"A long string but it should fit";
+ [model addItem:detailMediumRight
+ toSectionWithIdentifier:SectionIdentifierDetailCell];
+ CollectionViewDetailItem* detailLongLeft = [[[CollectionViewDetailItem alloc]
+ initWithType:ItemTypeDetailLeftLong] autorelease];
+ detailLongLeft.text =
+ @"This is a very long main text that is intended to overflow";
+ detailLongLeft.detailText = @"Detail Text";
+ [model addItem:detailLongLeft
+ toSectionWithIdentifier:SectionIdentifierDetailCell];
+ CollectionViewDetailItem* detailLongRight = [[[CollectionViewDetailItem alloc]
+ initWithType:ItemTypeDetailRightLong] autorelease];
+ detailLongRight.text = @"Main Text";
+ detailLongRight.detailText =
+ @"This is a very long detail text that is intended to overflow";
+ [model addItem:detailLongRight
+ toSectionWithIdentifier:SectionIdentifierDetailCell];
+ CollectionViewDetailItem* detailLongBoth = [[[CollectionViewDetailItem alloc]
+ initWithType:ItemTypeDetailBothLong] autorelease];
+ detailLongBoth.text =
+ @"This is a very long main text that is intended to overflow";
+ detailLongBoth.detailText =
+ @"This is a very long detail text that is intended to overflow";
+ [model addItem:detailLongBoth
+ toSectionWithIdentifier:SectionIdentifierDetailCell];
+
+ // Switch cells.
+ [model addSectionWithIdentifier:SectionIdentifierSwitchCell];
+ [model addItem:[self basicSwitchItem]
+ toSectionWithIdentifier:SectionIdentifierSwitchCell];
+ [model addItem:[self longTextSwitchItem]
+ toSectionWithIdentifier:SectionIdentifierSwitchCell];
+ [model addItem:[self syncSwitchItem]
+ toSectionWithIdentifier:SectionIdentifierSwitchCell];
+
+ // Native app cells.
+ [model addSectionWithIdentifier:SectionIdentifierNativeAppCell];
+ NativeAppItem* fooApp =
+ [[[NativeAppItem alloc] initWithType:ItemTypeApp] autorelease];
+ fooApp.name = @"App Foo";
+ fooApp.state = NativeAppItemSwitchOff;
+ [model addItem:fooApp toSectionWithIdentifier:SectionIdentifierNativeAppCell];
+ NativeAppItem* barApp =
+ [[[NativeAppItem alloc] initWithType:ItemTypeApp] autorelease];
+ barApp.name = @"App Bar";
+ barApp.state = NativeAppItemSwitchOn;
+ [model addItem:barApp toSectionWithIdentifier:SectionIdentifierNativeAppCell];
+ NativeAppItem* bazApp =
+ [[[NativeAppItem alloc] initWithType:ItemTypeApp] autorelease];
+ bazApp.name = @"App Baz Qux Bla Bug Lorem ipsum dolor sit amet";
+ bazApp.state = NativeAppItemInstall;
+ [model addItem:bazApp toSectionWithIdentifier:SectionIdentifierNativeAppCell];
+
+ // Autofill cells.
+ [model addSectionWithIdentifier:SectionIdentifierAutofill];
+ [model addItem:[self autofillItemWithMainAndTrailingText]
+ toSectionWithIdentifier:SectionIdentifierAutofill];
+ [model addItem:[self autofillItemWithLeadingTextOnly]
+ toSectionWithIdentifier:SectionIdentifierAutofill];
+ [model addItem:[self autofillItemWithAllText]
+ toSectionWithIdentifier:SectionIdentifierAutofill];
+ [model addItem:[self cvcItem]
+ toSectionWithIdentifier:SectionIdentifierAutofill];
+ [model addItem:[self cvcItemWithDate]
+ toSectionWithIdentifier:SectionIdentifierAutofill];
+ [model addItem:[self cvcItemWithError]
+ toSectionWithIdentifier:SectionIdentifierAutofill];
+ [model addItem:[self statusItemVerifying]
+ toSectionWithIdentifier:SectionIdentifierAutofill];
+ [model addItem:[self statusItemVerified]
+ toSectionWithIdentifier:SectionIdentifierAutofill];
+ [model addItem:[self statusItemError]
+ toSectionWithIdentifier:SectionIdentifierAutofill];
+ [model addItem:[self storageSwitchItem]
+ toSectionWithIdentifier:SectionIdentifierAutofill];
+
+ // Account cells.
+ [model addSectionWithIdentifier:SectionIdentifierAccountCell];
+ [model addItem:[self accountItemDetailWithError]
+ toSectionWithIdentifier:SectionIdentifierAccountCell];
+ [model addItem:[self accountItemCheckMark]
+ toSectionWithIdentifier:SectionIdentifierAccountCell];
+ [model addItem:[self accountSignInItem]
+ toSectionWithIdentifier:SectionIdentifierAccountCell];
+
+ // Account control cells.
+ [model addSectionWithIdentifier:SectionIdentifierAccountControlCell];
+ [model addItem:[self accountControlItem]
+ toSectionWithIdentifier:SectionIdentifierAccountControlCell];
+ [model addItem:[self accountControlItemWithExtraLongText]
+ toSectionWithIdentifier:SectionIdentifierAccountControlCell];
+
+ // Footers.
+ [model addSectionWithIdentifier:SectionIdentifierFooters];
+ [model addItem:[self shortFooterItem]
+ toSectionWithIdentifier:SectionIdentifierFooters];
+ [model addItem:[self longFooterItem]
+ toSectionWithIdentifier:SectionIdentifierFooters];
+}
+
+- (void)viewDidLoad {
+ [super viewDidLoad];
+ self.title = @"Cell Catalog";
+
+ // Customize collection view settings.
+ self.styler.cellStyle = MDCCollectionViewCellStyleCard;
+}
+
+#pragma mark UICollectionViewDataSource
+
+- (UICollectionReusableView*)collectionView:(UICollectionView*)collectionView
+ viewForSupplementaryElementOfKind:(NSString*)kind
+ atIndexPath:(NSIndexPath*)indexPath {
+ UICollectionReusableView* cell = [super collectionView:collectionView
+ viewForSupplementaryElementOfKind:kind
+ atIndexPath:indexPath];
+ MDCCollectionViewTextCell* textCell =
+ base::mac::ObjCCast<MDCCollectionViewTextCell>(cell);
+ if (textCell) {
+ textCell.textLabel.font =
+ [[MDFRobotoFontLoader sharedInstance] mediumFontOfSize:14];
+ textCell.textLabel.textColor = [[MDCPalette greyPalette] tint500];
+ }
+
+ return cell;
+};
+
+#pragma mark MDCCollectionViewStylingDelegate
+
+- (CGFloat)collectionView:(nonnull UICollectionView*)collectionView
+ cellHeightAtIndexPath:(nonnull NSIndexPath*)indexPath {
+ CollectionViewItem* item =
+ [self.collectionViewModel itemAtIndexPath:indexPath];
+ switch (item.type) {
+ case ItemTypeFooter:
+ case ItemTypeSwitchDynamicHeight:
+ case ItemTypeSwitchSync:
+ case ItemTypeAccountControlDynamicHeight:
+ case ItemTypeTextError:
+ case ItemTypeAutofillCVC:
+ case ItemTypeAutofillStatus:
+ case ItemTypeAutofillStorageSwitch:
+ case ItemTypeAutofillDynamicHeight:
+ return [MDCCollectionViewCell
+ cr_preferredHeightForWidth:CGRectGetWidth(collectionView.bounds)
+ forItem:item];
+ case ItemTypeApp:
+ return MDCCellDefaultOneLineWithAvatarHeight;
+ case ItemTypeAccountDetail:
+ return MDCCellDefaultTwoLineHeight;
+ case ItemTypeAccountCheckMark:
+ return MDCCellDefaultTwoLineHeight;
+ case ItemTypeAccountSignIn:
+ return MDCCellDefaultThreeLineHeight;
+ default:
+ return MDCCellDefaultOneLineHeight;
+ }
+}
+
+- (MDCCollectionViewCellStyle)collectionView:(UICollectionView*)collectionView
+ cellStyleForSection:(NSInteger)section {
+ NSInteger sectionIdentifier =
+ [self.collectionViewModel sectionIdentifierForSection:section];
+ switch (sectionIdentifier) {
+ case SectionIdentifierFooters:
+ // Display the Learn More footer in the default style with no "card" UI
+ // and no section padding.
+ return MDCCollectionViewCellStyleDefault;
+ default:
+ return self.styler.cellStyle;
+ }
+}
+
+- (BOOL)collectionView:(UICollectionView*)collectionView
+ shouldHideItemBackgroundAtIndexPath:(NSIndexPath*)indexPath {
+ NSInteger sectionIdentifier =
+ [self.collectionViewModel sectionIdentifierForSection:indexPath.section];
+ switch (sectionIdentifier) {
+ case SectionIdentifierFooters:
+ // Display the Learn More footer without any background image or
+ // shadowing.
+ return YES;
+ default:
+ return NO;
+ }
+}
+
+- (BOOL)collectionView:(nonnull UICollectionView*)collectionView
+ hidesInkViewAtIndexPath:(nonnull NSIndexPath*)indexPath {
+ NSInteger sectionIdentifier =
+ [self.collectionViewModel sectionIdentifierForSection:indexPath.section];
+ switch (sectionIdentifier) {
+ case SectionIdentifierFooters:
+ case ItemTypeSwitchBasic:
+ case ItemTypeSwitchDynamicHeight:
+ case ItemTypeApp:
+ case ItemTypeAutofillStorageSwitch:
+ case ItemTypeSwitchSync:
+ return YES;
+ default:
+ return NO;
+ }
+}
+
+#pragma mark Item models
+
+- (CollectionViewItem*)accountItemDetailWithError {
+ CollectionViewAccountItem* accountItemDetail =
+ [[[CollectionViewAccountItem alloc] initWithType:ItemTypeAccountDetail]
+ autorelease];
+ accountItemDetail.image = [UIImage imageNamed:@"default_avatar"];
+ accountItemDetail.text = @"Account User Name";
+ accountItemDetail.detailText =
+ @"Syncing to AccountUserNameAccount@example.com";
+ accountItemDetail.accessoryType =
+ MDCCollectionViewCellAccessoryDisclosureIndicator;
+ accountItemDetail.shouldDisplayError = YES;
+ return accountItemDetail;
+}
+
+- (CollectionViewItem*)accountItemCheckMark {
+ CollectionViewAccountItem* accountItemCheckMark =
+ [[[CollectionViewAccountItem alloc] initWithType:ItemTypeAccountCheckMark]
+ autorelease];
+ accountItemCheckMark.image = [UIImage imageNamed:@"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 = MDCCollectionViewCellAccessoryCheckmark;
+ return accountItemCheckMark;
+}
+
+- (CollectionViewItem*)accountSignInItem {
+ AccountSignInItem* accountSignInItem = [[[AccountSignInItem alloc]
+ initWithType:ItemTypeAccountSignIn] autorelease];
+ accountSignInItem.image =
+ CircularImageFromImage(ios::GetChromeBrowserProvider()
+ ->GetSigninResourcesProvider()
+ ->GetDefaultAvatar(),
+ kHorizontalImageFixedSize);
+ return accountSignInItem;
+}
+
+- (CollectionViewItem*)accountControlItem {
+ AccountControlItem* item = [[[AccountControlItem alloc]
+ initWithType:ItemTypeAccountControlDynamicHeight] autorelease];
+ item.image = [UIImage imageNamed:@"settings_sync"];
+ item.text = @"Account Sync Settings";
+ item.detailText = @"Detail text";
+ item.accessoryType = MDCCollectionViewCellAccessoryDisclosureIndicator;
+ return item;
+}
+
+- (CollectionViewItem*)accountControlItemWithExtraLongText {
+ AccountControlItem* item = [[[AccountControlItem alloc]
+ initWithType:ItemTypeAccountControlDynamicHeight] autorelease];
+ item.image = [ChromeIcon infoIcon];
+ item.text = @"Account Control Settings";
+ item.detailText =
+ @"Detail text detail text detail text detail text detail text.";
+ item.accessoryType = MDCCollectionViewCellAccessoryDisclosureIndicator;
+ return item;
+}
+
+#pragma mark Private
+
+- (CollectionViewItem*)basicSwitchItem {
+ CollectionViewSwitchItem* item = [[[CollectionViewSwitchItem alloc]
+ initWithType:ItemTypeSwitchBasic] autorelease];
+ item.text = @"Enable awesomeness.";
+ item.on = YES;
+ return item;
+}
+
+- (CollectionViewItem*)longTextSwitchItem {
+ CollectionViewSwitchItem* item = [[[CollectionViewSwitchItem alloc]
+ initWithType:ItemTypeSwitchDynamicHeight] autorelease];
+ item.text = @"Enable awesomeness. This is a very long text that is intended "
+ @"to overflow.";
+ item.on = YES;
+ return item;
+}
+
+- (CollectionViewItem*)syncSwitchItem {
+ SyncSwitchItem* item =
+ [[[SyncSwitchItem alloc] initWithType:ItemTypeSwitchSync] autorelease];
+ item.text = @"Cell used in Sync Settings";
+ item.detailText =
+ @"This is a very long text that is intended to overflow to two lines.";
+ item.on = NO;
+ return item;
+}
+
+- (CollectionViewItem*)autofillItemWithMainAndTrailingText {
+ AutofillDataItem* item = [[[AutofillDataItem alloc]
+ initWithType:ItemTypeAutofillDynamicHeight] autorelease];
+ item.text = @"Main Text";
+ item.trailingDetailText = @"Trailing Detail Text";
+ item.accessoryType = MDCCollectionViewCellAccessoryNone;
+ return item;
+}
+
+- (CollectionViewItem*)autofillItemWithLeadingTextOnly {
+ AutofillDataItem* item = [[[AutofillDataItem alloc]
+ initWithType:ItemTypeAutofillDynamicHeight] autorelease];
+ item.text = @"Main Text";
+ item.leadingDetailText = @"Leading Detail Text";
+ item.accessoryType = MDCCollectionViewCellAccessoryDisclosureIndicator;
+ return item;
+}
+
+- (CollectionViewItem*)autofillItemWithAllText {
+ AutofillDataItem* item = [[[AutofillDataItem alloc]
+ initWithType:ItemTypeAutofillDynamicHeight] autorelease];
+ item.text = @"Main Text";
+ item.leadingDetailText = @"Leading Detail Text";
+ item.trailingDetailText = @"Trailing Detail Text";
+ item.accessoryType = MDCCollectionViewCellAccessoryDisclosureIndicator;
+ return item;
+}
+
+- (CollectionViewItem*)cvcItem {
+ CVCItem* item =
+ [[[CVCItem alloc] initWithType:ItemTypeAutofillCVC] autorelease];
+ item.instructionsText =
+ @"This is a long text explaining to enter card details and what "
+ @"will happen afterwards.";
+ item.CVCImageResourceID = IDR_CREDIT_CARD_CVC_HINT;
+ return item;
+}
+
+- (CollectionViewItem*)cvcItemWithDate {
+ CVCItem* item =
+ [[[CVCItem alloc] initWithType:ItemTypeAutofillCVC] autorelease];
+ item.instructionsText =
+ @"This is a long text explaining to enter card details and what "
+ @"will happen afterwards.";
+ item.CVCImageResourceID = IDR_CREDIT_CARD_CVC_HINT;
+ item.showDateInput = YES;
+ return item;
+}
+
+- (CollectionViewItem*)cvcItemWithError {
+ CVCItem* item =
+ [[[CVCItem alloc] initWithType:ItemTypeAutofillCVC] autorelease];
+ item.instructionsText =
+ @"This is a long text explaining to enter card details and what "
+ @"will happen afterwards. Is this long enough to span 3 lines?";
+ item.errorMessage = @"Some error";
+ item.CVCImageResourceID = IDR_CREDIT_CARD_CVC_HINT_AMEX;
+ item.showNewCardButton = YES;
+ item.showCVCInputError = YES;
+ return item;
+}
+
+- (CollectionViewItem*)statusItemVerifying {
+ StatusItem* item =
+ [[[StatusItem alloc] initWithType:ItemTypeAutofillStatus] autorelease];
+ item.text = @"Verifying…";
+ return item;
+}
+
+- (CollectionViewItem*)statusItemVerified {
+ StatusItem* item =
+ [[[StatusItem alloc] initWithType:ItemTypeAutofillStatus] autorelease];
+ item.state = StatusItemState::VERIFIED;
+ item.text = @"Verified!";
+ return item;
+}
+
+- (CollectionViewItem*)statusItemError {
+ StatusItem* item =
+ [[[StatusItem alloc] initWithType:ItemTypeAutofillStatus] autorelease];
+ item.state = StatusItemState::ERROR;
+ item.text = @"There was a really long error. We can't tell you more, but we "
+ @"will still display this long string.";
+ return item;
+}
+
+- (CollectionViewItem*)storageSwitchItem {
+ StorageSwitchItem* item = [[[StorageSwitchItem alloc]
+ initWithType:ItemTypeAutofillStorageSwitch] autorelease];
+ item.on = YES;
+ return item;
+}
+
+- (CollectionViewFooterItem*)shortFooterItem {
+ CollectionViewFooterItem* footerItem = [[[CollectionViewFooterItem alloc]
+ initWithType:ItemTypeFooter] autorelease];
+ footerItem.text = @"Hello";
+ return footerItem;
+}
+
+- (CollectionViewFooterItem*)longFooterItem {
+ CollectionViewFooterItem* footerItem = [[[CollectionViewFooterItem alloc]
+ initWithType:ItemTypeFooter] autorelease];
+ footerItem.text = @"Hello Hello Hello Hello Hello Hello Hello Hello Hello "
+ @"Hello Hello Hello Hello Hello Hello Hello Hello Hello "
+ @"Hello Hello Hello Hello Hello Hello Hello Hello Hello ";
+ footerItem.image = [UIImage imageNamed:@"app_icon_placeholder"];
+ return footerItem;
+}
+
+@end

Powered by Google App Engine
This is Rietveld 408576698