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

Unified Diff: ash/system/tray_accessibility.cc

Issue 2838903002: Add accessibility related notification to notification center (Closed)
Patch Set: nits Created 3 years, 7 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/system/tray_accessibility.h ('k') | chrome/browser/chromeos/system/tray_accessibility_browsertest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/system/tray_accessibility.cc
diff --git a/ash/system/tray_accessibility.cc b/ash/system/tray_accessibility.cc
index 854e81cc5ed592d6101cbfa023b5219bf0a2c25a..23b3bfa65f0f317919b0f36d8d2543675786ff2d 100644
--- a/ash/system/tray_accessibility.cc
+++ b/ash/system/tray_accessibility.cc
@@ -12,6 +12,7 @@
#include "ash/shell.h"
#include "ash/shell_port.h"
#include "ash/strings/grit/ash_strings.h"
+#include "ash/system/system_notifier.h"
#include "ash/system/tray/hover_highlight_view.h"
#include "ash/system/tray/system_tray.h"
#include "ash/system/tray/system_tray_controller.h"
@@ -19,28 +20,23 @@
#include "ash/system/tray/tray_constants.h"
#include "ash/system/tray/tray_details_view.h"
#include "ash/system/tray/tray_item_more.h"
-#include "ash/system/tray/tray_popup_item_style.h"
#include "ash/system/tray/tray_popup_utils.h"
#include "ash/system/tray/tri_view.h"
-#include "base/strings/utf_string_conversions.h"
#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/image/image.h"
#include "ui/gfx/paint_vector_icon.h"
+#include "ui/gfx/vector_icon_types.h"
+#include "ui/message_center/message_center.h"
#include "ui/native_theme/native_theme.h"
#include "ui/resources/grit/ui_resources.h"
-#include "ui/views/background.h"
-#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/layout/grid_layout.h"
#include "ui/views/widget/widget.h"
namespace ash {
namespace {
+const char kNotificationId[] = "chrome://settings/accessibility";
+
enum AccessibilityState {
A11Y_NONE = 0,
A11Y_SPOKEN_FEEDBACK = 1 << 0,
@@ -94,6 +90,17 @@ LoginStatus GetCurrentLoginStatus() {
return Shell::Get()->session_controller()->login_status();
}
+// Returns notification icon based on the enabled accessibility state.
+const gfx::VectorIcon& GetNotificationIcon(uint32_t enabled_accessibility) {
+ if ((enabled_accessibility & A11Y_BRAILLE_DISPLAY_CONNECTED) &&
+ (enabled_accessibility & A11Y_SPOKEN_FEEDBACK)) {
+ return kSystemMenuAccessibilityIcon;
+ }
+ if (enabled_accessibility & A11Y_BRAILLE_DISPLAY_CONNECTED)
+ return kNotificationAccessibilityBrailleIcon;
+ return kSystemMenuAccessibilityChromevoxIcon;
+}
+
} // namespace
namespace tray {
@@ -125,84 +132,6 @@ class DefaultAccessibilityView : public TrayItemMore {
};
////////////////////////////////////////////////////////////////////////////////
-// ash::tray::AccessibilityPopupView
-
-AccessibilityPopupView::AccessibilityPopupView(uint32_t enabled_state_bits)
- : label_(CreateLabel(enabled_state_bits)) {}
-
-void AccessibilityPopupView::Init() {
- set_background(views::Background::CreateThemedSolidBackground(
- this, ui::NativeTheme::kColorId_BubbleBackground));
-
- views::GridLayout* layout = new views::GridLayout(this);
- SetLayoutManager(layout);
-
- views::ImageView* close_button = new views::ImageView();
- close_button->SetImage(
- ResourceBundle::GetSharedInstance().GetImageSkiaNamed(IDR_MESSAGE_CLOSE));
- close_button->SetHorizontalAlignment(views::ImageView::CENTER);
- close_button->SetVerticalAlignment(views::ImageView::CENTER);
-
- views::ImageView* icon = new views::ImageView;
- icon->SetImage(
- gfx::CreateVectorIcon(kSystemMenuAccessibilityIcon, kMenuIconColor));
-
- views::ColumnSet* columns = layout->AddColumnSet(0);
-
- columns->AddPaddingColumn(0, kTrayPopupPaddingHorizontal / 2);
-
- // Icon
- columns->AddColumn(views::GridLayout::CENTER, views::GridLayout::CENTER,
- 0, /* resize percent */
- views::GridLayout::FIXED, kNotificationIconWidth,
- kNotificationIconWidth);
-
- columns->AddPaddingColumn(0, kTrayPopupPaddingHorizontal / 2);
-
- // Contents
- columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL,
- 100, /* resize percent */
- views::GridLayout::FIXED, kTrayNotificationContentsWidth,
- kTrayNotificationContentsWidth);
-
- columns->AddPaddingColumn(0, kTrayPopupPaddingHorizontal / 2);
-
- // Close button
- columns->AddColumn(views::GridLayout::CENTER, views::GridLayout::LEADING,
- 0, /* resize percent */
- views::GridLayout::FIXED, kNotificationButtonWidth,
- kNotificationButtonWidth);
-
- // Layout rows
- layout->AddPaddingRow(0, kTrayPopupPaddingBetweenItems);
- layout->StartRow(0, 0);
- layout->AddView(icon);
- layout->AddView(label_);
- layout->AddView(close_button);
- layout->AddPaddingRow(0, kTrayPopupPaddingBetweenItems);
-}
-
-views::Label* AccessibilityPopupView::CreateLabel(uint32_t enabled_state_bits) {
- DCHECK((enabled_state_bits &
- (A11Y_SPOKEN_FEEDBACK | A11Y_BRAILLE_DISPLAY_CONNECTED)) != 0);
- base::string16 text;
- if (enabled_state_bits & A11Y_BRAILLE_DISPLAY_CONNECTED) {
- text.append(l10n_util::GetStringUTF16(
- IDS_ASH_STATUS_TRAY_BRAILLE_DISPLAY_CONNECTED_BUBBLE));
- }
- if (enabled_state_bits & A11Y_SPOKEN_FEEDBACK) {
- if (!text.empty())
- text.append(base::ASCIIToUTF16(" "));
- text.append(l10n_util::GetStringUTF16(
- IDS_ASH_STATUS_TRAY_SPOKEN_FEEDBACK_ENABLED_BUBBLE));
- }
- views::Label* label = new views::Label(text);
- label->SetMultiLine(true);
- label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
- return label;
-}
-
-////////////////////////////////////////////////////////////////////////////////
// ash::tray::AccessibilityDetailedView
AccessibilityDetailedView::AccessibilityDetailedView(SystemTrayItem* owner)
@@ -305,65 +234,65 @@ void AccessibilityDetailedView::HandleViewClicked(views::View* view) {
UserMetricsAction user_action;
if (view == spoken_feedback_view_) {
user_action = delegate->IsSpokenFeedbackEnabled()
- ? ash::UMA_STATUS_AREA_DISABLE_SPOKEN_FEEDBACK
- : ash::UMA_STATUS_AREA_ENABLE_SPOKEN_FEEDBACK;
+ ? UMA_STATUS_AREA_DISABLE_SPOKEN_FEEDBACK
+ : UMA_STATUS_AREA_ENABLE_SPOKEN_FEEDBACK;
delegate->ToggleSpokenFeedback(A11Y_NOTIFICATION_NONE);
} else if (view == high_contrast_view_) {
user_action = delegate->IsHighContrastEnabled()
- ? ash::UMA_STATUS_AREA_DISABLE_HIGH_CONTRAST
- : ash::UMA_STATUS_AREA_ENABLE_HIGH_CONTRAST;
+ ? UMA_STATUS_AREA_DISABLE_HIGH_CONTRAST
+ : UMA_STATUS_AREA_ENABLE_HIGH_CONTRAST;
delegate->ToggleHighContrast();
} else if (view == screen_magnifier_view_) {
user_action = delegate->IsMagnifierEnabled()
- ? ash::UMA_STATUS_AREA_DISABLE_MAGNIFIER
- : ash::UMA_STATUS_AREA_ENABLE_MAGNIFIER;
+ ? UMA_STATUS_AREA_DISABLE_MAGNIFIER
+ : UMA_STATUS_AREA_ENABLE_MAGNIFIER;
delegate->SetMagnifierEnabled(!delegate->IsMagnifierEnabled());
} else if (large_cursor_view_ && view == large_cursor_view_) {
user_action = delegate->IsLargeCursorEnabled()
- ? ash::UMA_STATUS_AREA_DISABLE_LARGE_CURSOR
- : ash::UMA_STATUS_AREA_ENABLE_LARGE_CURSOR;
+ ? UMA_STATUS_AREA_DISABLE_LARGE_CURSOR
+ : UMA_STATUS_AREA_ENABLE_LARGE_CURSOR;
delegate->SetLargeCursorEnabled(!delegate->IsLargeCursorEnabled());
} else if (autoclick_view_ && view == autoclick_view_) {
user_action = delegate->IsAutoclickEnabled()
- ? ash::UMA_STATUS_AREA_DISABLE_AUTO_CLICK
- : ash::UMA_STATUS_AREA_ENABLE_AUTO_CLICK;
+ ? UMA_STATUS_AREA_DISABLE_AUTO_CLICK
+ : UMA_STATUS_AREA_ENABLE_AUTO_CLICK;
delegate->SetAutoclickEnabled(!delegate->IsAutoclickEnabled());
} else if (virtual_keyboard_view_ && view == virtual_keyboard_view_) {
user_action = delegate->IsVirtualKeyboardEnabled()
- ? ash::UMA_STATUS_AREA_DISABLE_VIRTUAL_KEYBOARD
- : ash::UMA_STATUS_AREA_ENABLE_VIRTUAL_KEYBOARD;
+ ? UMA_STATUS_AREA_DISABLE_VIRTUAL_KEYBOARD
+ : 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;
+ ? UMA_STATUS_AREA_DISABLE_CARET_HIGHLIGHT
+ : 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;
+ ? UMA_STATUS_AREA_DISABLE_MONO_AUDIO
+ : 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;
+ ? UMA_STATUS_AREA_DISABLE_HIGHLIGHT_MOUSE_CURSOR
+ : 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;
+ ? UMA_STATUS_AREA_DISABLE_HIGHLIGHT_KEYBOARD_FOCUS
+ : UMA_STATUS_AREA_ENABLE_HIGHLIGHT_KEYBOARD_FOCUS;
delegate->SetFocusHighlightEnabled(!delegate->IsFocusHighlightEnabled());
} else if (sticky_keys_view_ && view == sticky_keys_view_) {
user_action = delegate->IsStickyKeysEnabled()
- ? ash::UMA_STATUS_AREA_DISABLE_STICKY_KEYS
- : ash::UMA_STATUS_AREA_ENABLE_STICKY_KEYS;
+ ? UMA_STATUS_AREA_DISABLE_STICKY_KEYS
+ : UMA_STATUS_AREA_ENABLE_STICKY_KEYS;
delegate->SetStickyKeysEnabled(!delegate->IsStickyKeysEnabled());
} else if (tap_dragging_view_ && view == tap_dragging_view_) {
user_action = delegate->IsTapDraggingEnabled()
- ? ash::UMA_STATUS_AREA_DISABLE_TAP_DRAGGING
- : ash::UMA_STATUS_AREA_ENABLE_TAP_DRAGGING;
+ ? UMA_STATUS_AREA_DISABLE_TAP_DRAGGING
+ : UMA_STATUS_AREA_ENABLE_TAP_DRAGGING;
delegate->SetTapDraggingEnabled(!delegate->IsTapDraggingEnabled());
} else {
return;
@@ -416,9 +345,7 @@ TrayAccessibility::TrayAccessibility(SystemTray* system_tray)
kSystemTrayAccessibilityIcon,
UMA_ACCESSIBILITY),
default_(NULL),
- detailed_popup_(NULL),
detailed_menu_(NULL),
- request_popup_view_state_(A11Y_NONE),
tray_icon_visible_(false),
login_(GetCurrentLoginStatus()),
previous_accessibility_state_(GetAccessibilityState()),
@@ -469,21 +396,12 @@ views::View* TrayAccessibility::CreateDefaultView(LoginStatus status) {
}
views::View* TrayAccessibility::CreateDetailedView(LoginStatus status) {
- CHECK(detailed_popup_ == NULL);
CHECK(detailed_menu_ == NULL);
- if (request_popup_view_state_) {
- detailed_popup_ =
- new tray::AccessibilityPopupView(request_popup_view_state_);
- detailed_popup_->Init();
- request_popup_view_state_ = A11Y_NONE;
- return detailed_popup_;
- } else {
- ShellPort::Get()->RecordUserMetricsAction(
- ash::UMA_STATUS_AREA_DETAILED_ACCESSABILITY);
- detailed_menu_ = CreateDetailedMenu();
- return detailed_menu_;
- }
+ ShellPort::Get()->RecordUserMetricsAction(
+ UMA_STATUS_AREA_DETAILED_ACCESSIBILITY);
+ detailed_menu_ = CreateDetailedMenu();
+ return detailed_menu_;
}
void TrayAccessibility::DestroyDefaultView() {
@@ -491,7 +409,6 @@ void TrayAccessibility::DestroyDefaultView() {
}
void TrayAccessibility::DestroyDetailedView() {
- detailed_popup_ = NULL;
detailed_menu_ = NULL;
}
@@ -516,23 +433,55 @@ void TrayAccessibility::OnAccessibilityModeChanged(
// return early if there's no change in the state that we keep track of.
if (accessibility_state == previous_accessibility_state_)
return;
+
+ if (detailed_menu_)
+ detailed_menu_->GetWidget()->Close();
+
+ message_center::MessageCenter* message_center =
+ message_center::MessageCenter::Get();
+ message_center->RemoveNotification(kNotificationId, false /* by_user */);
+
// Contains bits for spoken feedback and braille display connected currently
// being enabled.
uint32_t being_enabled =
(accessibility_state & ~previous_accessibility_state_) &
(A11Y_SPOKEN_FEEDBACK | A11Y_BRAILLE_DISPLAY_CONNECTED);
- if ((notify == A11Y_NOTIFICATION_SHOW) && being_enabled != A11Y_NONE) {
- // Shows popup if |notify| is true and the spoken feedback is being enabled.
- request_popup_view_state_ = being_enabled;
- ShowDetailedView(kTrayPopupAutoCloseDelayForTextInSeconds, false);
+ previous_accessibility_state_ = accessibility_state;
+
+ // Shows notification if |notify| is true and the spoken feedback is being
+ // enabled or if a braille display is connected.
+ if (notify != A11Y_NOTIFICATION_SHOW || being_enabled == A11Y_NONE)
+ return;
+
+ base::string16 text;
+ base::string16 title;
+ if (being_enabled & A11Y_BRAILLE_DISPLAY_CONNECTED &&
+ being_enabled & A11Y_SPOKEN_FEEDBACK) {
+ text =
+ l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_SPOKEN_FEEDBACK_ENABLED);
+ title = l10n_util::GetStringUTF16(
+ IDS_ASH_STATUS_TRAY_SPOKEN_FEEDBACK_BRAILLE_ENABLED_TITLE);
+ } else if (being_enabled & A11Y_BRAILLE_DISPLAY_CONNECTED) {
+ text = l10n_util::GetStringUTF16(
+ IDS_ASH_STATUS_TRAY_BRAILLE_DISPLAY_CONNECTED);
} else {
- if (detailed_popup_)
- detailed_popup_->GetWidget()->Close();
- if (detailed_menu_)
- detailed_menu_->GetWidget()->Close();
+ title = l10n_util::GetStringUTF16(
+ IDS_ASH_STATUS_TRAY_SPOKEN_FEEDBACK_ENABLED_TITLE);
+ text =
+ l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_SPOKEN_FEEDBACK_ENABLED);
}
- previous_accessibility_state_ = accessibility_state;
+ std::unique_ptr<message_center::Notification> notification =
+ base::MakeUnique<message_center::Notification>(
+ message_center::NOTIFICATION_TYPE_SIMPLE, kNotificationId, title,
+ text,
+ gfx::Image(gfx::CreateVectorIcon(GetNotificationIcon(being_enabled),
+ kMenuIconSize, kMenuIconColor)),
+ base::string16(), GURL(),
+ message_center::NotifierId(message_center::NotifierId::APPLICATION,
+ system_notifier::kNotifierAccessibility),
+ message_center::RichNotificationData(), nullptr);
+ message_center->AddNotification(std::move(notification));
}
} // namespace ash
« no previous file with comments | « ash/system/tray_accessibility.h ('k') | chrome/browser/chromeos/system/tray_accessibility_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698