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

Unified Diff: ash/common/system/tray_accessibility.cc

Issue 2771963002: List all a11y featuers in ash system menu (Closed)
Patch Set: Fix typo. Created 3 years, 9 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
« no previous file with comments | « ash/common/system/tray_accessibility.h ('k') | ash/metrics/user_metrics_recorder.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..0080f8acf37b4be27c907465a7baddd9b00c27da 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,20 @@ LoginStatus GetCurrentLoginStatus() {
return Shell::Get()->system_tray_delegate()->GetUserLoginStatus();
}
+void UpdateCheckMark(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);
+ } else {
+ container->SetAccessiblityState(
+ HoverHighlightView::AccessibilityState::UNCHECKED_CHECKBOX);
+ }
+}
+
} // namespace
namespace tray {
@@ -139,20 +166,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 +186,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 +199,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 +211,44 @@ void AccessibilityDetailedView::AppendAccessibilityList() {
IDS_ASH_STATUS_TRAY_ACCESSIBILITY_VIRTUAL_KEYBOARD),
virtual_keyboard_enabled_, virtual_keyboard_enabled_,
kSystemMenuKeyboardIcon);
+
+ scroll_content()->AddChildView(
+ TrayPopupUtils::CreateListSubHeaderSeparator());
+
+ 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.
+ 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 +263,38 @@ 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(header);
+}
+
void AccessibilityDetailedView::HandleViewClicked(views::View* view) {
AccessibilityDelegate* delegate =
Shell::GetInstance()->accessibility_delegate();
@@ -275,6 +329,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;
}
« no previous file with comments | « ash/common/system/tray_accessibility.h ('k') | ash/metrics/user_metrics_recorder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698