tray_accessibility.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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 3// found in the LICENSE file. 4 5#include "ash/system/tray_accessibility.h" 6 7#include "ash/shell.h" 8#include "ash/shell_delegate.h" 9#include "ash/system/tray/tray_constants.h" 10#include "ash/system/tray/tray_views.h" 11#include "grit/ash_resources.h" 12#include "grit/ash_strings.h" 13#include "ui/base/resource/resource_bundle.h" 14#include "ui/gfx/image/image.h" 15#include "ui/views/controls/image_view.h" 16#include "ui/views/controls/label.h" 17#include "ui/views/layout/box_layout.h" 18#include "ui/views/widget/widget.h" 19 20namespace ash { 21namespace internal { 22 23class DefaultAccessibilityView : public ActionableView { 24 public: 25 DefaultAccessibilityView() { 26 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, 27 kTrayPopupPaddingHorizontal, 28 0, 29 kTrayPopupPaddingBetweenItems)); 30 31 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 32 FixedSizedImageView* image = 33 new FixedSizedImageView(0, kTrayPopupItemHeight); 34 image->SetImage(bundle.GetImageNamed(IDR_AURA_UBER_TRAY_ACCESSIBILITY_DARK). 35 ToImageSkia()); 36 37 AddChildView(image); 38 string16 label = bundle.GetLocalizedString( 39 IDS_ASH_STATUS_TRAY_DISABLE_SPOKEN_FEEDBACK); 40 AddChildView(new views::Label(label)); 41 SetAccessibleName(label); 42 } 43 44 virtual ~DefaultAccessibilityView() {} 45 46 protected: 47 // Overridden from ActionableView. 48 virtual bool PerformAction(const ui::Event& event) OVERRIDE { 49 if (Shell::GetInstance()->delegate()->IsSpokenFeedbackEnabled()) 50 Shell::GetInstance()->delegate()->ToggleSpokenFeedback(); 51 GetWidget()->Close(); 52 return true; 53 } 54 55 private: 56 57 DISALLOW_COPY_AND_ASSIGN(DefaultAccessibilityView); 58}; 59 60TrayAccessibility::TrayAccessibility() 61 : TrayImageItem(IDR_AURA_UBER_TRAY_ACCESSIBILITY), 62 default_(NULL), 63 detailed_(NULL) { 64} 65 66TrayAccessibility::~TrayAccessibility() {} 67 68bool TrayAccessibility::GetInitialVisibility() { 69 return Shell::GetInstance()->delegate() && 70 Shell::GetInstance()->delegate()->IsSpokenFeedbackEnabled(); 71} 72 73views::View* TrayAccessibility::CreateDefaultView(user::LoginStatus status) { 74 if (!Shell::GetInstance()->delegate()->IsSpokenFeedbackEnabled()) 75 return NULL; 76 77 CHECK(default_ == NULL); 78 default_ = new DefaultAccessibilityView(); 79 80 return default_; 81} 82 83views::View* TrayAccessibility::CreateDetailedView(user::LoginStatus status) { 84 CHECK(detailed_ == NULL); 85 detailed_ = new views::View; 86 87 detailed_->SetLayoutManager(new 88 views::BoxLayout(views::BoxLayout::kHorizontal, 89 kTrayPopupPaddingHorizontal, 10, kTrayPopupPaddingBetweenItems)); 90 91 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 92 views::ImageView* image = new views::ImageView; 93 image->SetImage(bundle.GetImageNamed(IDR_AURA_UBER_TRAY_ACCESSIBILITY_DARK). 94 ToImageSkia()); 95 96 detailed_->AddChildView(image); 97 detailed_->AddChildView(new views::Label(bundle.GetLocalizedString( 98 IDS_ASH_STATUS_TRAY_ACCESSIBILITY_TURNED_ON_BUBBLE))); 99 100 return detailed_; 101} 102 103void TrayAccessibility::DestroyDefaultView() { 104 default_ = NULL; 105} 106 107void TrayAccessibility::DestroyDetailedView() { 108 detailed_ = NULL; 109} 110 111void TrayAccessibility::OnAccessibilityModeChanged(bool enabled) { 112 if (tray_view()) 113 tray_view()->SetVisible(enabled); 114 115 if (enabled) { 116 PopupDetailedView(kTrayPopupAutoCloseDelayForTextInSeconds, false); 117 } else if (detailed_) { 118 detailed_->GetWidget()->Close(); 119 } 120} 121 122} // namespace internal 123} // namespace ash 124