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..3e3a794922cbbd24caf01f90e506da1a63d83a25 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; |
} |
@@ -74,6 +87,19 @@ LoginStatus GetCurrentLoginStatus() { |
return Shell::Get()->system_tray_delegate()->GetUserLoginStatus(); |
} |
+void UpdateCheckMark(HoverHighlightView* container, bool checked) { |
tdanderson
2017/03/29 18:57:03
Thanks for moving this into a helper function.
It
|
+ 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); |
+ } else { |
+ container->SetAccessiblityState( |
+ HoverHighlightView::AccessibilityState::UNCHECKED_CHECKBOX); |
+ } |
+} |
xiyuan
2017/03/29 17:59:07
nit: insert a blank line after this line
|
} // namespace |
namespace tray { |
@@ -139,20 +165,6 @@ views::Label* AccessibilityPopupView::CreateLabel(uint32_t enabled_state_bits) { |
AccessibilityDetailedView::AccessibilityDetailedView(SystemTrayItem* owner, |
LoginStatus login) |
: TrayDetailsView(owner), |
- spoken_feedback_view_(nullptr), |
- high_contrast_view_(nullptr), |
- screen_magnifier_view_(nullptr), |
- large_cursor_view_(nullptr), |
- help_view_(nullptr), |
- settings_view_(nullptr), |
- autoclick_view_(nullptr), |
- virtual_keyboard_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), |
login_(login) { |
Reset(); |
AppendAccessibilityList(); |
@@ -173,16 +185,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) { |
- 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 +198,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 +210,41 @@ void AccessibilityDetailedView::AppendAccessibilityList() { |
IDS_ASH_STATUS_TRAY_ACCESSIBILITY_VIRTUAL_KEYBOARD), |
virtual_keyboard_enabled_, virtual_keyboard_enabled_, |
kSystemMenuKeyboardIcon); |
+ |
+ AddSubHeader(l10n_util::GetStringUTF16( |
+ 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_); |
+ |
+ // Focus highlighting can't be on when spoken |
+ // feedback is on because ChromeVox does its own focus highlighting. |
tdanderson
2017/03/29 18:57:03
Thanks for adding this comment, it's very helpful.
|
+ if (!spoken_feedback_enabled_) { |
+ 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,22 +259,39 @@ HoverHighlightView* AccessibilityDetailedView::AddScrollListItem( |
image, text, highlight, image.width() + kMenuSeparatorVerticalPadding * 2, |
padding, padding); |
- 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); |
- } else { |
- container->SetAccessiblityState( |
- HoverHighlightView::AccessibilityState::UNCHECKED_CHECKBOX); |
- } |
+ UpdateCheckMark(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); |
+ |
+ UpdateCheckMark(container, checked); |
+ |
+ scroll_content()->AddChildView(container); |
+ return container; |
+} |
+ |
+void AccessibilityDetailedView::AddSubHeader( |
+ const base::string16& header_text) { |
+ TriView* header = TrayPopupUtils::CreateSubHeaderRowView(); |
+ TrayPopupUtils::ConfigureAsStickyHeader(header); |
+ |
+ views::Label* label = TrayPopupUtils::CreateDefaultLabel(); |
+ label->SetText(header_text); |
+ TrayPopupItemStyle style(TrayPopupItemStyle::FontStyle::SUB_HEADER); |
+ style.SetupLabel(label); |
+ header->AddView(TriView::Container::CENTER, label); |
+ |
+ scroll_content()->AddChildView(new views::Separator()); |
tdanderson
2017/03/29 18:57:03
Just instantiating a Separator() will not end up g
|
+ scroll_content()->AddChildView(header); |
+} |
+ |
void AccessibilityDetailedView::HandleViewClicked(views::View* view) { |
AccessibilityDelegate* delegate = |
Shell::GetInstance()->accessibility_delegate(); |
@@ -275,6 +326,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; |
} |