diff options
author | jonross@chromium.org <jonross@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-17 19:35:38 +0000 |
---|---|---|
committer | jonross@chromium.org <jonross@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-17 19:35:38 +0000 |
commit | aaecf7935d3227893f11d1d92d371ee9188412cf (patch) | |
tree | e6ebb8acf886e4d720b5a717da28e4fbf0ee4bd1 /ash/system | |
parent | 16f765c6a6c3e147a47193afcc757dfd58a1b4a6 (diff) | |
download | chromium_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.cc | 167 | ||||
-rw-r--r-- | ash/system/chromeos/brightness/tray_brightness.h | 7 | ||||
-rw-r--r-- | ash/system/chromeos/brightness/tray_brightness_unittest.cc | 107 |
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 + |