| 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..afb38955224afc5c3fc6a8d8948de6281db9e1f9 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();
|
| }
|
|
|
| // 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,60 @@ 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* system_modal_container)
|
| + : system_modal_container_(system_modal_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(system_modal_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(system_modal_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
|
|
|