| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "ash/system/tray_accessibility.h" | 5 #include "ash/system/tray_accessibility.h" |
| 6 | 6 |
| 7 #include "ash/shell.h" | 7 #include "ash/shell.h" |
| 8 #include "ash/shell_delegate.h" | 8 #include "ash/shell_delegate.h" |
| 9 #include "ash/system/tray/hover_highlight_view.h" | 9 #include "ash/system/tray/hover_highlight_view.h" |
| 10 #include "ash/system/tray/system_tray.h" | 10 #include "ash/system/tray/system_tray.h" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 namespace internal { | 29 namespace internal { |
| 30 | 30 |
| 31 namespace { | 31 namespace { |
| 32 const int kPaddingAroundBottomRow = 5; | 32 const int kPaddingAroundBottomRow = 5; |
| 33 | 33 |
| 34 enum AccessibilityState { | 34 enum AccessibilityState { |
| 35 A11Y_NONE = 0, | 35 A11Y_NONE = 0, |
| 36 A11Y_SPOKEN_FEEDBACK = 1 << 0, | 36 A11Y_SPOKEN_FEEDBACK = 1 << 0, |
| 37 A11Y_HIGH_CONTRAST = 1 << 1, | 37 A11Y_HIGH_CONTRAST = 1 << 1, |
| 38 A11Y_SCREEN_MAGNIFIER = 1 << 2, | 38 A11Y_SCREEN_MAGNIFIER = 1 << 2, |
| 39 A11Y_LARGE_CURSOR = 1 << 3, |
| 39 }; | 40 }; |
| 40 | 41 |
| 41 uint32 GetAccessibilityState() { | 42 uint32 GetAccessibilityState() { |
| 42 ShellDelegate* shell_delegate = Shell::GetInstance()->delegate(); | 43 ShellDelegate* shell_delegate = Shell::GetInstance()->delegate(); |
| 43 uint32 state = A11Y_NONE; | 44 uint32 state = A11Y_NONE; |
| 44 if (shell_delegate->IsSpokenFeedbackEnabled()) | 45 if (shell_delegate->IsSpokenFeedbackEnabled()) |
| 45 state |= A11Y_SPOKEN_FEEDBACK; | 46 state |= A11Y_SPOKEN_FEEDBACK; |
| 46 if (shell_delegate->IsHighContrastEnabled()) | 47 if (shell_delegate->IsHighContrastEnabled()) |
| 47 state |= A11Y_HIGH_CONTRAST; | 48 state |= A11Y_HIGH_CONTRAST; |
| 48 if (shell_delegate->IsMagnifierEnabled()) | 49 if (shell_delegate->IsMagnifierEnabled()) |
| 49 state |= A11Y_SCREEN_MAGNIFIER; | 50 state |= A11Y_SCREEN_MAGNIFIER; |
| 51 if (shell_delegate->IsLargeCursorEnabled()) |
| 52 state |= A11Y_LARGE_CURSOR; |
| 50 return state; | 53 return state; |
| 51 } | 54 } |
| 52 | 55 |
| 53 user::LoginStatus GetCurrentLoginStatus() { | 56 user::LoginStatus GetCurrentLoginStatus() { |
| 54 return Shell::GetInstance()->system_tray_delegate()->GetUserLoginStatus(); | 57 return Shell::GetInstance()->system_tray_delegate()->GetUserLoginStatus(); |
| 55 } | 58 } |
| 56 | 59 |
| 57 } // namespace | 60 } // namespace |
| 58 | 61 |
| 59 namespace tray { | 62 namespace tray { |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 | 103 |
| 101 //////////////////////////////////////////////////////////////////////////////// | 104 //////////////////////////////////////////////////////////////////////////////// |
| 102 // ash::internal::tray::AccessibilityDetailedView | 105 // ash::internal::tray::AccessibilityDetailedView |
| 103 | 106 |
| 104 AccessibilityDetailedView::AccessibilityDetailedView( | 107 AccessibilityDetailedView::AccessibilityDetailedView( |
| 105 SystemTrayItem* owner, user::LoginStatus login) : | 108 SystemTrayItem* owner, user::LoginStatus login) : |
| 106 TrayDetailsView(owner), | 109 TrayDetailsView(owner), |
| 107 spoken_feedback_view_(NULL), | 110 spoken_feedback_view_(NULL), |
| 108 high_contrast_view_(NULL), | 111 high_contrast_view_(NULL), |
| 109 screen_magnifier_view_(NULL), | 112 screen_magnifier_view_(NULL), |
| 113 large_cursor_view_(NULL), |
| 110 help_view_(NULL), | 114 help_view_(NULL), |
| 111 settings_view_(NULL), | 115 settings_view_(NULL), |
| 112 spoken_feedback_enabled_(false), | 116 spoken_feedback_enabled_(false), |
| 113 high_contrast_enabled_(false), | 117 high_contrast_enabled_(false), |
| 114 screen_magnifier_enabled_(false), | 118 screen_magnifier_enabled_(false), |
| 119 large_cursor_enabled_(false), |
| 115 login_(login) { | 120 login_(login) { |
| 116 | 121 |
| 117 Reset(); | 122 Reset(); |
| 118 | 123 |
| 119 AppendAccessibilityList(); | 124 AppendAccessibilityList(); |
| 120 AppendHelpEntries(); | 125 AppendHelpEntries(); |
| 121 CreateSpecialRow(IDS_ASH_STATUS_TRAY_ACCESSIBILITY_TITLE, this); | 126 CreateSpecialRow(IDS_ASH_STATUS_TRAY_ACCESSIBILITY_TITLE, this); |
| 122 | 127 |
| 123 Layout(); | 128 Layout(); |
| 124 } | 129 } |
| 125 | 130 |
| 126 void AccessibilityDetailedView::AppendAccessibilityList() { | 131 void AccessibilityDetailedView::AppendAccessibilityList() { |
| 127 CreateScrollableList(); | 132 CreateScrollableList(); |
| 128 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); | 133 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
| 129 | 134 |
| 130 ShellDelegate* shell_delegate = Shell::GetInstance()->delegate(); | 135 ShellDelegate* shell_delegate = Shell::GetInstance()->delegate(); |
| 131 spoken_feedback_enabled_ = shell_delegate->IsSpokenFeedbackEnabled(); | 136 spoken_feedback_enabled_ = shell_delegate->IsSpokenFeedbackEnabled(); |
| 132 spoken_feedback_view_ = AddScrollListItem( | 137 spoken_feedback_view_ = AddScrollListItem( |
| 133 bundle.GetLocalizedString( | 138 bundle.GetLocalizedString( |
| 134 IDS_ASH_STATUS_TRAY_ACCESSIBILITY_SPOKEN_FEEDBACK), | 139 IDS_ASH_STATUS_TRAY_ACCESSIBILITY_SPOKEN_FEEDBACK), |
| 135 spoken_feedback_enabled_ ? gfx::Font::BOLD : gfx::Font::NORMAL, | 140 spoken_feedback_enabled_ ? gfx::Font::BOLD : gfx::Font::NORMAL, |
| 136 spoken_feedback_enabled_); | 141 spoken_feedback_enabled_); |
| 142 |
| 143 // Large Cursor item is shown only in Login screen. |
| 144 if (login_ == user::LOGGED_IN_NONE) { |
| 145 large_cursor_enabled_ = shell_delegate->IsLargeCursorEnabled(); |
| 146 large_cursor_view_ = AddScrollListItem( |
| 147 bundle.GetLocalizedString( |
| 148 IDS_ASH_STATUS_TRAY_ACCESSIBILITY_LARGE_CURSOR), |
| 149 large_cursor_enabled_ ? gfx::Font::BOLD : gfx::Font::NORMAL, |
| 150 large_cursor_enabled_); |
| 151 } |
| 152 |
| 137 high_contrast_enabled_ = shell_delegate->IsHighContrastEnabled(); | 153 high_contrast_enabled_ = shell_delegate->IsHighContrastEnabled(); |
| 138 high_contrast_view_ = AddScrollListItem( | 154 high_contrast_view_ = AddScrollListItem( |
| 139 bundle.GetLocalizedString( | 155 bundle.GetLocalizedString( |
| 140 IDS_ASH_STATUS_TRAY_ACCESSIBILITY_HIGH_CONTRAST_MODE), | 156 IDS_ASH_STATUS_TRAY_ACCESSIBILITY_HIGH_CONTRAST_MODE), |
| 141 high_contrast_enabled_ ? gfx::Font::BOLD : gfx::Font::NORMAL, | 157 high_contrast_enabled_ ? gfx::Font::BOLD : gfx::Font::NORMAL, |
| 142 high_contrast_enabled_); | 158 high_contrast_enabled_); |
| 143 screen_magnifier_enabled_ = shell_delegate->IsMagnifierEnabled(); | 159 screen_magnifier_enabled_ = shell_delegate->IsMagnifierEnabled(); |
| 144 screen_magnifier_view_ = AddScrollListItem( | 160 screen_magnifier_view_ = AddScrollListItem( |
| 145 bundle.GetLocalizedString( | 161 bundle.GetLocalizedString( |
| 146 IDS_ASH_STATUS_TRAY_ACCESSIBILITY_SCREEN_MAGNIFIER), | 162 IDS_ASH_STATUS_TRAY_ACCESSIBILITY_SCREEN_MAGNIFIER), |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 196 void AccessibilityDetailedView::OnViewClicked(views::View* sender) { | 212 void AccessibilityDetailedView::OnViewClicked(views::View* sender) { |
| 197 ShellDelegate* shell_delegate = Shell::GetInstance()->delegate(); | 213 ShellDelegate* shell_delegate = Shell::GetInstance()->delegate(); |
| 198 if (sender == footer()->content()) { | 214 if (sender == footer()->content()) { |
| 199 owner()->system_tray()->ShowDefaultView(BUBBLE_USE_EXISTING); | 215 owner()->system_tray()->ShowDefaultView(BUBBLE_USE_EXISTING); |
| 200 } else if (sender == spoken_feedback_view_) { | 216 } else if (sender == spoken_feedback_view_) { |
| 201 shell_delegate->ToggleSpokenFeedback(ash::A11Y_NOTIFICATION_NONE); | 217 shell_delegate->ToggleSpokenFeedback(ash::A11Y_NOTIFICATION_NONE); |
| 202 } else if (sender == high_contrast_view_) { | 218 } else if (sender == high_contrast_view_) { |
| 203 shell_delegate->ToggleHighContrast(); | 219 shell_delegate->ToggleHighContrast(); |
| 204 } else if (sender == screen_magnifier_view_) { | 220 } else if (sender == screen_magnifier_view_) { |
| 205 shell_delegate->SetMagnifierEnabled(!shell_delegate->IsMagnifierEnabled()); | 221 shell_delegate->SetMagnifierEnabled(!shell_delegate->IsMagnifierEnabled()); |
| 222 } else if (large_cursor_view_ && sender == large_cursor_view_) { |
| 223 shell_delegate-> |
| 224 SetLargeCursorEnabled(!shell_delegate->IsLargeCursorEnabled()); |
| 206 } | 225 } |
| 207 } | 226 } |
| 208 | 227 |
| 209 void AccessibilityDetailedView::ButtonPressed(views::Button* sender, | 228 void AccessibilityDetailedView::ButtonPressed(views::Button* sender, |
| 210 const ui::Event& event) { | 229 const ui::Event& event) { |
| 211 SystemTrayDelegate* tray_delegate = | 230 SystemTrayDelegate* tray_delegate = |
| 212 Shell::GetInstance()->system_tray_delegate(); | 231 Shell::GetInstance()->system_tray_delegate(); |
| 213 if (sender == help_view_) | 232 if (sender == help_view_) |
| 214 tray_delegate->ShowAccessibilityHelp(); | 233 tray_delegate->ShowAccessibilityHelp(); |
| 215 else if (sender == settings_view_) | 234 else if (sender == settings_view_) |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 | 272 |
| 254 bool TrayAccessibility::GetInitialVisibility() { | 273 bool TrayAccessibility::GetInitialVisibility() { |
| 255 // Shows accessibility icon if any accessibility feature is enabled. | 274 // Shows accessibility icon if any accessibility feature is enabled. |
| 256 // Otherwise, doen't show it. | 275 // Otherwise, doen't show it. |
| 257 return GetAccessibilityState() != A11Y_NONE; | 276 return GetAccessibilityState() != A11Y_NONE; |
| 258 } | 277 } |
| 259 | 278 |
| 260 views::View* TrayAccessibility::CreateDefaultView(user::LoginStatus status) { | 279 views::View* TrayAccessibility::CreateDefaultView(user::LoginStatus status) { |
| 261 CHECK(default_ == NULL); | 280 CHECK(default_ == NULL); |
| 262 | 281 |
| 263 login_ = status; | |
| 264 | |
| 265 // Shows accessibility menu if: | 282 // Shows accessibility menu if: |
| 266 // - on login screen (not logged in); | 283 // - on login screen (not logged in); |
| 267 // - "Enable accessibility menu" on chrome://settings is checked; | 284 // - "Enable accessibility menu" on chrome://settings is checked; |
| 268 // - or any of accessibility features is enabled | 285 // - or any of accessibility features is enabled |
| 269 // Otherwise, not shows it. | 286 // Otherwise, not shows it. |
| 270 ShellDelegate* delegate = Shell::GetInstance()->delegate(); | 287 ShellDelegate* delegate = Shell::GetInstance()->delegate(); |
| 271 if (login_ != user::LOGGED_IN_NONE && | 288 if (login_ != user::LOGGED_IN_NONE && |
| 272 !delegate->ShouldAlwaysShowAccessibilityMenu() && | 289 !delegate->ShouldAlwaysShowAccessibilityMenu() && |
| 273 // On login screen, keeps the initial visivility of the menu. | 290 // On login screen, keeps the initial visivility of the menu. |
| 274 (status != user::LOGGED_IN_LOCKED || !show_a11y_menu_on_lock_screen_) && | 291 (status != user::LOGGED_IN_LOCKED || !show_a11y_menu_on_lock_screen_) && |
| 275 GetAccessibilityState() == A11Y_NONE) | 292 GetAccessibilityState() == A11Y_NONE) |
| 276 return NULL; | 293 return NULL; |
| 277 | 294 |
| 278 CHECK(default_ == NULL); | 295 CHECK(default_ == NULL); |
| 279 default_ = new tray::DefaultAccessibilityView(this); | 296 default_ = new tray::DefaultAccessibilityView(this); |
| 280 | 297 |
| 281 return default_; | 298 return default_; |
| 282 } | 299 } |
| 283 | 300 |
| 284 views::View* TrayAccessibility::CreateDetailedView(user::LoginStatus status) { | 301 views::View* TrayAccessibility::CreateDetailedView(user::LoginStatus status) { |
| 285 CHECK(detailed_popup_ == NULL); | 302 CHECK(detailed_popup_ == NULL); |
| 286 CHECK(detailed_menu_ == NULL); | 303 CHECK(detailed_menu_ == NULL); |
| 287 | 304 |
| 288 login_ = status; | |
| 289 | |
| 290 if (request_popup_view_) { | 305 if (request_popup_view_) { |
| 291 detailed_popup_ = new tray::AccessibilityPopupView(this); | 306 detailed_popup_ = new tray::AccessibilityPopupView(this); |
| 292 request_popup_view_ = false; | 307 request_popup_view_ = false; |
| 293 return detailed_popup_; | 308 return detailed_popup_; |
| 294 } else { | 309 } else { |
| 295 detailed_menu_ = CreateDetailedMenu(); | 310 detailed_menu_ = CreateDetailedMenu(); |
| 296 return detailed_menu_; | 311 return detailed_menu_; |
| 297 } | 312 } |
| 298 } | 313 } |
| 299 | 314 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 331 detailed_popup_->GetWidget()->Close(); | 346 detailed_popup_->GetWidget()->Close(); |
| 332 if (detailed_menu_) | 347 if (detailed_menu_) |
| 333 detailed_menu_->GetWidget()->Close(); | 348 detailed_menu_->GetWidget()->Close(); |
| 334 } | 349 } |
| 335 | 350 |
| 336 previous_accessibility_state_ = accessibility_state; | 351 previous_accessibility_state_ = accessibility_state; |
| 337 } | 352 } |
| 338 | 353 |
| 339 } // namespace internal | 354 } // namespace internal |
| 340 } // namespace ash | 355 } // namespace ash |
| OLD | NEW |