Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Unified Diff: ash/system/audio/tray_volume.cc

Issue 10825264: Consolidate volume control code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698