| 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 #import "ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.h" | 5 #import "ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.h" |
| 6 | 6 |
| 7 #import <UIKit/UIKit.h> | 7 #import <UIKit/UIKit.h> |
| 8 | 8 |
| 9 #import "base/mac/foundation_util.h" | 9 #import "base/mac/foundation_util.h" |
| 10 #include "components/autofill/core/browser/autofill_data_util.h" | 10 #include "components/autofill/core/browser/autofill_data_util.h" |
| 11 #include "components/autofill/core/browser/credit_card.h" | 11 #include "components/autofill/core/browser/credit_card.h" |
| 12 #include "components/grit/components_scaled_resources.h" | 12 #include "components/grit/components_scaled_resources.h" |
| 13 #import "ios/chrome/browser/payments/cells/accepted_payment_methods_item.h" |
| 13 #import "ios/chrome/browser/payments/cells/autofill_profile_item.h" | 14 #import "ios/chrome/browser/payments/cells/autofill_profile_item.h" |
| 14 #import "ios/chrome/browser/payments/cells/payments_text_item.h" | 15 #import "ios/chrome/browser/payments/cells/payments_text_item.h" |
| 15 #import "ios/chrome/browser/payments/cells/price_item.h" | 16 #import "ios/chrome/browser/payments/cells/price_item.h" |
| 16 #import "ios/chrome/browser/ui/authentication/account_control_item.h" | 17 #import "ios/chrome/browser/ui/authentication/account_control_item.h" |
| 17 #import "ios/chrome/browser/ui/authentication/signin_promo_item.h" | 18 #import "ios/chrome/browser/ui/authentication/signin_promo_item.h" |
| 18 #import "ios/chrome/browser/ui/authentication/signin_promo_view_configurator.h" | 19 #import "ios/chrome/browser/ui/authentication/signin_promo_view_configurator.h" |
| 19 #import "ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h" | 20 #import "ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h" |
| 20 #import "ios/chrome/browser/ui/autofill/cells/autofill_edit_item.h" | 21 #import "ios/chrome/browser/ui/autofill/cells/autofill_edit_item.h" |
| 21 #import "ios/chrome/browser/ui/autofill/cells/cvc_item.h" | 22 #import "ios/chrome/browser/ui/autofill/cells/cvc_item.h" |
| 22 #import "ios/chrome/browser/ui/autofill/cells/status_item.h" | 23 #import "ios/chrome/browser/ui/autofill/cells/status_item.h" |
| (...skipping 26 matching lines...) Expand all Loading... |
| 49 | 50 |
| 50 namespace { | 51 namespace { |
| 51 | 52 |
| 52 typedef NS_ENUM(NSInteger, SectionIdentifier) { | 53 typedef NS_ENUM(NSInteger, SectionIdentifier) { |
| 53 SectionIdentifierTextCell = kSectionIdentifierEnumZero, | 54 SectionIdentifierTextCell = kSectionIdentifierEnumZero, |
| 54 SectionIdentifierDetailCell, | 55 SectionIdentifierDetailCell, |
| 55 SectionIdentifierSwitchCell, | 56 SectionIdentifierSwitchCell, |
| 56 SectionIdentifierNativeAppCell, | 57 SectionIdentifierNativeAppCell, |
| 57 SectionIdentifierAutofill, | 58 SectionIdentifierAutofill, |
| 58 SectionIdentifierPayments, | 59 SectionIdentifierPayments, |
| 60 SectionIdentifierPaymentsNoBackground, |
| 59 SectionIdentifierAccountCell, | 61 SectionIdentifierAccountCell, |
| 60 SectionIdentifierAccountControlCell, | 62 SectionIdentifierAccountControlCell, |
| 61 SectionIdentifierFooters, | 63 SectionIdentifierFooters, |
| 62 SectionIdentifierContentSuggestionsCell, | 64 SectionIdentifierContentSuggestionsCell, |
| 63 }; | 65 }; |
| 64 | 66 |
| 65 typedef NS_ENUM(NSInteger, ItemType) { | 67 typedef NS_ENUM(NSInteger, ItemType) { |
| 66 ItemTypeTextCheckmark = kItemTypeEnumZero, | 68 ItemTypeTextCheckmark = kItemTypeEnumZero, |
| 67 ItemTypeTextDetail, | 69 ItemTypeTextDetail, |
| 68 ItemTypeText, | 70 ItemTypeText, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 90 ItemTypeAutofillStatus, | 92 ItemTypeAutofillStatus, |
| 91 ItemTypeAutofillStorageSwitch, | 93 ItemTypeAutofillStorageSwitch, |
| 92 ItemTypeAccountControlDynamicHeight, | 94 ItemTypeAccountControlDynamicHeight, |
| 93 ItemTypeFooter, | 95 ItemTypeFooter, |
| 94 ItemTypeContentSuggestions, | 96 ItemTypeContentSuggestions, |
| 95 }; | 97 }; |
| 96 | 98 |
| 97 // Image fixed horizontal size. | 99 // Image fixed horizontal size. |
| 98 const CGFloat kHorizontalImageFixedSize = 40; | 100 const CGFloat kHorizontalImageFixedSize = 40; |
| 99 | 101 |
| 102 // Credit Card icon size. |
| 103 const CGFloat kCardTypeIconDimension = 25.0; |
| 104 |
| 100 } // namespace | 105 } // namespace |
| 101 | 106 |
| 102 @implementation MaterialCellCatalogViewController | 107 @implementation MaterialCellCatalogViewController |
| 103 | 108 |
| 104 - (instancetype)init { | 109 - (instancetype)init { |
| 105 self = [super initWithStyle:CollectionViewControllerStyleAppBar]; | 110 self = [super initWithStyle:CollectionViewControllerStyleAppBar]; |
| 106 if (self) { | 111 if (self) { |
| 107 [self loadModel]; | 112 [self loadModel]; |
| 108 } | 113 } |
| 109 return self; | 114 return self; |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 251 toSectionWithIdentifier:SectionIdentifierAutofill]; | 256 toSectionWithIdentifier:SectionIdentifierAutofill]; |
| 252 [model addItem:[self statusItemError] | 257 [model addItem:[self statusItemError] |
| 253 toSectionWithIdentifier:SectionIdentifierAutofill]; | 258 toSectionWithIdentifier:SectionIdentifierAutofill]; |
| 254 [model addItem:[self storageSwitchItem] | 259 [model addItem:[self storageSwitchItem] |
| 255 toSectionWithIdentifier:SectionIdentifierAutofill]; | 260 toSectionWithIdentifier:SectionIdentifierAutofill]; |
| 256 | 261 |
| 257 // Payments cells. | 262 // Payments cells. |
| 258 [model addSectionWithIdentifier:SectionIdentifierPayments]; | 263 [model addSectionWithIdentifier:SectionIdentifierPayments]; |
| 259 [model addItem:[self paymentsItemWithWrappingTextandOptionalImage] | 264 [model addItem:[self paymentsItemWithWrappingTextandOptionalImage] |
| 260 toSectionWithIdentifier:SectionIdentifierPayments]; | 265 toSectionWithIdentifier:SectionIdentifierPayments]; |
| 266 |
| 261 PriceItem* priceItem1 = | 267 PriceItem* priceItem1 = |
| 262 [[PriceItem alloc] initWithType:ItemTypePaymentsSingleLine]; | 268 [[PriceItem alloc] initWithType:ItemTypePaymentsSingleLine]; |
| 263 priceItem1.item = @"Total"; | 269 priceItem1.item = @"Total"; |
| 264 priceItem1.notification = @"Updated"; | 270 priceItem1.notification = @"Updated"; |
| 265 priceItem1.price = @"USD $100.00"; | 271 priceItem1.price = @"USD $100.00"; |
| 266 [model addItem:priceItem1 toSectionWithIdentifier:SectionIdentifierPayments]; | 272 [model addItem:priceItem1 toSectionWithIdentifier:SectionIdentifierPayments]; |
| 267 PriceItem* priceItem2 = | 273 PriceItem* priceItem2 = |
| 268 [[PriceItem alloc] initWithType:ItemTypePaymentsSingleLine]; | 274 [[PriceItem alloc] initWithType:ItemTypePaymentsSingleLine]; |
| 269 priceItem2.item = @"Price label is long and should get clipped"; | 275 priceItem2.item = @"Price label is long and should get clipped"; |
| 270 priceItem2.notification = @"Updated"; | 276 priceItem2.notification = @"Updated"; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 299 profileItem2.notification = @"Some fields are missing"; | 305 profileItem2.notification = @"Some fields are missing"; |
| 300 [model addItem:profileItem2 | 306 [model addItem:profileItem2 |
| 301 toSectionWithIdentifier:SectionIdentifierPayments]; | 307 toSectionWithIdentifier:SectionIdentifierPayments]; |
| 302 AutofillProfileItem* profileItem3 = | 308 AutofillProfileItem* profileItem3 = |
| 303 [[AutofillProfileItem alloc] initWithType:ItemTypePaymentsDynamicHeight]; | 309 [[AutofillProfileItem alloc] initWithType:ItemTypePaymentsDynamicHeight]; |
| 304 profileItem3.address = @"All fields are optional"; | 310 profileItem3.address = @"All fields are optional"; |
| 305 profileItem3.email = @"foo@bar.com"; | 311 profileItem3.email = @"foo@bar.com"; |
| 306 [model addItem:profileItem3 | 312 [model addItem:profileItem3 |
| 307 toSectionWithIdentifier:SectionIdentifierPayments]; | 313 toSectionWithIdentifier:SectionIdentifierPayments]; |
| 308 | 314 |
| 315 // Payments cells with no background. |
| 316 [model addSectionWithIdentifier:SectionIdentifierPaymentsNoBackground]; |
| 317 [model addItem:[self acceptedPaymentMethodsItem] |
| 318 toSectionWithIdentifier:SectionIdentifierPaymentsNoBackground]; |
| 319 |
| 309 // Account cells. | 320 // Account cells. |
| 310 [model addSectionWithIdentifier:SectionIdentifierAccountCell]; | 321 [model addSectionWithIdentifier:SectionIdentifierAccountCell]; |
| 311 [model addItem:[self accountItemDetailWithError] | 322 [model addItem:[self accountItemDetailWithError] |
| 312 toSectionWithIdentifier:SectionIdentifierAccountCell]; | 323 toSectionWithIdentifier:SectionIdentifierAccountCell]; |
| 313 [model addItem:[self accountItemCheckMark] | 324 [model addItem:[self accountItemCheckMark] |
| 314 toSectionWithIdentifier:SectionIdentifierAccountCell]; | 325 toSectionWithIdentifier:SectionIdentifierAccountCell]; |
| 315 [model addItem:[self accountSignInItem] | 326 [model addItem:[self accountSignInItem] |
| 316 toSectionWithIdentifier:SectionIdentifierAccountCell]; | 327 toSectionWithIdentifier:SectionIdentifierAccountCell]; |
| 317 [model addItem:[self coldStateSigninPromoItem] | 328 [model addItem:[self coldStateSigninPromoItem] |
| 318 toSectionWithIdentifier:SectionIdentifierAccountCell]; | 329 toSectionWithIdentifier:SectionIdentifierAccountCell]; |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 400 default: | 411 default: |
| 401 return self.styler.cellStyle; | 412 return self.styler.cellStyle; |
| 402 } | 413 } |
| 403 } | 414 } |
| 404 | 415 |
| 405 - (BOOL)collectionView:(UICollectionView*)collectionView | 416 - (BOOL)collectionView:(UICollectionView*)collectionView |
| 406 shouldHideItemBackgroundAtIndexPath:(NSIndexPath*)indexPath { | 417 shouldHideItemBackgroundAtIndexPath:(NSIndexPath*)indexPath { |
| 407 NSInteger sectionIdentifier = | 418 NSInteger sectionIdentifier = |
| 408 [self.collectionViewModel sectionIdentifierForSection:indexPath.section]; | 419 [self.collectionViewModel sectionIdentifierForSection:indexPath.section]; |
| 409 switch (sectionIdentifier) { | 420 switch (sectionIdentifier) { |
| 421 case SectionIdentifierPaymentsNoBackground: |
| 410 case SectionIdentifierFooters: | 422 case SectionIdentifierFooters: |
| 411 // Display the Learn More footer without any background image or | 423 // Display the Learn More footer without any background image or |
| 412 // shadowing. | 424 // shadowing. |
| 413 return YES; | 425 return YES; |
| 414 default: | 426 default: |
| 415 return NO; | 427 return NO; |
| 416 } | 428 } |
| 417 } | 429 } |
| 418 | 430 |
| 419 - (BOOL)collectionView:(nonnull UICollectionView*)collectionView | 431 - (BOOL)collectionView:(nonnull UICollectionView*)collectionView |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 550 | 562 |
| 551 - (CollectionViewItem*)paymentsItemWithWrappingTextandOptionalImage { | 563 - (CollectionViewItem*)paymentsItemWithWrappingTextandOptionalImage { |
| 552 PaymentsTextItem* item = | 564 PaymentsTextItem* item = |
| 553 [[PaymentsTextItem alloc] initWithType:ItemTypePaymentsDynamicHeight]; | 565 [[PaymentsTextItem alloc] initWithType:ItemTypePaymentsDynamicHeight]; |
| 554 item.text = @"If you want to display a long text that wraps to the next line " | 566 item.text = @"If you want to display a long text that wraps to the next line " |
| 555 @"and may need to feature an image this is the cell to use."; | 567 @"and may need to feature an image this is the cell to use."; |
| 556 item.image = [UIImage imageNamed:@"app_icon_placeholder"]; | 568 item.image = [UIImage imageNamed:@"app_icon_placeholder"]; |
| 557 return item; | 569 return item; |
| 558 } | 570 } |
| 559 | 571 |
| 572 - (CollectionViewItem*)acceptedPaymentMethodsItem { |
| 573 AcceptedPaymentMethodsItem* item = [[AcceptedPaymentMethodsItem alloc] |
| 574 initWithType:ItemTypePaymentsDynamicHeight]; |
| 575 item.message = @"Cards accepted:"; |
| 576 |
| 577 NSMutableArray* cardTypeIcons = [NSMutableArray array]; |
| 578 const char* cardTypes[]{autofill::kVisaCard, |
| 579 autofill::kMasterCard, |
| 580 autofill::kAmericanExpressCard, |
| 581 autofill::kJCBCard, |
| 582 autofill::kDinersCard, |
| 583 autofill::kDiscoverCard}; |
| 584 for (const std::string& cardType : cardTypes) { |
| 585 autofill::data_util::PaymentRequestData data = |
| 586 autofill::data_util::GetPaymentRequestData(cardType); |
| 587 UIImage* cardTypeIcon = |
| 588 ResizeImage(NativeImage(data.icon_resource_id), |
| 589 CGSizeMake(kCardTypeIconDimension, kCardTypeIconDimension), |
| 590 ProjectionMode::kAspectFillNoClipping); |
| 591 [cardTypeIcons addObject:cardTypeIcon]; |
| 592 } |
| 593 item.methodTypeIcons = cardTypeIcons; |
| 594 return item; |
| 595 } |
| 596 |
| 560 - (CollectionViewItem*)autofillItemWithMainAndTrailingText { | 597 - (CollectionViewItem*)autofillItemWithMainAndTrailingText { |
| 561 AutofillDataItem* item = | 598 AutofillDataItem* item = |
| 562 [[AutofillDataItem alloc] initWithType:ItemTypeAutofillDynamicHeight]; | 599 [[AutofillDataItem alloc] initWithType:ItemTypeAutofillDynamicHeight]; |
| 563 item.text = @"Main Text"; | 600 item.text = @"Main Text"; |
| 564 item.trailingDetailText = @"Trailing Detail Text"; | 601 item.trailingDetailText = @"Trailing Detail Text"; |
| 565 item.accessoryType = MDCCollectionViewCellAccessoryNone; | 602 item.accessoryType = MDCCollectionViewCellAccessoryNone; |
| 566 return item; | 603 return item; |
| 567 } | 604 } |
| 568 | 605 |
| 569 - (CollectionViewItem*)autofillItemWithLeadingTextOnly { | 606 - (CollectionViewItem*)autofillItemWithLeadingTextOnly { |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 703 - (ContentSuggestionsFooterItem*)contentSuggestionsFooterItem { | 740 - (ContentSuggestionsFooterItem*)contentSuggestionsFooterItem { |
| 704 ContentSuggestionsFooterItem* footerItem = | 741 ContentSuggestionsFooterItem* footerItem = |
| 705 [[ContentSuggestionsFooterItem alloc] | 742 [[ContentSuggestionsFooterItem alloc] |
| 706 initWithType:ItemTypeContentSuggestions | 743 initWithType:ItemTypeContentSuggestions |
| 707 title:@"Footer title" | 744 title:@"Footer title" |
| 708 block:nil]; | 745 block:nil]; |
| 709 return footerItem; | 746 return footerItem; |
| 710 } | 747 } |
| 711 | 748 |
| 712 @end | 749 @end |
| OLD | NEW |