Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(30)

Side by Side Diff: athena/system/status_icon_container_view.cc

Issue 863033002: Delete athena/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « athena/system/status_icon_container_view.h ('k') | athena/system/system_ui_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "athena/system/status_icon_container_view.h"
6
7 #include "athena/resources/athena_resources.h"
8 #include "athena/system/network_selector.h"
9 #include "base/bind.h"
10 #include "base/macros.h"
11 #include "base/strings/stringprintf.h"
12 #include "base/strings/utf_string_conversions.h"
13 #include "chromeos/dbus/dbus_thread_manager.h"
14 #include "chromeos/dbus/power_manager/power_supply_properties.pb.h"
15 #include "chromeos/dbus/power_manager_client.h"
16 #include "chromeos/dbus/update_engine_client.h"
17 #include "chromeos/network/network_state.h"
18 #include "chromeos/network/network_state_handler.h"
19 #include "chromeos/network/network_state_handler_observer.h"
20 #include "chromeos/network/network_type_pattern.h"
21 #include "extensions/shell/common/version.h"
22 #include "ui/aura/window.h"
23 #include "ui/base/resource/resource_bundle.h"
24 #include "ui/gfx/image/image.h"
25 #include "ui/gfx/image/image_skia.h"
26 #include "ui/gfx/image/image_skia_operations.h"
27 #include "ui/views/controls/image_view.h"
28 #include "ui/views/controls/label.h"
29 #include "ui/views/layout/box_layout.h"
30
31 namespace athena {
32 namespace {
33
34 views::Label* CreateLabel(SystemUI::ColorScheme color_scheme,
35 const std::string& text) {
36 views::Label* label = new views::Label(base::UTF8ToUTF16(text));
37 label->SetEnabledColor((color_scheme == SystemUI::COLOR_SCHEME_LIGHT)
38 ? SK_ColorWHITE
39 : SK_ColorDKGRAY);
40 label->SetAutoColorReadabilityEnabled(false);
41 label->SetSubpixelRenderingEnabled(false);
42 label->SetFontList(gfx::FontList().DeriveWithStyle(gfx::Font::BOLD));
43 return label;
44 }
45
46 } // namespace
47
48 class StatusIconContainerView::PowerStatus
49 : public chromeos::PowerManagerClient::Observer {
50 public:
51 PowerStatus(SystemUI::ColorScheme color_scheme,
52 views::ImageView* icon)
53 : color_scheme_(color_scheme),
54 icon_(icon) {
55 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
56 this);
57 chromeos::DBusThreadManager::Get()
58 ->GetPowerManagerClient()
59 ->RequestStatusUpdate();
60 }
61
62 ~PowerStatus() override {
63 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
64 this);
65 }
66
67 private:
68 const gfx::ImageSkia GetPowerIcon(
69 const power_manager::PowerSupplyProperties& proto) const {
70 // Width and height of battery images.
71 const int kBatteryImageHeight = 25;
72 const int kBatteryImageWidth = 25;
73
74 // Number of different power states.
75 const int kNumPowerImages = 15;
76
77 gfx::Image all = ui::ResourceBundle::GetSharedInstance().GetImageNamed(
78 (color_scheme_ == SystemUI::COLOR_SCHEME_LIGHT)
79 ? IDR_AURA_UBER_TRAY_POWER_SMALL
80 : IDR_AURA_UBER_TRAY_POWER_SMALL_DARK);
81 int horiz_offset = IsCharging(proto) ? 1 : 0;
82 int vert_offset = -1;
83 if (proto.battery_percent() >= 100) {
84 vert_offset = kNumPowerImages - 1;
85 } else {
86 vert_offset = static_cast<int>((kNumPowerImages - 1) *
87 proto.battery_percent() / 100);
88 vert_offset = std::max(std::min(vert_offset, kNumPowerImages - 2), 0);
89 }
90 gfx::Rect region(horiz_offset * kBatteryImageWidth,
91 vert_offset * kBatteryImageHeight,
92 kBatteryImageWidth,
93 kBatteryImageHeight);
94 return gfx::ImageSkiaOperations::ExtractSubset(*all.ToImageSkia(), region);
95 }
96
97 bool IsCharging(const power_manager::PowerSupplyProperties& proto) const {
98 return proto.external_power() !=
99 power_manager::PowerSupplyProperties_ExternalPower_DISCONNECTED;
100 }
101
102 // chromeos::PowerManagerClient::Observer:
103 virtual void PowerChanged(
104 const power_manager::PowerSupplyProperties& proto) override {
105 icon_->SetImage(GetPowerIcon(proto));
106 }
107
108 SystemUI::ColorScheme color_scheme_;
109 views::ImageView* icon_;
110
111 DISALLOW_COPY_AND_ASSIGN(PowerStatus);
112 };
113
114 class StatusIconContainerView::NetworkStatus
115 : public chromeos::NetworkStateHandlerObserver {
116 public:
117 explicit NetworkStatus(views::Label* label) : label_(label) {
118 chromeos::NetworkStateHandler* handler =
119 chromeos::NetworkHandler::Get()->network_state_handler();
120 handler->AddObserver(this, FROM_HERE);
121 }
122
123 ~NetworkStatus() override {
124 chromeos::NetworkStateHandler* handler =
125 chromeos::NetworkHandler::Get()->network_state_handler();
126 handler->RemoveObserver(this, FROM_HERE);
127 }
128
129 private:
130 void Update() {
131 std::string status = "<unknown>";
132 chromeos::NetworkStateHandler* handler =
133 chromeos::NetworkHandler::Get()->network_state_handler();
134 const chromeos::NetworkState* network = handler->DefaultNetwork();
135 if (!network) {
136 network = handler->ConnectedNetworkByType(
137 chromeos::NetworkTypePattern::NonVirtual());
138 }
139 if (network) {
140 status = base::StringPrintf(
141 "%s (%s)", network->ip_address().c_str(), network->name().c_str());
142 }
143 label_->SetText(base::UTF8ToUTF16(status));
144 }
145
146 // chromeos::NetworkStateHandlerObserver:
147 virtual void DefaultNetworkChanged(
148 const chromeos::NetworkState* network) override {
149 Update();
150 }
151
152 virtual void NetworkConnectionStateChanged(
153 const chromeos::NetworkState* network) override {
154 Update();
155 }
156
157 virtual void NetworkPropertiesUpdated(
158 const chromeos::NetworkState* network) override {
159 Update();
160 }
161
162 views::Label* label_;
163
164 DISALLOW_COPY_AND_ASSIGN(NetworkStatus);
165 };
166
167 void StartUpdateCallback(
168 chromeos::UpdateEngineClient::UpdateCheckResult result) {
169 VLOG(1) << "Callback from RequestUpdateCheck, result " << result;
170 }
171
172 class StatusIconContainerView::UpdateStatus
173 : public chromeos::UpdateEngineClient::Observer {
174 public:
175 UpdateStatus(SystemUI::ColorScheme color_scheme, views::ImageView* icon)
176 : color_scheme_(color_scheme),
177 icon_(icon) {
178 chromeos::DBusThreadManager::Get()->GetUpdateEngineClient()->AddObserver(
179 this);
180 chromeos::DBusThreadManager::Get()->GetUpdateEngineClient()->
181 RequestUpdateCheck(base::Bind(StartUpdateCallback));
182 }
183
184 ~UpdateStatus() override {
185 chromeos::DBusThreadManager::Get()->GetUpdateEngineClient()->RemoveObserver(
186 this);
187 }
188
189 // chromeos::UpdateEngineClient::Observer:
190 virtual void UpdateStatusChanged(
191 const chromeos::UpdateEngineClient::Status& status) override {
192 if (status.status !=
193 chromeos::UpdateEngineClient::UPDATE_STATUS_UPDATED_NEED_REBOOT) {
194 return;
195 }
196 int image_id = (color_scheme_ == SystemUI::COLOR_SCHEME_LIGHT)
197 ? IDR_AURA_UBER_TRAY_UPDATE
198 : IDR_AURA_UBER_TRAY_UPDATE_DARK;
199 icon_->SetImage(
200 ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(image_id));
201 }
202
203 private:
204 SystemUI::ColorScheme color_scheme_;
205 views::ImageView* icon_;
206
207 DISALLOW_COPY_AND_ASSIGN(UpdateStatus);
208 };
209
210 StatusIconContainerView::StatusIconContainerView(
211 SystemUI::ColorScheme color_scheme) {
212 const int kHorizontalSpacing = 10;
213 const int kVerticalSpacing = 3;
214 const int kBetweenChildSpacing = 10;
215 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal,
216 kHorizontalSpacing,
217 kVerticalSpacing,
218 kBetweenChildSpacing));
219
220 std::string version_text =
221 base::StringPrintf("%s (Build %s)", PRODUCT_VERSION, LAST_CHANGE);
222 AddChildView(CreateLabel(color_scheme, version_text));
223
224 AddChildView(CreateLabel(color_scheme, "Network:"));
225 views::Label* network_label = CreateLabel(color_scheme, std::string());
226 AddChildView(network_label);
227 if (chromeos::NetworkHandler::IsInitialized())
228 network_status_.reset(new NetworkStatus(network_label));
229
230 views::ImageView* battery_view = new views::ImageView();
231 AddChildView(battery_view);
232 power_status_.reset(new PowerStatus(color_scheme, battery_view));
233
234 views::ImageView* update_view = new views::ImageView();
235 AddChildView(update_view);
236 update_status_.reset(new UpdateStatus(color_scheme, update_view));
237 }
238
239 StatusIconContainerView::~StatusIconContainerView() {
240 }
241
242 bool StatusIconContainerView::OnMousePressed(const ui::MouseEvent& event) {
243 CreateNetworkSelector();
244 return true;
245 }
246
247 void StatusIconContainerView::OnGestureEvent(ui::GestureEvent* event) {
248 if (event->type() == ui::ET_GESTURE_TAP) {
249 CreateNetworkSelector();
250 event->SetHandled();
251 }
252 }
253
254 void StatusIconContainerView::ChildPreferredSizeChanged(views::View* child) {
255 PreferredSizeChanged();
256 }
257
258 } // namespace athena
OLDNEW
« no previous file with comments | « athena/system/status_icon_container_view.h ('k') | athena/system/system_ui_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698