tray_accessibility.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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)#include "ash/system/tray_accessibility.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell_delegate.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/tray/tray_constants.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/tray/tray_views.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/ash_resources.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/ash_strings.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/image_view.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/label.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/box_layout.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internal { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DefaultAccessibilityView : public ActionableView { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DefaultAccessibilityView() { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTrayPopupPaddingHorizontal, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTrayPopupPaddingBetweenItems)); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FixedSizedImageView* image = 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new FixedSizedImageView(0, kTrayPopupItemHeight); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) image->SetImage(bundle.GetImageNamed(IDR_AURA_UBER_TRAY_ACCESSIBILITY_DARK). 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ToImageSkia()); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddChildView(image); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 label = bundle.GetLocalizedString( 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_ASH_STATUS_TRAY_DISABLE_SPOKEN_FEEDBACK); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddChildView(new views::Label(label)); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetAccessibleName(label); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DefaultAccessibilityView() {} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from ActionableView. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool PerformAction(const ui::Event& event) OVERRIDE { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (Shell::GetInstance()->delegate()->IsSpokenFeedbackEnabled()) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Shell::GetInstance()->delegate()->ToggleSpokenFeedback(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWidget()->Close(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DefaultAccessibilityView); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TrayAccessibility::TrayAccessibility() 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : TrayImageItem(IDR_AURA_UBER_TRAY_ACCESSIBILITY), 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_(NULL), 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) detailed_(NULL) { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TrayAccessibility::~TrayAccessibility() {} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TrayAccessibility::GetInitialVisibility() { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Shell::GetInstance()->delegate() && 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Shell::GetInstance()->delegate()->IsSpokenFeedbackEnabled(); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::View* TrayAccessibility::CreateDefaultView(user::LoginStatus status) { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!Shell::GetInstance()->delegate()->IsSpokenFeedbackEnabled()) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(default_ == NULL); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_ = new DefaultAccessibilityView(); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return default_; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::View* TrayAccessibility::CreateDetailedView(user::LoginStatus status) { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(detailed_ == NULL); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) detailed_ = new views::View; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) detailed_->SetLayoutManager(new 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::BoxLayout(views::BoxLayout::kHorizontal, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTrayPopupPaddingHorizontal, 10, kTrayPopupPaddingBetweenItems)); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ImageView* image = new views::ImageView; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) image->SetImage(bundle.GetImageNamed(IDR_AURA_UBER_TRAY_ACCESSIBILITY_DARK). 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ToImageSkia()); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) detailed_->AddChildView(image); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) detailed_->AddChildView(new views::Label(bundle.GetLocalizedString( 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_ASH_STATUS_TRAY_ACCESSIBILITY_TURNED_ON_BUBBLE))); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return detailed_; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TrayAccessibility::DestroyDefaultView() { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_ = NULL; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TrayAccessibility::DestroyDetailedView() { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) detailed_ = NULL; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TrayAccessibility::OnAccessibilityModeChanged(bool enabled) { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (tray_view()) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tray_view()->SetVisible(enabled); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enabled) { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PopupDetailedView(kTrayPopupAutoCloseDelayForTextInSeconds, false); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (detailed_) { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) detailed_->GetWidget()->Close(); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace internal 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ash 124