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

Side by Side Diff: ios/chrome/browser/ui/first_run/welcome_to_chrome_view.mm

Issue 2680433002: [ObjC ARC] Converts ios/chrome/browser/ui/first_run:first_run to ARC. (Closed)
Patch Set: weak Created 3 years, 10 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
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/first_run/welcome_to_chrome_view.h" 5 #import "ios/chrome/browser/ui/first_run/welcome_to_chrome_view.h"
6 6
7 #include "base/i18n/rtl.h" 7 #include "base/i18n/rtl.h"
8 #import "base/ios/weak_nsobject.h"
9 #include "base/logging.h" 8 #include "base/logging.h"
10 #import "base/mac/scoped_nsobject.h"
11 #include "base/strings/sys_string_conversions.h" 9 #include "base/strings/sys_string_conversions.h"
12 #import "ios/chrome/browser/ui/UIView+SizeClassSupport.h" 10 #import "ios/chrome/browser/ui/UIView+SizeClassSupport.h"
13 #include "ios/chrome/browser/ui/fancy_ui/primary_action_button.h" 11 #include "ios/chrome/browser/ui/fancy_ui/primary_action_button.h"
14 #include "ios/chrome/browser/ui/first_run/first_run_util.h" 12 #include "ios/chrome/browser/ui/first_run/first_run_util.h"
15 #include "ios/chrome/browser/ui/ui_util.h" 13 #include "ios/chrome/browser/ui/ui_util.h"
16 #import "ios/chrome/browser/ui/uikit_ui_util.h" 14 #import "ios/chrome/browser/ui/uikit_ui_util.h"
17 #import "ios/chrome/browser/ui/util/CRUILabel+AttributeUtils.h" 15 #import "ios/chrome/browser/ui/util/CRUILabel+AttributeUtils.h"
18 #import "ios/chrome/browser/ui/util/label_link_controller.h" 16 #import "ios/chrome/browser/ui/util/label_link_controller.h"
19 #include "ios/chrome/common/string_util.h" 17 #include "ios/chrome/common/string_util.h"
20 #include "ios/chrome/grit/ios_chromium_strings.h" 18 #include "ios/chrome/grit/ios_chromium_strings.h"
21 #include "ios/chrome/grit/ios_strings.h" 19 #include "ios/chrome/grit/ios_strings.h"
22 #import "ios/third_party/material_roboto_font_loader_ios/src/src/MaterialRobotoF ontLoader.h" 20 #import "ios/third_party/material_roboto_font_loader_ios/src/src/MaterialRobotoF ontLoader.h"
23 #include "ui/base/l10n/l10n_util.h" 21 #include "ui/base/l10n/l10n_util.h"
24 #include "url/gurl.h" 22 #include "url/gurl.h"
25 23
24 #if !defined(__has_feature) || !__has_feature(objc_arc)
25 #error "This file requires ARC support."
26 #endif
27
26 namespace { 28 namespace {
27 29
28 // Accessibility identifier for the checkbox button. 30 // Accessibility identifier for the checkbox button.
29 NSString* const kUMAMetricsButtonAccessibilityIdentifier = 31 NSString* const kUMAMetricsButtonAccessibilityIdentifier =
30 @"UMAMetricsButtonAccessibilityIdentifier"; 32 @"UMAMetricsButtonAccessibilityIdentifier";
31 33
32 // Color of "Terms of Service" link text. 34 // Color of "Terms of Service" link text.
33 const int kLinkColorRGB = 0x5D9AFF; 35 const int kLinkColorRGB = 0x5D9AFF;
34 36
35 // The width of the container view for a REGULAR width size class. 37 // The width of the container view for a REGULAR width size class.
(...skipping 27 matching lines...) Expand all
63 const CGFloat kAnimationDelay = .5; 65 const CGFloat kAnimationDelay = .5;
64 66
65 // Image names. 67 // Image names.
66 NSString* const kAppLogoImageName = @"launchscreen_app_logo"; 68 NSString* const kAppLogoImageName = @"launchscreen_app_logo";
67 NSString* const kCheckBoxImageName = @"checkbox"; 69 NSString* const kCheckBoxImageName = @"checkbox";
68 NSString* const kCheckBoxCheckedImageName = @"checkbox_checked"; 70 NSString* const kCheckBoxCheckedImageName = @"checkbox_checked";
69 71
70 } // namespace 72 } // namespace
71 73
72 @interface WelcomeToChromeView () { 74 @interface WelcomeToChromeView () {
73 // Backing objects for properties of the same name. 75 UIView* _containerView;
74 base::WeakNSProtocol<id<WelcomeToChromeViewDelegate>> _delegate; 76 UILabel* _titleLabel;
75 base::scoped_nsobject<UIView> _containerView; 77 UIImageView* _imageView;
76 base::scoped_nsobject<UILabel> _titleLabel; 78 UILabel* _TOSLabel;
77 base::scoped_nsobject<UIImageView> _imageView; 79 LabelLinkController* _TOSLabelLinkController;
78 base::scoped_nsobject<UILabel> _TOSLabel; 80 UIButton* _checkBoxButton;
79 base::scoped_nsobject<LabelLinkController> _TOSLabelLinkController; 81 UILabel* _optInLabel;
80 base::scoped_nsobject<UIButton> _checkBoxButton; 82 PrimaryActionButton* _OKButton;
81 base::scoped_nsobject<UILabel> _optInLabel;
82 base::scoped_nsobject<PrimaryActionButton> _OKButton;
83 } 83 }
84 84
85 // Subview properties are lazily instantiated upon their first use. 85 // Subview properties are lazily instantiated upon their first use.
86 86
87 // A container view used to layout and center subviews. 87 // A container view used to layout and center subviews.
88 @property(nonatomic, readonly) UIView* containerView; 88 @property(strong, nonatomic, readonly) UIView* containerView;
89 // The "Welcome to Chrome" label that appears at the top of the view. 89 // The "Welcome to Chrome" label that appears at the top of the view.
90 @property(nonatomic, readonly) UILabel* titleLabel; 90 @property(strong, nonatomic, readonly) UILabel* titleLabel;
91 // The Chrome logo image view. 91 // The Chrome logo image view.
92 @property(nonatomic, readonly) UIImageView* imageView; 92 @property(strong, nonatomic, readonly) UIImageView* imageView;
93 // The "Terms of Service" label. 93 // The "Terms of Service" label.
94 @property(nonatomic, readonly) UILabel* TOSLabel; 94 @property(strong, nonatomic, readonly) UILabel* TOSLabel;
95 // The stats reporting opt-in label. 95 // The stats reporting opt-in label.
96 @property(nonatomic, readonly) UILabel* optInLabel; 96 @property(strong, nonatomic, readonly) UILabel* optInLabel;
97 // The stats reporting opt-in checkbox button. 97 // The stats reporting opt-in checkbox button.
98 @property(nonatomic, readonly) UIButton* checkBoxButton; 98 @property(strong, nonatomic, readonly) UIButton* checkBoxButton;
99 // The "Accept & Continue" button. 99 // The "Accept & Continue" button.
100 @property(nonatomic, readonly) PrimaryActionButton* OKButton; 100 @property(strong, nonatomic, readonly) PrimaryActionButton* OKButton;
101 101
102 // Subview layout methods. They must be called in the order declared here, as 102 // Subview layout methods. They must be called in the order declared here, as
103 // subsequent subview layouts depend on the layouts that precede them. 103 // subsequent subview layouts depend on the layouts that precede them.
104 - (void)layoutTitleLabel; 104 - (void)layoutTitleLabel;
105 - (void)layoutImageView; 105 - (void)layoutImageView;
106 - (void)layoutTOSLabel; 106 - (void)layoutTOSLabel;
107 - (void)layoutOptInLabel; 107 - (void)layoutOptInLabel;
108 - (void)layoutCheckBoxButton; 108 - (void)layoutCheckBoxButton;
109 - (void)layoutContainerView; 109 - (void)layoutContainerView;
110 - (void)layoutOKButton; 110 - (void)layoutOKButton;
(...skipping 16 matching lines...) Expand all
127 - (void)OKButtonWasTapped; 127 - (void)OKButtonWasTapped;
128 128
129 // The TOS label button was tapped. 129 // The TOS label button was tapped.
130 // TODO(crbug.com/539961): Remove once link detection is fixed. 130 // TODO(crbug.com/539961): Remove once link detection is fixed.
131 - (void)TOSLinkWasTapped; 131 - (void)TOSLinkWasTapped;
132 132
133 @end 133 @end
134 134
135 @implementation WelcomeToChromeView 135 @implementation WelcomeToChromeView
136 136
137 @synthesize delegate = _delegate;
138
137 - (instancetype)initWithFrame:(CGRect)frame { 139 - (instancetype)initWithFrame:(CGRect)frame {
138 self = [super initWithFrame:frame]; 140 self = [super initWithFrame:frame];
139 if (self) { 141 if (self) {
140 self.backgroundColor = [UIColor whiteColor]; 142 self.backgroundColor = [UIColor whiteColor];
141 self.autoresizingMask = 143 self.autoresizingMask =
142 UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 144 UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
143 } 145 }
144 return self; 146 return self;
145 } 147 }
146 148
147 - (void)runLaunchAnimation { 149 - (void)runLaunchAnimation {
148 // Prepare for animation by making views (except for the logo) transparent 150 // Prepare for animation by making views (except for the logo) transparent
149 // and finding the initial and final location of the logo. 151 // and finding the initial and final location of the logo.
150 self.titleLabel.alpha = 0.0; 152 self.titleLabel.alpha = 0.0;
151 self.TOSLabel.alpha = 0.0; 153 self.TOSLabel.alpha = 0.0;
152 self.optInLabel.alpha = 0.0; 154 self.optInLabel.alpha = 0.0;
153 self.checkBoxButton.alpha = 0.0; 155 self.checkBoxButton.alpha = 0.0;
154 self.OKButton.alpha = 0.0; 156 self.OKButton.alpha = 0.0;
155 157
156 // Get final location of logo based on result from previously run 158 // Get final location of logo based on result from previously run
157 // layoutSubviews. 159 // layoutSubviews.
158 CGRect finalLogoFrame = self.imageView.frame; 160 CGRect finalLogoFrame = self.imageView.frame;
159 // Ensure that frame position is valid and that layoutSubviews ran 161 // Ensure that frame position is valid and that layoutSubviews ran
160 // before this method. 162 // before this method.
161 DCHECK(finalLogoFrame.origin.x >= 0 && finalLogoFrame.origin.y >= 0); 163 DCHECK(finalLogoFrame.origin.x >= 0 && finalLogoFrame.origin.y >= 0);
162 self.imageView.center = CGPointMake(CGRectGetMidX(self.containerView.bounds), 164 self.imageView.center = CGPointMake(CGRectGetMidX(self.containerView.bounds),
163 CGRectGetMidY(self.containerView.bounds)); 165 CGRectGetMidY(self.containerView.bounds));
164 166
165 base::WeakNSObject<WelcomeToChromeView> weakSelf(self); 167 __weak WelcomeToChromeView* weakSelf = self;
166 [UIView animateWithDuration:kAnimationDuration 168 [UIView animateWithDuration:kAnimationDuration
167 delay:kAnimationDelay 169 delay:kAnimationDelay
168 options:UIViewAnimationCurveEaseInOut 170 options:UIViewAnimationCurveEaseInOut
169 animations:^{ 171 animations:^{
170 [weakSelf imageView].frame = finalLogoFrame; 172 [weakSelf imageView].frame = finalLogoFrame;
171 [weakSelf titleLabel].alpha = 1.0; 173 [weakSelf titleLabel].alpha = 1.0;
172 [weakSelf TOSLabel].alpha = 1.0; 174 [weakSelf TOSLabel].alpha = 1.0;
173 [weakSelf optInLabel].alpha = 1.0; 175 [weakSelf optInLabel].alpha = 1.0;
174 [weakSelf checkBoxButton].alpha = 1.0; 176 [weakSelf checkBoxButton].alpha = 1.0;
175 [weakSelf OKButton].alpha = 1.0; 177 [weakSelf OKButton].alpha = 1.0;
176 } 178 }
177 completion:nil]; 179 completion:nil];
178 } 180 }
179 181
180 #pragma mark - Accessors 182 #pragma mark - Accessors
181 183
182 - (id<WelcomeToChromeViewDelegate>)delegate {
183 return _delegate;
184 }
185
186 - (void)setDelegate:(id<WelcomeToChromeViewDelegate>)delegate {
187 _delegate.reset(delegate);
188 }
189
190 - (BOOL)isCheckBoxSelected { 184 - (BOOL)isCheckBoxSelected {
191 return self.checkBoxButton.selected; 185 return self.checkBoxButton.selected;
192 } 186 }
193 187
194 - (void)setCheckBoxSelected:(BOOL)checkBoxSelected { 188 - (void)setCheckBoxSelected:(BOOL)checkBoxSelected {
195 if (checkBoxSelected != self.checkBoxButton.selected) 189 if (checkBoxSelected != self.checkBoxButton.selected)
196 [self checkBoxButtonWasTapped]; 190 [self checkBoxButtonWasTapped];
197 } 191 }
198 192
199 - (UIView*)containerView { 193 - (UIView*)containerView {
200 if (!_containerView) { 194 if (!_containerView) {
201 _containerView.reset([[UIView alloc] initWithFrame:CGRectZero]); 195 _containerView = [[UIView alloc] initWithFrame:CGRectZero];
202 [_containerView setBackgroundColor:[UIColor whiteColor]]; 196 [_containerView setBackgroundColor:[UIColor whiteColor]];
203 } 197 }
204 return _containerView.get(); 198 return _containerView;
205 } 199 }
206 200
207 - (UILabel*)titleLabel { 201 - (UILabel*)titleLabel {
208 if (!_titleLabel) { 202 if (!_titleLabel) {
209 _titleLabel.reset([[UILabel alloc] initWithFrame:CGRectZero]); 203 _titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
210 [_titleLabel setBackgroundColor:[UIColor whiteColor]]; 204 [_titleLabel setBackgroundColor:[UIColor whiteColor]];
211 [_titleLabel setNumberOfLines:0]; 205 [_titleLabel setNumberOfLines:0];
212 [_titleLabel setLineBreakMode:NSLineBreakByWordWrapping]; 206 [_titleLabel setLineBreakMode:NSLineBreakByWordWrapping];
213 [_titleLabel setBaselineAdjustment:UIBaselineAdjustmentAlignBaselines]; 207 [_titleLabel setBaselineAdjustment:UIBaselineAdjustmentAlignBaselines];
214 [_titleLabel 208 [_titleLabel
215 setText:l10n_util::GetNSString(IDS_IOS_FIRSTRUN_WELCOME_TO_CHROME)]; 209 setText:l10n_util::GetNSString(IDS_IOS_FIRSTRUN_WELCOME_TO_CHROME)];
216 } 210 }
217 return _titleLabel.get(); 211 return _titleLabel;
218 } 212 }
219 213
220 - (UIImageView*)imageView { 214 - (UIImageView*)imageView {
221 if (!_imageView) { 215 if (!_imageView) {
222 UIImage* image = [UIImage imageNamed:kAppLogoImageName]; 216 UIImage* image = [UIImage imageNamed:kAppLogoImageName];
223 _imageView.reset([[UIImageView alloc] initWithImage:image]); 217 _imageView = [[UIImageView alloc] initWithImage:image];
224 [_imageView setBackgroundColor:[UIColor whiteColor]]; 218 [_imageView setBackgroundColor:[UIColor whiteColor]];
225 } 219 }
226 return _imageView.get(); 220 return _imageView;
227 } 221 }
228 222
229 - (UILabel*)TOSLabel { 223 - (UILabel*)TOSLabel {
230 if (!_TOSLabel) { 224 if (!_TOSLabel) {
231 _TOSLabel.reset([[UILabel alloc] initWithFrame:CGRectZero]); 225 _TOSLabel = [[UILabel alloc] initWithFrame:CGRectZero];
232 [_TOSLabel setNumberOfLines:0]; 226 [_TOSLabel setNumberOfLines:0];
233 [_TOSLabel setTextAlignment:NSTextAlignmentCenter]; 227 [_TOSLabel setTextAlignment:NSTextAlignmentCenter];
234 } 228 }
235 return _TOSLabel.get(); 229 return _TOSLabel;
236 } 230 }
237 231
238 - (UILabel*)optInLabel { 232 - (UILabel*)optInLabel {
239 if (!_optInLabel) { 233 if (!_optInLabel) {
240 _optInLabel.reset([[UILabel alloc] initWithFrame:CGRectZero]); 234 _optInLabel = [[UILabel alloc] initWithFrame:CGRectZero];
241 [_optInLabel setNumberOfLines:0]; 235 [_optInLabel setNumberOfLines:0];
242 [_optInLabel 236 [_optInLabel
243 setText:l10n_util::GetNSString(IDS_IOS_FIRSTRUN_NEW_OPT_IN_LABEL)]; 237 setText:l10n_util::GetNSString(IDS_IOS_FIRSTRUN_NEW_OPT_IN_LABEL)];
244 [_optInLabel setTextAlignment:NSTextAlignmentNatural]; 238 [_optInLabel setTextAlignment:NSTextAlignmentNatural];
245 } 239 }
246 return _optInLabel.get(); 240 return _optInLabel;
247 } 241 }
248 242
249 - (UIButton*)checkBoxButton { 243 - (UIButton*)checkBoxButton {
250 if (!_checkBoxButton) { 244 if (!_checkBoxButton) {
251 _checkBoxButton.reset([[UIButton alloc] initWithFrame:CGRectZero]); 245 _checkBoxButton = [[UIButton alloc] initWithFrame:CGRectZero];
252 [_checkBoxButton setBackgroundColor:[UIColor clearColor]]; 246 [_checkBoxButton setBackgroundColor:[UIColor clearColor]];
253 [_checkBoxButton addTarget:self 247 [_checkBoxButton addTarget:self
254 action:@selector(checkBoxButtonWasTapped) 248 action:@selector(checkBoxButtonWasTapped)
255 forControlEvents:UIControlEventTouchUpInside]; 249 forControlEvents:UIControlEventTouchUpInside];
256 SetA11yLabelAndUiAutomationName(_checkBoxButton, 250 SetA11yLabelAndUiAutomationName(_checkBoxButton,
257 IDS_IOS_FIRSTRUN_NEW_OPT_IN_LABEL, 251 IDS_IOS_FIRSTRUN_NEW_OPT_IN_LABEL,
258 kUMAMetricsButtonAccessibilityIdentifier); 252 kUMAMetricsButtonAccessibilityIdentifier);
259 [_checkBoxButton 253 [_checkBoxButton
260 setAccessibilityValue:l10n_util::GetNSString(IDS_IOS_SETTING_OFF)]; 254 setAccessibilityValue:l10n_util::GetNSString(IDS_IOS_SETTING_OFF)];
261 [_checkBoxButton setImage:[UIImage imageNamed:kCheckBoxImageName] 255 [_checkBoxButton setImage:[UIImage imageNamed:kCheckBoxImageName]
262 forState:UIControlStateNormal]; 256 forState:UIControlStateNormal];
263 [_checkBoxButton setImage:[UIImage imageNamed:kCheckBoxCheckedImageName] 257 [_checkBoxButton setImage:[UIImage imageNamed:kCheckBoxCheckedImageName]
264 forState:UIControlStateSelected]; 258 forState:UIControlStateSelected];
265 } 259 }
266 return _checkBoxButton.get(); 260 return _checkBoxButton;
267 } 261 }
268 262
269 - (PrimaryActionButton*)OKButton { 263 - (PrimaryActionButton*)OKButton {
270 if (!_OKButton) { 264 if (!_OKButton) {
271 _OKButton.reset([[PrimaryActionButton alloc] initWithFrame:CGRectZero]); 265 _OKButton = [[PrimaryActionButton alloc] initWithFrame:CGRectZero];
272 [_OKButton addTarget:self 266 [_OKButton addTarget:self
273 action:@selector(OKButtonWasTapped) 267 action:@selector(OKButtonWasTapped)
274 forControlEvents:UIControlEventTouchUpInside]; 268 forControlEvents:UIControlEventTouchUpInside];
275 NSString* acceptAndContinue = 269 NSString* acceptAndContinue =
276 l10n_util::GetNSString(IDS_IOS_FIRSTRUN_OPT_IN_ACCEPT_BUTTON); 270 l10n_util::GetNSString(IDS_IOS_FIRSTRUN_OPT_IN_ACCEPT_BUTTON);
277 [_OKButton setTitle:acceptAndContinue forState:UIControlStateNormal]; 271 [_OKButton setTitle:acceptAndContinue forState:UIControlStateNormal];
278 [_OKButton setTitle:acceptAndContinue forState:UIControlStateHighlighted]; 272 [_OKButton setTitle:acceptAndContinue forState:UIControlStateHighlighted];
279 // UIAutomation tests look for the Accept button to skip through the 273 // UIAutomation tests look for the Accept button to skip through the
280 // First Run UI when it shows up. 274 // First Run UI when it shows up.
281 SetA11yLabelAndUiAutomationName( 275 SetA11yLabelAndUiAutomationName(
282 _OKButton, IDS_IOS_FIRSTRUN_OPT_IN_ACCEPT_BUTTON, @"Accept & Continue"); 276 _OKButton, IDS_IOS_FIRSTRUN_OPT_IN_ACCEPT_BUTTON, @"Accept & Continue");
283 } 277 }
284 return _OKButton.get(); 278 return _OKButton;
285 } 279 }
286 280
287 #pragma mark - Layout 281 #pragma mark - Layout
288 282
289 - (void)willMoveToSuperview:(nullable UIView*)newSuperview { 283 - (void)willMoveToSuperview:(nullable UIView*)newSuperview {
290 [super willMoveToSuperview:newSuperview]; 284 [super willMoveToSuperview:newSuperview];
291 285
292 // Early return if the view hierarchy is already built. 286 // Early return if the view hierarchy is already built.
293 if (self.containerView.superview) { 287 if (self.containerView.superview) {
294 DCHECK_EQ(self, self.containerView.superview); 288 DCHECK_EQ(self, self.containerView.superview);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 self.TOSLabel.text = strippedText; 346 self.TOSLabel.text = strippedText;
353 if (ios_internal::FixOrphanWord(self.TOSLabel)) { 347 if (ios_internal::FixOrphanWord(self.TOSLabel)) {
354 // If a newline is inserted, check whether it was added mid-link and adjust 348 // If a newline is inserted, check whether it was added mid-link and adjust
355 // |linkTextRange| accordingly. 349 // |linkTextRange| accordingly.
356 NSRange newlineRange = 350 NSRange newlineRange =
357 [self.TOSLabel.text rangeOfString:@"\n" options:0 range:linkTextRange]; 351 [self.TOSLabel.text rangeOfString:@"\n" options:0 range:linkTextRange];
358 if (newlineRange.length) 352 if (newlineRange.length)
359 linkTextRange.length++; 353 linkTextRange.length++;
360 } 354 }
361 355
362 base::WeakNSObject<WelcomeToChromeView> weakSelf(self); 356 __weak WelcomeToChromeView* weakSelf = self;
363 ProceduralBlockWithURL action = ^(const GURL& url) { 357 ProceduralBlockWithURL action = ^(const GURL& url) {
364 base::scoped_nsobject<WelcomeToChromeView> strongSelf([weakSelf retain]); 358 WelcomeToChromeView* strongSelf = weakSelf;
365 if (!strongSelf) 359 if (!strongSelf)
366 return; 360 return;
367 [[strongSelf delegate] welcomeToChromeViewDidTapTOSLink:strongSelf]; 361 [[strongSelf delegate] welcomeToChromeViewDidTapTOSLink:strongSelf];
368 }; 362 };
369 363
370 _TOSLabelLinkController.reset( 364 _TOSLabelLinkController =
371 [[LabelLinkController alloc] initWithLabel:_TOSLabel action:action]); 365 [[LabelLinkController alloc] initWithLabel:_TOSLabel action:action];
372 [_TOSLabelLinkController 366 [_TOSLabelLinkController
373 addLinkWithRange:linkTextRange 367 addLinkWithRange:linkTextRange
374 url:GURL("internal://terms-of-service")]; 368 url:GURL("internal://terms-of-service")];
375 [_TOSLabelLinkController setLinkColor:UIColorFromRGB(kLinkColorRGB)]; 369 [_TOSLabelLinkController setLinkColor:UIColorFromRGB(kLinkColorRGB)];
376 370
377 CGSize TOSLabelSize = [self.TOSLabel sizeThatFits:containerSize]; 371 CGSize TOSLabelSize = [self.TOSLabel sizeThatFits:containerSize];
378 CGFloat TOSLabelTopPadding = kTOSLabelTopPadding[self.cr_heightSizeClass]; 372 CGFloat TOSLabelTopPadding = kTOSLabelTopPadding[self.cr_heightSizeClass];
379 self.TOSLabel.frame = AlignRectOriginAndSizeToPixels( 373 self.TOSLabel.frame = AlignRectOriginAndSizeToPixels(
380 CGRectMake((containerSize.width - TOSLabelSize.width) / 2.0, 374 CGRectMake((containerSize.width - TOSLabelSize.width) / 2.0,
381 CGRectGetMaxY(self.imageView.frame) + TOSLabelTopPadding, 375 CGRectGetMaxY(self.imageView.frame) + TOSLabelTopPadding,
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 524
531 - (void)OKButtonWasTapped { 525 - (void)OKButtonWasTapped {
532 [self.delegate welcomeToChromeViewDidTapOKButton:self]; 526 [self.delegate welcomeToChromeViewDidTapOKButton:self];
533 } 527 }
534 528
535 - (void)TOSLinkWasTapped { 529 - (void)TOSLinkWasTapped {
536 [self.delegate welcomeToChromeViewDidTapTOSLink:self]; 530 [self.delegate welcomeToChromeViewDidTapTOSLink:self];
537 } 531 }
538 532
539 @end 533 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698