summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-29 01:52:48 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-29 01:52:48 +0000
commit95a21186f2e3a367061832b2eea61afefb71e573 (patch)
tree155af17e7debece8e3112a1c97fac755af1fb57d /ash
parent1dc55cd567ffa230519e7508269a747478b3653a (diff)
downloadchromium_src-95a21186f2e3a367061832b2eea61afefb71e573.zip
chromium_src-95a21186f2e3a367061832b2eea61afefb71e573.tar.gz
chromium_src-95a21186f2e3a367061832b2eea61afefb71e573.tar.bz2
ash uber tray: Make it possible for the system to send notifications to the tray.
Volume/Brightness change notifications are sent from the system to the tray. This can be useful to update the tray items when something changes (either automatically, or by means other than the tray itself) BUG=110130,110131 TEST=none Review URL: https://chromiumcodereview.appspot.com/9522003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@124091 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash')
-rw-r--r--ash/ash.gyp2
-rw-r--r--ash/shell.cc13
-rw-r--r--ash/shell.h12
-rw-r--r--ash/shell/shell_main.cc3
-rw-r--r--ash/shell_delegate.h3
-rw-r--r--ash/system/audio/audio_controller.h21
-rw-r--r--ash/system/audio/tray_volume.cc22
-rw-r--r--ash/system/audio/tray_volume.h7
-rw-r--r--ash/system/brightness/brightness_controller.h21
-rw-r--r--ash/system/brightness/tray_brightness.cc32
-rw-r--r--ash/system/brightness/tray_brightness.h14
-rw-r--r--ash/test/test_shell_delegate.cc3
-rw-r--r--ash/test/test_shell_delegate.h2
13 files changed, 135 insertions, 20 deletions
diff --git a/ash/ash.gyp b/ash/ash.gyp
index 995455c..3104124 100644
--- a/ash/ash.gyp
+++ b/ash/ash.gyp
@@ -109,8 +109,10 @@
'shell_window_ids.h',
'status_area/status_area_view.cc',
'status_area/status_area_view.h',
+ 'system/audio/audio_controller.h',
'system/audio/tray_volume.cc',
'system/audio/tray_volume.h',
+ 'system/brightness/brightness_controller.h',
'system/brightness/brightness_control_delegate.h',
'system/brightness/tray_brightness.cc',
'system/brightness/tray_brightness.h',
diff --git a/ash/shell.cc b/ash/shell.cc
index 2dbdafc..97cefc0 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -247,6 +247,8 @@ Shell::Shell(ShellDelegate* delegate)
accelerator_controller_(new AcceleratorController),
#endif
delegate_(delegate),
+ audio_controller_(NULL),
+ brightness_controller_(NULL),
shelf_(NULL),
window_mode_(MODE_OVERLAPPING),
desktop_background_mode_(BACKGROUND_IMAGE),
@@ -381,12 +383,17 @@ void Shell::Init() {
tray_.reset(new SystemTray());
status_widget_->GetContentsView()->AddChildView(tray_.get());
- tray_->AddTrayItem(new internal::TrayVolume());
- tray_->AddTrayItem(new internal::TrayBrightness());
+ internal::TrayVolume* tray_volume = new internal::TrayVolume();
+ internal::TrayBrightness* tray_brightness = new internal::TrayBrightness();
+ audio_controller_ = tray_volume;
+ brightness_controller_ = tray_brightness;
+
+ tray_->AddTrayItem(tray_volume);
+ tray_->AddTrayItem(tray_brightness);
tray_->AddTrayItem(new internal::TraySettings());
if (delegate_.get())
- tray_delegate_.reset(delegate_->CreateSystemTrayDelegate());
+ tray_delegate_.reset(delegate_->CreateSystemTrayDelegate(tray_.get()));
if (!tray_delegate_.get())
tray_delegate_.reset(new DummySystemTrayDelegate());
}
diff --git a/ash/shell.h b/ash/shell.h
index 5a57c24..4462ae8 100644
--- a/ash/shell.h
+++ b/ash/shell.h
@@ -38,6 +38,8 @@ class Widget;
namespace ash {
class AcceleratorController;
+class AudioController;
+class BrightnessController;
class Launcher;
class NestedDispatcherController;
class PowerButtonController;
@@ -188,6 +190,12 @@ class ASH_EXPORT Shell {
WindowCycleController* window_cycle_controller() {
return window_cycle_controller_.get();
}
+ AudioController* audio_controller() const {
+ return audio_controller_;
+ }
+ BrightnessController* brightness_controller() const {
+ return brightness_controller_;
+ }
ShellDelegate* delegate() { return delegate_.get(); }
SystemTrayDelegate* tray_delegate() { return tray_delegate_.get(); }
@@ -264,6 +272,10 @@ class ASH_EXPORT Shell {
scoped_ptr<WindowCycleController> window_cycle_controller_;
scoped_ptr<internal::FocusCycler> focus_cycler_;
+ // The audio and brightness controllers are not owner by the shell.
+ AudioController* audio_controller_;
+ BrightnessController* brightness_controller_;
+
// An event filter that pre-handles all key events to send them to an IME.
scoped_ptr<internal::InputMethodEventFilter> input_method_filter_;
diff --git a/ash/shell/shell_main.cc b/ash/shell/shell_main.cc
index 86601e9..0f2d5b4 100644
--- a/ash/shell/shell_main.cc
+++ b/ash/shell/shell_main.cc
@@ -208,7 +208,8 @@ class ShellDelegateImpl : public ash::ShellDelegate {
return launcher_delegate_;
}
- virtual ash::SystemTrayDelegate* CreateSystemTrayDelegate() {
+ virtual ash::SystemTrayDelegate* CreateSystemTrayDelegate(
+ ash::SystemTray* tray) {
return NULL;
}
diff --git a/ash/shell_delegate.h b/ash/shell_delegate.h
index 55b1a68..123310b 100644
--- a/ash/shell_delegate.h
+++ b/ash/shell_delegate.h
@@ -28,6 +28,7 @@ class LauncherDelegate;
class LauncherModel;
struct LauncherItem;
class ScreenshotDelegate;
+class SystemTray;
class SystemTrayDelegate;
// Delegate of the Shell.
@@ -87,7 +88,7 @@ class ASH_EXPORT ShellDelegate {
ash::LauncherModel* model) = 0;
// Creates a system-tray delegate. Shell takes ownership of the delegate.
- virtual SystemTrayDelegate* CreateSystemTrayDelegate() = 0;
+ virtual SystemTrayDelegate* CreateSystemTrayDelegate(SystemTray* tray) = 0;
};
} // namespace ash
diff --git a/ash/system/audio/audio_controller.h b/ash/system/audio/audio_controller.h
new file mode 100644
index 0000000..682766b
--- /dev/null
+++ b/ash/system/audio/audio_controller.h
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ASH_SYSTEM_AUDIO_AUDIO_CONTROLLER_H_
+#define ASH_SYSTEM_AUDIO_AUDIO_CONTROLLER_H_
+
+#include "ash/ash_export.h"
+
+namespace ash {
+
+class ASH_EXPORT AudioController {
+ public:
+ virtual ~AudioController() {}
+
+ virtual void OnVolumeChanged(float percent) = 0;
+};
+
+} // namespace ash
+
+#endif //ASH_SYSTEM_AUDIO_AUDIO_CONTROLLER_H_
diff --git a/ash/system/audio/tray_volume.cc b/ash/system/audio/tray_volume.cc
index c76ba04..9d4791a 100644
--- a/ash/system/audio/tray_volume.cc
+++ b/ash/system/audio/tray_volume.cc
@@ -45,10 +45,14 @@ class VolumeView : public views::View,
icon_->SetToggled(delegate->AudioMuted());
AddChildView(icon_);
- views::Slider* slider = new views::Slider(this, views::Slider::HORIZONTAL);
- slider->SetValue(delegate->VolumeLevel());
- slider->set_border(views::Border::CreateEmptyBorder(0, 0, 0, 20));
- AddChildView(slider);
+ slider_ = new views::Slider(this, views::Slider::HORIZONTAL);
+ slider_->SetValue(delegate->VolumeLevel());
+ slider_->set_border(views::Border::CreateEmptyBorder(0, 0, 0, 20));
+ AddChildView(slider_);
+ }
+
+ void SetVolumeLevel(float percent) {
+ slider_->SetValue(percent);
}
private:
@@ -74,6 +78,7 @@ class VolumeView : public views::View,
}
views::ToggleImageButton* icon_;
+ views::Slider* slider_;
DISALLOW_COPY_AND_ASSIGN(VolumeView);
};
@@ -117,5 +122,14 @@ void TrayVolume::DestroyDefaultView() {
void TrayVolume::DestroyDetailedView() {
}
+void TrayVolume::OnVolumeChanged(float percent) {
+ if (volume_view_.get()) {
+ volume_view_->SetVolumeLevel(percent);
+ return;
+ }
+
+ PopupDetailedView();
+}
+
} // namespace internal
} // namespace ash
diff --git a/ash/system/audio/tray_volume.h b/ash/system/audio/tray_volume.h
index 994f0a0..a5f09b6 100644
--- a/ash/system/audio/tray_volume.h
+++ b/ash/system/audio/tray_volume.h
@@ -6,6 +6,7 @@
#define ASH_SYSTEM_AUDIO_TRAY_VOLUME_H_
#pragma once
+#include "ash/system/audio/audio_controller.h"
#include "ash/system/tray/system_tray_item.h"
#include "base/memory/scoped_ptr.h"
@@ -20,7 +21,8 @@ class VolumeView;
namespace ash {
namespace internal {
-class TrayVolume : public SystemTrayItem {
+class TrayVolume : public SystemTrayItem,
+ public AudioController {
public:
TrayVolume();
virtual ~TrayVolume();
@@ -34,6 +36,9 @@ class TrayVolume : public SystemTrayItem {
virtual void DestroyDefaultView() OVERRIDE;
virtual void DestroyDetailedView() OVERRIDE;
+ // Overridden from AudioController.
+ virtual void OnVolumeChanged(float percent) OVERRIDE;
+
scoped_ptr<tray::VolumeView> volume_view_;
scoped_ptr<views::ImageView> tray_view_;
diff --git a/ash/system/brightness/brightness_controller.h b/ash/system/brightness/brightness_controller.h
new file mode 100644
index 0000000..51d0d46
--- /dev/null
+++ b/ash/system/brightness/brightness_controller.h
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ASH_SYSTEM_BRIGHTNESS_BRIGHTNESS_CONTROLLER_H_
+#define ASH_SYSTEM_BRIGHTNESS_BRIGHTNESS_CONTROLLER_H_
+
+#include "ash/ash_export.h"
+
+namespace ash {
+
+class ASH_EXPORT BrightnessController {
+ public:
+ virtual ~BrightnessController() {}
+
+ virtual void OnBrightnessChanged(float percent, bool user_initiated) = 0;
+};
+
+} // namespace ash
+
+#endif // ASH_SYSTEM_BRIGHTNESS_BRIGHTNESS_CONTROLLER_H_
diff --git a/ash/system/brightness/tray_brightness.cc b/ash/system/brightness/tray_brightness.cc
index edbc36c..12e4e72 100644
--- a/ash/system/brightness/tray_brightness.cc
+++ b/ash/system/brightness/tray_brightness.cc
@@ -20,7 +20,7 @@
#include "ui/views/controls/image_view.h"
#include "ui/views/view.h"
-namespace {
+namespace tray {
class BrightnessView : public views::View,
public views::SliderListener {
@@ -35,13 +35,17 @@ class BrightnessView : public views::View,
icon->SetImage(image.ToSkBitmap());
AddChildView(icon);
- views::Slider* slider = new views::Slider(this, views::Slider::HORIZONTAL);
+ slider_ = new views::Slider(this, views::Slider::HORIZONTAL);
// TODO(sad|davemoore): There is currently no way to get the brightness
// level of the system. So start with a random value.
// http://crosbug.com/26935
- slider->SetValue(0.8f);
- slider->set_border(views::Border::CreateEmptyBorder(0, 0, 0, 20));
- AddChildView(slider);
+ slider_->SetValue(0.8f);
+ slider_->set_border(views::Border::CreateEmptyBorder(0, 0, 0, 20));
+ AddChildView(slider_);
+ }
+
+ void SetBrightnessLevel(float percent) {
+ slider_->SetValue(percent);
}
private:
@@ -62,10 +66,12 @@ class BrightnessView : public views::View,
}
}
+ views::Slider* slider_;
+
DISALLOW_COPY_AND_ASSIGN(BrightnessView);
};
-} // namespace
+} // namespace tray
namespace ash {
namespace internal {
@@ -79,7 +85,8 @@ views::View* TrayBrightness::CreateTrayView() {
}
views::View* TrayBrightness::CreateDefaultView() {
- return new BrightnessView;
+ brightness_view_.reset(new tray::BrightnessView);
+ return brightness_view_.get();
}
views::View* TrayBrightness::CreateDetailedView() {
@@ -91,10 +98,21 @@ void TrayBrightness::DestroyTrayView() {
}
void TrayBrightness::DestroyDefaultView() {
+ brightness_view_.reset();
}
void TrayBrightness::DestroyDetailedView() {
}
+void TrayBrightness::OnBrightnessChanged(float percent, bool user_initiated) {
+ if (brightness_view_.get()) {
+ brightness_view_->SetBrightnessLevel(percent);
+ return;
+ }
+ if (!user_initiated)
+ return;
+ PopupDetailedView();
+}
+
} // namespace internal
} // namespace ash
diff --git a/ash/system/brightness/tray_brightness.h b/ash/system/brightness/tray_brightness.h
index b9b64df..c94bd9c 100644
--- a/ash/system/brightness/tray_brightness.h
+++ b/ash/system/brightness/tray_brightness.h
@@ -6,13 +6,19 @@
#define ASH_SYSTEM_BRIGHTNESS_TRAY_BRIGHTNESS_H_
#pragma once
+#include "ash/system/brightness/brightness_controller.h"
#include "ash/system/tray/system_tray_item.h"
#include "base/compiler_specific.h"
+namespace tray {
+class BrightnessView;
+}
+
namespace ash {
namespace internal {
-class TrayBrightness : public SystemTrayItem {
+class TrayBrightness : public SystemTrayItem,
+ public BrightnessController {
public:
TrayBrightness();
virtual ~TrayBrightness();
@@ -26,6 +32,12 @@ class TrayBrightness : public SystemTrayItem {
virtual void DestroyDefaultView() OVERRIDE;
virtual void DestroyDetailedView() OVERRIDE;
+ // Overridden from BrightnessController.
+ virtual void OnBrightnessChanged(float percent,
+ bool user_initiated) OVERRIDE;
+
+ scoped_ptr<tray::BrightnessView> brightness_view_;
+
DISALLOW_COPY_AND_ASSIGN(TrayBrightness);
};
diff --git a/ash/test/test_shell_delegate.cc b/ash/test/test_shell_delegate.cc
index 8eb2dfa..719bd44 100644
--- a/ash/test/test_shell_delegate.cc
+++ b/ash/test/test_shell_delegate.cc
@@ -66,7 +66,8 @@ LauncherDelegate* TestShellDelegate::CreateLauncherDelegate(
return NULL;
}
-SystemTrayDelegate* TestShellDelegate::CreateSystemTrayDelegate() {
+SystemTrayDelegate* TestShellDelegate::CreateSystemTrayDelegate(
+ SystemTray* tray) {
return NULL;
}
} // namespace test
diff --git a/ash/test/test_shell_delegate.h b/ash/test/test_shell_delegate.h
index 7400559..1a621fd 100644
--- a/ash/test/test_shell_delegate.h
+++ b/ash/test/test_shell_delegate.h
@@ -32,7 +32,7 @@ class TestShellDelegate : public ShellDelegate {
ScreenshotDelegate* screenshot_delegate) OVERRIDE;
virtual LauncherDelegate* CreateLauncherDelegate(
ash::LauncherModel* model) OVERRIDE;
- virtual SystemTrayDelegate* CreateSystemTrayDelegate() OVERRIDE;
+ virtual SystemTrayDelegate* CreateSystemTrayDelegate(SystemTray* t) OVERRIDE;
};
} // namespace test