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

Unified Diff: chrome/browser/chromeos/status/volume_menu_button.cc

Issue 9169033: Support for showing/hiding status area volume controls in desktop devices (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: rebase Created 8 years, 11 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: chrome/browser/chromeos/status/volume_menu_button.cc
===================================================================
--- chrome/browser/chromeos/status/volume_menu_button.cc (revision 119932)
+++ chrome/browser/chromeos/status/volume_menu_button.cc (working copy)
@@ -6,10 +6,12 @@
#include <algorithm>
+#include "base/command_line.h"
#include "base/string_number_conversions.h"
-#include "chrome/browser/chromeos/audio/audio_handler.h"
#include "chrome/browser/chromeos/status/status_area_bubble.h"
+#include "chrome/browser/chromeos/system/runtime_environment.h"
#include "chrome/browser/chromeos/view_ids.h"
+#include "chrome/common/chrome_switches.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "ui/base/l10n/l10n_util.h"
@@ -21,37 +23,50 @@
#include "ui/views/controls/menu/menu_runner.h"
#include "ui/views/controls/menu/submenu_view.h"
+namespace chromeos {
+
namespace {
-static const int kMenuItemId = 100; // arbitrary menu id.
+const int kMenuItemId = 100; // arbitrary menu id.
// TODO(achuith): Minimum width of MenuItemView is 27, which is too wide.
-static const int kVolumeMenuWidth = 27;
-static const int kVolumeIconWidth = 20;
+const int kVolumeMenuWidth = 27;
+const int kVolumeIconWidth = 20;
+bool ShouldShowStatusAreaVolume() {
+ return CommandLine::ForCurrentProcess()->
+ HasSwitch(switches::kShowVolumeStatus);
+}
+
////////////////////////////////////////////////////////////////////////////////
// AudioHandler helpers
// Used when not running on a ChromeOS device.
static int g_volume_percent = 0;
-chromeos::AudioHandler* GetAudioHandler() {
- chromeos::AudioHandler* audio_handler = chromeos::AudioHandler::GetInstance();
- return audio_handler && audio_handler->IsInitialized() ?
- audio_handler : NULL;
-}
-
int GetVolumePercent() {
- chromeos::AudioHandler* audio_handler = GetAudioHandler();
- return audio_handler ? audio_handler->GetVolumePercent() : g_volume_percent;
+ AudioHandler* audio_handler = AudioHandler::GetInstanceIfInitialized();
+ if (audio_handler)
+ return audio_handler->IsMuted() ? 0 : audio_handler->GetVolumePercent();
+ return g_volume_percent;
}
void SetVolumePercent(int percent) {
- chromeos::AudioHandler* audio_handler = GetAudioHandler();
+ AudioHandler* audio_handler = AudioHandler::GetInstanceIfInitialized();
if (audio_handler)
audio_handler->SetVolumePercent(percent);
g_volume_percent = percent;
}
+void AddVolumeObserver(AudioHandler::VolumeObserver* volume_observer) {
+ if (system::runtime_environment::IsRunningOnChromeOS())
+ AudioHandler::GetInstance()->AddVolumeObserver(volume_observer);
+}
+
+void RemoveVolumeObserver(AudioHandler::VolumeObserver* volume_observer) {
+ if (system::runtime_environment::IsRunningOnChromeOS())
+ AudioHandler::GetInstance()->RemoveVolumeObserver(volume_observer);
+}
+
////////////////////////////////////////////////////////////////////////////////
// SkBitmap helpers
@@ -77,9 +92,11 @@
////////////////////////////////////////////////////////////////////////////////
// VolumeControlView
-class VolumeControlView : public views::View {
+class VolumeControlView : public views::View,
+ public AudioHandler::VolumeObserver {
public:
- explicit VolumeControlView(chromeos::VolumeMenuButton* volume_menu_button);
+ explicit VolumeControlView(VolumeMenuButton* volume_menu_button);
+ virtual ~VolumeControlView();
private:
// views::View overrides:
@@ -88,8 +105,11 @@
virtual bool OnMousePressed(const views::MouseEvent& event) OVERRIDE;
virtual bool OnMouseDragged(const views::MouseEvent& event) OVERRIDE;
- chromeos::VolumeMenuButton* volume_menu_button_;
+ // AudioHandler::VolumeObserver overrides:
+ virtual void OnVolumeChanged() OVERRIDE;
+ VolumeMenuButton* volume_menu_button_; // not owned.
+
const SkBitmap* slider_empty_;
const SkBitmap* slider_full_;
const SkBitmap* thumb_;
@@ -102,7 +122,7 @@
};
VolumeControlView::VolumeControlView(
- chromeos::VolumeMenuButton* volume_menu_button)
+ VolumeMenuButton* volume_menu_button)
: volume_menu_button_(volume_menu_button),
slider_empty_(GetImageNamed(IDR_STATUSBAR_VOLUME_SLIDER_EMPTY)),
slider_full_(GetImageNamed(IDR_STATUSBAR_VOLUME_SLIDER_FULL)),
@@ -111,8 +131,13 @@
slider_h_(slider_empty_->height()),
thumb_h_(thumb_->height()) {
DCHECK_EQ(slider_w_, slider_full_->width());
+ AddVolumeObserver(this);
}
+VolumeControlView::~VolumeControlView() {
+ RemoveVolumeObserver(this);
+}
+
gfx::Size VolumeControlView::GetPreferredSize() {
return gfx::Size(kVolumeMenuWidth, slider_h_ + thumb_h_);
}
@@ -161,10 +186,12 @@
return true;
}
+void VolumeControlView::OnVolumeChanged() {
+ SchedulePaint();
+}
+
} // namespace
-namespace chromeos {
-
////////////////////////////////////////////////////////////////////////////////
// VolumeMenuButton
@@ -172,12 +199,12 @@
: StatusAreaButton(delegate, this) {
set_id(VIEW_ID_STATUS_BUTTON_VOLUME);
UpdateIcon();
- // TODO(achuith): Query SystemKeyEventListener to determine when we
- // can show statusbar volume controls.
- SetVisible(false);
+ SetVisible(ShouldShowStatusAreaVolume());
+ AddVolumeObserver(this);
}
VolumeMenuButton::~VolumeMenuButton() {
+ RemoveVolumeObserver(this);
}
int VolumeMenuButton::icon_width() {
@@ -201,6 +228,10 @@
UpdateIcon();
}
+void VolumeMenuButton::OnVolumeChanged() {
+ UpdateIcon();
+}
+
void VolumeMenuButton::RunMenu(views::View* source, const gfx::Point& pt) {
// TODO(achuith): Minimum width of MenuItemView is 27 pix which is too wide
// for our purposes here.
« no previous file with comments | « chrome/browser/chromeos/status/volume_menu_button.h ('k') | chrome/browser/chromeos/system_key_event_listener.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698