15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef ASH_SYSTEM_TRAY_ACCESSIBILITY_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ASH_SYSTEM_TRAY_ACCESSIBILITY_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ash/accessibility_delegate.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shell_observer.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/tray_details_view.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/tray/tray_image_item.h" 12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ash/system/tray/tray_notification_view.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/view_click_listener.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/gtest_prod_util.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/font.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/controls/button/button.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TrayAccessibilityTest; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Button; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ImageView; 25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass Label; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class View; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash { 30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass HoverHighlightView; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SystemTrayItem; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ASH_EXPORT AccessibilityObserver { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~AccessibilityObserver() {} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notifies when accessibilty mode changes. 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnAccessibilityModeChanged( 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AccessibilityNotificationVisibility notify) = 0; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace tray { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass AccessibilityPopupView : public TrayNotificationView { 46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public: 47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AccessibilityPopupView(SystemTrayItem* owner, uint32 enabled_state_bits); 48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const views::Label* label_for_test() const { return label_; } 50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private: 52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views::Label* CreateLabel(uint32 enabled_state_bits); 53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views::Label* label_; 55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DISALLOW_COPY_AND_ASSIGN(AccessibilityPopupView); 57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class AccessibilityDetailedView : public TrayDetailsView, 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public ViewClickListener, 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public views::ButtonListener, 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public ShellObserver { 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit AccessibilityDetailedView(SystemTrayItem* owner, 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user::LoginStatus login); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~AccessibilityDetailedView() {} 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add the accessibility feature list. 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AppendAccessibilityList(); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add help entries. 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AppendHelpEntries(); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) HoverHighlightView* AddScrollListItem(const base::string16& text, 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Font::FontStyle style, 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool checked); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Overridden from ViewClickListener. 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnViewClicked(views::View* sender) OVERRIDE; 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Overridden from ButtonListener. 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void ButtonPressed(views::Button* sender, 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Event& event) OVERRIDE; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* spoken_feedback_view_; 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* high_contrast_view_; 86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) views::View* screen_magnifier_view_; 87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) views::View* large_cursor_view_; 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* help_view_; 89b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) views::View* settings_view_; 901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) views::View* autoclick_view_; 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) views::View* virtual_keyboard_view_; 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool spoken_feedback_enabled_; 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool high_contrast_enabled_; 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool screen_magnifier_enabled_; 96868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool large_cursor_enabled_; 971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool autoclick_enabled_; 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool virtual_keyboard_enabled_; 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user::LoginStatus login_; 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class chromeos::TrayAccessibilityTest; 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AccessibilityDetailedView); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace tray 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TrayAccessibility : public TrayImageItem, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public AccessibilityObserver { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit TrayAccessibility(SystemTray* system_tray); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TrayAccessibility(); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetTrayIconVisible(bool visible); 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tray::AccessibilityDetailedView* CreateDetailedMenu(); 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from TrayImageItem. 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool GetInitialVisibility() OVERRIDE; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual views::View* CreateDetailedView(user::LoginStatus status) OVERRIDE; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DestroyDefaultView() OVERRIDE; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DestroyDetailedView() OVERRIDE; 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void UpdateAfterLoginStatusChange(user::LoginStatus status) OVERRIDE; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from AccessibilityObserver. 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnAccessibilityModeChanged( 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AccessibilityNotificationVisibility notify) OVERRIDE; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View* default_; 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tray::AccessibilityPopupView* detailed_popup_; 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tray::AccessibilityDetailedView* detailed_menu_; 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 133effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Bitmap of fvalues from AccessibilityState. Can contain any or 134effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // both of A11Y_SPOKEN_FEEDBACK A11Y_BRAILLE_DISPLAY_CONNECTED. 135effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch uint32 request_popup_view_state_; 136effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool tray_icon_visible_; 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user::LoginStatus login_; 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Bitmap of values from AccessibilityState enum. 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint32 previous_accessibility_state_; 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A11y feature status on just entering the lock screen. 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool show_a11y_menu_on_lock_screen_; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class chromeos::TrayAccessibilityTest; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TrayAccessibility); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ash 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // ASH_SYSTEM_TRAY_ACCESSIBILITY_H_ 153