Chromium Code Reviews| Index: ash/common/system/tray_accessibility.cc |
| diff --git a/ash/common/system/tray_accessibility.cc b/ash/common/system/tray_accessibility.cc |
| index 7523dfe21cebb871ab5d7fd12d0a83bfee5c7c90..cd915aca8c56a1113fce2fdc5e0a8cc94020b101 100644 |
| --- a/ash/common/system/tray_accessibility.cc |
| +++ b/ash/common/system/tray_accessibility.cc |
| @@ -32,6 +32,7 @@ |
| #include "ui/views/controls/button/custom_button.h" |
| #include "ui/views/controls/image_view.h" |
| #include "ui/views/controls/label.h" |
| +#include "ui/views/controls/separator.h" |
| #include "ui/views/layout/box_layout.h" |
| #include "ui/views/widget/widget.h" |
| @@ -47,6 +48,10 @@ enum AccessibilityState { |
| A11Y_AUTOCLICK = 1 << 4, |
| A11Y_VIRTUAL_KEYBOARD = 1 << 5, |
| A11Y_BRAILLE_DISPLAY_CONNECTED = 1 << 6, |
| + A11Y_MONO_AUDIO = 1 << 7, |
| + A11Y_CARET_HIGHLIGHT = 1 << 8, |
| + A11Y_HIGHLIGHT_MOUSE_CURSOR = 1 << 9, |
| + A11Y_HIGHLIGHT_KEYBOARD_FOCUS = 1 << 10, |
| }; |
| uint32_t GetAccessibilityState() { |
| @@ -67,6 +72,14 @@ uint32_t GetAccessibilityState() { |
| state |= A11Y_VIRTUAL_KEYBOARD; |
| if (delegate->IsBrailleDisplayConnected()) |
| state |= A11Y_BRAILLE_DISPLAY_CONNECTED; |
| + if (delegate->IsMonoAudioEnabled()) |
| + state |= A11Y_MONO_AUDIO; |
| + if (delegate->IsCaretHighlightEnabled()) |
| + state |= A11Y_CARET_HIGHLIGHT; |
| + if (delegate->IsCursorHighlightEnabled()) |
| + state |= A11Y_HIGHLIGHT_MOUSE_CURSOR; |
| + if (delegate->IsFocusHighlightEnabled()) |
| + state |= A11Y_HIGHLIGHT_KEYBOARD_FOCUS; |
| return state; |
| } |
| @@ -147,12 +160,20 @@ AccessibilityDetailedView::AccessibilityDetailedView(SystemTrayItem* owner, |
| settings_view_(nullptr), |
| autoclick_view_(nullptr), |
| virtual_keyboard_view_(nullptr), |
| + mono_audio_view_(nullptr), |
| + caret_highlight_view_(nullptr), |
| + highlight_mouse_cursor_view_(nullptr), |
| + highlight_keyboard_focus_view_(nullptr), |
| spoken_feedback_enabled_(false), |
| high_contrast_enabled_(false), |
| screen_magnifier_enabled_(false), |
| large_cursor_enabled_(false), |
| autoclick_enabled_(false), |
| virtual_keyboard_enabled_(false), |
| + mono_audio_enabled_(false), |
| + caret_highlight_enabled_(false), |
| + highlight_mouse_cursor_enabled_(false), |
| + highlight_keyboard_focus_enabled_(false), |
|
xiyuan
2017/03/28 20:11:25
nit: Since you are here, could you move all member
minch1
2017/03/29 01:15:11
Done.
|
| login_(login) { |
| Reset(); |
| AppendAccessibilityList(); |
| @@ -173,16 +194,6 @@ void AccessibilityDetailedView::AppendAccessibilityList() { |
| spoken_feedback_enabled_, spoken_feedback_enabled_, |
| kSystemMenuAccessibilityChromevoxIcon); |
| - // Large Cursor item is shown only in Login screen. |
| - if (login_ == LoginStatus::NOT_LOGGED_IN) { |
|
xiyuan
2017/03/28 20:11:25
Just double check that removing login status check
minch1
2017/03/29 01:15:11
hi, tdanderson@, can you help confirm this?
tdanderson
2017/03/29 18:57:02
Yes, I spoke with the a11y PM (lpalmaro@) a while
|
| - large_cursor_enabled_ = delegate->IsLargeCursorEnabled(); |
| - large_cursor_view_ = |
| - AddScrollListItem(bundle.GetLocalizedString( |
| - IDS_ASH_STATUS_TRAY_ACCESSIBILITY_LARGE_CURSOR), |
| - large_cursor_enabled_, large_cursor_enabled_, |
| - kSystemMenuAccessibilityLargeCursorIcon); |
| - } |
| - |
| high_contrast_enabled_ = delegate->IsHighContrastEnabled(); |
| high_contrast_view_ = AddScrollListItem( |
| bundle.GetLocalizedString( |
| @@ -196,14 +207,11 @@ void AccessibilityDetailedView::AppendAccessibilityList() { |
| screen_magnifier_enabled_, screen_magnifier_enabled_, |
| kSystemMenuAccessibilityScreenMagnifierIcon); |
| - // Don't show autoclick option at login screen. |
| - if (login_ != LoginStatus::NOT_LOGGED_IN) { |
| - autoclick_enabled_ = delegate->IsAutoclickEnabled(); |
| - autoclick_view_ = AddScrollListItem( |
| - bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_ACCESSIBILITY_AUTOCLICK), |
| - autoclick_enabled_, autoclick_enabled_, |
| - kSystemMenuAccessibilityAutoClickIcon); |
| - } |
| + autoclick_enabled_ = delegate->IsAutoclickEnabled(); |
| + autoclick_view_ = AddScrollListItem( |
| + bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_ACCESSIBILITY_AUTOCLICK), |
| + autoclick_enabled_, autoclick_enabled_, |
| + kSystemMenuAccessibilityAutoClickIcon); |
| virtual_keyboard_enabled_ = delegate->IsVirtualKeyboardEnabled(); |
| virtual_keyboard_view_ = |
| @@ -211,6 +219,38 @@ void AccessibilityDetailedView::AppendAccessibilityList() { |
| IDS_ASH_STATUS_TRAY_ACCESSIBILITY_VIRTUAL_KEYBOARD), |
| virtual_keyboard_enabled_, virtual_keyboard_enabled_, |
| kSystemMenuKeyboardIcon); |
| + |
| + AddSubHeader(IDS_ASH_STATUS_TRAY_ACCESSIBILITY_ADDITIONAL_SETTINGS); |
| + |
| + large_cursor_enabled_ = delegate->IsLargeCursorEnabled(); |
| + large_cursor_view_ = AddScrollListItemWithoutIcon( |
| + bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_ACCESSIBILITY_LARGE_CURSOR), |
| + large_cursor_enabled_); |
| + |
| + mono_audio_enabled_ = delegate->IsMonoAudioEnabled(); |
| + mono_audio_view_ = AddScrollListItemWithoutIcon( |
| + bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_ACCESSIBILITY_MONO_AUDIO), |
| + mono_audio_enabled_); |
| + |
| + caret_highlight_enabled_ = delegate->IsCaretHighlightEnabled(); |
| + caret_highlight_view_ = AddScrollListItemWithoutIcon( |
| + bundle.GetLocalizedString( |
| + IDS_ASH_STATUS_TRAY_ACCESSIBILITY_CARET_HIGHLIGHT), |
| + caret_highlight_enabled_); |
| + |
| + highlight_mouse_cursor_enabled_ = delegate->IsCursorHighlightEnabled(); |
| + highlight_mouse_cursor_view_ = AddScrollListItemWithoutIcon( |
| + bundle.GetLocalizedString( |
| + IDS_ASH_STATUS_TRAY_ACCESSIBILITY_HIGHLIGHT_MOUSE_CURSOR), |
| + highlight_mouse_cursor_enabled_); |
| + |
| + if (!spoken_feedback_enabled_) { |
|
xiyuan
2017/03/28 20:11:25
nit: brief comment to document that "Focus highlig
minch1
2017/03/29 01:15:11
Done.
|
| + highlight_keyboard_focus_enabled_ = delegate->IsFocusHighlightEnabled(); |
| + highlight_keyboard_focus_view_ = AddScrollListItemWithoutIcon( |
| + bundle.GetLocalizedString( |
| + IDS_ASH_STATUS_TRAY_ACCESSIBILITY_HIGHLIGHT_KEYBOARD_FOCUS), |
| + highlight_keyboard_focus_enabled_); |
| + } |
| } |
| HoverHighlightView* AccessibilityDetailedView::AddScrollListItem( |
| @@ -225,20 +265,54 @@ HoverHighlightView* AccessibilityDetailedView::AddScrollListItem( |
| image, text, highlight, image.width() + kMenuSeparatorVerticalPadding * 2, |
| padding, padding); |
| + CheckOrUncheckMark(&container, checked); |
| + |
| + scroll_content()->AddChildView(container); |
| + return container; |
| +} |
| + |
| +HoverHighlightView* AccessibilityDetailedView::AddScrollListItemWithoutIcon( |
| + const base::string16& text, |
| + bool checked) { |
| + HoverHighlightView* container = new HoverHighlightView(this); |
| + container->AddLabelRowMd(text); |
| + |
| + CheckOrUncheckMark(&container, checked); |
| + |
| + scroll_content()->AddChildView(container); |
| + return container; |
| +} |
| + |
| +void AccessibilityDetailedView::CheckOrUncheckMark( |
| + HoverHighlightView** container, |
| + bool checked) { |
| if (checked) { |
| gfx::ImageSkia check_mark = |
| CreateVectorIcon(kCheckCircleIcon, gfx::kGoogleGreen700); |
| - container->AddRightIcon(check_mark, check_mark.width()); |
| - container->SetRightViewVisible(true); |
| - container->SetAccessiblityState( |
| - HoverHighlightView::AccessibilityState::CHECKED_CHECKBOX); |
| + (*container)->AddRightIcon(check_mark, check_mark.width()); |
| + (*container)->SetRightViewVisible(true); |
| + (*container) |
| + ->SetAccessiblityState( |
| + HoverHighlightView::AccessibilityState::CHECKED_CHECKBOX); |
| } else { |
| - container->SetAccessiblityState( |
| - HoverHighlightView::AccessibilityState::UNCHECKED_CHECKBOX); |
| + (*container) |
| + ->SetAccessiblityState( |
| + HoverHighlightView::AccessibilityState::UNCHECKED_CHECKBOX); |
| } |
| +} |
| - scroll_content()->AddChildView(container); |
| - return container; |
| +void AccessibilityDetailedView::AddSubHeader(int message_id) { |
| + TriView* header = TrayPopupUtils::CreateSubHeaderRowView(); |
| + TrayPopupUtils::ConfigureAsStickyHeader(header); |
| + |
| + views::Label* label = TrayPopupUtils::CreateDefaultLabel(); |
| + label->SetText(l10n_util::GetStringUTF16(message_id)); |
| + TrayPopupItemStyle style(TrayPopupItemStyle::FontStyle::SUB_HEADER); |
| + style.SetupLabel(label); |
| + header->AddView(TriView::Container::CENTER, label); |
| + |
| + scroll_content()->AddChildView(new views::Separator()); |
| + scroll_content()->AddChildView(header); |
| } |
| void AccessibilityDetailedView::HandleViewClicked(views::View* view) { |
| @@ -275,6 +349,28 @@ void AccessibilityDetailedView::HandleViewClicked(views::View* view) { |
| ? ash::UMA_STATUS_AREA_DISABLE_VIRTUAL_KEYBOARD |
| : ash::UMA_STATUS_AREA_ENABLE_VIRTUAL_KEYBOARD; |
| delegate->SetVirtualKeyboardEnabled(!delegate->IsVirtualKeyboardEnabled()); |
| + } else if (caret_highlight_view_ && view == caret_highlight_view_) { |
| + user_action = delegate->IsCaretHighlightEnabled() |
| + ? ash::UMA_STATUS_AREA_DISABLE_CARET_HIGHLIGHT |
| + : ash::UMA_STATUS_AREA_ENABLE_CARET_HIGHLIGHT; |
| + delegate->SetCaretHighlightEnabled(!delegate->IsCaretHighlightEnabled()); |
| + } else if (mono_audio_view_ && view == mono_audio_view_) { |
| + user_action = delegate->IsMonoAudioEnabled() |
| + ? ash::UMA_STATUS_AREA_DISABLE_MONO_AUDIO |
| + : ash::UMA_STATUS_AREA_ENABLE_MONO_AUDIO; |
| + delegate->SetMonoAudioEnabled(!delegate->IsMonoAudioEnabled()); |
| + } else if (highlight_mouse_cursor_view_ && |
| + view == highlight_mouse_cursor_view_) { |
| + user_action = delegate->IsCursorHighlightEnabled() |
| + ? ash::UMA_STATUS_AREA_DISABLE_HIGHLIGHT_MOUSE_CURSOR |
| + : ash::UMA_STATUS_AREA_ENABLE_HIGHLIGHT_MOUSE_CURSOR; |
| + delegate->SetCursorHighlightEnabled(!delegate->IsCursorHighlightEnabled()); |
| + } else if (highlight_keyboard_focus_view_ && |
| + view == highlight_keyboard_focus_view_) { |
| + user_action = delegate->IsFocusHighlightEnabled() |
| + ? ash::UMA_STATUS_AREA_DISABLE_HIGHLIGHT_KEYBOARD_FOCUS |
| + : ash::UMA_STATUS_AREA_ENABLE_HIGHLIGHT_KEYBOARD_FOCUS; |
| + delegate->SetFocusHighlightEnabled(!delegate->IsFocusHighlightEnabled()); |
| } else { |
| return; |
| } |