Chromium Code Reviews| Index: ios/chrome/browser/payments/cells/autofill_profile_item.mm |
| diff --git a/ios/chrome/browser/payments/cells/shipping_address_item.mm b/ios/chrome/browser/payments/cells/autofill_profile_item.mm |
| similarity index 57% |
| rename from ios/chrome/browser/payments/cells/shipping_address_item.mm |
| rename to ios/chrome/browser/payments/cells/autofill_profile_item.mm |
| index 0d756e1d028edda398134dae0ebf69c47d8e9389..ebd9dc6a456b3a2b788bc8847a7c1d73cf6b7881 100644 |
| --- a/ios/chrome/browser/payments/cells/shipping_address_item.mm |
| +++ b/ios/chrome/browser/payments/cells/autofill_profile_item.mm |
| @@ -1,10 +1,11 @@ |
| -// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Copyright 2017 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/payments/cells/shipping_address_item.h" |
| +#import "ios/chrome/browser/payments/cells/autofill_profile_item.h" |
| -#import "ios/third_party/material_components_ios/src/components/Palettes/src/MaterialPalettes.h" |
| +#import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h" |
| +#import "ios/chrome/browser/ui/uikit_ui_util.h" |
| #import "ios/third_party/material_components_ios/src/components/Typography/src/MaterialTypography.h" |
| #if !defined(__has_feature) || !__has_feature(objc_arc) |
| @@ -22,11 +23,13 @@ const CGFloat kVerticalPadding = 16; |
| const CGFloat kVerticalSpacingBetweenLabels = 8; |
| } // namespace |
| -@implementation ShippingAddressItem |
| +@implementation AutofillProfileItem |
| @synthesize name = _name; |
| @synthesize address = _address; |
| @synthesize phoneNumber = _phoneNumber; |
| +@synthesize email = _email; |
| +@synthesize notification = _notification; |
| @synthesize accessoryType = _accessoryType; |
| #pragma mark CollectionViewItem |
| @@ -34,26 +37,32 @@ const CGFloat kVerticalSpacingBetweenLabels = 8; |
| - (instancetype)initWithType:(NSInteger)type { |
| self = [super initWithType:type]; |
| if (self) { |
| - self.cellClass = [ShippingAddressCell class]; |
| + self.cellClass = [AutofillProfileCell class]; |
| } |
| return self; |
| } |
| -- (void)configureCell:(ShippingAddressCell*)cell { |
| +- (void)configureCell:(AutofillProfileCell*)cell { |
| [super configureCell:cell]; |
| cell.accessoryType = self.accessoryType; |
| cell.nameLabel.text = self.name; |
| cell.addressLabel.text = self.address; |
| cell.phoneNumberLabel.text = self.phoneNumber; |
| + cell.emailLabel.text = self.email; |
| + cell.notificationLabel.text = self.notification; |
| } |
| @end |
| -@implementation ShippingAddressCell |
| +@implementation AutofillProfileCell { |
| + UIStackView* _stackView; |
| +} |
| @synthesize nameLabel = _nameLabel; |
| @synthesize addressLabel = _addressLabel; |
| @synthesize phoneNumberLabel = _phoneNumberLabel; |
| +@synthesize emailLabel = _emailLabel; |
| +@synthesize notificationLabel = _notificationLabel; |
| - (instancetype)initWithFrame:(CGRect)frame { |
| self = [super initWithFrame:frame]; |
| @@ -71,17 +80,31 @@ const CGFloat kVerticalSpacingBetweenLabels = 8; |
| UIView* contentView = self.contentView; |
| contentView.clipsToBounds = YES; |
| + _stackView = [[UIStackView alloc] initWithArrangedSubviews:@[]]; |
| + _stackView.axis = UILayoutConstraintAxisVertical; |
| + _stackView.layoutMarginsRelativeArrangement = YES; |
| + _stackView.layoutMargins = |
| + UIEdgeInsetsMake(kVerticalPadding, kHorizontalPadding, kVerticalPadding, |
| + kHorizontalPadding); |
| + _stackView.alignment = UIStackViewAlignmentLeading; |
| + _stackView.spacing = kVerticalSpacingBetweenLabels; |
| + _stackView.translatesAutoresizingMaskIntoConstraints = NO; |
| + [contentView addSubview:_stackView]; |
| + |
| _nameLabel = [[UILabel alloc] init]; |
| - _nameLabel.translatesAutoresizingMaskIntoConstraints = NO; |
| - [contentView addSubview:_nameLabel]; |
| + [_stackView addSubview:_nameLabel]; |
| _addressLabel = [[UILabel alloc] init]; |
| - _addressLabel.translatesAutoresizingMaskIntoConstraints = NO; |
| - [contentView addSubview:_addressLabel]; |
| + [_stackView addSubview:_addressLabel]; |
| _phoneNumberLabel = [[UILabel alloc] init]; |
| - _phoneNumberLabel.translatesAutoresizingMaskIntoConstraints = NO; |
| - [contentView addSubview:_phoneNumberLabel]; |
| + [_stackView addSubview:_phoneNumberLabel]; |
| + |
| + _emailLabel = [[UILabel alloc] init]; |
| + [_stackView addSubview:_emailLabel]; |
| + |
| + _notificationLabel = [[UILabel alloc] init]; |
| + [_stackView addSubview:_notificationLabel]; |
| } |
| // Set default font and text colors for labels. |
| @@ -98,43 +121,17 @@ const CGFloat kVerticalSpacingBetweenLabels = 8; |
| _phoneNumberLabel.font = [MDCTypography body1Font]; |
| _phoneNumberLabel.textColor = [[MDCPalette greyPalette] tint900]; |
| + |
| + _emailLabel.font = [MDCTypography body1Font]; |
| + _emailLabel.textColor = [[MDCPalette greyPalette] tint900]; |
| + |
| + _notificationLabel.font = [MDCTypography body1Font]; |
| + _notificationLabel.textColor = [[MDCPalette cr_bluePalette] tint500]; |
| } |
| // Set constraints on subviews. |
| - (void)setViewConstraints { |
| - UIView* contentView = self.contentView; |
| - |
| - [NSLayoutConstraint activateConstraints:@[ |
| - // Set leading anchors. |
| - [_nameLabel.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor |
| - constant:kHorizontalPadding], |
| - [_addressLabel.leadingAnchor |
| - constraintEqualToAnchor:_nameLabel.leadingAnchor], |
| - [_phoneNumberLabel.leadingAnchor |
| - constraintEqualToAnchor:_addressLabel.leadingAnchor], |
| - |
| - // Set vertical anchors. |
| - [_nameLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor |
| - constant:kVerticalPadding], |
| - [_addressLabel.topAnchor |
| - constraintEqualToAnchor:_nameLabel.bottomAnchor |
| - constant:kVerticalSpacingBetweenLabels], |
| - [_addressLabel.bottomAnchor |
| - constraintEqualToAnchor:_phoneNumberLabel.topAnchor |
| - constant:-kVerticalSpacingBetweenLabels], |
| - [_phoneNumberLabel.bottomAnchor |
| - constraintEqualToAnchor:contentView.bottomAnchor |
| - constant:-kVerticalPadding], |
| - |
| - // Set trailing anchors. |
| - [_nameLabel.trailingAnchor |
| - constraintLessThanOrEqualToAnchor:contentView.trailingAnchor |
| - constant:-kHorizontalPadding], |
| - [_addressLabel.trailingAnchor |
| - constraintLessThanOrEqualToAnchor:_nameLabel.trailingAnchor], |
| - [_phoneNumberLabel.trailingAnchor |
| - constraintLessThanOrEqualToAnchor:_addressLabel.trailingAnchor], |
| - ]]; |
| + AddSameSizeConstraint(self.contentView, _stackView); |
| } |
| #pragma mark - UIView |
| @@ -142,6 +139,31 @@ const CGFloat kVerticalSpacingBetweenLabels = 8; |
| // Implement -layoutSubviews as per instructions in documentation for |
| // +[MDCCollectionViewCell cr_preferredHeightForWidth:forItem:]. |
| - (void)layoutSubviews { |
| + if (!_nameLabel.text) |
| + [_stackView removeArrangedSubview:_nameLabel]; |
|
lpromero
2017/02/27 17:52:10
Wait, can't you just set the hidden property on th
Moe
2017/02/27 20:49:42
Done.
|
| + else |
| + [_stackView addArrangedSubview:_nameLabel]; |
| + |
| + if (!_addressLabel.text) |
| + [_stackView removeArrangedSubview:_addressLabel]; |
| + else |
| + [_stackView addArrangedSubview:_addressLabel]; |
| + |
| + if (!_phoneNumberLabel.text) |
| + [_stackView removeArrangedSubview:_phoneNumberLabel]; |
| + else |
| + [_stackView addArrangedSubview:_phoneNumberLabel]; |
| + |
| + if (!_emailLabel.text) |
| + [_stackView removeArrangedSubview:_emailLabel]; |
| + else |
| + [_stackView addArrangedSubview:_emailLabel]; |
| + |
| + if (!_notificationLabel.text) |
| + [_stackView removeArrangedSubview:_notificationLabel]; |
| + else |
| + [_stackView addArrangedSubview:_notificationLabel]; |
| + |
| // When the accessory type is None, the content view of the cell (and thus) |
| // the labels inside it span larger than when there is a Checkmark accessory |
| // type. That means that toggling the accessory type can induce a rewrapping |
| @@ -154,13 +176,12 @@ const CGFloat kVerticalSpacingBetweenLabels = 8; |
| [super layoutSubviews]; |
| - // Adjust labels' preferredMaxLayoutWidth when the parent's width changes, for |
| - // instance on screen rotation. |
| + // Adjust preferredMaxLayoutWidth of _nameLabel and _addressLabel when the |
| + // parent's width changes, for instance on screen rotation. |
| CGFloat parentWidth = CGRectGetWidth(self.contentView.frame); |
| CGFloat preferredMaxLayoutWidth = parentWidth - (2 * kHorizontalPadding); |
| _nameLabel.preferredMaxLayoutWidth = preferredMaxLayoutWidth; |
| _addressLabel.preferredMaxLayoutWidth = preferredMaxLayoutWidth; |
| - _phoneNumberLabel.preferredMaxLayoutWidth = preferredMaxLayoutWidth; |
| // Re-layout with the new preferred width to allow the label to adjust its |
| // height. |
| @@ -177,15 +198,18 @@ const CGFloat kVerticalSpacingBetweenLabels = 8; |
| self.nameLabel.text = nil; |
| self.addressLabel.text = nil; |
| self.phoneNumberLabel.text = nil; |
| + self.emailLabel.text = nil; |
| + self.notificationLabel.text = nil; |
| self.accessoryType = MDCCollectionViewCellAccessoryNone; |
| } |
| #pragma mark - NSObject(Accessibility) |
| - (NSString*)accessibilityLabel { |
| - return [NSString stringWithFormat:@"%@, %@, %@", self.nameLabel.text, |
| - self.addressLabel.text, |
| - self.phoneNumberLabel.text]; |
| + return [NSString |
| + stringWithFormat:@"%@, %@, %@, %@, %@", self.nameLabel.text, |
| + self.addressLabel.text, self.phoneNumberLabel.text, |
| + self.emailLabel.text, self.notificationLabel.text]; |
| } |
| @end |