Chromium Code Reviews| Index: athena/system/status_icon_container_view.cc |
| diff --git a/athena/system/status_icon_container_view.cc b/athena/system/status_icon_container_view.cc |
| index 30f2565d7756551f9e6b14cf1247431226fce49f..90e3906f751df1399c18edae8040fde702a88415 100644 |
| --- a/athena/system/status_icon_container_view.cc |
| +++ b/athena/system/status_icon_container_view.cc |
| @@ -2,12 +2,10 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| -#include "athena/main/debug/debug_window.h" |
| +#include "athena/system/status_icon_container_view.h" |
| -#include "athena/common/container_priorities.h" |
| -#include "athena/main/debug/network_selector.h" |
| #include "athena/resources/athena_resources.h" |
| -#include "athena/screen/public/screen_manager.h" |
| +#include "athena/system/network_selector.h" |
| #include "base/bind.h" |
| #include "base/macros.h" |
| #include "base/strings/stringprintf.h" |
| @@ -20,33 +18,33 @@ |
| #include "chromeos/network/network_state_handler.h" |
| #include "chromeos/network/network_state_handler_observer.h" |
| #include "chromeos/network/network_type_pattern.h" |
| +#include "extensions/shell/common/version.h" |
| #include "ui/aura/window.h" |
| #include "ui/base/resource/resource_bundle.h" |
| #include "ui/gfx/image/image.h" |
| #include "ui/gfx/image/image_skia.h" |
| #include "ui/gfx/image/image_skia_operations.h" |
| -#include "ui/views/background.h" |
| -#include "ui/views/border.h" |
| #include "ui/views/controls/image_view.h" |
| #include "ui/views/controls/label.h" |
| #include "ui/views/layout/box_layout.h" |
| -#include "ui/views/view.h" |
| -#include "ui/views/widget/widget.h" |
| +namespace athena { |
| namespace { |
| -views::Label* CreateDebugLabel(const std::string& text) { |
| +views::Label* CreateLabel(const std::string& text) { |
| views::Label* label = new views::Label(base::UTF8ToUTF16(text)); |
| label->SetEnabledColor(SK_ColorWHITE); |
| - label->SetBackgroundColor(SK_ColorTRANSPARENT); |
| - label->SetFontList(gfx::FontList().Derive(-2, gfx::Font::BOLD)); |
| + label->SetAutoColorReadabilityEnabled(false); |
| + label->SetFontList(gfx::FontList().DeriveWithStyle(gfx::Font::BOLD)); |
| return label; |
| } |
| -class PowerStatus : public chromeos::PowerManagerClient::Observer { |
| +} // namespace |
| + |
| +class StatusIconContainerView::PowerStatus |
| + : public chromeos::PowerManagerClient::Observer { |
| public: |
| - PowerStatus(views::ImageView* icon, const base::Closure& closure) |
| - : icon_(icon), closure_(closure) { |
| + explicit PowerStatus(views::ImageView* icon) : icon_(icon) { |
| chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver( |
| this); |
| chromeos::DBusThreadManager::Get() |
| @@ -96,20 +94,17 @@ class PowerStatus : public chromeos::PowerManagerClient::Observer { |
| virtual void PowerChanged( |
| const power_manager::PowerSupplyProperties& proto) OVERRIDE { |
| icon_->SetImage(GetPowerIcon(proto)); |
| - if (!closure_.is_null()) |
| - closure_.Run(); |
| } |
| views::ImageView* icon_; |
| - base::Closure closure_; |
| DISALLOW_COPY_AND_ASSIGN(PowerStatus); |
| }; |
| -class NetworkStatus : public chromeos::NetworkStateHandlerObserver { |
| +class StatusIconContainerView::NetworkStatus |
| + : public chromeos::NetworkStateHandlerObserver { |
| public: |
| - NetworkStatus(views::Label* label, const base::Closure& closure) |
| - : label_(label), closure_(closure) { |
| + explicit NetworkStatus(views::Label* label) : label_(label) { |
| chromeos::NetworkStateHandler* handler = |
| chromeos::NetworkHandler::Get()->network_state_handler(); |
| handler->AddObserver(this, FROM_HERE); |
| @@ -136,8 +131,6 @@ class NetworkStatus : public chromeos::NetworkStateHandlerObserver { |
| "%s (%s)", network->ip_address().c_str(), network->name().c_str()); |
| } |
| label_->SetText(base::UTF8ToUTF16(status)); |
| - if (!closure_.is_null()) |
| - closure_.Run(); |
|
sadrul
2014/08/21 18:44:30
This was necessary to make sure the widget and the
pkotwicz
2014/08/21 21:57:16
Yes I checked
|
| } |
| // chromeos::NetworkStateHandlerObserver: |
| @@ -157,7 +150,8 @@ class NetworkStatus : public chromeos::NetworkStateHandlerObserver { |
| } |
| views::Label* label_; |
| - base::Closure closure_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(NetworkStatus); |
| }; |
| void StartUpdateCallback( |
| @@ -165,10 +159,10 @@ void StartUpdateCallback( |
| VLOG(1) << "Callback from RequestUpdateCheck, result " << result; |
| } |
| -class UpdateStatus : public chromeos::UpdateEngineClient::Observer { |
| +class StatusIconContainerView::UpdateStatus |
| + : public chromeos::UpdateEngineClient::Observer { |
| public: |
| - UpdateStatus(views::ImageView* icon, const base::Closure& closure) |
| - : icon_(icon), closure_(closure) { |
| + explicit UpdateStatus(views::ImageView* icon) : icon_(icon) { |
| chromeos::DBusThreadManager::Get()->GetUpdateEngineClient()->AddObserver( |
| this); |
| chromeos::DBusThreadManager::Get()->GetUpdateEngineClient()-> |
| @@ -189,158 +183,59 @@ class UpdateStatus : public chromeos::UpdateEngineClient::Observer { |
| } |
| icon_->SetImage(ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
| IDR_AURA_UBER_TRAY_UPDATE)); |
| - if (!closure_.is_null()) |
| - closure_.Run(); |
| } |
| private: |
| views::ImageView* icon_; |
| - base::Closure closure_; |
| DISALLOW_COPY_AND_ASSIGN(UpdateStatus); |
| }; |
| -// Processes user input to show the detailed network-list. |
| -class DetailViewHandler : public ui::EventHandler { |
| - public: |
| - explicit DetailViewHandler(aura::Window* container) : container_(container) {} |
| - virtual ~DetailViewHandler() {} |
| - |
| - private: |
| - // ui::EventHandler: |
| - virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE { |
| - if (event->type() == ui::ET_MOUSE_PRESSED) { |
| - debug::CreateNetworkSelector(container_); |
| - event->SetHandled(); |
| - } |
| - } |
| - |
| - virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE { |
| - if (event->type() == ui::ET_GESTURE_TAP) { |
| - debug::CreateNetworkSelector(container_); |
| - event->SetHandled(); |
| - } |
| - } |
| - |
| - aura::Window* container_; |
| - |
| - DISALLOW_COPY_AND_ASSIGN(DetailViewHandler); |
| -}; |
| - |
| -class DebugWidget { |
| - public: |
| - DebugWidget() : container_(NULL), widget_(NULL) { |
| - CreateContainer(); |
| - CreateWidget(); |
| - |
| - CreateBatteryView(); |
| - CreateUpdateView(); |
| - CreateNetworkView(); |
| - |
| - UpdateSize(); |
| - } |
| - |
| - virtual ~DebugWidget() {} |
| - |
| - private: |
| - void CreateContainer() { |
| - athena::ScreenManager::ContainerParams params("DebugContainer", |
| - athena::CP_DEBUG); |
| - params.can_activate_children = true; |
| - container_ = athena::ScreenManager::Get()->CreateContainer(params); |
| - } |
| - |
| - void CreateWidget() { |
| - views::Widget::InitParams params; |
| - params.type = views::Widget::InitParams::TYPE_WINDOW_FRAMELESS; |
| - params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; |
| - params.activatable = views::Widget::InitParams::ACTIVATABLE_NO; |
| - params.accept_events = true; |
| - params.bounds = gfx::Rect(200, 0, 100, 105); |
| - params.parent = container_; |
| - widget_ = new views::Widget(); |
| - widget_->Init(params); |
| - |
| - event_handler_.reset(new DetailViewHandler(container_)); |
| - |
| - const int kHorizontalSpacing = 10; |
| - const int kBorderVerticalSpacing = 3; |
| - const int kBetweenChildSpacing = 10; |
| - const int kBackgroundColor = SkColorSetARGB(0x7f, 0, 0, 0); |
| - views::View* container = new views::View; |
| - container->SetLayoutManager( |
| - new views::BoxLayout(views::BoxLayout::kHorizontal, |
| - kHorizontalSpacing, |
| - kBorderVerticalSpacing, |
| - kBetweenChildSpacing)); |
| - container->set_background( |
| - views::Background::CreateSolidBackground(kBackgroundColor)); |
| - container->SetBorder(views::Border::CreateSolidBorder(1, kBackgroundColor)); |
| - container->set_target_handler(event_handler_.get()); |
| - widget_->SetContentsView(container); |
| - widget_->StackAtTop(); |
| - widget_->Show(); |
| - |
| - widget_->SetBounds(gfx::Rect(600, 0, 300, 25)); |
| - } |
| - |
| - void CreateBatteryView() { |
| - views::View* container = widget_->GetContentsView(); |
| - views::ImageView* icon = new views::ImageView(); |
| - container->AddChildView(icon); |
| - container->Layout(); |
| - |
| - power_status_.reset(new PowerStatus( |
| - icon, base::Bind(&DebugWidget::UpdateSize, base::Unretained(this)))); |
| - } |
| - |
| - void CreateNetworkView() { |
| - views::View* container = widget_->GetContentsView(); |
| - container->AddChildView(CreateDebugLabel("Network:")); |
| - |
| - views::Label* label = CreateDebugLabel(std::string()); |
| - container->AddChildView(label); |
| - container->Layout(); |
| - |
| - network_status_.reset(new NetworkStatus( |
| - label, base::Bind(&DebugWidget::UpdateSize, base::Unretained(this)))); |
| - } |
| - |
| - void CreateUpdateView() { |
| - views::View* container = widget_->GetContentsView(); |
| - views::ImageView* icon = new views::ImageView(); |
| - container->AddChildView(icon); |
| - container->Layout(); |
| +StatusIconContainerView::StatusIconContainerView(aura::Window* popup_container) |
| + : popup_container_(popup_container) { |
| + const int kHorizontalSpacing = 10; |
| + const int kVerticalSpacing = 3; |
| + const int kBetweenChildSpacing = 10; |
| + SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, |
| + kHorizontalSpacing, |
| + kVerticalSpacing, |
| + kBetweenChildSpacing)); |
| + |
| + std::string version_text = |
| + base::StringPrintf("%s (Build %s)", PRODUCT_VERSION, LAST_CHANGE); |
| + AddChildView(CreateLabel(version_text)); |
| + |
| + AddChildView(CreateLabel("Network:")); |
| + views::Label* network_label = CreateLabel(std::string()); |
| + AddChildView(network_label); |
| + network_status_.reset(new NetworkStatus(network_label)); |
| + |
| + views::ImageView* battery_view = new views::ImageView(); |
| + AddChildView(battery_view); |
| + power_status_.reset(new PowerStatus(battery_view)); |
| + |
| + views::ImageView* update_view = new views::ImageView(); |
| + AddChildView(update_view); |
| + update_status_.reset(new UpdateStatus(update_view)); |
| +} |
| - update_status_.reset(new UpdateStatus( |
| - icon, base::Bind(&DebugWidget::UpdateSize, base::Unretained(this)))); |
| - } |
| +StatusIconContainerView::~StatusIconContainerView() { |
| +} |
| - const gfx::Rect GetPositionForSize(const gfx::Size& size) { |
| - int right = container_->bounds().right(); |
| - int x = right - size.width(); |
| - return gfx::Rect(x, 0, size.width(), size.height()); |
| - } |
| +bool StatusIconContainerView::OnMousePressed(const ui::MouseEvent& event) { |
| + CreateNetworkSelector(popup_container_); |
| + return true; |
| +} |
| - void UpdateSize() { |
| - views::View* container = widget_->GetContentsView(); |
| - container->Layout(); |
| - gfx::Size size = container->GetPreferredSize(); |
| - widget_->SetBounds(GetPositionForSize(size)); |
| +void StatusIconContainerView::OnGestureEvent(ui::GestureEvent* event) { |
| + if (event->type() == ui::ET_GESTURE_TAP) { |
| + CreateNetworkSelector(popup_container_); |
| + event->SetHandled(); |
| } |
| +} |
| - aura::Window* container_; |
| - views::Widget* widget_; |
| - scoped_ptr<PowerStatus> power_status_; |
| - scoped_ptr<NetworkStatus> network_status_; |
| - scoped_ptr<UpdateStatus> update_status_; |
| - scoped_ptr<ui::EventHandler> event_handler_; |
| - |
| - DISALLOW_COPY_AND_ASSIGN(DebugWidget); |
| -}; |
| - |
| -} // namespace |
| - |
| -void CreateDebugWindow() { |
| - new DebugWidget(); |
| +void StatusIconContainerView::ChildPreferredSizeChanged(views::View* child) { |
| + PreferredSizeChanged(); |
| } |
| + |
| +} // namespace athena |