summaryrefslogtreecommitdiffstats
path: root/ash/system
diff options
context:
space:
mode:
authorjonross@chromium.org <jonross@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-17 19:35:38 +0000
committerjonross@chromium.org <jonross@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-17 19:35:38 +0000
commitaaecf7935d3227893f11d1d92d371ee9188412cf (patch)
treee6ebb8acf886e4d720b5a717da28e4fbf0ee4bd1 /ash/system
parent16f765c6a6c3e147a47193afcc757dfd58a1b4a6 (diff)
downloadchromium_src-aaecf7935d3227893f11d1d92d371ee9188412cf.zip
chromium_src-aaecf7935d3227893f11d1d92d371ee9188412cf.tar.gz
chromium_src-aaecf7935d3227893f11d1d92d371ee9188412cf.tar.bz2
Bring back the brightness control in the system tray, when the decive is in
Maximize Mode Patch taken from review 180743016 to support maximize mode for brightness control BUG=337628 Review URL: https://codereview.chromium.org/195453002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@257480 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash/system')
-rw-r--r--ash/system/chromeos/brightness/tray_brightness.cc167
-rw-r--r--ash/system/chromeos/brightness/tray_brightness.h7
-rw-r--r--ash/system/chromeos/brightness/tray_brightness_unittest.cc107
3 files changed, 215 insertions, 66 deletions
diff --git a/ash/system/chromeos/brightness/tray_brightness.cc b/ash/system/chromeos/brightness/tray_brightness.cc
index 19ff250..23f6fa7 100644
--- a/ash/system/chromeos/brightness/tray_brightness.cc
+++ b/ash/system/chromeos/brightness/tray_brightness.cc
@@ -9,6 +9,7 @@
#include "ash/display/display_manager.h"
#include "ash/metrics/user_metrics_recorder.h"
#include "ash/shell.h"
+#include "ash/shell_observer.h"
#include "ash/system/brightness_control_delegate.h"
#include "ash/system/tray/fixed_sized_image_view.h"
#include "ash/system/tray/system_tray_delegate.h"
@@ -45,92 +46,135 @@ const double kMinBrightnessPercent = 5.0;
} // namespace
-class BrightnessView : public views::View,
+class BrightnessView : public ShellObserver,
+ public views::View,
public views::SliderListener {
public:
- explicit BrightnessView(double initial_percent)
- : dragging_(false),
- last_percent_(initial_percent) {
- SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal,
- kTrayPopupPaddingHorizontal, 0, kTrayPopupPaddingBetweenItems));
-
- views::ImageView* icon = new FixedSizedImageView(0, kTrayPopupItemHeight);
- gfx::Image image = ui::ResourceBundle::GetSharedInstance().GetImageNamed(
- IDR_AURA_UBER_TRAY_BRIGHTNESS);
- icon->SetImage(image.ToImageSkia());
- AddChildView(icon);
-
- slider_ = new views::Slider(this, views::Slider::HORIZONTAL);
- slider_->set_focus_border_color(kFocusBorderColor);
- slider_->SetValue(static_cast<float>(initial_percent / 100.0));
- slider_->SetAccessibleName(
- ui::ResourceBundle::GetSharedInstance().GetLocalizedString(
- IDS_ASH_STATUS_TRAY_BRIGHTNESS));
- AddChildView(slider_);
- }
+ BrightnessView(bool default_view, double initial_percent);
+ virtual ~BrightnessView();
- virtual ~BrightnessView() {}
+ bool is_default_view() const {
+ return is_default_view_;
+ }
// |percent| is in the range [0.0, 100.0].
- void SetBrightnessPercent(double percent) {
- last_percent_ = percent;
- if (!dragging_)
- slider_->SetValue(static_cast<float>(percent / 100.0));
- }
+ void SetBrightnessPercent(double percent);
+
+ // ShellObserver:
+ virtual void OnMaximizeModeStarted() OVERRIDE;
+ virtual void OnMaximizeModeEnded() OVERRIDE;
private:
- // Overridden from views::View.
- virtual void OnBoundsChanged(const gfx::Rect& old_bounds) OVERRIDE {
- int w = width() - slider_->x();
- slider_->SetSize(gfx::Size(w, slider_->height()));
- }
+ // views::View:
+ virtual void OnBoundsChanged(const gfx::Rect& old_bounds) OVERRIDE;
- // Overridden from views:SliderListener.
+ // views:SliderListener:
virtual void SliderValueChanged(views::Slider* sender,
float value,
float old_value,
- views::SliderChangeReason reason) OVERRIDE {
- DCHECK_EQ(sender, slider_);
- if (reason != views::VALUE_CHANGED_BY_USER)
- return;
- AcceleratorController* ac = Shell::GetInstance()->accelerator_controller();
- if (ac->brightness_control_delegate()) {
- double percent = std::max(value * 100.0, kMinBrightnessPercent);
- ac->brightness_control_delegate()->SetBrightnessPercent(percent, true);
- }
- }
-
- // Overridden from views:SliderListener.
- virtual void SliderDragStarted(views::Slider* slider) OVERRIDE {
- DCHECK_EQ(slider, slider_);
- dragging_ = true;
- }
+ views::SliderChangeReason reason) OVERRIDE;
- // Overridden from views:SliderListener.
- virtual void SliderDragEnded(views::Slider* slider) OVERRIDE {
- DCHECK_EQ(slider, slider_);
- dragging_ = false;
- slider_->SetValue(static_cast<float>(last_percent_ / 100.0));
- }
+ // views:SliderListener:
+ virtual void SliderDragStarted(views::Slider* slider) OVERRIDE;
+ virtual void SliderDragEnded(views::Slider* slider) OVERRIDE;
views::Slider* slider_;
// Is |slider_| currently being dragged?
bool dragging_;
+ // True if this view is for the default tray view. Used to control hide/show
+ // behaviour of the default view when entering or leaving Maximize Mode.
+ bool is_default_view_;
+
// Last brightness level that we observed, in the range [0.0, 100.0].
double last_percent_;
DISALLOW_COPY_AND_ASSIGN(BrightnessView);
};
+BrightnessView::BrightnessView(bool default_view, double initial_percent)
+ : dragging_(false),
+ is_default_view_(default_view),
+ last_percent_(initial_percent) {
+ SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal,
+ kTrayPopupPaddingHorizontal, 0, kTrayPopupPaddingBetweenItems));
+
+ views::ImageView* icon = new FixedSizedImageView(0, kTrayPopupItemHeight);
+ gfx::Image image = ui::ResourceBundle::GetSharedInstance().GetImageNamed(
+ IDR_AURA_UBER_TRAY_BRIGHTNESS);
+ icon->SetImage(image.ToImageSkia());
+ AddChildView(icon);
+
+ slider_ = new views::Slider(this, views::Slider::HORIZONTAL);
+ slider_->set_focus_border_color(kFocusBorderColor);
+ slider_->SetValue(static_cast<float>(initial_percent / 100.0));
+ slider_->SetAccessibleName(
+ ui::ResourceBundle::GetSharedInstance().GetLocalizedString(
+ IDS_ASH_STATUS_TRAY_BRIGHTNESS));
+ AddChildView(slider_);
+
+ if (is_default_view_) {
+ Shell::GetInstance()->AddShellObserver(this);
+ SetVisible(Shell::GetInstance()->IsMaximizeModeWindowManagerEnabled());
+ }
+}
+
+BrightnessView::~BrightnessView() {
+ if (is_default_view_)
+ Shell::GetInstance()->RemoveShellObserver(this);
+}
+
+void BrightnessView::SetBrightnessPercent(double percent) {
+ last_percent_ = percent;
+ if (!dragging_)
+ slider_->SetValue(static_cast<float>(percent / 100.0));
+}
+
+void BrightnessView::OnMaximizeModeStarted() {
+ SetVisible(true);
+}
+
+void BrightnessView::OnMaximizeModeEnded() {
+ SetVisible(false);
+}
+
+void BrightnessView::OnBoundsChanged(const gfx::Rect& old_bounds) {
+ int w = width() - slider_->x();
+ slider_->SetSize(gfx::Size(w, slider_->height()));
+}
+
+void BrightnessView::SliderValueChanged(views::Slider* sender,
+ float value,
+ float old_value,
+ views::SliderChangeReason reason) {
+ DCHECK_EQ(sender, slider_);
+ if (reason != views::VALUE_CHANGED_BY_USER)
+ return;
+ AcceleratorController* ac = Shell::GetInstance()->accelerator_controller();
+ if (ac->brightness_control_delegate()) {
+ double percent = std::max(value * 100.0, kMinBrightnessPercent);
+ ac->brightness_control_delegate()->SetBrightnessPercent(percent, true);
+ }
+}
+
+void BrightnessView::SliderDragStarted(views::Slider* slider) {
+ DCHECK_EQ(slider, slider_);
+ dragging_ = true;
+}
+
+void BrightnessView::SliderDragEnded(views::Slider* slider) {
+ DCHECK_EQ(slider, slider_);
+ dragging_ = false;
+ slider_->SetValue(static_cast<float>(last_percent_ / 100.0));
+}
+
} // namespace tray
TrayBrightness::TrayBrightness(SystemTray* system_tray)
: SystemTrayItem(system_tray),
weak_ptr_factory_(this),
brightness_view_(NULL),
- is_default_view_(false),
current_percent_(100.0),
got_current_percent_(false) {
// Post a task to get the initial brightness; the BrightnessControlDelegate
@@ -170,15 +214,16 @@ views::View* TrayBrightness::CreateTrayView(user::LoginStatus status) {
}
views::View* TrayBrightness::CreateDefaultView(user::LoginStatus status) {
- return NULL;
+ CHECK(brightness_view_ == NULL);
+ brightness_view_ = new tray::BrightnessView(true, current_percent_);
+ return brightness_view_;
}
views::View* TrayBrightness::CreateDetailedView(user::LoginStatus status) {
CHECK(brightness_view_ == NULL);
Shell::GetInstance()->metrics()->RecordUserMetricsAction(
ash::UMA_STATUS_AREA_DETAILED_BRIGHTNESS_VIEW);
- brightness_view_ = new tray::BrightnessView(current_percent_);
- is_default_view_ = false;
+ brightness_view_ = new tray::BrightnessView(false, current_percent_);
return brightness_view_;
}
@@ -186,12 +231,12 @@ void TrayBrightness::DestroyTrayView() {
}
void TrayBrightness::DestroyDefaultView() {
- if (is_default_view_)
+ if (brightness_view_ && brightness_view_->is_default_view())
brightness_view_ = NULL;
}
void TrayBrightness::DestroyDetailedView() {
- if (!is_default_view_)
+ if (brightness_view_ && !brightness_view_->is_default_view())
brightness_view_ = NULL;
}
diff --git a/ash/system/chromeos/brightness/tray_brightness.h b/ash/system/chromeos/brightness/tray_brightness.h
index 0c15a75..866d5d0 100644
--- a/ash/system/chromeos/brightness/tray_brightness.h
+++ b/ash/system/chromeos/brightness/tray_brightness.h
@@ -24,6 +24,8 @@ class TrayBrightness : public SystemTrayItem,
virtual ~TrayBrightness();
private:
+ friend class TrayBrightnessTest;
+
// Sends a request to get the current screen brightness so |current_percent_|
// can be initialized.
void GetInitialBrightness();
@@ -53,11 +55,6 @@ class TrayBrightness : public SystemTrayItem,
tray::BrightnessView* brightness_view_;
- // Was |brightness_view_| created for CreateDefaultView() rather than
- // CreateDetailedView()? Used to avoid resetting |brightness_view_|
- // inappropriately in DestroyDefaultView() or DestroyDetailedView().
- bool is_default_view_;
-
// Brightness level in the range [0.0, 100.0] that we've heard about most
// recently.
double current_percent_;
diff --git a/ash/system/chromeos/brightness/tray_brightness_unittest.cc b/ash/system/chromeos/brightness/tray_brightness_unittest.cc
new file mode 100644
index 0000000..b0de85e
--- /dev/null
+++ b/ash/system/chromeos/brightness/tray_brightness_unittest.cc
@@ -0,0 +1,107 @@
+// Copyright 2014 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.
+
+#include "ash/system/chromeos/brightness/tray_brightness.h"
+
+#include "ash/shell.h"
+#include "ash/system/tray/system_tray_delegate.h"
+#include "ash/system/tray/system_tray_item.h"
+#include "ash/test/ash_test_base.h"
+#include "ui/views/view.h"
+
+namespace ash {
+
+namespace {
+
+user::LoginStatus GetUserLoginStatus() {
+ return Shell::GetInstance()->system_tray_delegate()->GetUserLoginStatus();
+}
+
+} // namespace
+
+namespace internal {
+
+class TrayBrightnessTest : public test::AshTestBase {
+ public:
+ TrayBrightnessTest() {}
+ virtual ~TrayBrightnessTest() {}
+
+ protected:
+ views::View* CreateDefaultView() {
+ TrayBrightness tray(NULL);
+ return tray.CreateDefaultView(GetUserLoginStatus());
+ }
+
+ views::View* CreateDetailedView() {
+ TrayBrightness tray(NULL);
+ return tray.CreateDetailedView(GetUserLoginStatus());
+ }
+
+ bool IsBrightnessViewVisible(views::View* tray) {
+ TrayBrightness* brightness_tray = reinterpret_cast<TrayBrightness*>(tray);
+ return (reinterpret_cast<views::View*>(brightness_tray->brightness_view_))->
+ visible();
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TrayBrightnessTest);
+};
+
+// Tests that when the default view is initially created, that its
+// BrightnessView is created not visible.
+TEST_F(TrayBrightnessTest, CreateDefaultView) {
+ scoped_ptr<views::View> tray(CreateDefaultView());
+ EXPECT_FALSE(IsBrightnessViewVisible(tray.get()));
+}
+
+// Tests the construction of the default view while MaximizeMode is active.
+// The BrightnessView should be visible.
+TEST_F(TrayBrightnessTest, CreateDefaultViewDuringMaximizeMode) {
+ Shell::GetInstance()->EnableMaximizeModeWindowManager(true);
+ scoped_ptr<views::View> tray(CreateDefaultView());
+ EXPECT_TRUE(IsBrightnessViewVisible(tray.get()));
+ Shell::GetInstance()->EnableMaximizeModeWindowManager(false);
+}
+
+// Tests that the enabling of MaximizeMode affects a previously created
+// BrightnessView, changing the visibility.
+TEST_F(TrayBrightnessTest, DefaultViewVisibilityChangesDuringMaximizeMode) {
+ scoped_ptr<views::View> tray(CreateDefaultView());
+ Shell::GetInstance()->EnableMaximizeModeWindowManager(true);
+ EXPECT_TRUE(IsBrightnessViewVisible(tray.get()));
+ Shell::GetInstance()->EnableMaximizeModeWindowManager(false);
+ EXPECT_FALSE(IsBrightnessViewVisible(tray.get()));
+}
+
+// Tests that when the detailed view is initially created that its
+// BrightnessView is created as visible.
+TEST_F(TrayBrightnessTest, CreateDetailedView) {
+ scoped_ptr<views::View> tray(CreateDetailedView());
+ EXPECT_TRUE(IsBrightnessViewVisible(tray.get()));
+}
+
+
+// Tests that when the detailed view is created during MaximizeMode that its
+// BrightnessView is visible.
+TEST_F(TrayBrightnessTest, CreateDetailedViewDuringMaximizeMode) {
+ Shell::GetInstance()->EnableMaximizeModeWindowManager(true);
+ scoped_ptr<views::View> tray(CreateDetailedView());
+ EXPECT_TRUE(IsBrightnessViewVisible(tray.get()));
+ Shell::GetInstance()->EnableMaximizeModeWindowManager(false);
+}
+
+// Tests that the enabling of MaximizeMode has no affect on the visibility of a
+// previously created BrightnessView that belongs to a detailed view.
+TEST_F(TrayBrightnessTest, DetailedViewVisibilityChangesDuringMaximizeMode) {
+ scoped_ptr<views::View> tray(CreateDetailedView());
+ Shell::GetInstance()->EnableMaximizeModeWindowManager(true);
+ EXPECT_TRUE(IsBrightnessViewVisible(tray.get()));
+ Shell::GetInstance()->EnableMaximizeModeWindowManager(false);
+ EXPECT_TRUE(IsBrightnessViewVisible(tray.get()));
+}
+
+} // namespace internal
+
+} // namespace ash
+