Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ios/chrome/browser/ui/authentication/signin_confirmation_view_controll er.h" | 5 #include "ios/chrome/browser/ui/authentication/signin_confirmation_view_controll er.h" |
| 6 | 6 |
| 7 #import "base/ios/weak_nsobject.h" | |
| 8 #import "base/mac/foundation_util.h" | 7 #import "base/mac/foundation_util.h" |
| 9 #import "base/mac/scoped_nsobject.h" | |
| 10 #include "base/metrics/user_metrics.h" | 8 #include "base/metrics/user_metrics.h" |
| 11 #import "base/strings/sys_string_conversions.h" | 9 #import "base/strings/sys_string_conversions.h" |
| 12 #include "components/google/core/browser/google_util.h" | 10 #include "components/google/core/browser/google_util.h" |
| 13 #include "ios/chrome/browser/application_context.h" | 11 #include "ios/chrome/browser/application_context.h" |
| 14 #include "ios/chrome/browser/signin/chrome_identity_service_observer_bridge.h" | 12 #include "ios/chrome/browser/signin/chrome_identity_service_observer_bridge.h" |
| 15 #import "ios/chrome/browser/ui/authentication/account_control_item.h" | 13 #import "ios/chrome/browser/ui/authentication/account_control_item.h" |
| 16 #import "ios/chrome/browser/ui/collection_view/cells/MDCCollectionViewCell+Chrom e.h" | 14 #import "ios/chrome/browser/ui/collection_view/cells/MDCCollectionViewCell+Chrom e.h" |
| 17 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_footer_item .h" | 15 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_footer_item .h" |
| 18 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h" | 16 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h" |
| 19 #import "ios/chrome/browser/ui/uikit_ui_util.h" | 17 #import "ios/chrome/browser/ui/uikit_ui_util.h" |
| 20 #import "ios/chrome/common/string_util.h" | 18 #import "ios/chrome/common/string_util.h" |
| 21 #include "ios/chrome/grit/ios_chromium_strings.h" | 19 #include "ios/chrome/grit/ios_chromium_strings.h" |
| 22 #include "ios/chrome/grit/ios_strings.h" | 20 #include "ios/chrome/grit/ios_strings.h" |
| 23 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h" | 21 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h" |
| 24 #include "ios/public/provider/chrome/browser/images/branded_image_provider.h" | 22 #include "ios/public/provider/chrome/browser/images/branded_image_provider.h" |
| 25 #import "ios/public/provider/chrome/browser/signin/chrome_identity.h" | 23 #import "ios/public/provider/chrome/browser/signin/chrome_identity.h" |
| 26 #import "ios/public/provider/chrome/browser/signin/chrome_identity_service.h" | 24 #import "ios/public/provider/chrome/browser/signin/chrome_identity_service.h" |
| 27 #include "ios/public/provider/chrome/browser/signin/signin_resources_provider.h" | 25 #include "ios/public/provider/chrome/browser/signin/signin_resources_provider.h" |
| 28 #import "ios/third_party/material_components_ios/src/components/AppBar/src/Mater ialAppBar.h" | 26 #import "ios/third_party/material_components_ios/src/components/AppBar/src/Mater ialAppBar.h" |
| 29 #import "ios/third_party/material_components_ios/src/components/Palettes/src/Mat erialPalettes.h" | 27 #import "ios/third_party/material_components_ios/src/components/Palettes/src/Mat erialPalettes.h" |
| 30 #import "ios/third_party/material_components_ios/src/components/Typography/src/M aterialTypography.h" | 28 #import "ios/third_party/material_components_ios/src/components/Typography/src/M aterialTypography.h" |
| 31 #import "ui/base/l10n/l10n_util.h" | 29 #import "ui/base/l10n/l10n_util.h" |
| 32 #include "url/gurl.h" | 30 #include "url/gurl.h" |
| 33 | 31 |
| 32 #if !defined(__has_feature) || !__has_feature(objc_arc) | |
| 33 #error "This file requires ARC support." | |
| 34 #endif | |
| 35 | |
| 34 namespace { | 36 namespace { |
| 35 const CGFloat kAccountImageDimension = 64.; | 37 const CGFloat kAccountImageDimension = 64.; |
| 36 const CGFloat kHeaderViewMinHeight = 170.; | 38 const CGFloat kHeaderViewMinHeight = 170.; |
| 37 const CGFloat kHeaderViewHeightMultiplier = 0.33; | 39 const CGFloat kHeaderViewHeightMultiplier = 0.33; |
| 38 const CGFloat kContentViewBottomInset = 40.; | 40 const CGFloat kContentViewBottomInset = 40.; |
| 39 // Leading separator inset. | 41 // Leading separator inset. |
| 40 const CGFloat kLeadingSeparatorInset = 30.; | 42 const CGFloat kLeadingSeparatorInset = 30.; |
| 41 // Trailing separator inset. | 43 // Trailing separator inset. |
| 42 const CGFloat kTrailingSeparatorInset = 16.; | 44 const CGFloat kTrailingSeparatorInset = 16.; |
| 43 | 45 |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 68 ItemTypeGoogleServices, | 70 ItemTypeGoogleServices, |
| 69 ItemTypeFooter, | 71 ItemTypeFooter, |
| 70 }; | 72 }; |
| 71 } | 73 } |
| 72 | 74 |
| 73 #pragma mark - SigninConfirmationViewController | 75 #pragma mark - SigninConfirmationViewController |
| 74 | 76 |
| 75 @interface SigninConfirmationViewController ()< | 77 @interface SigninConfirmationViewController ()< |
| 76 ChromeIdentityServiceObserver, | 78 ChromeIdentityServiceObserver, |
| 77 CollectionViewFooterLinkDelegate> { | 79 CollectionViewFooterLinkDelegate> { |
| 78 base::scoped_nsobject<ChromeIdentity> _identity; | 80 ChromeIdentity* _identity; |
| 79 std::unique_ptr<ChromeIdentityServiceObserverBridge> _identityServiceObserver; | 81 std::unique_ptr<ChromeIdentityServiceObserverBridge> _identityServiceObserver; |
| 80 base::WeakNSObject<UIImage> _oldImage; | 82 __weak UIImage* _oldImage; |
| 81 base::scoped_nsobject<UIImageView> _imageView; | 83 UIImageView* _imageView; |
| 82 base::scoped_nsobject<UILabel> _titleLabel; | 84 UILabel* _titleLabel; |
| 83 base::scoped_nsobject<UILabel> _emailLabel; | 85 UILabel* _emailLabel; |
| 84 } | 86 } |
| 85 @end | 87 @end |
| 86 | 88 |
| 87 @implementation SigninConfirmationViewController | 89 @implementation SigninConfirmationViewController |
| 88 | 90 |
| 89 @synthesize delegate; | 91 @synthesize delegate; |
| 90 | 92 |
| 91 - (instancetype)initWithIdentity:(ChromeIdentity*)identity { | 93 - (instancetype)initWithIdentity:(ChromeIdentity*)identity { |
| 92 self = [super initWithStyle:CollectionViewControllerStyleAppBar]; | 94 self = [super initWithStyle:CollectionViewControllerStyleAppBar]; |
| 93 if (self) { | 95 if (self) { |
| 94 _identity.reset([identity retain]); | 96 _identity = identity; |
| 95 _identityServiceObserver.reset( | 97 _identityServiceObserver.reset( |
| 96 new ChromeIdentityServiceObserverBridge(self)); | 98 new ChromeIdentityServiceObserverBridge(self)); |
| 97 } | 99 } |
| 98 return self; | 100 return self; |
| 99 } | 101 } |
| 100 | 102 |
| 101 - (void)scrollToBottom { | 103 - (void)scrollToBottom { |
| 102 CGPoint bottomOffset = CGPointMake( | 104 CGPoint bottomOffset = CGPointMake( |
| 103 0, self.collectionView.contentSize.height - | 105 0, self.collectionView.contentSize.height - |
| 104 self.collectionView.bounds.size.height + kContentViewBottomInset); | 106 self.collectionView.bounds.size.height + kContentViewBottomInset); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 138 .collectionViewContentSize.height]; | 140 .collectionViewContentSize.height]; |
| 139 if (!didSend && [self isMovingToParentViewController]) { | 141 if (!didSend && [self isMovingToParentViewController]) { |
| 140 // The confirmation screen just appeared and there wasn't enough space to | 142 // The confirmation screen just appeared and there wasn't enough space to |
| 141 // show the full screen (since the scroll hasn't reach the botton). This | 143 // show the full screen (since the scroll hasn't reach the botton). This |
| 142 // means the "More" button is actually necessary. | 144 // means the "More" button is actually necessary. |
| 143 base::RecordAction(base::UserMetricsAction("Signin_MoreButton_Shown")); | 145 base::RecordAction(base::UserMetricsAction("Signin_MoreButton_Shown")); |
| 144 } | 146 } |
| 145 } | 147 } |
| 146 | 148 |
| 147 - (UIView*)contentViewWithFrame:(CGRect)frame { | 149 - (UIView*)contentViewWithFrame:(CGRect)frame { |
| 148 base::scoped_nsobject<UIView> contentView( | 150 UIView* contentView = [[UIView alloc] initWithFrame:frame]; |
| 149 [[UIView alloc] initWithFrame:frame]); | 151 contentView.autoresizingMask = |
| 150 contentView.get().autoresizingMask = | |
| 151 (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); | 152 (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); |
| 152 contentView.get().clipsToBounds = YES; | 153 contentView.clipsToBounds = YES; |
| 153 _imageView.reset([[UIImageView alloc] init]); | 154 _imageView = [[UIImageView alloc] init]; |
| 154 _imageView.get().translatesAutoresizingMaskIntoConstraints = NO; | 155 _imageView.translatesAutoresizingMaskIntoConstraints = NO; |
| 155 | 156 |
| 156 _titleLabel.reset([[UILabel alloc] initWithFrame:CGRectZero]); | 157 _titleLabel = [[UILabel alloc] initWithFrame:CGRectZero]; |
| 157 _titleLabel.get().textColor = [[MDCPalette greyPalette] tint900]; | 158 _titleLabel.textColor = [[MDCPalette greyPalette] tint900]; |
| 158 _titleLabel.get().font = [MDCTypography headlineFont]; | 159 _titleLabel.font = [MDCTypography headlineFont]; |
| 159 _titleLabel.get().translatesAutoresizingMaskIntoConstraints = NO; | 160 _titleLabel.translatesAutoresizingMaskIntoConstraints = NO; |
| 160 | 161 |
| 161 _emailLabel.reset([[UILabel alloc] initWithFrame:CGRectZero]); | 162 _emailLabel = [[UILabel alloc] initWithFrame:CGRectZero]; |
| 162 _emailLabel.get().textColor = [[MDCPalette greyPalette] tint700]; | 163 _emailLabel.textColor = [[MDCPalette greyPalette] tint700]; |
| 163 _emailLabel.get().font = [MDCTypography body1Font]; | 164 _emailLabel.font = [MDCTypography body1Font]; |
| 164 _emailLabel.get().translatesAutoresizingMaskIntoConstraints = NO; | 165 _emailLabel.translatesAutoresizingMaskIntoConstraints = NO; |
| 165 | 166 |
| 166 [self updateViewWithIdentity:_identity]; | 167 [self updateViewWithIdentity:_identity]; |
| 167 | 168 |
| 168 base::scoped_nsobject<UIView> divider( | 169 UIView* divider = [[UIView alloc] initWithFrame:CGRectZero]; |
| 169 [[UIView alloc] initWithFrame:CGRectZero]); | 170 divider.backgroundColor = [[MDCPalette greyPalette] tint300]; |
| 170 divider.get().backgroundColor = [[MDCPalette greyPalette] tint300]; | 171 divider.translatesAutoresizingMaskIntoConstraints = NO; |
| 171 divider.get().translatesAutoresizingMaskIntoConstraints = NO; | |
| 172 | 172 |
| 173 base::scoped_nsobject<UILayoutGuide> layoutGuide1( | 173 UILayoutGuide* layoutGuide1 = [[UILayoutGuide alloc] init]; |
| 174 [[UILayoutGuide alloc] init]); | 174 UILayoutGuide* layoutGuide2 = [[UILayoutGuide alloc] init]; |
| 175 base::scoped_nsobject<UILayoutGuide> layoutGuide2( | |
| 176 [[UILayoutGuide alloc] init]); | |
| 177 | 175 |
| 178 [contentView addSubview:_imageView]; | 176 [contentView addSubview:_imageView]; |
| 179 [contentView addSubview:_titleLabel]; | 177 [contentView addSubview:_titleLabel]; |
| 180 [contentView addSubview:_emailLabel]; | 178 [contentView addSubview:_emailLabel]; |
| 181 [contentView addSubview:divider]; | 179 [contentView addSubview:divider]; |
| 182 [contentView addLayoutGuide:layoutGuide1]; | 180 [contentView addLayoutGuide:layoutGuide1]; |
| 183 [contentView addLayoutGuide:layoutGuide2]; | 181 [contentView addLayoutGuide:layoutGuide2]; |
| 184 | 182 |
| 185 NSDictionary* views = @{ | 183 NSDictionary* views = @{ |
| 186 @"image" : _imageView, | 184 @"image" : _imageView, |
| 187 @"title" : _titleLabel, | 185 @"title" : _titleLabel, |
| 188 @"email" : _emailLabel, | 186 @"email" : _emailLabel, |
| 189 @"divider" : divider, | 187 @"divider" : divider, |
| 190 @"v1" : layoutGuide1, | 188 @"v1" : layoutGuide1, |
| 191 @"v2" : layoutGuide2 | 189 @"v2" : layoutGuide2 |
| 192 }; | 190 }; |
| 193 NSArray* constraints = @[ | 191 NSArray* constraints = @[ |
| 194 @"V:[image]-(24)-[title]-(8)-[email]-(16)-[divider(==1)]|", | 192 @"V:[image]-(24)-[title]-(8)-[email]-(16)-[divider(==1)]|", |
| 195 @"H:|[v1][image]", | 193 @"H:|[v1][image]", |
| 196 @"H:|[v1(16)][title(<=440)][v2(>=v1)]|", | 194 @"H:|[v1(16)][title(<=440)][v2(>=v1)]|", |
| 197 @"H:|[v1][email]", | 195 @"H:|[v1][email]", |
| 198 @"H:|[divider]|", | 196 @"H:|[divider]|", |
| 199 ]; | 197 ]; |
| 200 ApplyVisualConstraints(constraints, views); | 198 ApplyVisualConstraints(constraints, views); |
| 201 return contentView.autorelease(); | 199 return contentView = nil; |
|
msarda
2017/06/12 12:49:13
I think this is wrong (does this compile?). Should
marq (ping after 24h)
2017/06/12 14:20:40
Fixed. Yes, it compiles, since = returns the assig
| |
| 202 } | 200 } |
| 203 | 201 |
| 204 - (void)viewWillLayoutSubviews { | 202 - (void)viewWillLayoutSubviews { |
| 205 CGSize viewSize = self.view.bounds.size; | 203 CGSize viewSize = self.view.bounds.size; |
| 206 MDCFlexibleHeaderView* headerView = | 204 MDCFlexibleHeaderView* headerView = |
| 207 self.appBar.headerViewController.headerView; | 205 self.appBar.headerViewController.headerView; |
| 208 headerView.maximumHeight = | 206 headerView.maximumHeight = |
| 209 MAX(kHeaderViewMinHeight, kHeaderViewHeightMultiplier * viewSize.height); | 207 MAX(kHeaderViewMinHeight, kHeaderViewHeightMultiplier * viewSize.height); |
| 210 } | 208 } |
| 211 | 209 |
| 212 - (void)updateViewWithIdentity:(ChromeIdentity*)identity { | 210 - (void)updateViewWithIdentity:(ChromeIdentity*)identity { |
| 213 UIImage* identityImage = GetImageForIdentity(identity); | 211 UIImage* identityImage = GetImageForIdentity(identity); |
| 214 if (_oldImage.get() != identityImage) { | 212 if (_oldImage != identityImage) { |
| 215 _oldImage.reset(identityImage); | 213 _oldImage = identityImage; |
| 216 identityImage = | 214 identityImage = |
| 217 ResizeImage(identityImage, | 215 ResizeImage(identityImage, |
| 218 CGSizeMake(kAccountImageDimension, kAccountImageDimension), | 216 CGSizeMake(kAccountImageDimension, kAccountImageDimension), |
| 219 ProjectionMode::kAspectFit); | 217 ProjectionMode::kAspectFit); |
| 220 identityImage = | 218 identityImage = |
| 221 CircularImageFromImage(identityImage, kAccountImageDimension); | 219 CircularImageFromImage(identityImage, kAccountImageDimension); |
| 222 _imageView.get().image = identityImage; | 220 _imageView.image = identityImage; |
| 223 } | 221 } |
| 224 | 222 |
| 225 _titleLabel.get().text = l10n_util::GetNSStringF( | 223 _titleLabel.text = l10n_util::GetNSStringF( |
| 226 IDS_IOS_ACCOUNT_CONSISTENCY_CONFIRMATION_TITLE, | 224 IDS_IOS_ACCOUNT_CONSISTENCY_CONFIRMATION_TITLE, |
| 227 base::SysNSStringToUTF16([identity userFullName])); | 225 base::SysNSStringToUTF16([identity userFullName])); |
| 228 | 226 |
| 229 _emailLabel.get().text = [identity userEmail]; | 227 _emailLabel.text = [identity userEmail]; |
| 230 } | 228 } |
| 231 | 229 |
| 232 #pragma mark - Model | 230 #pragma mark - Model |
| 233 | 231 |
| 234 - (void)loadModel { | 232 - (void)loadModel { |
| 235 [super loadModel]; | 233 [super loadModel]; |
| 236 CollectionViewModel* model = self.collectionViewModel; | 234 CollectionViewModel* model = self.collectionViewModel; |
| 237 | 235 |
| 238 [model addSectionWithIdentifier:SectionIdentifierInfo]; | 236 [model addSectionWithIdentifier:SectionIdentifierInfo]; |
| 239 [model addItem:[self syncItem] toSectionWithIdentifier:SectionIdentifierInfo]; | 237 [model addItem:[self syncItem] toSectionWithIdentifier:SectionIdentifierInfo]; |
| 240 [model addItem:[self googleServicesItem] | 238 [model addItem:[self googleServicesItem] |
| 241 toSectionWithIdentifier:SectionIdentifierInfo]; | 239 toSectionWithIdentifier:SectionIdentifierInfo]; |
| 242 [model addItem:[self openSettingsItem] | 240 [model addItem:[self openSettingsItem] |
| 243 toSectionWithIdentifier:SectionIdentifierInfo]; | 241 toSectionWithIdentifier:SectionIdentifierInfo]; |
| 244 } | 242 } |
| 245 | 243 |
| 246 #pragma mark - Model items | 244 #pragma mark - Model items |
| 247 | 245 |
| 248 - (CollectionViewItem*)syncItem { | 246 - (CollectionViewItem*)syncItem { |
| 249 AccountControlItem* item = | 247 AccountControlItem* item = |
| 250 [[[AccountControlItem alloc] initWithType:ItemTypeSync] autorelease]; | 248 [[AccountControlItem alloc] initWithType:ItemTypeSync]; |
| 251 item.text = l10n_util::GetNSString( | 249 item.text = l10n_util::GetNSString( |
| 252 IDS_IOS_ACCOUNT_CONSISTENCY_CONFIRMATION_SYNC_TITLE); | 250 IDS_IOS_ACCOUNT_CONSISTENCY_CONFIRMATION_SYNC_TITLE); |
| 253 item.detailText = l10n_util::GetNSString( | 251 item.detailText = l10n_util::GetNSString( |
| 254 IDS_IOS_ACCOUNT_CONSISTENCY_CONFIRMATION_SYNC_DESCRIPTION); | 252 IDS_IOS_ACCOUNT_CONSISTENCY_CONFIRMATION_SYNC_DESCRIPTION); |
| 255 item.image = ios::GetChromeBrowserProvider() | 253 item.image = ios::GetChromeBrowserProvider() |
| 256 ->GetBrandedImageProvider() | 254 ->GetBrandedImageProvider() |
| 257 ->GetSigninConfirmationSyncSettingsImage(); | 255 ->GetSigninConfirmationSyncSettingsImage(); |
| 258 return item; | 256 return item; |
| 259 } | 257 } |
| 260 | 258 |
| 261 - (CollectionViewItem*)googleServicesItem { | 259 - (CollectionViewItem*)googleServicesItem { |
| 262 AccountControlItem* item = [[[AccountControlItem alloc] | 260 AccountControlItem* item = |
| 263 initWithType:ItemTypeGoogleServices] autorelease]; | 261 [[AccountControlItem alloc] initWithType:ItemTypeGoogleServices]; |
| 264 item.text = l10n_util::GetNSString( | 262 item.text = l10n_util::GetNSString( |
| 265 IDS_IOS_ACCOUNT_CONSISTENCY_CONFIRMATION_SERVICES_TITLE); | 263 IDS_IOS_ACCOUNT_CONSISTENCY_CONFIRMATION_SERVICES_TITLE); |
| 266 item.detailText = l10n_util::GetNSString( | 264 item.detailText = l10n_util::GetNSString( |
| 267 IDS_IOS_ACCOUNT_CONSISTENCY_CONFIRMATION_SERVICES_DESCRIPTION); | 265 IDS_IOS_ACCOUNT_CONSISTENCY_CONFIRMATION_SERVICES_DESCRIPTION); |
| 268 item.image = ios::GetChromeBrowserProvider() | 266 item.image = ios::GetChromeBrowserProvider() |
| 269 ->GetBrandedImageProvider() | 267 ->GetBrandedImageProvider() |
| 270 ->GetSigninConfirmationPersonalizeServicesImage(); | 268 ->GetSigninConfirmationPersonalizeServicesImage(); |
| 271 return item; | 269 return item; |
| 272 } | 270 } |
| 273 | 271 |
| 274 - (CollectionViewItem*)openSettingsItem { | 272 - (CollectionViewItem*)openSettingsItem { |
| 275 CollectionViewFooterItem* item = [[[CollectionViewFooterItem alloc] | 273 CollectionViewFooterItem* item = |
| 276 initWithType:ItemTypeFooter] autorelease]; | 274 [[CollectionViewFooterItem alloc] initWithType:ItemTypeFooter]; |
| 277 item.text = l10n_util::GetNSString( | 275 item.text = l10n_util::GetNSString( |
| 278 IDS_IOS_ACCOUNT_CONSISTENCY_CONFIRMATION_OPEN_SETTINGS); | 276 IDS_IOS_ACCOUNT_CONSISTENCY_CONFIRMATION_OPEN_SETTINGS); |
| 279 item.linkURL = google_util::AppendGoogleLocaleParam( | 277 item.linkURL = google_util::AppendGoogleLocaleParam( |
| 280 GURL("internal://settings-sync"), | 278 GURL("internal://settings-sync"), |
| 281 GetApplicationContext()->GetApplicationLocale()); | 279 GetApplicationContext()->GetApplicationLocale()); |
| 282 item.linkDelegate = self; | 280 item.linkDelegate = self; |
| 283 return item; | 281 return item; |
| 284 } | 282 } |
| 285 | 283 |
| 286 #pragma mark - Helpers | 284 #pragma mark - Helpers |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 336 kTrailingSeparatorInset); | 334 kTrailingSeparatorInset); |
| 337 break; | 335 break; |
| 338 case ItemTypeGoogleServices: | 336 case ItemTypeGoogleServices: |
| 339 cell.shouldHideSeparator = YES; | 337 cell.shouldHideSeparator = YES; |
| 340 break; | 338 break; |
| 341 case ItemTypeFooter: { | 339 case ItemTypeFooter: { |
| 342 CollectionViewFooterCell* footerCell = | 340 CollectionViewFooterCell* footerCell = |
| 343 base::mac::ObjCCastStrict<CollectionViewFooterCell>(cell); | 341 base::mac::ObjCCastStrict<CollectionViewFooterCell>(cell); |
| 344 // TODO(crbug.com/664648): Must use atomic text formatting operation due | 342 // TODO(crbug.com/664648): Must use atomic text formatting operation due |
| 345 // to LabelLinkController bug. | 343 // to LabelLinkController bug. |
| 346 footerCell.textLabel.attributedText = [[[NSAttributedString alloc] | 344 footerCell.textLabel.attributedText = [[NSAttributedString alloc] |
| 347 initWithString:footerCell.textLabel.text | 345 initWithString:footerCell.textLabel.text |
| 348 attributes:@{ | 346 attributes:@{ |
| 349 NSFontAttributeName : [MDCTypography body1Font], | 347 NSFontAttributeName : [MDCTypography body1Font], |
| 350 NSForegroundColorAttributeName : | 348 NSForegroundColorAttributeName : |
| 351 [[MDCPalette greyPalette] tint700] | 349 [[MDCPalette greyPalette] tint700] |
| 352 }] autorelease]; | 350 }]; |
| 353 footerCell.horizontalPadding = 16; | 351 footerCell.horizontalPadding = 16; |
| 354 break; | 352 break; |
| 355 } | 353 } |
| 356 | 354 |
| 357 default: | 355 default: |
| 358 break; | 356 break; |
| 359 } | 357 } |
| 360 return cell; | 358 return cell; |
| 361 } | 359 } |
| 362 | 360 |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 384 return YES; | 382 return YES; |
| 385 } | 383 } |
| 386 | 384 |
| 387 #pragma mark - CollectionViewFooterLinkDelegate | 385 #pragma mark - CollectionViewFooterLinkDelegate |
| 388 | 386 |
| 389 - (void)cell:(CollectionViewFooterCell*)cell didTapLinkURL:(GURL)URL { | 387 - (void)cell:(CollectionViewFooterCell*)cell didTapLinkURL:(GURL)URL { |
| 390 [[self delegate] signinConfirmationControllerDidTapSettingsLink:self]; | 388 [[self delegate] signinConfirmationControllerDidTapSettingsLink:self]; |
| 391 } | 389 } |
| 392 | 390 |
| 393 @end | 391 @end |
| OLD | NEW |