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

Side by Side 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: fix a bunch of rebase mishaps >_< 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/cocoa/profiles/avatar_button_controller.mm ('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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <Cocoa/Cocoa.h> 5 #import <Cocoa/Cocoa.h>
6 6
7 #import "chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h" 7 #import "chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h"
8 8
9 #include "base/mac/bundle_locations.h" 9 #include "base/mac/bundle_locations.h"
10 #include "base/prefs/pref_service.h" 10 #include "base/prefs/pref_service.h"
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 [self addTrackingArea:trackingArea_.get()]; 479 [self addTrackingArea:trackingArea_.get()];
480 480
481 NSRect bounds = NSMakeRect(0, 0, kLargeImageSide, kLargeImageSide); 481 NSRect bounds = NSMakeRect(0, 0, kLargeImageSide, kLargeImageSide);
482 if (editingAllowed) { 482 if (editingAllowed) {
483 changePhotoButton_.reset([self changePhotoButtonWithRect:bounds]); 483 changePhotoButton_.reset([self changePhotoButtonWithRect:bounds]);
484 [self addSubview:changePhotoButton_]; 484 [self addSubview:changePhotoButton_];
485 485
486 // Hide the button until the image is hovered over. 486 // Hide the button until the image is hovered over.
487 [changePhotoButton_ setHidden:YES]; 487 [changePhotoButton_ setHidden:YES];
488 } 488 }
489
490 // Set the image cell's accessibility strings to be the same as the
491 // button's strings.
492 [[self cell] accessibilitySetOverrideValue:l10n_util::GetNSString(
493 editingAllowed ?
494 IDS_PROFILES_NEW_AVATAR_MENU_CHANGE_PHOTO_ACCESSIBLE_NAME :
495 IDS_PROFILES_NEW_AVATAR_MENU_PHOTO_ACCESSIBLE_NAME)
496 forAttribute:NSAccessibilityTitleAttribute];
497 [[self cell] accessibilitySetOverrideValue:
498 editingAllowed ? NSAccessibilityButtonRole : NSAccessibilityImageRole
499 forAttribute:NSAccessibilityRoleAttribute];
500 [[self cell] accessibilitySetOverrideValue:
501 NSAccessibilityRoleDescription(NSAccessibilityButtonRole, nil)
502 forAttribute:NSAccessibilityRoleDescriptionAttribute];
503
504 // The button and the cell should read the same thing.
505 [self accessibilitySetOverrideValue:l10n_util::GetNSString(
506 editingAllowed ?
507 IDS_PROFILES_NEW_AVATAR_MENU_CHANGE_PHOTO_ACCESSIBLE_NAME :
508 IDS_PROFILES_NEW_AVATAR_MENU_PHOTO_ACCESSIBLE_NAME)
509 forAttribute:NSAccessibilityTitleAttribute];
510 [self accessibilitySetOverrideValue:NSAccessibilityButtonRole
511 forAttribute:NSAccessibilityRoleAttribute];
512 [self accessibilitySetOverrideValue:
513 NSAccessibilityRoleDescription(NSAccessibilityButtonRole, nil)
514 forAttribute:NSAccessibilityRoleDescriptionAttribute];
489 } 515 }
490 return self; 516 return self;
491 } 517 }
492 518
493 - (void)drawRect:(NSRect)dirtyRect { 519 - (void)drawRect:(NSRect)dirtyRect {
494 NSRect bounds = [self bounds]; 520 NSRect bounds = [self bounds];
495 521
496 // Display the profile picture as a circle. 522 // Display the profile picture as a circle.
497 NSBezierPath* path = [NSBezierPath bezierPathWithOvalInRect:bounds]; 523 NSBezierPath* path = [NSBezierPath bezierPathWithOvalInRect:bounds];
498 [path addClip]; 524 [path addClip];
(...skipping 11 matching lines...) Expand all
510 } 536 }
511 537
512 - (void)mouseEntered:(NSEvent*)event { 538 - (void)mouseEntered:(NSEvent*)event {
513 [changePhotoButton_ setHidden:NO]; 539 [changePhotoButton_ setHidden:NO];
514 } 540 }
515 541
516 - (void)mouseExited:(NSEvent*)event { 542 - (void)mouseExited:(NSEvent*)event {
517 [changePhotoButton_ setHidden:YES]; 543 [changePhotoButton_ setHidden:YES];
518 } 544 }
519 545
546 // Make sure the element is focusable for accessibility.
547 - (BOOL)canBecomeKeyView {
548 return YES;
549 }
550
551 - (BOOL)accessibilityIsIgnored {
552 return NO;
553 }
554
555 - (NSArray*)accessibilityActionNames {
556 NSArray* parentActions = [super accessibilityActionNames];
557 return [parentActions arrayByAddingObject:NSAccessibilityPressAction];
558 }
559
560 - (void)accessibilityPerformAction:(NSString*)action {
561 if ([action isEqualToString:NSAccessibilityPressAction]) {
562 avatarMenu_->EditProfile(avatarMenu_->GetActiveProfileIndex());
563 }
564
565 [super accessibilityPerformAction:action];
566 }
567
520 - (TransparentBackgroundButton*)changePhotoButtonWithRect:(NSRect)rect { 568 - (TransparentBackgroundButton*)changePhotoButtonWithRect:(NSRect)rect {
521 TransparentBackgroundButton* button = 569 TransparentBackgroundButton* button =
522 [[TransparentBackgroundButton alloc] initWithFrame:rect]; 570 [[TransparentBackgroundButton alloc] initWithFrame:rect];
523 [button setImage:ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed( 571 [button setImage:ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(
524 IDR_ICON_PROFILES_EDIT_CAMERA).AsNSImage()]; 572 IDR_ICON_PROFILES_EDIT_CAMERA).AsNSImage()];
525 [button setImagePosition:NSImageOnly]; 573 [button setImagePosition:NSImageOnly];
526 [button setTarget:self]; 574 [button setTarget:self];
527 [button setAction:@selector(editPhoto:)]; 575 [button setAction:@selector(editPhoto:)];
528 return button; 576 return button;
529 } 577 }
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 [[profileNameTextField_ cell] setLineBreakMode: 650 [[profileNameTextField_ cell] setLineBreakMode:
603 NSLineBreakByTruncatingTail]; 651 NSLineBreakByTruncatingTail];
604 [self addSubview:profileNameTextField_]; 652 [self addSubview:profileNameTextField_];
605 [profileNameTextField_ setTarget:self]; 653 [profileNameTextField_ setTarget:self];
606 [profileNameTextField_ setAction:@selector(saveProfileName:)]; 654 [profileNameTextField_ setAction:@selector(saveProfileName:)];
607 655
608 // Hide the textfield until the user clicks on the button. 656 // Hide the textfield until the user clicks on the button.
609 [profileNameTextField_ setHidden:YES]; 657 [profileNameTextField_ setHidden:YES];
610 } 658 }
611 659
660 [[self cell] accessibilitySetOverrideValue:NSAccessibilityButtonRole
661 forAttribute:NSAccessibilityRoleAttribute];
662 [[self cell] accessibilitySetOverrideValue:
663 NSAccessibilityRoleDescription(NSAccessibilityButtonRole, nil)
664 forAttribute:NSAccessibilityRoleDescriptionAttribute];
665
612 [self setBordered:NO]; 666 [self setBordered:NO];
613 [self setFont:[NSFont labelFontOfSize:kTitleFontSize]]; 667 [self setFont:[NSFont labelFontOfSize:kTitleFontSize]];
614 [self setAlignment:NSCenterTextAlignment]; 668 [self setAlignment:NSCenterTextAlignment];
615 [[self cell] setLineBreakMode:NSLineBreakByTruncatingTail]; 669 [[self cell] setLineBreakMode:NSLineBreakByTruncatingTail];
616 [self setTitle:profileName]; 670 [self setTitle:profileName];
617 } 671 }
618 return self; 672 return self;
619 } 673 }
620 674
621 - (void)saveProfileName:(id)sender { 675 - (void)saveProfileName:(id)sender {
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
987 // If view mode is PROFILE_CHOOSER but there is an auth error, force 1041 // If view mode is PROFILE_CHOOSER but there is an auth error, force
988 // ACCOUNT_MANAGEMENT mode. 1042 // ACCOUNT_MANAGEMENT mode.
989 if (viewMode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER && 1043 if (viewMode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER &&
990 HasAuthError(browser_->profile()) && 1044 HasAuthError(browser_->profile()) &&
991 switches::IsEnableAccountConsistency() && 1045 switches::IsEnableAccountConsistency() &&
992 avatarMenu_->GetItemAt(avatarMenu_->GetActiveProfileIndex()). 1046 avatarMenu_->GetItemAt(avatarMenu_->GetActiveProfileIndex()).
993 signed_in) { 1047 signed_in) {
994 viewMode_ = profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT; 1048 viewMode_ = profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT;
995 } 1049 }
996 1050
1051 [window accessibilitySetOverrideValue:
1052 l10n_util::GetNSString(IDS_PROFILES_NEW_AVATAR_MENU_ACCESSIBLE_NAME)
1053 forAttribute:NSAccessibilityTitleAttribute];
1054 [window accessibilitySetOverrideValue:
1055 l10n_util::GetNSString(IDS_PROFILES_NEW_AVATAR_MENU_ACCESSIBLE_NAME)
1056 forAttribute:NSAccessibilityHelpAttribute];
1057
997 [[self bubble] setAlignment:info_bubble::kAlignRightEdgeToAnchorEdge]; 1058 [[self bubble] setAlignment:info_bubble::kAlignRightEdgeToAnchorEdge];
998 [[self bubble] setArrowLocation:info_bubble::kNoArrow]; 1059 [[self bubble] setArrowLocation:info_bubble::kNoArrow];
999 [[self bubble] setBackgroundColor:GetDialogBackgroundColor()]; 1060 [[self bubble] setBackgroundColor:GetDialogBackgroundColor()];
1000 [self initMenuContentsWithView:viewMode_]; 1061 [self initMenuContentsWithView:viewMode_];
1001 } 1062 }
1002 1063
1003 return self; 1064 return self;
1004 } 1065 }
1005 1066
1006 - (void)initMenuContentsWithView:(profiles::BubbleViewMode)viewToDisplay { 1067 - (void)initMenuContentsWithView:(profiles::BubbleViewMode)viewToDisplay {
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
1402 frameOrigin:rect.origin 1463 frameOrigin:rect.origin
1403 action:nil]; 1464 action:nil];
1404 if (HasAuthError(browser_->profile())) { 1465 if (HasAuthError(browser_->profile())) {
1405 [link setImage:ui::ResourceBundle::GetSharedInstance(). 1466 [link setImage:ui::ResourceBundle::GetSharedInstance().
1406 GetNativeImageNamed(IDR_ICON_PROFILES_ACCOUNT_BUTTON_ERROR). 1467 GetNativeImageNamed(IDR_ICON_PROFILES_ACCOUNT_BUTTON_ERROR).
1407 ToNSImage()]; 1468 ToNSImage()];
1408 [link setImagePosition:NSImageRight]; 1469 [link setImagePosition:NSImageRight];
1409 [link setTarget:self]; 1470 [link setTarget:self];
1410 [link setAction:@selector(showAccountReauthenticationView:)]; 1471 [link setAction:@selector(showAccountReauthenticationView:)];
1411 [link setTag:kPrimaryProfileTag]; 1472 [link setTag:kPrimaryProfileTag];
1473 [[link cell]
1474 accessibilitySetOverrideValue:l10n_util::GetNSStringF(
1475 IDS_PROFILES_ACCOUNT_BUTTON_AUTH_ERROR_ACCESSIBLE_NAME,
1476 item.sync_state)
1477 forAttribute:NSAccessibilityTitleAttribute];
1412 } else { 1478 } else {
1413 [link setEnabled:NO]; 1479 [link setEnabled:NO];
1414 } 1480 }
1415 } 1481 }
1416 // -linkButtonWithTitle sizeToFit's the link, so re-stretch it so that it 1482 // -linkButtonWithTitle sizeToFit's the link, so re-stretch it so that it
1417 // can be centered correctly in the view. 1483 // can be centered correctly in the view.
1418 [link setAlignment:NSCenterTextAlignment]; 1484 [link setAlignment:NSCenterTextAlignment];
1419 [link setFrame:rect]; 1485 [link setFrame:rect];
1420 [container addSubview:link]; 1486 [container addSubview:link];
1421 [container setFrameSize:rect.size]; 1487 [container setFrameSize:rect.size];
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after
1972 } 2038 }
1973 2039
1974 - (bool)shouldShowGoIncognito { 2040 - (bool)shouldShowGoIncognito {
1975 bool incognitoAvailable = 2041 bool incognitoAvailable =
1976 IncognitoModePrefs::GetAvailability(browser_->profile()->GetPrefs()) != 2042 IncognitoModePrefs::GetAvailability(browser_->profile()->GetPrefs()) !=
1977 IncognitoModePrefs::DISABLED; 2043 IncognitoModePrefs::DISABLED;
1978 return incognitoAvailable && !browser_->profile()->IsGuestSession(); 2044 return incognitoAvailable && !browser_->profile()->IsGuestSession();
1979 } 2045 }
1980 2046
1981 @end 2047 @end
OLDNEW
« no previous file with comments | « chrome/browser/ui/cocoa/profiles/avatar_button_controller.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698