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

Side by Side Diff: ios/chrome/browser/ui/authentication/signin_promo_view.mm

Issue 2901783002: Adding accessibility to the close button in sign-in promo (Closed)
Patch Set: Created 3 years, 7 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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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/authentication/signin_promo_view.h" 5 #import "ios/chrome/browser/ui/authentication/signin_promo_view.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #import "ios/chrome/browser/ui/authentication/signin_promo_view_delegate.h" 8 #import "ios/chrome/browser/ui/authentication/signin_promo_view_delegate.h"
9 #import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h" 9 #import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h"
10 #import "ios/chrome/browser/ui/uikit_ui_util.h" 10 #import "ios/chrome/browser/ui/uikit_ui_util.h"
11 #include "ios/chrome/grit/ios_chromium_strings.h" 11 #include "ios/chrome/grit/ios_chromium_strings.h"
12 #include "ios/chrome/grit/ios_strings.h"
12 #import "ios/third_party/material_components_ios/src/components/Buttons/src/Mate rialButtons.h" 13 #import "ios/third_party/material_components_ios/src/components/Buttons/src/Mate rialButtons.h"
13 #import "ios/third_party/material_components_ios/src/components/Typography/src/M aterialTypography.h" 14 #import "ios/third_party/material_components_ios/src/components/Typography/src/M aterialTypography.h"
14 #include "ui/base/l10n/l10n_util.h" 15 #include "ui/base/l10n/l10n_util.h"
15 16
16 #if !defined(__has_feature) || !__has_feature(objc_arc) 17 #if !defined(__has_feature) || !__has_feature(objc_arc)
17 #error "This file requires ARC support." 18 #error "This file requires ARC support."
18 #endif 19 #endif
19 20
20 namespace { 21 namespace {
21 // Horizontal padding for label and buttons. 22 // Horizontal padding for label and buttons.
(...skipping 13 matching lines...) Expand all
35 NSArray<NSLayoutConstraint*>* _warmStateConstraints; 36 NSArray<NSLayoutConstraint*>* _warmStateConstraints;
36 signin_metrics::AccessPoint _accessPoint; 37 signin_metrics::AccessPoint _accessPoint;
37 } 38 }
38 39
39 @synthesize delegate = _delegate; 40 @synthesize delegate = _delegate;
40 @synthesize mode = _mode; 41 @synthesize mode = _mode;
41 @synthesize imageView = _imageView; 42 @synthesize imageView = _imageView;
42 @synthesize textLabel = _textLabel; 43 @synthesize textLabel = _textLabel;
43 @synthesize primaryButton = _primaryButton; 44 @synthesize primaryButton = _primaryButton;
44 @synthesize secondaryButton = _secondaryButton; 45 @synthesize secondaryButton = _secondaryButton;
46 @synthesize closeButton = _closeButton;
45 47
46 - (instancetype)initWithFrame:(CGRect)frame { 48 - (instancetype)initWithFrame:(CGRect)frame {
47 self = [super initWithFrame:frame]; 49 self = [super initWithFrame:frame];
48 if (self) { 50 if (self) {
49 self.isAccessibilityElement = YES; 51 self.isAccessibilityElement = YES;
50 52
51 // Adding subviews. 53 // Adding subviews.
52 self.clipsToBounds = YES; 54 self.clipsToBounds = YES;
53 _imageView = [[UIImageView alloc] init]; 55 _imageView = [[UIImageView alloc] init];
54 _imageView.translatesAutoresizingMaskIntoConstraints = NO; 56 _imageView.translatesAutoresizingMaskIntoConstraints = NO;
(...skipping 13 matching lines...) Expand all
68 [self addSubview:_primaryButton]; 70 [self addSubview:_primaryButton];
69 71
70 _secondaryButton = [[MDCFlatButton alloc] init]; 72 _secondaryButton = [[MDCFlatButton alloc] init];
71 _secondaryButton.translatesAutoresizingMaskIntoConstraints = NO; 73 _secondaryButton.translatesAutoresizingMaskIntoConstraints = NO;
72 _secondaryButton.accessibilityIdentifier = @"signin_promo_secondary_button"; 74 _secondaryButton.accessibilityIdentifier = @"signin_promo_secondary_button";
73 [_secondaryButton addTarget:self 75 [_secondaryButton addTarget:self
74 action:@selector(onSecondaryButtonAction:) 76 action:@selector(onSecondaryButtonAction:)
75 forControlEvents:UIControlEventTouchUpInside]; 77 forControlEvents:UIControlEventTouchUpInside];
76 [self addSubview:_secondaryButton]; 78 [self addSubview:_secondaryButton];
77 79
80 _closeButton = [[UIButton alloc] init];
81 _closeButton.translatesAutoresizingMaskIntoConstraints = NO;
82 _closeButton.accessibilityIdentifier = @"signin_promo_close_button";
83 [self addSubview:_closeButton];
84
78 // Adding style. 85 // Adding style.
79 _imageView.contentMode = UIViewContentModeCenter; 86 _imageView.contentMode = UIViewContentModeCenter;
80 _imageView.layer.masksToBounds = YES; 87 _imageView.layer.masksToBounds = YES;
81 _imageView.contentMode = UIViewContentModeScaleAspectFit; 88 _imageView.contentMode = UIViewContentModeScaleAspectFit;
82 89
83 _textLabel.font = [MDCTypography buttonFont]; 90 _textLabel.font = [MDCTypography buttonFont];
84 _textLabel.textColor = [[MDCPalette greyPalette] tint900]; 91 _textLabel.textColor = [[MDCPalette greyPalette] tint900];
85 _textLabel.numberOfLines = 0; 92 _textLabel.numberOfLines = 0;
86 _textLabel.textAlignment = NSTextAlignmentCenter; 93 _textLabel.textAlignment = NSTextAlignmentCenter;
87 94
88 [_primaryButton setBackgroundColor:[[MDCPalette cr_bluePalette] tint500] 95 [_primaryButton setBackgroundColor:[[MDCPalette cr_bluePalette] tint500]
89 forState:UIControlStateNormal]; 96 forState:UIControlStateNormal];
90 _primaryButton.customTitleColor = [UIColor whiteColor]; 97 _primaryButton.customTitleColor = [UIColor whiteColor];
91 _primaryButton.inkColor = [UIColor colorWithWhite:1 alpha:0.2]; 98 _primaryButton.inkColor = [UIColor colorWithWhite:1 alpha:0.2];
92 99
93 _secondaryButton.customTitleColor = [[MDCPalette cr_bluePalette] tint500]; 100 _secondaryButton.customTitleColor = [[MDCPalette cr_bluePalette] tint500];
94 _secondaryButton.uppercaseTitle = NO; 101 _secondaryButton.uppercaseTitle = NO;
95 102
103 [_closeButton setImage:[UIImage imageNamed:@"signin_promo_close_gray"]
104 forState:UIControlStateNormal];
105 // _closeButton.hidden = YES;
lpromero 2017/05/23 12:06:16 Still needed? Otherwise remove.
jlebel 2017/05/23 12:43:26 Done.
106
96 // Adding constraints. 107 // Adding constraints.
97 NSDictionary* metrics = @{ 108 NSDictionary* metrics = @{
98 @"kButtonHeight" : @(kButtonHeight), 109 @"kButtonHeight" : @(kButtonHeight),
99 @"kButtonVerticalPadding" : @(kButtonVerticalPadding), 110 @"kButtonVerticalPadding" : @(kButtonVerticalPadding),
100 @"kButtonVerticalPaddingx2" : @(kButtonVerticalPadding * 2), 111 @"kButtonVerticalPaddingx2" : @(kButtonVerticalPadding * 2),
101 @"kHorizontalPadding" : @(kHorizontalPadding), 112 @"kHorizontalPadding" : @(kHorizontalPadding),
102 @"kVerticalPadding" : @(kVerticalPadding), 113 @"kVerticalPadding" : @(kVerticalPadding),
103 @"kVerticalPaddingx2" : @(kVerticalPadding * 2), 114 @"kVerticalPaddingx2" : @(kVerticalPadding * 2),
104 @"kVerticalPaddingkButtonVerticalPadding" : 115 @"kVerticalPaddingkButtonVerticalPadding" :
105 @(kVerticalPadding + kButtonVerticalPadding), 116 @(kVerticalPadding + kButtonVerticalPadding),
106 }; 117 };
107 NSDictionary* views = @{ 118 NSDictionary* views = @{
108 @"imageView" : _imageView, 119 @"imageView" : _imageView,
109 @"primaryButton" : _primaryButton, 120 @"primaryButton" : _primaryButton,
110 @"secondaryButton" : _secondaryButton, 121 @"secondaryButton" : _secondaryButton,
111 @"textLabel" : _textLabel, 122 @"textLabel" : _textLabel,
112 }; 123 };
113 124
114 // Constraints shared between modes. 125 // Constraints shared between modes.
115 NSString* sharedVerticalConstraints = 126 NSString* sharedVerticalConstraints =
116 @"V:|-kVerticalPaddingx2-[imageView]-kVerticalPadding-[textLabel]-" 127 @"V:|-kVerticalPaddingx2-[imageView]-kVerticalPadding-[textLabel]-"
117 @"kVerticalPaddingkButtonVerticalPadding-[primaryButton(kButtonHeight)" 128 @"kVerticalPaddingkButtonVerticalPadding-[primaryButton(kButtonHeight)"
118 @"]"; 129 @"]";
119 NSArray* visualConstraints = @[ 130 NSArray* visualConstraints = @[
120 sharedVerticalConstraints, 131 sharedVerticalConstraints,
121 @"H:|-kHorizontalPadding-[primaryButton]-kHorizontalPadding-|" 132 @"H:|-kHorizontalPadding-[primaryButton]-kHorizontalPadding-|"
122 ]; 133 ];
123 ApplyVisualConstraintsWithMetricsAndOptions( 134 ApplyVisualConstraintsWithMetricsAndOptions(
124 visualConstraints, views, metrics, NSLayoutFormatAlignAllCenterX); 135 visualConstraints, views, metrics, NSLayoutFormatAlignAllCenterX);
136 NSArray* buttonVisualConstraints =
137 @[ @"H:[closeButton]-|", @"V:|-[closeButton]" ];
138 ApplyVisualConstraints(buttonVisualConstraints,
139 @{ @"closeButton" : _closeButton });
125 140
126 // Constraints for cold state mode. 141 // Constraints for cold state mode.
127 NSArray* coldStateVisualConstraints = @[ 142 NSArray* coldStateVisualConstraints = @[
128 @"V:[primaryButton]-kVerticalPaddingkButtonVerticalPadding-|", 143 @"V:[primaryButton]-kVerticalPaddingkButtonVerticalPadding-|",
129 ]; 144 ];
130 _coldStateConstraints = VisualConstraintsWithMetrics( 145 _coldStateConstraints = VisualConstraintsWithMetrics(
131 coldStateVisualConstraints, views, metrics); 146 coldStateVisualConstraints, views, metrics);
132 147
133 // Constraints for warm state mode. 148 // Constraints for warm state mode.
134 NSString* warmStateVerticalConstraints = 149 NSString* warmStateVerticalConstraints =
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 } 209 }
195 210
196 - (void)accessibilityPrimaryAction:(id)unused { 211 - (void)accessibilityPrimaryAction:(id)unused {
197 [_primaryButton sendActionsForControlEvents:UIControlEventTouchUpInside]; 212 [_primaryButton sendActionsForControlEvents:UIControlEventTouchUpInside];
198 } 213 }
199 214
200 - (void)accessibilitySecondaryAction:(id)unused { 215 - (void)accessibilitySecondaryAction:(id)unused {
201 [_secondaryButton sendActionsForControlEvents:UIControlEventTouchUpInside]; 216 [_secondaryButton sendActionsForControlEvents:UIControlEventTouchUpInside];
202 } 217 }
203 218
219 - (void)accessibilityCloseAction:(id)unused {
220 [_closeButton sendActionsForControlEvents:UIControlEventTouchUpInside];
221 }
222
204 - (CGFloat)horizontalPadding { 223 - (CGFloat)horizontalPadding {
205 return kHorizontalPadding; 224 return kHorizontalPadding;
206 } 225 }
207 226
208 - (void)onPrimaryButtonAction:(id)unused { 227 - (void)onPrimaryButtonAction:(id)unused {
209 switch (_mode) { 228 switch (_mode) {
210 case SigninPromoViewModeColdState: 229 case SigninPromoViewModeColdState:
211 [_delegate signinPromoViewDidTapSigninWithNewAccount:self]; 230 [_delegate signinPromoViewDidTapSigninWithNewAccount:self];
212 break; 231 break;
213 case SigninPromoViewModeWarmState: 232 case SigninPromoViewModeWarmState:
214 [_delegate signinPromoViewDidTapSigninWithDefaultAccount:self]; 233 [_delegate signinPromoViewDidTapSigninWithDefaultAccount:self];
215 break; 234 break;
216 } 235 }
217 } 236 }
218 237
219 - (void)onSecondaryButtonAction:(id)unused { 238 - (void)onSecondaryButtonAction:(id)unused {
220 [_delegate signinPromoViewDidTapSigninWithOtherAccount:self]; 239 [_delegate signinPromoViewDidTapSigninWithOtherAccount:self];
221 } 240 }
222 241
223 #pragma mark - NSObject(Accessibility) 242 #pragma mark - NSObject(Accessibility)
224 243
225 - (NSArray<UIAccessibilityCustomAction*>*)accessibilityCustomActions { 244 - (NSArray<UIAccessibilityCustomAction*>*)accessibilityCustomActions {
245 NSMutableArray* actions = [NSMutableArray array];
246
226 NSString* primaryActionName = 247 NSString* primaryActionName =
227 [_primaryButton titleForState:UIControlStateNormal]; 248 [_primaryButton titleForState:UIControlStateNormal];
228 UIAccessibilityCustomAction* primaryCustomAction = 249 UIAccessibilityCustomAction* primaryCustomAction =
229 [[UIAccessibilityCustomAction alloc] 250 [[UIAccessibilityCustomAction alloc]
230 initWithName:primaryActionName 251 initWithName:primaryActionName
231 target:self 252 target:self
232 selector:@selector(accessibilityPrimaryAction:)]; 253 selector:@selector(accessibilityPrimaryAction:)];
233 if (_mode == SigninPromoViewModeColdState) { 254 [actions addObject:primaryCustomAction];
234 return @[ primaryCustomAction ]; 255
256 if (_mode == SigninPromoViewModeWarmState) {
257 NSString* secondaryActionName =
258 [_secondaryButton titleForState:UIControlStateNormal];
259 UIAccessibilityCustomAction* secondaryCustomAction =
260 [[UIAccessibilityCustomAction alloc]
261 initWithName:secondaryActionName
262 target:self
263 selector:@selector(accessibilitySecondaryAction:)];
264 [actions addObject:secondaryCustomAction];
235 } 265 }
236 NSString* secondaryActionName = 266
237 [_secondaryButton titleForState:UIControlStateNormal]; 267 NSString* closeActionName =
238 UIAccessibilityCustomAction* secondaryCustomAction = 268 l10n_util::GetNSString(IDS_IOS_SIGNIN_PROMO_CLOSE_ACCESSIBILITY);
269 UIAccessibilityCustomAction* closeCustomAction =
239 [[UIAccessibilityCustomAction alloc] 270 [[UIAccessibilityCustomAction alloc]
240 initWithName:secondaryActionName 271 initWithName:closeActionName
241 target:self 272 target:self
242 selector:@selector(accessibilitySecondaryAction:)]; 273 selector:@selector(accessibilityCloseAction:)];
243 return @[ primaryCustomAction, secondaryCustomAction ]; 274 [actions addObject:closeCustomAction];
275
276 return actions;
244 } 277 }
245 278
246 - (NSString*)accessibilityLabel { 279 - (NSString*)accessibilityLabel {
247 return _textLabel.text; 280 return _textLabel.text;
248 } 281 }
249 282
250 @end 283 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698