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

Unified Diff: chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm

Issue 471703002: [Mac] Add accessibility features to the new avatar menu (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm
diff --git a/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm b/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm
index a060e297211c1d1e00ae8ecc09048f89d0981a96..6285c4562ffd120fd462bc287ecd9997f45e9651 100644
--- a/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm
+++ b/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm
@@ -455,6 +455,12 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
// When hovering away from the profile photo, hide the "Change" button.
- (void)mouseExited:(NSEvent*)event;
+
+- (BOOL)acceptsFirstResponder;
+- (BOOL)canBecomeKeyView;
+- (BOOL)accessibilityIsIgnored;
+- (NSArray*)accessibilityActionNames;
+- (void)accessibilityPerformAction:(NSString*)action;
groby-ooo-7-16 2014/08/15 00:38:35 No need to declare any of them - they're all imple
noms (inactive) 2014/08/15 19:26:47 Argh, sorry. I never know when to declare and when
groby-ooo-7-16 2014/08/15 19:52:07 This is one of the few places ObjC pretends to not
@end
@interface EditableProfilePhoto (Private)
@@ -490,6 +496,32 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
// Hide the button until the image is hovered over.
[changePhotoButton_ setHidden:YES];
}
+
+ // Set the image cell's accessibility strings to be the same as the
+ // button's strings.
+ [[self cell] accessibilitySetOverrideValue:l10n_util::GetNSString(
+ editingAllowed ?
+ IDS_PROFILES_NEW_AVATAR_MENU_CHANGE_PHOTO_ACCESSIBLE_NAME :
+ IDS_PROFILES_NEW_AVATAR_MENU_PHOTO_ACCESSIBLE_NAME)
+ forAttribute:NSAccessibilityTitleAttribute];
+ [[self cell] accessibilitySetOverrideValue:
+ editingAllowed ? NSAccessibilityButtonRole : NSAccessibilityImageRole
+ forAttribute:NSAccessibilityRoleAttribute];
+ [[self cell] accessibilitySetOverrideValue:
+ NSAccessibilityRoleDescription(NSAccessibilityButtonRole, nil)
+ forAttribute:NSAccessibilityRoleDescriptionAttribute];
+
+ // The button and the cell should read the same thing.
+ [self accessibilitySetOverrideValue:l10n_util::GetNSString(
+ editingAllowed ?
+ IDS_PROFILES_NEW_AVATAR_MENU_CHANGE_PHOTO_ACCESSIBLE_NAME :
+ IDS_PROFILES_NEW_AVATAR_MENU_PHOTO_ACCESSIBLE_NAME)
+ forAttribute:NSAccessibilityTitleAttribute];
+ [self accessibilitySetOverrideValue:NSAccessibilityButtonRole
+ forAttribute:NSAccessibilityRoleAttribute];
+ [self accessibilitySetOverrideValue:
+ NSAccessibilityRoleDescription(NSAccessibilityButtonRole, nil)
+ forAttribute:NSAccessibilityRoleDescriptionAttribute];
}
return self;
}
@@ -521,6 +553,32 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
[changePhotoButton_ setHidden:YES];
}
+// Make sure the element is focusable for accessibility.
+- (BOOL)canBecomeKeyView {
+ return YES;
+}
+
+- (BOOL)acceptsFirstResponder {
+ return YES;
+}
+
+- (BOOL)accessibilityIsIgnored {
+ return NO;
+}
+
+- (NSArray*)accessibilityActionNames {
+ NSArray* parentActions = [super accessibilityActionNames];
+ return [parentActions arrayByAddingObject:NSAccessibilityPressAction];
+}
+
+- (void)accessibilityPerformAction:(NSString*)action {
+ if ([action isEqualToString:NSAccessibilityPressAction]) {
+ avatarMenu_->EditProfile(avatarMenu_->GetActiveProfileIndex());
+ }
+
+ [super accessibilityPerformAction:action];
+}
+
- (TransparentBackgroundButton*)changePhotoButtonWithRect:(NSRect)rect {
TransparentBackgroundButton* button =
[[TransparentBackgroundButton alloc] initWithFrame:rect];
@@ -553,6 +611,8 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
// Called when enter is pressed in the text field.
- (void)saveProfileName:(id)sender;
+- (BOOL)acceptsFirstResponder;
+
@end
@implementation EditableProfileNameButton
@@ -613,6 +673,12 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
[profileNameTextField_ setHidden:YES];
}
+ [[self cell] accessibilitySetOverrideValue:NSAccessibilityButtonRole
+ forAttribute:NSAccessibilityRoleAttribute];
+ [[self cell] accessibilitySetOverrideValue:
+ NSAccessibilityRoleDescription(NSAccessibilityButtonRole, nil)
+ forAttribute:NSAccessibilityRoleDescriptionAttribute];
+
[self setBordered:NO];
[self setFont:[NSFont labelFontOfSize:kTitleFontSize]];
[self setAlignment:NSCenterTextAlignment];
@@ -639,6 +705,10 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
[[self window] makeFirstResponder:profileNameTextField_];
}
+- (BOOL)acceptsFirstResponder {
groby-ooo-7-16 2014/08/15 00:38:35 Technically, a control's -acceptsFirstResponder is
noms (inactive) 2014/08/15 19:26:47 No. I think I just hoped these would make regular
+ return YES;
+}
+
@end
// A custom button that allows for setting a background color when hovered over.
@@ -686,6 +756,10 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
[[self cell] setBackgroundColor:backgroundColor];
}
+- (BOOL)acceptsFirstResponder {
+ return YES;
+}
+
@end
// A custom view with the given background color.
@@ -982,6 +1056,13 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
viewMode_ = profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT;
}
+ [window accessibilitySetOverrideValue:
+ l10n_util::GetNSString(IDS_PROFILES_NEW_AVATAR_MENU_ACCESSIBLE_NAME)
+ forAttribute:NSAccessibilityTitleAttribute];
+ [window accessibilitySetOverrideValue:
+ l10n_util::GetNSString(IDS_PROFILES_NEW_AVATAR_MENU_ACCESSIBLE_NAME)
+ forAttribute:NSAccessibilityHelpAttribute];
+
[[self bubble] setAlignment:info_bubble::kAlignRightEdgeToAnchorEdge];
[[self bubble] setArrowLocation:info_bubble::kNoArrow];
[[self bubble] setBackgroundColor:GetDialogBackgroundColor()];
@@ -1394,6 +1475,11 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
[link setTarget:self];
[link setAction:@selector(showAccountReauthenticationView:)];
[link setTag:kPrimaryProfileTag];
+ [[link cell]
+ accessibilitySetOverrideValue:l10n_util::GetNSStringF(
+ IDS_PROFILES_ACCOUNT_BUTTON_AUTH_ERROR_ACCESSIBLE_NAME,
+ item.sync_state)
+ forAttribute:NSAccessibilityTitleAttribute];
} else {
NSTextField* label = BuildLabel(email, rect.origin, nil);
[label setAlignment:NSCenterTextAlignment];

Powered by Google App Engine
This is Rietveld 408576698