| Index: ash/system/audio/tray_volume.cc
|
| diff --git a/ash/system/audio/tray_volume.cc b/ash/system/audio/tray_volume.cc
|
| index 6a24a4ee6be515676ec06007df8858bfae862e56..9f6f79d1f16311a5327cad52306ed390da01f5b2 100644
|
| --- a/ash/system/audio/tray_volume.cc
|
| +++ b/ash/system/audio/tray_volume.cc
|
| @@ -6,10 +6,11 @@
|
|
|
| #include <cmath>
|
|
|
| +#include "ash/accelerators/accelerator_controller.h"
|
| #include "ash/shell.h"
|
| -#include "ash/system/tray/system_tray_delegate.h"
|
| #include "ash/system/tray/tray_constants.h"
|
| #include "ash/system/tray/tray_views.h"
|
| +#include "ash/volume_control_delegate.h"
|
| #include "base/utf_string_conversions.h"
|
| #include "grit/ash_strings.h"
|
| #include "grit/ui_resources.h"
|
| @@ -39,8 +40,22 @@ const int kVolumeImageHeight = 25;
|
| // The one for mute is at the 0 index and the other
|
| // four are used for ascending volume levels.
|
| const int kVolumeLevels = 4;
|
| +
|
| +bool IsAudioMuted() {
|
| + ash::VolumeControlDelegate* delegate =
|
| + Shell::GetInstance()->accelerator_controller()->volume_control_delegate();
|
| + return delegate ? delegate->IsAudioMuted() : false;
|
| +}
|
| +
|
| +float GetVolumeLevel() {
|
| + ash::VolumeControlDelegate* delegate =
|
| + Shell::GetInstance()->accelerator_controller()->volume_control_delegate();
|
| + DCHECK(delegate);
|
| + return delegate->GetVolumeLevel();
|
| }
|
|
|
| +} // namespace
|
| +
|
| namespace tray {
|
|
|
| class VolumeButton : public views::ToggleImageButton {
|
| @@ -58,10 +73,8 @@ class VolumeButton : public views::ToggleImageButton {
|
| virtual ~VolumeButton() {}
|
|
|
| void Update() {
|
| - ash::SystemTrayDelegate* delegate =
|
| - ash::Shell::GetInstance()->tray_delegate();
|
| - float level = delegate->GetVolumeLevel();
|
| - int image_index = delegate->IsAudioMuted() ?
|
| + float level = GetVolumeLevel();
|
| + int image_index = IsAudioMuted() ?
|
| 0 : (level == 1.0 ?
|
| kVolumeLevels :
|
| std::max(1, int(std::ceil(level * (kVolumeLevels - 1)))));
|
| @@ -101,9 +114,7 @@ class MuteButton : public ash::internal::TrayBarButtonWithTitle {
|
| virtual ~MuteButton() {}
|
|
|
| void Update() {
|
| - ash::SystemTrayDelegate* delegate =
|
| - ash::Shell::GetInstance()->tray_delegate();
|
| - UpdateButton(delegate->IsAudioMuted());
|
| + UpdateButton(IsAudioMuted());
|
| SchedulePaint();
|
| }
|
|
|
| @@ -115,7 +126,7 @@ class VolumeSlider : public views::Slider {
|
| explicit VolumeSlider(views::SliderListener* listener)
|
| : views::Slider(listener, views::Slider::HORIZONTAL) {
|
| set_focus_border_color(kFocusBorderColor);
|
| - SetValue(ash::Shell::GetInstance()->tray_delegate()->GetVolumeLevel());
|
| + SetValue(GetVolumeLevel());
|
| SetAccessibleName(
|
| ui::ResourceBundle::GetSharedInstance().GetLocalizedString(
|
| IDS_ASH_STATUS_TRAY_VOLUME));
|
| @@ -124,7 +135,7 @@ class VolumeSlider : public views::Slider {
|
| virtual ~VolumeSlider() {}
|
|
|
| void Update() {
|
| - UpdateState(!ash::Shell::GetInstance()->tray_delegate()->IsAudioMuted());
|
| + UpdateState(!IsAudioMuted());
|
| }
|
|
|
| DISALLOW_COPY_AND_ASSIGN(VolumeSlider);
|
| @@ -179,9 +190,11 @@ class VolumeView : public views::View,
|
| virtual void ButtonPressed(views::Button* sender,
|
| const views::Event& event) OVERRIDE {
|
| CHECK(sender == icon_ || sender == mute_);
|
| - ash::SystemTrayDelegate* delegate =
|
| - ash::Shell::GetInstance()->tray_delegate();
|
| - delegate->SetAudioMuted(!delegate->IsAudioMuted());
|
| + ash::VolumeControlDelegate* delegate =
|
| + ash::Shell::GetInstance()->accelerator_controller()
|
| + ->volume_control_delegate();
|
| + if (delegate)
|
| + delegate->SetAudioMuted(!IsAudioMuted());
|
| }
|
|
|
| // Overridden from views:SliderListener.
|
| @@ -190,8 +203,10 @@ class VolumeView : public views::View,
|
| float old_value,
|
| views::SliderChangeReason reason) OVERRIDE {
|
| if (reason == views::VALUE_CHANGED_BY_USER) {
|
| - ash::SystemTrayDelegate* delegate =
|
| - ash::Shell::GetInstance()->tray_delegate();
|
| + ash::VolumeControlDelegate* delegate =
|
| + ash::Shell::GetInstance()->accelerator_controller()
|
| + ->volume_control_delegate();
|
| + DCHECK(delegate);
|
| delegate->SetVolumeLevel(value);
|
| }
|
| icon_->Update();
|
| @@ -216,9 +231,7 @@ TrayVolume::~TrayVolume() {
|
| }
|
|
|
| bool TrayVolume::GetInitialVisibility() {
|
| - ash::SystemTrayDelegate* delegate =
|
| - ash::Shell::GetInstance()->tray_delegate();
|
| - return delegate->IsAudioMuted();
|
| + return IsAudioMuted();
|
| }
|
|
|
| views::View* TrayVolume::CreateDefaultView(user::LoginStatus status) {
|
| @@ -243,12 +256,19 @@ void TrayVolume::DestroyDetailedView() {
|
| volume_view_ = NULL;
|
| }
|
|
|
| +void TrayVolume::UpdateAfterAshInit() {
|
| + // Update the tray view after ash init, since VolumeControlDelegate won't be
|
| + // created until after the shell and system tray has been initialized.
|
| + if (tray_view())
|
| + tray_view()->SetVisible(GetInitialVisibility());
|
| +}
|
| +
|
| void TrayVolume::OnVolumeChanged(float percent) {
|
| if (tray_view())
|
| tray_view()->SetVisible(GetInitialVisibility());
|
|
|
| if (volume_view_) {
|
| - if (ash::Shell::GetInstance()->tray_delegate()->IsAudioMuted())
|
| + if (IsAudioMuted())
|
| percent = 0.0;
|
| volume_view_->SetVolumeLevel(percent);
|
| SetDetailedViewCloseDelay(kTrayPopupAutoCloseDelayInSeconds);
|
|
|