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

Side by Side Diff: ios/chrome/browser/ui/ntp/whats_new_header_view.mm

Issue 2955363002: [ObjC ARC] Converts ios/chrome/browser/ui/ntp:ntp_internal to ARC. (Closed)
Patch Set: rebase Created 3 years, 5 months 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 unified diff | Download patch
« no previous file with comments | « ios/chrome/browser/ui/ntp/whats_new_header_view.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/ntp/whats_new_header_view.h" 5 #import "ios/chrome/browser/ui/ntp/whats_new_header_view.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/mac/scoped_nsobject.h"
9 #import "ios/chrome/browser/ui/uikit_ui_util.h" 8 #import "ios/chrome/browser/ui/uikit_ui_util.h"
10 #include "ios/chrome/common/string_util.h" 9 #include "ios/chrome/common/string_util.h"
11 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h" 10 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
12 #include "ios/public/provider/chrome/browser/images/branded_image_provider.h" 11 #include "ios/public/provider/chrome/browser/images/branded_image_provider.h"
13 #import "ios/third_party/material_components_ios/src/components/Typography/src/M aterialTypography.h" 12 #import "ios/third_party/material_components_ios/src/components/Typography/src/M aterialTypography.h"
14 13
14 #if !defined(__has_feature) || !__has_feature(objc_arc)
15 #error "This file requires ARC support."
16 #endif
17
15 namespace { 18 namespace {
16 19
17 const CGFloat kLabelTopMargin = 16; 20 const CGFloat kLabelTopMargin = 16;
18 const CGFloat kLabelBottomMargin = 24; 21 const CGFloat kLabelBottomMargin = 24;
19 const CGFloat kLabelLineSpacing = 4; 22 const CGFloat kLabelLineSpacing = 4;
20 const CGFloat kLabelLeftMargin = 8; 23 const CGFloat kLabelLeftMargin = 8;
21 const CGFloat kLabelFontSize = 14; 24 const CGFloat kLabelFontSize = 14;
22 const CGFloat kInfoIconSize = 24; 25 const CGFloat kInfoIconSize = 24;
23 const CGFloat kInfoIconTopMargin = 12; 26 const CGFloat kInfoIconTopMargin = 12;
24 27
25 const int kTextColorRgb = 0x333333; 28 const int kTextColorRgb = 0x333333;
26 const int kLinkColorRgb = 0x5595FE; 29 const int kLinkColorRgb = 0x5595FE;
27 30
28 } // namespace 31 } // namespace
29 32
30 @interface WhatsNewHeaderView () { 33 @interface WhatsNewHeaderView () {
31 base::scoped_nsobject<UIImageView> _infoIconImageView; 34 UIImageView* _infoIconImageView;
32 base::scoped_nsobject<UILabel> _promoLabel; 35 UILabel* _promoLabel;
33 base::scoped_nsobject<NSLayoutConstraint> _edgeConstraint; 36 NSLayoutConstraint* _edgeConstraint;
34 base::scoped_nsobject<UIView> _leftSpacer; 37 UIView* _leftSpacer;
35 base::scoped_nsobject<UIView> _rightSpacer; 38 UIView* _rightSpacer;
36 CGFloat _sideMargin; 39 CGFloat _sideMargin;
37 } 40 }
38 41
39 @end 42 @end
40 43
41 @implementation WhatsNewHeaderView 44 @implementation WhatsNewHeaderView
42 45
43 @synthesize delegate = _delegate; 46 @synthesize delegate = _delegate;
44 47
45 - (instancetype)initWithFrame:(CGRect)frame { 48 - (instancetype)initWithFrame:(CGRect)frame {
46 self = [super initWithFrame:frame]; 49 self = [super initWithFrame:frame];
47 if (self) { 50 if (self) {
48 self.hidden = YES; 51 self.hidden = YES;
49 UIImage* infoIconImage = ios::GetChromeBrowserProvider() 52 UIImage* infoIconImage = ios::GetChromeBrowserProvider()
50 ->GetBrandedImageProvider() 53 ->GetBrandedImageProvider()
51 ->GetWhatsNewIconImage(WHATS_NEW_INFO); 54 ->GetWhatsNewIconImage(WHATS_NEW_INFO);
52 _infoIconImageView.reset([[UIImageView alloc] initWithImage:infoIconImage]); 55 _infoIconImageView = [[UIImageView alloc] initWithImage:infoIconImage];
53 _promoLabel.reset([[[self class] promoLabel] retain]); 56 _promoLabel = [[self class] promoLabel];
54 [_promoLabel setUserInteractionEnabled:YES]; 57 [_promoLabel setUserInteractionEnabled:YES];
55 base::scoped_nsobject<UITapGestureRecognizer> promoTapRecognizer( 58 UITapGestureRecognizer* promoTapRecognizer = [[UITapGestureRecognizer alloc]
56 [[UITapGestureRecognizer alloc] 59 initWithTarget:self
57 initWithTarget:self 60 action:@selector(promoButtonPressed)];
58 action:@selector(promoButtonPressed)]);
59 [_promoLabel addGestureRecognizer:promoTapRecognizer]; 61 [_promoLabel addGestureRecognizer:promoTapRecognizer];
60 _leftSpacer.reset([[UIView alloc] initWithFrame:CGRectZero]); 62 _leftSpacer = [[UIView alloc] initWithFrame:CGRectZero];
61 _rightSpacer.reset([[UIView alloc] initWithFrame:CGRectZero]); 63 _rightSpacer = [[UIView alloc] initWithFrame:CGRectZero];
62 64
63 [_leftSpacer setHidden:YES]; 65 [_leftSpacer setHidden:YES];
64 [_rightSpacer setHidden:YES]; 66 [_rightSpacer setHidden:YES];
65 67
66 [self addSubview:_infoIconImageView]; 68 [self addSubview:_infoIconImageView];
67 [self addSubview:_promoLabel]; 69 [self addSubview:_promoLabel];
68 [self addSubview:_leftSpacer]; 70 [self addSubview:_leftSpacer];
69 [self addSubview:_rightSpacer]; 71 [self addSubview:_rightSpacer];
70 [self setTranslatesAutoresizingMaskIntoConstraints:NO]; 72 [self setTranslatesAutoresizingMaskIntoConstraints:NO];
71 [_infoIconImageView setTranslatesAutoresizingMaskIntoConstraints:NO]; 73 [_infoIconImageView setTranslatesAutoresizingMaskIntoConstraints:NO];
(...skipping 26 matching lines...) Expand all
98 @"rightSpacer" : _rightSpacer, 100 @"rightSpacer" : _rightSpacer,
99 }; 101 };
100 102
101 ApplyVisualConstraintsWithMetrics( 103 ApplyVisualConstraintsWithMetrics(
102 @[ 104 @[
103 verticalLogoVisualFormat, verticalLabelVisualFormat, 105 verticalLogoVisualFormat, verticalLabelVisualFormat,
104 horizontalVisualFormat 106 horizontalVisualFormat
105 ], 107 ],
106 views, metrics, self); 108 views, metrics, self);
107 109
108 _edgeConstraint.reset([[NSLayoutConstraint 110 _edgeConstraint = [NSLayoutConstraint
109 constraintWithItem:_leftSpacer 111 constraintWithItem:_leftSpacer
110 attribute:NSLayoutAttributeWidth 112 attribute:NSLayoutAttributeWidth
111 relatedBy:NSLayoutRelationGreaterThanOrEqual 113 relatedBy:NSLayoutRelationGreaterThanOrEqual
112 toItem:nil 114 toItem:nil
113 attribute:NSLayoutAttributeNotAnAttribute 115 attribute:NSLayoutAttributeNotAnAttribute
114 multiplier:1 116 multiplier:1
115 constant:_sideMargin] retain]); 117 constant:_sideMargin];
116 [self addConstraint:_edgeConstraint]; 118 [self addConstraint:_edgeConstraint];
117 } 119 }
118 [_edgeConstraint setConstant:_sideMargin]; 120 [_edgeConstraint setConstant:_sideMargin];
119 [super updateConstraints]; 121 [super updateConstraints];
120 } 122 }
121 123
122 - (void)setText:(NSString*)text { 124 - (void)setText:(NSString*)text {
123 [[self class] setText:text inPromoLabel:_promoLabel]; 125 [[self class] setText:text inPromoLabel:_promoLabel];
124 self.hidden = NO; 126 self.hidden = NO;
125 } 127 }
126 128
127 - (void)setIcon:(WhatsNewIcon)icon { 129 - (void)setIcon:(WhatsNewIcon)icon {
128 UIImage* image = ios::GetChromeBrowserProvider() 130 UIImage* image = ios::GetChromeBrowserProvider()
129 ->GetBrandedImageProvider() 131 ->GetBrandedImageProvider()
130 ->GetWhatsNewIconImage(icon); 132 ->GetWhatsNewIconImage(icon);
131 [_infoIconImageView setImage:image]; 133 [_infoIconImageView setImage:image];
132 } 134 }
133 135
134 - (void)setSideMargin:(CGFloat)sideMargin forWidth:(CGFloat)width { 136 - (void)setSideMargin:(CGFloat)sideMargin forWidth:(CGFloat)width {
135 _sideMargin = sideMargin; 137 _sideMargin = sideMargin;
136 [self setNeedsUpdateConstraints]; 138 [self setNeedsUpdateConstraints];
137 CGFloat maxLabelWidth = 139 CGFloat maxLabelWidth =
138 width - 2 * sideMargin - kInfoIconSize - kLabelLeftMargin; 140 width - 2 * sideMargin - kInfoIconSize - kLabelLeftMargin;
139 [_promoLabel.get() setPreferredMaxLayoutWidth:maxLabelWidth]; 141 [_promoLabel setPreferredMaxLayoutWidth:maxLabelWidth];
140 } 142 }
141 143
142 - (void)promoButtonPressed { 144 - (void)promoButtonPressed {
143 [_delegate onPromoLabelTapped]; 145 [_delegate onPromoLabelTapped];
144 [self removeConstraints:self.constraints]; 146 [self removeConstraints:self.constraints];
145 _edgeConstraint.reset(); 147 _edgeConstraint = nil;
146 } 148 }
147 149
148 + (void)setText:(NSString*)promoLabelText inPromoLabel:(UILabel*)promoLabel { 150 + (void)setText:(NSString*)promoLabelText inPromoLabel:(UILabel*)promoLabel {
149 DCHECK(promoLabelText); 151 DCHECK(promoLabelText);
150 NSRange linkRange; 152 NSRange linkRange;
151 NSString* strippedText = ParseStringWithLink(promoLabelText, &linkRange); 153 NSString* strippedText = ParseStringWithLink(promoLabelText, &linkRange);
152 DCHECK_NE(NSNotFound, static_cast<NSInteger>(linkRange.location)); 154 DCHECK_NE(NSNotFound, static_cast<NSInteger>(linkRange.location));
153 DCHECK_NE(0u, linkRange.length); 155 DCHECK_NE(0u, linkRange.length);
154 156
155 NSMutableAttributedString* attributedText = 157 NSMutableAttributedString* attributedText =
156 [[[NSMutableAttributedString alloc] initWithString:strippedText] 158 [[NSMutableAttributedString alloc] initWithString:strippedText];
157 autorelease];
158 159
159 // Sets the styling to mimic a link. 160 // Sets the styling to mimic a link.
160 UIColor* linkColor = UIColorFromRGB(kLinkColorRgb, 1.0); 161 UIColor* linkColor = UIColorFromRGB(kLinkColorRgb, 1.0);
161 [attributedText addAttribute:NSForegroundColorAttributeName 162 [attributedText addAttribute:NSForegroundColorAttributeName
162 value:linkColor 163 value:linkColor
163 range:linkRange]; 164 range:linkRange];
164 [attributedText addAttribute:NSUnderlineStyleAttributeName 165 [attributedText addAttribute:NSUnderlineStyleAttributeName
165 value:@(NSUnderlineStyleSingle) 166 value:@(NSUnderlineStyleSingle)
166 range:linkRange]; 167 range:linkRange];
167 [attributedText addAttribute:NSUnderlineColorAttributeName 168 [attributedText addAttribute:NSUnderlineColorAttributeName
168 value:linkColor 169 value:linkColor
169 range:linkRange]; 170 range:linkRange];
170 171
171 // Sets the line spacing on the attributed string. 172 // Sets the line spacing on the attributed string.
172 NSInteger strLength = [strippedText length]; 173 NSInteger strLength = [strippedText length];
173 base::scoped_nsobject<NSMutableParagraphStyle> style( 174 NSMutableParagraphStyle* style = [[NSMutableParagraphStyle alloc] init];
174 [[NSMutableParagraphStyle alloc] init]);
175 [style setLineSpacing:kLabelLineSpacing]; 175 [style setLineSpacing:kLabelLineSpacing];
176 [attributedText addAttribute:NSParagraphStyleAttributeName 176 [attributedText addAttribute:NSParagraphStyleAttributeName
177 value:style 177 value:style
178 range:NSMakeRange(0, strLength)]; 178 range:NSMakeRange(0, strLength)];
179 179
180 [promoLabel setAttributedText:attributedText]; 180 [promoLabel setAttributedText:attributedText];
181 } 181 }
182 182
183 + (UILabel*)promoLabel { 183 + (UILabel*)promoLabel {
184 base::scoped_nsobject<UILabel> promoLabel( 184 UILabel* promoLabel = [[UILabel alloc] initWithFrame:CGRectZero];
185 [[UILabel alloc] initWithFrame:CGRectZero]);
186 [promoLabel 185 [promoLabel
187 setFont:[[MDCTypography fontLoader] regularFontOfSize:kLabelFontSize]]; 186 setFont:[[MDCTypography fontLoader] regularFontOfSize:kLabelFontSize]];
188 [promoLabel setTextColor:UIColorFromRGB(kTextColorRgb, 1.0)]; 187 [promoLabel setTextColor:UIColorFromRGB(kTextColorRgb, 1.0)];
189 [promoLabel setNumberOfLines:0]; 188 [promoLabel setNumberOfLines:0];
190 [promoLabel setTextAlignment:NSTextAlignmentNatural]; 189 [promoLabel setTextAlignment:NSTextAlignmentNatural];
191 [promoLabel setLineBreakMode:NSLineBreakByWordWrapping]; 190 [promoLabel setLineBreakMode:NSLineBreakByWordWrapping];
192 return promoLabel.autorelease(); 191 return promoLabel;
193 } 192 }
194 193
195 + (int)heightToFitText:(NSString*)text inWidth:(CGFloat)width { 194 + (int)heightToFitText:(NSString*)text inWidth:(CGFloat)width {
196 CGFloat maxWidthForLabel = width - kInfoIconSize - kLabelLeftMargin; 195 CGFloat maxWidthForLabel = width - kInfoIconSize - kLabelLeftMargin;
197 base::scoped_nsobject<UILabel> promoLabel([[self promoLabel] retain]); 196 UILabel* promoLabel = [self promoLabel];
198 [[self class] setText:text inPromoLabel:promoLabel.get()]; 197 [[self class] setText:text inPromoLabel:promoLabel];
199 CGFloat promoLabelHeight = 198 CGFloat promoLabelHeight =
200 [promoLabel sizeThatFits:CGSizeMake(maxWidthForLabel, CGFLOAT_MAX)] 199 [promoLabel sizeThatFits:CGSizeMake(maxWidthForLabel, CGFLOAT_MAX)]
201 .height; 200 .height;
202 return promoLabelHeight + kLabelTopMargin + kLabelBottomMargin; 201 return promoLabelHeight + kLabelTopMargin + kLabelBottomMargin;
203 } 202 }
204 203
205 @end 204 @end
OLDNEW
« no previous file with comments | « ios/chrome/browser/ui/ntp/whats_new_header_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698